Uav开发杂记-2-无人机的RTOS

无人机是一个任务复杂度比较高的系统,如何高效稳定的进行任务管理和调度呢,使用RTOS实时嵌入式操作系统是一个非常理想的方案,这一篇我们聊一下无人机飞控使用的RTOS。

为什么使用RTOS

实际上很多专用飞控,比如一些型号无人机、飞航导弹等的控制系统,并不使用RTOS,这样的设计基于以下一些考虑:

  • 专用飞控一般使用模块化设计,比如使用外部组合导航模块,飞控本身更多进行飞机的控制,导航和决策层由外部组件完成,直接管理的传感器较少,因此任务复杂度不高

  • 专用飞控的任务明确,功能清晰,任务数量相对而言比较少,自行管理任务也可以保证实时性

  • 自行管理任务对系统的执行过程可以控制明确,没有线程切换,对于高可靠性和安全性的场合,更可控的代码还是更加重要

当然不使用RTOS也会存在一些问题:

  • 对于增加的每个任务的执行时间都需要有明确的把控,任何任务执行时间过长都可能导致其它任务出现超时、异常

  • 如果进行比较复杂的任务同步,阻塞、信号传递、内存管理等操作的难度会高一些,都需要自行管理维护

  • 随着任务系统的逐渐复杂,任务管理的难度会逐渐提高和稳定性也会降低

飞控使用RTOS的优点有哪些呢,根据上面的描述我们也能大概知道一些:

  • RTOS提供了线程管理、同步、通信、内存管理和中断管理功能,简化多任务的开发难度

  • RTOS的线程优先级管理机制可以保证线程稳定性和可靠性,比如高优先级的任务,不会因为低优先级任务的添加和修改导致出现异常(一般情况下是这样的)

  • RTOS的稳定性和安全性一般经过大量的验证,选用符合标准的RTOS可以保证稳定性

  • 对于提供完善bsp(板级支持包)的RTOS,可以简化代码的可移植性,更加方便的支持多硬件运行

一些开源飞控同样没有使用RTOS,比如cleanflight,它自己设计了一个任务调度机制,感兴趣的同学可以研究一下。

无人机使用的RTOS

无人机使用的RTOS都有哪些呢,专用飞控一般都保密就不讨论了,我们说一下开源飞控都使用哪些。

Nuttx

开源项目PX4使用的RTOS,大多数人了解这个RTOS是通过PX4了解的,它是一个非常优秀的RTOS,应用非常广泛。

近年来在国内也非常的活跃,小米的IOT生态就是基于Nuttx打造,关于小米为什么选用Nuttx,小米的IOT开发者官网给出了非常详细的解释,这也是Nuttx的主要特点,这里不复述了,直接上链接

https://iot.mi.com/vela/detail.html

值得一提的是NuttX对POSIX标准有原生兼容:NuttX是可商用化RTOS中唯一一个对POSIX API有原生支持的实时操作系统,所以很多Linux社区的开源软件可以很方便的移植到NuttX上,这样可以极大的简化开源软件移植,方便代码复用。

关于Nuttx后面计划出一个系列分享,欢迎持续关注公众号。

ChibiOS

开源飞控APM目前使用RTOS,这个RTOS设计者据说是因为不满当时现有的RTOS,于2007年发布了这一款RTOS。代码的优美性和一致性,以及内存的静态使用、确定性、强大的抽象功能,都是这个系统关键的特性。为了增强可靠性,整个内核本身是静态编译的,并且不需要一个动态内存分配器。

APM使用ChibiOS底层服务任务的调度,如串口、存储、RCIN、RCOUT、IO以及主任务的调度,应用层的任务都运行在主线程中,使用自己设计的无优先级的时间片轮调度方式。

FreeRTOS

LibrePilot使用的RTOS,这是一个使用非常广泛的RTOS内核,它提供了非常精简的实时内核,可以非常简单的移植到自己的系统之中。

值得一提的是FreeRTOS受到亚马逊的大力支持,是亚马逊物联网的重要组成部分

RT-Thread

这是一个非常优秀的国产开源RTOS,已经发展了十几年,这几年的发展十分迅速,它的特点是除了实时内核外还提供了非常丰富的中间件组件

RT-Thread 软件框架图

国内有不少团队在使用它开发飞控,我所了解的一个开源飞控为FMT,Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。

https://github.com/Firmament-Autopilot/FMT-Firmware

它还处于开发初期,功能还比较简单,大家可以持续关注。

当然还有很多优秀的RTOS,比如常用的uCOS,行业应用广泛的vxworks,以及随着物联网的快速发展,阿里腾讯华为推出的alios、TencentOS tiny、Liteos-a。

作为开发者,RTOS只是一个平台工具,更重要的是理解RTOS的基础思想,理解了线程管理、同步和通信的原理。

我的微信公众号,文章同步更新,欢迎关注。

微信公众号