今天开始,我们将陆续为大家连载task00的系列文章,《企鹅带你飞:Linux飞控全解》。 作者简介 task00,资深全栈工程师,15年数字、电子、IT从业经历,精通嵌入式软、硬件开发。入飞机坑5年有余,近3年来业余从事Linux飞控开发、无人机系统整合工作。联系方式: QQ 3101986056
连载一
1 Linux飞控概览 1.1 为何选择Linux 从硬件上来说,目前常见的飞控厂家,使用的基于cortex-M4内核的单片机(如STM32F4处理器,168MHz主频,带有单精度浮点运算单元),硬件性能已经完全满足稳定飞行的要求了。而我们如果想添加其他对处理器性能要求更高的上层业务,如图像识别处理,仅仅是f4处理器就捉襟见肘了,那么就需要更高性能的高主频多核处理器。 从软件来说,飞控可以裸奔,也可以上操作系统。比如早期的apm、mwc就是无操作系统,Pixhawk使用nuttx,Autoquad使用CoOS等等。 Linux飞控的计算资源一般都是GHz的ARM多核处理器、512M的内存,带有硬件浮点和单指令多数据DSP。不同厂家的SoC产品中,还带有GPU或RPU,分别可以完成图像编码、硬件PWMI/O控制等功能。目前常见的两款Linux单板机价格不超过500人民币,就可以获得接近PC的桌面电脑体验。
(以上数据通过官网收集,如有错误敬请指正)
可以看到,目前流行的这两款linux单板机从硬件配置及设计上来说,性能都是很吸引人的,若能应用于飞控系统,会是一个更优的选择。 当然,SoC芯片的复杂程度与MCU相比,肯定是量级上的区别。如果企业对飞行控制的可靠性要求很高,同时飞控软件从基础构架到飞行任务控制都可以自己实现,那么就没有必要使用Linux系统。但是对广大中小厂商或者独立开发者来说,使用Linux作为飞控系统的基础架构,为功能为先的系统设计带来的便利和成本优势却是非常明显的:
1.2 解决Linux实时性 有一个大多数人都会质疑的问题是,Linux作为非实时系统如何来运行飞控程序、满足飞机的操控要求呢?标准的Linux内核只能满足软中断的要求,为用户控件提供简单的Posix操作,在spinlock、irq上下文方面无法抢占,因此高优先级任务被唤醒到得以执行的时间并不能完全确定;同时,Linux kernel本身也无法处理优先级反转。 由此我们可以引入Realtime Preemption patch(简称RT-preempt)这个补丁,RT-Preempt Patch是在Linux社区kernel的基础上,通过Ingo Molnar、Thomas Gleixner等主要开发者的贡献,使得内核获得了硬实时的能力。RT-Preempt patch在业界已经获得了广泛的关注,它简洁的设计和向主线整合的目标使得它成为硬实时应用程序的有趣选择,而Linux飞控的系统实时问题也就有了解决办法。 拥有了RT-Preempt patch的Linux,可以运用于有实时需求的产品,国外厂商EMLID对基于实时补丁的Raspbian系统做了测试,通过cycylictest测试工作,默认创建了1个SCHED_FIFO策略的realtime线程,跑100W个循环: sudo cyclictest -l1000000 -m -n -a0-t1 -p99 -i400 -h400 -q 得到的非实时内核的Raspbian系统与打了RT补丁后的Raspbian系统延时情况如下: PREEMPT #Min: 00013uS #Avg: 00023uS #Max:01153uS PREEMPT_RT #Min: 00011uS #Avg: 00023uS #Max: 00066uS
图3 系统延时直方图
可以看到,使用了RT patch的Raspbian系统最小延时为11uS,平均延时为23uS,最大延时为66uS,比较可知RT-Preempt patch对于系统的实时性能有了明显的提高,同时笔者自己测试的结果也表明RT-Linux可以保证系统调度延迟最差在150us。 上面的测试可以发现,Linux内核自带的RT补丁可以满足100us以内的最大延迟保证,这个0.1ms的计算调度能否满足飞控的需求,我们再来看一下飞控系统中的典型控制频率要求,如下表所示。 所以RT补丁的Linux单板机,只需要配合PWM输出控制方案,就可以完成现有飞控的任务需求。 1.3 部分Linux飞控方案 喜人的消息是,经过ArduPilot团队以及EMLID、Erle等厂商的努力,目前apm系列固件已可以完美运行在树莓派和BBB单板机上。早在2014年,Andrew Tridgell就进行了相关技术的发布,并已实现了稳定飞行。 APM on Linux: Porting ArduPilot to Linux https://www.youtube.com/watch?v=ealH3qP_pBE Flying with Linux https://www.youtube.com/watch?v=2Twl2mQAh6g 以上是Tridgell先后在2014、2015年的两次技术演讲,有兴趣的朋友可以自行上youtube观看。 前文讲过,目前流行的两款Linux单板机主要有树莓派和BBB, EMLID、Erle等厂商也有针对性的出品了几款扩展板。 (1)NAVIO2 Navio系列是Emlid公司于出品的基于树莓派的飞控,NAVIO2是最新版本。 图4 NAVIO2产品示意图(点击放大查看)
性能参数: -双IMU,MPU9250 and LSM9DS1 -优化的 MS5611 -ADC接口,I2C,UART,AUX SPI -过压保护供电方案 -PPMSBUS 接收机 图5 安装Navio2的四轴飞行器
Navio2官网地址:https://emlid.com/ Navio2文档地址:https://docs.emlid.com/navio2/ (2)PXFmini 在最开始Andrew Tridgell进行项目试验时,所使用的扩展板为基于BBB的Pixhawk Fire Cape(即PXF),该产品早期由Erle公司生产,目前产品线已停止。目前Erle公司主要产品为基于树莓的PXFmini(如下图所示)等。 图6 PXFmini产品示意图(点击放大查看) 性能参数:
-8路PWM输出 -PPMSUM输入 -1xUART, 2x I2C -JST GH connectors -MPU9250IMU -MS5611气压计 -PCA9685PWM driver -尺寸 31 x 73 mm;
图7 安装PXFmini的四轴飞行器(图中树莓为Zero版本) PXFmini官网地址:http://erlerobotics.com/ PXFmini文档地址:http://docs.erlerobotics.com/ (3)选择 上述两款产品无疑是较好的选择,我们再来看看价格。Navio2的板子价格为$168,然而真正要用的话,还需要购买他的GPS天线,价格是$12,不过板子自带一块M8N芯片,不必重复购置。所以Navio2最终价格是$180。 而PXFmini的板子价格为69(合$73),若与Navio2比较再配置一块M8N,那么PXFmini的最终价格基本会在$100左右。 Navio2目前支持的树莓有2B和3B两种版本,而PXFmini针对树莓Zero设计,可以适应更小的装机空间,也能减少造价,同时还支持2B、1B 、3等多种版本。 另外ROS(Robot Operating System)官方还与PXFmini有着深度合作,使用PXFmini可以无缝的进行ROS的开发,可以说是很不错的扩展,各位搞机器人的开发者或许可以尝试用用。 Navio2较PXFmini价格更为昂贵,将近$80左右差价,成本较高,而PXFmini灵巧的身段与更多的扩展性或许更能得到开发者的青睐。 (4)应用案例 应用Linux自驾仪我们可以做许多事,以下是从PXFmini官方节选的部分案例。
图9 安装Pi 0与PXFmini的天行者X5 图10 安装Pi 0与PXFmini的竞速艇(HobbyKing Pod Racer Boat520mm) 图11 安装Pi 2与PXFmini的水下机器人(BLUEROV) 看到这么多,你是否感觉到开源力量的强大,以及开源linux自驾仪的魅力所在呢?几百块人民币的Linux单板机,配合既有的GNU软件体系,就可以很容易的实现多功能的无人机系统,这将是一个更优、更友好、更好玩的方案。 还要悄悄告诉你,这种方案早已被商用了,Parrot的无人机已经使用ARM和Linux了,不信后面就教你用SSH登陆到bebop上看看 。 (未完待续) 源自:知控制
本文转载于微信公众号: 无人机(wurenji1),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|