中國高校智能機器人---魔方機器人經驗帖

前述:這個項目從寒假放假開始做,在學校裏面待了七八天,把機械結構搭好,初始代碼有一個雛形,開學之後斷斷續續的總共做了一個月左右,最後結果比較悲情,結果上傳後,很遺憾大佬太多(或是比賽自身公允度也值得懷疑。。。。),但我們自己做的確實較菜,提交的視頻是雙臂運行了52S。最後是被淘汰的,無緣進入決賽。但對於個人來說,東西是做出快來了,我已無愧。

背景:老師推薦這個比賽的時候,我已經大三了,之前說過,不想再參加任何比賽了,比賽玩幾次還行,可以鍛鍊受壓能力,但是一直做,其實對於新東西學習很有時間限制,但是看見有魔方機器人的項目,就決定再做一次吧。原因我覺得有三個,其一:那段時間在學習python,樹莓派和opencv,就想做一個實際項目吧。其二:沒選擇其他的如格鬥,擦窗之類的,是覺得必須要有一個嚴格的“界限”,對於魔方來說,做出來就是做出來,必須要把魔方還原纔算做出來,但是擦窗,格鬥是沒有什麼硬性指標的[對於我自己來說,是想檢驗一下這三年有沒有能力真正的完成一件事情],其三:就是大一時間看見過別人的解魔方視頻,當時是頗爲震驚的,想自己來試試。

大體結構:

機械結構,採用最簡單的雙臂形式

 

控制上面考慮到要圖像處理,兩種解決方案,一種openmv[需要另行購買模塊],另一種opencv,我那時候剛在鹹魚上收購了一個樹莓派3B+,所以沒多想選擇了opencv,語言就選擇使用python[確實事半功倍的效果]

雙臂魔方機器人的難點:

這個你一定要重視,上面看完,你覺得:哦,似乎沒什麼難度哈。但許多東西是你做起來才發現問題的。

1:最大的問題,就是雙臂的機械結構,從圖上可以看到,我們使用的是標準鋁型材,搭了兩個45角,自以爲巧妙無比,但運行過程中,總會發生手臂碰到魔方的問題,因爲使用的是步進電機,只要一碰到魔方,步進電機就會失步,達不到位置,後面就全亂了,魔方夾子在某寶上面購買的,設計的頗爲讓人費力,後期用電磨不斷加工,只爲了讓舵機張到最大時候,旋轉時候夾子不會碰到魔方,但其實這裏也有兩種方案,一種自己3D打印[看自己工具情況吧],一種是不需要加工夾子,在夾子上面的滑軌上面加長的硬性塑料[受力不會彎曲,不然夾不住魔方],或者要是能搞到鐵片也好,再把夾子的抓手固定到塑料或鐵片上,可以加大舵機最大角度時候抓手之間的距離,確保夾子肯定不會打到魔方。

2:魔方每個面顏色識別處理,沒做的時候無非覺得只是,opencv腐蝕,hsv值比較一下就行了,太簡單化問題了。。。

實際問題總是要比理論麻煩,攝像頭受光照等等影響,我們直接用的樹莓派自帶的CSI,10幾塊錢,中午時候採集的圖像很清楚,顏色識別也幾乎全對,但是總存在不確定性,要知道一個錯,就沒有解法的。尤其紅色和橙色的H值是很接近的,總會造成誤判,這裏建議大家使用圖片中的標準魔方,顏色還是比較正確的,剛開始借舍友的這種魔方,紅色和橙色總是傻傻分不清。

其他:剩下的則是一些小問題了,比如抓手必須要貼上一些加大摩擦力的東西,我們使用的是海綿,效果還不錯[砂紙也使用過,對魔方不太好],還有一個特別的問腿,我們結構看起來夾子是絕對在一個面上的,但是轉動起來的時候[因爲我們不是採用的加薄板方案,所以有這個問題,否則略過即可],會偏,後來,隊友奇想,把一個手臂用手向一邊掰彎,竟然好了!!。。。

過程:

說一下過程吧,因爲想着要考研[成電等我!!],在上一年,便把keil之類等等全卸載了,電腦上只留了一個Arduino的編輯器,確實好用方便,寒假留校期間,沒有使用樹莓派[比較金貴,東西沒調好之前怕搞壞了沒使用,還有就是沒想好怎麼使用,電腦遠程又沒網,不捨得開流量。。。一開始想的是先用C寫,完了之後移植到python上,設置爲樹莓派開機自動啓動],這裏介紹一下魔方解決算法kociemba,在GitHub上面開源,需要研究源碼或是pip安裝的瞭解下,外人以爲魔方是一步一步邊走邊算的,其實是錯的,它根據各面信息在最開始便得到過程,剩下則是電機互相配合把它動作出來的問題了。

在校七八天內,等着買的鋁材料回來時候,在寫電機根據kociemba得出的結果之後的動作,大致想法是把結果字符串分離成一個個字符,再判斷字符情況,根據雙手目前顏色情況[顏色就在手中,不需要步進電機旋轉],與目標顏色相差多少度等等。。。

最後等架子搭起來的時候,因爲抓手無法夾着魔方[摩擦力不夠],又因爲要回家了,就模仿着,單步在Arduino上,根據串口反饋的結果,我自己雙手走了一遍,似乎沒錯誤就先這樣了

開學來的時候,考慮樹莓派用來處理圖像,Arduino負責電機動作[因爲有完美的servo庫和pwm輸出,只使用樹莓派,要自己配置電機驅動。。。],但這樣就要考慮兩個之間通信,IIC或者是串口,IIC只能發送字符 ,而我想要的是可以發送字符串[ok,yes之類],後來使用串口,但是兩個控制器的串口通信似乎存在不同步問題,這樣把指令給Arduino就要費很長時間。所以又放棄這個想法,還是使用單一樹莓吧,解決遠程[手機或者電腦連接pi],就直接上樹莓派了,這裏要說一下opencv安裝問題,因爲樹莓派安裝cv3的時候需要編譯[我在宿舍用了整整一天],後來不知怎麼崩了,無法調用,心血全廢了。。。。。所以這裏建議大家[務必]使用cv2,只需要pip一下,安裝也就40分鐘左右,對於顏色識別已是足夠,只在某些函數調用上面,cv2與cv3相比可能多一些參數。

使用pi的時候,因爲怕python加持,很多問題都簡單了,在Arduino上比如結果分離成字符的函數需要自己寫,在python上面有現成的,一句話的事情,結果也沒有移植當初Arduino上的代碼,因爲覺得寫的麻煩了,這裏有一個想法:算法是什麼?算法是節約空間和時間的,當沒有或者是可靠的算法的時候,放棄空間或許可以換來時間和代碼可靠性,想來魔方可能情況不多[左右手顏色組合情況],於是就做了一個python裏面的字典映射,每種情況對應一種動作,雖然空間臃腫了,但是效果不錯!

本來想的是進入決賽更新顏色識別偏,加上模型訓練或者是換攝像頭,遺憾止步了,五一開始,早上困的不行,沒有去圖書館,一直想更新下博客,趁這個機會補上,代碼等有空補上[發GitHub上吧。。],樹莓派沒在身邊

視頻裏最後結果截屏。。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章