魔方機械人大賽 魔方步驟轉換演算法

2021-09-10 06:34:07 字數 1969 閱讀 5956

在談論步驟轉換演算法之前,我們不妨討論一下現在一般的魔方面的表示方法:

在我們表示魔方面的時候,一般會先把魔方展開,這裡我採用cubeexplore的展開方式,在這種展開方式當中,面的錄入方式是按照下圖來錄入的;f表示白色,u表示藍色,r表示紅色,l表示橙色,d表示綠色,b表示白色;(應當注意這裡的lr顏色與一般的魔方相反,自己改過來,避免輸入之後無解)

錄入的時候參考:

在一般的魔方表示演算法中,大致先將魔方分為六個面,分別是up,down,right,left,back,front,六個面,分別用首字母udrlbf決定旋轉的是那個面,然後將魔方每個面的轉動用u`,u1,u2分別表示順時針轉90度,逆時針轉90度,順(逆)時針轉180度,有時候也會有中層旋轉的表示方法,但是由於機械人轉中層是非常划不來的,所以不考慮;

於是我們就可以用一串字串表示出魔方還原的解法。

但是,通過cube explore求解得到的魔方演算法運用到魔方機械人中,因為比賽的規則是:雙臂兩指或五指,所以需要將六個面的魔方求解演算法轉化到兩隻手還原魔方的機械步驟當中。我們團隊採用的是兩隻的方案,這裡我主要一下所要講的就是這種轉換演算法:

下面定義手指的動作:

lo__left hand open

l1__left thand 順時針90 

l2__left hand 逆時針90

l3__180度

ro r1 r2 r3為另外乙隻手

這樣,我們的演算法就是由魔方還原演算法到機械步驟的一種對映

首先這是乙個尋找最少機械步驟數解的問題,我們的目標是找到機械步驟最少的翻譯步驟

我們先考慮魔方旋轉完的末態:每當我們執行完由cubeexplore而來的乙個步驟的時候,我們的兩隻手一定是閉合的。因為只有兩隻手都閉合才能擰動魔方,由於我們裝了到導氣滑環,所以手指轉180度以後,與原始狀態是一致的。所以每當執行完乙個步驟之後一共有三種情況:左手歸位,右手不歸位;左右手都歸位;左手不歸位,右手歸為;三種情況;

於是我們再考慮末態魔方的狀態,乙個面被擰動過後魔方末態,被擰動要麼是左手,要麼是右手,可以歸位或者不歸位,魔方可以旋轉四下;

於是總共魔方和手合起來的末態有:2*4*2=16種

再考慮魔方的初態:當我們不考慮魔方處於手指上的狀態,單純考慮我們想要旋轉的面處於哪乙個位置的時候,魔方的位置有6種情況,可以旋轉90,-90,180三個角度,手指有三個狀態(如果初始狀態是閉合的,那麼在進行完一步之後下一步一定是閉合的);

於是組合起來的初態有6*3*3=54種;

有了這樣一種思考之後,我們就可以知道,對於每乙個魔方解法步驟,每一種初態,有16種末態,每乙個末態又對應16個下一部的末態,於是這個問題變成了乙個數的深度優先遍歷的問題;

整個演算法大致是這樣的:

檢查魔方的狀態,看要旋轉的面處於那個面,旋轉多少度,手指什麼狀態,確定是54種初態的哪一步;

可以分出16個末態;

在每乙個末態下巢狀作為初態繼續判斷是54種狀態的哪一種,遞迴,直到所有步驟都被翻譯。

以上演算法每個步驟16個分支,一般的魔方解法有20步,那就是16的二十次方,這個顯然是計算機無法接受的,需要減枝,只要略微思考就可以發現,當我們16種解法分出去以後,這16種解法的下一步的16種解法其實魔方和手的狀態是一致的,魔方和手完全一致,我們可以減去非時間最少的分支,像這樣,每一步事實上都只有16個分支在跑,計算機可以接受,結果也可以秒出。

世界機械人大賽 世界機械人大賽

世界機械人大賽自2015年起已成功舉辦了6屆,共吸引了全球20餘個國家15萬餘名選手參賽,被各大主流 廣泛讚譽為機械人界的 奧林匹克 是目前國內外影響廣泛的機械人領域官方專業賽事。通過多年的積澱成長,大賽已形成了以選拔賽 wrct 總決賽 wrcf 錦標賽 wrcc 構成的全新賽制,並圍繞科研類 技...

魔方機械人(二)顏色識別

今天,就讓我們來看看魔方的顏色識別是如何做到的。做影象處理的話我們可以用opencv 用到了顏色空間的轉換rgb轉hsv以及roi區域提取 全稱為open source computer vision library,直譯為 開源計算機視覺庫 我用的版本為3.0。先來說說我做顏色識別的思路 在介紹魔...

如何製作魔方機械人 00緒論

pps 這個硬體復原魔方的部分是寒假前完成的,剩餘的部分本想回校後再弄,結果因為疫情的原因 幸好當初留了足夠的過程性資料 只能給大家展示一下復原魔方的大體流程 其實只差了個串列埠通訊 ppps 有機會我會上傳到b站上。當初製作魔方機械人的時候走了許多的彎路,做完之後才發現,當初要是有個人能帶著我或是...