基于A(yíng)pril Tag標記定位的自動(dòng)泊車(chē)系統實(shí)現
作者 姚錫欽 林燁 陳蘇陽(yáng) 浙江工貿職業(yè)技術(shù)學(xué)院 電子工程系(浙江 溫州 325000)
本文引用地址:http://dyxdggzs.com/article/201807/389575.htm摘要:系統采用STM32F103系列單片機作為自動(dòng)泊車(chē)控制系統和小車(chē)控制系統的核心,控制裝置通過(guò)按鈕選擇小車(chē)停車(chē)位并通過(guò)無(wú)線(xiàn)模塊發(fā)送給小車(chē),實(shí)時(shí)通過(guò)OpenMV攝像頭檢測小車(chē)頂部的April Tag標記來(lái)獲取小車(chē)的位置及角度,實(shí)現小車(chē)自動(dòng)駛入停車(chē)位。小車(chē)通過(guò)控制裝置的反饋來(lái)獲取自己的當前位置,同時(shí)利用麥克納姆輪的水平位移,讓小車(chē)更加精準快速的到達停車(chē)位。
*2017年“瑞薩杯”全國大學(xué)生電子設計競賽高職高專(zhuān)組最高獎“瑞薩杯獎”
姚錫欽(1978-),男,實(shí)驗師,研究方向:機電一體化技術(shù)。
0 引言
本設計為2017年“瑞薩杯”大學(xué)生電子設計競賽高職高專(zhuān)組自動(dòng)泊車(chē)系統(L題)的解決方案,本題的核心要求是設計并制作一個(gè)泊車(chē)系統,要求電動(dòng)小車(chē)能自動(dòng)駛入指定的停車(chē)位,停車(chē)后能自動(dòng)駛出停車(chē)場(chǎng)。為了達成核心要求,我們設計了這套使用麥克納姆輪做小車(chē)車(chē)輪的方式使小車(chē)具備全向移動(dòng)能力,并通過(guò)OpenMV識別定位April Tag來(lái)定位小車(chē)位置的自動(dòng)泊車(chē)方案。通過(guò)利用OpenMV在圖像識別定位開(kāi)發(fā)方面簡(jiǎn)單快速的特點(diǎn),以及麥克納姆輪全向移動(dòng)的能力使得糾偏算法大大簡(jiǎn)化。使得我們得以在緊張的比賽時(shí)間內完成本套方案。
1 系統整體方案
系統整體結構如圖1所示。本系統由小車(chē)部分以及控制器兩大部分組成,其中小車(chē)部分由STM32單片機、無(wú)線(xiàn)模塊、測速模塊、檢測碰撞電路、電機控制電路、液晶顯示電路、聲光提示電路、電源電路,輔以合適的機械結構組成:STM32單片機通過(guò)無(wú)線(xiàn)模塊接收來(lái)自控制器的目標車(chē)位以及小車(chē)當前坐標的數據流,在STM32單片機中進(jìn)行拼接格式化后小車(chē)即可獲知自身的實(shí)時(shí)坐標以及要前往的目標車(chē)位。運動(dòng)過(guò)程中由于使用麥克納姆輪進(jìn)行移動(dòng),且考慮到小車(chē)電機運動(dòng)特性參數不會(huì )絕對一致,故使用由紅外光電對管以及碼盤(pán)組成的測速模塊對車(chē)輪進(jìn)行測速,并在STM32中做每個(gè)車(chē)輪的轉速PID實(shí)時(shí)控制小車(chē)車(chē)輪轉速符合麥克納姆輪運動(dòng)控制函數計算出的單個(gè)輪速度。由于題目中要求小車(chē)停入車(chē)位以及駛出車(chē)位需要有相應的聲光提示,且在小車(chē)調試過(guò)程中由于小車(chē)處于移動(dòng)中,不方便在外部接入串口線(xiàn)進(jìn)行調試,故需要相應的可控LED以及蜂鳴器發(fā)光發(fā)聲提示,輔助程序調試。液晶顯示模塊用于顯示無(wú)線(xiàn)模塊初始化情況,以及碰撞次數。電源部分使用兩節18650鋰電池串聯(lián)作為總電源,其中電機驅動(dòng)供電為電池直供的最高8.4 V,最低6 V的電源,單片機等其他控制檢測電路為經(jīng)過(guò)降壓穩壓后的5 V電源,并在單片機最小系統板上由LDO進(jìn)一步穩壓為3.3 V。檢測碰撞方面有與場(chǎng)地配合來(lái)檢測與場(chǎng)地碰撞的檢測碰撞電路組成??刂撇糠种饕蓴z像頭、液晶顯示模塊、語(yǔ)音錄放模塊、激光檢測模塊、無(wú)線(xiàn)模塊組成,其中攝像頭用于跟蹤小車(chē)位置,液晶顯示模塊用于顯示當前車(chē)位以及小車(chē)行駛信息,同時(shí)使用語(yǔ)音錄放模塊進(jìn)行播報,激光檢測模塊用于檢測小車(chē)進(jìn)入場(chǎng)地以及駛出場(chǎng)地,并計算時(shí)間差,無(wú)線(xiàn)模塊用于向小車(chē)發(fā)送數據流。
2 檢測碰撞電路
因題目中有要求小車(chē)在場(chǎng)地中移動(dòng)的過(guò)程中要能記錄小車(chē)碰撞場(chǎng)地隔板的次數。故需要制作相應的檢測碰撞電路來(lái)檢測與隔板的碰撞,可參考圖2、圖3、圖4,思路為:在場(chǎng)地隔板上可能碰撞的區域貼上一條有一定寬度的銅箔,在小車(chē)上方安置一個(gè)平臺,并在平臺四周上下間隔一定高度貼兩圈銅箔,當沒(méi)有發(fā)生碰撞時(shí),小車(chē)平臺上兩圈銅箔不導通,一旦發(fā)生碰撞,場(chǎng)地隔板上的銅箔將小車(chē)平臺上的兩圈銅箔導通,單片機檢測銅箔被導通則判斷發(fā)生了碰撞,其原理類(lèi)似一個(gè)常開(kāi)式按鈕。
3 攝像頭模塊
由于需要實(shí)時(shí)獲取小車(chē)在場(chǎng)地中的位置,并將小車(chē)坐標通過(guò)控制器實(shí)時(shí)發(fā)送到小車(chē)并進(jìn)行反饋控制。故需要保證小車(chē)在場(chǎng)地中能實(shí)時(shí)被捕獲并要求小車(chē)移動(dòng)過(guò)程中丟失幾率盡量低,且坐標數據刷新率要求高。故選擇使用OpenMV配合April Tag來(lái)實(shí)現定位。OpenMV是一個(gè)開(kāi)源的機器視覺(jué)模塊。相較于傳統攝像頭+單片機做硬件,自己寫(xiě)圖像識別處理算法的方式,OpenMV使用Python語(yǔ)言(通過(guò)MicroPython解釋器在STM32F4或STM32F7上運行Python程序),開(kāi)發(fā)速度快。一些常用功能所需的算法已經(jīng)封裝成Python庫,可以直接調用,并有示例程序參考。在比賽中,由于開(kāi)發(fā)時(shí)間特別寶貴,故選擇使用OpenMV做攝像頭模塊,可以大大提升開(kāi)發(fā)速度,并在數據刷新率上相對于樹(shù)莓派+OpenCV有優(yōu)勢,在小車(chē)移動(dòng)過(guò)程中丟失幾率方面優(yōu)于普通攝像頭+STM32自寫(xiě)算法,通過(guò)將OpenMV固定于場(chǎng)地正上方,并俯視全場(chǎng),小車(chē)上方平臺固定April Tag標簽來(lái)進(jìn)行追蹤,小車(chē)上的April Tag標簽安裝示意可參照圖6??梢缘贸鲂≤?chē)在攝像頭畫(huà)面中的XY坐標以及旋轉角度,攝像頭俯視場(chǎng)地時(shí)畫(huà)面如圖5。該方案雖在當前項目中具有優(yōu)勢,但由于使用STM32F7單片機,RAM容量較少,不能處理高分辨率圖片,使得其定位精度成為一大瓶頸,且由于分辨率低,導致April Tag標簽需要在攝像頭畫(huà)面中占有一定面積才可被穩定跟蹤識別,故需要制作更大尺寸的April Tag標簽或者將April Tag標簽距離攝像頭的高度差拉近(在車(chē)身上抬高April Tag標簽高度)來(lái)補償分辨率過(guò)低的問(wèn)題。
4 麥克納姆輪
本題目中有兩個(gè)平行式車(chē)位,要求小車(chē)能實(shí)現側方位停車(chē),我們在初期考慮的時(shí)候就以要求停車(chē)過(guò)程中零碰撞為目標,故選擇麥克納姆輪作為小車(chē)車(chē)輪,小車(chē)使用的麥克納姆輪實(shí)物圖如圖7。相對于普通車(chē)輪,麥克納姆輪通過(guò)對4個(gè)車(chē)輪轉動(dòng)方向和速度的協(xié)調控制,可以使車(chē)體在運動(dòng)平面內的任意方向上移動(dòng)、轉動(dòng)和漂移,即運動(dòng)中可以不改變自身的方向),這可以很容易實(shí)現側方停車(chē)的要求,并且可以大大簡(jiǎn)化在正常行駛過(guò)程中糾偏算法。在電機方面,由于車(chē)身寬度以及其他重量體積方面的考慮,使用普通的微型有刷直流電機配合20格的普通光電碼盤(pán)配合光電對管對電機進(jìn)行測速后進(jìn)行轉速PID控制,由于電機輸出軸經(jīng)過(guò)減速機構后連接到麥克納姆輪進(jìn)行驅動(dòng),且測速用光電碼盤(pán)也位于減速后的軸上,碼盤(pán)格數也過(guò)少,故測速效果十分不理想,導致PID控制效果不理想。有條件可使用步進(jìn)電機或在電機直接輸出軸上通過(guò)光電碼盤(pán)進(jìn)行測速。
5 軟件設計
軟件主要為小車(chē)上STM32程序以及控制器STM32程序,以及OpenMV上個(gè)Python腳本,其中OpenMV中的Python實(shí)現了April Tag標簽的追蹤,并將April Tag標簽的位置信息和角度信息打包成JSON格式的數據包通過(guò)有線(xiàn)TTL串口發(fā)送至控制器上的STM32單片機進(jìn)行處理,控制器上的STM32單片機通過(guò)使用CJSON庫對來(lái)自OpenMV的JSON數據進(jìn)行解析,提取出相應數據后打包成小車(chē)對應的數據包格式通過(guò)無(wú)線(xiàn)模塊發(fā)送給小車(chē),更改數據包格式主要是因為在STM32單片機中解析JSON會(huì )消耗大量RAM以及CPU時(shí)間,故需要更換數據格式,且需要發(fā)送至小車(chē)的數據主要有兩大類(lèi),分別是坐標角度數據以及車(chē)位數據,故在數據包中加入包類(lèi)型來(lái)區分兩大數據類(lèi)型。小車(chē)收到車(chē)位數據以及坐標角度數據后根據小車(chē)中的坐標點(diǎn)計算小車(chē)當前坐標與小車(chē)目標坐標的誤差,得出補償誤差用的XY方向向量長(cháng)度。將得出的向量長(cháng)度數據輸入麥克納姆輪運動(dòng)計算函數算出每個(gè)輪子的輪速度,并傳遞給車(chē)輪轉速PID程序進(jìn)行車(chē)輪轉速控制,其中得出誤差并進(jìn)行補償控制的部分由于克納姆輪運動(dòng)計算函數的參數為X方向向量長(cháng)度以及Y方向向量長(cháng)度以及旋轉角速度,故可直接使用小車(chē)當前在攝像頭中的坐標與目標在攝像頭中的坐標的XY誤差分以及小車(chē)在攝像頭中的旋轉角度直接分別乘以系數來(lái)作為麥克納姆輪運動(dòng)計算函數的參數進(jìn)行位置補償。
6 結論
本文設計方案結構較為簡(jiǎn)單,且實(shí)現容易,特別在麥克納姆輪與OpenMV和April Tag的配合方面,大大簡(jiǎn)化了算法以及硬件電路設計難度和機械安裝難度。并且有一定可靠性,在非理想狀態(tài)下(例如電機運動(dòng)出現誤差,麥克納姆輪安裝出現誤差)表現出一定的魯棒性。
參考文獻:
[1]林燁.基于PID算法的水溫控制系統設計[J].山西科技,2011,26(3):111-113.
[2]王一治,常德功.Mecanum四輪全方位系統的運動(dòng)性能分析及結構形式優(yōu)選[J].機械工程學(xué)報,2009(5):307-310.
[3]侯彬,李亞明.麥克納姆輪技術(shù)及其在船用輪式設備中的應用[J].船舶工程,2011(3):84-87.
[4]石維亮,王興松,賈茜.基于Mecanum輪的全向移動(dòng)機器人的研制[J].機械工程師,2007(9):18-21.
[5]Abdelkader I,El-Sonbaty Y,El-Habrouk M.OPENMV: A PYTHON POWERED, EXTENSIBLE MACHINE VISION CAMERA[C]// International Conference on Computer Graphics, Visualization, Computer Vision and Image Processing. 2017.
本文來(lái)源于《電子產(chǎn)品世界》2018年第8期第39頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評論