PX4 由两个主要部分组成:一是飞行控制栈(flight stack) ,该部分主要包括状态解算和飞行控制系统;另一个是中间件,该部分是一个通用的机器人应用层,可支持任意类型的自主机器人,主要负责机器人的内部/外部通讯和硬件整合,包含各种硬件驱动、uORB(Micro Object Request Broker 微对象请求代理)通信机制、MAVLINK协议等。如下图
其中uORB是PX4中进程间通信的重要机制,它是一种异步的消息传递 API,消息的供给者叫做 publisher,它可以发布一个消息主题(topic),消息的获取者叫做 Subscriber,进行信息交换的通道被称为 broker。publisher在发布消息前需要创建一个信息源。所有的进程都可以订阅/发布主题,并且会收到uORB 关于主题更新的通知。uORB 进程间通信过程如下图所示:
飞行堆栈是自主无人机制导、导航和控制算法的集合。它包括固定翼、多旋翼和垂直起降机身的控制器以及姿态和位置估计器。
下图显示了flight stack构建块的概述。它包含从传感器、RC输入和自主飞行控制(导航器)到电机或伺服控制(执行器)的完整通道。
NuttX是在飞行控制板上运行PX4的主要RTOS。它是开源的(BSD许可),重量轻,效率高,非常稳定。模块作为任务执行:它们有自己的文件描述符列表,但它们共享一个地址空间。任务仍然可以启动共享文件描述符列表的一个或多个线程。每个任务/线程都有一个固定大小的堆栈,并且有一个定期任务检查所有堆栈是否有足够的可用空间。
MAVLink是一种二进制遥测协议,专为资源受限系统和带宽受限链路设计。MAVLink主要有v1.0和v2.0两个版本,向后兼容(v2.0实现可以解析和发送v1.0数据包)。目前新版的PX4固件都是采用的2.0版本的协议,MAVLink2.0数据帧格式如下图