翟東麗,杜青松,程 偉,何兆豐
(1.廣東省機(jī)械研究所有限公司,廣州 510700;2.廣州華立學(xué)院,廣州 511325)
魔方作為一個(gè)智力開發(fā)訓(xùn)練玩具在生活中廣泛被人們使用。魔方中最為常見的是三階魔方,其結(jié)構(gòu)簡單但還原過程復(fù)雜。目前設(shè)計(jì)的常見魔方還原機(jī)器人有六臂旋轉(zhuǎn)型(如美國MIT設(shè)計(jì)的和德國Sub1Reloaded設(shè)計(jì)的)和底面翻滾型(如LEGO的EV3),然而前者直接將魔方的中心塊位置與電機(jī)軸剛性連接,每個(gè)電機(jī)都控制一個(gè)面,標(biāo)準(zhǔn)三階魔方的中心塊需要進(jìn)行改造。然而這種形式的解魔方機(jī)器人破壞了魔方的完整性,而且魔方安裝到機(jī)器人上后不可拆卸,無法和人做互動(dòng)[1]。后者機(jī)械結(jié)構(gòu)穩(wěn)定性差,解算成功率不高。因此綜合利用機(jī)械、電子、計(jì)算機(jī)等多學(xué)科知識交叉應(yīng)用,設(shè)計(jì)一種高速、高成功率、可交互的解魔方機(jī)器人將會受到人們迫切的期待。
本魔方機(jī)器人系統(tǒng)采用了STM32f103處理器為平臺,承擔(dān)魔方還原控制功能和驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)還原魔方的作用。上下位機(jī)互相通信轉(zhuǎn)換算法采用定長度數(shù)據(jù)包。設(shè)計(jì)自適應(yīng)補(bǔ)光視覺系統(tǒng)獲取魔方各個(gè)面的圖像、然后進(jìn)行圖像處理和顏色識別,圖像處理過程采用k-means聚類算法進(jìn)行聚類與分割獲取魔方狀態(tài),通過二階段算法運(yùn)算后得到魔方還原路徑。采用sin函數(shù)曲線的1/4周期作為解魔方機(jī)器人機(jī)械臂驅(qū)動(dòng)電機(jī)的加減速曲線,精確控制電機(jī)及末端執(zhí)行器抓取魔方進(jìn)行轉(zhuǎn)動(dòng),實(shí)現(xiàn)魔方還原功能。
本次設(shè)計(jì)的魔方還原機(jī)器人采用一種二臂二指型鎖臂環(huán)結(jié)構(gòu),機(jī)器人有兩個(gè)手臂,每個(gè)手臂有兩個(gè)自由度。一個(gè)是由步進(jìn)電機(jī)驅(qū)動(dòng)的手腕轉(zhuǎn)動(dòng)自由度,另一個(gè)是由氣缸驅(qū)動(dòng)的手指開合自由度。機(jī)器人結(jié)構(gòu)整體采用鋁合金框架結(jié)構(gòu),連接處采用鑄鐵和碳纖維板。在手腕處,采用氣電滑環(huán)防止線路纏繞[2]。如圖1所示。控制系統(tǒng)中,下位機(jī)采用STM32f103控制板,負(fù)責(zé)與上位機(jī)通訊以及控制步進(jìn)電機(jī)和氣缸。上位機(jī)程序采用C#編寫,負(fù)責(zé)與下位機(jī)進(jìn)行串口通訊,以及統(tǒng)籌協(xié)調(diào)攝像頭處理程序和算法程序??刂扑惴ㄉ喜捎昧薍erbert Kociemba的Two-Phase-Algorithm算法,該算法又稱二階段算法[3],通過降低魔方的混亂程度,達(dá)到復(fù)原效果。魔方狀態(tài)圖像采集采用4個(gè)fpv攝像頭,分別固定于魔方上、下、左、右4個(gè)方向,圖像采集經(jīng)emguCV濾波處理后,采用k-means聚類算法進(jìn)行聚類與分割。
圖1 魔方機(jī)器人整體結(jié)構(gòu)
上位機(jī)使用C#語言編程環(huán)境的Windows系統(tǒng)個(gè)人計(jì)算機(jī),串口通訊采用了自帶的SerialPort控件,下位機(jī)使用STM32f103c8t6的硬件串口USART1。上下位機(jī)通訊的協(xié)議[4]如下。
上下位機(jī)互相通信的內(nèi)容總共有3種:上位機(jī)發(fā)送第二次采集圖像指令;下位機(jī)發(fā)送第二次采集圖像完成指令;上位機(jī)發(fā)送動(dòng)作序列指令。上位機(jī)發(fā)送第二次采集圖像指令和下位機(jī)發(fā)送第二次采集完成指令僅是一個(gè)觸發(fā)信號,不需要大量數(shù)據(jù)傳輸。因此數(shù)據(jù)包大小取決于上位機(jī)發(fā)送動(dòng)作序列指令的大小??紤]到信息傳輸量小,信息傳輸時(shí)間對整體解魔方時(shí)間影響小,因此采用定長度數(shù)據(jù)包。
魔方機(jī)械臂動(dòng)作采用步進(jìn)電機(jī)來驅(qū)動(dòng)。在正常工作狀態(tài)下,步進(jìn)電機(jī)位移輸出與數(shù)字脈沖嚴(yán)格同步。在實(shí)際使用中,若步進(jìn)電機(jī)在加速與減速過程中脈沖頻率變化不合理,步進(jìn)電機(jī)會產(chǎn)生抖動(dòng)現(xiàn)象,極大地降低了系統(tǒng)的穩(wěn)定性。同時(shí),若步進(jìn)電機(jī)加速或者減速過猛,魔方會因轉(zhuǎn)動(dòng)過程中受力不均勻而產(chǎn)生局部錯(cuò)位,長期使用會導(dǎo)致魔方崩裂。因此,必須合理設(shè)置步進(jìn)電機(jī)的加減速運(yùn)行曲線,在保證運(yùn)行穩(wěn)定性的前提下盡可能提高速度。
考慮到梯形曲線的加減速過程不能光滑過渡,而S型曲線的加減速調(diào)參過程較為復(fù)雜,本設(shè)計(jì)采用sin函數(shù)曲線的1/4周期作為解魔方機(jī)器人機(jī)械臂驅(qū)動(dòng)電機(jī)的加減速曲線[6]。圖2所示為魔方機(jī)器人機(jī)器臂驅(qū)動(dòng)電機(jī)sin加速過程,用sin函數(shù)曲線對步進(jìn)電機(jī)進(jìn)行加速控制,設(shè)目標(biāo)速度為A,可以通過控制脈沖數(shù)目來控制步進(jìn)電機(jī)角位移。
圖2 魔方機(jī)器人執(zhí)行電機(jī)加減速曲線
魔方狀態(tài)圖像采集采用4個(gè)fpv攝像頭,分別固定于魔方上、下、左、右4個(gè)方向,圖像采集經(jīng)emguCV濾波處理后,采用k-means聚類算法進(jìn)行聚類與分割[7-8]。采用透視變換與圖像拼接的方法,可把4個(gè)攝像頭拍攝的6個(gè)魔方表面圖片拼接為一張圖片。
2.3.1 顏色空間的坐標(biāo)變換
視覺系統(tǒng)未標(biāo)定前的圖像采集數(shù)據(jù)點(diǎn)是沿著(0,0,0)到(255,255,255)方向成帶狀分布的數(shù)據(jù)。而正常的同一類數(shù)據(jù)點(diǎn),應(yīng)該是在一個(gè)不太大的球體中均勻分布。因此一個(gè)顯然的解決辦法是將數(shù)據(jù)整體沿著向量(1,1,1)方向壓縮,直到帶狀分布變?yōu)榍驙罘植肌?/p>
2.3.2 自適應(yīng)補(bǔ)光系統(tǒng)設(shè)計(jì)
由于解魔方機(jī)器人主要的傳感設(shè)備為攝像頭,而視覺設(shè)備對于外界光照環(huán)境的敏感度非常大,因此一個(gè)好的視覺環(huán)境對于顏色識別極為重要。若魔方處于強(qiáng)光直射條件下,或者光源以魔方表面為鏡面反射到攝像頭上,則在視野中會出現(xiàn)局部高光[9]。高光現(xiàn)象對于顏色識別算法是致命的,一旦出現(xiàn)將會無法正確識別。
對于魔方上面的白色塊圖像,在暗色光照條件下,略微發(fā)藍(lán),在一定程度上會影響視覺系統(tǒng)對魔方顏色的識別,如圖3所示。
圖3 暗色光照條件下魔方白色塊圖
為解決上述光照條件問題,魔方還原機(jī)器人的視覺系統(tǒng)采用自適應(yīng)LED補(bǔ)光燈進(jìn)行補(bǔ)光。通過脈寬調(diào)制信號(PWM)控制的可控亮度LED補(bǔ)光電路[11]如圖4所示,其中PWM信號由下位機(jī)STM32產(chǎn)生。
圖4 視覺系統(tǒng)LED補(bǔ)光電路
一個(gè)完整魔方還原計(jì)算求解過程總得來說分為兩大模塊,一個(gè)模塊是負(fù)責(zé)人機(jī)交互、統(tǒng)籌全過程的上位機(jī)主控程序,其邏輯流程[3]如圖5所示。另一模塊是各個(gè)流程環(huán)節(jié)的功能模塊,包括圖像采集、下位機(jī)、圖像處理、算法轉(zhuǎn)換等模塊。
圖5 魔方機(jī)器人主控程序流程
上下位機(jī)互相通信轉(zhuǎn)換算法采用定長度數(shù)據(jù)包,通過測試得出的動(dòng)作序列中動(dòng)作步驟數(shù)目平均值為75,取二倍余量,數(shù)據(jù)包的長度為150個(gè)無符號8位整型數(shù)。定義第1個(gè)數(shù)據(jù)為包頭,為固定值0XAA,定義最后一個(gè)數(shù)據(jù)為包尾,為固定值0XBB。中間148個(gè)無符號8位整型數(shù)為數(shù)據(jù)段。下面將逐個(gè)描述3種指令的數(shù)據(jù)段格式。若指令為上位機(jī)發(fā)送第二次采集圖像指令,則數(shù)據(jù)段148個(gè)字節(jié)據(jù)皆為0XFF;若指令為下位機(jī)發(fā)送第二次采集完成指令,則數(shù)據(jù)段148個(gè)字節(jié)據(jù)皆為0XEE;若指令為上位機(jī)發(fā)送動(dòng)作序列指令,從數(shù)據(jù)包第2字節(jié),即數(shù)據(jù)段第一字節(jié)開始,每一個(gè)字節(jié)都代表一個(gè)動(dòng)作步驟,其余字節(jié)以0XBB填充[5]。
表1 上下位機(jī)互相通信協(xié)議內(nèi)容
視覺系統(tǒng)自適應(yīng)補(bǔ)光算法程序結(jié)構(gòu)由4部分組成:上位機(jī)控制程序、下位機(jī)補(bǔ)光程序、聚類算法程序和圖像采集程序。上位機(jī)控制程序負(fù)責(zé)總體的統(tǒng)籌兼顧,下位機(jī)補(bǔ)光程序負(fù)責(zé)按照上位機(jī)控制程序的要求點(diǎn)亮不同亮度的LED,圖像采集程序負(fù)責(zé)采集圖像,聚類算法負(fù)責(zé)給出某一亮度下聚類可區(qū)分度[10]。
由于聚類可區(qū)分度越大,聚類效果越好。因此需要遍歷所有256個(gè)光照強(qiáng)度等級,找到使得區(qū)分度最大的光照強(qiáng)度。當(dāng)機(jī)器人被搬動(dòng)或者所處環(huán)境光照條件有較大變化時(shí),調(diào)用自適應(yīng)補(bǔ)光算法對各個(gè)補(bǔ)光燈的亮度重新調(diào)整。
根據(jù)以上軟硬件設(shè)計(jì),制作安裝魔方還原機(jī)器人整體實(shí)物結(jié)構(gòu)如圖6所示。通過編程程序測試機(jī)器人進(jìn)行魔方還原實(shí)驗(yàn),本設(shè)計(jì)魔方還原機(jī)器人經(jīng)歷20次將隨機(jī)打亂的三階魔方還原實(shí)驗(yàn)中,平均耗時(shí)21 s。算法轉(zhuǎn)換采用的帶剪枝的深度搜索算法平均機(jī)械步驟78步,用時(shí)約300 ms。還原過程中Kociemba算法運(yùn)行平均人工步驟20步,用時(shí)約800 ms。傳統(tǒng)的層先法雖然思想簡單,但是平均需要大約150步,步數(shù)稍微短一點(diǎn)的CFOP算法也要在100步左右。結(jié)果顯示本魔方還原機(jī)器人明顯優(yōu)于其他結(jié)構(gòu)和傳統(tǒng)算法魔方還原機(jī)器人。
圖6 魔方還原機(jī)器人整體實(shí)物
本魔方機(jī)器人系統(tǒng)采用了STM32f103處理器為平臺,上下位機(jī)采用定長度數(shù)據(jù)包進(jìn)行通信,設(shè)計(jì)了自適應(yīng)補(bǔ)光視覺系統(tǒng)獲取魔方各個(gè)面的圖像進(jìn)行處理和識別,通過二階段算法運(yùn)算后得到魔方還原路徑。采用加減速曲線精確控制步進(jìn)電機(jī)及末端執(zhí)行器抓取魔方進(jìn)行轉(zhuǎn)動(dòng)實(shí)現(xiàn)魔方還原功能。通過多次實(shí)驗(yàn)驗(yàn)證,本次設(shè)計(jì)的智能魔方還原機(jī)器人平均耗時(shí)21 s,可實(shí)現(xiàn)對任意打亂魔方狀態(tài)進(jìn)行還原。還原過程深度搜索算法平均機(jī)械步驟78步,用時(shí)約300 ms。Kociemba算法運(yùn)行平均人工步驟20步,用時(shí)約800 ms。體現(xiàn)了本設(shè)計(jì)智能魔方還原機(jī)器人良好的可靠性、快速性和交互性[12-13]。