crazyai 发表于 2022-11-15 23:11:29

来自中移物联网社区的OnePilot飞控

大家好,我是芯板坊小编。最近小编看《无线电》杂志第九月刊时候,发现了一个叫OnePilot的飞控项目;然后顺藤摸瓜地摸到了中移物联网社区;发现竟然有人用麒麟座mini板子DIY了一个飞控。
小编搜了一下,原作者是在Paparazzi UAV项目的基础上开发的。而Paparazzi UAV项目使用的是GPL协议(GNU GENERAL PUBLIC LICENSE,一种只要沾上一点就要免费共享的协议)。于是小编就无耻地把文章给“盗”过来了,免费开源给大家(没给作者稿费)。原作者现在心情很平静,愿意等小编先跑出39米再动手。
小编想在晚饭里加两只鸡腿,这样才有力气跑得快一些。老板表示,鸡腿跟小编文章的阅读数挂钩,每100个阅读,加一个鸡腿。

项目背景
这个故事源自送板狂魔——云汉电子社区。作者在云汉试用频道申请了一块开发板,叫麒麟座OneNet Mini,它来自中移物联网社区。成功拿到OneNet Mini板子后,他基于OneNet Mini的硬件做了个飞控开发项目,命名为One-Pilot飞控,上面跑的是改写过的Paparazzi UAV飞控程序。Paparazzi UAV飞控是个开源项目,简称PPZ,包含了飞控硬件和软件。PPZ程序支持的飞控硬件很多,除了官方公布的几个飞控硬件版本以外,还支持NAZE32飞控、CC3D飞控、OpenPilot飞控和PX4飞控等。虽然PPZ支持的硬件很多,但是PPZ的代码从来没有对OneNet Mini做过适配。然而,需求还是有的,电子社区的小伙伴们都急等着看OneNet Mini变成飞控。
正巧,那个作者也是Paparazzi Hyper X飞控的作者,对PPZ的开源项目比较熟悉。硬件上,OneNet Mini板子的主控芯片是STM32F103CBT6,也刚好符合PPZ的最小硬件需求。因此,他做了这个设计,基于OneNet Mini开发了OnePilot飞控的硬件,然后对PPZ飞控固件的代码做了修改,使其可以运行在OnePilot上。

OnePilot飞控简介
硬件介绍
OnePilot硬件的基本特性如下:

[*]STMicro STM32F103CBT6 微处理器
[*]MPU6050陀螺仪、加速度计
[*]HMC5883L 磁力计
[*]MS5611气压传感器
[*]Ublox GPS
[*]一路电池电压采集
[*]两路UART
[*]一路I2C
[*]一路PPM信号输入
[*]四路PWM信号输出
[*]板载4颗LED用于飞控状态显示
[*]板子IO接口的规划见下表。比如PA2和PA3是串口2,用来接GPS模块



需要注意的是,硬件上确实已经接入了HMC5883L磁力计和MS5611;然而实际使用时发现如果要实现完整的飞控算法,正好少了1kb空间,导致代码无法烧入;所以我在实际使用的程序里去掉了磁力和气压部分的代码。目前的算法是这样的,海拔参数只从GPS获取,不对气压计数据做融合;另外机头方向通过GPS航向获得,然后输入航姿系统。
虽然STM32F103CB的FLASH略小,不能使用完整的多传感器姿态融合算法,但至少还是能把基本的该有的功能都实现,比如航姿、自稳、导航。如果大家想进一步深入地学习飞控开发,建议使用性能稍微好一点的板子,比如STM32F4Discovery板子。
实物展示
作者在地面站上把飞控程序代码编译测试了一下。程序调通时候截了一张图,如图 1所示。这次先被测试编译的是个控制四旋翼的程序。编译过程无报错、无警告。


图 1 使用PPZ地面站编译飞控代码

传感器使用了GY-86模块,如图 2所示。这个小模块包含了3轴陀螺仪、3轴磁场计、3轴加速度计和气压计。


图 2 GY-86模块
板子烧上飞控固件并上电以后,可以看到板子正面从左往右第3个绿灯LED4是亮着的,如图 3所示。这个是AHRS算法的指示灯,板子上电后闪烁,姿态解算成功后保持常亮。


图 3 板载LED

如果把传感器板向左滚转,电脑上的地面站的PFD显示飞机的姿态,地面(褐色)在左边,天空(蓝色)在右边。PFD叫做主飞行显示器,显示飞机的倾斜程度,如图 4所示。


图 4 左滚时的姿态输出
上图中大片黑色的是飞机位置在地图上的显示,正常情况下应该是类似高德导航那样的。之所以显示黑色,只是因为谷歌地图被GFW墙了,图像暂时没下载到。这个其实对实际的航线飞行没有影响的,因为对飞控来说,只要有坐标数据就行了。我们把飞行路线上的控制点称为航点,如图 5所示:


图 5 航点图

如果把传感器板向右滚转,电脑上的PFD显示如图 6所示。


图 6 右滚时的姿态输出

如果把传感器板向前滚并低头,电脑上的PFD显示如图 7所示,已经看不到天空了(蓝色),视野里面全是大地(褐色)。


图 7 低头时的姿态输出
如果把传感器板向后拉并扬起头,电脑上的PFD显示如图 8所示


图 8 抬头时的姿态输出

飞控开发小结
这个OnePilot飞控的开发过程非常顺利。因为作者并不是从头做一个飞控,而是在PPPZ的开源基础上修改完成的。姿态和导航算法都是原版PPZ的代码。硬件上,主控板OneNet Mini完全归功于中移物联网。作者只负责做硬件和软件的接口规划,然后把各个模块连接起来。OnePilot项目对原版PPZ项目的贡献有如下几点:
1 添加了中移物联网麒麟座OneNet Mini开发板的支持,并做了一个机体配置例子。
2 在MPU6050和HMC5883L的驱动接口的开源代码的基础上添加了超廉价的GY-86模块的程序接口。
3 添加了超廉价的天地飞7通道遥控接收器的程序接口。
综上所述,对OnePilot飞控贡献最大的是中移团队和PPZ团队。
芯板坊小编的话
这个OnePilot飞控的作者(徐珂靖)只是个默默无闻的海边玩耍的宝宝,拾到几个贝壳,然后串起来做了个项链;然后芯板坊小编也只是个默默无闻给大家推送有趣新闻的宝宝。所以,如果这篇文章对大家有帮助,请不要谢芯板坊。如果大家要感谢,请谢谢伟大的GPL开源协议,以及PPZ团队和中移团队吧。

tanxiao 发表于 2022-11-15 23:23:31

转发了
页: [1]
查看完整版本: 来自中移物联网社区的OnePilot飞控