1. 这份文档讲什么
这份文档接着上一份硬件文档继续往下走。
目标是让一个完全新手,能够从零做到下面这些事:
- 安装地面站和 PX4 工具链
- 用
Pixhawk 6C Mini刷写和配置 PX4 - 完成基础首飞
- 学会
定高飞行和定点飞行 - 接入
机载电脑 - 用代码控制 PX4
- 做仿真
- 再把仿真迁移到实机
- 理解怎么替换雷达数据、替换定位数据、做多源定位
这里默认你使用的是:
- 四旋翼
Pixhawk 6C MiniPX4QGroundControl
2. 先理解几个核心概念
2.1 飞控负责什么
飞控负责:
- 传感器读取
- 姿态估计
- 位置估计
- 电机控制
- 飞行模式
- 失控保护
2.2 机载电脑负责什么
机载电脑负责:
- 跑 Linux
- 跑 Python / C++ 程序
- 跑 ROS 2
- 跑视觉算法
- 发控制指令给 PX4
- 给 PX4 提供外部定位数据
2.3 地面站负责什么
地面站 QGroundControl 负责:
- 刷固件
- 校准
- 看参数
- 看日志
- 设飞行模式
- 执行任务
3. 先给新手画一个整体架构图
你可以把系统理解成这样:
text
遥控器 / 地面站 / 机载电脑
|
数传/USB/串口/网口
|
Pixhawk 6C Mini
|
IMU/气压计/GPS/雷达/光流/电机
如果后面加视觉定位,则会变成:
text
相机/雷达/UWB
|
机载电脑(RPi/Jetson)
|
外部位置/速度/姿态数据
|
Pixhawk 6C Mini + PX4 EKF2
|
电机控制
4. 你需要准备的软件
建议环境如下。
4.1 地面站
QGroundControl
官方文档:
4.2 PX4 文档
4.3 仿真和开发环境
- Ubuntu 22.04 或更新版本
PX4 AutopilotGazeboMAVSDK- 可选
ROS 2
4.4 为什么推荐 Ubuntu 22.04
因为 PX4 当前主流仿真和 ROS 2 资料更集中在这个环境。
PX4 官方也说明 Gazebo 是 Ubuntu 22.04 及以后支持更好的方案:
5. 第一步:安装 QGroundControl
5.1 QGroundControl 是什么
它是 PX4 最常用的地面站。
你后面会用它完成:
- 刷写固件
- 机型配置
- 传感器校准
- 飞行模式设置
- 参数修改
- 电池设置
- 任务规划
5.2 安装完成后先不要做什么
先不要直接上电装桨测试。
你现在的目标是:
- 飞控能连上
- 固件能刷上
- 校准能完成
6. 第二步:给 Pixhawk 6C Mini 刷 PX4 固件
6.1 操作前注意
刷固件时:
- 飞机不要接动力电池
- 只通过 USB 连接电脑
- 螺旋桨不要装
6.2 刷写流程
在 QGroundControl 中:
- 打开
Vehicle Setup - 进入
Firmware - 用 USB 连接
Pixhawk 6C Mini - 选择
PX4 Pro - 选择稳定版固件
- 开始刷写
QGC 官方文档说明桌面版支持给 Pixhawk 系列刷 PX4:
6.3 刷完后检查
你应该能在 QGC 里看到:
- 飞控已识别
- 固件版本
- 传感器状态
7. 第三步:做基础整机配置
7.1 先选机型 Airframe
如果你做的是普通四旋翼,一般选:
text
Quadrotor X
也就是最常见的 "X" 布局四旋翼。
7.2 然后依次做这些校准
- 加速度计校准
- 陀螺仪校准
- 磁罗盘校准
- 遥控器校准
- 电调 / 电机输出检查
7.3 为什么这些校准不能省
因为:
- 姿态不准,飞机会飘甚至翻
- 罗盘不准,定点会乱
- 遥控器不准,模式切换可能错
8. 第四步:配置电池和失控保护
这是新手极容易忽略但非常关键的部分。
8.1 电池参数
你至少要正确配置:
- 电池节数
- 电压告警
- 低电压保护
8.2 失控保护建议
至少要检查:
- 低电量如何处理
- GPS 丢失如何处理
- 遥控器失联如何处理
- 数传中断如何处理
新手建议保守配置:
- 遥控失联:
Return或Land - 低电压:提前返航
- 外部控制丢失:回到
Position或Land
9. 第五步:检查电机方向和编号
9.1 为什么这一步非常重要
很多人第一次起飞翻机,不是 PID 问题,而是:
- 电机方向错
- 电机编号错
- 桨装反
9.2 检查方法
在 QGroundControl 中使用电机测试功能,逐个检查:
- 电机编号是否和界面一致
- 旋转方向是否正确
9.3 改方向的方法
如果是无刷电机三相线直连 ESC:
- 任意交换两根电机线即可反转
如果是支持软件方向设置的 ESC:
- 也可以在对应配置工具中改方向
9.4 这一步必须在不装桨情况下完成
text
不装桨测试电机
10. 第六步:理解 PX4 的定高和定点到底是什么
这是后面一切自主控制的基础。
10.1 定高飞行是什么
PX4 里的 Altitude Mode 是:
- 你控制横滚、俯仰、偏航
- 飞控帮你稳住高度
PX4 官方说明,多旋翼 Altitude Mode 下,松开杆后飞机会保持当前高度;如果有风,水平面仍可能漂移:
所以你要明白:
text
定高 != 定点
10.2 定点飞行是什么
PX4 里的 Position Mode 是:
- 你控制移动方向
- 松杆后飞机会保持当前位置和高度
PX4 官方说明,多旋翼 Position Mode 需要全局位置估计:
也就是说:
text
没有可靠的位置来源,就没有真正的定点
10.3 两种模式对传感器的要求
定高飞行需要
- 至少有可靠高度估计
- 一般来自气压计
- 加上测距会更稳
PX4 官方也提到,若飞机带有激光 / 测距传感器,定高会更可靠:
定点飞行需要
- GPS
- 或外部视觉定位
- 或光流 + 测距
- 或其他可用位置来源
11. 第七步:先完成最基础首飞
新手第一次飞,建议按下面顺序。
11.1 首飞前检查清单
- 螺旋桨方向正确
- 电池满电
- GPS 信号正常
- 飞控姿态显示正常
- 遥控器模式切换正常
- 失控保护已配置
- 场地空旷、无风或微风
- 周围无行人
11.2 第一飞行模式建议
第一次建议先:
Altitude
不要一上来就 Offboard。
11.3 第二阶段建议
当你确认:
- 飞机姿态正常
- 动力正常
- 油门正常
再尝试:
Position
12. 第八步:怎么实现定高飞行
12.1 最简单的做法
只要下面这些条件满足,PX4 自己就能做:
- 飞控配置正确
- 气压计正常
- 遥控器模式切到
Altitude
12.2 如果你想让定高更稳
可以增加:
- 激光测距
- 光流模块自带测距
PX4 官方距离传感器文档说明,测距数据可用于:
- terrain holding
- improved landing
- precision hovering
参考:
12.3 新手实践建议
第一阶段:
- 先只用气压计体验定高
第二阶段:
- 加
ARK DIST SR或ARK Flow
第三阶段:
- 做低空精细定高
13. 第九步:怎么实现定点飞行
13.1 室外最简单的方法
使用:
- GPS
- 罗盘
然后飞行模式切到:
Position
这时 PX4 会自己做位置保持。
13.2 如果是室内,没有 GPS 怎么办
常见方案有三种:
方案 1:光流 + 测距
适合:
- 低空
- 地面纹理清晰
- 小范围悬停
方案 2:视觉里程计 VIO
适合:
- 室内开发
- 没有 GPS 的环境
- 需要更稳定定位
方案 3:动捕 / UWB / 外部定位
适合:
- 实验室
- 研究环境
PX4 官方说明,视觉里程计和动捕可用于在没有可靠全局定位时导航:
14. 第十步:机载电脑怎么接到 Pixhawk 6C Mini
14.1 连接方式
最常见的是:
TELEM串口- USB
- 以太网到地面站,飞控仍走串口
14.2 新手推荐连接方式
最稳的是:
text
机载电脑 UART <-> Pixhawk TELEM
优点:
- 简单
- 常见
- 文档多
14.3 接线原则
一般是:
- 机载电脑
TX-> 飞控RX - 机载电脑
RX-> 飞控TX GND->GND
注意:
- 电平要匹配
- 不要乱给飞控串口供电
14.4 机载电脑供电怎么做
不要直接从飞控小口硬拉大电流供电给:
- 树莓派
- Jetson
正确做法:
- 使用独立
BEC / DC-DC - 从主电池稳压出
5V或12V
例如:
- Raspberry Pi 5 常用
5V - Jetson 视载板要求可能是
5V、9V、12V
你必须看载板说明。
15. 第十一步:机载电脑怎么选
15.1 Raspberry Pi 5 适合什么
适合:
- MAVSDK
- ROS 2 基础
- 串口通信
- 轻量视觉
- 外部定位桥接
官方规格页面:
15.2 Jetson Orin NX 适合什么
适合:
- 深度相机
- VIO
- AI 推理
- 多传感器融合
NVIDIA 当前硬件页面:
15.3 我给新手的建议
如果你现阶段核心目标是:
- 学 PX4 控制
- 学代码控制飞行
- 学替换定位数据
先买:
text
Raspberry Pi 5
如果你确定要做:
- Realsense
- VIO
- 避障
- 神经网络
再上:
text
Jetson Orin NX
16. 第十二步:机载电脑的软件环境怎么搭
这里给你一个简单稳妥路线。
16.1 Raspberry Pi / Ubuntu 主机推荐路线
优先学两条:
MAVSDK PythonROS 2
16.2 为什么先学 MAVSDK
因为:
- API 简单
- 上手快
- 很适合先做控制验证
PX4 官方也明确提到,MAVSDK 更容易学,适合地面站或低带宽机载控制:
17. 第十三步:怎么用代码控制 PX4
这里我给你两条路线。
17.1 路线 A:MAVSDK Python
最适合新手。
17.1.1 安装
在机载电脑或开发机上:
bash
python3 -m venv .venv
source .venv/bin/activate
pip install mavsdk
MAVSDK Python QuickStart:
17.1.2 一个最小示例:连接并解锁
python
import asyncio
from mavsdk import System
async def main():
drone = System()
await drone.connect(system_address="serial:///dev/ttyUSB0:57600")
async for state in drone.core.connection_state():
if state.is_connected:
print("Drone connected")
break
print("Waiting for global position...")
async for health in drone.telemetry.health():
if health.is_global_position_ok and health.is_home_position_ok:
print("Global position OK")
break
await drone.action.arm()
print("Armed")
if __name__ == "__main__":
asyncio.run(main())
17.1.3 一个更实用示例:起飞并悬停
python
import asyncio
from mavsdk import System
async def main():
drone = System()
await drone.connect(system_address="serial:///dev/ttyUSB0:57600")
async for state in drone.core.connection_state():
if state.is_connected:
print("Connected")
break
async for health in drone.telemetry.health():
if health.is_global_position_ok and health.is_home_position_ok:
print("Position OK")
break
await drone.action.arm()
await drone.action.takeoff()
print("Takeoff")
await asyncio.sleep(10)
await drone.action.land()
print("Land")
if __name__ == "__main__":
asyncio.run(main())
这类代码更适合:
- 室外 GPS 飞行
- 基础验证
- 先打通控制链路
17.2 路线 B:ROS 2 Offboard
更适合:
- 高速控制
- 复杂自主飞行
- 多传感器系统
PX4 官方 ROS 2 Offboard 示例说明:
- 在进入 Offboard 前,PX4 必须先收到
OffboardControlMode - 如果消息流低于约
2Hz,PX4 会退出 Offboard
参考:
- https://docs.px4.io/main/en/ros2/offboard_control
- https://docs.px4.io/main/en/flight_modes/offboard.html
18. 第十四步:什么是 Offboard,为什么很多人一上来就踩坑
Offboard 的意思是:
- 飞机的目标点、速度、姿态、加速度等,不再主要由遥控器给
- 而是由外部计算机给
这个外部计算机通常就是:
- 机载电脑
- 或地面电脑
18.1 Offboard 的前提
PX4 官方说明,Offboard 需要:
- 持续的"存活"消息流
- 合法的 setpoint
- 可用的位置 / 姿态信息
如果没有这些,PX4 会拒绝进入或自动退出 Offboard。
18.2 新手顺序建议
不要一上来就飞 Offboard。
正确顺序是:
- 先能手飞
- 再能 Altitude
- 再能 Position
- 再能自动起降
- 最后再上 Offboard
19. 第十五步:怎么实现"定点飞行 + 定高飞行"的代码控制
你可以分成两类理解。
19.1 不改底层定位,只做高层控制
最简单。
前提:
- GPS 正常
- PX4 已经能 Position 模式稳定悬停
这时机载电脑只负责:
- 起飞
- 去某个点
- 悬停
- 降落
这种情况下,PX4 自己负责:
- 定高
- 定点
- 姿态稳定
19.2 自己提供定位,再做高层控制
这是更高级的一步。
例如:
- 室内没有 GPS
- 你想用 VIO
- 你想用 UWB
- 你想用视觉替代 GPS
这时机载电脑除了控制,还要给 PX4 提供位置估计。
20. 第十六步:怎么替换雷达数据
你这里说的"替换雷达数据",一般可以理解成两种情况。
20.1 情况一:物理上更换测距传感器
比如你原来用:
- 一个普通 ToF
后来换成:
ARK DIST SRLightWareARK Flow内置测距
这属于硬件替换。
做法一般是:
- 拆掉旧传感器
- 按新接口接线
- 在 PX4 / QGC 中确认驱动识别
- 校验方向、安装位置和量程
PX4 官方测距文档有支持设备列表和通用配置:
20.2 情况二:逻辑上替换高度来源
例如你想让 PX4 高度估计更多依赖:
- Vision
- Rangefinder
- 或禁用某一项
PX4 外部定位文档指出,可以通过 EKF2 参数决定是否使用:
- GPS
- Baro
- Rangefinder
参考:
文档中特别提到:
EKF2_GPS_CTRLEKF2_BARO_CTRLEKF2_RNG_CTRL
可以用来控制对应数据融合。
20.3 新手怎么理解"替换雷达数据"
你不用一开始就去改 PX4 源码。
通常先做的是:
- 让新传感器被 PX4 正确识别
- 检查数据是否正常
- 调整 EKF2 参数让 PX4 采用新的数据
21. 第十七步:怎么替换定位数据
这部分非常重要。
21.1 从 GPS 改成外部视觉定位
典型场景:
- 室内飞行
- GPS 不可用
- 桥下、厂房、实验室
PX4 官方文档说明,使用视觉或动捕做位置估计时,要设置:
EKF2_EV_CTRLEKF2_HGT_REFEKF2_EV_DELAYEKF2_EV_POS_X/Y/Z
参考:
并且文档还说明:
- 可以关闭 GNSS、Baro、Range Finder 的融合,让 EKF2 主要依赖外部定位
21.2 最常见的替换思路
从 GPS 切到 VIO
适合室内:
Realsense + VIOVINS-FusionORB-SLAM3OpenVINS
机载电脑算出位姿后,通过:
- MAVROS / ROS 2 / MAVLink
送给 PX4。
从 GPS 切到 UWB
适合室内中低速:
- UWB 提供位置
- PX4 做融合
从 GPS 切到动捕
适合实验室最稳定验证。
22. 第十八步:怎么实现多数据定位
你这里说的"多数据定位",本质上就是:
text
让 PX4 的 EKF2 融合多个来源
例如:
- IMU + Baro + GPS
- IMU + Rangefinder + Optical Flow
- IMU + External Vision
- 双 GPS 融合
PX4 EKF2 官方文档说明:
- 支持多个 IMU、多磁罗盘实例
- 支持多个 GPS 做 blending
参考:
22.1 多 IMU
PX4 文档里提到:
EKF2_MULTI_IMUEKF2_MULTI_MAG
可以配置多实例 EKF 来使用多个 IMU/罗盘。
22.2 双 GPS / GPS Blending
PX4 文档说明:
SENS_GPS_MASK默认会禁用 blending 并始终使用第一个 GPS- 需要配置它,才会根据精度指标决定两个 GPS 各自贡献多少
这意味着:
text
双 GPS 插上去,不代表系统就自动智能融合了
你还要改参数。
22.3 GPS 航向替代磁罗盘
PX4 EKF2 文档说明,一些 GPS 接收机可以提供航向测量,从而替代磁罗盘:
- 通过
EKF2_GPS_CTRL的相关位启用
这在强磁干扰环境下很有价值。
23. 第十九步:怎么把机载电脑的定位数据送给 PX4
这里我用最常见的概念路线给你讲。
23.1 数据来源
机载电脑上的位置数据可能来自:
- VIO
- 双目相机
- 深度相机
- UWB
- 动捕
23.2 数据发送方式
常见有两条路线:
路线 A:MAVROS / MAVLink
把外部位姿发布成 PX4 能接受的消息。
路线 B:ROS 2 + px4_ros_com
通过 PX4 ROS 2 接口发送相关主题。
23.3 新手建议
如果你只是想先跑通:
- 用
MAVSDK做控制 - 用
MAVROS/ROS 2做外部定位桥接
这样会比你一上来全自己写 MAVLink 包简单很多。
24. 第二十步:一个最小 Offboard 悬停示意
这里给你一个"理解级"的流程,不是最终工程代码。
流程是:
- 程序连接 PX4
- 连续发送 setpoint
- 进入 Offboard
- 解锁
- 给一个固定位置 setpoint
- 飞机悬停
- 发降落或切回安全模式
24.1 关键原则
PX4 官方文档强调:
- 进入 Offboard 前,必须先持续发送 setpoint / OffboardControlMode
- 低于约
2Hz会掉出 Offboard
所以你程序不能是"想到的时候发一条",而是要稳定连续发送。
25. 第二十一步:仿真怎么做
我强烈建议你:
text
先仿真,再实机
因为实机每一次错误都可能是:
- 翻机
- 断桨
- 烧电调
- 伤人
26. PX4 仿真环境怎么搭
26.1 官方推荐思路
PX4 现在主要使用:
Gazebo
PX4 官方文档:
26.2 Ubuntu 下典型流程
先安装 PX4 开发环境,然后拉源码:
bash
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
bash ./Tools/setup/ubuntu.sh
安装完成后重新打开终端,然后运行:
bash
make px4_sitl gz_x500
这条命令的意思是:
- 启动 PX4 SITL
- 启动 Gazebo
- 使用 x500 多旋翼模型
PX4 当前文档也提到常规 make 目标可直接使用 px4_sitl gz_x500。
26.3 仿真时你能做什么
- 手动飞行
- 测试 Position / Altitude
- 测试 Mission
- 测试 Offboard
- 调试外部控制程序
27. 仿真里怎么跑你的控制代码
如果你用 MAVSDK Python,常见连接方式是:
text
udp://:14540
也就是说,你的代码可以连仿真的 PX4,而不是连实机串口。
一个仿真环境下的连接示例:
python
await drone.connect(system_address="udp://:14540")
这样你可以先在仿真中测试:
- 起飞
- 悬停
- 去固定点
- 降落
确认逻辑没问题,再切换到实机串口。
28. 第二十二步:实机怎么迁移
当仿真跑通后,迁移到实机要注意以下几点。
28.1 连接地址变化
仿真:
text
udp://:14540
实机常见:
text
serial:///dev/ttyUSB0:57600
或者:
text
serial:///dev/ttyTHS1:921600
具体看你的机载电脑串口。
28.2 实机测试顺序
正确顺序建议:
- 不装桨,测试连接
- 不装桨,测试模式切换
- 不装桨,测试 Offboard 是否能进入
- 装桨,低空短时测试
- 再做悬停
- 再做短距离位移
28.3 实机首次 Offboard 建议
不要直接写"起飞到 10 米再飞到远处"。
第一次建议:
- 人工起飞
- 切到 Position 稳定悬停
- 再切到 Offboard
- 只给很小的局部位置指令
- 随时准备切回手动 / 定点
29. 第二十三步:定点、定高、替换数据、多源定位的一条清晰学习路径
如果你是小白,我建议你严格按这条路来。
第 1 阶段
- Pixhawk 6C Mini + GPS + 遥控器
- 学会
Altitude - 学会
Position
第 2 阶段
- 加测距
- 优化低空定高
第 3 阶段
- 加机载电脑
- 用 MAVSDK 做起飞、降落、悬停
第 4 阶段
- 仿真里做 Offboard 位置控制
第 5 阶段
- 室内加入光流 + 测距
- 做无 GPS 悬停
第 6 阶段
- 加视觉定位 VIO
- 替换 GPS
第 7 阶段
- 做多源定位
- 做 GPS + Vision 或双 GPS
这样走,风险最低,也最容易真的做成。
30. 第二十四步:几个常见坑
30.1 有 GPS 就一定能定点吗
不一定。
还取决于:
- 罗盘干扰
- GPS 质量
- 振动
- 飞控安装
30.2 加了机载电脑就一定能自主吗
不一定。
如果:
- 定位源不可靠
- 串口不稳定
- 程序没有持续发 setpoint
PX4 一样不会稳定执行。
30.3 室内用普通 GPS 能飞定点吗
通常不行。
室内一般要靠:
- 光流 + 测距
- VIO
- 动捕
- UWB
30.4 外部视觉定位一接就能飞吗
不行。
你还要处理:
- 坐标系
- 时间同步
- 延迟
- EKF2 参数
- 传感器安装位姿
PX4 官方文档专门提到这些配置项。
31. 第二十五步:我给你的实操建议
如果你现在真要开始做,我建议你按下面这套最现实。
第一步:先做一台最基础的室外四旋翼
- Pixhawk 6C Mini
- M10 GPS
- 遥控器
- 数传
- 4S 电池
先完成:
- Altitude
- Position
第二步:加测距
加:
ARK DIST SR或ARK Flow
先把低空定高飞稳。
第三步:加 Raspberry Pi 5
先做:
- MAVSDK 连接
- 自动起飞
- 自动降落
- 自动悬停
第四步:上仿真做 Offboard
先在 Gazebo 里跑通。
第五步:再上室内定位
如果你要做实验室室内自主,再加:
- VIO
- 或 UWB
- 或动捕
32. 参考资料
- PX4 官方文档
https://docs.px4.io/main/en/ - Pixhawk 6C Mini
https://holybro.com/products/pixhawk-6c-mini - QGroundControl Firmware
https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/firmware.html - PX4 Position Mode
https://docs.px4.io/main/en/flight_modes_mc/position - PX4 Altitude Mode
https://docs.px4.io/main/en/flight_modes_mc/altitude - PX4 Offboard Mode
https://docs.px4.io/main/en/flight_modes/offboard.html - PX4 ROS 2 Offboard 示例
https://docs.px4.io/main/en/ros2/offboard_control - PX4 外部位置估计
https://docs.px4.io/main/en/ros/external_position_estimation - PX4 EKF2
https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html - PX4 距离传感器
https://docs.px4.io/main/en/sensor/rangefinders - PX4 Gazebo 仿真
https://docs.px4.io/main/zh/sim_gazebo_gz/index.html - MAVSDK
https://docs.px4.io/main/en/robotics/mavsdk - MAVSDK Python QuickStart
https://mavsdk.mavlink.io/main/en/python/quickstart.html - Raspberry Pi 硬件规格
https://www.raspberrypi.com/documentation/hardware/raspberrypi/specs.md - NVIDIA Jetson 硬件页面
https://developer.nvidia.com/embedded/develop/hardware
33. 结语
如果你把这份文档的内容真的按顺序做下来,你会把 PX4 入门里最重要的四件事建立起来:
- 硬件平台搭建能力
- 基础飞行能力
- 机载电脑控制能力
- 外部定位与仿真实验能力