鄧小穎,魏國梁,李志強,陳 磊
(揚州大學 信息工程學院,江蘇 揚州 225127)
隨著計算機技術和人工智能等領域的發展,魔方與智能機器人的結合,在科普領域中取得了突破性的進展。解魔方機器人是智能化機器人工作方式的一個全方面體現,其整體的架構和多種變型模式也是近幾年來的熱點。對其算法和結構的研究也成為探索機器人工作方式的重要研究內容,文獻[1]對識別魔方的視覺系統做了研究;文獻[2]則重點探討了魔方機器人的機械結構,但都沒有集成系統化。
本文設計的基于STC8雙臂魔方機器人,能夠自動識別任意打亂的三階魔方狀態,并快速還原,涉及視頻數據采集與色塊識別、魔方還原步驟解算和機械手控制系統等諸多軟硬件技術。最終可使魔方還原平均步數最優化,機器人能夠在較短時間內自動解算并還原魔方。該機器人設備成本低,普及性、趣味性強,且具有高度的擴展性。它也可以配合其他通信模塊及傳感器作為實踐研究的優選素材。
主要由硬件結構和軟件系統兩部分組成。硬件結構是由機械手控制系統和整體架構組成。機械手采用雙臂、雙指結構,每個機械臂由一個步進電機和一個數字舵機組成。通過步進電機實現魔方轉動,通過舵機實現手指開閉。其中,單片機控制機械部分實現魔方還原,電機通過接入的磁編碼器反饋信息給單片機,從而實現PID調節旋轉角度。同時,為方便使用,該系統自帶補光照明電路,采用LED光源。系統主要模塊示意如圖1所示。

圖1 魔方機器人主要模塊關系
軟件算法包括人機交互界面、魔方識別和解魔方算法3個模塊。其中,魔方的形狀和顏色識別采用對OpenMV編程的方式實現。解魔方的核心算法則是使用Kociemba算法,機器人通過OpenMV攝像頭獲取初始魔方的色塊分布,并將顏色數組發送給上位機進行解算,得到還原步驟發送給STC8單片機。同時人機交互界也在上位機實現,上位機與單片機采用串口通信。系統的運行流程如圖2所示。

圖2 魔方機器人系統運行流程
機器人采用2個可編程攝像頭OpenMV實現對54個色塊的顏色識別與獲取的邏輯算法。攝像頭位置為正交放置[3-5],每個攝像頭都垂直面,即拍攝相鄰的2個面。拍攝一次后,OpenMV通過高低電平發送信號給STC8單片機,使其控制機械臂翻轉魔方,完成另外2個面的拍攝,并將數據傳送給上位機。剩余的2個面同上述操作。每次拍攝時,OpenMV通過預先的色塊識別算法,將拍攝得到的18個面形成數組,通過串口發送給上位機。為了提高色塊的識別率,顏色識別采用色彩空間轉化,即將拍攝的圖片轉化至LAB色彩空間,并用補光器穩定現場光線。該算法的核心是閾值比較。這樣在補光器作用時,環境光線相對穩定,此時采樣魔方顏色,并設定6種顏色對應的LAB閾值區間,即可在色塊識別時進行顏色比較判斷。圖3(a)為OpenMV IDE工作平臺的幀緩沖區,呈現的形式為機器視覺,其中9個正方形代表了目前監測的9個ROI敏感區域,并通過方框顏色實時反應出識別的結果;圖片下方為LAB色彩空間的直方圖,可直觀地看出敏感區域的LAB分量值。圖3(b)為色塊采樣結果示意圖,正確的識別結果在圖中用加號表示。

圖3 魔方狀態識別示意
魔方的還原解法有很多種,如角先法、棱先法和層先法等[6],傳統的算法雖然易于理解,但是平均需要百步。為了實現降低步驟和易于機械臂的操作,本文采用Kociemba算法[7-8]完成還原步驟結算和優化。Kociemba算法又稱為二階段算法。它使用了搜索算法還原魔方,可在較短時間和較少次數內還原魔方。該算法是目前步數最少的算法。在上位機接收并完成54個數組處理后,調用算法函數,即可用Kociemba算法結算出執行步驟的字符串結果。該結果將被上位機通過串口發送給STC8單片機。
3.1.1 機械臂手指關節結構
指關節也就是由舵機控制的連接桿。在連接桿上固定有機械指和導軌,舵機的旋轉會使連接桿移動,在導軌的引導下,固定在連接桿上的機械指即可橫向開閉。為了避免出現堵轉,該設計在夾合指肚上貼有防滑海綿。圖4(a)和圖4 (b)分別為指關節的設計圖和實物圖。

圖4 機械指關節
3.1.2 機械臂腕關節結構
腕關節由連接指關節的步進電機組成。特殊之處在于該電機帶有磁編碼器和電滑環[9]。磁編碼器采用霍爾原理,利用磁性檢測方式,具備優異的抗沖擊和振動特點,性能可靠高、結構更簡單,比光電編碼器體積更小,價格更便宜。為了避免旋轉時發生繞線,干擾系統正常運作,該設計使用了電滑環。電滑環就是用來導電的滑環,在所有滑環系列中使用最廣泛,專用于在無限制連續旋轉時,傳輸功率電源、信號電源。
3.1.3 整體架構
雙臂結構并沒有采用傳統的直立式放置,而是采用正交水平式[10-11],這樣方便了攝像頭和補光器的安裝,同時該結構穩定,魔方不易翻滾脫落。每個攝像頭的后方安置補光器來平衡環境光線帶來的誤差。為了穩定環境光線,可在整體結構上套一擋光布。實物如圖5所示。

圖5 機械臂實物
單片機在接收到解魔方步驟的操作字符串后,將其分解成單條機械臂的操作指令,如定義L+為控制魔方左面逆時針旋轉90°。機械手的控制核心為STC8單片機,主要輸出為控制舵機旋轉的PWM波和控制步進電機旋轉的相位數組信號[12-13]。其中單片機通過連接TB6600驅動間接控制步進電機旋轉。
控制機械臂的算法按步驟大致分為以下4個部分。
3.2.1 接收并處理操作字符串
當上位機結算出解魔方步驟后,以字符串的形式通過串口發送給STC8單片機,單片機在接收到字符串后將字符串分解為兩兩一組的字符串并檢測是否含有“+”,若檢測到“+”號,即與前面一個步驟結合,實現逆時針指令。該部分將形成多條控制指令,順序執行。
3.2.2 控制電機旋轉與PID調節
第一步完成后,依據每條指令完成電機旋轉,每次旋轉完成后,執行機械指開合指令。其中TB6600驅動需要STC8輸出旋轉相位數組。可根據脈沖定義,提前設計好順時針旋轉90°,180°和逆時針旋轉90°的函數。
為了實現對電機旋轉位置檢測并反饋給單片機,機械臂的腕關節部分采用了磁編碼器,達到測量角位移的功能,實現旋轉誤差校正,提高旋轉精度,為下一步PID校正提供誤差數據[14-15]。磁電式編碼器采用磁電式設計,因磁性材料角度或者位移的變化會引起一定電阻或者電壓的變化,通過放大電路對變化量進行放大,再通過單片機處理后輸出脈沖信號或者模擬量信號,達到測量的目的。
3.2.3 控制舵機開閉
舵機開合指令比較單一,只需旋轉到固定角度即可,也就是說程序接收到電機旋轉完畢信號后單片機即可輸出固定的PWM波,使舵機旋轉,舵機的旋轉將帶動連接桿在導軌上移動,控制機械指的開閉。具體的,舵機的控制脈沖周期為20 ms,脈寬取值從0.5~2.5 ms,對應關系為:
α=-90°+(t/0.5-1)×45°,
式中,t為脈沖寬度;α為旋轉角度。
3.2.4 組合操作和復位機械臂
因為機械臂的相對位置固定,所以魔方的有些面無法被直接旋轉,因此需要2個機械臂之間配合,通過另一個機械臂旋轉一次后再完成對應步驟,此時需要考慮翻轉后的魔方帶來的數組順序變化,或者通過復位魔方達到避免魔方數組的動態變化。每次拍攝完成后的操作為2個機械臂依次順時針旋轉90°,可最為高效地拍攝54個色塊。
在解魔方的過程中,機械動作耗時最多,經多次隨機測試,平均時間在51 s左右,最高耗時不超過1 min,在同類設備中性能優異。
設計的解魔方機器人是在機械臂和機械手指的基礎上,以STC8為核心控制裝置,以可編程攝像頭為判斷裝置,同時配合負責算法處理的上位機,構成的一個完整系統。能夠自動識別并快速還原標準魔方。
對解魔方機器人的研究,體現了對機器人高精度性和高智能性的要求。這些技術為機器人的研制提供了技術基礎,特別是在對機器人的高精度環境識別、運動檢測和運動控制等方面有重要意義。
下一步改進可集中在2個方面:① 在成本和空間允許的前提下,采用氣泵驅動機械結構;② 針對雙機械臂,設計更為合理的操作算法步驟,以求達到更高的速度和精度。