本文做者:Apollo開發者社區javascript
CAN(Controller Area Network )總線在整個無人駕駛系統中有着十分重要的做用。除了在VCU信號須要經過CAN總線進行傳輸外,無人車上的某些傳感器(如雷達、Mobileye)的信號傳遞也是經過CAN實現的。java
定位是讓無人車知道自身確切位置的方法,這是一個美妙可是十分艱難的任務,同時也對無人駕駛車十分重要。定位不單單是找出自身的大概方位,而是要以10cm級別,將車感信息與高精地圖信息進行比較來精確的位置尋找。算法
如下,ENJOY bash
Can總線接收和執行來自控制模塊的命令,收集汽車底盤的狀態信息並反饋給控制模塊。函數
控制命令ui
底盤狀態spa
底盤各部件消息狀態code
Canbus模塊主要包括如下幾個部分:對象
車輛:車輛自己,包括車輛控制器和消息管理器繼承
CAN 客戶端— CAN 客戶端已被移動到/modules/drivers/canbus 目錄下,由於它已經被使用canbus 協議的不一樣傳感器共享。
經過繼承CanClient類的方式,您能夠在文件夾can_client中實現本身的CAN 客戶端。
注意:
不要忘了在‘CanClientFactory’(Can客戶端工廠)類中註冊您本身的CAN 客戶端。
在文件夾vehicle下,您也能夠經過繼承VehicleController
MessageManager類的方式實現本身的車輛控制器和消息管理器。
注意:
不要忘了在`VehicleFactory`類中註冊您的車輛。
該模塊提供定位服務。定位模塊中提供瞭如下兩種方法:
基於 RTK(Real Time Kinematic,實時動態定位)的方法,該方法結合GPS和IMU(慣性測量單元)信息。
多傳感器融合方法,該方法採用GPS,IMU和激光雷達的信息。
在基於RTK 的定位方法中,有兩個輸入:
GPS – 全球地理信息定位系統
IMU – 慣性測量單元
在多傳感器融合的定位方法中,由以下三個輸入:
GPS – 全球地理信息定位系統
IMU – 慣性測量單元
LiDAR – 激光雷達傳感器
更多信息,請參閱如下論文:
做者:Guowei Wan, Xiaolong Yang, Renlan Cai, Hao Li, Yao Zhou, Hao Wang, Shiyu Song.
題目:《基於多傳感器融合的不一樣城市場景下的堅固、精確的車輛定位》
"Robust and Precise Vehicle Localization Based on Multi-Sensor Fusion in Diverse City Scenes," 2018 IEEE International Conference on Robotics and Automation (ICRA), Brisbane, QLD, 2018, pp. 4670-4677. doi: 10.1109/ICRA.2018.8461224. link
輸出爲一個由Protobuf 格式定義的對象實例LocalizationEstimate,該實例可在localization/proto/localization.proto 文件中查找到。
當前,基於RTK的定位方法由RTKLocalization類實現。若是您正在實現一個新的定位算法,例如FooLocalization,您可能須要執行如下步驟:
1. 在 proto/localization_config.
proto文件中, 在LocalizationType 中添加一個值爲FOO的枚舉類型。
2. 切換到 modules/localization 目錄, 而後建立一個名爲 foo 的文件夾。在 foo 文件夾中,參照 rtk目錄下RTKLocalization 類的代碼實現本身的定位算法類FooLocalization。FooLocalization 必須是LocalizationBase 的子類。另外,參照 rtk/BUILD文件建立一個名爲 Also foo/BUILD 的文件。
3. 您須要在函數Localization::RegisterLocalizationMethods()中註冊您的新類FooLocalization,該函數在文件 localization.cc 中實現。您能夠在該函數的最後插入如下代碼來註冊本身添加的類:
localization_factory_.Register(LocalizationConfig::FOO, []()->LocalizationBase* { return new FooLocalization(); });
4.確保您的代碼編譯時包含定義FooLocalization 類的頭文件FooLocalization。
5. 如今您能夠回到apollo的根目錄,使用bash apollo.sh build命令編譯您的代碼。