谈谈无人机飞控的软件设计(下)
作者头像
  • 金融快报
  • 2019-01-02 08:00:53 0

PX4飞控的软件设计——Pixhawk原生固件

开源PX4飞控系统较为复杂,许多软件细节笔者也不是非常熟悉,因此只能简要描述一下其架构。

PX4飞控系统从软件结构上可分为四个层次。每一层内的驱动程序或控制/估计算法都作为独立模块运行,彼此之间能够进行通信。这种模块化设计不仅有助于支持多种机型(因为没有特定机型的主循环),还提升了代码的可移植性。

1. 应用层

应用层是飞控系统运行的核心部分。在这里,大多数日常飞行所需的模块得以实现,包括姿态控制、状态估计、导航模块等,从而实现多旋翼和固定翼的自主飞行。应用层可以使用其他控制软件,如APM:Plane、APM:Copter,但必须建立在中间层之上。

2. 中间层

中间层位于操作系统之上,提供设备驱动和微对象请求代理(uORB),后者用于异步通信,即飞控系统内各任务之间的通信。

3. NuttX操作系统层

NuttX操作系统层为用户提供操作环境,负责底层任务调度。

4. 驱动层

驱动层提供系统运行所需的各种硬件驱动,如传感器和执行器。

uORB通信功能描述

在飞控系统中,应用层的所有功能都是以进程模块的形式实现,并且需要高效的进程间通信。为此,PX4飞控系统采用了uORB通信方式。

uORB(Micro Object Request Broker,微对象请求代理器)是飞控系统的关键组件之一,负责所有传感器数据、GPS信号和PPM信号的传输。实际上,uORB是一种跨进程的进程间通信(IPC)机制。

uORB的发布-订阅模式

uORB使用发布-订阅模式来实现跨进程通信。在这个模式中,一个“源”可以向多个“用户”广播消息,而“用户”不需要关心消息何时发出,只需要接收最新消息即可。这种方式避免了锁定问题,常用于机器人技术。uORB在NuttX系统中表现为一个简单的文件设备对象,通过Open、Close、Read、Write、Ioctl和Poll机制来实现数据交互。

发布/订阅机制示例

例如,传感器应用程序将传感器数据发送至姿态估计应用程序。这些数据通过命名总线交换,一个主题只包含一种类型的消息,如“vehicle_attitude”主题传递包含滚转、俯仰和偏航姿态角的消息。发布者和订阅者可以同时进行,主题对象在发生变化时会通知所有订阅者。

飞控中的优先级设计

飞控软件中,某些任务的优先级更高,主要包括遥控输入、传感器数据读取、姿态估计/控制等基本模块。以下是PX4飞控系统中的一些关键优先级:

  1. 快速传感器驱动程序
  2. 看门狗/系统状态监控
  3. 驱动器输入(PWM输入驱动器线程,IO通讯发送命令线程)
  4. 姿态控制器
  5. 更新速度较慢的传感器驱动程序(不能阻塞姿态控制器)
  6. 航路/位置控制器
  7. 默认优先级 - 通用用户代码,shell命令等
  8. 日志记录,参数同步程序
  9. 低优先级进程

飞控中的更新周期与延迟设计

飞控系统有两个重要的时间概念:更新周期和延迟。为了获得良好的系统性能,必须尽量减少延迟。通常情况下,延迟比更新周期更为关键,因为较大的延迟会导致相位偏移,进而产生错误的控制信号。

在设计时,除了考虑固定的更新周期外,还需要注意延迟的影响。例如,假设以100Hz的采样率读取传感器数据,姿态估计和控制也都是100Hz,那么每一步的最大延迟是10毫秒。

关于传感器读取、姿态估计和控制的设计,有不同的实现方式,例如分别设计三个循环或合并到一个循环中。不同方案可能会带来不同的效果,但具体优劣目前还没有明确结论,有待进一步研究。

测量函数运行时间

在飞控算法中,更新周期是一个重要的变量。如果算法是以固定周期运行,那么该变量的值就是设定的周期。此外,也可以通过代码来动态测量实际运行时间。这种方法可能更加准确,但固定周期运行的算法如果不出错,也是可行的选择。

希望以上内容能帮助你更好地理解PX4飞控系统的软件设计。

    本文来源:图灵汇
责任编辑: : 金融快报
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
飞控无人机谈谈设计软件
    下一篇