Apollo项目基于ROS,可是对其进行了改造,主要包括下面三个方面:编程
自动驾驶车辆中包含了大量的传感器,这些传感器可能以很是高频的速度产生数据,因此整个系统对于数据传输效率要求很高。在ROS系统中,从数据的发布到订阅节点之间须要进行数据的拷贝。性能优化
在数据量很大的状况下,很显然这会影响数据的传输效率。因此Apollo项目对于ROS第一个改造就是将经过共享内存来减小数据拷贝,以提高通讯性能。以下图所示:网络
前文咱们提到,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三种编程语言,但能够找到大量的几乎涵盖全部语言的第三方拓展包。接口