技術文檔丨 Can總線與定位模塊

本文做者:Apollo開發者社區javascript

CAN(Controller Area Network )總線在整個無人駕駛系統中有着十分重要的做用。除了在VCU信號須要經過CAN總線進行傳輸外,無人車上的某些傳感器(如雷達、Mobileye)的信號傳遞也是經過CAN實現的。java

 

定位是讓無人車知道自身確切位置的方法,這是一個美妙可是十分艱難的任務,同時也對無人駕駛車十分重要。定位不單單是找出自身的大概方位,而是要以10cm級別,將車感信息與高精地圖信息進行比較來精確的位置尋找。算法

 

  如下,ENJOY  bash

 

Can總線

 

簡介

 

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命令編譯您的代碼。

原文連接地址:https://developer.baidu.com/topic/show/290452

相關文章
相關標籤/搜索