咸陽(yáng)師范學(xué)院計(jì)算機(jī)學(xué)院 楊丙麗 曹佩蕾 姚玉瑩
本文主要針對(duì)基于樹莓派的機(jī)器人運(yùn)動(dòng)時(shí)的物體識(shí)別、視覺循跡避障、物體追蹤等問題展開研究。借助樹莓派平臺(tái),以其豐富的硬件接口和大量開源的軟件資源作為研究基礎(chǔ),采用Python程序設(shè)計(jì)語(yǔ)言編程,使用可以連接樹莓派的攝像頭經(jīng)行畫面采集,利用OpenCV進(jìn)行圖像處理,設(shè)計(jì)了基于樹莓派的目標(biāo)追蹤系統(tǒng),以攝像頭為感應(yīng),把獲取的圖像視頻進(jìn)行分析處理后,判斷物體運(yùn)動(dòng)軌跡,判斷路徑遇到的障礙,與目標(biāo)經(jīng)行對(duì)比,實(shí)現(xiàn)物體追蹤。
人工智能已是現(xiàn)在研究的熱點(diǎn),在不同領(lǐng)域的機(jī)器人研究中,都少不了有關(guān)機(jī)器人運(yùn)動(dòng)的研究,目前對(duì)機(jī)器人物體追蹤領(lǐng)域已有研究,但針對(duì)不同領(lǐng)域的研究主題大不相同,在不同的研究中,根據(jù)設(shè)定的不同需求展開特定的研究,尤其在學(xué)術(shù)論文中涉及的更多,如西北大學(xué)張少博的學(xué)位論文《基于SSD物體追蹤算法的增強(qiáng)實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》[1],科學(xué)中國(guó)人期刊出版的《基于Processing的移動(dòng)物體追蹤定位》[2]等都介紹了有關(guān)機(jī)器人運(yùn)動(dòng)的研究。本文主要是基于樹莓派針對(duì)小車機(jī)器人的運(yùn)動(dòng)物體識(shí)別所涉及的研究,在小車運(yùn)行過程中,根據(jù)實(shí)際情況與設(shè)計(jì)的特定需求,對(duì)小車進(jìn)行控制運(yùn)動(dòng)的方向,保證機(jī)器人的正常的運(yùn)動(dòng),最終實(shí)現(xiàn)物體識(shí)別、物體避障、物體追蹤。
樹莓派是一個(gè)開放源代碼的硬件平臺(tái),其本身?yè)碛写罅壳邑S富的硬件接口和開源的軟件資源,可直接進(jìn)行使用。
OpenCV是一個(gè)開源發(fā)行的可跨平臺(tái)計(jì)算機(jī)視覺庫(kù),它可以運(yùn)行在Windows系統(tǒng)、Linux系統(tǒng)、Android系統(tǒng)和Mac OS等操作系統(tǒng)上[3],可使用的范圍非常廣泛,并且提供了Python語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理與計(jì)算機(jī)視覺處理方面的通用算法,可以直接進(jìn)行使用。
在本項(xiàng)目的研究過程中,主要是通過Python語(yǔ)言編寫程序,用Python語(yǔ)言實(shí)現(xiàn)代碼編寫,運(yùn)用Pygame和樹莓派自身的小車運(yùn)動(dòng)函數(shù),通過分析比較攝像頭傳來的圖像、視頻,判定小車的運(yùn)動(dòng)軌跡,前進(jìn)方向。
在圖像獲取方面,利用網(wǎng)絡(luò)連接攝像頭獲取實(shí)況圖像,采用OpenCV自帶的庫(kù)函數(shù)VideoCapture對(duì)獲取的圖像進(jìn)行讀取[4],并通過傅里葉變換、Morpholigical過濾、高斯模糊處理、膨脹等圖像處理方法進(jìn)行處理,來得到更清晰準(zhǔn)確的畫面,通過讀取的圖像判斷小車的運(yùn)動(dòng)方向。在物體追蹤方面,OpenCV本身內(nèi)部的追蹤算法可以直接使用,大大方便了我們的研究,也讓小車的運(yùn)動(dòng)追蹤更加容易實(shí)現(xiàn)。
小車的主控模塊選用的是樹莓派平臺(tái)。樹莓派是一種高性能、價(jià)格低廉的微型電腦,采用ARM架構(gòu),可運(yùn)行Ubuntu Linux操作系統(tǒng),基于此,在本項(xiàng)目中利用樹莓派平臺(tái)用Python語(yǔ)言作為系統(tǒng)開發(fā)程序語(yǔ)言。
本系統(tǒng)由攝像頭、樹莓派主板、舵機(jī)驅(qū)動(dòng)板、開發(fā)板、電源等部分組成。其中樹莓派主板為圖像處理模塊,通過Ubuntu Linux操作系統(tǒng)為控制模塊,小車機(jī)器人為執(zhí)行模塊。樹莓派一方面負(fù)責(zé)與攝像頭連接進(jìn)行環(huán)境圖像采集與手勢(shì)識(shí)別,另一方面利用串口通信方式將圖像識(shí)別數(shù)據(jù)下發(fā)至Ubuntu Linux操作系統(tǒng)。根據(jù)物體運(yùn)行的軌跡,結(jié)合物體識(shí)別的影像,要求樹莓派讀取攝像頭采集到的圖像信息并進(jìn)行圖片處理與物體識(shí)別,然后將物體識(shí)別結(jié)果發(fā)送到Ubuntu Linux操作系統(tǒng),驅(qū)動(dòng)板根據(jù)Ubuntu Linux操作系統(tǒng)計(jì)算得到的舵機(jī)數(shù)據(jù)進(jìn)行小車機(jī)器人舵機(jī)控制,同時(shí)機(jī)器人自身傳感器采集狀態(tài),將狀態(tài)信息發(fā)送至Ubuntu Linux操作系統(tǒng),形成閉環(huán)控制,完成對(duì)小車機(jī)器人的控制。攝像頭連接,利用網(wǎng)絡(luò)讀取攝像頭獲取的畫面[5],樹莓派獲取后進(jìn)行分析處理,再將信息傳輸給舵機(jī),控制運(yùn)轉(zhuǎn),舵機(jī)作為轉(zhuǎn)向驅(qū)動(dòng)。penCV算法找出物體的輪廓,利用霍夫變換找出物體的中心坐標(biāo)和半徑。物體的追蹤使用的硬件為支持樹莓派的USB攝像頭,使用的軟件為OpenCV,應(yīng)用算法,通過WiFi與RPI進(jìn)行數(shù)據(jù)、圖像傳輸,實(shí)現(xiàn)遠(yuǎn)程控制,電源模塊可為系統(tǒng)供電。
本文主要采用樹莓派4B主板作為核心,它主要通過控制小車機(jī)器人的舵機(jī)運(yùn)動(dòng)來獲取運(yùn)動(dòng)畫面,然后對(duì)圖像經(jīng)行處理。樹莓派拓展部可集成電源芯片,支持相應(yīng)的電源輸入,然后通過拓展板對(duì)樹莓派經(jīng)行穩(wěn)壓供電。隨后,將訊號(hào)發(fā)送給舵機(jī),舵機(jī)根據(jù)控制信號(hào)調(diào)轉(zhuǎn)角度,控制馬達(dá)轉(zhuǎn)動(dòng)。
舵機(jī)是一種位置伺服驅(qū)動(dòng)器,主要應(yīng)用于需要不斷變換角度并且保持持續(xù)狀態(tài)的控制系統(tǒng)[6]。舵機(jī)主要由外殼、電路板、驅(qū)動(dòng)馬達(dá)減速器和位置檢測(cè)原件構(gòu)成,操作使用方便。舵機(jī)的工作原理是由接收器將信號(hào)發(fā)送給舵機(jī),由電路板上的IC驅(qū)動(dòng)核心馬達(dá)開始轉(zhuǎn)到,通過減速齒輪將動(dòng)力傳輸給搖臂,同時(shí)再由位置檢測(cè)器將檢測(cè)到的信號(hào)傳輸回去,判斷小車機(jī)器人運(yùn)動(dòng)位置是否合理,控制小車運(yùn)動(dòng)。
OpenCV在計(jì)算機(jī)視覺處理上應(yīng)用的非常廣泛,且其本身是一個(gè)開源的計(jì)算機(jī)視覺庫(kù),可以通過對(duì)攝像頭獲取的圖像視頻進(jìn)行分析處理,使運(yùn)動(dòng)軌跡更為準(zhǔn)確,主要功能是實(shí)現(xiàn)小車前進(jìn)、小車后退、小車左轉(zhuǎn)、小車右轉(zhuǎn)、小車停止。
當(dāng)啟用系統(tǒng)后,會(huì)根據(jù)指令進(jìn)行相應(yīng)的運(yùn)行,根據(jù)攝像頭采集的畫面,對(duì)圖像進(jìn)行分塊處理,截取需要的區(qū)域,進(jìn)行運(yùn)算。根據(jù)不同的閾值,確定對(duì)應(yīng)的識(shí)別范圍。在小車運(yùn)行中不斷檢測(cè)攝像頭獲取的圖片來調(diào)整小車的前進(jìn)方向,當(dāng)檢測(cè)到的白色色塊寬度大于一定值時(shí),則停止運(yùn)動(dòng)。利用OpenCV圖像處處理的常用函數(shù)如圖像讀取、圖像邊緣檢測(cè)、高斯模糊、膨脹、侵蝕、獲取邊界等算法函數(shù)對(duì)采集到的圖像經(jīng)行處理、識(shí)別,操控小車的正常運(yùn)行,變換方向,找到應(yīng)識(shí)別的物體,并在運(yùn)動(dòng)過程中避開遇到的障礙物。
圖像獲取主要是依靠從連接的攝像頭獲取輸入,利用OpenCV的cv2.VideoCapture(0)函數(shù)讀入,通過在樹莓派連接的顯示器上創(chuàng)建一個(gè)顯示窗口,顯示讀取得到的圖像視頻畫面,并通過調(diào)整窗口的大小,來提高樹莓派的處理速度和人眼觀看的舒適程度。圖像獲取完畢后,根據(jù)需要,使用cv2.detectMultiScale()函數(shù)對(duì)圖像進(jìn)行灰度處理,利用傅里葉變換、Morpholigical過濾、高斯模糊處理、膨脹等圖像處理方法進(jìn)行處理,來得到更清晰準(zhǔn)確的畫面,便于后續(xù)的其他處理操作。
在本文研究的范圍中,小車的運(yùn)動(dòng)主要是小車前進(jìn)、小車后退、小車左轉(zhuǎn)、小車右轉(zhuǎn)、小車停止五大基礎(chǔ)動(dòng)作。利用Import Adafruit_PCA9685,使樹莓派控制舵機(jī)驅(qū)動(dòng)板,將舵機(jī)初始化,設(shè)置好舵機(jī)脈沖寬度,根據(jù)脈沖信號(hào)控制舵機(jī)轉(zhuǎn)動(dòng)。利用樹莓派的運(yùn)動(dòng)函數(shù),設(shè)置好運(yùn)動(dòng)速度和時(shí)間參數(shù),構(gòu)架起小車運(yùn)動(dòng)的運(yùn)行框架指令,設(shè)置調(diào)用的關(guān)鍵字命令,在運(yùn)行過程中,根據(jù)指令選擇相應(yīng)的運(yùn)動(dòng)方向,控制小車的運(yùn)動(dòng)方向。
根據(jù)處理好后的圖像,利用OpenCV中Rectangle函數(shù)對(duì)需要確定追蹤或者研究的物體進(jìn)行繪制一個(gè)矩形框,鎖定目標(biāo)物體,以便其在以后的運(yùn)動(dòng)過程中被我們觀察到,并通過觀察目標(biāo)物體的運(yùn)動(dòng)軌跡,確定小車的前進(jìn)方向,對(duì)其實(shí)現(xiàn)追蹤。
在OpenCV中主要使用的追蹤算法是KCF算法[7],利用cv2.TrackerKCF_creat進(jìn)行調(diào)用。先由CF算法得到一個(gè)濾波矩陣,CF算法將相關(guān)濾波的方法用到極致,其核心思想是利用循環(huán)矩陣乘以圖片,使圖像產(chǎn)生位移,從而得到大量樣本。把由位移得到的樣本存在一個(gè)矩陣中就會(huì)組成一個(gè)循環(huán)矩陣。KCF算法通過平移產(chǎn)生大量樣本,采集大量樣本信息,并且給每個(gè)樣本賦予一個(gè)標(biāo)簽,這個(gè)標(biāo)簽會(huì)根據(jù)離中心的距離,使用高斯分布描述,加快圖像處理速度。
此外,還可以運(yùn)用形態(tài)學(xué)動(dòng)態(tài)檢測(cè),根據(jù)對(duì)目標(biāo)物體的圖像進(jìn)行顏色提取、腐蝕、膨脹、高斯模糊、二進(jìn)制“與”等進(jìn)行不同程度的處理,是目標(biāo)圖像與其他圖像區(qū)分開來,便于識(shí)別,來找到目標(biāo)物體。具體實(shí)現(xiàn)過程如下:
先進(jìn)性掩膜處理;
使用cv2.inRange函數(shù)提取圖像中想要的顏色,并把圖像中需要提取的顏色區(qū)域設(shè)置為白色,剩下的部分設(shè)置為黑色,實(shí)現(xiàn)語(yǔ)句m a s k=c v 2.i n R a n g e(h s v,ball_yellow_lower,ball_yellow_upper);
使用cv2.erode 函數(shù),對(duì)圖像進(jìn)行腐蝕處理;加上高斯模糊,可以加強(qiáng)圖像處理,使色彩更加突出,mask=cv2.erode(mask,None,iterations=2);
使用cv2.dila te函數(shù)對(duì)目標(biāo)圖像進(jìn)行膨脹處理,ask=cv2.dilate(mask,None,iterations=2;
使用cv2.GaussianBlur函數(shù),添加高斯濾波,mask=cv2.GaussianBlur(mask,(3,3),0);
使用cv2.bitwise_and函數(shù)對(duì)圖像每一個(gè)像素值進(jìn)行二進(jìn)制“與”操作,res=cv2.bitwise_and(frame,frame,mask=mask);
使用cv2.findContours函數(shù)來檢測(cè)目標(biāo)圖像中需要追蹤物體的輪廓,對(duì)物體的輪廓進(jìn)行處理
cnts=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2] ;
最后通過比較cnts的值,進(jìn)行對(duì)應(yīng)處理。
考慮到實(shí)驗(yàn)環(huán)境和小車機(jī)器人的穩(wěn)定性,本項(xiàng)目測(cè)試采用室內(nèi)檢測(cè)的方式,在組裝好設(shè)備及其他電源、網(wǎng)絡(luò)連接良好的狀態(tài)下,進(jìn)行檢測(cè)。
在小車運(yùn)動(dòng)檢測(cè)實(shí)驗(yàn)中,主要是通過計(jì)算機(jī)指令控制小車的運(yùn)動(dòng),判斷小車是否按指令進(jìn)行運(yùn)動(dòng),運(yùn)動(dòng)狀態(tài)情況如何,是否會(huì)出現(xiàn)不按規(guī)定指令錯(cuò)誤運(yùn)行、出現(xiàn)卡頓、小車隨意運(yùn)動(dòng)等現(xiàn)象。同時(shí),在運(yùn)動(dòng)過程中還可以打開語(yǔ)音播報(bào)功能,小車機(jī)器人可以根據(jù)即將進(jìn)行的運(yùn)動(dòng)狀態(tài)自己語(yǔ)言播報(bào)要進(jìn)入的運(yùn)動(dòng)狀態(tài),作為運(yùn)動(dòng)提示音。
在圖像獲取測(cè)試中,首先打開攝像頭,連接網(wǎng)絡(luò),在顯示器上窗口中查看獲取的圖像及視頻,觀察是否可以正確獲取圖像及視頻,以及圖片的清晰度、色彩度等。并根據(jù)圖像處理函數(shù)調(diào)用,觀察圖像處理后的效果,并與原圖像進(jìn)行對(duì)比,觀察兩組圖像的區(qū)別。
在目標(biāo)追蹤測(cè)試中,本項(xiàng)目主要是通過追蹤乒乓球進(jìn)行實(shí)驗(yàn)。首先由攝像頭獲取乒乓球的運(yùn)動(dòng)圖像視頻,確定以乒乓球?yàn)檠芯繉?duì)象,結(jié)合圖像處理分析乒乓球的運(yùn)動(dòng)軌跡,同時(shí)樹莓派將運(yùn)動(dòng)指令傳輸給舵機(jī)及小車,控制小車按照乒乓球的運(yùn)動(dòng)軌跡進(jìn)行運(yùn)動(dòng)追蹤,最后找到乒乓球。
在避障測(cè)試中,主要是在小車運(yùn)動(dòng)過車中增加障礙物,影響小車當(dāng)前的前進(jìn)方向,阻礙小車運(yùn)動(dòng),觀察小車是否根據(jù)設(shè)定信息,停止運(yùn)動(dòng)。
本文分析了運(yùn)動(dòng)機(jī)器人的研究現(xiàn)狀,并通過對(duì)研究基礎(chǔ)的大量分析,確定了研究的可行性,對(duì)本項(xiàng)目從目標(biāo)追蹤系統(tǒng)的總體設(shè)計(jì)、控制系統(tǒng)硬件設(shè)計(jì)、軟件設(shè)計(jì)與應(yīng)用、主要功能實(shí)現(xiàn)具體介紹等四個(gè)方面介紹了研究的過程與方法。
經(jīng)過研究發(fā)現(xiàn),小車可以在正確的操作下運(yùn)動(dòng),并轉(zhuǎn)換方向,正確獲取圖像并處理分析,根據(jù)分析處理后的圖像判斷物體的前進(jìn)方向,經(jīng)行追蹤,觀察,最后找到目標(biāo)物體;同時(shí),在遇到障礙物時(shí),也可以經(jīng)行調(diào)轉(zhuǎn)、避讓、停止運(yùn)動(dòng),實(shí)現(xiàn)了最初的設(shè)計(jì)構(gòu)想。
但在實(shí)驗(yàn)中也遇到一些問題,如:每一個(gè)指令完成后需清除上一指令,才能經(jīng)行后續(xù)指定任務(wù),連接過程不穩(wěn)定等。在測(cè)試的過程中,因環(huán)境限制,測(cè)試的目標(biāo)物體單一,對(duì)于簡(jiǎn)單的物體基本可以實(shí)現(xiàn)小車運(yùn)動(dòng)及追蹤。因此,該小車的運(yùn)動(dòng)測(cè)試還應(yīng)加強(qiáng),改進(jìn)運(yùn)行環(huán)境,增強(qiáng)測(cè)試難度,再繼續(xù)發(fā)現(xiàn)并更正存在的問題。在本輪測(cè)試中,小車仍還有很大的提升空間,舵機(jī)結(jié)構(gòu)、語(yǔ)句操控、攝像頭、語(yǔ)音提醒的方面還有待在后續(xù)研究中提高。
引用
[1] 張少博.基于SSD物體追蹤算法的增強(qiáng)現(xiàn)實(shí)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西北大學(xué),2018.
[2] 張?chǎng)?白文樂,李浩進(jìn).基于Processing的移動(dòng)物體追蹤定位[J].科學(xué)中國(guó)人,2016(33):39.
[3] 歐陽(yáng)森,張真.基于樹莓派的預(yù)防性輕型除冰機(jī)器人行走控制系統(tǒng)設(shè)計(jì)[J].電氣傳動(dòng),2021,51(8):71-76.
[4] 薛志峰,蔣剛,留滄海,等.基于樹莓派的手勢(shì)交互六足機(jī)器人[J].傳感器與微系統(tǒng),2021,40(3):87-89.
[5] 劉昕.實(shí)時(shí)視頻中選定物體追蹤算法的研究[D].長(zhǎng)春:吉林大學(xué),2006.
[6] 楊志勇,黃文鋒,劉燦.基于樹莓派的遠(yuǎn)程控制智能拍照小車[J].現(xiàn)代電子技術(shù),2019,42(8):168-170+174.
[7] 張建鵬.基于KCF的視頻中運(yùn)動(dòng)物體的跟蹤算法研究[D].蘭州:蘭州交通大學(xué),2019.