1 软件构架
-
PX4软件架构由两个层次组成:
-
一是飞行控制栈(flight stack),即自驾仪的软件解决方案,
-
二是中间件,一种可以支持任意类型自主机器人的通用机器人中间件。
2.1 中间件
中间件主要由嵌入式传感设备驱动,控制驱动,以及消息通信接口组成。除此之外,还引入了模拟层做各种模型模拟及仿真。
├──> 硬件驱动&适配
│ ├──> 飞控板硬件适配
│ ├──> 操作系统硬件适配
│ ├──> 传感&控制驱动适配
├──> 消息通信
│ ├──> uORB消息机制
│ ├──> MAVLink消息机制
│ ├──> RTPS/DDS消息机制
└──> 模拟器
├──> jMAVSim模拟
├──> Gazebo模拟
├──> Ignition Gazebo模拟
├──> FlightGear模拟
├──> JSBSim模拟
├──> AirSim模拟
├──> Multi-Vehicle模拟
├──> Failsafes模拟
├──> FHITL模拟
└──> SIH模拟
2.1.1消息总线 uORB
PX4软件架构的核心思想就是去耦合,所以消息中间件(uORB)处于整个框架图的中心位置。这样的设计是基本所有的大型软件系统的通用设计,比如ROS、ROS2。关于uORB详细分析,将在下一讲中详细描述。
2.1.2基础服务
1.任务管理
这部分在这个框图中没有体现,作为系统的基础服务,其接口在 platforms/common/include/px4_platform_common中申明
任务接口 platforms/common/include/px4_platform_common/tasks.h
工作队列接口 platforms/common/include/px4_platform_common/px4_work_queue
2.日志系统
px4的日志系统框架不同于apm,用户使用非常简单,日志系统会记录uORB消息,用户无需手动定义需要记录数据的格式,只需要正常定义uORB消息即可,APM记录日志会稍微麻烦一些,需要手动编写不少代码。当然方便的同时也有一定的灵活性不足的问题。
用户需要添加的新消息可在这个文件中添加需要记录的topic即可src/modules/logger/logged_topics.cpp
3.参数系统
PX4可以在任意模块目录下定义参数,在编译时由src/lib/parameters/px_generate_params.py脚本生成一个全局的参数源文件,生成在build目录中build/xxx/src/lib/parameters,可以在这里找到飞控所有的参数
2.1.3外部接口
1.mavlink
飞控与地面站和机载计算机、外部设备的主要通信协议
2.fast-rtps
一种实时可靠的分布式消息框架,应用于ROS2中作为消息中间件,在PX4中为高频消息传递提供了一个除了mavlink外的一个新的选择
PX4开发者文档中提供的描述 https://docs.px4.io/master/en/middleware/micrortps.html
2.1.4设备驱动与框架
PX4的设备驱动大致可以分为:
1.SPI/IIC设备
加速度计、陀螺仪、气压计、罗盘、RGB灯等
这两类设备类都会继承两个基类:
I2CSPIDriver类
在platforms/common/include/px4_platform_common/i2c_spi_buses.h文件中申明该类
用于获取总线相关参数,如总线类型、地址、频率以及定义设备id等等
device::I2C/SPI类
对于nuttx系统,在src/lib/drivers/device/nuttx中定义这两个类
这两个类定义SPI与IIC的总线操作方法,如总线初始化、读写接口
2.串口设备
GPS、部分定高雷达等
3.其他设备
包括adc、pwmin、pwmout、io
2.2 飞控代码
飞行控制栈是自主无人机的制导、导航和控制算法的集合。它包括固定翼、多旋翼和垂直起降机身的控制器以及姿态和位置估算。
2.2.1导航系统
导航系统使用各种传感器数据经过状态估计算法获取姿态、位置等状态数据,是PX4的核心算法。
状态估计的核心算法库位于 src/lib/ecl ; 它的主要作者为Paul Riseborough,他同时也是APM的AP_NavEKF2/3的主要作者。
2.2.2控制系统
1.任务系统
PX4的位置指令生成模块,包括:
- 控制指令 src/modules/commander
- 任务模式的控制(定高、定点、航线、返航、降落等模式)src/modules/navigator
2.位置与姿态控制器
内回路控制器,根据Vechile类型的不同(多旋翼、固定翼、小车、船、飞艇等)执行不同的位置和姿态控制器
- 多旋翼位置控制器 src/modules/mc_pos_control
- 多旋翼姿态控制器 src/modules/mc_att_control
- 多旋翼角速率控制器 src/modules/mc_rate_control
- 固定翼L1位置控制器 src/modules/fw_pos_control_l1
- 固定翼姿态控制器 src/modules/fw_att_control
- 垂起姿态控制器 src/modules/vtol_att_control
- 小车位置控制器 src/modules/rover_pos_control