賈凡,蒲沛,童德林,農(nóng)勝旺
江蘇大學(xué)汽車(chē)與交通工程學(xué)院,江蘇鎮(zhèn)江 212013
基于視覺(jué)的同時(shí)定位與建圖(V-SLAM)是移動(dòng)機(jī)器人導(dǎo)航的熱門(mén)研究方向。視覺(jué) SLAM 依托相機(jī)獲得環(huán)境信息,搭載不同的相機(jī)進(jìn)行特征提取、選擇關(guān)鍵幀,獲得不同的建圖效果。ORB-SLAM即是一種完整的V-SLAM系統(tǒng),核心是使用 ORB(oriented fast and brief)即特征提取算法作為整個(gè)視覺(jué) SLAM 中的核心特征。ORB-SLAM 算法的核心思想為基于 ORB 描述量進(jìn)行特征匹配和重定位,并采用在一個(gè)輸出窗口的關(guān)鍵幀和位姿的BA聯(lián)合優(yōu)化算法來(lái)獲得尺度[1]。該種視覺(jué)SLAM系統(tǒng)較其他有更好的視角性,能更容易且清晰地進(jìn)行場(chǎng)景重建及擴(kuò)展,且位置精度較高。
本文運(yùn)用Arduino平臺(tái)的建模仿真與函數(shù)載入功能,其他硬件主要包括驅(qū)動(dòng)模組、S12XE控制芯片以及LDC1000傳感器等,發(fā)現(xiàn)和探究在Arduino平臺(tái)搭載ORB-SLAM算法的室內(nèi)導(dǎo)航小車(chē)并進(jìn)行實(shí)踐運(yùn)用的可行性。通過(guò)仿真分析,探尋其在大規(guī)模的醫(yī)院內(nèi)部為不熟悉該醫(yī)院的人們進(jìn)行導(dǎo)航,最終將他們帶到需要去的科室、病房或掛號(hào)、收費(fèi)等地點(diǎn)的實(shí)際功能。
本文所使用的ORB-SLAM算法在工作過(guò)程中可分為特征檢測(cè)與跟蹤、建立地圖、閉環(huán)檢測(cè)與校正這3個(gè)階段。具體流程如下:特征檢測(cè)與跟蹤階段,在此階段中首先應(yīng)該先從環(huán)境圖像中檢測(cè)出相應(yīng)的ORB特征,并根據(jù)上一幀的圖像信息對(duì)當(dāng)前幀的圖像信息進(jìn)行優(yōu)化補(bǔ)充,從而估計(jì)出當(dāng)前小車(chē)所處的位置與姿勢(shì);然后通過(guò)相鄰地圖點(diǎn)采集到的環(huán)境圖像信息來(lái)檢測(cè)更多的特征,進(jìn)而對(duì)估計(jì)到的位姿進(jìn)行細(xì)化與完善[2];最后從中提取相應(yīng)的關(guān)鍵幀,建立局部地圖。ORB-SLAM工作流程如圖1所示。
圖1 ORB-SLAM工作流程
在建立地圖階段中,建圖部分的主要工作是建立局部地圖,并通過(guò)添加實(shí)時(shí)采集的關(guān)鍵幀來(lái)更新局部地圖,同時(shí)剔除冗余老舊的關(guān)鍵幀,通過(guò)這種方式來(lái)保證局部地圖的及時(shí)性[3]。在閉環(huán)檢測(cè)與校正階段中,通過(guò)相應(yīng)的反饋環(huán)節(jié)對(duì)建立的局部地圖進(jìn)行相應(yīng)的檢驗(yàn)與調(diào)整,從而保證其準(zhǔn)確性。隨后使用Arduino平臺(tái)的虛擬仿真功能,探究在視覺(jué)SLAM算法運(yùn)行過(guò)程中可能存在的問(wèn)題,如其與循跡小車(chē)在程序上的不兼容之處等,并對(duì)程序進(jìn)行相應(yīng)的改良,來(lái)滿(mǎn)足圖像信息的多方向多次使用,保證雙目相機(jī)采集到的圖像信息能夠?qū)崿F(xiàn)地圖構(gòu)建、自動(dòng)避障及面部識(shí)別等應(yīng)用的要求,對(duì)信息進(jìn)行多功能、全方面地利用。在試驗(yàn)過(guò)程中,通過(guò)更改雙目相機(jī)搭載的位置,對(duì)不同位置下收集到的圖像信息在傳遞過(guò)程中的完整度和效率進(jìn)行分析比較,從而找到在一般使用過(guò)程中能最大限度地接受全視角圖像信息的安裝位置。
所設(shè)計(jì)出的智能小車(chē)能夠從單一的尋跡導(dǎo)航中解除束縛,快速地對(duì)更復(fù)雜的外部環(huán)境信息做出反應(yīng),能夠在密集的路面情況中靈活運(yùn)作,設(shè)計(jì)最優(yōu)路線(xiàn),并且根據(jù)雙目相機(jī)反饋的外界信息中的人臉信息,自動(dòng)進(jìn)行配速與發(fā)出表情和語(yǔ)音等功能,做到人性化設(shè)計(jì)。同時(shí)能夠保證自身機(jī)身的使用安全,延長(zhǎng)使用壽命,減少能量損耗。
智能小車(chē)采用Arduino Uno主控芯片及S12XE微控制器芯片,處于系統(tǒng)的核心位置,聯(lián)結(jié)整個(gè)系統(tǒng)的其他各個(gè)模塊,如超聲測(cè)距系統(tǒng)、光電傳感器及紅外傳感器等。其他部件采用S12XE外圍電路、CAN總線(xiàn)收發(fā)器等組成。小車(chē)核心MCU與各傳感器示意如圖2所示。
圖2 小車(chē)核心MCU與各傳感器示意
首先在Arduino平臺(tái)上運(yùn)用函數(shù)輸入功能,輸入ORB-SLAM算法函數(shù),使用Python編程語(yǔ)言和Qt開(kāi)發(fā)框架結(jié)合于一體的圖形工具文件PyQt,設(shè)計(jì)適當(dāng)?shù)沫h(huán)境識(shí)別系統(tǒng),初步虛擬仿真出搭載視覺(jué)SLAM系統(tǒng)的導(dǎo)航小車(chē)。
Arduino平臺(tái)具有語(yǔ)言編程功能,編寫(xiě)相應(yīng)的程序后可利用平臺(tái)上的模擬仿真功能進(jìn)行傳感器拓展,并進(jìn)行模擬感知,通過(guò)控制雙目相機(jī)、LED屏幕等裝置來(lái)獲取環(huán)境信息并進(jìn)行反饋。為在Arduino平臺(tái)上設(shè)計(jì)出尋跡小車(chē)并搭載上雙目相機(jī),運(yùn)用ORB-SLAM 算法建立即時(shí)地圖,并傳遞信息于小車(chē)的控制系統(tǒng)以代替光電管接收到的路面印記信息,最終通過(guò)Arduino平臺(tái)的功能進(jìn)一步實(shí)現(xiàn)小車(chē)的導(dǎo)航系統(tǒng)。智能小車(chē)的3種工作狀態(tài)如圖3所示。
圖3 智能小車(chē)的3種工作狀態(tài)
在后端優(yōu)化校正線(xiàn)程,主要對(duì)所采集圖像數(shù)據(jù)的傳輸軌跡進(jìn)行優(yōu)化處理,包括傳輸過(guò)程的閉環(huán)檢測(cè)、局部或全局BA優(yōu)化以及局部地圖的擴(kuò)展。
采用分段式優(yōu)化處理方式,將圖像數(shù)據(jù)精度達(dá)到一定高度的特征點(diǎn)標(biāo)記為合格地標(biāo)點(diǎn),不再對(duì)其進(jìn)行優(yōu)化,減少了同一時(shí)間段內(nèi)所處理的數(shù)據(jù)總量,同時(shí)也提高了系統(tǒng)的數(shù)據(jù)處理速度[4]。為了進(jìn)一步減小誤差,在試驗(yàn)中將SLAM算法下相機(jī)生成的軌跡文件保存到Camera Trajectory文件中,并與地面實(shí)際軌跡進(jìn)行軌跡誤差比較,采用絕對(duì)軌跡誤差(ATE)的方式[5]對(duì)比不同SKAM算法下相機(jī)采集到的外部信息的軌跡誤差之間的優(yōu)劣。接著對(duì)采集到的每幀圖像進(jìn)行預(yù)處理,使用時(shí)間戳把特征檢測(cè)階段中估計(jì)出的相機(jī)所處位置與實(shí)際相機(jī)位置進(jìn)行對(duì)比分析。
利用ORB-SLAM建立局部地圖,之后收集到相關(guān)位置信息,然后通過(guò)輸入相關(guān)算法函數(shù)來(lái)構(gòu)建小車(chē)的避障系統(tǒng),最終才能達(dá)成智能導(dǎo)航這一目標(biāo)。具體步驟如下:
(1)載入MAX驅(qū)動(dòng)函數(shù);
(2)定義UltraSonic函數(shù);
(3)命名障礙物距離值指定引腳;
(4)定義變量die;
(5)初始化MAX函數(shù)將測(cè)算到的障礙物距離值保存在變量die中;
(6)在串口顯示器上顯示障礙物距離值。
通過(guò)相關(guān)主函數(shù)來(lái)完成以下功能:
(1)判斷障礙物距離值所處區(qū)間;
(2)die≥45:小車(chē)保持直行;
(3)15≤die<45:小車(chē)自動(dòng)開(kāi)始播放警示音效;
(4)die<15:小車(chē)會(huì)原地掉頭避開(kāi)障礙物,最終往復(fù)。
在V-SLAM系統(tǒng)中,前端跟蹤線(xiàn)程需要通過(guò)將外部環(huán)境的3D點(diǎn)投影到當(dāng)前幀畫(huà)面的2D點(diǎn),進(jìn)而確定相機(jī)在當(dāng)前環(huán)境下所處位置,為了保證導(dǎo)航的準(zhǔn)確性,還需要采集多個(gè)特征點(diǎn)在下一個(gè)畫(huà)面幀的具體位置或者偏差量。
本文針對(duì)導(dǎo)航小車(chē)在兩種不同類(lèi)型的室內(nèi)環(huán)境下稀疏重建外部環(huán)境進(jìn)行了仿真試驗(yàn),通過(guò)對(duì)采集的特征點(diǎn)所組成的局部地圖數(shù)據(jù)進(jìn)行分析。在環(huán)境較密集的辦公室中,由于辦公桌上有較多的辦公設(shè)施,相機(jī)采集了大量的無(wú)用特征點(diǎn),所用方法并未能取得理想的效果。而在大型廠(chǎng)房,廠(chǎng)房?jī)?nèi)有少量大型設(shè)備,還有預(yù)先放置的磚瓦、垃圾桶等障礙物。墻面平整且大部分呈白色,只有少部分墻體表面有管道和變壓設(shè)備,特征點(diǎn)較少且分布較為密集。結(jié)果表明,所設(shè)計(jì)的導(dǎo)航小車(chē)系統(tǒng)在大型廠(chǎng)房這種障礙物明顯且相對(duì)分散的場(chǎng)合具有良好的使用性能。
通過(guò)對(duì)試驗(yàn)結(jié)果的分析,發(fā)現(xiàn)區(qū)域匹配算法可以最大限度地完成這種相鄰幀之間特征點(diǎn)的匹配,故而可最大限度地降低圖像信息傳輸中存在的誤差,并減小后續(xù)優(yōu)化校正線(xiàn)程的計(jì)算負(fù)擔(dān)。需要注意的是,在試驗(yàn)中還應(yīng)盡可能地選擇特征點(diǎn)較密集的區(qū)域,否則在不同幀畫(huà)面的匹配過(guò)程中仍然會(huì)存在較大誤差。
對(duì)于具體的相鄰幀之間匹配過(guò)程,經(jīng)過(guò)對(duì)多種匹配方式的仿真研究,結(jié)果表明,變換網(wǎng)絡(luò)進(jìn)行模板仿射變換無(wú)疑是最好的選擇。在圖像選取目標(biāo)環(huán)境區(qū)域后,由內(nèi)部程序?qū)υ搱D像進(jìn)行一定程度的尺寸轉(zhuǎn)變后輸入到變換網(wǎng)絡(luò),通過(guò)變換網(wǎng)絡(luò)對(duì)該圖像進(jìn)行仿射變換,直到某一結(jié)果最大程度上和下一幀采集到的圖像信息上的某區(qū)域相吻合,使得區(qū)域內(nèi)的特征點(diǎn)得到匹配從而更好地搭建局部地圖[6]。利用這種技術(shù),不僅可以保證相機(jī)在小車(chē)行駛不平路段和轉(zhuǎn)彎時(shí)也能發(fā)揮良好的性能,而且降低了SLAM算法的運(yùn)算負(fù)擔(dān),保證了導(dǎo)航的迅速[7]。
綜上,無(wú)論是在軌跡誤差方面還是在相機(jī)估計(jì)位值方面,本文所采取的優(yōu)化方式都有著相當(dāng)良好的表現(xiàn),軌跡對(duì)比如圖4所示。通過(guò)對(duì)辦公室小場(chǎng)景環(huán)境下的真實(shí)軌跡和優(yōu)化后相機(jī)的軌跡進(jìn)行對(duì)比,并建立相關(guān)函數(shù)分析每段相機(jī)位置與預(yù)估位置間的差異,得出平均偏移誤差為0.095 32。在對(duì)大型廠(chǎng)房所得數(shù)據(jù)進(jìn)行分析時(shí),系統(tǒng)后端優(yōu)化校正線(xiàn)程的效果也非常顯著,真實(shí)軌跡和相機(jī)軌跡基本上吻合,僅僅只在極少數(shù)地區(qū)存在細(xì)微誤差,在該環(huán)境下的平均偏移誤差為0.097 13。通過(guò)對(duì)比搭載不同SLAM算法的各個(gè)系統(tǒng)在相同場(chǎng)景下的性能,本文提出的算法不僅能滿(mǎn)足導(dǎo)航功能的要求,而且能更加準(zhǔn)確地處理帶有深度的數(shù)據(jù),并且在快速性、準(zhǔn)確性、實(shí)時(shí)性等方面具有不俗的優(yōu)勢(shì)。
圖4 軌跡對(duì)比
本文從導(dǎo)航小車(chē)的應(yīng)用場(chǎng)景、設(shè)計(jì)和搭建、循跡原理和SLAM算法的載入等幾個(gè)方面介紹了導(dǎo)航小車(chē)的設(shè)計(jì)初衷和理念,其包含了Arduino平臺(tái)的虛擬仿真、ORB-SLAM算法等前沿技術(shù)。所設(shè)計(jì)的這一款導(dǎo)航小車(chē)即為基于Arduino平臺(tái)的循跡小車(chē)并搭載雙目相機(jī)運(yùn)用ORB-SLAM算法。
相比較于傳統(tǒng)的循跡小車(chē),經(jīng)過(guò)改良的導(dǎo)航小車(chē)不僅能精確行駛循跡路線(xiàn),還能在非循跡情況下實(shí)現(xiàn)自動(dòng)導(dǎo)航的功能,并實(shí)現(xiàn)高精度的場(chǎng)景重建與避障功能,最終得到的小車(chē)功能更加完善。導(dǎo)航小車(chē)各個(gè)硬軟件都采用了比較成熟的技術(shù),性能和功能穩(wěn)定性均得到了保障。