找回密码
 注册
关于网站域名变更的通知
查看: 193|回复: 1
打印 上一主题 下一主题

【飞控开发高级教程1】疯壳·开源编队无人机-飞控整机代码

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-21 11:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
COCOFLY教程
——疯壳·无人机系列
飞控整机代码走读、编译与烧写
5 k2 Z. n2 \) P7 z* M7 `" ~
/ Z4 r/ n( t! P" J+ U

+ `, o% V( Y. r) b- r+ Z; _+ _* w" i

# ]( Z( \. @6 x  u2 F9 ?图17 ]8 d" k# o' D1 G9 j
% m3 k0 N+ |2 p4 K; E$ d
! E0 W6 d$ q, q/ q5 s
一、代码架构
' M, C* _, L; M" k; q  飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。& x6 @" k! y- h, y* j, b/ N
+ N: T3 b) j" c2 x

2 R- }# [( z/ O/ A5 p图28 ~. @" [$ v' O, @, ?. r+ x
  各个组的具体的代码功能如下表所示。3 q+ S2 q: a) n! X5 J

" }% s* V4 V  P6 M- ? ! n. f* F1 b9 r$ O7 A
表10 [' G8 b) A0 l* z+ X
* X; |# D! \" R) z
二、代码走读
9 v$ D4 e/ @8 z* X: O; j3 p
7 W  F9 t5 h; }9 F- M# b  系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。" `- [5 J' |- _$ D, |3 l% [

9 G' _2 w; O0 f' B; G! ~ ' s8 @$ N6 [5 K$ d$ l4 t2 m
图3
, ?* x. \6 f5 M* s) U6 W# A  系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。
  u$ p$ }2 i0 G( F( G6 {/ b* [6 N$ g4 Q7 E. B
$ c4 r  n6 ^# n/ d
图4( x: H7 q/ }9 e2 n" \
  分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。: I7 D0 H3 m9 U0 ^. b  w) H
  整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。  V6 i( J9 r* S+ s* M9 l  [) v
5 ^. P2 \/ H) T; N$ W+ R6 N
: F  `6 _& c+ e+ g6 f
图5
; t8 T( R* j( H; x( a+ K5 \7 E  其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。; ]( r' ?+ Z1 y  {7 g% N

) X# O" H3 I4 \8 @
5 @' D+ L+ D4 S0 g, {6 H; P图6( s; |. ~5 v$ U. D6 r
$ i' o8 g" ]5 C8 H# x
' k6 ]/ d/ Y+ t
图7
; n9 l, P6 g8 @6 a% V
4 D8 q7 g  D. c+ g3 O6 m) f- } - {2 z* T. y4 ]4 W( u8 P: v) R/ |/ F
图88 J7 H. n; L" g) p, u$ x
; j9 O& `7 u: r. D% ?: Y

& S, W3 g; k9 c( J1 H$ l图97 w, {# I" U  w1 v  C1 X; n

9 W4 S! D& Z. o8 I9 N5 e6 [ & |  `" Z$ m5 r) V, y/ h
图10  ]$ ]6 d4 |" l6 h8 t4 \

1 X' j$ P1 @* U6 k& f( k 8 V1 C; `3 \' {. a7 f7 ^. I6 F
图11
: C% o+ u! `1 X0 `5 n: p/ U, s
6 W5 a7 }5 p- ]& ~9 k0 z   {2 q! |' I0 B- p# D, F
图127 G1 L" N' x! _4 K
9 M/ x: t5 c" I% Q" G
: G7 Z5 z6 ?4 O
图13  Z* D3 D' {& n: R. d2 x

: a1 a2 S" P' T4 j
( y1 r2 L' ?$ k& i+ o2 Z' I
6 t; _4 `6 W1 w; Z2 P图14/ ]- |+ J4 h  ~, k* g7 M
  三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。
& y$ k: A7 ?. I% u
3 Z+ S4 i; q8 Y4 [4 k- X
& n" f' r5 E( D9 U/ G0 {. D
" Q( E1 k' p, h- q* n. a - j$ _8 ?& m* m  F; @7 v/ y
图15# R# Q9 z/ U! P* i0 L. }8 K" E
  PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。
3 A* X! M5 }- b) O# j  IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。
! L9 t( A' Z5 \' q* L9 j2 v
9 N3 Q4 U0 t! x% x. D, |) v
5 x6 o) T) W& Q  P2 D3 n; d  }# w  工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。
* {5 e) s! P+ j3 W8 v  此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
/ t6 a1 _7 q8 |  S. o2 P3 p# x  保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。2 P# r* ~- |. b, n) P$ k3 ?6 W
+ y, L! S1 E. |6 M! V- L

& K; a2 V1 j3 r# n3 i/ N* e图16$ F- ~. E. C3 Q) [2 o
# ?$ q) u& B3 f& X) a' f. j+ a

) y$ S3 b( g5 N' ]4 C
: a& _3 S6 S7 }' T1 ~8 y0 b' N. ~  H; q$ l

6 X9 N4 V% c  |+ i更多完整学习资料和对应开源套件,请登陆官网:“疯壳”/ T5 }! ^" \7 q3 Z6 `4 h9 T8 t! [
+ c8 d$ c0 y1 j' P
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系4 M. X! u2 c- @; x+ O
6 a- |2 A8 v! i6 m0 h8 y5 i" U3 v
文件下载请点击: 【1】飞控整机代码走读、编译与烧写.pdf (1.17 MB, 下载次数: 1)
5 z  Q8 t- }/ [+ z9 \! Q+ e5 a
* G/ B. j: }0 I. r3 L- y, v, W$ ^6 [# h. ]3 o

该用户从未签到

推荐
发表于 2022-7-21 13:32 | 只看该作者
看看,学习学习。多多交流技术上,或者使用上的问题。以解决问题为原则。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 01:16 , Processed in 0.078125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表