MWC-MultiWii.cpp主程序理解

 转自:DF飞享屋MWC飞控主程序分析

原址:http://wenku.baidu.com/link?url=ED1AgT01-YOBN3wySGvx0VjkCdVjsdxpeYCeuyRoV8nPSrORTlLTiHjQxd1Z5Zg5lLU2rIquzjYyYCULVJM2SYHnnNQ9pARo8v2MXp1iVNq

这次分析的对象是 MWC2.3 版本。MWC主函数在“MultiWii.cpp”中。该cpp 文件共1345 行代码,从这个量中也能看出写的比较“灵活” ,2.3版相对于之前的版本已经进行过规范,已将一部分变量,结构体放在了“MultiWii.h”中。
1-554行是对一些变量,结构体,特殊函数进行定义。557-746是 setup 函数,748-1345是loop 主函数,中间一些衔接部分是空语句。
因此整个“MultiWii.cpp”已经被分为三个部分,关于变量,结构体,各种函数,数量比较大不建议单独了解,而要结合自己感兴趣的部分,或者元件进行了解。
在 loop 函数中遇到的第一个比较关键的判断出现在 783 行,进行是否进入 RC 部分的判断。用通俗一点的话来说,就是判断是否处理遥控器数据。判断内容是 RC 周期,0.02 秒,如果大于 0.02 秒则对遥控器数据进行一次处理。
RC 部分会一直到达 1087 行,这一部分详细内容以后在分析,大家只要知道这里是对遥控器数据进行处理就足够了。1089 行到 1127 又可以算作一部分,虽然很短,但这一部分对无人机要实现的功能进行了处理。这里写的逻辑蛮有趣的,用 taskOrder 这个静态变量扫描程序,而且一次循环只进行一个功能,而循环的顺序却被 taskOrder 保证了下来。这里的内容还是连接着具体程序理解比较好些。
第三部分是 1129 行的 computeIMU。没错就是这么简单的一行可以算作个部分,而且是比较关键的一部分。这里的函数是对姿态进行处理,获取无人机的姿态信息。姿态信息根据使用的描述方法不同可以是旋转矩阵,可以欧拉角度,可以是指数矩阵,可以是四元数,甚至可以不只是一种描述方法,通过卡尔曼滤波等进行数据融合。
  第四部分为 1131-1208 是对 ANGLE,MAG,BARO,GPS 四个功能进行实现。
第五部分为 1208-1345,这一部分是对控制器进行设定和计算,并将控制信号转化为PWM 电调信号,输出给电调进而控制电机或私服,输出部分的函数集中在 1341-1344 这几行中。
  总之,MWC 的 loop 主函数是比较清晰的,首先进行 RC(遥控器)判断,之后根据遥控器输出对各个部件(强磁计,气压计,GPS 等)进行数据处理,再后处理并更新姿态数据,执行功能,产生控制信号并输出给相应电机。


 详细分析请看原址。



你可能感兴趣的:(MWC-飞控,固件mwc2.3调试)