Eclipse iceoryx 源码分析文档

Eclipse iceoryx 源码分析文档

源码:ros2_humble/src/eclipse-iceoryx/iceoryx · v2.0.6
进程间零拷贝共享内存中间件 · ROS 2 Humble 中作为 CycloneDDS 的 SHM 传输后端


推荐阅读顺序

第一步:整体框架(必读)

顺序 文档 说明
1 00-整体框架与模块划分.md 定位、模块依赖、进程模型、数据流总览
2 01-hoofs基础库.md 无异常/无堆分配基础库、无锁原语、RelativePointer 指针相对化
3 02-mepoo共享内存与内存池.md Segment、MemPool/LoFFLi、ChunkHeader、跨进程引用计数
4 03-popo发布订阅与通信原语.md Publisher/Subscriber、Port 体系、WaitSet/Listener、request/response
5 04-RouDi守护进程与服务发现.md RouDi 启动、进程注册/心跳、PortManager、CaPro 发现
6 05-零拷贝数据路径详解.md loan → publish → take 全链路重点

第二步:集成与实践

文档 内容
06-C绑定与DDS网关.md iceoryx_binding_c C API、iox-dds-gateway(本仓 COLCON_IGNORE)
07-与CycloneDDS及ROS2集成.md ENABLE_SHM 全链路、SHEM locator、LoanedMessage、常见坑
08-示例与性能工具.md icehello/iceperf 等示例走读、introspection 排障 checklist

总览

文档 内容
Eclipse iceoryx 源码详细分析.md 单篇架构总览 + ROS 2 集成

模块 → 源码路径

模块 路径 职责
iceoryx_hoofs iceoryx_hoofs/ OS 抽象、容器、无锁原语、RelativePointer
iceoryx_posh iceoryx_posh/ 核心:mepoo / popo / roudi / runtime / capro
iceoryx_binding_c iceoryx_binding_c/ C API(CycloneDDS 用它接入)
iceoryx_dds iceoryx_dds/ DDS 网关(Humble 构建时 COLCON_IGNORE)
iceoryx_examples iceoryx_examples/ 示例与 iceperf 基准
tools tools/ iox-introspection-client 等

核心概念速记

概念 一句话
RouDi 守护进程:建共享内存、管端口与发现,不在数据路径上
Chunk 共享内存中的固定大小数据块(ChunkHeader + payload)
MemPool 固定大小块的无锁内存池(LoFFLi free-list)
loan/publish/take 借块写入 → 推相对指针入队 → 订阅端直接读,全程零拷贝
RelativePointer (segment id, offset) 编码,使指针在不同进程映射地址下有效
CaPro service/instance/event 三元组的发现协议

快速上手(ROS 2 零拷贝)

1
2
3
4
5
6
7
8
9
# 1. 启动 RouDi
iox-roudi

# 2. 启用 CycloneDDS 共享内存
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><SharedMemory><Enable>true</Enable></SharedMemory></Domain></CycloneDDS>'

# 3. 观察内存池占用
iox-introspection-client --mempool

细节与限制(QoS 约束、POD 类型要求、mempool 配置)见 07-与CycloneDDS及ROS2集成.md
排障从 08-示例与性能工具.md 的 checklist 开始。

对照阅读:../cyclonedds/README.md(网络路径) vs 本系列(同机共享内存路径)。

文章互动

阅读 --

留言

0 条留言

正在加载留言…