玉健鴻,李 品,張 帆,史穎剛,劉 利,谷 芳
(西北農林科技大學機械與電子工程學院,陜西咸陽712100)
參與學科競賽,可以調動學生學習熱情,系統地理解專業知識體系,提高學生的專業能力、綜合素質、創新精神和動手能力,是提高教學質量、培養創新人才的重要途徑[1]。
魔方是一種智力玩具,采用機器人解魔方的過程具有多變性,需要設計合適的機械架構、電氣系統,并設計對應的控制算法,故解魔方機器人整體架構和控制算法設計是近幾年來的熱點[2]。
解魔方競賽機器人是中國高校智能機器人創意大賽的項目之一,要求機器人采用雙手臂,手指采用二指或五指的形式,手腕容許有轉動和擺動,手臂固定;機器人外廓尺寸不超過480 mm×480 mm×480 mm,總質量不超過20 kg;機器人攝像頭數量不限,允許機器人上增設光源。根據競賽要求,解魔方競賽機器人融合了機器視覺、機器人技術、圖像處理、魔方算法等多學科知識,若想快速、穩定地復原魔方,需要研究解魔方機器人的機械系統、電氣控制系統,開發其控制軟件。
解魔方機器人的機械結構如圖1所示,由2個機械臂和1個底座構成,底座為厚度10 mm的中板鋁材,用于保證機器人的安裝精度和定位精度,提高系統的運行穩定性和精準性。機械臂由57步進電機驅動,通過聯軸器與MK21氣滑環旋轉運動件相連[3-4]。氣滑環上通過訂做的連接件與MHF2-12D型手指氣缸相連。在手指氣缸上安裝夾具,通過驅動手指氣缸實現對放置在固定位置魔方的抓取、固定。
圖1 機械臂三維設計
單只機械手由1個步進電機和1個平動氣缸組成,控制電磁閥開關,就可以控制氣缸的夾緊和放松,實現魔方的夾緊和松開;控制步進電機驅動器,調整步進電機細分數,就能精準控制步進電機旋轉一定角度,實現魔方的翻轉[5]。
機器人左臂手指氣缸打開,右臂氣缸夾緊并旋轉,可使得魔方繞右臂主軸旋轉,同理也可實現魔方繞左臂主軸的旋轉。2個機械臂相互配合可以完成魔方整體順(逆)時針轉任意角度,實現以兩機械手轉動魔方6個面。
設計如圖2所示的解魔方機器人控制系統框架,搭載Linux Ubuntu 16操作系統的工控機和U2801攝像頭構成上位機,通過USB攝像頭采集魔方圖像并識別色塊圖像,處理后在工控機中通過預定程序轉化為可執行的解魔方步驟,并將其發送至下位機主控芯片STM32F103ZET6。下位機主控芯片接收工控機發送的還原魔方的數據指令后,控制氣動執行系統完成供氣、夾緊、旋轉等還原動作[6],完成魔方還原操作。系統控制流程如圖3所示。機器人解魔方程序主要包括魔方識別程序、解魔方程序、上位機和下位機之間的數據通訊程序、機械臂動作[7]。
圖2 雙臂魔方機器人控制系統總體框架 圖3系統控制流程
采集魔方圖像的4個攝像頭,距離魔方24 cm,如圖4所示,攝像頭1、2分別固定于魔方正上方和正下方,攝像頭3、4固定于魔方側面方向,攝像頭1、2正對魔方的棱邊,拍攝圖片包含有魔方相鄰兩面[8-9]。采用透視變換與圖像拼接的方法,可把4個攝像頭拍攝的6個魔方表面圖片拼接為一張圖片。由于夾持魔方的機械手指遮擋魔方表面的部分色塊,需要旋轉魔方90°,再次拍攝魔方照片,才能實現魔方表面圖像的一次完整采集,圖像采集流程如圖5所示。
圖4 攝像頭與魔方位置
圖5 采集圖像流程
解魔方機器人的啟動鍵后,工控機中的上位機程序接收到開始指令,接通攝像頭,每隔20 ms采集、保存一次魔方圖像。保存攝像頭拍攝圖像后,下位機轉動魔方旋轉90°,并發送動作完成標志給上位機,然后上位機發出第二次采集魔方照片與保存指令[10]。攝像頭采集圖像,完成第二次圖像保存任務后,發出圖像保存完成標志給上位機程序,上位機調用程序進入圖像處理階段。
魔方表面的色塊顏色識別和自動追蹤色塊位置的程序,采用OpenCV3.4.0計算機視覺庫編寫。魔方與攝像頭之間位置固定不變,圖6所示的攝像頭視野中,魔方表面各個顏色塊所處的坐標位置不變。因此視覺系統直接讀取魔方表面圖像色塊中心點處10個像素點的像素值,然后取平均值,作為識別該色塊顏色的判定值[11]。
圖6 讀取像素區域
基于RGB模型識別魔方表面色塊顏色,無需格式轉換,調試過程中可以直觀觀察到各個色塊的顏色分量,但RGB模型區分顏色正確率相對較低。基于HSV模型識別魔方表面色塊的準確率高,但魔方表面圖像從RGB模型轉換到HSV模型需要1 200 ms,增加了整體運行時間。
普通光照環境下,采用RGB模型和HSV模型識別魔方表面色塊實驗各30次,結果表明,RGB模型成功識別色塊22次,正確率73.3%,HSV模型成功識別色塊29次,準確率96.7%。
若現場有強光直射或者其他顏色的雜光,采用RGB模型和HSV模型識別魔方表面色塊實驗各30次,結果表明,RGB模型成功識別色塊15次,正確率50%,HSV模型成功識別色塊28次,準確率93.3%。
因此,采用HSV模型識別魔方表面色塊顏色[11]。設k1=max(r,g,b)、k2=min(r,g,b),則RGB圖像與HSV圖像的轉換公式為:
聚類分析是在數據中發現數據對象之間的關系,將數據進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。
魔方表面有6種色塊顏色,同一色塊的不同像素點的顏色值比較相似,而不同色塊像素點的顏色值差距比較大,因此機器人視覺系統讀取同一色塊中的10個像素點的像素值,然后采用K-Means聚類算法識別魔方表面色塊的顏色[12]。
取K-Means算法的輸入樣本集D=54,簇的數目K=6,最大迭代次數100,輸出為簇劃分。具體步驟:首先,為每個聚類選擇一個初始聚類中心;然后,將樣本集按照最小距離原則分配到最鄰近聚類,使用每個聚類的樣本均值更新聚類中心;重復上述步驟,直到聚類中心不再發生變化,輸出最終的聚類中心和K個簇劃分。
魔方色塊識別流程如圖7所示。攝像頭采集魔方圖片時,采用偏振鏡濾除色塊反光,然后,存儲圖片到文件夾,將圖像從RGB顏色空間轉到HSV色彩空間,表1所示為不同閾值區分色塊顏色[7]。采用imread函數讀入圖像,進行同態濾波和降噪處理后,合并成一張包含魔方6個面的待處理圖,采用K-Means聚類算法,判斷圖像顏色的分類結果,是否滿足魔方角塊不同色、棱塊不同色的條件,如果滿足該條件,則魔方可解,則將魔方狀態信息轉換成用“URFLDB”字母表示的一串字符串,傳遞給后續解算程序。
圖7 魔方信息識別流程
表1 色塊顏色區分表
魔方由27個方塊組成,如圖8所示。每個方塊的1~3個面露在外面,露出1個面的方塊稱為中心方塊,露出2個面的方塊為邊方塊,露出3個面的方塊為角方塊。每個角方塊有8種位置、3個方向,每個邊方塊有12種位置、2個方向,中心方塊不轉動。
圖8 三階魔方結構
魔方的6個面分別被稱作U、D、R,L、F、B。其中前面為F,即front;右面為R,即right;上面為U,即up;后面為B,即back;左面為L,即left;下面為D,即down。由于每個面的擰動方式都有3種,即順時針90°,逆時針90°,旋轉180°,為描述一個擰動動作,還需加上角度。例如U表示向上面順時針轉動90°,U2表示順時針180°轉動,U′表示逆時針90°轉動。本設計中設黃色面為U,白色面為D,藍色面為F,綠色面為B,紅色面為L,橙色面為R。
機器人采用Two-Phase Algorithm算法解魔方,該算法又稱二階段算法,通過降低魔方的混亂程度,達到復原效果[8]。
如果打亂一個標準狀態的魔方而不用到R、R′、L、L′、F、F′、B、B′這些基本操作,那么只會得到魔方所有狀態的一個子集。這個子集被稱作:G1=(U、D、R2、L2、F2、B2)。在這個子集中,角塊或邊塊的朝向在一個特定的位置是不會改變的。而且中間層的4塊總被保持在該層內[10]。
第一階段,算法會尋找一個能將打亂的魔方轉成G1狀態的序列,即角塊和邊塊的朝向將會被限制到符G1,原本中間層的邊塊也會被轉到這一層。在這么一個抽象的空間內,一次移動僅僅是將一個坐標轉換成另一個坐標。G1內所有的狀態都有相同的坐標,這就是一階段算法的目標狀態。要找到這么一個目標狀態,程序使用一個帶有下界的啟發函數H1。該函數為每一個魔方狀態評估要達到目標狀態所需要的步數,利用Cube Explorer存儲的剪枝表,預先采用12步優化。
第二階段,算法將復原在子集G1內的魔方實例,僅僅使用G1規定的基本移動(U、D、R2、L2、F2、B2),將復原的8個角塊排列。這里的啟發函數H2需要估算達到目標狀態所需要的步驟。H2找到一個解后并不馬上停止,而是繼續搜尋更少的轉動步數,這是依靠在第一階段算法得到的次優解的基礎上執行第二階段算法。隨著第一階段序列的長度的增長,第二階段的步數就變短。如果第二階段的步數為0,則得到的解是最優的,算法便停止。
魔方識別程序首先將魔方狀態信息轉化為一串字符串,然后通過API接口將參變量s傳輸給solve函數,調用二階段算法,開始解算并得到還原步驟。例如當的魔方狀態信息為"BDFFUULRFRLRLRUBRDUDDBFBUFUL?DRFDBRLFLUFULDDRBULDBBRLFB",則得到的還原步驟為:U′、B′、D2、R2、D′、F′、D′、B2、L2、B2、R、U、B2、U2、L2、B2、L2、B2、U、R2、U。
工控機與STM32之間通過串口通訊方式實現數據通信,主要用于:(1)工控機與STM32電路板按攝像頭識別魔方表面的進程進行數據通信,手眼協調,快速完成魔方翻轉與表面識別;(2)工控機解算得到魔方還原步驟后,以字符串的形式發送給STM32板,控制機械臂按步驟還原魔方。
對解魔方機器人電機采用模糊PID控制算法[12],同時使用節流閥控制氣路氣體流量,調控手指氣缸夾緊力。
STM32控制機械臂按照上位機發送的魔方還原步驟,實時調整魔方位置并轉動魔方,逐步實現魔方還原??刂屏鞒倘鐖D9所示。魔方位置用左、右臂手指氣缸所對魔方面(UDLRFB)共同表示。左、右手指氣缸的開閉,手臂旋轉角度有相應參變量記錄,可減少不必要的操作步驟,優化還原動作。防止還原過程中出現左、右臂手指碰撞。
圖9 魔方還原流程
本文設計了一種魔方機器人,該機器人使用攝像頭模塊采集魔方色塊分布圖像,在工控機中操作系統通過圖像識別程序分析魔方色塊圖像信息,并利用二階段算法獲得還原魔方的步驟,之后將結果轉化為可執行指令并發送至STM32。STM32根據還原步驟控制氣動執行系統進行如翻轉、夾緊等所需的動作,最終將魔方還原到初始狀態。
根據設計搭建編程機器人進行魔方還原實驗,經實物搭建實驗,本文設計的魔方機器人在還原100次隨機打亂的三階魔方過程中,平均耗時19 s,最長不超過25 s,基本實現快速還原三階魔方的設計目的。