1. iceOryx 是什么?
这是一头漂亮的"冰羚",它是一种用于汽车软件中的 ICP 通信中间件,由 Eclipse 基金会发布和维护。
通信中间件在汽车软件开发中占据越来越重要的地位,这是因为自动驾驶的发展带动了系统内部不同进程、线程之间巨量的数据交换,目前这样的通信量能达到 GB/s 以上,如何高效实现通信要求是每一个自动驾驶开发团队需要认真考虑的事情。
iceoryx 运用“零拷贝”技术实现进程间通信,具有快速、灵活和可靠的发布/订阅架构。
2. iceoryx 的特性
快速 | 灵活 | 可靠 |
---|---|---|
真正的零拷贝技术,基于共享内存实现 | 多操作系统支持 | 根据汽车软件需求而设计 |
消息通信时延<1us | 服务发现支持 | 基于静态内存和无锁算法的实现 |
数据通信效率达到 1GB/s | 易于集成,能集成到ROS2、AP Autosar 等框架 | 大量的C++库(STL 安全实现) |
综上所述,iceoryx 就是非常适合汽车软件开发的开源通信中间件,速度快易于集成。
所以,需要知名的软件中间件也已经可以集成 iceoryx 了。
- Eclipse Cyclone DDS,
- eCAL 来自 Continental,
- RTA-VRTE 来自 ETAS
- Apex.OS 来自 Apex.AI.
3. iceoryx 基础概念
iceoryx 的核心概念不多,只要掌握 RouDi、Runtime、Publisher、Subscriber、Topic 这些概念就可以进行基本通信功能的开发了。
3.1 RouDi
iceoryx 的守护进程,不同的应用需要与它进行连接才能正常通信。
重要提示:运行iceoryx程序前,一定要先启动守护进程 iox-roudi
# 在终端启动守护进程
iox-roudi
3.2 Runtime
每个需要在 iceoryx 框架下运行的应用,都需要初始化它的 runtime。
constexpr char APP_NAME[] = "frank909";
iox::runtime::PoshRuntime::initRuntime(APP_NAME);
3.3 Publisher
数据发送器,需要绑定 topic 使用。