1. iceOryx 是什么?
这是一头漂亮的"冰羚",它是一种用于汽车软件中的 ICP 通信中间件,由 Eclipse 基金会发布和维护。
通信中间件在汽车软件开发中占据越来越重要的地位,这是因为自动驾驶的发展带动了系统内部不同进程、线程之间巨量的数据交换,目前这样的通信量能达到 GB/s 以上,如何高效实现通信要求是每一个自动驾驶开发团队需要认真考虑的事情。
iceoryx 运用“零拷贝”技术实现进程间通信,具有快速、灵活和可靠的发布/订阅架构。
2. iceoryx 的特性
综上所述,iceoryx 就是非常适合汽车软件开发的开源通信中间件,速度快易于集成。
所以,需要知名的软件中间件也已经可以集成 iceoryx 了。
3. iceoryx 基础概念
iceoryx 的核心概念不多,只要掌握 RouDi、Runtime、Publisher、Subscriber、Topic 这些概念就可以进行基本通信功能的开发了。
3.1 RouDi
iceoryx 的守护进程,不同的应用需要与它进行连接才能正常通信。 重要提示:运行iceoryx程序前,一定要先启动守护进程 iox-roudi
3.2 Runtime
每个需要在 iceoryx 框架下运行的应用,都需要初始化它的 runtime。
3.3 Publisher
数据发送器,需要绑定 topic 使用。
FrankMsg 是一个 Topic,一个 Publisher 创建时需要指定 Topic,用来指定要发送的数据。
3.4 Subscriber
数据接收器,需要绑定 topic 使用。
3.5 Topic
Topic 是数据载体,Publisher 发送一个 Topic,Subscriber 能够接收绑定的 Topic 而不需要关注 Topic 来自何处,Publisher 与 Subscriber 要正常通信就需要绑定同一个 Topic。
3.6 信息轮询与信号触发
如果需要实时获取 Topic 信息,则可以不断调用 subscriber 方法,但这样势必会增加计算资源造成算力浪费。
iceoryx 提供 2 种方式提升了数据获取效率:
4. Zero-Copy 如何实现?
iceoryx 号称实现了真正的零拷贝。那我们为什么需要零拷贝呢?
想象一下,自动驾驶系统中感知模块获取的摄像头图片 1s 内要传输 30 次,1 张图片在内存中的容量是 3M,那么一个模块接收感知模块的数据通信量 1s 内就达到 80M/s,在自动驾驶中一般不止一个模块会订阅感知模块的图像信息,那么数据量很容易就达到 400M/s,这将造成非常严重的通信效率隐患,要知道在自动驾驶系统中还有其他大量传感器数据,比如体积更大的激光雷达点云数据,如果通信速度不能保证,那么算法的效率和结果也会得不到保障,所以,我们要提速。
零拷贝技术是提速的一种方式。
两个不同进程进行数据交换,因为进程的物理资源是独立的,所以,同样一份数据在两个进程之间交互就需要拷贝副本,这会产生对应的 CPU 及内存IO耗时,如果通信频繁数据量大,通信的时延就会越来越大。
所以,我们要减少数据的多次拷贝。我们只需要一份数据,然后传递它的指针,因为指针一般是 4个字节,所以,无比 3M 一张的图片,我传递一个指针给对方,通信时间就下来了,并且可以传递给多个进程,时间消耗并不会显著增加。
5. 示例
5.1 iceoryx 安装
iceoryx 需要一些基本的依赖,这个以 Linux 环境为例。
然后下载源码仓库,并利用脚本编译。
5.2 一个简单的 pub-sub 通讯示例
这个示例很简单,我会定义一个 Topic。
topic_data.hpp
然后围绕 Topic 验证它的发布-订阅效果。
然后定义一个 Publisher 用来发消息。 一个 iceoryx 应用一定要初始化 runtime 的,并且这个 runtime 的名字是唯一的。
在上面展示的代码片断中,我初始化了 runtime,然后定义了 topic,然后发送数据。
接收数据代码如下:
同样需要初始化 runtime,然后创建 subcriber 绑定 FrankMsg 这个 Topic。
核心代码这些就足够了,最后需要配置 CMakeLists.txt。 我们编译代码后得到 frankpublisher 和 franksubscriber 2 个 bin 文件,接下来可以验证效果了。
重要提示:运行iceoryx程序前,一定要先启动守护进程 iox-roudi
以上就是本篇文章【汽车软件通信中间件iceoryx和它的零拷贝技术】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/6121.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多