查看: 385|回复: 1

PX4软件架构和飞控系统概述

[复制链接]

24

主题

687

帖子

1350

积分

金牌飞友

Rank: 6Rank: 6

积分
1350
飞币
661
注册时间
2017-9-3
发表于 2022-10-26 13:43:56 | 显示全部楼层 |阅读模式
全文2167字,预计阅读时间4分钟
原创 | 沈佳豪

1.前言

翱翔蓝天是人类一直以来的梦想,随着科学技术的不断发展,时至今日这个梦想已经基本实现。与有人机相比,无人机凭借其可远程操控完成任务、不会对操纵员带来安全隐患等优点,得到了快速发展,其中最核心的部分就是无人机飞控系统。
广义上的无人机飞行控制是一个非常复杂的系统工程,包含传感器、机载计算机、伺服作动装置、地面站等模块及相应的软件程序和硬件设备。狭义上的飞控系统则指运行在无人机飞行控制板上的飞控程序。对于希望了解无人飞控系统的同学而言,较好的入门方式是首先学习目前现有的已经相对完善的飞控系统,在充分理解和掌握现有飞控系统的基础上,针对自己的需要进行设计和开发。
PX4由瑞士苏黎世联邦理工学院(ETH)计算机视觉与几何实验室的一个软硬件项目PIXHAWK演变而来,该飞控系统完全开源,为全球各地的飞控爱好者和研究团队提供一款低成本高性能的高端自驾仪。[1]经过来自工业界和学术界的世界级开发人员多年的开发与完善,目前PX4飞控系统已经形成完善合理的软件架构,可支持单旋翼、多旋翼、飞艇等多种载具。
本文将首先介绍PX4软件架构,包括中间层、飞行控制栈和运行环境,随后介绍无人机飞控系统架构。下图是Pixhawk 4实物飞控板,PX4可在其上运行。

PX4软件架构和飞控系统概述-1.jpg

图 1 Pixhawk 4飞控板[2]

2.PX4软件架构


PX4软件架构主要包括两部分,分别是:
·飞行控制栈(Flight Stack):用于估计和控制无人系统;
·中间层(Middleware):提供内部及外部的通信和硬件集成。
需要注意的是,针对各种载具机型,PX4都共用一个代码库,完整的系统设计是反应式的,这意味着:
·所有的功能都可分为可交换和可重复使用的;
·通信是通过异步通信完成的;
·该系统可处理大量工作。
下图展示的是PX4软件架构概述。

PX4软件架构和飞控系统概述-2.jpg

图 2 PX4软件架构[3]

实际运行中PX4信息传递十分复杂,上图箭头仅表明部分重要信号传递的方向,如参数更新的消息在多数模型中都有调用,而在上图中并未标出。图 2上半部分包括外部通信(External Connectivity)、存储(Storage)、驱动(Drivers)以及信息总线(Message Bus)就是PX4中间层的内容,而下半部分飞行控制(Flight Control)指的就是飞行控制栈。
其中飞控内部模块之间的通信使用订阅-发布机制,将其命名为微对象请求代理器(Micro Object Request Broker,uORB),其具有以下特点:
·系统是响应式的,即异步通信;
·所有的操作和通信都同步进行;
·系统组件可以以线程安全的方式使用来自任何地方的数据;
·这种结构使得即使是在运行的过程中,模块也可以方便地被替换或修改。
2.1中间层


除上图 2标示的中间层具有的存储、传感器驱动、与外部设备和内部模块间通信之外,中间层还包括仿真功能,可使PX4运行在桌面操作系统下,并控制仿真环境中的无人机模型,实现对飞控程序正确性的验证。
2.2飞行控制栈

飞行控制栈是无人器导航、制导与控制的集成,负责各种类型载具的控制与位姿估计,其结构框图如下所示。

PX4软件架构和飞控系统概述-3.jpg

图 3 飞行栈的结构框图[3]

其中:
·传感器(Sersors)包括板载IMU、GPS、气压计等模块,获取原始的无人机位置姿态信息;
·位置和姿态估计器(Estimator)接收一个或多个传感器的输入,它们进行融合并计算无人器的实时位置和姿态信息;
·控制器(Controller)将设定点和测量值或估计值作为输入,计算控制量使得无人器达到设定点;
·导航(Navigator)模块生成无人器参考轨迹;
·混控器(Mixer)将无人器的力和力矩分配至每个执行器,并且确保不超过其限度;
·执行器(Actuator)在传统多旋翼中即是旋翼动力单元,包括电子调速器、电机和螺旋桨三个部分,在其他类型的载具中可能还有起落架、舵面等其他类型执行器。
2.3运行环境


PX4可运行在提供POSIX-API的多种操作系统下(如Linux, macOS, Nuttx等),内部模块间通信的uORB机制基于共享内存,整个PX4中间层运行在单个地址空间下。
执行模块有两种不同的方式:
·任务(Tasks),模块在自己的任务中运行,具有自己的堆栈和进程优先级;
·工作队列(Work Queue Tasks),模块运行在一个共享的工作队列中,与队列上的其他模块共享相同的堆栈和工作队列线程优先级。
在工作队列上运行模块的优点是它使用更少的RAM,并可能导致更少的任务切换,缺点是不允许工作队列任务对消息进行休眠或轮询,也不允许执行阻塞IO(比如从文件中读取)。长时间运行的任务(执行大量计算)应该在单独的任务中运行,或者至少在单独的工作队列中运行。
3.飞控系统架构


正如本文开头所述,广义上的无人机飞行控制系统包含传感器、机载计算机、地面站、手持遥控器等设备。下图展示的是典型飞控系统结构。

PX4软件架构和飞控系统概述-4.jpg

图 4 典型飞控系统结构[4]

其中:
·飞行控制器(Flight Controller)在Pixhawk飞控板上运行PX4程序;
·传感器(Sensors,GPS,磁力计,气压计,光流等)通过I2C, SPI等与飞控连接,获取无人机位置姿态等原始数据;
·负载(Payload,如相机等)使用PWM或MAVLINK连接,执行特定任务;
·遥控数传(Telemetry Radio)连接到地面站,可在地面站上进行远程监控;
·手持遥控器(RC Radio)则用于手动发送控制指令;
·地面站(Ground station)常用的有QGC和MP,用于地面人员实时监视和控制无人机状态。
该系统结构较为简单,由于没有自主航迹规划、避障等功能,因此仅可实现自主起飞着陆、地面站发送的航路点飞行等较为简单的任务。
在无人机执行复杂任务时,往往需要其他性能更强的计算机辅助计算,运行如障碍物检测与避障、运动物体跟随,精确着陆等任务。此时,飞控系统与上位机的组成大致如下:

PX4软件架构和飞控系统概述-5.jpg

图 5 含上位机的飞控系统结构[4]

除与图 4相同的组件外,该系统结构还增加了用于分析处理复杂数据的任务计算机(Mission Computer),也可称之为上位机。
·上位机与飞控之间通常使用MAVLink协议进行通信;
·通常使用上位机与地面站或云端进行通信;
·上位机一般运行在Linux操作系统上。
▌总结

无人机飞行控制本身是一个复杂的系统工程,本文以PX4开源飞行程序为例,对PX4软件架构和无人机飞控系统架构进行介绍,基本理清了两者之间的关系和各自的组成部分。后续将深入研究PX4飞控程序,探究其启动流程和运行逻辑,并对其进行二次开发,敬请期待。



参考资料
[1]https://blog.csdn.net/qq_38768959/article/details/122473186
[2]http://docs.px4.io/master/en/flight_controller/pixhawk4.html
[3]http://docs.px4.io/master/en/concept/architecture.html
[4]http://docs.px4.io/master/en/concept/px4_systems_architecture.html
封面:https://blog.csdn.net/qq_38768959/article/details/122473186
<hr/>本文由西湖大学智能无人系统实验室工程师沈佳豪原创,申请文章授权请联系后台相关运营人员。
PX4软件架构和飞控系统概述
▌微信公众号:空中机器人前沿
▌Bilibili:西湖大学空中机器人
▌Youtube:Aerial robotics @ Westlake University
▌实验室网站:https://shiyuzhao.westlake.edu.cn

44

主题

705

帖子

1428

积分

金牌飞友

Rank: 6Rank: 6

积分
1428
飞币
694
注册时间
2017-9-19
发表于 2022-10-26 13:57:46 | 显示全部楼层
[爱]
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表