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三種編程語言,但能夠找到大量的幾乎涵蓋全部語言的第三方拓展包。接口