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 · Zenoh · ROS2 通信工程整体框架 PX4 飞控层 uORB 消息总线 传感器 / 状态估计 位置 / 姿态控制器 执行器 / 混控输出 PX4 SITL / 真机 Zenoh 数据平面 Key-Expression 命名 Pub / Sub 发布订阅 Query / Get / Put Router 路由与发现 跨网段 / 多机 / 云边 ROS2 应用层 节点 / 话题 / 服务 感知 / 建图 / 定位 路径规划 / 任务决策 rviz2 / 可视化 多机协同 / 集群 uORB → Zenoh Zenoh → ROS2 ROS2 → Zenoh Zenoh → uORB 实战主线:环境搭建 → 单机桥接 → 话题映射 → 多机路由 → 延迟与带宽调优 → 任务闭环

三、方法流程:从环境到闭环的六步路线

  1. 环境准备:安装 PX4 源码与工具链,配置 ROS2 Humble/Iron,编译 Zenoh 与 zenoh-bridge-ros2dds。
  2. 单机桥接:启动 PX4 SITL,运行 Zenoh router,把 uORB 主题通过桥接暴露为 Zenoh key-expression。
  3. 话题映射:在 ROS2 侧订阅对应话题,验证 /fmu/out/vehicle_attitude、/fmu/out/vehicle_local_position 等数据可达。
  4. 指令下行:通过 ROS2 发布控制或任务指令,经 Zenoh 回传至 PX4,完成起飞、悬停、航点等动作。
  5. 多机扩展:引入多个 PX4 实例与命名空间,利用 Zenoh 路由实现跨机状态共享与协同。
  6. 观测调优:用 zenoh-top、ROS2 topic 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、路由发现和带宽竞争会同时出现,建议先做两机最小验证。
误区四:不观测就调参。没有 topic hz、延迟统计和日志,调优只能靠猜。
建议每完成一个阶段就做一次复盘:记录启动命令、配置文件、话题列表、延迟数据和异常日志。这些记录会成为后续排障和工程交付的重要资产。