翟東麗,杜青松,程 偉,何兆豐
(1.廣東省機械研究所有限公司,廣州 510700;2.廣州華立學院,廣州 511325)
魔方作為一個智力開發訓練玩具在生活中廣泛被人們使用。魔方中最為常見的是三階魔方,其結構簡單但還原過程復雜。目前設計的常見魔方還原機器人有六臂旋轉型(如美國MIT設計的和德國Sub1Reloaded設計的)和底面翻滾型(如LEGO的EV3),然而前者直接將魔方的中心塊位置與電機軸剛性連接,每個電機都控制一個面,標準三階魔方的中心塊需要進行改造。然而這種形式的解魔方機器人破壞了魔方的完整性,而且魔方安裝到機器人上后不可拆卸,無法和人做互動[1]。后者機械結構穩定性差,解算成功率不高。因此綜合利用機械、電子、計算機等多學科知識交叉應用,設計一種高速、高成功率、可交互的解魔方機器人將會受到人們迫切的期待。
本魔方機器人系統采用了STM32f103處理器為平臺,承擔魔方還原控制功能和驅動電機轉動還原魔方的作用。上下位機互相通信轉換算法采用定長度數據包。設計自適應補光視覺系統獲取魔方各個面的圖像、然后進行圖像處理和顏色識別,圖像處理過程采用k-means聚類算法進行聚類與分割獲取魔方狀態,通過二階段算法運算后得到魔方還原路徑。采用sin函數曲線的1/4周期作為解魔方機器人機械臂驅動電機的加減速曲線,精確控制電機及末端執行器抓取魔方進行轉動,實現魔方還原功能。
本次設計的魔方還原機器人采用一種二臂二指型鎖臂環結構,機器人有兩個手臂,每個手臂有兩個自由度。一個是由步進電機驅動的手腕轉動自由度,另一個是由氣缸驅動的手指開合自由度。機器人結構整體采用鋁合金框架結構,連接處采用鑄鐵和碳纖維板。在手腕處,采用氣電滑環防止線路纏繞[2]。如圖1所示。控制系統中,下位機采用STM32f103控制板,負責與上位機通訊以及控制步進電機和氣缸。上位機程序采用C#編寫,負責與下位機進行串口通訊,以及統籌協調攝像頭處理程序和算法程序。控制算法上采用了Herbert Kociemba的Two-Phase-Algorithm算法,該算法又稱二階段算法[3],通過降低魔方的混亂程度,達到復原效果。魔方狀態圖像采集采用4個fpv攝像頭,分別固定于魔方上、下、左、右4個方向,圖像采集經emguCV濾波處理后,采用k-means聚類算法進行聚類與分割。

圖1 魔方機器人整體結構
上位機使用C#語言編程環境的Windows系統個人計算機,串口通訊采用了自帶的SerialPort控件,下位機使用STM32f103c8t6的硬件串口USART1。上下位機通訊的協議[4]如下。
上下位機互相通信的內容總共有3種:上位機發送第二次采集圖像指令;下位機發送第二次采集圖像完成指令;上位機發送動作序列指令。上位機發送第二次采集圖像指令和下位機發送第二次采集完成指令僅是一個觸發信號,不需要大量數據傳輸。因此數據包大小取決于上位機發送動作序列指令的大小。考慮到信息傳輸量小,信息傳輸時間對整體解魔方時間影響小,因此采用定長度數據包。
魔方機械臂動作采用步進電機來驅動。在正常工作狀態下,步進電機位移輸出與數字脈沖嚴格同步。在實際使用中,若步進電機在加速與減速過程中脈沖頻率變化不合理,步進電機會產生抖動現象,極大地降低了系統的穩定性。同時,若步進電機加速或者減速過猛,魔方會因轉動過程中受力不均勻而產生局部錯位,長期使用會導致魔方崩裂。因此,必須合理設置步進電機的加減速運行曲線,在保證運行穩定性的前提下盡可能提高速度。
考慮到梯形曲線的加減速過程不能光滑過渡,而S型曲線的加減速調參過程較為復雜,本設計采用sin函數曲線的1/4周期作為解魔方機器人機械臂驅動電機的加減速曲線[6]。圖2所示為魔方機器人機器臂驅動電機sin加速過程,用sin函數曲線對步進電機進行加速控制,設目標速度為A,可以通過控制脈沖數目來控制步進電機角位移。

圖2 魔方機器人執行電機加減速曲線
魔方狀態圖像采集采用4個fpv攝像頭,分別固定于魔方上、下、左、右4個方向,圖像采集經emguCV濾波處理后,采用k-means聚類算法進行聚類與分割[7-8]。采用透視變換與圖像拼接的方法,可把4個攝像頭拍攝的6個魔方表面圖片拼接為一張圖片。
2.3.1 顏色空間的坐標變換
視覺系統未標定前的圖像采集數據點是沿著(0,0,0)到(255,255,255)方向成帶狀分布的數據。而正常的同一類數據點,應該是在一個不太大的球體中均勻分布。因此一個顯然的解決辦法是將數據整體沿著向量(1,1,1)方向壓縮,直到帶狀分布變為球狀分布。
2.3.2 自適應補光系統設計
由于解魔方機器人主要的傳感設備為攝像頭,而視覺設備對于外界光照環境的敏感度非常大,因此一個好的視覺環境對于顏色識別極為重要。若魔方處于強光直射條件下,或者光源以魔方表面為鏡面反射到攝像頭上,則在視野中會出現局部高光[9]。高光現象對于顏色識別算法是致命的,一旦出現將會無法正確識別。
對于魔方上面的白色塊圖像,在暗色光照條件下,略微發藍,在一定程度上會影響視覺系統對魔方顏色的識別,如圖3所示。

圖3 暗色光照條件下魔方白色塊圖
為解決上述光照條件問題,魔方還原機器人的視覺系統采用自適應LED補光燈進行補光。通過脈寬調制信號(PWM)控制的可控亮度LED補光電路[11]如圖4所示,其中PWM信號由下位機STM32產生。

圖4 視覺系統LED補光電路
一個完整魔方還原計算求解過程總得來說分為兩大模塊,一個模塊是負責人機交互、統籌全過程的上位機主控程序,其邏輯流程[3]如圖5所示。另一模塊是各個流程環節的功能模塊,包括圖像采集、下位機、圖像處理、算法轉換等模塊。

圖5 魔方機器人主控程序流程
上下位機互相通信轉換算法采用定長度數據包,通過測試得出的動作序列中動作步驟數目平均值為75,取二倍余量,數據包的長度為150個無符號8位整型數。定義第1個數據為包頭,為固定值0XAA,定義最后一個數據為包尾,為固定值0XBB。中間148個無符號8位整型數為數據段。下面將逐個描述3種指令的數據段格式。若指令為上位機發送第二次采集圖像指令,則數據段148個字節據皆為0XFF;若指令為下位機發送第二次采集完成指令,則數據段148個字節據皆為0XEE;若指令為上位機發送動作序列指令,從數據包第2字節,即數據段第一字節開始,每一個字節都代表一個動作步驟,其余字節以0XBB填充[5]。

表1 上下位機互相通信協議內容
視覺系統自適應補光算法程序結構由4部分組成:上位機控制程序、下位機補光程序、聚類算法程序和圖像采集程序。上位機控制程序負責總體的統籌兼顧,下位機補光程序負責按照上位機控制程序的要求點亮不同亮度的LED,圖像采集程序負責采集圖像,聚類算法負責給出某一亮度下聚類可區分度[10]。
由于聚類可區分度越大,聚類效果越好。因此需要遍歷所有256個光照強度等級,找到使得區分度最大的光照強度。當機器人被搬動或者所處環境光照條件有較大變化時,調用自適應補光算法對各個補光燈的亮度重新調整。
根據以上軟硬件設計,制作安裝魔方還原機器人整體實物結構如圖6所示。通過編程程序測試機器人進行魔方還原實驗,本設計魔方還原機器人經歷20次將隨機打亂的三階魔方還原實驗中,平均耗時21 s。算法轉換采用的帶剪枝的深度搜索算法平均機械步驟78步,用時約300 ms。還原過程中Kociemba算法運行平均人工步驟20步,用時約800 ms。傳統的層先法雖然思想簡單,但是平均需要大約150步,步數稍微短一點的CFOP算法也要在100步左右。結果顯示本魔方還原機器人明顯優于其他結構和傳統算法魔方還原機器人。

圖6 魔方還原機器人整體實物
本魔方機器人系統采用了STM32f103處理器為平臺,上下位機采用定長度數據包進行通信,設計了自適應補光視覺系統獲取魔方各個面的圖像進行處理和識別,通過二階段算法運算后得到魔方還原路徑。采用加減速曲線精確控制步進電機及末端執行器抓取魔方進行轉動實現魔方還原功能。通過多次實驗驗證,本次設計的智能魔方還原機器人平均耗時21 s,可實現對任意打亂魔方狀態進行還原。還原過程深度搜索算法平均機械步驟78步,用時約300 ms。Kociemba算法運行平均人工步驟20步,用時約800 ms。體現了本設計智能魔方還原機器人良好的可靠性、快速性和交互性[12-13]。