Apollo項目以其優異的系統架構、完整的模塊功能、良好的開源生態及規范的代碼風格,受到眾多開發者的喜愛和好評。不過在Apollo之前的版本中,感知、預測、導航、規劃模塊均依賴于高精地圖,而高精地圖的制作方法繁瑣且不透明,對于很多開發者而言,這是一個難以逾越的障礙。因為沒有高精地圖,很多人只能使用Apollo提供的模擬數據包進行走馬觀花式的觀賞,而無法在測試道路上完成真槍實彈式的實車調試,這極大降低了Apollo項目帶來的便利,也不利于自動駕駛開源社區的發展和壯大。顯然,Apollo項目組已注意到該問題,經過他們幾個月的艱苦努力,終于在2.5版開發了一種新的基于相對地圖(Relative Map)的導航模式(Navigation Mode),利用該模式可順利實施測試道路上的實車調試。
相對地圖是Apollo2.5引入的新特性。從架構層面,相對地圖模塊是連接高精地圖(HD Map)、感知(Perception)模塊和規劃(Planning)模塊的中間層。相對地圖模塊會實時生成基于車身坐標系的地圖(格式與高精地圖一致),并且輸出供規劃模塊使用的參考線。從開發者友好性角度看,基于相對地圖的導航模式,讓開發者可以不依賴高精地圖便可實施測試道路的實車調試,極大降低了開發者的使用門檻。
導航模式的基本思路是:
通過人工駕駛方式錄制測試道路上的行駛軌跡;
利用Apollo工具對原始軌跡進行處理得到平滑軌跡,該軌跡既用于替代路由(Routing)模塊輸出的導航路徑,也是規劃(Planning)模塊用到的參考線(或稱指引線、中心線,Reference line),還是生成相對地圖(Relative Map)的基準線。此外,平滑軌跡還可用于替換高精地圖內某些車道的參考線(默認情況下,高精地圖將車道中心線作為參考線,在道路臨時施工等特殊情形下該方式很不合適,需使用人工錄制并平滑處理的軌跡替換特殊路段的車道參考線,當然本文不討論該項內容);
駕駛員將車輛行駛到測試道路起點,在Dreamview中打開導航(Navigation)選項及相關功能模塊,切換到自動駕駛模式并啟動車輛;
自動駕駛過程中,感知(Perception)模塊的相機(Camera)動態檢測道路邊界及障礙物,地圖(Map)模塊下的相對地圖(Relative Map)子模塊基于參考線及道路邊界實時地生成相對地圖(使用以車輛當前位置為原點的相對坐標系),規劃(Planning)模塊依據地圖模塊輸出的相對地圖和感知模塊輸出的障礙物信息,動態輸出局部行駛路徑給控制(Control)模塊執行。
目前,導航模式僅支持單車道行駛,可完成加減速、跟車、遇障礙物減速停車或在車道寬度允許的情形下對障礙物繞行等功能,后續版本的導航模式將會進一步完善以支持多車道行駛、交通標志和紅綠燈檢測等。
本文對Apollo2.5版的構建、參考線數據采集與制作、Dreamview前端編譯配置、導航模式使用等內容進行全面闡述,希望能給各位開發者正常使用Apollo 2.5版新導航模式帶來一定的便利。
{ 一 }
Apollo 2.5版的構建
首先從GitHub網站【https://github.com/ApolloAuto/apollo】下載Apollo2.5版源代碼,可以使用git命令下載,也可以直接通過網頁下載壓縮包。源代碼下載完成并放置到合適的目錄后,可以使用兩種方法構建:1.在Visual Studio Code中構建(推薦);2.使用命令行構建。
當然,兩種方法都有一個前提,就是在你的機器上已經順利安裝了Docker。Apollo之前版本提供了一個install_docker.sh腳本文件,因為很多開發者反映可能出錯,Apollo項目組已將該文件移除。現在要安裝Docker就只能參考Docker官方網站的幫助文檔了。
1.1在Visual Studio Code中構建
打開Visual Studio Code,執行菜單命令文件->打開文件夾,在彈出的對話框中,選擇Apollo項目源文件夾,點擊“確定”,如下圖所示:
之后,執行菜單命令任務->運行生成任務或直接按快捷鍵Ctrl+Shift+B(與Visual Studio和QT的快捷鍵一致)構建工程,若之前沒有啟動過Docker,則編譯時會啟動Docker,需在底部終端窗口輸入超級用戶密碼。命令執行完畢,若在底部提示 構建成功 的信息(如下圖所示),則表示構建成功。整個過程一定要保持網絡暢通,否則無法下載依賴包。構建過程可能會遇到一些問題,解決方法可直接查看GitHub網站的幫助文檔.
1.2在命令行中構建
按快捷鍵Ctrl + Alt + T打開命令行終端,輸入如下命令啟動Docker:
123 | cd your_apollo_project_root_dir# 從中國大陸訪問,最好加上“-C”選項,直接訪問中國大陸鏡像服務器以獲取更快的下載速度bash docker/scripts/dev_start.sh -C |
輸入如下命令進入Docker:
1 | bash docker/scripts/dev_into.sh |
在Docker內部,執行如下命令構建Apollo項目:
1 | bash apollo.sh build |
整個操作如下圖所示:
1.3修改定位模塊UTM區域ID
Apollo項目定位(Localization)模塊默認使用美國西部UTM坐標,在國內需要修改該值。在Docker外部,使用vi或其他文本編輯器,打開文件[apollo項目根目錄]/modules/localization/conf/localization.conf,將下述內容:
1 | --local_utm_zone_id=10 |
修改為下述內容(這是長沙地區的UTM區域ID,中國UTM分區可參考該網頁【http://www.360doc.com/content/14/0729/10/3046928_397828751.shtml】):
1 | --local_utm_zone_id=49 |
**注意:如果錄制數據時未修改上述內容,則線下模擬測試回放數據包時只能將錯就錯,千萬不能再修改該值,否則地圖上的參考線定位會出錯!有一次我采集數據時,忘了修改該值,回放數據時又進行修改,結果導致參考線定位到了美國西海岸!我取消修改,按F5鍵刷新瀏覽器后顯示就恢復正常了。
{ 二 }
參考線原始數據的采集
將構建好的Apollo項目文件導入車內工控機,并按照步驟1.2的方法進入Docker,再執行如下命令,啟動Dreamview服務端程序:
1 | 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內部,使用如下命令從原始數據包提取裸數據:
12 | cd /apollo/modules/tools/navigatorpython 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。
為了驗證裸數據的正確性,可以使用如下命令查看:
1 | python viewer_raw.py ./path_2018-04-01-09-58-00.bag.txt |
會顯示類似下圖的路徑圖:
3.2對裸數據進行平滑處理
如果錄制數據時,車輛行駛不夠平順,提取的裸軌跡數據可能會不光滑,有必要對其進行平滑處理。繼續在Docker內部使用如下命令完成平滑處理:
1 | bash smooth.sh ./path_2018-04-01-09-58-00.bag.txt 200 |
**注意:上述命令中200是平滑處理的長度,該值一般為150-200,如果執行失敗,可嘗試調整該參數,再次進行平滑。
為了驗證平滑結果的正確性,可以使用如下命令查看:
1 | 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前端,并正確設置UTM區域,具體方法如下(**注意:如不需修改地圖設置,可忽略4.1-4.2步,直接執行4.3步):
4.1更改導航地圖
打開文件[apollo項目根目錄]/modules/dreamview/frontend/src/store/config/ parameters.yml,根據需要將下述內容替換為Google地圖或Baidu地圖:
1234567 | 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前端:
123456 | # 安裝Dreamview前端依賴包,注意:該步驟只需執行一次,不必每次執行cd /apollo/modules/dreamview/frontend/yarn install# 編譯Dreamview前端cd /apollobash apollo.sh build_fe |
編譯過程可能會出現如下錯誤:
1234 | 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'*...(后面還有一長串,不再一一列出) |
這是內部依賴包不一致造成的,解決方法如下:
在Docker內部,運行如下命令(注意:一定要保持網絡暢通,否則無法重新下載依賴包):
12345 | cd /apollo/modules/dreamview/frontend/rm -rf node_modulesyarn installcd /apollobash apollo.sh build_fe |
4.3配置UTM區域ID
打開文件[apollo項目根目錄]/modules/common/data/global_flagfile.txt,在最后一行添加如下語句(這是長沙地區的UTM區域ID,中國UTM分區可參考該網頁【http://www.360doc.com/content/14/0729/10/3046928_397828751.shtml】):
1 | --local_utm_zone_id=49 |
{ 五 }
導航模式的使用5.1打開Dreamview并開啟導航模式
進入Docker,啟動Dreamview,命令如下:
1234567 | cd your_apollo_project_root_dir# 如果沒有啟動Docker,首先啟動,否則忽略該步bash docker/scripts/dev_start.sh -C# 進入Dockerbash docker/scripts/dev_into.sh# 啟動Dreamview后臺服務bash scripts/bootstrap.sh |
若是線下模擬測試,則將步驟二中錄制好的數據包/apollo/data/bag/2018-04-01-09-58-00.bag(這是我機器上的錄制數據)循環播放;若是實車調試,則忽略該步驟。
12 | # 模擬測試情形下,循環播放錄制數據;實車調試情形忽略該步驟rosbag play -l /apollo/data/bag/2018-04-01-09-58-00.bag |
在瀏覽器中打開網頁http://localhost:8888(注意不要使用代理),進入Dreamview界面,點擊右上方下拉框,將模式設置為Navigation(導航模式),如下圖所示:
5.2打開Dreamview導航模式選項
點擊Dreamview界面左側工具欄中的Module Controller按鈕,進入模塊控制頁面。若是線下模擬測試,選中Relative Map、Navi Planning選項,其他模塊根據需要開啟,如下圖所示(圖中顯示空白文本的模塊是Mobileye模塊,需安裝配置好相關硬件后才可見)):
若是實車調試,建議除Record Bag、Mobileye(若Mobileye硬件未安裝,則會顯示為空白文本)和Third Party Perception模塊外,其余模塊全部開啟,如下圖所示:
5.3發送參考線數據
在Docker內部,使用如下命令發送步驟三中制作的參考線數據:
12 | cd /apollo/modules/tools/navigatorpython navigator.py ./path_2018-04-01-09-58-00.bag.txt.smoothed |
下圖是線下模擬測試情形下Dreamview接收到參考線后的界面,注意界面左上角已出現了百度地圖界面,我們發送的參考線在百度地圖中以紅線方式、在主界面中以白色車道線的方式展現。
下圖是實車調試情形下的Dreamview接收到參考線后的界面,注意界面左上角已出現了百度地圖界面,我們發送的參考線在百度地圖中以紅線方式、在主界面中以黃色車道線的方式展現。
需注意以下幾點:
(1) 如果發送參考線數據后,Dreamview界面不能正確顯示參考線,可能有以下方面的原因:一是參考線數據未正確發送,解決辦法是再次執行發送命令;二是瀏覽器緩存不一致,解決辦法是按Ctrl + R或F5鍵刷新顯示,或者清理瀏覽器緩存;三是Dreamview后臺服務程序運行異常,解決辦法是在Docker內部重啟Dreamview后臺服務,命令如下:
1234 | # 停止Dreamview后臺服務bash scripts/bootstrap.sh stop# 重新啟動Dreamview后臺服務bash scripts/bootstrap.sh |
(2) 每次車輛重新回到起點后,無論是線下模擬測試還是實車調試情形,均需再次發送參考線數據。
本文介紹了Apollo 2.5版基于相對地圖的新導航模式,新特性將有效降低開發者的使用門檻。希望本文對大家有所幫助!
自Apollo平臺開放已來,我們收到了大量開發者的咨詢和反饋,越來越多開發者基于Apollo擦出了更多的火花,并愿意將自己的成果貢獻出來,這充分體現了Apollo『貢獻越多,獲得越多』的開源精神。為此我們開設了『開發者說』板塊,希望開發者們能夠踴躍投稿,更好地為廣大自動駕駛開發者營造一個共享交流的平臺!
-
導航
+關注
關注
7文章
522瀏覽量
42375 -
自動駕駛
+關注
關注
783文章
13682瀏覽量
166139 -
Apollo
+關注
關注
5文章
340瀏覽量
18405
原文標題:開發者說 | 全新Apollo2.5版導航模式來了!讓Apollo上車調試更便捷!
文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論