1. 课程导入
在无人机、无人车与移动机器人快速走向自主化的今天,飞控负责“稳定飞行”,机载计算机负责“看懂世界并做出决策”,二者之间的协同已经成为智能无人系统的基本架构。本课程围绕 Jetson 机载计算平台 与 PX4 飞控生态 的集成展开,目标不是简单地把两块板子连起来,而是建立一套从传感器数据、机载推理、控制指令到飞行动作的完整工程认知。
一、学习目标:从“能连上”到“能飞好”
学习本课程后,你应当能够独立完成以下任务:
- 理解 Jetson 与 PX4 在系统中的角色分工:Jetson 负责感知、规划与决策,PX4 负责姿态控制、位置控制与执行器输出。
- 掌握 Jetson 与 PX4 之间的物理连接方式,包括 UART、USB、以太网以及 MAVLink 通信链路。
- 能够配置 PX4 的 MAVLink 输出、机载计算机接口参数与 offboard 控制模式。
- 能够使用 ROS 2 或 MAVSDK 在 Jetson 上编写控制程序,向 PX4 发送位置、速度或姿态设定值。
- 能够分析集成过程中的典型故障,例如串口权限、波特率不匹配、心跳丢失、坐标系不一致等。
核心判断:Jetson 与 PX4 集成是否成功,不取决于“能不能收到消息”,而取决于“控制指令是否在正确的时间、正确的坐标系下、以正确的频率进入飞控”。
二、核心概念:三个层次与一条链路
理解本课程,需要先建立三个层次的概念:
第一层是计算平台层。Jetson 系列(如 Orin Nano、Orin NX、Xavier NX)提供 GPU 加速的 AI 推理能力,适合运行目标检测、语义分割、视觉里程计、路径规划等算法。它的优势是算力强、功耗可控、接口丰富,但实时性不如飞控 MCU。
第二层是飞控层。PX4 运行在 Pixhawk 等飞控硬件上,负责传感器融合、姿态估计、位置控制和电机输出。它的核心价值是实时性与安全性,即使机载计算机崩溃,飞控仍能保持稳定飞行或执行返航。
第三层是通信与协议层。Jetson 与 PX4 之间通常通过 MAVLink 协议通信。MAVLink 是一种轻量级消息协议,支持心跳、状态、指令、设定值等多种消息类型。在 ROS 2 中,常用 px4_msgs 与 px4_ros_com 进行桥接;在 Python 中,常用 MAVSDK 或 pymavlink。
一条典型链路可以概括为:传感器 → Jetson 感知与规划 → MAVLink 设定值 → PX4 控制律 → 电机/舵机 → 无人机运动。这条链路中任何一环的延迟、丢包或坐标错误,都会直接影响飞行表现。
三、方法流程:集成工作的基本步骤
无论使用 ROS 2 还是 MAVSDK,Jetson 与 PX4 的集成通常遵循以下流程:
- 硬件连接:将 Jetson 的 UART 或 USB 接口与飞控的 TELEM 口连接,确认电平与引脚定义。
- 飞控参数配置:设置
MAV_1_CONFIG、MAV_1_MODE、SER_TEL2_BAUD等参数,使飞控在指定串口输出 MAVLink 消息。 - 机载环境搭建:在 Jetson 上安装 ROS 2、px4_msgs、px4_ros_com 或 MAVSDK,并配置串口权限。
- 通信验证:使用
mavlink_shell或 ROS 2 话题查看心跳与状态消息,确认链路通畅。 - Offboard 控制:编写控制节点,以固定频率发送位置或速度设定值,并切换 PX4 到 Offboard 模式。
- 安全测试:先在仿真中验证,再在系留或低速状态下试飞,逐步增加自主程度。
# 查看 Jetson 串口设备
ls -l /dev/ttyTHS1 /dev/ttyUSB0
# 将用户加入 dialout 组,避免权限问题
sudo usermod -aG dialout $USER
# 启动 PX4 ROS 2 桥接(示例)
ros2 launch px4_ros_com sensor_combined_listener.launch.py
四、典型应用场景与误区复盘
Jetson 与 PX4 的集成广泛应用于以下场景:
| 应用场景 | Jetson 负责 | PX4 负责 | 关键接口 |
|---|---|---|---|
| 视觉目标跟踪 | 检测目标、估计相对位置 | 速度控制、姿态稳定 | MAVLink 速度设定值 |
| 自主巡检 | 路径规划、避障决策 | 位置控制、航点执行 | Offboard 位置设定值 |
| 精准降落 | 识别降落标记、计算偏差 | 下降速度与姿态控制 | MAVLink 位置/速度指令 |
| 多机协同 | 任务分配、通信中继 | 单机稳定飞行 | ROS 2 话题与 MAVLink |
常见误区:很多初学者认为“Jetson 算力强,就可以直接控制电机”。实际上,Jetson 的 Linux 系统不具备硬实时能力,直接输出电机控制信号会导致飞行不稳定。正确做法是让 Jetson 发送高层设定值,由 PX4 完成底层控制。
学习建议:先打通“心跳—状态—设定值”这条最小链路,再逐步加入感知与规划模块。不要一开始就追求全自主飞行,否则一旦出现坐标错误或频率不足,很难定位问题。