1. 课程导入
欢迎进入《ROS2 无人机伴随计算机开发》课程。本课程面向已经具备一定 Linux 与 Python/C++ 基础、希望把无人机从“能飞”推进到“能感知、能决策、能协同”的开发者。所谓“伴随计算机”,指的是挂载在无人机平台上、与飞控协同工作的机载计算单元,它通常是一台轻量级单板计算机或边缘计算模块,负责运行 ROS2 节点、处理传感器数据、执行视觉与规划算法,并通过通信链路向飞控发送控制指令。理解“飞控负责稳定飞行、伴随计算机负责智能决策”这一分工,是贯穿全课程的主线。
一、学习目标:从会飞到会开发
本课程的学习目标可以归纳为四个层次。第一层是环境与工具:能够独立搭建 ROS2 开发环境,理解工作空间、功能包、节点、话题、服务、动作等基本概念,并能用命令行与可视化工具观察系统运行状态。第二层是平台与接口:理解无人机飞控与伴随计算机之间的通信方式,掌握 MAVLink、串口/UDP 桥接、以及 ROS2 与飞控之间的消息转换机制。第三层是感知与决策:能够接入相机、深度相机、激光雷达、IMU 等传感器,完成数据采集、时间同步、坐标变换与基础感知算法部署。第四层是系统与协同:能够把多个节点组织成可复用的系统,实现自主起降、航点飞行、目标跟踪、避障与多机协同等典型任务。
二、核心概念:节点、话题与飞控协同
ROS2 的核心抽象是“节点—话题—服务—动作”。节点是独立运行的计算单元;话题是异步、多对多的数据流;服务是同步的请求响应;动作则适合长耗时、可反馈、可取消的任务。在无人机场景中,相机驱动节点发布图像话题,视觉检测节点订阅图像并发布目标位置话题,规划节点订阅目标位置并发布速度指令话题,飞控桥接节点订阅速度指令并转换为 MAVLink 消息发送给飞控。整条链路清晰、可替换、可观测,这正是 ROS2 适合机器人开发的原因。
需要特别强调的是坐标系与时间。无人机系统中常见坐标系包括机体坐标系、世界坐标系、相机坐标系与地图坐标系。ROS2 使用 TF2 维护坐标变换树,任何感知结果都必须明确“在哪个坐标系下表达”。时间方面,传感器数据带有时间戳,若不同传感器时钟不同步,融合结果就会漂移。因此,时间同步与坐标变换是初学者最容易忽视、却最影响系统稳定性的两个基础问题。
三、整体框架:从传感器到执行器的数据流
下图给出本课程贯穿始终的系统框架。左侧是感知层,中间是伴随计算机上的 ROS2 计算层,右侧是飞控与执行机构,底部是地面站与调试工具。数据自左向右流动,控制指令自右向左闭环,形成“感知—决策—控制—反馈”的完整回路。
四、软硬件环境概览
硬件方面,典型配置包括:四旋翼机架与动力系统、支持 MAVLink 的飞控(PX4 或 ArduPilot)、机载伴随计算机(如树莓派、Jetson Orin Nano、RK3588 等)、传感器套件(相机、深度相机、激光雷达、IMU、GPS/RTK)、通信模块(数传、Wi-Fi、4G/5G)以及供电与稳压模块。软件方面,伴随计算机通常运行 Ubuntu 22.04 与 ROS2 Humble,飞控运行 PX4 或 ArduPilot 固件,二者通过 MAVROS 或 micro-ROS 桥接。开发工具链包括 colcon 构建系统、ros2 CLI、RViz2、rqt、QGroundControl 与 Git。
| 层级 | 典型组成 | 关键接口 / 工具 | 常见问题 |
|---|---|---|---|
| 感知层 | 相机、深度相机、激光雷达、IMU、GPS | USB / MIPI / UART / I2C,ROS2 驱动话题 | 时间戳不同步、标定不准 |
| 计算层 | Jetson / 树莓派 / RK3588,ROS2 Humble | colcon、ros2 run、TF2、ros2 bag | 算力不足、节点阻塞、QoS 不匹配 |
| 通信层 | MAVLink 串口 / UDP、micro-ROS、Wi-Fi | MAVROS、/mavros/state、心跳与超时 | 丢包、延迟、波特率错误 |
| 控制层 | PX4 / ArduPilot 飞控、电调、电机 | setpoint_velocity、解锁、模式切换 | 未解锁、模式拒绝、失控保护触发 |
| 地面层 | QGroundControl、RViz2、rqt、日志 | 参数配置、可视化、ros2 bag 回放 | 参数误改、日志缺失 |
五、典型场景:一次自主航点飞行的数据流
假设任务是从起飞点飞往三个航点并返回。伴随计算机上的规划节点读取航点列表,发布位置设定值;飞控桥接节点将其转换为 MAVLink 指令发送给飞控;飞控执行姿态与位置控制,驱动电机;同时飞控回传状态,桥接节点发布 /mavros/state 与本地位置话题;健康监控节点检测电池与飞行模式,一旦异常立即触发返航。整个过程可以通过 ros2 bag 录制,事后回放分析。这个场景把感知、计算、通信、控制、地面工具全部串联起来,是本课程后续章节反复使用的参考任务。
# 启动飞控桥接与基础节点
ros2 launch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600
# 查看飞控状态与可用话题
ros2 topic echo /mavros/state
ros2 topic list | grep mavros
# 录制飞行数据,便于复盘
ros2 bag record /mavros/state /mavros/local_position/pose /camera/image_raw
六、常见误区与复盘建议
- 误区一:把伴随计算机当成飞控。伴随计算机不直接参与姿态稳定,它输出的是设定值或高层指令,实时稳定仍由飞控完成。混淆二者会导致对实时性和安全边界的误判。
- 误区二:忽视坐标系与时间同步。感知结果若未标注坐标系、未做时间对齐,融合与跟踪就会失效。建议每个节点都明确输入输出坐标系与时间戳来源。
- 误区三:只在地面调试,不做分阶段验证。正确顺序是:桌面仿真 → 室内悬停 → 室外定点 → 自主任务。每一步都应有明确的通过标准与回退方案。
- 误区四:不记录日志。没有 ros2 bag 与飞控日志,排障只能靠猜。建议从第一天起就养成录制关键话题的习惯。