天天看點

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

機器人設計與制作系列

JavaScript機器人:

用Raspberry Pi、Arduino和BeagleBone建構NodeBots

Make:JavaScript Robotics

點選檢視第二章 點選檢視第三章
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

[美] Backstop Media 瑞克·沃爾德龍(Rick Waldron) 等著

王學昭 劉端陽 等譯

|第1章|

用Lo-tech材料建造機器人

Andrew Fisher

當提到機器人時,你可能會想象無人機、自動駕駛汽車或類人機器人,如Atlas或Asimo。其中很多更規範的機器人至少花費數千美元,而且沒有真正的上限(例如,Atlas的成本超過100萬美元)。事實上,可以用一些便宜的電子元件與一些可以在家裡找到的材料相結合,制造小而有趣的機器人。

NodeBots的一大優點是能夠快速進行原型設計。JavaScript等易于使用的語言與Arduino等友好硬體的結合意味着你可以探索各種想法并了解其運作方式。使用機器人技術進行原型設計和嘗試有助于快速學習和探索概念。

本章将使用名為SimpleBot(見圖1-1)的基本機器人探索幾個機器人概念。SimpleBot的第一個設計挑戰來自于我的孩子,他們在某個晚上要求一起建造一個機器人。随着時間的推移,睡前僅有一小時的工作時間,這意味着隻能使用手頭的工具,沒有雷射切割機、CNC銑床或3D列印機。懷揣着真正的黑客精神,我們使用紙闆、電纜紮帶和橡皮筋完成了制作。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-1 完整版SimpleBot

圖1-2顯示了我們當晚制作的SimpleBot。在制作完成之後,我們愛上了使用紙闆、電纜等材料進行原型設計,最近還使用了用于機器人的corflute(瓦楞塑膠闆)。這些材料價格低廉,易于使用剪刀或優質工藝刀操作。你不必使用雷射切割機等工具,但如果有雷射切割機,可更快更準确地切割這些材料。你可以在餐桌上切割這些材料,孩子們也可以輕松地參與其中。

在第一次努力之後, 我多次修繕了SimpleBot,現在用它做一些NodeBot事件的教學機器人。希望你已經相信用紙闆等簡單材料制造機器人是一個好主意。本章将涵蓋:

建構基本的SimpleBot平台。

切斷電源線,從計算機上取下我們的SimpleBot。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-2 首個SimpleBot

1.1 建構SimpleBot

在建構SimpleBot之前,請記住建構方法沒有正确或錯誤之分。SimpleBot故意保持開放式設計,是以你可以按照想要的方式進行操作。一些人一邊盡可能少地建構版本,一邊自動化Nerf-Gun-Toting平台。SimpleBot的目的是發揮、探索和擴充,以加強你對機器人的了解——是以可以自定義。

1.1.1 材料單

SimpleBot項目分為兩部分,每個部分都需要零件。表1-1中列出了本章的所有零件,文中的對應位置會再次列出每個階段所需的零件。表1-2列出了無線版本所需的零件。

表1-1 SimpleBot 材料

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

表1-2 無線 SimpleBot 材料

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

1.1.2 建構步驟

1.切掉紙闆上的模闆。不需要苛求完美。做内孔時,使用刀、切割墊和尺子比使用剪刀更容易。使用輪子可以切除或保留中心孔,中心孔隻是一個參照,标注中心位置,以便你可以通過它擰到伺服體。

你現在應該有一整套的碎片。最後有凸起的大塊是底座,凸起是前面的。使用凸塊推動較小矩形上的小孔,你可以将其用作保險杠以安裝物體。

2.将車輪安裝到伺服體。拿十字形伺服喇叭(你的伺服體中應該有一包不同的塑膠配件),并将中心與車輪中心對齊。你可以使用一根電線或一根針在材料上戳小孔以标記要擰的點(見圖1-3)。

将車輪牢固地擰到伺服喇叭上。如果你願意,隻需将它們黏上(但之後你就不能再使用伺服喇叭)——兩種方式都可以。将車輪安裝在伺服喇叭上後,将車輪中心和喇叭擰入伺服體的小齒輪。轉動螺絲刀時,請輕輕握住所有零件,在這裡會不小心剝離伺服體中的齒輪并導緻它們滑動。為兩個伺服體執行此操作,你将擁有兩個輪子。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-3 使用伺服喇叭和一根電線标記螺釘點

輕輕旋轉伺服體以確定其自由轉動。如果你使用紙闆或corflute,你的安裝螺絲可能會有點長。螺絲不必完全穿過,但需確定在你轉動它們時,它們在清除伺服體。

當你連接配接電纜紮帶時,隻需擰緊它們以便停止移動,但不要太緊以防撕裂紙闆或 corflute。

3.将伺服體安裝到機箱上,如圖1-4所示。适當地将這些放在前面,以便重量平衡。你可以把它們放在任何地方,但請記住,如果你發現它傾斜了你可能需要平衡一端。安裝伺服體,使帶輪子的一側最靠近機箱前部,并用兩根電纜紮帶将它們連接配接在安裝孔上,以使它們保持在适當位置。使用兩根電纜紮帶,以便在開始行駛時伺服體不會扭曲。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-4 在底座上安裝伺服體

4.将電池安裝在車輪之間,如圖1-5所示。同樣,你可以使用紮帶,但如果你想輕松充電,雙面膠帶或藍丁膠也适用于此。随身攜帶修剪電纜紮帶或者安裝一切都有點困難。

5.為SimpleBot設計一個簡單的“滑動”環以保持平衡。你可以通過将電纜紮帶環繞在機箱中間的SimpleBot背面來完成此操作。從頂部做這個,以免紮帶的觸手被纏住。環的下側應與車輪一半的高度大緻相同,以便車身保持水準。這看起來“松散”,但不要擔心,你可以在下一步用面包闆確定牢固。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-5 在機箱上安裝電池

6.添加面包闆。将面包闆安裝在你放置防滑電纜紮帶的位置,以便電路闆保持滑動。電纜紮帶可以沿着通道所在的電路闆的長度向下延伸,你仍然可以在其上放置IC。

現在你已經完成了機械工作,是時候開始學習電子裝置了。完整的接線圖如圖1-6所示,下面将對每個部分進行說明。

7.建立一個電池電源軌。面包闆的背面給你提供至少7.4V的電壓。面包闆兩側同時接地。将Arduino Nano安裝在一端并接地。如你所見,将Nano放置在主通道的另一側,通過電纜紮帶,并在一側連接配接USB,以便插入,如圖1-7所示。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-6 SimpleBot 線路圖

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-7 電壓配置設定

8.為伺服體通電。伺服電機需要6V電壓,是以電池電壓過高,是以使用+6V穩壓器為伺服電機平穩地輸出6V電壓。将6V電壓放在面包闆的另一個導軌上,以便安裝伺服系統。

請注意,我們正在使用面包闆從“後面”将電壓從電池輸入到調節器,然後從“前面”将電壓從調節器送到另一個軌道。在本章後面調試電路時,這是一種很好的方法,可以使電路一目了然。

9.伺服電機可以連接配接到前電源軌,電壓和接地都可以連接配接到每個電源軌。左伺服信号線連接配接到引腳9,右伺服信号線連接配接到Arduino上的引腳8,如圖1-8所示。

放松一下,整理所有電線,確定沒有任何東西遺落。現在你已經準備好開始處理代碼了。

本書示例的所有源代碼都可以在GitHub上找到。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-8 伺服電路

1.1.3 安裝Node.js包

確定已安裝Node.js。你隻需要為Simple

Bot提供幾個軟體包,可以從終端shell安裝:

1.1.4 使用基本程式測試建構

你的Arduino需要Firmata(參見“Ar-duino”),是以要做的第一件事是在建構更複雜的東西以控制SimpleBot之前測試所有東西。下面的代碼通過USB連接配接到Arduino,然後向前運作伺服體3秒,停止3秒,向後運作3秒,最後在退出前停止。

将SimpleBot連接配接到計算機并運作例1-1中所示的腳本,并将替換為Arduino所連接配接的串行端口。

如果這一切都有效,太好了!你的SimpleBot正常工作。

1.1.5 故障排除——接線

如果你的SimpleBot沒有按照描述工作,請不要擔心,是時候進行一些調試了:

兩個伺服都沒轉

檢查線路。

每個伺服電機應連接配接到電池的電源軌、紅色端、棕色(或黑色)端、接地端。左側伺服電機的信号線應連接配接到Arduino上的引腳8,右側伺服電機的信号線連接配接到Arduino上的引腳9。

根據接線圖,確定電池接地連接配接到Arduino接地,你需要跨電源的公共接地。

其中一個伺服沒有運轉

檢查你的接線,特别注意確定你的伺服電機信号線連接配接到Arduino上的正确引腳。

例1-1 servo-test.js(伺服電機測試代碼)

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

SimpleBot當場旋轉

這是由伺服電機在不同方向上旋轉而不是代碼錯誤引起的。你可以解開伺服電機并将其翻轉,這将使所有其他代碼示例運作。否則,隻需修改代碼即可将違規伺服的指令從servo.ccw()更改為servo.cw(),反之亦然。

1.1.6 一個簡單的驅動程式

現在SimpleBot正常工作,你可以建立一個簡單的程式來驅動它。作為一個起點,讓我們從鍵盤輸入,以便向前和向後驅動SimpleBot,向左或向右旋轉,并停止它。例1-2中顯示的代碼是如何使用鍵盤控制進行驅動的一個非常基本的示例。

例1-2 simplebot.js(驅動示例)

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

①使用指令行的串行連接配接服務連接配接到電路闆。

②設定一個等待鍵盤按鍵的事件。

③檢查按下的鍵,然後根據你想要去的方向接合電機。

将SimpleBot連接配接到計算機并運作腳本:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

你現在應該可以使用鍵盤上的箭頭鍵在桌子或地闆上駕駛SimpleBot,然後按空格鍵停止。

1.1.7 故障排除——伺服電機

以下是一些提示,以防你遇到困難:

一個或兩個伺服電機不運轉

有關跟蹤布線問題,請參閱1.1.5節。

你敲擊空格鍵讓機器人停下來,但它繼續移動一點點

這是因為連續旋轉伺服系統會攻擊普通伺服系統,同時每個伺服系統的制造略有不同。有些伺服系統在後面有一個“調音罐”,可以轉動,以便在你将其設定為停止時停止。

如果沒有這些,那麼你可以在代碼中設定停止點。

在CR伺服系統中,停止位置定義為中心(回想一下,普通伺服系統工作的弧度通常為180°),該位置通常為90°。設定一個低于此值的值将使伺服電機朝一個方向旋轉,高于此值将朝另一個方向旋轉。

在停止代碼中,将伺服電機設定為移動到90°位置。是以,你可能需要稍微調整停止點,将停止代碼更改為:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

沒有“正确”的數字,且每個伺服電機都會略有不同,是以幾分鐘的修補就能讓你找出伺服電機所需的數字。

驅動因素

SimpleBot驅動系統基于一種名為差動驅動的方法,其中每個車輪由連接配接在其上的伺服電機獨立控制。這是兩輪機器人非常常見的設計,因為兩個輪子既可以控制前後運動,也可以控制整個方向。最基本的形式使得機器人非常易于控制。

  • 為了前進,我們将兩個車輪向前旋轉。
  • 為了倒退,我們将兩個輪子反向旋轉。
  • 為了向左轉,我們向後停止或旋轉左輪并向前驅動右輪。
  • 為了向右轉,我們向後停止或旋轉右輪并向前驅動左輪。

這種設計的最大含義是,當你想要改變方向時,你的機器人通常會在現場旋轉。可以(而不是在現場)轉動弧形(通過相對于另一個減慢一個輪子),但是這會導緻代碼複雜。

将這種差速驅動設計與汽車驅動方式進行對比:兩個輪子(或四個,如果車輛具有全輪驅動)由單個電機通過軸旋轉以産生驅動,然後兩個輪子按不同角度定向改變方向。

不同的驅動系統各有優缺點,但差動驅動是一個很好的切入點。

1.2 切斷電源線

SimpleBot已經可以圍繞着桌子運動了,但是也遇到了一個很大的局限,即連接配接SimpleBot與計算機的USB線的長度有限。很顯然,我們可以通過使用長一點的線來解決這個問題,然而,任何超過3米長的線路都會出現信号問題,同時還可能存線上路纏結的可能性,并且還要考慮機器人拖拽的重量。

切斷電源線是一種較好的解決方式,這樣可以讓SimpleBot脫離USB線的束縛,能夠自由運動。

1.2.1 建構無線SimpleBot

在建構無線SimpleBot過程中,由于一切都使用一個電池,我們将使用一個帶有旁路濾波器的單個電池來緩和由伺服電機産生的電壓峰值。這裡還會使用WiFi,這是因為WiFi比藍牙可使用範圍稍廣泛一些,而且隻要有WiFi的地方,都可以使用,沒有地域限制。

在這個電路中使用的WiFi子產品價格低廉,大約12美元,電路顯露出設計者的智慧。該子產品作為WiFi到串行的連接配接器工作,是以通過網絡發送到WiFi子產品的内容都會被複制到串行線路,反之亦然。這也意味着我們的Arduino設定幾乎可以與之前相同,但是卻可以通過該子產品進行無線連接配接,而且達到這樣的效果隻需要花費12美元以及對代碼進行一次更改。

材料清單

這一階段所需的材料如下:

  • 50V 0.1μF 陶瓷電容器
  • 公對公跳線
  • 公對母跳線
  • USR WiFi232-T子產品

1.2.2 連接配接

開始之前,先從USB上拔下Arduino,這樣可以防止在建構電路時發生故障。

無線的種類是什麼?

在該項目中,我們已經選擇了WiFi,但是也有許多其他可以使用的無線電類型,例如藍牙和433MHz序列槽。每個無線電類型都有其優勢、弱勢以及權衡。關鍵是要考慮其頻率、功率和成本。

較高的頻率可以提供更高的比特率,但是可以輕松地被障礙物阻擋。更大的功率可以讓信号“更響亮”,是以信号可以傳播得更遠,但是會更快地耗盡電池。經驗法則就是在比特率、範圍和成本中選擇兩個來考慮。

1.首先要做的是在Arduino接地和VIN上添加去耦電容,這是因為它會由電池供電。同時還要為每個伺服體的電源和接地添加電容,如圖1-9所示。

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-9 WiFi布線圖

2.無線子產品使用2mm間距接頭,是以也無法直接插入面包闆中。使用公對母跳線将該子產品連接配接到面包闆上。然後按照圖1-10的内容添加WiFi子產品,具體連接配接内容也可以參照表1-3。

表1-3 WiFi子產品連接配接

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

圖1-10 添加無線子產品

3.再三檢查你的接線,因為這些子產品沒有反向或者過流保護,是以電壓過高或電流從負極向正極流經WiFi子產品時會将其燒毀。

這些子產品是用于連接配接外部天線的,是以如果不使用外部天線,那麼作用範圍将大大縮小。使用藍色膠塊或熱膠能夠讓天線輕松地連接配接到底座上。

4.将電源線上的跳線連接配接到Arduino上的VIN引腳。這會為Arduino提供7.4V電壓,確定其正常運作。

現在開始設定軟體方面。

1.2.3 控制SimpleBot

讓我們分階段介紹無線部分的内容。在移除電線時,操作更加複雜,是以在進行下一步前,應確定每個部分都是工作的。如果過程中出現了錯誤,傳回去再試一次。

測試、配置子產品

如果提供3.3V電壓,那麼WiFi子產品會充上電。在預設情況下,它會處于接入點模式。大約等待10~15秒,然後你應該可以在計算機上可用的網絡中,發現“USR-WIFI232-T”辨別。連接配接到該網絡,一旦連接配接成功,你可以通過嘗試兩件事情确認WiFi子產品是否全部正常工作。

該子產品的IP位址是10.10.100.254,它有一個DHCP伺服器,是以一旦連接配接上它就會為你制定一些東西。測試IP位址10.10.100.254,如果得到如例1-3中顯示的響應内容,那麼進入下一步。

例1-3 檢查與子產品的連接配接

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

如果沒有得到響應,那麼診斷一下網絡端口,并確定你沒有使用靜态IP或覆寫DHCP的其他配置。

現在打開Web浏覽器,輸入IP位址“10.10.100.254”。在預設情況下,使用者名和密碼都是“admin”。在該界面中,你可以修改子產品本身的常用設定。嘗試将其設定為在STA + A模式下運作,這意味着它可以作為WiFi站(連接配接到你的WiFi網絡)運作,但如果你需要,它也可以作為接入點運作(例如将SimpleBot帶到公園時)。

如果你曾經配置過WiFi路由器,那麼一切都會非常熟悉。提供網絡連接配接詳細資訊,擷取要連接配接的子產品。現在你應該能看到所有的連接配接資訊。

如果由于某種原因無法使用這些方法進入無線子產品,那麼請嘗試直接連接配接序列槽。你需要一些像FTDI或其他串行ttl USB線的東西。使用115200波特率的串行控制台進行連接配接。WIFI232-T使用者指南提供了更多有關使用AT指令的資訊。

設定Arduino

因為WiFi子產品可以以更高的波特率工作,Arduino也應該以這個速度工作。想要更改該設定,請打開StandardFirmata程式,然後對像這樣的指令行執行“查找”:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

将其替換為以115200波特率連接配接:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

編譯程式并将其上傳到Arduino上。

stk_500同步錯誤?

因為你正在使用Arduino硬體序列槽,如果需要閃存Arduino,你需要移除連接配接到WiFi子產品的RX線和TX線,這樣可以通過USB與Arduino通信。如果收到了stk_500同步錯誤,這可能是因為你忘了拔掉串行線。

測試網絡

下一步是在嘗試從Johnny-Five和應用程式發送資訊之前確定進行通信。WIFI232子產品公開TCP端口8899,從串行連接配接發送或者接收的任何内容均通過TCP端口發送。消息像這樣傳遞:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

如果使用Telnet連接配接到子產品,你應該能夠看到來自Arduino的任何串行消息。雖然大多數Firmata資料都是編碼的,但是當一個消息以明文形式發送時,它将Firmata程式的名稱作為啟動的一部分發送給接收者。

在我的網絡上,子產品正在使用IP:10.1.1.12,是以telnet在端口8899上使用telnet 10.0.1.12 8899。

在預設情況下,Windows通常不會安裝Telnet用戶端。你需要進入控制台的“添加/删除Windows元件”部分并進行安裝。

這給出了以下響應:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

現在一切都是連接配接狀态。點選Arduino上的重置按鈕,程式重新開始運作。你應該會看到訓示燈引腳13 LED閃爍序列,并在幾秒鐘内完成以下内容:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

成功了!你剛剛沒有使用任何電線,卻收到了來自Firmata的消息。退出Telnet(按Ctrl +],然後輸入“quit”)。現在已經準備好進入期待已久的下一步了。

無線控制SimpleBot

現在你已經通過網絡傳輸了Firmata消息,需要做的就是讓Johnny-Five讀取和寫入消息。問題是Johnny-Five假設你有一個連接配接好的串行裝置,例如“/dev/ttyUSB0”或“/dev/tty.USBSerial”。相反,你有一個網絡套接字。一種選擇是為Johnny-Five編寫一個IO接口,但是簡單的套接字是做不到的,而且它不像你正在編寫一個新的消息傳遞協定那樣,無須通過電線,隻需通過WiFi的神奇功能發送消息。接下來,請按照此處描述的步驟進行操作(Mac/ Linux系統使用socat,Windows系統使用VSPE)。

Mac/Linux系統的計算機使用socat工具

socat在兩個獨立的資料通道之間建立中繼。了解到這點之後,你可以使用僞終端來建立一個“虛拟”串行終端。之後Johnny-Five和我們的應用程式就可以使用“虛拟”串行終端。你應該能夠從發行版的軟體包管理器中安裝适合Linux系統的socat。在Mac OS X上,可以使用Homebrew。

在看起來像串行端口的僞終端之間進行中繼,并将它連接配接到用于與WIFI232子產品通信的TCP套接字上。在我的網絡上,WiFi子產品是10.0.1.12,你的會有所不同,是以隻需将IP更換一下。以下是它的工作原理:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

要建立此路由,請使用此指令(記住要将10.0.1.12替換為你的WiFi子產品的正确IP位址):

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

-d開關是一個調試參數,是以,如果你不需要詳細資訊,可以删除它,如果出現某些内容不起作用的情況,那麼最多可以使用四次。

該指令告訴socat建立一個僞終端(pty)。不要阻塞它(非阻塞nonblock,你可以從其他程序使用它)并将其連結到$HOME/dev/ttyV0(在這種情況下将它放在/home/ajfisher/dev/ttyV0上,但是可以把它放在想要放置的任何地方)。然後,socat使用端口8899将該終端連接配接到IP為10.0.1.12的TCP連接配接上。一旦運作socat,建立另一個終端視窗并使用螢幕連接配接到虛拟串行連接配接上:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

再次重置Arduino,然後你将看到Firmata程式名稱。如果一切正常,那麼現在已準備好使用無線控制SimpleBot。需要進行的操作就是将虛拟串行連接配接傳遞給你之前編寫的程式,然後離開。此時,它将像以前一樣工作,但是SimpleBot現在是無線的:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

Windows系統的計算機使用VSPE工具

在Windows上,使用名為虛拟串行端口模拟器(VSPE)的軟體。該軟體允許你定義COM端口,然後為其他端點(例如網絡服務)建立映射。

最後,消息應該像這樣發送:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人
帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

下載下傳并安裝該軟體,打開後建立兩個裝置。

從“New Devices”(新裝置)中建立第一個裝置作為“Connector”(連接配接器)并将其設定為COM10,這将為Windows建立一個可以通信的COM端口,并将消息傳遞給Node.js應用程式:

  • TCP用戶端
  • 主機:10.0.1.12(或任何你的WIFI232 IP位址)
  • 端口:8899
  • 第二個裝置是一個“橋型”連接配接器,它可以在兩個資料流之間進行橋接。
  • 串行端口
  • 端口:COM10 (直接輸入,因為該端口是虛拟的,不會出現在下拉清單中)
  • 速度:115200

儲存配置并按“play”(播放)按鈕運作全部内容。

現在應該能夠像以前一樣運作SimpleBot應用程式了:

帶你讀《JavaScript機器人: 用Raspberry Pi、Arduino和BeagleBone建構NodeBots Make:JavaScript Robotics》之一:用Lo-tech材料建造機器人用Lo-tech材料建造機器人

1.2.4 疑難解答

這裡最常見的問題與導緻重置的功率或範圍有關。

如果沒有足夠的功率或沒有使用去耦電容,那麼當你對電機進行大的方向更改時,Arduino或WiFi子產品可能會複位。檢查電路,確定放入電容器,并檢查電池組的電量。

如果你遇到持續的重置問題,那麼可能是從伺服電機中汲取了過多電流。如果電流特别重負荷(高扭矩),那麼可能會讓Arduino降低電壓。你可能需要一個為類似遙控模型車設計的更高容量的電池。

如果你讓機器人走出了WiFi網絡覆寫的範圍,那麼可能會出現亂碼,同時SimpleBot會停止響應。正因為如此,你要開始考慮更長的天線和其他無線電類型,以使WiFi輻射範圍更廣。

1.3 進一步探索

在本章中,你拿了一些紙闆,然後用它們制作了一個機器人。隻需要一個由廢料和廉價材料制成的基本機器人,你就可以探索一系列主題:

  • 差分驅動器
  • 程式設計控制系統
  • 遠端控制

現在你已經擁有了自己的SimpleBot,你可以帶着它探索許多有趣的事情,學習更多的機器人概念。以下是可以嘗試的一些内容:

  • 增加自主權和避免碰撞功能。
  • 添加運作Node.js的樹莓派來執行機器人上的所有程序和邏輯,使其更加自動化。
  • 使用拴在手機上的樹莓派,制作一個可以在任何地方驅動的遠端網絡控制機器人。
  • 使用反射傳感器讓SimpleBot跟随線條運動。
  • 添加編碼器輪,以便你可以測量行程/速度,并讓機器人更精确地轉動。
  • 添加光傳感器并對SimpleBot進行程式設計以接近光線或遠離光線。
  • 對SimpleBot進行程式設計,使得你收到推特消息或有人給你發送電子郵件時,它旋轉并點亮LED。
  • 使用更多的輪子甚至全向輪探索SimpleBot的不同驅動機制,讓它可以在不旋轉的情況下改變方向!

繼續閱讀