PX4 无人机学习路线
1. 这份路线给谁
Section titled “1. 这份路线给谁”这份路线用于 PX4 方向入门,适合以下情况:
- 会一种编程语言,但不一定接触过飞控;
- 能使用基本的 Linux 命令;
- 以多旋翼为第一种机型;
- 最终希望具备仿真、飞控开发、伴随计算机开发和基础真机调试能力。
是否进入下一阶段只看验收项,不按固定时间推进。
这条路线不要求一开始把空气动力学、控制理论或 PX4 源码全部学完。先建立可运行、可观察、可解释的闭环,再按课题补充理论。
2. 完成路线后应具备的能力
Section titled “2. 完成路线后应具备的能力”完成主线后,应能独立完成:
- 说明飞控、地面站、仿真器、遥控器、伴随计算机之间的关系;
- 搭建 PX4 SITL + Gazebo + QGroundControl 环境;
- 在仿真中完成起飞、悬停、航点任务、返航和降落;
- 解释常见飞行模式、解锁检查和失效保护;
- 看懂 PX4 的模块、uORB、参数和 ULog 基本工作流;
- 编写一个简单的 PX4 模块或 MAVSDK 程序;
- 使用 ROS 2 与 PX4 通信,并在仿真中完成一次安全的 Offboard 控制;
- 按双人复核流程完成真机基础配置、无桨台架检查和首次飞行;
- 遇到问题时提交包含版本、复现步骤、日志和初步判断的调试记录。
3. 统一学习环境和版本
Section titled “3. 统一学习环境和版本”3.1 实验室基线
Section titled “3.1 实验室基线”优先复现实验室已有环境:
- PX4 v1.16.2;
- Ubuntu 22.04;
- Gazebo Harmonic;
- ROS 2 Humble;
- QGroundControl;
- Micro XRCE-DDS Agent v2.4.3;
px4_msgsrelease/1.16。
安装步骤参考 PX4 v1.16 Ubuntu 开发环境与Gazebo 仿真官方文档。
截至本文更新时,PX4 官方文档已将 v1.17 标为稳定版,但实验室现有指南使用 v1.16.2。入门阶段应先固定版本,不要混用 main、v1.17 和 v1.16 的命令、消息定义及依赖。需要升级时,应单独建立升级任务并重新验证整条工具链。
3.2 每份实验记录必须写明
Section titled “3.2 每份实验记录必须写明”- 操作系统和版本;
- PX4 Git 分支、标签和提交哈希;
- Gazebo、ROS 2、QGroundControl 版本;
- 飞控板型号和固件版本(涉及真机时);
- 实际执行的命令;
- 预期结果、实际结果和日志位置。
4. 学习方法
Section titled “4. 学习方法”每个阶段都采用同一个循环:
- 先理解:能画出对象及数据流;
- 再复现:按照文档完成最小示例;
- 做改动:改变一个变量,观察系统响应;
- 故障注入:在仿真中主动制造一个失败;
- 留证据:保存命令、配置、截图、代码和日志;
- 能讲清:不看教程向其他人复述原因和结果。
“命令运行成功”只代表开始;能解释数据从哪里来、为什么这样变化、失败后如何定位,才算真正过关。
5. 主线阶段
Section titled “5. 主线阶段”阶段 0:必要基础与安全意识
Section titled “阶段 0:必要基础与安全意识”- Linux:目录、权限、进程、环境变量、串口和网络端口;基础不足时先完成 Linux 工程实践学习路线;
- Git:clone、branch、checkout、status、diff、commit;
- 编程:Python 基础,能够阅读现代 C++;C++ 前置不足时先完成 C++ 机器人开发学习路线;
- 构建工具:了解 CMake、Make、编译和链接的区别;
- 数学:向量、矩阵、欧拉角、四元数的用途;
- 坐标系:NED、ENU、FRD、FLU,角度与弧度;
- 控制基础:反馈、设定值、测量值、误差、PID;
- 估计基础:IMU、磁力计、气压计、GNSS 和状态估计的作用;
- 多旋翼硬件:机架、飞控、电调、电机、螺旋桨、电源、遥控器、数传和 GNSS。
这些知识先学到“能识别和使用”,遇到控制、估计或驱动课题时再深入推导。
- 能说明姿态环、速度环和位置环的大致关系;
- 能解释坐标系混用为什么会让飞机向错误方向运动;
- 能说出解锁、上桨和真机测试前最重要的风险点。
阶段 1:认识 PX4 生态
Section titled “阶段 1:认识 PX4 生态”- PX4 Autopilot:运行在飞控或 SITL 中的飞行栈;
- QGroundControl:配置、任务规划、监控和日志下载;
- Gazebo:车辆和环境的物理仿真;
- MAVLink:飞控、地面站和外部程序之间的通信协议;
- MAVSDK:对 MAVLink 常见能力的上层开发接口;
- uORB:PX4 内部模块间的发布/订阅消息总线;
- ROS 2 与 uXRCE-DDS:伴随计算机与 PX4 交换消息的通路。
拿到一个故障描述时,能先判断问题更可能位于 PX4、Gazebo、QGroundControl、MAVLink 还是 ROS 2 链路。
阶段 2:先在仿真里飞起来
Section titled “阶段 2:先在仿真里飞起来”- SITL 与 HITL 的区别;
- PX4 的构建目标、机型和世界;
- QGroundControl 的连接、地图、飞行视图和任务视图;
- Takeoff、Position、Hold、Mission、Return、Land 等模式;
- 解锁前检查和模式切换条件。
- 能从全新终端独立启动整套环境;
- 能说明每个飞行模式依赖哪些状态估计或外部信号;
- 能在飞机不按预期行动时先停止任务,再查看状态和消息,而不是反复强制解锁。
阶段 3:配置、安全和日志
Section titled “阶段 3:配置、安全和日志”- 机架、传感器、遥控器、飞行模式和电源配置;
- 参数的名称、单位、默认值和版本差异;
- 电池、遥控链路、数传、位置和 Offboard 丢失保护;
- 地理围栏、返航和降落行为;
- ULog、QGroundControl 日志下载和 Flight Review;
- 振动、估计异常、控制饱和和设定值跟踪误差的基本判断方法。
真机日志可能包含位置和设备信息。上传到公开日志分析服务前必须确认可以公开;入门阶段优先使用仿真日志或经过批准的样例。
- 能区分“现象、证据、猜测和结论”;
- 能指出触发失效保护的条件、延时和最终动作;
- 不通过关闭解锁检查或失效保护来掩盖问题。
阶段 4:读懂 PX4 架构和源码
Section titled “阶段 4:读懂 PX4 架构和源码”- 飞行栈与中间件的职责划分;
commander、navigator、EKF2、各级控制器、控制分配和驱动的职责;- PX4 模块、任务和 Work Queue;
- uORB 发布/订阅;
- 参数、启动脚本、机型配置和板级配置;
- 从消息和模块反向追踪数据流的方法。
建议先认识这些源码目录:
PX4-Autopilot/├── src/modules/ # 飞行栈和系统模块├── src/drivers/ # 传感器与外设驱动├── msg/ # uORB 消息定义├── ROMFS/ # 启动脚本和系统资源├── boards/ # 板级配置├── Tools/ # 构建、仿真和开发工具└── test/ # 测试- 能解释一个模块如何启动、接收消息、运行并退出;
- 能沿着 uORB 主题找到数据生产者和消费者;
- 能在 SITL 中编译并运行自己的最小模块;
- 不直接把入门代码用于电机或执行器控制。
阶段 5:MAVLink 与 MAVSDK
Section titled “阶段 5:MAVLink 与 MAVSDK”MAVSDK 比直接处理 MAVLink 数据包更适合作为外部控制的第一步。先用 MAVSDK 完成常见任务,再根据项目需要学习 MAVLink 消息、命令、任务和参数微服务。
- MAVLink 的 system ID、component ID、消息、命令和心跳;
- 遥测流与需要确认的命令之间的区别;
- MAVSDK 的连接、Telemetry、Action、Mission 和 Offboard 接口;
- 异步程序、超时、重试、拒绝解锁和异常处理。
- 程序不会在连接未建立或状态不健康时直接解锁;
- 每个关键动作都有超时和失败分支;
- 能说明自己的代码最终触发了哪些 PX4 模式或 MAVLink 行为。
阶段 6:ROS 2 与 Offboard 控制
Section titled “阶段 6:ROS 2 与 Offboard 控制”进入本阶段前,应已经会使用 ROS 2 的工作空间、包、节点、topic、service、QoS、launch 和 colcon。如果这些概念还不熟,先完成 ROS 2 机器人开发学习路线 的对应阶段,不要直接在 PX4 工程中边猜边改。
- PX4 uXRCE-DDS client 与 Micro XRCE-DDS Agent;
px4_msgs与 PX4 固件消息版本的对应关系;/fmu/out/*、/fmu/in/*方向;- ROS 2 QoS 和消息频率;
- NED/FRD 与 ENU/FLU 坐标转换;
- OffboardControlMode、TrajectorySetpoint、VehicleCommand;
- Offboard 心跳、进入条件和链路丢失保护。
PX4 Offboard 模式要求外部控制器持续发送有效的“存活”信号。官方 v1.16 文档要求频率高于 2 Hz,并在信号中断后退出 Offboard。因此,节点设计必须把消息频率、超时和失效动作当作核心功能,而不是完成轨迹后再补。
- 能解释从 ROS 2 发布一个 setpoint 到 PX4 控制器接收它的完整路径;
- 能用工具证明消息是否到达、频率是否合格,而不是只看飞机是否移动;
- 节点异常退出后,飞机能按预设策略进入安全模式;
- 在仿真完成故障注入前,不把 Offboard 程序用于真机。
阶段 7:真机基础配置与首次飞行
Section titled “阶段 7:真机基础配置与首次飞行”首次上电、首次上桨和首次自主飞行必须执行现场双人复核,不得单人操作。复核时必须覆盖供电、接线、参数、失效保护、遥控接管和中止条件。
进入真机阶段前,团队必须完成并记录:
- 现役飞控、机架、遥控器、数传和伴随计算机清单已经确认;
- 飞行场地、空域和活动所需的审批或授权已经确认;
- 飞前检查表、停止条件、事故与失联处置流程已经批准;
- 飞手、观察员、现场负责人的职责和人员隔离区域已经明确;
- 机型、固件、参数、遥控链路和人工接管方式已经在仿真或无桨台架验证;
- 电池、消防、人员隔离和天气限制符合团队安全要求。
任一条件未满足时,只能继续仿真、HITL 或无桨台架实验,不进入上桨和飞行环节。
- 台架配置、刷写、校准和电机方向检查时必须拆除螺旋桨;
- 不用关闭解锁检查、传感器检查或失效保护来换取“先飞起来”;
- 每次参数、固件、接线或载荷变化都要留下记录并重新检查相关项目;
- 自主飞行前必须验证人工接管、Return、Land 和链路丢失行为;Kill/flight termination 只能先在仿真或无桨台架验证,不在首飞中主动触发。
- 核对机架、电机、电调、电源、飞控方向、GNSS、遥控器和数传接线;
- 不装桨上电,确认供电电压、电流、温度、传感器和通信正常;
- 刷写已批准版本的固件,选择正确机架;
- 完成传感器、遥控器、电源和执行器配置;
- 无桨检查电机序号、方向和急停或 flight termination 配置;
- 配置飞行模式、返航、地理围栏和各类失效保护;
- 完成飞前检查表,由第二人复核;
- 在合规、空旷、可控的场地进行低高度人工首飞;
- 降落后立即下载日志,确认振动、估计和控制状态;
- 基础飞行稳定后,再逐步尝试任务或伴随计算机控制。
- 能解释所有关键接线和参数的作用;
- 能在不上桨的情况下完成完整台架检查;
- 首飞记录包含检查表、环境、配置、飞手、观察员和日志;
- 任何异常都有明确的停止条件,不带病继续飞行。
阶段 8:选择专项方向
Section titled “阶段 8:选择专项方向”主线完成后选择一个方向深入,不要求同时学习全部内容。
A. 飞行控制与状态估计
Section titled “A. 飞行控制与状态估计”- 多旋翼动力学、级联 PID、前馈和滤波;
- EKF2、传感器噪声、创新量和故障判定;
- 控制器、轨迹生成和控制分配;
- ULog 分析、系统辨识、仿真回放和参数调优。
B. ROS 2、自主飞行与感知
Section titled “B. ROS 2、自主飞行与感知”- 外部定位、VIO、光流、深度相机和点云;
- 坐标变换、时间同步和传感器标定;
- 轨迹规划、避障、任务状态机和多机命名空间;
- 仿真到真机的延迟、频率和失效保护。
C. 飞控固件、驱动与硬件
Section titled “C. 飞控固件、驱动与硬件”- NuttX、任务调度、Work Queue 和内存限制;
- I2C、SPI、UART、CAN/DroneCAN;
- PX4 驱动框架、板级配置、启动脚本和外部模块;
- 硬件调试、性能分析和自动化测试。
D. MAVLink、地面站与任务系统
Section titled “D. MAVLink、地面站与任务系统”- MAVLink 消息和微服务;
- MAVSDK、任务上传、参数管理和相机/载荷控制;
- 多机连接、日志、网络和权限管理;
- 地面端状态机与异常恢复。
E. 固定翼或 VTOL
Section titled “E. 固定翼或 VTOL”- 固定翼气动与舵面;
- 空速、TECS、起飞、盘旋和降落;
- VTOL 转换逻辑和 Quad-chute;
- 对应机型的专用配置、调参与安全策略。
固定翼和 VTOL 不应直接沿用多旋翼的控制、场地和安全假设。
6. 阶段推进规则
Section titled “6. 阶段推进规则”- 阶段 0~1 建立安全意识和系统模型,通过验收后再进入飞行仿真。
- 阶段 2~3 的仿真、失效保护和日志分析通过验收后,再开始阅读源码和开发外部控制程序。
- 阶段 4~6 的 PX4 应用、MAVLink/MAVSDK 和 ROS 2 Offboard 可以按项目方向取舍,但所选链路必须完成故障注入和安全状态验证。
- 进入阶段 7 前,阶段 0~6 的相关验收必须完成,并具备合适真机、场地、双人复核和明确的中止方案。不满足条件时继续使用 SITL、HITL 和仿真故障注入。
- 阶段 8 只选择与实际需求相关的专项方向,不要求全部完成。
7. 自检标准
Section titled “7. 自检标准”每个阶段按下面四级判断:
| 等级 | 表现 |
|---|---|
| 未开始 | 不能独立复现,也说不清关键对象 |
| 已复现 | 跟随文档能完成,但遇到变化容易卡住 |
| 可独立 | 能从空环境复现、解释并处理常见失败 |
| 可交接 | 能把过程写成别人可复现的文档,并审查他人的结果 |
进入真机阶段前,阶段 0~3 至少达到“可独立”;承担某一专项任务前,对应阶段至少达到“可独立”。
8. 提问和故障记录模板
Section titled “8. 提问和故障记录模板”遇到问题时,不只发一张报错截图。至少提供:
目标:我想完成什么?环境:系统、PX4/Gazebo/ROS 2/QGC 版本和 Git 哈希复现:从干净终端开始执行了哪些命令?预期:应该看到什么?实际:实际现象和完整错误是什么?证据:终端输出、参数、日志、topic 频率、截图尝试:已经验证或排除了什么?判断:目前认为最可能的问题在哪一层?为什么?相关公开资料
Section titled “相关公开资料”- PX4 Gazebo 仿真安装指南:搭建与 PX4 v1.16.2 配套的 ROS 2、Gazebo 和 Micro XRCE-DDS 仿真环境。
以下早期项目记录可用于理解外部定位传感器与飞控的接入场景,但所用飞控、协议和软件版本不一定与当前 PX4 环境一致。
- 关于 T265 的使用:视觉里程计位姿数据与坐标信息参考。
- 关于 UWB 的使用:UWB 定位精度、数据协议和飞控接入参考。
9. 参考资料
Section titled “9. 参考资料”学习时优先使用与实验版本一致的官方文档,再参考论坛、博客和视频。旧教程中的 Gazebo Classic、Fast RTPS、ROS 1 或旧版启动命令不能直接套用到当前环境。