李紅巖,張 偉,楊晨帆
(西安科技大學(xué) 電氣與控制工程學(xué)院,陜西 西安 710054)
乒乓球是一種風(fēng)靡我國且老少皆宜的全民性運動,但對于愛好者來說,在訓(xùn)練完撿球并根據(jù)顏色分類既費時又費力,影響體驗。本課題設(shè)計了一種基于OpenCV的乒乓球分類撿球機器人,通過攝像頭采集環(huán)境信息,經(jīng)過樹莓派運算識別出場地上乒乓球的位置及顏色信息,以STM32F4單片機作為主控制器,控制機器人完成撿球與分類動作。同時還有自我保護功能,保護在運動過程中撞到障礙物或者被人踩傷。
本課題設(shè)計的基于OpenCV的乒乓球分類撿球機器人主要由OpenCV圖像識別系統(tǒng)與控制系統(tǒng)組成,結(jié)構(gòu)如圖1所示。OpenCV是基于樹莓派上布署的Linux系統(tǒng)。機器人啟動后,樹莓派通過攝像頭采集環(huán)境信息,識別乒乓球的位置及顏色信息并以串口通信的方式發(fā)送給STM32F4主控制器作為控制參量,控制機器人向目標乒乓球做趨近運動。運動過程中,安裝在機器人四周的人體紅外傳感器與超聲波距離傳感器實時監(jiān)測周圍障礙物以及運動方向是否有人存在。如探測到人或障礙物則結(jié)合傳感器數(shù)據(jù),根據(jù)設(shè)定算法自動選擇一條最優(yōu)的無障礙通道。機器人系統(tǒng)總體組成如圖1所示。
撿球裝置由兩級并聯(lián)毛刷滾輪、直流減速電機、減速器、編碼器、聯(lián)軸器組成。兩級柔性毛刷滾輪通過驅(qū)動器控制兩直流減速電機的正反轉(zhuǎn)與速度完成收取動作。收取動作采用階梯式傳遞方式,一級滾輪高速旋轉(zhuǎn)收起地面上的球,二級滾輪低速旋轉(zhuǎn)將球抬升并送到儲存?zhèn)}倉口等待分類入倉。收取裝置如圖2所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
圖2 收集裝置結(jié)構(gòu)
運動部分采用四輪驅(qū)動式結(jié)構(gòu),包括直流減速電機、減速器、編碼器、聯(lián)軸器和橡膠輪胎。通過驅(qū)動器控制直流減速電機實現(xiàn)前進、后退、轉(zhuǎn)彎等動作,滿足撿球所需要的運動方式。驅(qū)動器采用東芝公司生產(chǎn)的一款直流電機驅(qū)動器件TB6612FNG,其使用MOSFET的H橋結(jié)構(gòu),可同時驅(qū)動兩電機,支持PWM調(diào)速方式。系統(tǒng)驅(qū)動電路與實物如圖3所示。
圖3 系統(tǒng)驅(qū)動電路與實物
分類裝置位于兩儲存?zhèn)}之間,包括180°舵機、轉(zhuǎn)軸、軸承和倉門。當(dāng)球到達儲存?zhèn)}倉口時,控制器根據(jù)樹莓派傳回的球體顏色信息,控制舵機將與球體顏色相反的倉門向外傾斜45°關(guān)閉,使球落入對應(yīng)顏色倉內(nèi),達到分類目的。分類裝置結(jié)構(gòu)圖如圖4所示。
圖4 分類系統(tǒng)結(jié)構(gòu)
避障系統(tǒng)包括超聲波距離傳感器、人體紅外傳感器。傳感器分布在底盤周圍,將采集到的信息返回控制器,經(jīng)過控制器對數(shù)據(jù)的計算與判斷,控制運動系統(tǒng)實現(xiàn)自主避障功能,達到自我保護目的。傳感器分布位置如圖5所示。
圖5 傳感器位置分布圖
OpenCV識別基于Linux平臺,開發(fā)環(huán)境為Python3,版本為4.3.0。OpenCV系統(tǒng)啟動后自動運行乒乓球識別程序,將攝像頭采集到的數(shù)據(jù)經(jīng)過濾波、灰度化、圓形檢測,顏色識別等處理方式,精確識別到乒乓球并將位置及顏色信息以串口通信的方式發(fā)送給控制器。
控制部分基于Windows平臺,開發(fā)環(huán)境為MDK??刂破鱏TM32F4接收到樹莓派所發(fā)送的位置及顏色信息時,收集系統(tǒng)開始工作。控制器輸出PWM信號控制分類系統(tǒng)調(diào)整對應(yīng)顏色的倉門。同時,控制運動系統(tǒng)向目標乒乓球做趨近運動。整個運動過程中,避障系統(tǒng)實時監(jiān)測周圍障礙物的數(shù)據(jù),超過警戒值立即執(zhí)行避障程序,直到完成目標球的收集。
攝像頭捕捉到的圖像為三通道8位R,G,B彩圖,每一個像素點的R,G,B值表示了該像素點的顏色。為了提升霍夫圓的識別效率,減輕運算量,對彩色圖像中的無用的三維色彩信息進行剔除,轉(zhuǎn)換成一維的表示黑色(0)到白色(255)之間強度變量,這個過程叫做灰度化。在OpenCV中提供了色彩空間轉(zhuǎn)換函數(shù)為Gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)。圖像原圖與灰度化后圖像如圖6所示。
圖6 圖像灰度處理
在平面直角坐標系中任意圓均可表示為:
C:(x-a)2+(y-b)2=r2
式中:(a, b)表示圓心的坐標;r表示半徑。將其映射到abr坐標系就是一條三維曲線。而在xy坐標系中所有非零點經(jīng)過映射就構(gòu)成了abr坐標系中許多條三維曲線。映射到三維圖像上的點被稱為投票,如圖7所示。顯然,在同一圓上對應(yīng)的三維坐標系所得到的票數(shù)最多,即可判定能(x, y, r)坐標點就是圓。即可得到圓的圓心和半徑。
圖7 OpenCV坐標空間轉(zhuǎn)換
在OpenCV庫中封裝有霍夫圓檢測的庫函數(shù),檢測成功后返回圓心坐標和半徑信息,調(diào)用庫函數(shù):
cv2.HoughCircles(Gray, method, dp, minDist, circles,param1, param2, minRadius, maxRadius)
識別成功的乒乓球如圖8所示。
圖8 OpenCV識別乒乓球
機器人以避障功能達到自我保護的目的,其核心為避障算法。避障算法以超聲波距離傳感器所測距離,人體紅外傳感器的導(dǎo)通狀態(tài)為輸入,以控制運動系統(tǒng)為輸出,控制機器人避過障礙趨近于目標位置。在機器人運動過程中超聲波距離傳感器始終檢測前方距離,當(dāng)前方距離小于安全距離10 cm或者人體紅外檢測到人,即可判定前方有障礙物。此時機器人停止,檢測安裝在機器人兩側(cè)的距離傳感器的值來判定左邊和右邊障礙物的情況,當(dāng)左邊距離大于右邊距離時,說明左邊無障礙物向左轉(zhuǎn)彎并繼續(xù)前行,同時又繼續(xù)檢測前方距離,直到球被收集起來。避障流程如圖9所示。
圖9 避障算法流程
機器人上電后,系統(tǒng)啟動,樹莓派通過攝像頭采集環(huán)境信息,識別到乒乓球后通過串口打印出一幀信息,如圖10所示。其中包括乒乓球的位置信息,顏色信息,(R,G,B)值信息,通過串口發(fā)送給STM32F4主控。機器人達到了預(yù)期的收集和分類效果,實際測試效果圖如圖11所示。
圖10 OpenCV系統(tǒng)測試
圖11 機器人運行效果測試
本文所設(shè)計的基于OpenCV的分類撿球機器人充分考慮到撿球過程中遇到的困難并給出了有效的處理措施,使其可以很好的規(guī)劃運動路徑,搜索球體,準確趨近目標,并完成撿球、分類、儲存的動作。同時充分利用了OpenCV圖像處理的便捷與高效,保證了整個過程的快速與準確。根據(jù)此設(shè)計理念和設(shè)計方法可以推廣到其他球類的收集工作中去。