Pixhawk 6C 飞控学习 00:先认识硬件、固件和上位机

写在前面

前面的笔记一直在用 ROS2 和 MuJoCo 理解四旋翼动力学与最小控制闭环。现在我买了一块 Pixhawk 6C,准备把仿真里的认识逐步迁移到真实飞控上。

但拿到板子之后,最容易混淆的几个词马上就出现了:Pixhawk、PX4、ArduPilot、QGroundControl、MAVLink、ROS2,它们到底是什么关系?我要安装哪些软件?是不是还要像普通 STM32 开发板一样先装 Keil、CubeMX,然后自己点灯?

这篇先不接电机,也不追求让飞机起飞,只完成一件更重要的事:

把 Pixhawk 6C 的硬件、固件、上位机和开发环境分清楚,并建立一条安全、可重复的入门路线。

这篇完成后的第一个里程碑也很简单:电脑能够识别 Pixhawk 6C,QGroundControl 能读到飞控信息,拿起板子倾斜时姿态仪会跟着变化。

Pixhawk 6C 到底是什么

Pixhawk 6C 不是一块需要从空白工程开始点灯的普通单片机开发板,而是一块完整的自动驾驶仪硬件,也就是常说的飞控。

它把无人机需要的主控、传感器、接口、电源监测和安全机制集中在了一块板子上。根据 PX4 官方资料,Pixhawk 6C 的主要硬件包括:

部分 Pixhawk 6C 配置 用途
FMU 主处理器 STM32H743,Cortex-M7,最高 480 MHz 运行姿态估计、控制器、任务和通信等飞控逻辑
IO 处理器 STM32F103 管理部分输入输出,并提供更独立的安全保障
加速度计/陀螺仪 ICM-42688-P、BMI055 测量加速度与角速度,双 IMU 可用于冗余
磁力计 IST8310 提供航向参考
气压计 MS5611 估计相对高度
电机/舵机输出 16 路 PWM 连接电调或舵机
通信接口 TELEM、GPS、I2C、CAN 等 连接数传、GPS、外部传感器和 DroneCAN 设备

官方硬件说明:https://docs.px4.io/main/en/flight_controller/pixhawk6c

Pixhawk 6C 适合实时、可靠地完成飞行控制,但它不是用来运行视觉模型、SLAM 或大型神经网络的通用计算机。如果以后需要相机、视觉定位或复杂规划,通常会增加树莓派、Jetson 等伴随计算机,再通过 MAVLink、ROS2、串口或网络与飞控通信。

先把几个角色分清楚

可以先记住下面这条关系:

Pixhawk 6C 硬件
↓ 运行
PX4 或 ArduPilot 飞控固件
↓ 通过 USB / 数传和 MAVLink 通信
QGroundControl 或 Mission Planner 上位机
↓ 后续再扩展
Gazebo / ROS2 / MAVSDK / 伴随计算机

Pixhawk 6C:硬件

它是真实的飞控板,负责读取 IMU、运行控制器并输出电机或舵机指令。

PX4 / ArduPilot:飞控固件

它们是运行在 Pixhawk 6C 里面的两套开源飞控软件。两者都很成熟,但配置方式、参数体系和开发生态不同。

刚开始不要在两套固件之间来回切换,否则教程、参数名和故障排查会混在一起。这一系列暂定走 PX4,因为后面还要继续接 Gazebo、ROS2 和自己的控制实验。

QGroundControl:上位机/地面站

QGroundControl,简称 QGC,是电脑或移动设备上的地面站软件。它可以:

  • 给 Pixhawk 安装 PX4 或 ArduPilot 固件。
  • 选择机架并配置电机输出。
  • 校准陀螺仪、加速度计、磁力计和遥控器。
  • 查看姿态、位置、电池、GPS 和飞行状态。
  • 修改参数、规划航点、下载日志。
  • 查看 MAVLink 消息和 PX4 控制台。

QGroundControl 是配置和观察飞控的工具,不是编写 PX4 源码的 IDE

官方使用手册:https://docs.qgroundcontrol.com/en/

MAVLink:通信协议

MAVLink 可以理解为飞控与地面站、伴随计算机之间共同使用的消息格式。姿态、位置、电量、任务、参数和控制指令,都可以通过 MAVLink 传输。

VS Code:以后修改源码时使用的 IDE

等进入 PX4 源码学习后,再使用 VS Code 查看、修改和调试代码。Windows 下官方推荐使用 WSL2 中的 Ubuntu 作为 PX4 开发环境,再让 Windows 版 VS Code 通过 Remote - WSL 连接进去。

PX4 还是 ArduPilot

Pixhawk 6C 是硬件,并不强制只能运行某一种飞控固件。开始之前要先选路线。

路线 推荐上位机 特点 是否作为本系列主线
PX4 QGroundControl 架构清晰,官方仿真与开发资料完整,适合继续学习 ROS2 和飞控源码
ArduPilot Mission Planner 机型和功能丰富,工程参数很多,Mission Planner 在 Windows 上功能完整 暂不作为主线

QGroundControl 也能连接和配置 ArduPilot,但如果以后决定系统学习 ArduPilot,通常会把 Mission Planner 作为主要工具。

Mission Planner 官方说明:https://ardupilot.org/planner/docs/mission-planner-overview.html

现在需要安装哪些软件

不需要第一天把所有工具都装完。按照使用阶段分层,会清楚很多。

第一阶段:连接和认识飞控

现在真正必需的只有:

软件 是否必需 用途
QGroundControl 稳定版 必需 识别飞控、查看状态、安装固件、校准和配置
Windows USB/串口驱动 通常自动完成 让系统识别 Pixhawk 的 USB 设备和串口
浏览器 必需 查阅 PX4、QGC 和 Holybro 官方文档

QGroundControl 官方下载:https://docs.qgroundcontrol.com/Stable_V5.0/en/qgc-user-guide/getting_started/download_and_install.html

目前的准备状态:

  • [x] 已从 QGroundControl 官方地址下载 Windows x64 安装包。
  • [x] 安装并启动 QGroundControl 5.0.8。
  • [x] 用 USB 数据线连接 Pixhawk 6C,Windows 识别为 COM4。
  • [x] 记录当前飞控固件和版本:PX4 Pro 1.16.0。
  • [x] Windows USB 总线将板卡识别为 PX4 FMU v6C.x,MAVLink Console 确认为 PX4_FMU_V6C。
  • [x] 确认约 4 GB microSD 正常挂载到 /fs/microsd
  • [x] 完成第一次姿态数据观察。

如果 Windows 弹出 SmartScreen 提示,不要去不明网盘或软件下载站重新寻找安装包,应回到 QGroundControl 官方文档核对下载来源。

第二阶段:仿真和 PX4 源码

确认硬件和 QGroundControl 都正常后,再准备开发环境:

软件 用途
WSL2 + Ubuntu 22.04/24.04 在 Windows 上提供官方支持的 PX4 Linux 开发环境
Git 下载和管理 PX4-Autopilot 源码及其子模块
VS Code + Remote - WSL 阅读、修改、编译和调试 PX4 源码
PX4 开发工具链 编译 NuttX 固件和运行 SITL 仿真
Gazebo PX4 官方生态中常用的飞行动力学仿真环境

Windows/WSL2 官方环境说明:https://docs.px4.io/main/en/dev_setup/dev_env_windows_wsl

VS Code 官方配置说明:https://docs.px4.io/main/en/dev_setup/vscode

Pixhawk 6C 对应的 PX4 编译目标是:

make px4_fmu-v6c_default

这条命令是后面的目标,不是第一次连接飞控时就必须执行的操作。

第三阶段:ROS2 和自主控制

等 PX4 SITL、QGroundControl 和真实飞控的基本操作都熟悉后,再增加:

  • ROS2:组织感知、规划、控制和机器人系统节点。
  • PX4 ROS 2 接口:在 PX4 与 ROS2 之间传递状态和控制消息。
  • MAVSDK:通过 MAVLink 编写任务、控制和状态读取程序。
  • PlotJuggler / Flight Review:查看曲线和分析飞行日志。
  • MuJoCo:继续用于理解动力学和自己实现控制器,再考虑与 PX4 链路衔接。

暂时不需要安装的软件

以下工具以后可能有用,但第一次使用 Pixhawk 6C 时不必安装:

  • Keil、STM32CubeIDE、STM32CubeMX:PX4 已经提供完整板级支持和构建系统,不从空白 STM32 工程开始。
  • STM32CubeProgrammer:通常只在特殊烧录、DFU 或 Bootloader 恢复场景使用。
  • J-Link、ST-Link 配套工具:只有进入 SWD 硬件调试时才需要。
  • Mission Planner:当前选择 PX4 + QGroundControl 路线时不是必需项。

手边需要准备哪些硬件

我实际购买的硬件

我购买的 Pixhawk 6C 硬件与配件

这张照片先作为本系列的第一张实物记录。目前可以明确确认的有:

  • Pixhawk 6C 飞控主体,外壳上已经标出 POWER、GPS、TELEM、CAN、USB、PWM 等接口。
  • 随附的多组连接线束,后续接电源模块、GPS、数传和其他外设时使用。
  • 一个标有 PWM 接口编号的转接件。
  • 一个仍在防静电袋中的配套板卡;由于包装反光且看不到完整型号,暂时不强行判断具体用途,拆封后再根据正反面丝印和购买清单确认。

现在先不要凭插头外形尝试接线。下一步拆封时,应分别补拍每个部件的正面、背面、接口标签和型号,再建立一份“实物—接口—用途”对照表。

第一次连接就需要

  • Pixhawk 6C 飞控。
  • 一根确定支持数据传输的 USB 线;有些充电线只能供电,不能通信。
  • Windows 10/11 x64 电脑。
  • microSD 卡,建议装入飞控,用于日志、任务和部分外设功能。

组装飞机前需要

  • 与机型匹配的机架。
  • 电机、电调和螺旋桨。
  • 电池与合适的平衡充电器。
  • 电源模块,负责给飞控供电并测量电池电压、电流。
  • GPS/外置磁力计模块。
  • 遥控器与接收机,或者后续经过充分验证的其他控制链路。
  • 可选的数传电台,用于飞行时连接地面站。

Pixhawk 6C 官方接线入门:https://docs.px4.io/main/en/assembly/quick_start_pixhawk6c

开发调试阶段才需要

  • FMU Debug 对应的调试线。
  • J-Link、ST-Link 或其他兼容 SWD 调试器。
  • 树莓派、Jetson 等伴随计算机,只有需要视觉、SLAM 或更复杂的 ROS2 程序时再增加。

第一次连接的安全准备

第一次实验只让飞控通过 USB 与电脑通信,不接电机动力。

  1. 拆下全部螺旋桨。 后续任何电机测试也要先拆桨。
  2. 先不要连接动力电池。 第一次识别飞控时使用 USB 供电即可。
  3. 不要把电池直接接到飞控普通接口。 真机供电应使用正确的电源模块和 POWER 接口。
  4. 如果卖家已经配置过飞控,先备份参数。 不要一连接就刷固件。
  5. 只使用稳定版固件。 Daily/Main 构建适合开发测试,不适合作为第一次上手的基线。
  6. 切换 PX4 与 ArduPilot 前再次确认。 更换飞控栈会改变参数体系和配置方式。

第一次打开 QGroundControl 要做什么

1. 不连接飞控,先启动软件

先确认 QGroundControl 能正常打开,并记录软件版本。如果普通快捷方式出现界面黑屏或渲染异常,再尝试安装程序创建的 GPU Compatibility Mode 或 GPU Safe Mode 快捷方式。

2. 用 USB 数据线连接 Pixhawk 6C

尽量直接连接电脑的 USB 接口,不通过廉价 USB Hub。等待 Windows 完成设备识别,QGroundControl 通常会自动连接飞控。

如果只能亮灯但软件没有反应,优先检查:

  • USB 线是否支持数据传输。
  • 换一个电脑 USB 接口。
  • Windows 设备管理器中是否出现新的串口或 Pixhawk 设备。
  • 是否有其他地面站或串口软件占用了同一个端口。

3. 先记录,不急着修改

连接成功后,先在 QGroundControl 中记录下面这些信息:

记录项 实际结果
QGroundControl 版本 5.0.8
飞控识别名称 Generic Quadcopter X,系统 ID 1
当前固件 PX4 Pro
固件版本 1.16.0
FMU/板卡版本 Windows 报告 PX4 FMU v6C.x;PX4 报告 PX4_FMU_V6CV6C000002
Windows 设备/COM 端口 USB 串行设备(COM4),VID_3185&PID_0038
是否装有 microSD 是,约 4 GB,已挂载到 /fs/microsd
QGC 是否出现传感器或预检告警 传感器就绪;遥控器、飞行模式、电源和执行器待配置

同时保存三张截图:

  1. QGroundControl 的飞控概要页。
  2. Windows 设备管理器中的设备或串口。
  3. Fly 页面中的姿态仪和告警信息。

4. 做第一个无风险实验

保持飞控只连接 USB,拿起 Pixhawk 6C,缓慢进行前倾、后仰和左右倾斜。

观察 QGroundControl 的姿态仪是否同步变化。这个小实验已经验证了不少环节:

板载 IMU 正在采样

飞控固件正在运行姿态估计

飞控通过 MAVLink 发送状态

USB 通信正常

QGroundControl 能解析并显示姿态

暂时不追求所有预检项目都变绿。没有 GPS、遥控器、电源模块或机架配置时出现告警很正常,下一步应该逐条理解告警,而不是直接关闭安全检查。

什么时候才需要刷 PX4 固件

先确认当前固件。如果飞控来自完整套装或卖家已经完成配置,应先导出参数并记录现状。

如果确认要从头建立 PX4 环境,再使用 QGroundControl 桌面版的 Firmware 页面安装 PX4 Stable Release。进入固件更新流程前,应断开动力电池和其他不必要连接,先进入 Firmware 页面,再按界面提示连接飞控。官方刷写说明:

https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/firmware.html

这一阶段不要选择:

  • Daily Build。
  • Beta/Release Candidate。
  • 来源不明的自定义 .px4 文件。
  • px4_fmu-v6c 不匹配的本地构建。

这一系列准备怎么学

后面的硬件学习路线暂定如下:

  1. 00:认识 Pixhawk 6C、PX4 和 QGroundControl。
  2. 01:第一次连接,记录固件、板卡与传感器状态。
  3. 02:理解 IMU、坐标系、姿态显示和传感器校准。
  4. 03:连接电源模块、GPS、遥控器与数传。
  5. 04:理解机架、执行器映射和无桨电机测试。
  6. 05:运行 PX4 SITL,并让 QGroundControl 连接仿真飞行器。
  7. 06:阅读 PX4 模块、uORB 消息与控制器结构。
  8. 07:编译 px4_fmu-v6c_default,生成自己的固件。
  9. 08:连接 ROS2/MAVSDK,把仿真控制实验逐步迁移到真机。

这条路线会和已有的 MuJoCo 控制学习并行:

  • MuJoCo 路线回答“飞行器为什么能被控制”。
  • Pixhawk/PX4 路线回答“真实飞控系统如何把估计、控制、通信和安全组织起来”。

已有笔记:

本篇检查清单

在进入下一篇之前,至少应该能回答:

  • [ ] Pixhawk 6C、PX4、QGroundControl 分别是什么?
  • [ ] 当前为什么选择 PX4,而不是同时学习两套飞控栈?
  • [ ] QGroundControl 与 VS Code 的职责有什么不同?
  • [ ] 第一次连接为什么不能带螺旋桨?
  • [x] 电脑是否识别了飞控?是,USB 串行设备(COM4)。
  • [x] 当前飞控运行的是什么固件和版本?PX4 Pro 1.16.0。
  • [x] 倾斜飞控时,QGroundControl 姿态仪是否同步变化?是,横滚、俯仰和航向均连续响应。
  • [ ] 是否保存了概要页、设备管理器和姿态仪截图?

完成这些以后,再开始传感器校准和硬件接线。对第一次接触飞控来说,能够可靠地观察系统,比急着让电机转起来更重要。

3d打印 ai辅助设计 algorithms apriltag axis-angle bang-bang blender bode cadquery calibration camera calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i data_struct db design-pattern dots economics eigen factory-pattern fcpx fiducial marker figure finance forge fov freecad gazebo gdb git gnu ibus imu interest isaac gym isaac lab isaaclab kdl latent variable latex launch learning-notes legged locomotion legged robotics legged-robot life linux linux-kernel mac math matlab matrix memory mlp money motion-control motor moveit mpc mujoco network ocs2 ode openscad operator optimal algorithm optimal-control perf performance personal-finance pixhawk 6c ppo privileged learning profiling px4 python qgroundcontrol qos quadrotor realsense reinforcement learning representation learning reward tuning rnn robot robotics ros ros2 rtb security shell sim-to-real simulation socket stairs stl stm32 tcp-ip teacher policy thread tools twist ubuntu uml unitree urdf vae valgrind vcxsrv velocity vim web wifi work wsl 中文输入 交叉编译 依赖管理 分支管理 四足机器人 实验诊断 强化学习 机器人 机器人控制 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 自主回充 视觉定位 训练曲线 输入法 配置类 飞控
知识共享许可协议