Apollo与ROS

Apollo项目基于ROS,可是对其进行了改造,主要包括下面三个方面:编程

  1. 通讯性能优化
  2. 去中心化网络拓扑
  3. 数据兼容性扩展

通讯性能优化

自动驾驶车辆中包含了大量的传感器,这些传感器可能以很是高频的速度产生数据,因此整个系统对于数据传输效率要求很高。在ROS系统中,从数据的发布到订阅节点之间须要进行数据的拷贝。性能优化

在数据量很大的状况下,很显然这会影响数据的传输效率。因此Apollo项目对于ROS第一个改造就是将经过共享内存来减小数据拷贝,以提高通讯性能。以下图所示:网络

1647db03b937b890

去中心化网络拓扑

前文咱们提到,ROS系统中包含了一个通讯的主节点,全部其余节点都要借助于这个节点来进行通讯。因此,很显然的,假如这个节点发生了通讯故障,就会影响整个系统的通讯。而且,整个结构还缺少异常恢复机制。编程语言

因此Apollo项目对于ROS的第二个改造就是去除这种中心化的网络结构。Apollo使用RTPS(Real-Time Publish-Subscribe)服务发现协议实现彻底的P2P网络拓扑。性能

关于RTPS详见这里:Real-Time Publish-Subscribe优化

数据兼容性扩展

Apollo项目对于ROS最后一个较大的改进就是对于数据格式的调整。google

在ROS系统中,使用msg描述文件定义模块间的消息接口。但不幸的是,接口升级以后不一样的版本的模块难以兼容。spa

所以,Apollo选择了Google的Protocol Buffers格式数据来解决这个问题。blog

Protocol Buffers,是Google公司开发的一种数据描述语言,相似于XML可以将结构化数据序列化,可用于数据存储、通讯协议等方面。它不依赖于语言和平台而且可扩展性极强。现阶段官方支持C++、JAVA、Python三种编程语言,但能够找到大量的几乎涵盖全部语言的第三方拓展包。接口

参考连接:https://qiangbo-workspace.oss-cn-shanghai.aliyuncs.com/2018-07-07-baidu_apollo/ROS%E5%9C%A8%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E7%9A%84%E6%8E%A2%E7%B4%A2%E5%92%8C%E5%AE%9E%E8%B7%B5.pdf

相关文章
相关标签/搜索