鄧小穎,魏國(guó)梁,李志強(qiáng),陳 磊
(揚(yáng)州大學(xué) 信息工程學(xué)院,江蘇 揚(yáng)州 225127)
隨著計(jì)算機(jī)技術(shù)和人工智能等領(lǐng)域的發(fā)展,魔方與智能機(jī)器人的結(jié)合,在科普領(lǐng)域中取得了突破性的進(jìn)展。解魔方機(jī)器人是智能化機(jī)器人工作方式的一個(gè)全方面體現(xiàn),其整體的架構(gòu)和多種變型模式也是近幾年來(lái)的熱點(diǎn)。對(duì)其算法和結(jié)構(gòu)的研究也成為探索機(jī)器人工作方式的重要研究?jī)?nèi)容,文獻(xiàn)[1]對(duì)識(shí)別魔方的視覺系統(tǒng)做了研究;文獻(xiàn)[2]則重點(diǎn)探討了魔方機(jī)器人的機(jī)械結(jié)構(gòu),但都沒有集成系統(tǒng)化。
本文設(shè)計(jì)的基于STC8雙臂魔方機(jī)器人,能夠自動(dòng)識(shí)別任意打亂的三階魔方狀態(tài),并快速還原,涉及視頻數(shù)據(jù)采集與色塊識(shí)別、魔方還原步驟解算和機(jī)械手控制系統(tǒng)等諸多軟硬件技術(shù)。最終可使魔方還原平均步數(shù)最優(yōu)化,機(jī)器人能夠在較短時(shí)間內(nèi)自動(dòng)解算并還原魔方。該機(jī)器人設(shè)備成本低,普及性、趣味性強(qiáng),且具有高度的擴(kuò)展性。它也可以配合其他通信模塊及傳感器作為實(shí)踐研究的優(yōu)選素材。
主要由硬件結(jié)構(gòu)和軟件系統(tǒng)兩部分組成。硬件結(jié)構(gòu)是由機(jī)械手控制系統(tǒng)和整體架構(gòu)組成。機(jī)械手采用雙臂、雙指結(jié)構(gòu),每個(gè)機(jī)械臂由一個(gè)步進(jìn)電機(jī)和一個(gè)數(shù)字舵機(jī)組成。通過(guò)步進(jìn)電機(jī)實(shí)現(xiàn)魔方轉(zhuǎn)動(dòng),通過(guò)舵機(jī)實(shí)現(xiàn)手指開閉。其中,單片機(jī)控制機(jī)械部分實(shí)現(xiàn)魔方還原,電機(jī)通過(guò)接入的磁編碼器反饋信息給單片機(jī),從而實(shí)現(xiàn)PID調(diào)節(jié)旋轉(zhuǎn)角度。同時(shí),為方便使用,該系統(tǒng)自帶補(bǔ)光照明電路,采用LED光源。系統(tǒng)主要模塊示意如圖1所示。
圖1 魔方機(jī)器人主要模塊關(guān)系
軟件算法包括人機(jī)交互界面、魔方識(shí)別和解魔方算法3個(gè)模塊。其中,魔方的形狀和顏色識(shí)別采用對(duì)OpenMV編程的方式實(shí)現(xiàn)。解魔方的核心算法則是使用Kociemba算法,機(jī)器人通過(guò)OpenMV攝像頭獲取初始魔方的色塊分布,并將顏色數(shù)組發(fā)送給上位機(jī)進(jìn)行解算,得到還原步驟發(fā)送給STC8單片機(jī)。同時(shí)人機(jī)交互界也在上位機(jī)實(shí)現(xiàn),上位機(jī)與單片機(jī)采用串口通信。系統(tǒng)的運(yùn)行流程如圖2所示。
圖2 魔方機(jī)器人系統(tǒng)運(yùn)行流程
機(jī)器人采用2個(gè)可編程攝像頭OpenMV實(shí)現(xiàn)對(duì)54個(gè)色塊的顏色識(shí)別與獲取的邏輯算法。攝像頭位置為正交放置[3-5],每個(gè)攝像頭都垂直面,即拍攝相鄰的2個(gè)面。拍攝一次后,OpenMV通過(guò)高低電平發(fā)送信號(hào)給STC8單片機(jī),使其控制機(jī)械臂翻轉(zhuǎn)魔方,完成另外2個(gè)面的拍攝,并將數(shù)據(jù)傳送給上位機(jī)。剩余的2個(gè)面同上述操作。每次拍攝時(shí),OpenMV通過(guò)預(yù)先的色塊識(shí)別算法,將拍攝得到的18個(gè)面形成數(shù)組,通過(guò)串口發(fā)送給上位機(jī)。為了提高色塊的識(shí)別率,顏色識(shí)別采用色彩空間轉(zhuǎn)化,即將拍攝的圖片轉(zhuǎn)化至LAB色彩空間,并用補(bǔ)光器穩(wěn)定現(xiàn)場(chǎng)光線。該算法的核心是閾值比較。這樣在補(bǔ)光器作用時(shí),環(huán)境光線相對(duì)穩(wěn)定,此時(shí)采樣魔方顏色,并設(shè)定6種顏色對(duì)應(yīng)的LAB閾值區(qū)間,即可在色塊識(shí)別時(shí)進(jìn)行顏色比較判斷。圖3(a)為OpenMV IDE工作平臺(tái)的幀緩沖區(qū),呈現(xiàn)的形式為機(jī)器視覺,其中9個(gè)正方形代表了目前監(jiān)測(cè)的9個(gè)ROI敏感區(qū)域,并通過(guò)方框顏色實(shí)時(shí)反應(yīng)出識(shí)別的結(jié)果;圖片下方為L(zhǎng)AB色彩空間的直方圖,可直觀地看出敏感區(qū)域的LAB分量值。圖3(b)為色塊采樣結(jié)果示意圖,正確的識(shí)別結(jié)果在圖中用加號(hào)表示。
圖3 魔方狀態(tài)識(shí)別示意
魔方的還原解法有很多種,如角先法、棱先法和層先法等[6],傳統(tǒng)的算法雖然易于理解,但是平均需要百步。為了實(shí)現(xiàn)降低步驟和易于機(jī)械臂的操作,本文采用Kociemba算法[7-8]完成還原步驟結(jié)算和優(yōu)化。Kociemba算法又稱為二階段算法。它使用了搜索算法還原魔方,可在較短時(shí)間和較少次數(shù)內(nèi)還原魔方。該算法是目前步數(shù)最少的算法。在上位機(jī)接收并完成54個(gè)數(shù)組處理后,調(diào)用算法函數(shù),即可用Kociemba算法結(jié)算出執(zhí)行步驟的字符串結(jié)果。該結(jié)果將被上位機(jī)通過(guò)串口發(fā)送給STC8單片機(jī)。
3.1.1 機(jī)械臂手指關(guān)節(jié)結(jié)構(gòu)
指關(guān)節(jié)也就是由舵機(jī)控制的連接桿。在連接桿上固定有機(jī)械指和導(dǎo)軌,舵機(jī)的旋轉(zhuǎn)會(huì)使連接桿移動(dòng),在導(dǎo)軌的引導(dǎo)下,固定在連接桿上的機(jī)械指即可橫向開閉。為了避免出現(xiàn)堵轉(zhuǎn),該設(shè)計(jì)在夾合指肚上貼有防滑海綿。圖4(a)和圖4 (b)分別為指關(guān)節(jié)的設(shè)計(jì)圖和實(shí)物圖。
圖4 機(jī)械指關(guān)節(jié)
3.1.2 機(jī)械臂腕關(guān)節(jié)結(jié)構(gòu)
腕關(guān)節(jié)由連接指關(guān)節(jié)的步進(jìn)電機(jī)組成。特殊之處在于該電機(jī)帶有磁編碼器和電滑環(huán)[9]。磁編碼器采用霍爾原理,利用磁性檢測(cè)方式,具備優(yōu)異的抗沖擊和振動(dòng)特點(diǎn),性能可靠高、結(jié)構(gòu)更簡(jiǎn)單,比光電編碼器體積更小,價(jià)格更便宜。為了避免旋轉(zhuǎn)時(shí)發(fā)生繞線,干擾系統(tǒng)正常運(yùn)作,該設(shè)計(jì)使用了電滑環(huán)。電滑環(huán)就是用來(lái)導(dǎo)電的滑環(huán),在所有滑環(huán)系列中使用最廣泛,專用于在無(wú)限制連續(xù)旋轉(zhuǎn)時(shí),傳輸功率電源、信號(hào)電源。
3.1.3 整體架構(gòu)
雙臂結(jié)構(gòu)并沒有采用傳統(tǒng)的直立式放置,而是采用正交水平式[10-11],這樣方便了攝像頭和補(bǔ)光器的安裝,同時(shí)該結(jié)構(gòu)穩(wěn)定,魔方不易翻滾脫落。每個(gè)攝像頭的后方安置補(bǔ)光器來(lái)平衡環(huán)境光線帶來(lái)的誤差。為了穩(wěn)定環(huán)境光線,可在整體結(jié)構(gòu)上套一擋光布。實(shí)物如圖5所示。
圖5 機(jī)械臂實(shí)物
單片機(jī)在接收到解魔方步驟的操作字符串后,將其分解成單條機(jī)械臂的操作指令,如定義L+為控制魔方左面逆時(shí)針旋轉(zhuǎn)90°。機(jī)械手的控制核心為STC8單片機(jī),主要輸出為控制舵機(jī)旋轉(zhuǎn)的PWM波和控制步進(jìn)電機(jī)旋轉(zhuǎn)的相位數(shù)組信號(hào)[12-13]。其中單片機(jī)通過(guò)連接TB6600驅(qū)動(dòng)間接控制步進(jìn)電機(jī)旋轉(zhuǎn)。
控制機(jī)械臂的算法按步驟大致分為以下4個(gè)部分。
3.2.1 接收并處理操作字符串
當(dāng)上位機(jī)結(jié)算出解魔方步驟后,以字符串的形式通過(guò)串口發(fā)送給STC8單片機(jī),單片機(jī)在接收到字符串后將字符串分解為兩兩一組的字符串并檢測(cè)是否含有“+”,若檢測(cè)到“+”號(hào),即與前面一個(gè)步驟結(jié)合,實(shí)現(xiàn)逆時(shí)針指令。該部分將形成多條控制指令,順序執(zhí)行。
3.2.2 控制電機(jī)旋轉(zhuǎn)與PID調(diào)節(jié)
第一步完成后,依據(jù)每條指令完成電機(jī)旋轉(zhuǎn),每次旋轉(zhuǎn)完成后,執(zhí)行機(jī)械指開合指令。其中TB6600驅(qū)動(dòng)需要STC8輸出旋轉(zhuǎn)相位數(shù)組??筛鶕?jù)脈沖定義,提前設(shè)計(jì)好順時(shí)針旋轉(zhuǎn)90°,180°和逆時(shí)針旋轉(zhuǎn)90°的函數(shù)。
為了實(shí)現(xiàn)對(duì)電機(jī)旋轉(zhuǎn)位置檢測(cè)并反饋給單片機(jī),機(jī)械臂的腕關(guān)節(jié)部分采用了磁編碼器,達(dá)到測(cè)量角位移的功能,實(shí)現(xiàn)旋轉(zhuǎn)誤差校正,提高旋轉(zhuǎn)精度,為下一步PID校正提供誤差數(shù)據(jù)[14-15]。磁電式編碼器采用磁電式設(shè)計(jì),因磁性材料角度或者位移的變化會(huì)引起一定電阻或者電壓的變化,通過(guò)放大電路對(duì)變化量進(jìn)行放大,再通過(guò)單片機(jī)處理后輸出脈沖信號(hào)或者模擬量信號(hào),達(dá)到測(cè)量的目的。
3.2.3 控制舵機(jī)開閉
舵機(jī)開合指令比較單一,只需旋轉(zhuǎn)到固定角度即可,也就是說(shuō)程序接收到電機(jī)旋轉(zhuǎn)完畢信號(hào)后單片機(jī)即可輸出固定的PWM波,使舵機(jī)旋轉(zhuǎn),舵機(jī)的旋轉(zhuǎn)將帶動(dòng)連接桿在導(dǎo)軌上移動(dòng),控制機(jī)械指的開閉。具體的,舵機(jī)的控制脈沖周期為20 ms,脈寬取值從0.5~2.5 ms,對(duì)應(yīng)關(guān)系為:
α=-90°+(t/0.5-1)×45°,
式中,t為脈沖寬度;α為旋轉(zhuǎn)角度。
3.2.4 組合操作和復(fù)位機(jī)械臂
因?yàn)闄C(jī)械臂的相對(duì)位置固定,所以魔方的有些面無(wú)法被直接旋轉(zhuǎn),因此需要2個(gè)機(jī)械臂之間配合,通過(guò)另一個(gè)機(jī)械臂旋轉(zhuǎn)一次后再完成對(duì)應(yīng)步驟,此時(shí)需要考慮翻轉(zhuǎn)后的魔方帶來(lái)的數(shù)組順序變化,或者通過(guò)復(fù)位魔方達(dá)到避免魔方數(shù)組的動(dòng)態(tài)變化。每次拍攝完成后的操作為2個(gè)機(jī)械臂依次順時(shí)針旋轉(zhuǎn)90°,可最為高效地拍攝54個(gè)色塊。
在解魔方的過(guò)程中,機(jī)械動(dòng)作耗時(shí)最多,經(jīng)多次隨機(jī)測(cè)試,平均時(shí)間在51 s左右,最高耗時(shí)不超過(guò)1 min,在同類設(shè)備中性能優(yōu)異。
設(shè)計(jì)的解魔方機(jī)器人是在機(jī)械臂和機(jī)械手指的基礎(chǔ)上,以STC8為核心控制裝置,以可編程攝像頭為判斷裝置,同時(shí)配合負(fù)責(zé)算法處理的上位機(jī),構(gòu)成的一個(gè)完整系統(tǒng)。能夠自動(dòng)識(shí)別并快速還原標(biāo)準(zhǔn)魔方。
對(duì)解魔方機(jī)器人的研究,體現(xiàn)了對(duì)機(jī)器人高精度性和高智能性的要求。這些技術(shù)為機(jī)器人的研制提供了技術(shù)基礎(chǔ),特別是在對(duì)機(jī)器人的高精度環(huán)境識(shí)別、運(yùn)動(dòng)檢測(cè)和運(yùn)動(dòng)控制等方面有重要意義。
下一步改進(jìn)可集中在2個(gè)方面:① 在成本和空間允許的前提下,采用氣泵驅(qū)動(dòng)機(jī)械結(jié)構(gòu);② 針對(duì)雙機(jī)械臂,設(shè)計(jì)更為合理的操作算法步驟,以求達(dá)到更高的速度和精度。