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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

: }( I$ g, e% I- I) X5 ?4 e3 @! h' g+ \- C: R! n3 J& E
5 c; r/ v8 y6 o

4 U, `3 N7 Z6 K% @+ V: |
* b! `7 g' I5 X% q8 Q; f+ n* |! s图1
  e, \% U4 W7 o) B) J* T' B; h! c1 X9 l3 K. X( b1 i  N7 {( J
1 ~) @; _* z" k" u" G7 N, G9 _8 p1 l4 Z
一、代码架构! u8 C* l  F1 w+ z, Y/ c
  飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。
: T7 J% Y4 f4 V- }9 S2 ]; [
/ O# ?2 x5 H- C; x+ Q
, y# {. ]; W/ H9 I( y图2
0 S# [1 K3 m* {4 K, o  各个组的具体的代码功能如下表所示。
8 h; l5 Z# X5 Z$ ~% P5 ~5 M
! f9 X, {$ O% b* |6 k. c  y2 @4 q 8 L+ `  S5 L* Y8 R! O8 j& o5 w/ `
表1. u2 v/ ]. Y; c9 w9 A% _
3 `! d. d" _/ P# o. f
二、代码走读
$ c. z( F2 x+ o; U, O) o: q
: K1 z. l) S! M% ]) V  N' M$ b  系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。
* P9 S  s( s3 B1 Y. ?. r
' E. r1 ~  u! ^- o $ t* g3 ~3 O! w% |) [8 F
图3/ |7 \5 Z2 e$ J
  系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。1 ~: n% x5 _) B/ _
# U! s( y7 M, N: }# ?. b
! Q- U/ e, {$ H9 o, l+ B
图4: q7 H: B1 l  M3 g: \* B
  分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。* h- T, _/ r, I+ o+ m- X3 s# X
  整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。
, Y! F: F# `* Z" [) [- p) u" G+ Q+ x2 j

" w, M7 ~' z7 f6 h1 p+ U图5) V* K3 M- y- [: F1 M% X
  其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。
( b+ v2 V# D9 A( q# c  a
% c. S: [. r9 r4 k. l$ K/ h
3 X& E3 P4 W4 m' f: ~图6
/ c* F" g7 V. H3 _- d& B& ^( s5 P. \9 U$ m
; l& m8 f0 B+ M6 i. A3 u4 i
图7$ J6 T6 {( C" q, D8 t# ~

' m2 ]! _/ E' I9 l& i
( R3 m( S9 f" K0 H$ z. z6 K) H( p图8! L, Y0 w8 @& {$ p1 V7 n1 ]2 g
0 l" R* G/ E# u3 h( Z& K3 m# k  E
0 _9 Y4 w8 C$ V+ ^- V
图9
2 |. S$ c# x8 R! U; x5 O, R$ e$ G+ j7 I

$ p7 g3 U& z4 B; I5 X* K8 I; Z0 Y图10
" j# A- i" B$ |0 a9 T3 F1 c6 C( l: t$ U& {* }

3 O, V4 i) p6 y5 Q2 h! ]图11
6 u* Z0 \# j3 u2 R* [6 H. w
0 \  ^0 E" H+ `' t( a
) t9 I5 B1 D0 `8 {/ f4 i图12  \: e8 R' P9 Y& _! `4 Q0 g
, s# U8 i' C( ]- y

3 \! A2 J5 o! ^3 H: Z6 Z; h0 p* n图130 q! t% {/ s+ Z

: c4 V  V% X, z6 S + J! B7 S. N+ B7 p9 x) z/ C
6 x6 K' k& ?1 Q7 E0 T3 c- M
图14
* A8 X/ p5 d/ ?: |  三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。, W, g, k# E' |! v% K$ r+ x

( Y% L  s; ]7 U8 L' g $ K" G8 S, }0 ]2 a
1 ?/ g  K: ^! t7 T$ C

6 j. I* e/ a; A图15" B( j! L, W# v& F7 p! j6 N
  PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。
9 y( v* Q" u2 s$ w  IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。1 }8 T; `5 ]5 `) s7 \6 [; M, [8 L5 I! g

+ X/ }2 ~  g. \* H2 J0 A# ]) P- n
8 ]! Z* _9 j1 l  工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。+ G/ |3 s, F$ B% e/ Y
  此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
% G, `0 l3 i: P) ]8 C$ d  保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。4 o1 C8 B$ z! }$ |) U1 H+ w( H. a

7 X/ s0 @* l4 t; g% Q& @( G
9 T) L' W: E/ C& H. S图16+ a3 E7 K- A) R# `$ p* ~; y% U. e% O
( G& }1 i( @& u3 J7 v' O
5 K7 k+ K5 q3 k9 G5 m) w) D
, B9 K" L3 ]( T- N) j; p! Z" l
  a, k& U2 |* @- y

1 j( j; d8 x2 i8 N2 A; C更多完整学习资料和对应开源套件,请登陆官网:“疯壳”& `& i- o: t0 D8 ?

& K% I/ H' G: k: \0 ]5 J/ {如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系) E1 {% a4 Z' Y
" Y" D4 B. B6 K3 u3 d, [
文件下载请点击: 【1】飞控整机代码走读、编译与烧写.pdf (1.17 MB, 下载次数: 1) . Z2 D, j  _7 w4 I) R0 N
, l1 B- N0 r; M( D1 c: `) u8 |

# x8 K! D- E. `4 a) u; W& s3 b- ~4 d

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-25 20:43 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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