這個夏天肪获,在做 Google Summer of Code 的空擋馍悟,去了一趟美國柠衍,參加這個本專業(yè)的機器人比賽洋满。雖然現(xiàn)場出了很多意外,但是好歹也是鄙專業(yè)的國際頂尖賽事拧略,所以很有些收獲和經(jīng)驗芦岂,于是寫下來留給學(xué)弟學(xué)妹,期望會派上些用場垫蛆。
國外那些代表隊的優(yōu)勢之一就是他們往往是連續(xù)參賽隊伍禽最,而我們浙大基本上每一屆就會換上一輪,所以經(jīng)驗的傳承對我們還挺重要的袱饭。
對規(guī)則的理解
像這次川无,我們看到模型的平面圖的時候,以為那個樹的下方折起來之后會有個尖角虑乖,于是基于此來做機器視覺來做定位懦趋,但是實際上到實際賽場的時候,發(fā)現(xiàn)那邊居然樹模型的下部是不規(guī)則的疹味。直接影響我們的抓取定位仅叫,現(xiàn)場改了紅外方案,但是不是很準糙捺,也是慘得不行诫咱。與此相對的是,基本上洪灯,國外大多數(shù)隊伍都利用了墻壁信息(文檔中未提及坎缭,后在 FAQ 中出現(xiàn))。他們以此做激光測距或是直接用于限位签钩。他們反而是很依賴于這個東西在無尋跡線區(qū)域定位或者限位掏呼。有一個很有趣的設(shè)計就是,直接利用撞在墻壁上來做定位铅檩,保證自己抵達一個角落憎夷。當然他們的機器人也是夠結(jié)實(笑)。
其實官方是有留聯(lián)系方式的昧旨,如果一個東西將要成為你們方案的重要依賴項拾给,而它未在官方文檔里正式說明富拗,只是一個猜測項,那么強烈建議發(fā)郵件到官方確認這個事情鸣戴。
關(guān)于定位,其實雖然許多參賽者是研究生及以上粘拾,但是也可能是過來賣萌的窄锅。而且現(xiàn)場其實問題會有不少,所以如果應(yīng)試的話缰雇,拿基本分會是一個不錯的策略入偷,看看那些東西的分值高,把那些部分放在高優(yōu)先級的地方械哟,做好做穩(wěn)疏之,提高魯棒性。
還有一個事情就是 Tony 對比賽公平性的考慮暇咆。像這次我們因為沒能買到官方指定的顏料(國外的隊伍都是在美亞上買的)锋爪,然后用了國內(nèi)的近似顏料。沒想到到了國外爸业,那個顏色比我們看起來的暗得多其骄,然后我們的紅外傳感器就直接無法讀出那個顏色。我問 Tony 能不能把棕色換成別的顏色扯旷,然后扣掉我們的顏色識別分拯爽,這樣我們還有位置分和抓取分。但是 Tony 拒絕了钧忽。他說這個是有違公平性而且顏色是個考察點毯炮。所以,如果官方指定了顏料耸黑,那么盡可能使用它吧桃煎。
比賽的場地是參賽者提供的,但是是統(tǒng)一的崎坊。但是不能假設(shè)實際的場地是完美的备禀。實際上可能會有很多問題。(不過堪薩斯她們的場地真的很棒奈揍,雖然最后用了另一個大學(xué)的)曲尸。所以建議增強一些大媽的魯棒性。
團隊
我們組的話男翰,我主要做控制端代碼另患、信息展示端代碼、傳感器方案蛾绎。然后我想說只有一個程序員其實是不夠的(當然和我們開始的太晚也有關(guān)系)昆箕,熬夜都不能輪換好嘛鸦列。一個人完全撐不住。我都用了高效開發(fā)調(diào)試的 Node.JS 了好嘛鹏倘。那些評委聽說我們能用 REPL 無線單步調(diào)試機器人都有些心動好嘛薯嗤。扯遠了,建議至少上兩個人纤泵,然后對彼此的技術(shù)比較熟悉骆姐,各有個側(cè)重,但是調(diào)試的人一定要有兩個或以上捏题,please玻褪。
然后要有人負責硬件,有人負責設(shè)計公荧,有人負責文檔带射。當然這里的負責也只是主要負責,大家實際上應(yīng)該都是串著在干的循狰。
再扯一句窟社,建議合理整理東西,不要到處亂堆晤揣∏潘總是在找杜邦線和螺絲要哭了好嘛。
時間上建議越早越好昧识。我們做得太倉促了钠四,有的實現(xiàn)都來不及做好魯棒性和冗余度。不少地方最后都是靠得 Magic Value跪楞。若有時間應(yīng)盡可能避免缀去。
然后組件交流建議可以適當加強一些。我發(fā)現(xiàn)這次我們兩組的方案要結(jié)合會能互補得非常好甸祭。他們的抓取缕碎、顏色識別識別方案很優(yōu)秀。我們的運動控制池户、裝載卸載咏雌、軟件結(jié)構(gòu)也很不錯。要是合并的話校焦,說不定會意外的好呢赊抖。
我們的方案
我覺得我們的方案還是有不少亮點的。比如我們用了七電的移動電源寨典。這是一個可裝八節(jié)18650的移動電源(超長續(xù)航好嗎氛雪?加上大功率快充,愉快的不行)耸成”叮可調(diào)DC輸出電壓浴鸿,同時還有兩個 USB 輸出∠易罚可以用 USB2DC 拿到穩(wěn)定的 5V 輸出岳链,方便的不要不要的。
技術(shù)方案上我們用了 Pcduino(Arduino API + Powerful CPU)+ Node.js + HTML5 的方案劲件。這方便了我們做快速開發(fā)宠页。Node真的很方便。而且我們直接 ssh over wifi 也是很方便的寇仓。無線 REPL 超級方便的。底層的 Arduino 我封裝了一個庫出來烤宙,提供了 Arduino API遍烦、Servo API、基于 Pthread 的 SoftPWM 等躺枕。開源在了 Github 上服猪,歡迎使用:https://github.com/zenozeng/yapcduino.js。
然后我們是這樣的拐云,運算直接跑在板子上罢猪,板子上開個 Web Server,筆記本只是它的 client 而已叉瘩。這種架構(gòu)超級方便的膳帕。
裝載卸載我們用了一個轉(zhuǎn)送帶,用360°舵機控制薇缅,正轉(zhuǎn)收集危彩,逆轉(zhuǎn)卸載。
然后運動上泳桦,我們用了步進電機汤徽。然后基于 Steps 數(shù)來做運動控制。因為是用的自己封裝的 SoftPWM 所以能很方便的拿到我們的電機們走了多少步灸撰。
具體的代碼我們也開源在了 Github 上:https://github.com/zenozeng/ASABE-Robotics-Competition