自动驾驶通信中间件ecal源码分析—1. 什么是ecal

前面做了一套自动驾驶通信中间件,阅读了ROS 1.0 roscppecal相关源码,接下来将逐步对ecal的核心源码进行简要分析。

1.什么是ecal

ecal是德国大陆开源的一套自动驾驶通信中间件。

image-20220301172115926

The enhanced Communication Abstraction Layer (eCAL) is a middleware that enables scalable, high performance interprocess communication on a single computer node or between different nodes in a computer network. eCAL uses a publish - subscribe pattern to automatically connect different nodes in the network.

eCAL automatically chooses the best available data transport mechanism for each link:

  • Shared memory for local communication (incredible fast!)
  • UDP for network communication

如上所述,ecal是enhanced communication abstraction layer的首字母缩写,增强的通讯抽象层,是一套扩展性强、高性能的进程间通信中间件,可用于本机或者局域网内机器。ecal会自动去选择最优的通信方式去进行数据传输,例如:

  • 对于本机内的进程,其通信方式自动选择为共享内存;
  • 对于局域网内的跨机器之间的通信,会使用UDP组播的方式进行数据传输(最新版本支持TCP了)。

最初是没有TCP传输层,下面是添加tcp传输协议的Issue,因为对于大数据量传输,采用UDP的方式,如果丢了某一帧,则整个数据都无法使用。

image-20220301173756321

TCP相对于UDP最大的优势就是可靠性高,因为是面向连接的,但是也有一些缺点:

  • TCP是单播,要实现N:N多对多通信的模式会产生非常多的TCP连接,增加网络负担;
  • TCP由于是面向连接的协议,单从协议层面比UDP的“传输负担”要大一些,但是因为其面向连接的可靠性传输保证,弥补了这一缺点。

2.ecal支持的功能

  • eCAL is fast (1 - 10 GB/s, depends on payload size)

进程间数据传输效率非常高,1——10GB/s(依赖于数据载荷)。

下面是一组测试数据,测试的场景是:同一机器上的进程间(使用共享内存SHM)、一对一的publisher/subscriber在不同数据载荷下的数据传输延时、 数据载荷1kB—512kB时发送200000 samples,数据载荷大于512KB时发送10000 samples,单位为微秒(us),其中最后一列为Iceoryx的测试结果,Iceoryx是另外一个优秀的进程间通信的中间件,进程间数据传输可以做到真正的零拷贝(true zero-copy)。

Payload Size (kB)Win10 AMD64 (µs)eCAL SHMUbuntu18 AMD64 (µs)eCAL SHMUbuntu18 AMD64 (µs)Iceoryx SHM
11046
21046
41056
81156
161266
321378
64161010
128211513
256323319
512565028
102410315482
2048363392177
4096867877420
819218141119534
16384395622521060

从上述测试结果可以看出来,在Ubuntu18上eCAL SHM和Iceoryx SHM的传输效率相当,发送16384KB的数据延时仅有2252us,也就是2毫秒左右。

  • eCAL provides both publish-subscribe and server-client patterns

ecal提供了publish-subscribe和server-client通信模式。

  • eCAL is brokerless

ecal是没有中间代理商的分布式网络架构。

  • eCAL provides a C++ and C interface for easy integration into other languages (like python, csharp or rust)

ecal提供了c++和c的接口,API可以比较容易的进行扩展,目前已经支持python,csharp和rust。

  • eCAL can be used in conjunction with Matlab Simulink as eCAL Simulink Toolbox for simulation and prototyping

ecal同时还开发了simulink对应的toolbox

ecal提供了完备的外围工具,例如数据录制、回放、监控。

  • eCAL is simple and zero-conf. No complex configuration for communication details and QOS settings are needed

ecal使用起来非常简单,基本不需要配置。不过QOS也是没法设置的。

ecal支持很多种类的数据序列化/反序列化方式,默认是google protobuf,还支持CapnProto和Flatbuffer等

  • eCAL uses the standardized recording format HDF5

ecal数据录制的文件格式采用HDF5.

  • eCAL integrates gently into your ROS2 environment with the eCAL RMW

ecal目前已经实现了ROS2对应的RMW.

  • eCAL runs on a wide variety of operating systems

ecal可跨平台,支持Windows/Linux/QNX/MacOS/FreeBSD等。其外围工具,例如数据录制、回放、监控等GUI软件都是基于QT开发,可轻松跨平台。

3.开源协议

eCAL is licensed under Apache License 2.0. You are free to

  • Use eCAL commercially
  • Modify eCAL
  • Distribute eCAL

eCAL is provided on an “as is” basis without warranties or conditions of any kind.

ecal遵循的是最友好的Apache License 2.0开源协议,所以你可以对ecal进行任意修改、商用等。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值