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