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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
COCOFLY教程
——疯壳·无人机系列
飞控整机代码走读、编译与烧写

( J2 c9 A+ \; v4 M/ p2 @! V! }' M
3 B5 F* o* P% ~0 N' V" i! M( a3 Q0 q* j  D: E  i2 y

; V- Y2 T7 `) K$ b4 W8 r; t
4 O$ [2 }0 U5 |( X4 P图1
4 Y2 W4 P/ [: V9 \6 C, {& c9 F0 b; t

8 ^, w4 B- }. }" d$ C) o; K/ n一、代码架构( L" c! d7 Y6 `+ i- q0 L
  飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。/ e3 l; o7 q4 k- N

! B$ ^9 M; q; h& |- Z
  W6 J3 o6 I' Q4 n" w' j) j" _图20 m( S- _% N5 ?1 e- Y
  各个组的具体的代码功能如下表所示。' S6 V5 A9 K& z- P5 M" C( Y5 F
% |' [& x: b+ F
. O: @: M6 v* J
表16 r7 G1 Z2 p8 u. `
; P3 [0 }' i/ L9 l: u$ w! @3 u
二、代码走读" Q, f; A8 \- w8 \2 Y( X7 O
. H5 P7 V5 Y. K' T7 J
  系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。  i: w- \+ V& h9 o+ O2 F9 F
5 y7 b6 v3 x; v

( M! q& P  s$ j" K" Q图3( B& {, X; S& h& o$ `1 x; h
  系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。7 ~( K/ Q9 C& g, r& u: e: A
3 g9 ~. f6 z( b/ Y7 s' ~' \

4 M  m2 n& C# Z) H/ w8 q图4
0 a: V& ?9 G9 ?2 }& `2 ^) m  分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。4 E$ j  J/ K1 x# w: C; L2 C
  整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。
; _& D& ~; [% T: g* i2 s3 C  G' x

+ f/ ?" G% y) A2 }图5# Y5 T  y) |2 w( k( X, n' r& w
  其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。: R# ~* V9 G3 |( p3 O. t! S3 @% I( W) @

2 L! q( K/ W! X7 n3 Q( c  p/ h+ g * v) I  \6 D! Y4 O
图6
' b7 t0 {0 u* g/ [" C
1 y$ ~* N1 T4 ^; ?* h# n
1 J' I4 H; ^0 }# U% Y3 m) I图7
3 ]7 x, g, @6 Q5 m. \- q5 L* b. ]) o4 G1 }( Q5 Y

7 k# ^$ \6 ]2 S6 t9 j, A图8& m+ L6 H) n: F2 Q
8 V3 @. t& c8 n! W" y
; t. [2 `1 @5 N' t- J# C% E* q
图9
3 F% p1 F% ^- g# r& E4 A% d  ~
9 ]0 h2 b0 D1 H% a( W+ s " s" ^/ Y3 K) F! s, w1 Y9 t
图10
- v8 U+ B. E* V9 P( |2 D5 e# H  m2 h% }

. G1 {! V5 r5 n) w* q! g图11
! r; q$ H2 w& `
* V. h6 J$ o7 M9 i & t4 a3 X9 q0 z% k  F; G
图12
" J. f# J2 ~* H. s5 R# b  o- g0 @  g  V: d
1 ?; x4 P" n+ n  w
图13; c- B' n" n$ f; k0 b$ o9 \
7 o" V9 M7 B2 b; D$ e' _

# i4 F( v4 Y0 h0 j8 x: b! k7 h 6 W$ [# x$ H' G% I
图14
$ o4 u/ w/ c" ~4 P) ~  三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。
2 ?* H1 t! F7 g8 E
4 D) h7 N% V) I ( W$ @3 D* u2 d6 I. o; S/ Y4 M

% m; N9 A1 {- Y. ~* S7 R
' {& K7 l1 v+ g) S图15
9 W/ u9 q/ @5 S  PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。' O' t8 m% s/ P9 t' R3 P, z" n% c
  IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。+ o3 o% {) R6 V2 l
6 d$ \, E6 ?* q  s, z5 g6 e

; n( e2 }$ N9 E! }  工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。
% C/ I* {- f" A# X' S  |# e# K3 |, G  此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
$ _: ]+ c- `% L7 K" u- T$ e  保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。
' j' A( {' m4 n8 p- x* O
* V( k9 U8 s0 G
" F' ~  f2 F0 M* X图16
2 V8 l8 ?1 Q. Z4 K! O7 [: U9 k6 b$ [& n" u& _% `3 Q1 }' C

$ K5 ]( c' s8 u3 G
- Z" l8 A) ]5 U: M* L' a! l. J$ o5 Z+ F
: f$ w3 k+ \& d( _
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”) }/ V6 w6 o2 c

' t! Y& q7 q& S0 U5 E& R* a如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
. ~0 q( B, m, s. H/ r, b# M/ i) Z0 `/ i) @9 n) M" e6 |
文件下载请点击: 【1】飞控整机代码走读、编译与烧写.pdf (1.17 MB, 下载次数: 1)   w- f, B! m# V1 q. \
$ u: O9 V7 R2 g0 S

. _1 G9 L) }' e3 W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-29 04:40 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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