ROS2 Lyrical Luth 发布:Zenoh 替代 DDS,嵌入式开发者迎来机器人OS「轻量化革命」
摘要:2026年5月,ROS2第12个正式版本Lyrical Luth(LTS,支持至2031年)正式发布,首次以Zenoh协议替代DDS作为默认通信中间件——这是ROS创立15年来最深刻的架构变革。Zenoh在延迟(45μs)、吞吐量(165MB/s)、内存(8MB)三指标全面碾压DDS,结合rosidl::Buffer零拷贝、EventsCBGExecutor低CPU调度、AsyncNode异步编程等关键新特性,ROS2正式从"局域网机器人框架"进化为"云边端统一OS"。本文深度拆解Zenoh协议原理、性能基准测试、Lyrical Luth十大核心特性,并给出嵌入式开发者四阶段学习路径。
一、为什么DDS必须被替代?
ROS2自2017年首个正式版Ardent Apalone起,一直以Data Distribution Service(DDS)作为底层通信中间件。DDS由OMG标准化,设计初衷是满足军工、航空等领域的实时分布式系统需求——这带来了沉重的历史包袱。
DDS架构涉及DomainParticipant(域参与者)、DataWriter/DataReader(数据读写器)、Publisher/Subscriber(发布订阅器)、Topic(主题)等多层抽象,即便开启一个最简单的节点,也要初始化发现服务、可靠性协议、持久化缓存等一系列组件。实测数据显示,基础节点内存占用高达22-35MB,对资源受限的MCU/嵌入式Linux设备而言,这是不可接受的。
更关键的是,DDS天然面向局域网设计,在云边端协同、广域网通信场景下力不从心。2026年机器人产业正加速从单体智能走向群体智能和云边协同,DDS的架构局限已成为ROS2演进的最大瓶颈。
二、Zenoh:为"万物互联"而生的下一代中间件
Zenoh(/zeno/,读作"zeno")由Eclipse基金会托管,是一个从零设计的新一代发布/订阅/查询协议,核心使命是"统一从微控制器到云数据中心的数据交互"。
2.1 协议核心模型
Zenoh的数据模型极其简洁——仅四个字段:
Key-Expression(键表达式) + Payload(载荷) + Timestamp(时间戳) + Encoding(编码)这比DDS至少简化了两个抽象层级。Key-Expression支持通配符匹配(如robot/*/sensor/lidar),天然支持灵活的路由和过滤。
2.2 通信模式
DDS仅支持Pub/Sub单一模式,而Zenoh原生支持五种:
| 模式 | 说明 | 典型场景 |
|---|---|---|
| Pub/Sub | 发布/订阅 | 传感器数据流 |
| Query/Reply | 查询/应答 | 服务调用、参数查询 |
| Get | 单次获取 | 配置读取、状态查询 |
| Put | 单次写入 | 命令下发、参数设置 |
| Call | RPC调用 | 远程过程调用 |
2.3 多传输层
Zenoh支持六种传输协议,可根据场景灵活选择:
| 传输协议 | 适用场景 |
|---|---|
| UDP | 低延迟局域网通信 |
| TCP | 可靠跨网络通信 |
| WebSocket | 浏览器/Web前端接入 |
| Serial | 串口直连嵌入式设备 |
| Shared Memory | 同机进程间通信 |
| QUIC | 互联网高延迟/丢包环境 |
"Serial传输"对嵌入式开发者意义重大——这意味着MCU可通过UART/SPI等串行接口直接参与ROS2网络,无需完整的TCP/IP协议栈。
2.4 拓扑灵活性
Zenoh支持三种网络拓扑:
- Peer-to-Peer:节点直连,适合小规模局域网
- Client-Server:经典C/S架构,Server负责路由
- Router-Based:引入Zenoh Router实现跨子网、跨WAN通信,适合多机集群和云边端架构
三、性能对决:Zenoh vs DDS 基准测试
2026年公开基准测试(本地千兆网络环境)结果如下:
延迟对比(越低越好)
| 中间件 | 延迟 |
|---|---|
| Zenoh | 45μs✅ |
| CyberRT | 68μs |
| Cyclone DDS | 72μs |
| Fast DDS | 85μs |
吞吐量对比(越高越好)
| 中间件 | 吞吐量 |
|---|---|
| Zenoh | 165 MB/s✅ |
| CyberRT | 135 MB/s |
| Fast DDS | 120 MB/s |
| Cyclone DDS | 95 MB/s |
内存占用对比(基础节点,越低越好)
| 中间件 | 内存 |
|---|---|
| Zenoh | 8 MB✅ |
| Cyclone DDS | 22 MB |
| CyberRT | 28 MB |
| Fast DDS | 35 MB |
结论:Zenoh在延迟、吞吐量、内存占用三个维度全面领先。特别是8MB vs 22-35MB的内存差距,将ROS2在嵌入式设备上的准入"门票"直接降低了3倍以上。
对于资源极度受限的场景,Zenoh还提供zenoh-pico——针对MCU优化的C99实现,可在Cortex-M系列MCU上运行,进一步压榨到KB级内存占用。
四、Lyrical Luth十大关键新特性
除了Zenoh默认中间件这一"头号新闻",Lyrical Luth还带来了多项对开发者至关重要的改进:
4.1 EventsCBGExecutor(CPU降10%-15%)
新的EventsCBGExecutor基于事件队列调度回调组,支持多ROS时间源和多线程,相比传统Single/Multithreaded Executor节省10%-15% CPU。对机器人这种需要同时处理传感器融合、规划控制、状态监控等多回调组的场景,性能提升显著。
4.2 AsyncNode:Python原生的async/await
rclpy新增AsyncNode类,支持在回调中使用Python标准async/await语法。可以优雅地实现await client.call(request)等待服务调用,或await clock.sleep(...)等待仿真时间。CPU占用显著低于传统SingleThreadedExecutor。
4.3 rosidl::Buffer 零拷贝发布
这是为GPU/ML加速器量身定做的特性。通过rosidl::Buffer机制,ROS消息可直接引用GPU显存中的数据而无需CPU侧拷贝。当前rmw_fastrtps_cpp已支持,Zenoh的支持正在开发中——这意味着未来视觉SLAM、模型推理等场景可实现端到端零拷贝流水线。
4.4 运行时切换日志后端
设置RCL_LOGGING_IMPLEMENTATION环境变量即可在spdlog、noop和自定义实现间切换,无需重新编译rcl。这对集成第三方框架(各有自主日志系统)的场景极为友好。
4.5 YAML类型标注
YAML参数文件支持!!str、!!bool、!!int、!!float等显式类型标注,告别"参数被错误解析为布尔值"的经典坑。
4.6 其他值得关注的特性
- rosbag2 消息丢失可观测性:实时发布丢包事件,数据可靠性可量化
- Snapshot Mode 追踪:飞行记录器模式,仅在异常时落地磁盘,生产环境友好
- URDF 1.2:支持四元数、胶囊体几何、加速度/减速度/加加速度限幅
- fish shell 支持:
source /opt/ros/lyrical/setup.fish - 多主题带宽监控:
ros2 topic bw --all实时查看各主题带宽
五、嵌入式开发者的机遇与决策
5.1 Micro-ROS生态直接受益
Micro-ROS是ROS2在MCU上的轻量化实现,过去绑定Cyclone DDS或基于Micro XRCE-DDS的客户端模式。Zenoh的引入和zenoh-pico的成熟,使Micro-ROS在资源占用和功耗上的"最后一公里"被打通。可以预测,未来1-2年将出现大量基于Zephyr/FreeRTOS + Micro-ROS + Zenoh的机器人嵌入式节点方案。
5.2 中间件选型决策矩阵
实时性要求 硬实时(μs) 软实时(ms) 云边协同 ├─────────┬─────────┬──────────────┤ 资源充裕 │ RTI │ Fast │ Zenoh │ (Xeon/AGX) │ Connext │ DDS │ (Router拓扑) │ ├─────────┼─────────┼──────────────┤ 资源受限 │ — │ Cyclone │ Zenoh │ (ARM A/MCU) │ │ DDS │ (P2P/Serial) │ └─────────┴─────────┴──────────────┘建议:
- 硬实时+安全认证(如手术机器人)→ RTI Connext(唯一通过ISO 26262 ASIL D的ROS2中间件)
- 通用机器人开发→ Zenoh(性能最优、资源最低、功能最全)
- 存量项目迁移→ 可继续使用Cyclone/Fast DDS,ROS2保证RMW层的兼容性
5.3 四阶段学习路径
| 阶段 | 时长 | 内容 | 目标 |
|---|---|---|---|
| 入门 | 2周 | Ubuntu 24.04安装ROS2 Lyrical,ros2 topic/service/param命令行,理解Node/Topic/Service基本概念 | 跑通hello_world |
| 进阶 | 4周 | Zenoh Pub/Sub + Query模式编程,C++/Python双语言实践,EventsCBGExecutor调度调优,rosbag2录制回放 | 独立开发机器人应用 |
| 实战 | 6周 | Micro-ROS + Zenoh + MCU(ESP32/STM32)实战,MoveIt2/Nav2集成,Gazebo仿真 | 构建完整机器人系统 |
| 精通 | 长期 | URDF 1.2建模、ros2_tracing性能分析、自研rosidl::Buffer后端、自定义RMW实现 | 框架级贡献者 |
六、理性展望:Zenoh还有哪些挑战?
尽管Zenoh优势明显,但在以下方面仍需观察:
- 生态成熟度:DDS有15年军工/工业验证历史,Zenoh在极端工况(如高辐射、强电磁干扰)下的鲁棒性尚待验证
- 认证进度:ISO 26262功能安全认证覆盖Zenoh仍需时间,自动驾驶量产项目短期内仍依赖RTI Connext
- 多厂商互操作:DDS的RTPS线协议定义了严格的多厂商互通规范,Zenoh的互操作标准化程度尚不及DDS
- 迁移成本:已基于DDS深度定制的ROS2项目(如自定义QoS策略、Discovery机制),迁移到Zenoh需要系统工程级改造
七、总结
ROS2 Lyrical Luth的本质意义不在于"又一个版本发布",而在于ROS从局域网机器人框架向云边端统一操作系统的范式跃迁。Zenoh替代DDS是这一跃迁的引擎——它以更低的资源占用、更丰富的通信模式、更灵活的网络拓扑,为机器人的群体智能、多机协同、云端运维打开了通道。
对嵌入式开发者而言,这可能是近五年来最重要的机器人技术消息:ROS2的门槛从"ARM A系列+Linux"降低到了"Cortex-M+RTOS"。当你的MCU也能直接接入ROS2生态时,机器人软件栈的统一化将进入全新阶段。
建议所有嵌入式/机器人方向的开发者立即动手:装一个Ubuntu 24.04,跑一遍sudo apt install ros-lyrical-desktop,然后写一个Zenoh Pub/Sub的demo。这一小步,可能是你职业生涯的一大步。
参考来源:ROS 2 Lyrical Luth Release Notes、Eclipse Zenoh、ROS2中间件性能基准(arXiv:2309.07496v2)、ROS2通信中间件深度解析
