基于 C++ 的机器人软件框架(具身智能)开源通信库选型分析

最近在研究如何实现一套轻量级机器人软件框架,类似于 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 实现零拷贝

优点 ✅

  1. 标准化:完全符合 OMG DDS 规范,与其他 DDS 实现可互操作
  2. 成熟稳定:在 ROS 2 中广泛使用,经过大量生产环境验证
  3. 功能完整:支持 QoS、安全、类型发现等高级特性
  4. 性能优秀:在以太网环境下性能表现优异
  5. 社区支持:Eclipse 基金会维护,有商业支持选项

缺点 ❌

  1. 复杂度较高:DDS 规范本身复杂,学习曲线陡峭
  2. 依赖较多:需要 IDL 编译器、类型系统等组件
  3. 内存占用:相比轻量级方案,内存占用较大
  4. C++ 绑定分离:C++ API 在独立仓库,需要额外集成
  5. 配置复杂:需要 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 提供商业支持和定制开发

优点 ✅

  1. 原生 C++:完全用 C++ 实现,API 设计现代
  2. 功能最全:DDS 规范覆盖最完整
  3. 性能优秀:经过大量性能测试和优化
  4. ROS 2 默认:ROS 2 LTS 版本默认使用
  5. 商业支持:有专业的商业支持团队
  6. 文档完善:有详细的文档和示例

缺点 ❌

  1. 复杂度高:DDS 规范复杂,配置选项多
  2. 依赖重:需要 Fast-DDS-Gen、IDL 等工具链
  3. 内存占用大:相比轻量级方案占用更多内存
  4. 学习曲线陡峭:需要理解 DDS 概念和 QoS 策略
  5. 违背轻量级目标:对于追求轻量级的框架可能过于复杂

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 等

优点 ✅

  1. 简单易用:API 简洁,学习曲线平缓
  2. 轻量级:依赖少,无守护进程
  3. 低延迟:UDP 多播,延迟低
  4. 成熟稳定:在机器人领域有长期使用历史
  5. 无中心化:点对点通信,无单点故障
  6. 日志功能:内置消息记录和回放

缺点 ❌

  1. 功能简单:相比 DDS 功能较少,不支持 QoS
  2. 活跃度一般:更新频率较低,新特性较少
  3. 网络限制:主要依赖 UDP 多播,在 Wi-Fi 环境下可能不稳定
  4. 无服务发现:需要手动配置网络
  5. 类型系统简单:不支持复杂的类型演进

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+ 语言
  • 成熟稳定:经过大量生产环境验证

优点 ✅

  1. 非常成熟:GitHub Star 数最高,社区庞大
  2. 灵活强大:支持多种消息模式,适应各种场景
  3. 高性能:异步 I/O,性能优秀
  4. 无依赖:轻量级,无外部依赖
  5. 跨平台:支持 Linux、Windows、macOS、Android、iOS 等
  6. 文档完善:有详细的文档和大量示例

缺点 ❌

  1. 需要手动管理:需要手动处理连接、重试等
  2. 无自动发现:需要手动配置端点
  3. API 较底层:相比高级框架,API 更接近套接字
  4. 无内置序列化:需要手动处理消息序列化
  5. 学习曲线:需要理解不同的消息模式

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 实现,内存安全

优点 ✅

  1. 性能优秀:在 Wi-Fi 和 4G 网络下性能优于 DDS
  2. 现代化:Rust 实现,内存安全,设计现代
  3. 功能丰富:不仅支持 pub/sub,还支持存储和查询
  4. 灵活传输:支持多种传输方式,包括共享内存
  5. Eclipse 项目:有基金会支持,长期维护有保障
  6. ROS 2 兼容:可与 ROS 2 应用互操作

缺点 ❌

  1. 相对较新:项目较新,生态不如 DDS 成熟
  2. C++ 绑定:核心是 Rust,C++ 通过 C 绑定使用
  3. 学习曲线:需要理解 Zenoh 的概念模型
  4. 文档相对较少:相比成熟项目文档较少
  5. 社区规模:社区规模不如 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. 性能极致:零拷贝,延迟极低(<1μs)
  2. 原生 C++:完全用 C++ 实现
  3. 高吞吐量:可处理 GB/s 级数据
  4. 汽车级:设计用于关键系统,可靠性高
  5. Eclipse 项目:有基金会支持

缺点 ❌

  1. 仅共享内存:主要支持同机器进程间通信
  2. 无网络支持:不支持跨机器通信
  3. API 较底层:需要更多手动管理
  4. 未来方向:iceoryx2 是未来发展方向
  5. 平台限制:某些平台不支持共享内存权限控制

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(预发布)

优点 ✅

  1. 零拷贝:保持极致的零拷贝性能
  2. 网络支持:相比第一代增加了网络能力
  3. 现代化:Rust 实现,内存安全
  4. 未来方向:是 iceoryx 的未来发展方向

缺点 ❌

  1. 仍在开发:尚未正式发布,API 可能变化
  2. C++ 绑定:核心是 Rust,C++ 通过绑定使用
  3. 生态不成熟:项目较新,生态不如第一代成熟
  4. 文档较少:相比成熟项目文档较少

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 兼容
  • 生产就绪:设计用于生产环境

优点 ✅

  1. 轻量级:无代理,依赖少
  2. 可靠性:设计用于生产环境
  3. 安全性:支持 TLS 加密
  4. 兼容性:与 nanomsg 兼容
  5. MIT 许可证:商业友好
  6. C 实现:易于集成到 C++ 项目

缺点 ❌

  1. C 语言:核心是 C,C++ 需要 C 接口包装
  2. 功能相对简单:相比 DDS 功能较少
  3. 无自动发现:需要手动配置
  4. 社区规模:不如 ZeroMQ 大
  5. 文档相对较少:相比成熟项目文档较少

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(网络)的混合方案

  1. 本地通信:iceoryx 提供零拷贝共享内存,延迟 <1μs,适合传感器数据流和实时控制
  2. 网络通信:Zenoh 提供高性能网络传输,在 Wi-Fi/4G 下性能优于 DDS
  3. 现代化设计:两者都是 Eclipse 项目,设计现代,长期维护有保障
  4. C++ 友好:iceoryx 原生 C++,Zenoh 有完善的 C++ 绑定
  5. 轻量级:相比完整 DDS 实现,两者都更轻量

如果追求成熟稳定、社区支持ZeroMQ 也是一个优秀的选择,它非常成熟,功能强大,文档完善。

如果必须与 ROS 2 深度互操作 ,可以考虑 Fast-DDSCycloneDDS,但需要注意它们可能违背轻量级目标。

参考资料

相关推荐
Aevget2 小时前
MFC扩展库BCGControlBar Pro v37.2新版亮点:控件功能进一步升级
c++·mfc·界面控件
Tansmjs3 小时前
C++与GPU计算(CUDA)
开发语言·c++·算法
具身智能之心4 小时前
Sunday的ACT-1分享!未使用任何机器人本体数据训练的VLA,解决超长时程任务
机器人·vla模型·长时程任务
挖矿大亨4 小时前
c++中的函数模版
java·c++·算法
偷星星的贼115 小时前
C++中的对象池模式
开发语言·c++·算法
CN-Dust5 小时前
【C++】洛谷P3073 [USACO13FEB] Tractor S
开发语言·c++
2401_829004025 小时前
C++中的适配器模式变体
开发语言·c++·算法
平生不喜凡桃李5 小时前
二叉树遍历非递归写法: 栈
c++··二叉树遍历·非递归
-To be number.wan5 小时前
算法学习日记 | 枚举
c++·学习·算法