黃淑芬,羅煒杰,洪世杰,高志濤
(廣東工業(yè)大學(xué)華立學(xué)院機(jī)電工程學(xué)院,廣州 511325)
近年來,移動(dòng)機(jī)器人在人類生活中的應(yīng)用不斷擴(kuò)大,投籃機(jī)器人作為移動(dòng)機(jī)器人的一種,通過對它的研究,可以推動(dòng)移動(dòng)機(jī)器人技術(shù)發(fā)展[1]。視覺識別技術(shù)是移動(dòng)機(jī)器人研究的關(guān)鍵技術(shù)之一,視覺信息的獲取是機(jī)器人目標(biāo)識別和規(guī)劃、導(dǎo)航的基礎(chǔ)[2-3]。目前視覺識別和定位大多都應(yīng)用于工業(yè)環(huán)境下,對于特定的應(yīng)用場景研究較少,而且市場上基本都采用專業(yè)控制器和工業(yè)相機(jī),成本太高,開發(fā)難度大[3-4]。本文研究一種可應(yīng)用于文娛、教育領(lǐng)域的投籃機(jī)器人,利用低成本的OpenMV自動(dòng)采集和分析目標(biāo)的圖像數(shù)據(jù),基于Python語言的視覺識別算法對目標(biāo)進(jìn)行快速識別、定位,實(shí)現(xiàn)自主決策和智能化傳感控制[5]。
投籃機(jī)器人結(jié)構(gòu)主要由機(jī)械臂、手爪、貯球裝置、小車組成。小車用亞克力板制作,尺寸為250 mm×200 mm。機(jī)械臂位于小車右側(cè),為了避免碰到攝像頭等器件,設(shè)計(jì)成長條狀。機(jī)械臂末端連接一對手爪,手爪采用半球形結(jié)構(gòu)。由于機(jī)械臂與地面存在一定高度,機(jī)械臂接觸地面時(shí)是傾斜向下的,因此手爪設(shè)計(jì)成以一定的角度向上翹,使其抓球時(shí)與地面接近平行狀態(tài),更好地將小球放進(jìn)貯球裝置中。貯球裝置由1個(gè)圓筒和4個(gè)支架組成,前面2個(gè)支架用于固定圓筒的角度,后面2個(gè)支架用于固定圓筒。小球的發(fā)射裝置由齒輪和齒條組成,齒輪有幾個(gè)齒被切斷。通過齒輪齒條傳動(dòng),拉動(dòng)齒條上的橡皮筋,賦予齒條一定的初速度。當(dāng)齒輪旋轉(zhuǎn)到事先已被磨掉齒的位置時(shí),由于齒條沒有與齒輪嚙合,橡皮筋帶動(dòng)齒條撞擊圓筒里的小球,小球沿著貯球裝置的軌道飛出,故圓筒也是小球的發(fā)射軌道。投籃機(jī)器人實(shí)物如圖1所示。
圖1 投籃機(jī)器人實(shí)物圖
該投籃機(jī)器人由OpenMV視覺模塊、電機(jī)驅(qū)動(dòng)、四輪小車、機(jī)械手臂、貯球裝置和齒輪齒條彈射器組成。由小車前端的OpenMV攝像頭采集小球、投籃區(qū)和籃筐圖像,通過OpenMV自帶的STM32單片機(jī)進(jìn)行視覺識別及定位,控制機(jī)械臂手臂(由機(jī)械臂和手爪組成)拾球并放入貯球裝置、四輪小車旋轉(zhuǎn)尋找目標(biāo)和前進(jìn)后退達(dá)到目標(biāo)區(qū)域、齒輪齒條彈射器發(fā)射小球等動(dòng)作。投籃機(jī)器人總體框圖如圖2所示。
圖2 投籃機(jī)器人總體框圖
OpenMV視覺模塊選用OpenMV4,以STM32H7處理器為內(nèi)核,以O(shè)V7725攝像頭為圖像采集模塊,是一種基于Python語言進(jìn)行編程驅(qū)動(dòng)的機(jī)器視覺處理模塊[6-7]。OpenMV不僅具有I/O端口控制、讀取文件系統(tǒng)等基礎(chǔ)功能,用戶還可以使用OpenMV提供的機(jī)器視覺功能進(jìn)行二次開發(fā),實(shí)現(xiàn)顏色跟蹤、人臉識別、邊緣檢測等功能[8]。因此它既是本方案的視覺識別裝置,也是主控裝置。
機(jī)械臂由RDS3115雙軸數(shù)字舵機(jī)控制,該舵機(jī)可控角度范圍0°~270°,由PWM脈沖調(diào)節(jié)角度,扭矩1.47 N·m(6 V),適合機(jī)器人的各關(guān)節(jié)活動(dòng)。手爪舵機(jī)選用ST90S,該舵機(jī)扭矩0.2 N·m(6 V),可控角度范圍0°~180°。齒輪齒條彈射器的動(dòng)作由MG995 360°舵機(jī)控制。為控制OpenMV的拍攝角度,在OpenMV下方安裝了一個(gè)MG995 180°舵機(jī),使攝像頭抬高時(shí)增大視野范圍,放低時(shí)增加識別準(zhǔn)確率。
小車四輪各安裝一個(gè)直流減速電機(jī),由電機(jī)驅(qū)動(dòng)模塊TB6612FNG驅(qū)動(dòng),使小車前進(jìn)、后退或原地旋轉(zhuǎn),達(dá)到尋找和追蹤小球的目的。
視覺識別是對攝像頭采集到的圖像進(jìn)行顏色特征和形狀特征的提取[6]。為了提高軟件開發(fā)效率,使用OpenMV機(jī)器視覺庫進(jìn)行圖像處理。OpenMV顏色識別算法的依據(jù)是Lab顏色空間。L是亮度,取值范圍是[0,100];a和b是2個(gè)顏色通道,取值范圍都是[127,-128]。a的正數(shù)代表紅色,負(fù)端代表綠色;b的正數(shù)代表黃色,負(fù)端代表藍(lán)色。因此可以通過修改L分量調(diào)整亮度,修改a和b分量的輸出色階實(shí)現(xiàn)精確的顏色平衡[2]。
本文中小球、投籃區(qū)、籃筐用不同的顏色標(biāo)識,因此顏色識別非常關(guān)鍵。OpenMV提供了機(jī)器視覺功能的Python編程接口,其中image.find_blobs()函數(shù)用來進(jìn)行顏色識別。例如本設(shè)計(jì)中使用語句blobs=img.find_blobs([blue_threshold],roi=area)尋找藍(lán)色小球,blue_threshold是預(yù)設(shè)的藍(lán)色小球閾值,roi是“感興趣區(qū)”,blobs是返回的色塊對象。Open-MV的集成開發(fā)環(huán)境OpenMV IDE中的閾值編輯器為顏色閾值的調(diào)試提供了極大的方便。如圖3所示,圖中有6個(gè)顏色各異的小球,其中右上角小球?yàn)樗{(lán)色。拖動(dòng)閾值編輯器6個(gè)滑塊分別設(shè)置L、a、b的最小值和最大值,當(dāng)目標(biāo)顏色變成白色,其他顏色全變?yōu)楹谏珪r(shí),表明找到被跟蹤的目標(biāo)。由圖3可得到藍(lán)色小球的Lab閾值[16,56,1,53,-90,-31]。在視覺識別算法中使用image.find_blobs()將像素點(diǎn)與該閾值進(jìn)行比較,從而判斷是否找到藍(lán)色小球。
圖3 OpenMV IDE顏色閾值調(diào)試界面
視覺識別算法中,首先進(jìn)行感光元件(攝像頭)初始化參數(shù)設(shè)置,包括庫函數(shù)sensor.reset()初始化感光元件;sensor.set_pixformat(sensor.RGB565)設(shè)置像素為彩色;sensor.set_framesize(sensor.QVGA)設(shè)置圖像像素為320×240;sensor.skip_frames(10)跳過10張照片,等待感光元件變穩(wěn)定;sensor.set_auto_whitebal(False) 自動(dòng)白平衡開啟關(guān)閉(在使用顏色追蹤時(shí),需要關(guān)閉自動(dòng)白平衡)。接著使用sensor.snapshot()采集圖像,image.find_blobs()找到目標(biāo)顏色后,使用image.draw_rectangle()將目標(biāo)顏色區(qū)域用矩形框標(biāo)注,image.draw_cross() 在目標(biāo)顏色區(qū)域的中心畫十字形標(biāo)記。
投籃機(jī)器人的軟件設(shè)計(jì)包括攝像頭初始化設(shè)置、目標(biāo)閾值設(shè)置、圖像采集、視覺識別和定位、小車驅(qū)動(dòng)、PID算法、舵機(jī)控制等模塊。
圖4 軟件流程圖
軟件流程如圖4所示,系統(tǒng)上電啟動(dòng),進(jìn)行攝像頭初始化和各目標(biāo)色塊閾值設(shè)定。主控裝置控制電機(jī)驅(qū)動(dòng)模塊驅(qū)動(dòng)小車原地旋轉(zhuǎn),攝像頭采集圖像。當(dāng)識別到目標(biāo)小球時(shí)鎖定色塊坐標(biāo),小車調(diào)整方向使色塊位于圖像中心位置,通過PID算法控制小車向前行駛并精確停到距離小球一定位置上。主控裝置控制RDS3115舵機(jī)將機(jī)械臂放下并啟動(dòng)手爪上的ST90S舵機(jī)抓取小球,再次控制機(jī)械臂將小球放入貯球裝置。接著小車原地旋轉(zhuǎn),識別投籃區(qū)色塊,確定方向后前進(jìn),到達(dá)投籃區(qū)。之后原地旋轉(zhuǎn)識別籃筐位置,識別到目標(biāo)時(shí)再次調(diào)整對準(zhǔn)籃框中心位置,齒輪齒條彈射器上的MG995 360°舵機(jī)啟動(dòng),拉動(dòng)齒條將小球彈射出去。
在測試中,使用紅色、藍(lán)色小球作為拾取對象,投籃區(qū)為綠色,籃筐紫色。在正常光照條件下,投籃機(jī)器人目標(biāo)識別率為98%。排除小球在墻壁或者籃筐邊沿的情況下,正確夾取規(guī)定顏色的小球放入貯球裝置的成功率為99%。投籃成功率為36%。測試結(jié)果驗(yàn)證了視覺識別算法、小車PID和機(jī)械手臂控制算法的正確性。但由于小球發(fā)射是由橡皮筋賦予初速度,穩(wěn)定性較差,因此投籃命中率不高,而且當(dāng)投籃距離發(fā)生變化時(shí),不能自動(dòng)調(diào)整小球初速度,需要人工調(diào)整橡皮筋松緊程度或者齒輪齒數(shù)。未來可將機(jī)械彈射換成電磁彈射,通過視覺識別計(jì)算出投籃距離,自動(dòng)調(diào)節(jié)電磁的彈射力度。
本機(jī)器人裝置結(jié)構(gòu)簡單、成本低,基于Python語言編寫的視覺識別算法提高了程序的可運(yùn)行性和開發(fā)效率,在文娛、教育等領(lǐng)域具有廣闊的應(yīng)用前景。