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