最近在研究如何实现一套轻量级机器人软件框架,类似于 ROS2 的分布式架构,因此收集了一些通信库并进行了分析,为基于 C++ 的框架选型提供参考。这些通信库将作为框架的底层通信传输层,需要满足高性能、低延迟、轻量级的要求。
备注:GitHub 数据采集日期为 2026年1月24日
1. Eclipse CycloneDDS
Eclipse CycloneDDS 是一个高性能、健壮的开源 DDS(Data Distribution Service)实现,完全符合 OMG DDS 规范。它是 ROS 2 的 Tier-1 中间件,在机器人领域有广泛应用。
基本信息
- GitHub: https://github.com/eclipse-cyclonedds/cyclonedds
- GitHub Stars: 1,159 ⭐
- Forks: 430
- 主要开发语言: C(核心实现),C++(通过 cyclonedds-cxx 绑定)
- 许可证: Eclipse Public License 2.0
- 维护组织: Eclipse Foundation
- 活跃度: ⭐⭐⭐⭐ (活跃维护,ROS 2 Tier-1 中间件)
核心特性
- 完整的 DDS 规范支持:DCPS、DDS Security、DDS C++ API、DDS XTypes、DDSI-RTPS
- 零配置发现:支持自动服务发现(如果支持多播)
- 高性能:小消息吞吐量超过 100 万条/秒,100 字节消息可达 GbE 的 90% 带宽
- 低延迟:在 Xeon E3-1270 V2 上延迟约 30μs
- 可选共享内存支持:可集成 Eclipse Iceoryx 实现零拷贝
优点 ✅
- 标准化:完全符合 OMG DDS 规范,与其他 DDS 实现可互操作
- 成熟稳定:在 ROS 2 中广泛使用,经过大量生产环境验证
- 功能完整:支持 QoS、安全、类型发现等高级特性
- 性能优秀:在以太网环境下性能表现优异
- 社区支持:Eclipse 基金会维护,有商业支持选项
缺点 ❌
- 复杂度较高:DDS 规范本身复杂,学习曲线陡峭
- 依赖较多:需要 IDL 编译器、类型系统等组件
- 内存占用:相比轻量级方案,内存占用较大
- C++ 绑定分离:C++ API 在独立仓库,需要额外集成
- 配置复杂:需要 XML 配置文件进行调优
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等)
- API 质量: ⭐⭐⭐⭐ (良好,但需要额外绑定)
- 性能: ⭐⭐⭐⭐ (优秀)
- 适用场景: 需要标准化 DDS 协议、与 ROS 2 互操作、企业级应用
2. Fast-DDS
Fast-DDS(eProsima Fast DDS)是最完整的开源 DDS 实现之一,用 C++ 编写,实现了 RTPS(Real-Time Publish-Subscribe)协议。它是 ROS 2 的默认中间件,在机器人、自动驾驶等领域有广泛应用。
基本信息
- GitHub: https://github.com/eProsima/Fast-DDS
- GitHub Stars: 2,705 ⭐
- Forks: 892
- 主要开发语言: C++
- 许可证: Apache-2.0
- 维护组织: eProsima
- 活跃度: ⭐⭐⭐⭐⭐ (非常活跃,ROS 2 默认中间件)
核心特性
- 双 API 层:高级 DDS API(易用)和底层 RTPS API(灵活控制)
- 可配置传输层:支持 UDP、TCP、共享内存等多种传输方式
- 即插即用:自动发现网络中的其他应用
- 模块化设计:支持从小型设备到复杂系统的扩展
- 商业支持:eProsima 提供商业支持和定制开发
优点 ✅
- 原生 C++:完全用 C++ 实现,API 设计现代
- 功能最全:DDS 规范覆盖最完整
- 性能优秀:经过大量性能测试和优化
- ROS 2 默认:ROS 2 LTS 版本默认使用
- 商业支持:有专业的商业支持团队
- 文档完善:有详细的文档和示例
缺点 ❌
- 复杂度高:DDS 规范复杂,配置选项多
- 依赖重:需要 Fast-DDS-Gen、IDL 等工具链
- 内存占用大:相比轻量级方案占用更多内存
- 学习曲线陡峭:需要理解 DDS 概念和 QoS 策略
- 违背轻量级目标:对于追求轻量级的框架可能过于复杂
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等,但文档完善)
- API 质量: ⭐⭐⭐⭐⭐ (优秀,原生 C++)
- 性能: ⭐⭐⭐⭐⭐ (优秀)
- 适用场景: 需要完整 DDS 功能、与 ROS 2 深度集成、企业级应用
3. LCM
LCM(Lightweight Communications and Marshalling)是一个轻量级通信和编组库,专为需要高带宽、低延迟的实时系统设计。最初由 MIT DARPA Urban Challenge 团队在 2006 年开发,在机器人研究领域有长期使用历史。
基本信息
- GitHub: https://github.com/lcm-proj/lcm
- GitHub Stars: 1,145 ⭐
- Forks: 420
- 主要开发语言: C/C++(核心),支持多种语言绑定
- 许可证: LGPL
- 维护组织: LCM 项目社区
- 活跃度: ⭐⭐⭐ (维护中,但更新频率较低)
核心特性
- 发布/订阅模型:简单的 pub/sub 消息传递
- UDP 多播:高效的广播机制
- 类型安全:自动生成序列化/反序列化代码
- 无中心化:点对点通信,无需代理或守护进程
- 日志回放:支持消息记录和回放功能
- 多语言支持:C、C++、Java、Python、Lua、MATLAB、Go 等
优点 ✅
- 简单易用:API 简洁,学习曲线平缓
- 轻量级:依赖少,无守护进程
- 低延迟:UDP 多播,延迟低
- 成熟稳定:在机器人领域有长期使用历史
- 无中心化:点对点通信,无单点故障
- 日志功能:内置消息记录和回放
缺点 ❌
- 功能简单:相比 DDS 功能较少,不支持 QoS
- 活跃度一般:更新频率较低,新特性较少
- 网络限制:主要依赖 UDP 多播,在 Wi-Fi 环境下可能不稳定
- 无服务发现:需要手动配置网络
- 类型系统简单:不支持复杂的类型演进
C++ 集成评估
- 集成难度: ⭐⭐ (简单)
- API 质量: ⭐⭐⭐ (简洁但功能有限)
- 性能: ⭐⭐⭐⭐ (良好,但受限于 UDP)
- 适用场景: 快速原型、研究项目、简单通信需求
4. ZeroMQ
ZeroMQ(libzmq)是一个轻量级消息内核库,扩展了标准套接字接口,提供异步消息队列、多种消息模式、消息过滤等功能。它是业界最成熟的消息传递库之一,在分布式系统、金融、游戏等领域广泛应用。
基本信息
- GitHub: https://github.com/zeromq/libzmq
- GitHub Stars: 10,730 ⭐
- Forks: 2,500
- 主要开发语言: C++(核心引擎)
- 许可证: MPL-2.0
- 维护组织: ZeroMQ 社区
- 活跃度: ⭐⭐⭐⭐⭐ (非常活跃,广泛使用)
核心特性
- 多种消息模式:Pub/Sub、Req/Rep、Push/Pull、Router/Dealer 等
- 异步 I/O:高性能异步消息处理
- 多传输协议:TCP、UDP、IPC、inproc 等
- 无代理:点对点通信,无需中间件
- 语言绑定丰富:Python、Java、C#、Go、Rust 等 40+ 语言
- 成熟稳定:经过大量生产环境验证
优点 ✅
- 非常成熟:GitHub Star 数最高,社区庞大
- 灵活强大:支持多种消息模式,适应各种场景
- 高性能:异步 I/O,性能优秀
- 无依赖:轻量级,无外部依赖
- 跨平台:支持 Linux、Windows、macOS、Android、iOS 等
- 文档完善:有详细的文档和大量示例
缺点 ❌
- 需要手动管理:需要手动处理连接、重试等
- 无自动发现:需要手动配置端点
- API 较底层:相比高级框架,API 更接近套接字
- 无内置序列化:需要手动处理消息序列化
- 学习曲线:需要理解不同的消息模式
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等,需要更多手动工作)
- API 质量: ⭐⭐⭐⭐ (功能强大但较底层)
- 性能: ⭐⭐⭐⭐⭐ (优秀)
- 适用场景: 需要灵活的消息模式、自定义通信逻辑、成熟稳定的方案
5. Zenoh
Zenoh(读作 Zeh-noh,接近"泽-诺")是一个现代化的发布/订阅中间件,统一了数据在传输、使用、存储和计算中的处理。它融合了传统的 pub/sub、地理分布式存储、查询和计算,同时保持了极高的时间和空间效率。
基本信息
- GitHub: https://github.com/eclipse-zenoh/zenoh
- GitHub Stars: 2,422 ⭐
- Forks: 235
- 主要开发语言: Rust(核心实现),C/C++(通过绑定)
- 许可证: Apache-2.0 / EPL-2.0
- 维护组织: Eclipse Foundation
- 活跃度: ⭐⭐⭐⭐⭐ (非常活跃,现代化项目)
核心特性
- 零开销 Pub/Sub:高性能发布/订阅
- 存储和查询:内置数据存储和查询功能
- 计算能力:支持分布式计算
- 多种传输:支持共享内存、TCP、UDP、串口等
- ROS 2 集成:可与 ROS 2 互操作
- 现代化设计:Rust 实现,内存安全
优点 ✅
- 性能优秀:在 Wi-Fi 和 4G 网络下性能优于 DDS
- 现代化:Rust 实现,内存安全,设计现代
- 功能丰富:不仅支持 pub/sub,还支持存储和查询
- 灵活传输:支持多种传输方式,包括共享内存
- Eclipse 项目:有基金会支持,长期维护有保障
- ROS 2 兼容:可与 ROS 2 应用互操作
缺点 ❌
- 相对较新:项目较新,生态不如 DDS 成熟
- C++ 绑定:核心是 Rust,C++ 通过 C 绑定使用
- 学习曲线:需要理解 Zenoh 的概念模型
- 文档相对较少:相比成熟项目文档较少
- 社区规模:社区规模不如 ZeroMQ 等成熟项目
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等,需要通过 C 绑定)
- API 质量: ⭐⭐⭐⭐ (良好,但需要通过 C 层)
- 性能: ⭐⭐⭐⭐⭐ (优秀,特别是在无线网络)
- 适用场景: 现代化项目、需要高性能网络通信、ROS 2 互操作
6. iceoryx(第一代)
Eclipse iceoryx(中文"冰羚")是一个真正的零拷贝进程间通信(IPC)中间件,使用共享内存实现。它起源于汽车行业,用于处理自动驾驶系统中的大量数据传输,延迟可低至微秒级。
基本信息
- GitHub: https://github.com/eclipse-iceoryx/iceoryx
- GitHub Stars: 2,008 ⭐
- Forks: 451
- 主要开发语言: C++
- 许可证: Apache-2.0
- 维护组织: Eclipse Foundation
- 活跃度: ⭐⭐⭐⭐ (活跃维护,但 iceoryx2 是未来方向)
核心特性
- 零拷贝:真正的零拷贝共享内存通信
- 极低延迟:消息延迟小于 1μs
- 高吞吐量:可处理 GB/s 级数据传输
- 静态内存:使用静态内存和锁无关算法
- 汽车级可靠性:设计用于关键系统
- ROS 2 集成:可通过 CycloneDDS 在 ROS 2 中使用
优点 ✅
- 性能极致:零拷贝,延迟极低(<1μs)
- 原生 C++:完全用 C++ 实现
- 高吞吐量:可处理 GB/s 级数据
- 汽车级:设计用于关键系统,可靠性高
- Eclipse 项目:有基金会支持
缺点 ❌
- 仅共享内存:主要支持同机器进程间通信
- 无网络支持:不支持跨机器通信
- API 较底层:需要更多手动管理
- 未来方向:iceoryx2 是未来发展方向
- 平台限制:某些平台不支持共享内存权限控制
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等)
- API 质量: ⭐⭐⭐ (功能强大但较底层)
- 性能: ⭐⭐⭐⭐⭐ (极致性能,但仅限本地)
- 适用场景: 同机器高性能通信、传感器数据流、实时控制系统
7. iceoryx2
iceoryx2 是 iceoryx 的下一代实现,用 Rust 重写,底层使用 Zenoh tunnel。它保持了 iceoryx 的零拷贝特性,同时增加了网络支持能力。
基本信息
- GitHub: https://github.com/eclipse-iceoryx/iceoryx2
- GitHub Stars: 2,000 ⭐
- Forks: 113
- 主要开发语言: Rust(核心实现),C/C++(通过绑定)
- 许可证: Apache-2.0 / MIT
- 维护组织: Eclipse Foundation
- 活跃度: ⭐⭐⭐⭐ (活跃开发,但仍在预发布阶段)
核心特性
- 零拷贝共享内存:保持第一代的零拷贝特性
- 网络支持:通过 Zenoh tunnel 支持跨机器通信
- Rust 实现:内存安全,现代化设计
- 多 API 支持:C、C++、Rust、Python 绑定
- 仍在开发:当前版本 v0.8.1(预发布)
优点 ✅
- 零拷贝:保持极致的零拷贝性能
- 网络支持:相比第一代增加了网络能力
- 现代化:Rust 实现,内存安全
- 未来方向:是 iceoryx 的未来发展方向
缺点 ❌
- 仍在开发:尚未正式发布,API 可能变化
- C++ 绑定:核心是 Rust,C++ 通过绑定使用
- 生态不成熟:项目较新,生态不如第一代成熟
- 文档较少:相比成熟项目文档较少
C++ 集成评估
- 集成难度: ⭐⭐⭐⭐ (较高,项目仍在开发)
- API 质量: ⭐⭐⭐ (良好,但可能变化)
- 性能: ⭐⭐⭐⭐⭐ (优秀,但需要验证)
- 适用场景: 未来项目、愿意承担风险、需要零拷贝+网络
8. NNG(nanomsg-next-generation)
NNG 是 nanomsg 的下一代实现,是一个轻量级、无代理的消息传递库。它重写了 nanomsg,增加了可靠性、可扩展性、安全性和可维护性,同时保持了 API 和协议兼容性。
基本信息
- GitHub: https://github.com/nanomsg/nng
- GitHub Stars: 4,481 ⭐
- Forks: 542
- 主要开发语言: C
- 许可证: MIT
- 维护组织: nanomsg 社区
- 活跃度: ⭐⭐⭐⭐(活跃维护)
核心特性
- 多种消息模式:Pub/Sub、Req/Rep、Push/Pull 等
- 异步 I/O:使用异步 I/O 和线程池
- 安全性:支持 TLS 1.2/1.3 传输
- 可扩展性:模块化架构,易于扩展
- 兼容性:与 nanomsg 协议和 API 兼容
- 生产就绪:设计用于生产环境
优点 ✅
- 轻量级:无代理,依赖少
- 可靠性:设计用于生产环境
- 安全性:支持 TLS 加密
- 兼容性:与 nanomsg 兼容
- MIT 许可证:商业友好
- C 实现:易于集成到 C++ 项目
缺点 ❌
- C 语言:核心是 C,C++ 需要 C 接口包装
- 功能相对简单:相比 DDS 功能较少
- 无自动发现:需要手动配置
- 社区规模:不如 ZeroMQ 大
- 文档相对较少:相比成熟项目文档较少
C++ 集成评估
- 集成难度: ⭐⭐⭐ (中等,C 接口需要包装)
- API 质量: ⭐⭐⭐ (功能良好但较底层)
- 性能: ⭐⭐⭐⭐ (良好)
- 适用场景: 需要轻量级方案、C 接口友好、生产环境
综合对比表
| 项目 | Stars | 语言 | 性能 | 复杂度 | 网络 | 共享内存 |
|---|---|---|---|---|---|---|
| CycloneDDS | 1,159 | C/C++ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ✅ | ✅ |
| Fast-DDS | 2,705 | C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ | ✅ |
| LCM | 1,145 | C/C++ | ⭐⭐⭐ | ⭐⭐ | ✅ | ❌ |
| ZeroMQ | 10,730 | C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | ✅(inproc) |
| Zenoh | 2,422 | Rust/C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | ✅ |
| iceoryx | 2,008 | C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ❌ | ✅ |
| iceoryx2 | 2,000 | Rust/C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | ✅ |
| NNG | 4,481 | C | ⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | ✅(inproc) |
针对 C++ 框架的选型建议
场景一:追求极致轻量级和简单性
推荐:LCM 或 NNG
- LCM:如果只需要简单的 pub/sub,API 简洁,学习曲线平缓
- NNG:如果需要更多消息模式,MIT 许可证,商业友好
理由:
- 依赖少,无复杂配置
- API 简单,易于集成
- 适合快速开发和原型验证
场景二:需要高性能本地通信(同机器)
推荐:iceoryx(第一代)
理由:
- 原生 C++ 实现,零拷贝,延迟 <1μs
- 适合传感器数据流、实时控制
- 成熟稳定,有 ROS 2 集成经验
注意:仅支持本地通信,需要配合网络库使用
场景三:需要高性能网络通信
推荐:Zenoh 或 ZeroMQ
- Zenoh:如果追求现代化设计,在 Wi-Fi/4G 下性能优于 DDS
- ZeroMQ:如果需要成熟稳定、社区庞大、灵活的消息模式
理由:
- Zenoh 在无线网络下性能优秀,设计现代
- ZeroMQ 非常成熟,生态丰富,文档完善
场景四:需要与 ROS 2 互操作
推荐:Fast-DDS 或 CycloneDDS
- Fast-DDS:ROS 2 默认,功能最全,原生 C++
- CycloneDDS:ROS 2 Tier-1,更轻量,性能优秀
理由:
- 与 ROS 2 深度集成
- 标准化 DDS 协议,可互操作
- 在机器人领域有广泛应用
场景五:混合方案
推荐组合:iceoryx(本地)+ Zenoh(网络)
理由:
- 本地通信:使用 iceoryx 实现零拷贝,延迟 <1μs
- 网络通信:使用 Zenoh 实现高性能网络传输
- 优势 :
- 本地通信极致性能
- 网络通信现代化、高性能
- 两者都是 Eclipse 项目,长期维护有保障
- 可根据场景自动选择传输方式
推荐方案
方案一:轻量级推荐(最佳平衡)
iceoryx(本地)+ Zenoh(网络)
- 本地通信:iceoryx 提供零拷贝,延迟 <1μs
- 网络通信:Zenoh 提供高性能网络传输
- 现代化:两者都是 Eclipse 项目,设计现代
- C++ 友好:iceoryx 原生 C++,Zenoh 有 C++ 绑定
- 性能优秀:本地和网络都有优秀性能
- 长期维护:Eclipse 基金会支持
适用场景:追求轻量级、高性能、现代化的框架
方案二:成熟稳定推荐
ZeroMQ
- 非常成熟:10,730 stars,社区庞大
- 功能强大:多种消息模式,灵活
- 性能优秀:异步 I/O,高性能
- 文档完善:有详细文档和大量示例
- 原生 C++:核心引擎用 C++ 实现
适用场景:需要成熟稳定、功能灵活、社区支持
方案三:ROS 2 兼容推荐
Fast-DDS 或 CycloneDDS
- ROS 2 集成:深度集成 ROS 2
- 标准化:符合 DDS 规范
- 功能完整:支持 QoS、安全等高级特性
- 复杂度:相对复杂,可能违背轻量级目标
适用场景:需要与 ROS 2 互操作、企业级应用
总结
对于开发一个轻量级、高性能、用于量产 的 C++ 机器人框架,推荐使用 iceoryx(本地)+ Zenoh(网络)的混合方案:
- 本地通信:iceoryx 提供零拷贝共享内存,延迟 <1μs,适合传感器数据流和实时控制
- 网络通信:Zenoh 提供高性能网络传输,在 Wi-Fi/4G 下性能优于 DDS
- 现代化设计:两者都是 Eclipse 项目,设计现代,长期维护有保障
- C++ 友好:iceoryx 原生 C++,Zenoh 有完善的 C++ 绑定
- 轻量级:相比完整 DDS 实现,两者都更轻量
如果追求成熟稳定、社区支持 ,ZeroMQ 也是一个优秀的选择,它非常成熟,功能强大,文档完善。
如果必须与 ROS 2 深度互操作 ,可以考虑 Fast-DDS 或 CycloneDDS,但需要注意它们可能违背轻量级目标。