第四章:PX4启动流程
PX4飞控系统从上电到起飞的完整流程可概括为:1)Bootloader完成硬件初始化并加载主程序;2)NuttX操作系统启动任务调度;3)rcS脚本初始化参数系统、uORB消息总线和传感器驱动;4)核心模块(状态估计、控制器等)依次启动;5)Commander模块进行预飞检查;6)解锁后建立控制闭环,通过EKF融合传感器数据实现稳定飞行。整个过程体现了PX4分布式、模块化的实时系统架构,各功能模块
PX4 从上电到起飞经历了什么?——不看代码的系统级全流程认知
这篇文章不贴源码、不讲函数细节,而是从系统架构视角梳理 PX4 从上电到起飞到底经历了什么
帮你建立“脑海中的流程图”,真正理解 PX4 是如何活起来的
一、上电瞬间:Bootloader 阶段
当飞控上电(插电池或 USB),第一段运行的并不是 PX4 主程序,而是 Bootloader
Bootloader 做了什么?
-
初始化最基础硬件(时钟、Flash、串口)
-
检查是否需要:
-
进入固件升级模式(如 QGC 刷固件)
-
进入 DFU 模式
-
-
校验主固件完整性
-
跳转到主程序
如果固件损坏,系统会停留在 Bootloader,不会进入 PX4
二、进入 PX4 主程序:NuttX 启动阶段
PX4 在大多数飞控(如 Pixhawk)上运行在 NuttX 实时操作系统 之上
所以接下来是 RTOS 的启动流程
NuttX 做了什么?
-
初始化:
-
中断系统
-
内存管理
-
任务调度器
-
驱动框架
-
-
创建 idle 任务
-
启动第一个用户空间进程
然后执行:
/etc/init.d/rcS
这才真正进入 PX4 世界
三、rcS 脚本:PX4 真正“活起来”的开始
rcS 可以理解为 PX4 的“开机启动脚本”
它的作用类似 Linux 里的 /etc/rc.local
rcS 做的几件大事
1、加载参数系统
-
从 SD 卡读取参数
-
没有就加载默认参数
-
建立参数服务(param)
参数系统是 PX4 的“全局配置数据库”
2、启动 uORB 消息总线
uORB 是 PX4 的核心通信机制
可以把它理解为 PX4 的“神经系统”
所有模块之间都通过 uORB 发布 / 订阅消息
3、启动传感器驱动
rcS 会根据板卡配置启动:
-
IMU
-
陀螺仪
-
加速度计
-
磁力计
-
气压计
-
GPS
-
电调输出
-
PWM
驱动启动后:
-
读取底层数据
-
发布 uORB 话题(如 sensor_accel)
4、启动核心模块
依次启动:
-
commander(状态管理)
-
estimator(状态估计)
-
mc_att_control(姿态控制)
-
mc_pos_control(位置控制)
-
navigator(任务导航)
-
mavlink(通信)
至此,PX4 主要“功能器官”全部就位
四、系统稳定阶段:等待解锁
此时飞控已经:
-
所有任务正在运行
-
传感器持续发布数据
-
EKF 正在融合状态
-
MAVLink 正在和地面站通信
但此时飞机不能起飞
因为:
系统还未 ARM(电机未解锁)
五、Commander:系统状态大脑
PX4 的核心状态机模块是:
commander
它负责:
-
解锁逻辑
-
飞行模式切换
-
安全检查
-
失控保护
-
电池监测
-
预飞检查
解锁前会做什么检查?
包括:
-
传感器是否正常
-
陀螺仪是否校准
-
磁罗盘是否正常
-
GPS 是否可用
-
EKF 是否收敛
-
电池电压是否安全
-
油门是否归零
全部通过才允许 ARM
六、ARM 解锁那一刻发生了什么?
当你:
-
遥控器打杆
-
或 QGC 点击解锁
Commander 状态机切换为:
ARMED
发生几件关键事情:
-
输出允许电调工作
-
mixer 开始输出 PWM
-
电机开始怠速旋转
-
控制回路正式闭环
但此时仍未起飞
七、起飞前的控制链条
当你推油门(或自动起飞):
控制数据流如下:
遥控器输入
↓
uORB 发布 manual_control_setpoint
↓
commander 处理飞行模式
↓
姿态/位置控制器
↓
姿态控制(角速度 PID)
↓
混控 mixer
↓
PWM 输出
↓
电机转速变化
八、EKF 状态估计在做什么?
PX4 使用:
EKF2
融合:
-
IMU
-
GPS
-
气压计
-
磁罗盘
输出:
-
位置
-
速度
-
姿态
-
偏航角
所有控制器都依赖 EKF 输出
如果 EKF 不健康:
Commander 会拒绝解锁
九、起飞瞬间:闭环控制生效
当油门超过起飞阈值:
-
thrust > 重力
-
姿态控制保持水平
-
位置控制保持高度
此时飞机真正离地
系统进入:
Flying
飞行阶段开始
十、从系统角度看完整流程图
上电
↓
Bootloader
↓
NuttX 启动
↓
rcS 脚本执行
↓
参数加载
↓
uORB 初始化
↓
驱动启动
↓
核心模块启动
↓
EKF 开始融合
↓
Commander 等待解锁
↓
ARM
↓
控制器闭环
↓
起飞
十一、本质理解:PX4 是什么结构?
从架构角度看,PX4 是:
RTOS
↓
任务(模块)
↓
uORB 消息总线
↓
发布/订阅
↓
控制闭环
它不是一个“主循环程序”
而是:
多任务并行 + 消息驱动架构
十二、总结
1、PX4 是模块化系统
-
每个功能是一个独立任务
-
通过 uORB 通信
-
彼此低耦合
2、启动顺序非常重要
-
先驱动
-
再估计
-
再控制
-
最后解锁
顺序错了系统无法工作
3、真正的核心三件套
-
commander(状态机)
-
EKF2(状态估计)
-
控制器(PID)
PX4 从上电到起飞,本质是一个“从硬件初始化 → 任务并行启动 → 状态估计收敛 → 安全检查通过 → 控制闭环建立”的渐进过程
它不是“启动一个程序”,而是:
让一个分布式实时系统逐步进入稳定可飞状态
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)