手工製作松鼠形機器人
關鍵詞:機器人, Arduino, MATLAB
一、 簡單介紹
這個周末在家做了一個小的Project:用木塊和伺服電機拼出一個機器手臂,並用一塊Arduino UNO和MATLAB對它進行控制,來實現一些簡單的任務。完成之後發現它的動作頗像一隻松鼠,於是就叫它Squirrelbot好了。
拿起木塊的動作
放下木塊的動作
張開雙臂慶祝
完整的視頻可以在這裡看哦:(優酷) Squirrelbot—在線播放—優酷網,視頻高清在線觀看 http://v.youku.com/v_show/id_XMTcyMjI3Nzk1Ng==.html
(youtube)https://youtu.be/SHZ7XyHSaOQ
二、 原理和製作過程
下面來講講製作工程。主要分三個方面:1 用MATLAB和Arduino操縱servo(伺服電機),2 機器人的搭建,3 用來記錄和播放控制指令的MATLAB程序
2.1 用MATLAB操縱servo
我用的servo是非常便宜的(如果不是最便宜的)這種SG90 servo (見 http://www.micropik.com/PDF/SG90Servo.pdf)。我在Amazon上買了一包十個,不到20刀。這種servo輕便,能轉0-180度。雖然扭矩有限,但是用來做我的這個項目非常合適。
用MATLAB的Arduino Support Package操縱這種伺服電機非常的簡單。官網上有一個完整的例子,見 Control Servo Motors 。 這裡我簡要的描述一下相關步驟:
第一步, 搭好電路,連上Arduino
這種Servo只有三根線要接:地線,正極接5V,然後黃色的信號線接到Arduino的Digital Output Pin.
連好以後, 就可以在MATLAB裡面輸入
a = arduino("com4", "uno"); % 創建arduino對象,我用的是com4介面,arduino是uno s = servo(a, "D4"); % 創建servo對象,通過D4這個pin來控制
現在,你就可以直接的用writePosition來寫入新的角度,注意0-180度被線性映射到了0-1之間。
s.writePosition(0.5); % 轉到90度。
同理,可以把多個servo連到同一個arduino上面。我這裡一共用了5個servo, 最後的線路是這樣子的。注意到我沒有用Arduino來給電機供電,因為感覺這樣有時不太穩定。所以我另外用一塊電源給麵包板提供5V的電壓 (也可以直接串聯3節五號電池。。。)。
由此,用同樣的方法,我們就可以在MATLAB裡面創建5個不同的servo對象,然後分別對他們進行操作了。2.2 搭建機器人
這個其實是最花時間的步驟。我的原材料是在Amazon上買的一小袋玩具用的Balsa木頭(大概10刀左右),裡面有幾塊木板,幾根木條和兩個木塊。
然後我是這樣手工打制的各個部分1. 用木板來當底盤,上面還放著麵包板和Arduino2. 用一個方形的木塊來當底座。上面粘了兩個servo. 一個抄下,當做肩關節,一個平方,作為肘關節。
3. 肘關節連著一段木條,上面再粘一個servo, 作為腕關節。
4. 本來我只想做三個自由度的。但是覺得還是有必要做一下「手」。嘗試了很多方法都失敗之後,我突發奇想:不如用兩個servo並排放著,反向轉動,再在上面粘上各粘一小段迷你的「拍子」。嘗試之後發現效果不錯。於是就成了現在這個樣子。結果看起來,特別是動起來,真像一隻松鼠。。。
至此,5個servo都用上了。所有的接合處都是用glue gun來粘和的。底座上還裹了透明膠以防萬一。2.3 MATLAB圖形用戶界面的設計我在MATLAB里編寫了這樣的一個圖形用戶界面
它裡面有一個模擬的機器人姿態展示,和四個滾動條,讓我能直接操縱5個servo的角度(第四個和第五個的servo角度是一樣的,只是相反而已)。每次滾動條有變化時,都會自動更新左邊3D圖示裡面的虛擬機器人的姿態,同時也會改變實際的機器人的姿態。而且軌跡會被自動記錄下來,通過坐標變換之後在圖示里產生一條綠色的末端軌線。在手動操縱它完成一項任務之後,按Reply按鈕就能讓機器人重複剛才的軌跡。
這個圖形用戶界面的編寫就不多講了,所有的代碼我都放在github上面了,有興趣的話歡迎幫我改進。GitHub - yu-jiang/Squirrelbot: Interacting with a mini robotic arm via MATLAB R2015a and Arduino uno
編寫的思想基本上按照徐指導介紹過的Model, View, Control的模式來寫的。MATLAB App Designer教程連載5: App Designer和MVC模式 - MATLAB - 知乎專欄
三、 應用實例
我設計了如下的一個任務。讓它把木塊從黑色的陰影上方拿起,然後直立的放到橙色的石頭上。玩法是我先用MATLAB程序手動的操作完成一次這個任務,然後把木塊放回原處,按replay按鈕,讓它自己重複剛才記錄的軌跡。實驗結果如一開始的視頻和動畫所示。
四 後續和總結這個東西我現在越來越覺得好玩,已經想好了有很多後續的東西可以加進去。比如,在末端加入感測器,把開環控制改為閉環控制。升級電機。還可以用3D印表機來製作框架,而不是用木頭。那樣的精度應該會更高一些。
總之,MATLAB Arduino Support package能幫大大提高設計和製作機器人的效率,幫你很好的實現MATLAB和機器人的事實交互。
所用必要材料和工具列表
- MATLAB 2015a
- MATLAB Arduino Support Package (免費下載)
- Glue gun -- 膠水槍,用來粘東西
- 一些小木塊,木條 (我在amazon上買了一包玩具用的Balsa,非常輕巧)
- Arduino Uno (也可以用其他的,但是support package 不一定支持)
- 麵包板和一些Jumper(導線),一個電池盒或者5V的電源。
- 小刀,尺子等用來切割木頭的工具
- 5個sg70的servo
參考鏈接
Arduino Support from MATLAB
Control Servo Motors
推薦閱讀:
※機器人、無人機、自動控制等相關領域有哪些優秀的博客?
※這款號稱史上最萌的 AI 機器人,現在也支持 Scratch 編程了 | 科技有意思