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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
COCOFLY教程
——疯壳·无人机系列
飞控整机代码走读、编译与烧写
, E' U/ K8 N9 e/ G& p& i

. Q( {2 d# H3 [5 f; C5 A7 T/ J6 f7 m+ d: R. X5 B$ b

4 E6 N/ u4 p% w  { & b7 F' o( R% b% d5 G
图1
/ D! M' D3 ?& u. y3 |6 K' n- O- S& R% z% ^7 x

$ y6 E6 C4 i/ V' m% ^一、代码架构
9 d% P. j  i/ X, N) l7 ^  飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。
/ X: C1 G9 u0 n/ B1 m1 t8 S
" [& i! y9 g+ o0 [$ I
( E0 P5 w) J* D6 [, K# [3 b$ `图29 ]1 r8 f& ?0 b7 o, X- \2 V
  各个组的具体的代码功能如下表所示。( N( m5 Z, r) y; V' k% M" Z
- E% h9 d  z+ t  r$ A6 j

! Q& P# m& L8 w! {$ \表1$ ?: [2 G' T1 f+ [" f/ N

9 N* T7 Y+ `: j, {  }二、代码走读
$ @4 M. v4 x; p8 y" _( X' [+ J
  h7 D8 p' w2 d  系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。( S; _( E* l( W6 o8 s
, K8 M: g: L. j( v7 g8 `, {1 m

+ ?/ i, |* }  n) V6 [& s! }图3
, s* K! v* d! `/ W4 o) n7 X  系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。
. N5 s8 t& B% i' o" H5 D: s" }3 Z: F/ S( [) {+ g' e
  q+ u( C& ]+ e" K5 v& u
图4% }) ~! k3 J5 g. L7 H7 P
  分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。5 g1 @% k( X, A/ r% @" \
  整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。- f- A9 Q3 C8 T7 ^" _

6 d, H# Q! s$ e$ C- C 0 t2 C/ w+ ^2 s( O
图5
& |# }8 Y9 @& [) x  C  其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。
! H: t1 W2 Y3 x) f# h, o) A7 w. g1 {& N) X0 m5 F
2 C0 M% Y- R, T' [7 R0 s
图64 b% l0 N# z8 d, V

; \# U9 H' c- Z8 Z' A# v' M
$ s% F2 O, P4 a) k+ b图7
' ~0 `+ ~) N3 Q0 e1 O' R( r6 h& w* V  R  @* a4 e, r" s
- _; Y! C* e) O" X
图8
: N/ ~% J( C2 L
7 J' r) ~. Y, S% h - \8 L1 k% q  C0 e, f! v. t
图97 ?! O- \  X: s, _* c" D7 p. P
, a( Y4 X- m+ }) U

0 q( Q! J$ H4 V/ {图109 D. q" P5 o7 z; q' w
* X5 j& M9 a* d, O% F1 ^# j6 C

+ y5 Z! H" W2 t图112 L( f) t6 G$ A7 B- D
( r6 E9 h& w) D3 O

7 Z, ~: t3 c$ ?$ J# a& Z图12
1 M- E: t" i9 n5 o" X9 l" t* L+ P7 i* m0 b

" \7 D- \( p1 O9 g( A图13
9 O- a( x% R" B: r" K) e+ b, l+ F. g) ?5 e0 @$ G, h, C/ x) T3 r
9 F' ?, D) T# `$ E

7 m0 }, v- X1 T$ C7 Z6 P  }  C图14' D$ V- R2 U0 {# \- a4 I
  三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。2 L9 V' S" R6 a" Q0 ]
0 L. D8 `$ M3 }# k+ c6 U0 D7 k
. h5 D' @1 L$ b
! S1 T4 Y& x; o$ }1 `$ o
; m" [  q) a+ l
图15; o) i& g# o! L) z9 S- y
  PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。3 `2 @/ X& z: O. t
  IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。
( C, K' v4 ^  T) |+ y, F- ?' {! X4 t* z/ ~- o8 a
  T1 |: W/ p5 l2 E9 I7 o
  工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。+ b% c0 W& k( I  J
  此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
) R; q$ W+ x, G; f  保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。
$ w4 C5 z  H! I$ y1 p2 x# F* e) r* D1 W% W* d! A# p

  p/ x7 M  v1 ]3 c2 d图162 R  K. W: T1 ~" H6 `" f/ J% n
, v9 s, w1 m- F! s: X
7 T3 r! D& @5 N$ ?1 l5 a$ a
& K2 `$ v0 h! C" \& }2 d% i$ `6 x+ s

) _$ V5 C- N( a0 x1 |' ^' W4 P" r2 `4 S: r  G  C( [% R
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
% ^% Z! W! w2 f: r" |& x. ]9 @( E1 q5 ^7 t% ]+ q- a0 u
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系8 i" h% P. h9 k, r

1 }) N+ \+ Z6 [- \/ s0 ~/ f文件下载请点击: 【1】飞控整机代码走读、编译与烧写.pdf (1.17 MB, 下载次数: 1) $ w$ m: O5 P( M& q4 L: x6 G8 l
& P' }; O/ R( C1 N" `% D/ y
* r+ `8 `( P( M! ~" g' P

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 06:58 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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