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