百度Apollo 2.5 导航模式 使用方法
Apollo 2.5版導航模式的使用方法
本博客參考百度apollo官方開發手冊,部分進行理解修改。
導航模式--官網開發手冊
?
在`Apollo`之前的版本中,感知、預測、導航、規劃模塊均依賴于高精地圖,而高精地圖的制作方法繁瑣且不透明,對于很多開發者而言,這是一個難以逾越的障礙。
基于相對地圖(`relative map`)的導航模式(`navigation?mode`),利用該模式可順利實施測試道路上的實車調試。
相對地圖是Apollo2.5引入的新特性。從架構層面,相對地圖模塊是連接高精地圖(`HD Map`)、感知(`Perception`)模塊和規劃(`Planning`)模塊的中間層。相對地圖模塊會實時生成基于車身坐標系的地圖(格式與高精地圖一致),并且輸出供規劃模塊使用的參考線。
解釋:1)導航模式使用相對地圖; 2)如果在導航模式下,相對地圖的參考線等數據會代替高精地圖;
?
導航模式的基本思路是:
1. 通過人工駕駛方式錄制測試道路上的行駛軌跡;
2. 利用`Apollo`工具對原始軌跡進行處理得到平滑軌跡,該軌跡既用于替代路由(`routing`)模塊輸出的導航路徑,也是規劃(`planning`)模塊用到的參考線(或稱指引線、中心線,`reference line`),還是生成相對地圖(`relative map`)的基準線。
此外,平滑軌跡還可用于替換高精地圖內某些車道的參考線(默認情況下,高精地圖將車道中心線作為參考線,在道路臨時施工等特殊情形下該方式很不合適,需使用人工錄制并平滑處理的軌跡替換特殊路段的車道參考線);
3. 駕駛員將車輛行駛到測試道路起點,在`Dreamview`中打開導航(`Navigation`)選項及相關功能模塊,切換到自動駕駛模式并啟動車輛;
4. 自動駕駛過程中,感知(`perception`)模塊的相機(`camera`)動態檢測道路邊界及障礙物,地圖(`map`)模塊下的相對地圖(`relative map`)子模塊基于參考線及道路邊界實時地生成相對地圖(使用以車輛當前位置為原點的相對坐標系),規劃(`planning`)模塊依據地圖模塊輸出的相對地圖和感知模塊輸出的障礙物信息,動態輸出局部行駛路徑給控制(`control`)模塊執行。
5. 目前,導航模式僅支持單車道行駛,可完成加減速、跟車、遇障礙物減速停車或在車道寬度允許的情形下對障礙物繞行等功能,后續版本的導航模式將會進一步完善以支持多車道行駛、交通標志和紅綠燈檢測等。
解釋:1)錄制分為兩種方式:
2)導航模式,不單需要參考線為基礎的相對地圖,還需要獲取感知障礙物信息。
?
本文對`Apollo2.5`版的構建、參考線數據采集與制作、`Dreamview`前端編譯配置、導航模式使用等內容進行全面闡述,希望能給各位開發者正常使用`Apollo 2.5`版帶來一定的便利。
?
## 一、Apollo 2.5版的構建
### 1.1 在Visual Studio Code中構建
打開`Visual Studio Code`,執行菜單命令`文件->打開文件夾`,在彈出的對話框中,選擇`Apollo項目`源文件夾,點擊“確定”,如下圖所示:
?
?
之后,執行菜單命令`任務->運行生成任務`或直接按快捷鍵`Ctrl+Shift+B`(與`Visual Studio`和`QT`的快捷鍵一致)構建工程,若之前沒有啟動過`Docker`,則編譯時會啟動`Docker`,需在底部終端窗口輸入超級用戶密碼。命令執行完畢,若在底部終端窗口出現`終端將被任務重用,按任意鍵關閉。`信息(如下圖所示),則表示構建成功。整個過程**一定要保持網絡暢通**,否則無法下載依賴包。構建過程可能會遇到一些問題,
?
?
### 1.2 在命令行中構建
按快捷鍵`Ctrl + Alt + T`打開命令行終端,輸入如下命令啟動`Docker`:
cd?your_apollo_project_root_dir
?#從中國大陸訪問,最好加上“ -C”選項,直接訪問中國大陸主機服務器以獲取恢復的下載速度?
bash docker/scripts/dev_start.sh -C
(網絡不好,難以拉docker;實在不行可以嘗試改docker軟件源(改為國內)
如果不行,就不用-C
bash docker/scripts/dev_start.sh
?
輸入如下命令進入Docker:
bash docker/scripts/dev_into.sh
?
在Docker內部,如下執行命令構建Apollo項目:
bash apollo.sh build
整個操作如下圖所示:
?
?
?
### 1.3 修改定位模塊UTM區域ID
`Apollo`項目定位(`localization`)模塊默認使用美國西部UTM坐標,在國內需要修改該值。在`Docker`外部,使用`vi`或其他文本編輯器,打開文件`[apollo項目根目錄]/modules/localization/conf/localization.conf`,將下述內容:
--local_utm_zone_id = 10
修改為下述內容(這是 廣東廣州地區的UTM區域ID,中國UTM柯林斯分區參考該|網頁):
--local_utm_zone_id = 49
具體的位置可以點擊查看,例如廣東廣州
?
**注意:**如果錄制數據時未修改上述內容,則線下模擬測試回放數據包時只能將錯就錯,千萬不能再修改該值,否則地圖上的參考線定位會出錯!有一次我采集數據時,忘了修改該值,回放數據時又進行修改,結果導致參考線定位到了美國西海岸!我取消修改,按`F5`鍵刷新瀏覽器后顯示就恢復正常了。
?
### 1.4 配置Dreamview使用的UTM區域ID
打開文件[apollo項目根目錄]/modules/common/data/global_flagfile.txt,在最后一行添加如下語句(這是長沙地區的UTM區域ID,中國UTM柯林斯分區參考該|網頁):
--local_utm_zone_id=49
?
## 二、參考線原始數據的采集
將構建好的`Apollo`項目文件導入車內工控機,并按照**步驟1.2**的方法進入`Docker`,再執行如下命令,啟動`Dreamview`服務端程序:
bash scripts/bootstrap.sh
在瀏覽器中打開網頁http://localhost:8888(注意不要使用代理),進入Dreamview界面,如下圖所示:
?
**1** ?駕駛員將車輛駛入待測試路段起點;
**2** ?操作員點擊`Dreamview`界面左側工具欄中的`Module Controller`按鈕,進入模塊控制頁面,選中`GPS`、`Localization`、`Record Bag`選項,**注意:如果采集的數據包需用于線下模擬測試,還需加上`CAN Bus`選項。**
?
**3**??駕駛員從起點啟動車輛并按預定路線行駛至終點;
**4** ?操作員關閉`Dreamview`界面中的`Record Bag`選項,此時會在`/apollo/data/bag`目錄(這是`Docker`中的目錄,宿主機上對應的目錄為`[你的apollo根目錄]/data/bag`)中生成一個類似于`2018-04-01-09-58-00`的目錄,該目錄中保存著類似于`2018-04-01-09-58-00.bag`的數據包。這就是我們所需的數據包,請記住它的路徑及名稱。**注意:**單個數據包文件的默認錄制時長為1分鐘,默認文件大小為2048MB,可通過修改文件`/apollo/scripts/record_bag.sh`來改變默認值。
?
為后文闡述方便起見,假設我包數據2018-04-01-09-58-00.bag直接存放于/apollo/data/bag目錄。
?
## 三、參考線的制作
參考線的制作既可在車內工控機內完成,也可在其他計算機上實施。無論在哪臺計算機上制作,我們首先假定已按**步驟1.2**的方法進入`Docker`,并按照**步驟二**中錄制的數據包放置在`/apollo/data/bag`目錄中,且假定該文件名為`2018-04-01-09-58-00.bag`(在你的機器上并非如此,這樣做只是為了后文闡述方便而已)。
?
### 3.1 從原始數據包提取裸數據
在`Docker`內部,使用如下命令從原始數據包提取裸數據:
cd?/apollo/modules/tools/navigator
python extractor.py /apollo/data/bag/2018-04-01-09-58-00.bag
?
上述命令會在當前目錄(易知我們在`/apollo/modules/tools/navigator`目錄中)生成一個提取后的裸數據文件:`path_2018-04-01-09-58-00.bag.txt`。
?
為了驗證裸數據的正確性,可以使用如下命令查看:
python viewer_raw.py ./path_2018-04-01-09-58-00.bag.txt
docker中沒有相關的python庫,建議放到其他電腦中(pyCharm開發環境)進行運行
會顯示類似下圖的路徑圖:
?
?
### 3.2 對裸數據進行平滑處理
如果錄制數據時,車輛行駛不夠平順,提取的裸軌跡數據可能會不光滑,有必要對其進行平滑處理。繼續在`Docker`內部使用如下命令完成平滑處理:
bash smooth.sh ./path_2018-04-01-09-58-00.bag.txt 180
?
注意:上述命令中`200`是平滑處理的長度,該值一般為`150-200`,如果執行失敗,可嘗試調整該參數,再次進行平滑。
?
為了驗證平滑結果的正確性,可以使用如下命令查看:
python viewer_smooth.py ./path_2018-04-01-09-58-00.bag.txt ./path_2018-04-01-09-58-00.bag.txt.smoothed
?
其中,第一個參數`./path_2018-04-01-09-58-00.bag.txt`是裸數據,第二個參數`./path_2018-04-01-09-58-00.bag.txt.smoothed`是平滑結果,顯示效果類似下圖:
?
?
## 四、Dreamview前端的編譯
`Dreamview`前端默認使用`Baidu`地圖,也可修改為`Google`地圖,但需重新編譯`Dreamview`前端,具體方法如下(**注意**:如不需修改地圖設置,可忽略該節內容):
?
### 4.1 更改導航地圖 (可以不更改,默認使用百度地圖)
打開文件`[apollo項目根目錄]/modules/dreamview/frontend/src/store/config/ parameters.yml`,根據需要將下述內容替換為`Google`地圖或`Baidu`地圖:
navigation:
??# possible options: BaiduMap or GoogleMap
??map: "BaiduMap"
??# Google Map API: "https://maps.google.com/maps/api/js"
??# Baidu Map API: "https://api.map.baidu.com/api?v=3.0&ak=0kKZnWWhXEPfzIkklmzAa3dZ&callback=initMap"
??mapAPiUrl: "https://api.map.baidu.com/api?v=3.0&ak=0kKZnWWhXEPfzIkklmzAa3dZ&callback=initMap"
?
### 4.2 重新編譯Dreamview前端
按照**步驟1.2**的方法進入`Docker`,運行如下命令編譯`Dreamview`前端:
# 安裝Dreamview前端依賴包,注意:該步驟只需執行一次,不必每次執行
Install Dreamview front end dependent package. Note: you only need to execute it once, not every time.
cd?/apollo/modules/dreamview/frontend/
yarn install
# Compile Dreamview front end
cd?/apollo
bash apollo.sh build_fe
?
編譯過程可能會出現如下錯誤:
ERROR in ../~/css-loader!../~/sass-loader/lib/loader.js?{"includePaths":["./node_modules"]}!./styles/main.scss*
*Module build failed: Error: ENOENT: no such file or directory, scandir '/apollo/modules/dreamview/frontend/node_modules/node-sass/vendor'*
...
(The error continues, but we have the information we need to debug it)
?
這是內部依賴包不一致造成的,**解決方法如下:**
在`Docker`內部,運行如下命令(注意:**一定要保持網絡暢通**,否則無法重新下載依賴包):
cd?/apollo/modules/dreamview/frontend/
rm -rf node_modules
yarn install
cd?/apollo
bash apollo.sh build_fe
?
## 五、導航模式的使用
### 5.1. 打開Dreamview并開啟導航模式
進入`Docker`,啟動`Dreamview`,命令如下:
cd?your_apollo_project_root_dir
# If you haven’t opened Docker, do it first or ignore that step
bash docker/scripts/dev_start.sh -C
# Enter Docker
bash docker/scripts/dev_into.sh
# Start Dreamview and monitoring process
bash scripts/bootstrap.sh
若是線下模擬測試,則將**步驟二**中錄制好的數據包`/apollo/data/bag/2018-04-01-09-58-00.bag`(這是我機器上的錄制數據)循環播放;**若是實車調試,則忽略該步驟**。
rosbag play -l /apollo/data/bag/2018-04-01-09-58-00.bag
?
在瀏覽器中打開網頁[http://localhost:8888](http://localhost:8888)(注意不要使用代理),進入`Dreamview`界面,點擊右上方下拉框,將模式設置為`Navigation`(導航模式),如下圖所示:
?
### 5.2 啟用導航模式下的相關功能模塊
點擊`Dreamview`界面左側工具欄中的`Module Controller`按鈕,進入模塊控制頁面。**若是線下模擬測試**,選中`Relative Map`、`Navi Planning`選項,其他模塊根據需要開啟,如下圖所示(圖中顯示空白文本的模塊是`Mobileye`模塊,需安裝配置好相關硬件后才可見)):
?
**若是實車調試**,建議除`Record Bag`、`Mobileye`(若`Mobileye`硬件未安裝,則會顯示為空白文本)和`Third Party Perception`模塊外,其余模塊全部開啟,如下圖所示:
?
?
### 5.3 發送參考線數據
在`Docker`內部,使用如下命令發送**步驟三**中制作的參考線數據:
cd?/apollo/modules/tools/navigator
python navigator.py ./path_2018-04-01-09-58-00.bag.txt.smoothed
?
下圖是**線下模擬測試情形下**`Dreamview`接收到參考線后的界面,注意界面左上角已出現了百度地圖界面,我們發送的參考線在百度地圖中以紅線方式、在主界面中以白色車道線的方式展現。
?
?
下圖是**實車調試情形下的**`Dreamview`接收到參考線后的界面,注意界面左上角已出現了百度地圖界面,我們發送的參考線在百度地圖中以紅線方式、在主界面中以黃色車道線的方式展現。
?
需注意以下幾點:
(1) 如果發送參考線數據后,`Dreamview`界面不能正確顯示參考線,可能有以下方面的原因:一是參考線數據未正確發送,解決辦法是再次執行發送命令;二是瀏覽器緩存不一致,解決辦法是按`Ctrl + R`或`F5`鍵刷新顯示,或者清理瀏覽器緩存;三是`Dreamview`后臺服務程序運行異常,解決辦法是在`Docker`內部重啟`Dreamview`后臺服務,命令如下:
# Stop Dreamview and monitoring process
bash scripts/bootstrap.sh stop
# Restart Dreamview and monitoring process
bash scripts/bootstrap.sh
?
?(2) 每次車輛重新回到起點后,無論是線下模擬測試還是實車調試情形,**均需再次發送參考線數據**。
?
希望對你有幫助。
總結
以上是生活随笔為你收集整理的百度Apollo 2.5 导航模式 使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德地图的集成步骤
- 下一篇: wineHQ安装VC6