请考虑订阅 LWN

订阅是 LWN.net 的生命线。 如果您喜欢这些内容并希望看到更多,您的订阅将有助于确保 LWN 继续蓬勃发展。 请访问此页面加入我们,让 LWN 继续在网络上传播。

作者: Nathan Willis
2015 年 10 月 7 日
ELCE

在都柏林举行的 2015欧洲嵌入式 Linux 大会上,Lucas De Marchi 介绍了基于 Linux 的无人机领域的最新发展情况,包括近期的发展方向。

De Marchi 负责开发 ArduPilot 飞行控制软件包,这是 Dronecode 组织旗下的几个开源无人机项目之一。 他认为自己是无人机领域的新人,2014年底才开始ArduPilot的工作,但他说自己在实时嵌入式Linux方面有多年的工作经验。

[Lucas De Marchi]

无人机首先是硬件项目,无论它们是固定翼飞机设计还是四旋翼飞机(或任何其他旋翼设计)。 但无论哪种情况,基本的软件架构都是一样的。 飞行控制软件包(如 ArduPilot)的任务是让无人机保持在预定位置。 这需要监控一系列传感器(GPS、高度计、加速度计、陀螺仪、磁力计等)的输入。 飞行控制器的 "输出"(可以这么说)是操控无人机引擎的指令:控制电机的脉宽调制(PWM)、发送到 UART 或 CAN 总线控制器的指令等。 第三级输入是大多数无人机与地面控制站或遥控控制器之间的无线电链路,但这也是飞行控制器所担心的全部问题。

最新进展

无人机逐年发生的变化可能发生在硬件上,也可能发生在软件上。 在硬件方面,De Marchi 指出,第一版 ArduPilot 代码是在兼容 Arduino 的微控制器上运行的。 此后几年,所支持的电路板的复杂性不断提高,增加了更强的处理能力、更多更好(通常更快)的传感器和额外的内存。 更强大的电路板可以处理更多的传感器样本,同时也允许飞行控制器使用更复杂的算法来跟踪和绘制其位置。 ArduPilot 也不例外;随着它采用更复杂的定位算法,它已经达到了早期 Arduino 板的极限,最近不得不放弃对最早硬件版本的支持。

但基于微控制器的飞行控制器板已不再是唯一的选择。 ArduPilot 现在可以在几种小型 Linux 板上运行,并增加了一个用于连接传感器的子板。 对 BeagleBone Black 和 Raspberry Pi 的支持已经有一段时间了;在演讲过程中,De Marchi 切换到一个浏览器窗口,并提交了一个拉取请求,以正式添加对第三块板 MinnowBoard Max 的支持。

他说,从微控制器到Linux片上系统(SoC)板的转变意义重大,因为这标志着无人机行业已经超越了多年前的 "哑巴 "无人机。 他说,很多人都看过无人机在受控环境中执行复杂任务的视频,但一个不为人知的秘密是,这些演示中的大部分高级计算都是由一台单独的地面计算机完成的,该计算机通过无线电链路向无人机发送指令。 现在情况正在发生变化;通过在无人机上运行 Linux,无人机可以运行高级程序来执行计算机视觉(CV)、摄影、测量读数等。 最终,处理能力的提高将使基于 Linux 的无人机能够完全自主运行,而这正是大多数与无人机相关的未来预测所关注的重点。

将 Linux 应用于无人机还有一个很少有人预见到的副作用:无人机制造商开始利用标准的 Linux 功能。 例如,无线电控制链路不再是地面与无人机之间唯一的通信方式;越来越多的无人机通过在 WiFi 上运行的 SSH 进行操作。由于不需要额外的开发就能实现这种标准的 Linux 功能,因此它对大多数无人机项目来说都很有吸引力。

他说,另一方面,在 Linux 上运行的软件越复杂,管理所有进程的难度就越大。 如果运行 CV 程序的代价是让无人机升空,那就不好了。 这就是为什么许多使用 Linux 的无人机选择将传感器读取和无线电链路管理卸载到微控制器或运行实时操作系统(RTOS)的协处理器上。 认为 Linux 无法满足无人机飞行控制器的实时要求是一个严重的误解;许多无人机使用 PREEMPT_RT 补丁集,而 De Marchi 在标准内核上运行 ArduPilot 也没有问题。

他说,这种误解源于人们担心错过传感器读数定时器会导致无人机崩溃,但这是一种误解。 所有战斗控制软件都必须具备强大的鲁棒性,以应对传感器读数错过或读数不良的情况:读数会被缓冲,多个样本会被平均。 即使是实时操作系统(RTOS)飞行控制器也会遇到糟糕的读数和其他类型的错误;而无人机却能应付自如。

尽管如此,随着 Linux 无人机开始运行更复杂的高级软件,将重复性任务(如紧密的传感器读取循环)卸载到廉价的微控制器上,让 CPU 将宝贵的时间花在更需要 CPU 处理的事情上,往往是明智之举。

未来

De Marchi 预测,在不久的将来,Linux 无人机项目将面临越来越多的问题,其中之一就是如何将越来越多的处理器周期用于高级应用。 那些没有将传感器输入卸载到其他板卡上的项目可能会重写传感器支持,将其从用户空间转移到内核中。 用户空间的传感器读取需要直接通过 SPI 或 I2C 总线对传感器进行采样(这需要上下文切换),而且需要 ArduPilot(或其他飞行控制项目)编写传感器驱动程序并维护总线抽象层。

基于内核的解决方案将利用工业 I/O(IIO)子系统,Android 和其他移动 Linux 平台已经使用该子系统来处理传感器。 代码共享将减少无人机项目的工作量,不过它也有一个不幸的副作用,那就是使 ArduPilot 的 Linux 版本和微控制器版本出现分歧。 De Marchi 表示,鉴于 Linux 基金会宣布正式成立实时 Linux 项目,他希望 PREEMPT_RT 补丁集能很快进入主线内核。

未来的其他变化包括支持一系列新的传感器类型,如激光雷达、光流传感器和各种化学传感器。 这些新增功能大多是由高级应用驱动的,这也是 Linux 无人机行业日趋成熟的标志。 将 IIO 用于传感器还将使未来的无人机能够同时支持多个传感器(如冗余高度计或陀螺仪)。 这将使无人机具有更高的自主性,并能实现更复杂的飞行管理算法。De Marchi 还指出,当他的官方 MinnowBoard Max 拉取请求被合并后(几乎肯定会合并),ArduPilot 将首次增加对 x86 的支持。 随着机载处理能力的不断提高,新增更大的平台在未来可能会更加常见。

会议在听众的提问声中结束。 大多数人都对开始使用 Linux 无人机感兴趣。 看起来,"入门级 "无人机的成本要几百美元,这并不是个小数目,但随着人们对这一领域的兴趣日益浓厚,我们应该期待看到越来越多的选择进入市场,或许成本也会随之降低。

[作者感谢 Linux 基金会为参加欧洲嵌入式 Linux 大会提供的差旅费资助。

本文索引条目
会议欧洲嵌入式 Linux 大会/2015


(登录后发表评论)

Logo

更多推荐