1. 课程导入
欢迎进入《PX4 Zenoh 与 ROS2 通信工程》课程。本课程面向已经具备一定无人机飞控或机器人操作系统基础、希望打通“飞控—中间件—上层应用”完整链路的工程师。我们将以 PX4 为飞行控制核心,以 Zenoh 为新一代数据通信中间件,以 ROS2 为上层算法与任务编排框架,构建一条低延迟、可扩展、跨网络的通信工程实践路径。
一、为什么要学习 PX4 + Zenoh + ROS2
传统无人机开发中,PX4 与 ROS2 之间常通过 MAVLink 或 uXRCE-DDS 桥接。MAVLink 成熟但面向消息流,扩展性和服务发现能力有限;uXRCE-DDS 在单机内表现良好,但在多机、跨网段、弱网或云边协同场景下,配置复杂度和带宽开销会迅速上升。Zenoh 作为“零开销发布/订阅、查询、存储”的统一数据平面,天然支持分布式发现、路由和穿透,非常适合把 PX4 的遥测、状态、控制指令与 ROS2 的节点图连接起来。
本课程的核心判断是:PX4 负责实时飞行控制,ROS2 负责感知、规划与任务决策,Zenoh 负责两者之间以及多机之间的高效数据交换。三者不是替代关系,而是分层协作关系。
学习本课程后,你应当能够独立完成:搭建 PX4 SITL 仿真环境;配置 Zenoh 路由与 ROS2 桥接;把 PX4 的 uORB 主题映射为 ROS2 话题;实现多机之间的状态同步与指令下发;并对通信延迟、丢包和带宽进行观测与调优。
二、核心概念地图
先建立一张概念地图,后续章节会逐层展开。PX4 内部以 uORB 消息总线组织传感器、状态估计、控制输出等主题;Zenoh 以 key-expression 标识数据资源,支持 pub/sub、queryable、get/put 等交互模式;ROS2 以节点、话题、服务、动作和参数描述计算图。三者之间的关键转换点是“主题映射”和“QoS/可靠性策略”。
三、方法流程:从环境到闭环的六步路线
- 环境准备:安装 PX4 源码与工具链,配置 ROS2 Humble/Iron,编译 Zenoh 与 zenoh-bridge-ros2dds。
- 单机桥接:启动 PX4 SITL,运行 Zenoh router,把 uORB 主题通过桥接暴露为 Zenoh key-expression。
- 话题映射:在 ROS2 侧订阅对应话题,验证
/fmu/out/vehicle_attitude、/fmu/out/vehicle_local_position等数据可达。 - 指令下行:通过 ROS2 发布控制或任务指令,经 Zenoh 回传至 PX4,完成起飞、悬停、航点等动作。
- 多机扩展:引入多个 PX4 实例与命名空间,利用 Zenoh 路由实现跨机状态共享与协同。
- 观测调优:用
zenoh-top、ROS2topic hz和日志分析延迟、丢包与带宽,调整 QoS 与路由策略。
四、典型场景与配置示例
以单机 SITL 为例,典型启动顺序如下。注意:不同版本命令参数可能略有差异,实际以所用版本为准。
# 1. 启动 PX4 SITL(Gazebo 机型)
make px4_sitl gz_x500
# 2. 启动 Zenoh router
zenohd
# 3. 启动 ROS2 与 Zenoh 桥接
zenoh-bridge-ros2dds -c zenoh_bridge_config.json5
# 4. 查看 ROS2 话题
ros2 topic list
ros2 topic hz /fmu/out/vehicle_attitude
桥接配置中需要重点关注 key-expression 前缀、可靠性模式和域 ID。下面是一个简化示例:
{
"mode": "peer",
"connect": { "endpoints": ["tcp/127.0.0.1:7447"] },
"plugins": {
"ros2dds": {
"domain": 0,
"allow": ["/fmu/out/**", "/fmu/in/**"]
}
}
}
五、学习目标与能力清单
| 能力维度 | 具体目标 | 验证方式 |
|---|---|---|
| 环境搭建 | 独立完成 PX4 SITL、ROS2、Zenoh 安装与联调 | 能启动并看到话题列表 |
| 通信桥接 | 掌握 uORB 与 ROS2 话题的双向映射 | 订阅遥测并下发指令 |
| 多机协同 | 配置多实例与 Zenoh 路由,实现跨机数据共享 | 两机状态互见 |
| 性能调优 | 观测延迟、丢包、带宽并调整 QoS | 给出调优前后对比 |
| 工程闭环 | 完成“感知—决策—控制”任务链路 | 自动航点飞行成功 |
六、常见误区与复盘建议
误区一:把 Zenoh 当成 MAVLink 的简单替代。Zenoh 是数据平面,不负责飞控协议语义,PX4 侧仍需通过 uORB 或桥接插件完成语义转换。
误区二:忽略时间同步与坐标系。PX4 使用 NED/FRD,ROS2 常用 ENU/FLU,桥接时必须确认转换环节,否则会出现“数据通了但方向反了”。
误区三:只调通单机就上多机。多机场景下命名空间、域 ID、路由发现和带宽竞争会同时出现,建议先做两机最小验证。
误区四:不观测就调参。没有
误区二:忽略时间同步与坐标系。PX4 使用 NED/FRD,ROS2 常用 ENU/FLU,桥接时必须确认转换环节,否则会出现“数据通了但方向反了”。
误区三:只调通单机就上多机。多机场景下命名空间、域 ID、路由发现和带宽竞争会同时出现,建议先做两机最小验证。
误区四:不观测就调参。没有
topic hz、延迟统计和日志,调优只能靠猜。
建议每完成一个阶段就做一次复盘:记录启动命令、配置文件、话题列表、延迟数据和异常日志。这些记录会成为后续排障和工程交付的重要资产。