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