如何製作一個機器人?
本人大一新生,想知道如何學習製作一個機器人,需求的功能很簡單,有小組協作,只有初步的編程與電子基礎,有什麼可行的辦法?
等這個問題好久了,趕緊強答一波。
先上視頻。
這是我和大腿同學@黯倦魔女(以下簡稱腿哥)大三暑假開始製作的一個機器人,屬於Ballbot家族,其運動方式用爹媽的話來說就是獅子踩球,或者可以理解成獨輪平衡車。Ballbot的始祖是Ralph Hollis教授的CMU Ballbot, 大概長這樣(圖片來自 Ballbot - Wikipedia):
最初的念頭源於某個下午茶後,我和腿哥說起暑假漫漫該如何是好,不如找點樂子造個機器人玩玩。想起之前在IEEE Spectrum上看到的A Robot That Balances on a Ball,呆萌又順從,大概長這樣(圖片來自 Ballbot - Wikipedia):
便一拍大腿,決定造個這個,代號球波(Qiubot)。。。
接下來回到正題,如何製作一個機器人(球波)。
第0步:找一個金主。(壕們可忽略)
為其重要性,這一步列在最前,因為財力往往決定了製作體驗和機器人的性能。但這不一定要最先做,只是需要keep in mind,機器人是個燒錢貨,一般造價不菲且十分容易超預算。對於在讀的學生來說,最划算的當然是學校買單,既能學到東西又無需降低生活質量,更重要的是可以不用在想法或性能上妥協,零件可挑最貴的買(逃
具體操作方式因人而異,可以參加學校的機器人比賽,社團或者加入實驗室。剛開始的時候以上幾點對我們都不適用,於是我和腿哥只能自掏腰包,各出一半。一開始我們小心翼翼,零件都挑便宜的買,多少耽誤了些進度。等到球波頗具雛形後,我們向學院申請資助,提出造好後可以在學校每年一度的開放日上展示。老師們很開心,表示可提供包養並予以鼓勵,敞開膀子干吧少年!
這裡給個參考,這是被包養前我們在第一版球波上的花費,總計2000多人民幣,雖然不算多,但也將近一個月的伙食。。
獲得贊助後,買東西都經學校下單,我們便沒再統計花費。沒有財務之憂後我們的消費速度直線上升,後來買四個金屬萬向輪的價格就已經超過了這個數,當然我們的進度也大大加快,花錢畢竟能省時間。
算上不少花在試錯上的錢,粗略估計球波總造價在一萬人民幣左右。這筆錢對大部分學生黨來說還是值得心疼的,但對財大氣粗的某港校就不值一提了。
技能習得:淘寶上砍價的能力和一開始就要有燒別人錢的心態
第1步:建模及製圖。(機器人構造簡單的可略過)
鑒於我和腿哥都是CS出身,沒任何機械背景,在直接上手之前我們決定還是先規劃一下。本想用經典的SolidWorks畫圖,無奈我們都是mac用戶也沒有財力支持正版,於是選擇了Autodesk的Fusion 360。後來發現其功能強大不輸Solidworks,且學生免費,支持水果,在這裡強烈安利一波。
點亮了一些基本的製圖技能後發現想像力是最大的限制因素。沒學過機械設計,就自己腦補各零件應該有的樣子。後來發現其實一開始畫錯(丑)並不是問題,重要的是之後不斷迭代不斷改進。
折騰了一個下午第一版的球波設計圖誕生了,大概長這樣(Ballbot實際上三個輪子足夠平衡,為了後面方便寫程序就用了四輪):
加材料渲染之後長這樣:
我之前在robocon隊里呆過,跟裡面大觸們的圖比起來固然是個渣,然而它在兩個純碼農的眼裡簡直騷氣衝天。
技能習得:CAD製圖和基本的機械設計
第2步:組裝機械部分
終於到了hardcore的部分,手指上的傷疤似乎還在隱隱作痛。
從最簡單的做起,第一步是球波的支撐板,也就是上圖圓形透明的那塊板。我們採用常見亞克力板,買回來後厚著臉皮找機械系的教授借用他們的激光切割機。支撐板get。
第二步,支撐板和電機的連接部分。這個沒有現成的部件,我們決定使用3D列印。實驗室有台壞掉的3D印表機,一直沒人用。於是我們花了一個晚上修好了3D印表機,花了一個晚上調試然後再花一晚上列印。連接部件get。大概長這樣:
起初我們設計的時候只考慮其功能,結果因為3D印表機精度不錯加上這玩意設計得太尖銳,安裝的時候手指沒少被割傷,後來學乖了邊角都得加光滑過度。然後因為列印材料的熱脹冷縮及印表機的精度問題,打出來的零件尺寸跟設計圖會有誤差,一開始計算尺寸的時候就得把這個考慮進去。還有各種各樣的問題,總而言之硬體都是坑。。。
技能習得:3D印表機的維修調試及花式擰螺絲
第3步:搭建電路部分
終於到了更hardcore的部分,看著照片彷彿還能聞到燒焦的味道。
在把電機安裝到支撐板上之前,需要確認電機能按預想地運轉。我們使用樹莓派(Raspberry pi)作為主控,用gpio接四個電機驅動板,每個驅動板接一個步進電機。選用步進電機是因為它扭矩比較大。電路接好後大概長這樣:
一通電,電機就歡快地轉了起來。我和腿哥正準備彈冠相慶,電機就越轉越慢最後完全停下來了,空氣中瀰漫著一股塑料燒焦的味道。
一陣緊鑼密鼓的調試之後發現因為電流太大,L298N電機驅動板激發了過熱保護。而且電線載流量太小,這裡一個步進電機就是1.5A,4個就是6A,而有些電路用的還是彩虹(杜邦)線。。。naive了。。。
一陣緊鑼密鼓的調試之後發現L298N就是個坑貨,我們決定換上一般3D印表機使用的A4988步進電機驅動板。媽媽再也不用擔心我宕機了。
換了線換了板後繼續試,電機又歡快的轉了起來。
於是我們把電機安裝到支撐板上
再加上IMU,用感測器的姿態控制電機的轉速和方向。
看上去就只差把球波倒過來調個PID了!!
然而還是太naive。我們發現電機轉得並不順滑,時不時會跳步或者停頓。一陣緊鑼密鼓的調試之後發現是因為電機控制代碼寫得不夠實時,用來控制電機的PWM頻率不夠穩定。改進了代碼之後情況有所好轉,然而問題還是存在。又一陣緊鑼密鼓的調試之後發現問題的關鍵在於實時的代碼跑在一個非實時的操作系統之下,整個系統就還是非實時的。。。於是乾脆把控制電機的代碼放在Arduino上,樹莓派只處理IMU的數據,二者用串口通信。雖然這樣也還是不能保證實時性,但效果比之前好多了。
技能習得:步進電機的使用及硬體花式debug法
第4步:寫控制代碼
這一步是我們的老本行嘿嘿。。。然而這是一個flag,回過頭來看這一步花的時間最多。
為搭建測試環境,我們拆了實驗室的一張桌子,這樣便獲得了一個完美的支架:
為了不用盲調PID,我們用rosserial接上ROS,再用rqt_plot畫出roll和pitch角度的實時曲線,大概長這樣:
PID調一調,球波居然真的搖搖晃晃站了起來!
然而堅持不了多久就會倒下去,怎麼調PID都沒有用。一陣緊鑼密鼓的調試之後並沒有解決辦法。
這樣過了一段有事沒事調PID的日子,快要絕望的時候,突然想起可以請教一下Masaaki Kumagai教授,就是前面提到的A Robot That Balances on a Ball的主人。於是抱著試一試的心態給教授發了郵件。沒想到教授秒回,並給出了許多建設性意見。
嗯,看來這種搖搖晃晃站不穩的情形教授也遇到過,獲得不少心理安慰。接下來需要解決問題。一是教授提到的backlash,我們一陣緊鑼密鼓的調試之後發現萬向輪輪面與球的接觸存在不少間隙,會導致一些起伏,於是決定換上輪面更加完整的全鋁合金萬向輪,大概長這樣
球波的顏值瞬間提高了不少(800軟妹幣一個的代價。。。)。
然而,換上之後問題更嚴重了。一是輪子直徑增大導致電機提供的扭力不再夠用。二是金屬的輪子和光滑的保齡球之間摩擦太小。最終結果就是backlash更加嚴重。
解決方案有二,一是換扭力大的電機(為此重新設計了銜接部分,也更換了驅動板),二是給保齡球加一層塑膠膜(汽車輪轂噴膜)。換上之後顏(cheng)值(ben)再漲二十百分點。
為節省空間把驅動板外殼給拆了
然後是提高控制頻率。我們直接擯棄了樹莓派(不實時的都是辣雞。。)換上了Arduino Mega,用頻率穩定的interrupt機制輸出PWM控制電機。
除此之外,還為IMU設計了一個減震裝置(又是一條血路。。。)以減少雜訊,雖然後來發現不是很有必要。
升級之後長這樣,小伙簡直帥氣逼人:
這次在直接上手調PID之前我們吸取了教訓(這玩意太重,每次扶著調完整個手臂都在抖),打算先測試一下整個系統work不work。
於是我們用第一版球波剩下的零件隨手搭了一個二輪平衡車來練習調PID。。。
加個遙控
然後把電池整合到車上
加個蓋就可以賣了。。咳咳。。。扯遠了
回到球波,把所有東西都整合到一起,吹一口仙氣,就可以出爐了!
這樣,一個機器人(球波)就製作好了。
技能習得:敢於迭代,敢於推倒重來(尤其是硬體)的大無畏精神
至於你問我這玩意花這麼多時間精力搞出來有什麼用嘛(被問一萬次了)。。。
沒事的時候可以跟小夥伴練習傳接球(波)
(感謝 @龏秂犚 同學的出鏡)
然後可以帶去參加科技展,逗逗小朋友。
最後還可以給它搭建個網站:qiubot.com 就可以昭告世人(給你捐錢)啦!
後續:拜訪祖師爺
來到CMU後有幸拜訪了Ralph Hollis教授,一償夙願。
他們實驗室還有個用電磁驅動輪子(球)的Ballbot,直接省去了電機,整個機器人就只有一個球在底下自己動,可謂腦洞不小。除此之外這位白髮蒼蒼的老爺爺還有一車跟電磁有關的黑科技,鑒於他有商業合作就不放上來了。最後一臉粉絲相地和CMU Ballbot同框一張(教授太高真不是我腿短。。)
後記:製作球波前後近半年有餘,從大三暑假到大四下學期。其間也忙著別的比賽,上課,畢業設計和申請學校,中途一度擱置。申請結束後總算有時間了卻這樁心事。最後的球波仍有很多可改進之處,但作為一條CS狗從硬體的坑裡拉扯出這樣一個機器人我要給自己頒發一朵小紅花。
造過球波後,越發認為自己搭建一個機器人是學習Robotics的最佳方式,從機械到電子到軟體,只有自己踏過坑才能深刻地理解。
回到本問題,題主其實不用擔心知識儲備不夠,只需要敢於跳坑,一個一個解決遇到的問題,自然而然就會積累下寶貴的實踐經驗和各種亂七八糟的知識,且這樣學到的東西才會讓你畢生難忘(像炸電池這種事我才不會說。。
完。
今天有點時間,正好share一下我的一些想法,和題主一樣,今年大一,在廣東省的一所在高建ing的二本(准一本?)理工科大學,自動化專業萌新,玩了幾年航模,參加過一些機器人比賽,正在運營一支機器人團隊的其中一個分支(本校兩個校區,我負責這支團隊的其中一個校區的分支),目前在準備一些比賽,Robomaster/ICRA,可能寒假會帶著我們團隊的一些成員回高中母校給FRC團隊搭把手,平時給學校附近的一些高中學校的FTC機器人隊上一些公益課程,個人是很推崇比賽的,感覺題主問的這個問題的最優解是帶領你的小組去參加機器人比賽,感覺機器人比賽是最能提高水平的,因為機器人比賽的過程中,本身有一定的壓力會激發你學習的衝動。。。比如當年在高中打FRC的時候什麼Cjava3周速成(程序組小夥伴買書被誤導,本來想學Java結果被導購員誤導買了C++,所以我們誤打誤撞用了了C++,所以我們戲稱之為Cjava)、solidworks36小時無師自通.etc感覺那時候才是人的潛力真正被激發的時候,想搞機器人?找個比賽來逼一下自己,題主的基礎比我好,我當時做第一個BOT的時候除了玩過航模知道一通副翼,二通升降,三通油門,四通方向以外就是小白一個~如果你們學校恰好有Robocon或者Robomaster的比賽隊伍就更好了,抱大腿能學的更快~題主加油
參加中國機器人大賽呀!
Robocon RoboMaster RoboTac
2017年12月17日更新:
在從深圳回東莞的路上,看到這個問題有新回答,思考了一下這個問題,原來是我考慮簡單了,沒有仔細的去思考這個問題,以下是我個人的一些思考:
我覺得這是一個很龐大的問題,這也是一個系統的問題。依據題主的思考,「我需要製作一機器人」,首先需要明確什麼是機器人,這個必須要有清晰的定義,才能進一步下去,然後接著去考慮我定義的這個機器人有哪些功能,需要完成什麼既定的任務,如果要完成這個任務,他需要移動嘛,他需要一個類似機器人這樣的本體嘛,還是只需要一台電腦就可以完成任務呢;他是輪式機器人呢,還是仿人形機器人呢,還是類似機械手的這樣的機器人呢?仔細展開下去,就會覺得這個問題越難回答,其中就包含了一個最基本的問題,什麼是機器人呢,說實話,我自己沒有概念的,說起機器人,我其實缺乏一個清晰的概念,或者一個機器實體讓我來進行映射。
現在有各式各樣的機器人,有語音機器人比如蘋果的Siri,微軟的Cortana助手等等,你發現他長的就不像人;還有人型的比如前段時間刷爆朋友圈的Boston Dynamics Atlas,還有Softbank 的paper都是仿人形的機器人,如果是玩拆字的遊戲,仿照人形的機器人的機器人應該叫機器人,沒毛病;還有各種各樣的輪式機器人,機械臂式機器人,它們都有一個名稱統一的名稱叫做機器人。對於我來說,最難理解的是這到底是一堆自動化設備還是叫他機器人好,我是猶豫的,我不知道怎麼稱呼他。所以到底什麼才叫做機器人?
我在網上搜到的答案是這樣的:
機器人(Robot)是自動執行工作的機器裝置。它既可以接受人類指揮,又可以運行預先編排的程序,也可以根據以人工智慧技術制定的原則綱領行動。它的任務是協助或取代人類工作的工作,例如生產業、建築業,或是危險的工作。--來源於百度百科
A robot is a machine—especially one programmable by a computer— capable of carrying out a complex series of actions automatically.[2] Robots can be guided by an external control device (Can be controled by human?) or the control may be embedded within. Robots may be constructed to take on human form but most robots are machines designed to perform a task with no regard to how they look. --摘抄自維基百科
說實話,這不是我第一次打開這兩個頁面,但是似乎還是一樣,我並不能用通俗易懂的語言去表達給更多的人,到底是什麼是機器人,因為我自己也還沒有理解,出於一種好像理解了,其實卻沒有理解的狀態吧。
好像扯得有點遠,但是我覺得這個問題不解決的話,後面的問題似乎不是很好去解決。好了,正式梳理一下怎麼來製作一個機器人:
- 明確的功能需求,明確機器人需要完成的任務list和任務目標list。你的機器人是用來幹嘛的,教育機器人?陪護機器人?搬運機器人?碼垛?焊接?語音機器人?還是簡單的巡線?
- 確定的應用場景,量化的技術指標。比如搬運機器人,搬運什麼?在哪裡搬運,搬運的東西的特點是什麼,最大載重量多大,移動速度多少,加速度多少,最大速度多少,定位精度多少,最多有有一台還是多台協同工作等
- 團隊討論,具體技術實現方式的探索,可以利用網路資源、學校的資源對機器人的任務進行分解,然後分成小的的模塊,比如上面提到的搬運機器人,可以分成機械本體機構,驅動模組,能源單元,控制單元,定位模塊,安全模塊,通信模塊,如果設計到多機協同工作,還有路徑規劃自己任務調度等。
- 分工協作,進行機器人的實體的設計,加工,製作,組裝,調試,改進的良性循環中,迭代設計等
- 思考提升,發現更有意思的問題,專研發paper 與更多的人去分享
看到了這個問題覺得自己可以回答一下,正好最近做的項目也跟機器人有關。
這是一個雙輪自平衡小車,是個國外的開源項目。給大家附上網址,上面不僅有代碼還有所需的硬體資料。
Remotely controlled - Arduino Self balancing robot by jjrobots
這個項目不難而且比較有趣,我認為比較合適新手去做,因為代碼是現成的,外殼可以用3D列印,裡面的大部分硬體在淘寶就可以買到(除了一個電路板是我們自己畫的),網站中也有詳細步驟教你如何去組裝。拿來練手和入門還是很不錯的。關於如何控制,有現成的APP,安卓或者IOS都有(這就是為什麼我說很適合新手...)
製作過程我就不敘述啦,上面那個網站里有很詳細的步驟。
這是我們的其中一個小車,已經做了五個不同顏色的,準備寫編隊控制
來一個小視頻看看效果
代碼裡面的PID控制寫的很好,我在編程的時候並沒有改動。
硬體方面跟也是使用了IMU去獲取關於姿態的各種參數然後利用PID演算法使小車平衡。不過這演算法不是我寫的,但拿來學習還是很棒的~
哦對,這個小車是用arduino leonardo板,側面有一個小舵機可以在剛啟動時把自己支撐起來。
不怎麼寫回答,寫得有點亂,見諒
希望能幫到想做機器人的同學~
Arduino在淘寶上買個Arduino小板,買幾個舵機,步進電機,陀螺儀之類的再買個亞克力或者基板就可以做一個基本的機器人了。P.S.還是用C++進行程序編寫的,應該對有計算機基礎的人來說不難。總體價格不會超過500(事實上,500已經可以買很多不同的套件了),比起Mindstorms是在是便宜太多太多了。而且可操控度也比較高。
買樂高MindStorm
買一個arduino的板子,買些舵機,再買個舵機控制板,把機械部分加工出來就行了(當然是要編程序的)。如果不想編程的話也有許多純機械的機器人,如契貝謝夫四足機器人。我也是新手,學生黨,大家一起進步。
個人認為,首先要明確機器人的功能,根據功能設計相應的結構,然後再通過程序和硬體電路對結構進行控制。ps:很多高校都會有機器人基地,可以去參觀學習,為西北工業大學足球競技機器人基地打call!
在日本留學 未來機器人學科大一在讀
大一教你程序 機械 結構設計 感測器原理 電路不好玩 心累 你需要有數學 物理 動手能力 自己去查文檔 實驗電路 電烙鐵使用能力各種機械的使用方法 就可以做東西了(有時候要求要寫一篇報告 我也心累)這邊都是自己動手做東西 工作室各種加工設備 隨便你使用 注意安全就行 這個校區有一個館是我們學科大一大二學生專門用的 裡面有個老頭好凶 沒有帶護鏡 就會開罵……自己看你想要做什麼方面的機器人 硬體和軟體側重點不同 學會各種感測器的用法 然後再去玩Arduino STM32 STM8 或者51 ( ′▽`) 我們最近在弄一個3輪小車 用後面2個輪子差來控制轉彎 上面插一隻筆 然後完成一副畫 我…… (有點難 學校的板子是學校自己做的)*********以後有空再補充*********說到製作一個機器人,那你應該打聽一下robomaster
歡迎加入西北工業大學競技機器人基地
初步的編程與電子基礎
……
LEGO Mindstorms EV3
最可行的去某寶搜索青少年教育diy機器人套裝
樹莓派,Arduino,Edison,
什麼簡單來什麼,
舵機之類的需要的基礎知識太多
推薦閱讀:
※假如有一天機器人可以代替演員演戲,演員的存在還有意義嗎?
※你們期待《變形金剛5》嗎?
※baxter機器人,在示教上有何特別之處?
※新手要學slam,有什麼推薦嗎?
※如何理解機器人的魯棒性 (robustness),高低有何體現?
TAG:機器人 |