何浩楠 陳宇濤 蔣占陽 陳健 施一劍
摘? 要:在模擬場景下,搭建一套自動駕駛智能小車模擬系統(tǒng),實(shí)現(xiàn)倒車入庫、追蹤行駛等功能。該系統(tǒng)基于OpenMV視覺模塊,利用攝像頭拍攝獲得AprilTag的實(shí)時圖像,并運(yùn)用Micro Python編程語言識別AprilTag。通過串口將AprilTag相對于攝像頭的精確3D位置發(fā)送到智能小車上的STM32單片機(jī),對智能小車的行進(jìn)方向與速度加以控制,從而實(shí)現(xiàn)停車與追蹤。經(jīng)實(shí)驗驗證,將AprilTag、OpenMV和STM32單片機(jī)技術(shù)相結(jié)合是可行的,能夠很好地實(shí)現(xiàn)自動泊車及追蹤行駛功能。
關(guān)鍵詞:OpenMV;視覺追蹤;AprilTag;智能小車;自動泊車
中圖分類號:TP242.6? ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)16-0024-05
The Application of Locating and Tracking in a Smart Car Based on AprilTag
HE Haonan,CHEN Yutao,JIANG Zhanyang,CHEN Jian,SHI Yijian
(Wenzhou University,Wenzhou? 325035,China)
Abstract:In the simulation scenario,a set of intelligent autonomous car simulation system is built to realize the functions of automatic parking and tracking. Based on the OpenMV vision module,the system uses a camera to capture real-time images of AprilTag,and use Micro Python programming language to identify AprilTag. The precise 3D position of AprilTag relative to the camera is sent to the STM32 single-chip microcomputer in the intelligent car via a serial port to control direction and speed,thus realizing parking and tracking. It has been verified by experiments that the combination of intelligent car technology controlled by AprilTag,OpenMV and STM32 single-chip microcomputer is feasible,and the car can well complete the task of tracking driving and automatic parking.
Keywords:OpenMV;visual tracking;AprilTag;smart car;automatic parking
0? 引? 言
近年來隨著視覺校準(zhǔn)系統(tǒng)的發(fā)展,智能定位識別應(yīng)用正在逐步滲入到工業(yè)和社會應(yīng)用的各個層面[1,2],幫助人們解決了很多生活上的麻煩。隨著私家車的增加,人們經(jīng)常會在停車時陷入困境,很多時候,需要花費(fèi)很大精力、很長時間在擁擠的停車場尋找車位,并在狹小的車道上完成停車入庫,駕駛員視野的局限性和對位置的掌控力極大地限制了停車效率。為了幫助人們提高停車效率,市面上出現(xiàn)了很多輔助定位裝置來幫助停車。市面上大多數(shù)的定位系統(tǒng)是基于超聲波和紅外線設(shè)計的[3]。但是傳統(tǒng)的超聲波和紅外線定位分別有感測范圍小和受光線干擾強(qiáng)的缺點(diǎn),經(jīng)常會出現(xiàn)定位不夠準(zhǔn)確、感應(yīng)不夠靈敏的問題,而且無法幫助人們尋找車位。本文所研究的自動泊車系統(tǒng)可以幫助人們高效地完成停車,通過追蹤行駛尋找車位,并且可以完成倒車入庫[4,5]。
AprilTag是一個具有3D定位功能的視覺基準(zhǔn)系統(tǒng)[6]。OpenMV可以看成一個擁有視覺算法的單片機(jī),并且可以通過串口和單片機(jī)通信[7]。AprilTag和OpenMV的結(jié)合可以有效解決精準(zhǔn)停車入庫問題,幫助實(shí)現(xiàn)汽車的精準(zhǔn)定位和控制[8]。使用STM32單片機(jī)操控的智能小車模擬真實(shí)環(huán)境中的汽車,實(shí)現(xiàn)了在地下停車庫等類似模擬環(huán)境中的自動循跡尋找空位,并完成自動空位入庫停車功能。溫州大學(xué)歷年都有科創(chuàng)項目研究小車不同的智能化控制方式,完成智能車系統(tǒng)的開發(fā)等。本文結(jié)合作者在溫州大學(xué)的課程學(xué)習(xí)、實(shí)驗經(jīng)歷和對學(xué)校相關(guān)科創(chuàng)項目的參考,運(yùn)用的AprilTag和OpenMV相結(jié)合的技術(shù)相較以往項目更為先進(jìn)和便捷,更具現(xiàn)實(shí)意義。本文所設(shè)計的智能小車作為當(dāng)前智能車輛的仿真車,為研究真實(shí)情況下的智能泊車提供了基礎(chǔ),為系統(tǒng)進(jìn)一步實(shí)用化和工業(yè)化提供參考。
1? 系統(tǒng)整體設(shè)計
本設(shè)計采用STM32F103C8T6作為智能小車控制模塊的主控芯片,配以電源模塊、電機(jī)驅(qū)動模塊、OpenMV攝像頭模塊與AprilTag控制智能小車定位追蹤,如圖1所示。
1.1? AprilTag
AprilTag在概念上與QR碼相似,都屬于二維碼[9]。不同的是,AprilTag被設(shè)計為對更小的數(shù)據(jù)有效載荷(4位~12位之間)進(jìn)行編碼,從而可以更有效地檢測到這些數(shù)據(jù),并且檢測距離更遠(yuǎn)。不同AprilTag種類稱為家族,每個家族的標(biāo)記都有對應(yīng)的ID,如Tag16H5家族有30個標(biāo)記,每一個都有對應(yīng)的ID,從0號~29號。不同家族之間在識別最遠(yuǎn)距離和識別精確度有較大區(qū)別,比如對Tag16H5家族識別的有效區(qū)域是4×4個像素點(diǎn),它比Tag36H11(識別有效區(qū)域為6×6個像素點(diǎn))的可識別距離更遠(yuǎn),但是由于Tag36H11的校驗信息多,攝像頭對于Tag36H11的識別錯誤率比Tag16H5低很多,所以在本次實(shí)驗中我們采用了Tag36H11家族。
1.2? 主控芯片
STM32F103C8T6是一款基于ARM Cortex-M內(nèi)核STM32系列的32位微控制器,程序存儲器容量是64 kB,工作頻率為72 MHz,工作電壓2.0 V~3.6 V,工作溫度-40 ℃~85 ℃。由于STM32單片機(jī)具有豐富的通用I/O端口與很高的代碼效率,可以通過I/O端口控制OpenMV攝像頭模塊工作,并且用PWM波驅(qū)動電機(jī)工作。同時STM32系列具有低成本、低功耗的優(yōu)點(diǎn),可選用STM32F103C8T6作為本課題的主控芯片。
1.3? OpenMV攝像頭模塊
OpenMV是一款基于STM32F765VIARM Cortex M7處理器的單片機(jī)和Ov2640圖像傳感器的機(jī)器視覺模塊。OpenMV上搭載了一個Micro Python解釋器,使用Python腳本語言編程來實(shí)現(xiàn)一系列功能,包括I/O端口的控制、讀取文件系統(tǒng)等基礎(chǔ)功能,也可以實(shí)現(xiàn)人臉檢測和跟蹤、關(guān)鍵點(diǎn)提取、顏色跟蹤等功能[10]。OpenMV攝像頭模塊可以準(zhǔn)確識別AprilTag,從而定位出小車相較于AprilTag的空間位置。
1.4? 電源模塊
電源電路作用是為整個小車系統(tǒng)供電。其中主控芯片工作電壓為3.6 V,OpenMV攝像頭模塊和電機(jī)驅(qū)動模塊的L293D所需供電電壓均為5.0 V,直流電機(jī)則需要7.2 V的供電電壓。為保證小車工作穩(wěn)定,采用2節(jié)3.7 V可充電鋰電池串聯(lián)而成的電池組作為車載電源為整輛小車供電,充滿時電池組的總電壓約為8.4 V,同時用電源穩(wěn)壓芯片7805得到各元件所需的+3.6 V、+5.0 V與+7.2 V電壓。
1.5? 電機(jī)驅(qū)動模塊
電機(jī)驅(qū)動模塊分直流電機(jī)部分和電機(jī)驅(qū)動部分。直流電機(jī)部分由兩個減速比為1:48的直流減速電機(jī)為小車車輪提供動力,利用差速進(jìn)行轉(zhuǎn)向。電機(jī)驅(qū)動部分是L293D專用電機(jī)驅(qū)動芯片,它是一款雙H橋驅(qū)動芯片,可以通過輸入主控芯片產(chǎn)生PWM波信號來同時控制兩路直流電機(jī)執(zhí)行正轉(zhuǎn)、反轉(zhuǎn)和停止命令,輸出電流可以達(dá)到600 mA,峰值時輸出電流可以達(dá)到1.2 A,并且內(nèi)部自帶ESD保護(hù)。
2? 系統(tǒng)軟件設(shè)計
2.1? 軟件總體設(shè)計
智能小車軟件設(shè)計主要包括STM32單片機(jī)的軟件設(shè)計、OpenMV模塊的軟件設(shè)計和電機(jī)驅(qū)動的軟件設(shè)計。小車上電后首先進(jìn)行初始化,初始化主要包括設(shè)置小車的前進(jìn)速度等參數(shù)初值、外部中斷初始化、定時器初始化以及串口的初始化。然后打開定時器中斷和串口接收中斷,接收來自攝像頭的數(shù)據(jù)。同時視覺模塊開始掃描,獲取周圍環(huán)境中的AprilTag圖像,并將獲取的AprilTag進(jìn)行圖像處理和解碼信息判斷,將AprilTag數(shù)據(jù)發(fā)送給STM32單片機(jī),STM32單片機(jī)接收目標(biāo)信息后開始進(jìn)行自動泊車,根據(jù)實(shí)時接收的數(shù)據(jù)不斷調(diào)整速度,最終完成停車。
基于智能小車定位追蹤的應(yīng)用,將AprilTag分為追蹤Tag與停車Tag兩部分。布置場景時,將AprilTag粘貼于追蹤軌道的上方和每個停車位的上方,并提供適當(dāng)?shù)墓庠?,車輛頂部安裝攝像頭,使得AprilTag在攝像頭中的圖像清晰可見。開始上電時,串口初始化。STM32單片機(jī)和OpenMV建立通信,OpenMV開始掃描環(huán)境。當(dāng)攝像頭檢測到對應(yīng)的AprilTag時,OpenMV攝像頭通過識別AprilTag獲取3D數(shù)據(jù)信息,從而定位出小車相對于停車位的空間位置,并將獲得的距離以及相對中軸線的偏差等信息反饋到STM32單片機(jī),STM32單片機(jī)將會發(fā)送指令驅(qū)動電機(jī)做出相應(yīng)的轉(zhuǎn)向和調(diào)整驅(qū)動,從而實(shí)現(xiàn)追蹤定位。系統(tǒng)流程圖如圖2所示。
2.2? AprilTag的識別
對于Tag的識別,可以計算AprilTag相對于攝像頭的精確3D位置,其中檢測Tag空間位置一共有6個自由度,包括3個位置參數(shù)和3個角度參數(shù)。在單片機(jī)串口中可以輸出為6個變量,X、Y、Z為空間坐標(biāo)軸,TX、TY、TZ為空間的3個位置量,RX、RY、RZ為3個旋轉(zhuǎn)量,如圖3所示[8]。因此AprilTag同時具有距離,角度和偏角三個數(shù)據(jù),可以很精確地判斷出Tag相對于小車的位置。識別過程中需要辨別Tag種類,主要是能夠識別并區(qū)分Tag的不同家族不同的ID。根據(jù)確定的AprilTag家族中的編號可以設(shè)定優(yōu)先級以模擬自動循跡中出現(xiàn)的狀況,Tag編號越靠前,讀取優(yōu)先級越高。因為停車的優(yōu)先級要高于循跡(即有空車位優(yōu)先停車,若無空位則繼續(xù)循跡),所以本文采用的是1號~6號為車位,兩側(cè)車位分別用奇偶加以區(qū)分。7號開始用作自動循跡。
通過OpenMV將檢測到的最高優(yōu)先級的Tag的信息提取出來,反饋給STM32單片機(jī),通過flag來判斷左右,通過數(shù)據(jù)來判斷距離,調(diào)整轉(zhuǎn)彎速度和前進(jìn)速度,當(dāng)接收數(shù)據(jù)與設(shè)定值相等時,即可停車。
3? 環(huán)境搭建
本實(shí)驗采用的測試環(huán)境如圖4所示。
車庫的3D模型如圖4(a)所示,上方的凸起部分表示AprilTag,下方凸起部分為其地面投影,一一對應(yīng)(此處僅為舉例,Tag在天花板的底部如圖4(b)所示,部分AprilTag未畫出)。
實(shí)驗用的小車尺寸為19 cm×17 cm,車庫模型俯視圖如圖4(c)所示。根據(jù)小車的長和寬,設(shè)計的停車位尺寸為20 cm×20 cm。停車位兩側(cè)各三個,再加上中間的行車道,我們搭建的停車場尺寸為80 cm×80 cm,再根據(jù)OpenMV放置在小車上的高度和OpenMV可識別的范圍,搭建車庫棚高為58 cm。這個高度剛好可以穩(wěn)定識別Tag,也可以使OpenMV盡可能地識別更多的Tag,若高度過高OpenMV識別Tag時會不穩(wěn)定,若高度過低則識別的Tag過少,不利于小車操作。車棚尺寸設(shè)置和停車場一樣,AprilTag布局實(shí)物圖如圖4(d)所示。
實(shí)際模型中,將用到的AprilTag分類為停車Tag和追蹤Tag。小車能識別視野以內(nèi)的AprilTag,根據(jù)對應(yīng)的數(shù)據(jù)調(diào)整自身姿態(tài),入庫模擬如圖4(e)所示。在弱光環(huán)境中,可以為AprilTag增加背光,如圖4(f)所示,作為車位為空的標(biāo)志,增加識別成功率。當(dāng)車位有車時,關(guān)閉AprilTag背光。
4? 測試結(jié)果分析及處理
4.1? 自動循跡
小車循跡根據(jù)模擬環(huán)境簡單劃分直道,轉(zhuǎn)彎元素??色@取的空間元素有6個,可根據(jù)具體情況具體使用,本文根據(jù)模擬環(huán)境只采用了其中的一部分,如X軸的偏移量,用以矯正小車在運(yùn)動過程中左右偏離,保證小車運(yùn)行姿態(tài)的穩(wěn)定。
直道元素中,根據(jù)具體電機(jī)型號、小車樣式等,設(shè)置合適的運(yùn)動速度以達(dá)到預(yù)期效果;
彎道元素中,除了考慮小車外,還需要考慮Tag的布置間隔、布置的角度偏移等影響因素,同時仍需考慮整體的Tag的布局間隔,以確保攝像頭視野內(nèi)Tag數(shù)量合適,處理穩(wěn)定等細(xì)節(jié)性問題。
綜合以上考量后,小車在最終測試中能夠達(dá)到較好的預(yù)期效果,直道穩(wěn)定,彎道圓滑,符合整體預(yù)期效果。
直線和彎道的相關(guān)代碼:
x_line_range = 2;//X軸校正可偏移的誤差限制
speed_high = 3000+(x-1)*20;
speed_low = 3000-(x-1)*20; //轉(zhuǎn)向時左右車輪差速
if (x_flag == 1 && x > x_line_range)
//左轉(zhuǎn)
else if (x_flag == 2 && x > x_line_range)
//右轉(zhuǎn)
else if (x < x_line_range)
//偏移校正
參數(shù)說明:代碼中的x表示AprilTag六個自由度中X自由度上的值;通過實(shí)驗數(shù)據(jù)來設(shè)置小車X方向上的誤差x_line_flag為2個單位(該單位值和OpenMV互相對應(yīng));小車電機(jī)在當(dāng)前電池供電下PWM參數(shù)對應(yīng)3 000為基礎(chǔ)值,左右差速比例由實(shí)際測試得出;電機(jī)差速來實(shí)現(xiàn)小車的左右轉(zhuǎn)動(大差速)和姿態(tài)微調(diào)(小差速)。
4.2? 自動泊車
依托環(huán)境搭建,確保小車在自動循跡過程中,左右兩側(cè)的AprilTag在其攝像頭視野范圍之內(nèi)同時可以穩(wěn)定檢測并獲得對應(yīng)的空間數(shù)據(jù)。數(shù)據(jù)交由STM32單片機(jī)進(jìn)行針對處理。
當(dāng)兩側(cè)有空位時:背光環(huán)境確保了AprilTag處在合適的燈光環(huán)境中;
當(dāng)小車經(jīng)過時識別Tag,做出簡單判斷(模擬發(fā)現(xiàn)空車位,在實(shí)際應(yīng)用中,若車位已被占用則關(guān)閉背光燈,該Tag不再被識別);
隨后轉(zhuǎn)變車輪的左右差速來進(jìn)入車庫,進(jìn)入過程中STM32單片機(jī)通過OpenMV不斷更新數(shù)據(jù),同時調(diào)整對應(yīng)的車速、差速(模擬車輛入庫時左右間距判斷);
通過對AprilTag的角度偏移量設(shè)置,小車最后進(jìn)行一定程度的左右微調(diào)至??浚M車輛即將停靠時車身前后左右的微調(diào)并減速至??浚?。
相關(guān)代碼如下:
If (r >= 15)//根據(jù)旋轉(zhuǎn)角判斷是否進(jìn)入微調(diào)
//電機(jī)差速
else if (r < 15)//進(jìn)入微調(diào)模式{
if (y < 47){//微調(diào)
if (x_flag == 2 && x >= 28)//判斷小車姿態(tài)向左偏離
//校正
If (x_flag == 1 && x >= 25)//判斷小車方向偏右
//校正
else if (x <= 25)//正常運(yùn)行
//保持
}
else if (y >= 47)//小車停車的安全距離
//停車
參數(shù)說明:x_flag表方向是左還是右,x_line_flag表限定值,后續(xù)由此進(jìn)行細(xì)微調(diào)整;y表示Y方向上AprilTag的停車位置,r表角度偏移量,其設(shè)定值均源自實(shí)際測量;停車通過STM32單片機(jī)控制電機(jī)停轉(zhuǎn)來實(shí)現(xiàn)。
5? 結(jié)? 論
本文利用AprilTag及OpenMV模塊,在STM32單片機(jī)操控的智能小車上實(shí)現(xiàn)了循跡追蹤和定位入庫的功能。通過實(shí)驗測試證明,小車自動定位和追蹤的效果滿足既定要求,可以為智能停車系統(tǒng)設(shè)計提供參考。在精度要求更高的場合下,可以有如下兩個改進(jìn)的方向:
一是受客觀因素影響。本文采用兩輪小車進(jìn)行模擬,如何避免入庫不準(zhǔn)造成偏差出現(xiàn)碰撞等問題以完美入庫是我們一直所思考的。從客觀環(huán)境角度來說,比如采用斜式停車位可以在一定程度上減小車輛入彎的角度和所需要的空間以更貼合完美入庫。
二是在日常生活中。倒車入庫和側(cè)方位泊車等特定環(huán)境對駕駛員的個人技術(shù)有較高程度的要求,如側(cè)方位停車過程中,有前后距離窄,需要操縱次數(shù)多等問題。如果在車位不夠深時實(shí)現(xiàn)車輛自動側(cè)方停車,將使該系統(tǒng)更具實(shí)用價值。
參考文獻(xiàn):
[1] 田媛.工業(yè)機(jī)器人視覺測量系統(tǒng)的在線校準(zhǔn)技術(shù)研究 [J].南方農(nóng)機(jī),2019,50(6):167-168.
[2] 裴小娜,潘洪剛,魏紅彥.基于激光測量的機(jī)器人智能定位系統(tǒng) [J].激光雜志,2019,40(4):45-49.
[3] 陳樂鵬,譚曉東,曹江浩,等.超聲波定位系統(tǒng)智能跟隨小車設(shè)計 [J].科技創(chuàng)新與應(yīng)用,2019(35):24-26.
[4] 吳曉蝶,于金麗,李勝楠.一種車輛入庫自動循跡停車系統(tǒng)的方案設(shè)計 [J].電腦知識與技術(shù),2019,15(31):236-238.
[5] 姚錫欽,林燁,陳蘇陽.基于April Tag標(biāo)記定位的自動泊車系統(tǒng)實(shí)現(xiàn) [J].電子產(chǎn)品世界,2018,25(8):39-42.
[6] ABBAS S M,ASLAM S,BERNS K,et al. Analysis and Improvements in AprilTag Based State Estimation [J]. Sensors,2019,19(24):1-32.
[7] 牛國臣.基于OpenMV的類人機(jī)器人教學(xué)實(shí)踐[J].計算機(jī)教育,2019(10):38-41.
[8] 梅妍玭,傅榮.基于openMV的小車定位系統(tǒng)研究 [J].揚(yáng)州職業(yè)大學(xué)學(xué)報,2017,21(4):46-48.
[9] WANG J,OLSON E. AprilTag 2:Efficient and robust fiducial detection [C]//2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).Daejeon,South Korea:IEEE,2016:4193-4198.
[10] 宋雷震,李笑笑,林翔,等.基于OpenMv3視覺家庭安防機(jī)器人 [J].科學(xué)技術(shù)創(chuàng)新,2019(26):95-96.
作者簡介:何浩楠(1999—),男,漢族,浙江臺州人,本科,研究方向:電子信息工程;陳宇濤(1999—),男,漢族,浙江臺州人,本科,研究方向:電子信息科學(xué)與技術(shù);蔣占陽(1999—),男,漢族,浙江臺州人,本科,研究方向:電子信息工程;陳?。?998—),男,漢族,浙江溫州人,本科,研究方向:電子信息科學(xué)與技術(shù);通訊作者:施一劍(1989—),男,漢族,浙江溫州人,講師,博士,研究方向:電子信息科學(xué)與技術(shù)。