Apollo項目基於ROS,但是對其進行了改造,主要包括下面三個方面:
- 通信性能優化
- 去中心化網絡拓撲
- 數據兼容性擴展
通信性能優化
自動駕駛車輛中包含了大量的傳感器,這些傳感器可能以非常高頻的速度產生數據,所以整個系統對於數據傳輸效率要求很高。在ROS系統中,從數據的發布到訂閱節點之間需要進行數據的拷貝。
在數據量很大的情況下,很顯然這會影響數據的傳輸效率。所以Apollo項目對於ROS第一個改造就是將通過共享內存來減少數據拷貝,以提升通信性能。如下圖所示:
去中心化網絡拓撲
前文我們提到,ROS系統中包含了一個通信的主節點,所有其他節點都要借助於這個節點來進行通信。所以,很顯然的,假如這個節點發生了通信故障,就會影響整個系統的通信。並且,整個結構還缺乏異常恢復機制。
所以Apollo項目對於ROS的第二個改造就是去除這種中心化的網絡結構。Apollo使用RTPS(Real-Time Publish-Subscribe)服務發現協議實現完全的P2P網絡拓撲。
關於RTPS詳見這里:Real-Time Publish-Subscribe
數據兼容性擴展
Apollo項目對於ROS最后一個較大的改進就是對於數據格式的調整。
在ROS系統中,使用msg描述文件定義模塊間的消息接口。但不幸的是,接口升級之后不同的版本的模塊難以兼容。
因此,Apollo選擇了Google的Protocol Buffers格式數據來解決這個問題。
Protocol Buffers,是Google公司開發的一種數據描述語言,類似於XML能夠將結構化數據序列化,可用於數據存儲、通信協議等方面。它不依賴於語言和平台並且可擴展性極強。現階段官方支持C++、JAVA、Python三種編程語言,但可以找到大量的幾乎涵蓋所有語言的第三方拓展包。