86duino 小六足機器人 diy 課程教材

542

Click here to load reader

Upload: roboard

Post on 21-Apr-2017

2.977 views

Category:

Devices & Hardware


23 download

TRANSCRIPT

Page 1: 86Duino 小六足機器人 DIY 課程教材

DMP Electronics Inc. (瞻營全電子) [email protected]

Page 2: 86Duino 小六足機器人 DIY 課程教材

講師自介 林恩州

現任 DM&P 86Duino 研發工程師

主要負責 86Duino 基礎軟體開發

Page 3: 86Duino 小六足機器人 DIY 課程教材

大綱 第一天上午

86Duino Enjoy 3D 印表機簡介

使用 86Duino Enjoy 列印 86小六足零件

小六足列印件前處理

第一天下午

86Duino 簡介

組合小六足足部

組合小六足身體

Page 4: 86Duino 小六足機器人 DIY 課程教材

第二天上午

Arduino 和 86Duino 控制伺服機的方法簡介

86ME 機器人動作編輯器簡介

86ME 安裝和使用教學

第二天下午

認識六足 - 六足機構原理

認識六足 - 六足步態簡介

使用 86ME 編輯小六足動作

手機藍芽遙控 86小六足

Page 5: 86Duino 小六足機器人 DIY 課程教材

第二天下午

Servo86 函式庫介紹

86小六足動作程式解析

進階 – 86小六足動作程式修改

86小六足創意改造

Page 6: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy

3D 印表機簡介

Page 7: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy 為一台基於 CNC 金屬框架的 3D 印

表機,剛性的結構有助於減少震動,並提供一個穩定

的列印環境。

86Duino Enjoy 3D 印表機內部設計一套簡單的校準

方法,可以輕易的列印或複製出您的作品。

Page 8: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy 列印規格 成形方式:熔融層積 (Fused Filament Fabrication)

列印體積: 100 * 100 * 150 mm ( 1,500 cm3)

最小層高: 0.1 mm

噴嘴直徑: 0.3 mm

列印材料:PLA (玉米澱粉)

Page 9: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy 軟體 列印軟體:Repetier-Host (簡稱 RH)

檔案傳輸方式:SD card (SDHC Class 10), USB,

Ethernet

Page 10: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy 3D printer Demo Video

影片網址: https://www.youtube.com/watch?v=oOsUWsNCfMY

Page 11: 86Duino 小六足機器人 DIY 課程教材
Page 12: 86Duino 小六足機器人 DIY 課程教材

自行研發的x86 Soc – Vortex86EX

Page 13: 86Duino 小六足機器人 DIY 課程教材

Print3D 控制器

Page 14: 86Duino 小六足機器人 DIY 課程教材

H-Bot 結構 鋁壓鑄成型

Page 15: 86Duino 小六足機器人 DIY 課程教材

自行研發的擠出頭

溫度最高可加熱到 300 度

支援自動水平校正

Page 16: 86Duino 小六足機器人 DIY 課程教材

金屬進料齒輪組

Page 17: 86Duino 小六足機器人 DIY 課程教材

自行研發的步進馬達

Page 18: 86Duino 小六足機器人 DIY 課程教材
Page 19: 86Duino 小六足機器人 DIY 課程教材
Page 20: 86Duino 小六足機器人 DIY 課程教材

DIY 86小六足

Page 21: 86Duino 小六足機器人 DIY 課程教材

86小六足: 1. 具有 12 個自由度 2. 可實現前進、左轉、

右轉等動作 3. 可用手機、USB 鍵

盤或 PS2 搖桿控制

Page 22: 86Duino 小六足機器人 DIY 課程教材

86小六足 DIY 流程 使用 86Duino Enjoy 3D 印表機列印小六足零件

列印件前處理

組合足部

組合身體

Page 23: 86Duino 小六足機器人 DIY 課程教材

86小六足 DIY 流程 使用 86Duino Enjoy 3D 印表機列印小六足零件

列印件前處理

組合足部

組合身體

Page 24: 86Duino 小六足機器人 DIY 課程教材

至 Thingiverse 網站下載 86小六足 STL 檔案:

http://www.thingiverse.com/thing:964149

點擊下載

Page 25: 86Duino 小六足機器人 DIY 課程教材

解壓縮後有六個檔案,如下圖:

Page 26: 86Duino 小六足機器人 DIY 課程教材

零件中文名稱對照 A_arm_top:上 A 臂

A_arm_bottom:下 A 臂

Leg:垂直腳

Linker:連結器

Body_top:身體上半部

Body_bottom:身體下半部

Page 27: 86Duino 小六足機器人 DIY 課程教材

Leg 零件

Page 28: 86Duino 小六足機器人 DIY 課程教材

A_arm_top 零件

Page 29: 86Duino 小六足機器人 DIY 課程教材

A_arm_bottom 零件

Page 30: 86Duino 小六足機器人 DIY 課程教材

linker 零件

Page 31: 86Duino 小六足機器人 DIY 課程教材

Body_bottom 零件

Page 32: 86Duino 小六足機器人 DIY 課程教材

body_top 零件

Page 33: 86Duino 小六足機器人 DIY 課程教材

leg

A_arm_bottom

A_arm_top

linker

零件名稱和實際對應圖

Page 34: 86Duino 小六足機器人 DIY 課程教材

body_bottom

body_top

零件名稱和實際對應圖

Page 35: 86Duino 小六足機器人 DIY 課程教材

A_arm_bottom、A_arm_top 、leg 、linker 為小六

足足部的組合零件,這 4 個零件可以組合成一個足部

body_top 為小六足身體上半部零件

body_bottom 為小六足身體下半部零件

Page 36: 86Duino 小六足機器人 DIY 課程教材

完成一整隻 86小六足一共要列印:

6 個足部

1 個身體上半部

1 個身體下半部

Page 37: 86Duino 小六足機器人 DIY 課程教材

下載並安裝 Repetier-Host 軟體

http://www.repetier.com/downloads/

安裝 Repetier-Host

點擊下載

Page 38: 86Duino 小六足機器人 DIY 課程教材

86Duino Enjoy 驅動程式下載

http://www.ftdichip.com/Drivers/VCP.htm

下載 & 安裝驅動程式

Page 39: 86Duino 小六足機器人 DIY 課程教材

連接 86Duino Enjoy 和電腦 驅動程式安裝完成後,使用 USB 線連接電腦和 86Duino

Enjoy

USB 線

86Duino Enjoy

PC

Page 40: 86Duino 小六足機器人 DIY 課程教材

此時裝置管理員應該會出現一個虛擬 COM port ,如

下圖:

Page 41: 86Duino 小六足機器人 DIY 課程教材

下載 86Duino Enjoy 專用的設定檔

http://www.roboard.com/temp/settings.zip

解壓縮後可以看到資料夾結構如下:

Page 42: 86Duino 小六足機器人 DIY 課程教材

開啟 Repetier-Host 軟體

滑鼠雙擊圖示

開啟後的畫面

Page 43: 86Duino 小六足機器人 DIY 課程教材

選擇 Config > Printer Settings

Page 44: 86Duino 小六足機器人 DIY 課程教材

將 Connection 分頁中的設定選項,設定如下圖:

Connection 分頁

的設定選項如右:

Page 45: 86Duino 小六足機器人 DIY 課程教材

按 ”連線” 按鈕,連線成功時會聽到 86Duino

Enjoy 發出連續三個音效,且連線按鈕會變成右下圖:

未連線 連線成功

連線

Page 46: 86Duino 小六足機器人 DIY 課程教材

連線後,我們可以選擇 “Manual Control” 分頁,

再按下歸 HOME 按鈕,如下圖所示:

1

2

Page 47: 86Duino 小六足機器人 DIY 課程教材

按下歸 HOME 按鈕後,86Duino Enjoy 3D 印表機的

X、Y 、Z 軸會立即回到機械原點,代表我們已經可以

操作 86Duino Enjoy 3D 印表機了

Page 48: 86Duino 小六足機器人 DIY 課程教材

繼續其他設定 在 Config > Printer Settings 中,設定 Printer 分頁

如下圖:

Page 49: 86Duino 小六足機器人 DIY 課程教材

Printer 分頁的

設定選項如右:

Page 50: 86Duino 小六足機器人 DIY 課程教材

Extruder 分頁的

設定選項如右:

Page 51: 86Duino 小六足機器人 DIY 課程教材

Printer Shape 分頁

的設定選項如右:

Page 52: 86Duino 小六足機器人 DIY 課程教材

載入 86Duino Enjoy 設定檔 選擇 Slicer > CuraEngine

1

2

Page 53: 86Duino 小六足機器人 DIY 課程教材

選擇 Slicer > Configuration

1

2

Page 54: 86Duino 小六足機器人 DIY 課程教材

選擇 Print > Import

1

2

Page 55: 86Duino 小六足機器人 DIY 課程教材

打開 86Duino Enjoy 設定檔資料夾, 進入CuraEngine 資

料夾,選擇 Print-Settings.rcp 設定檔,按下開啟舊檔

Page 56: 86Duino 小六足機器人 DIY 課程教材

載入 86Duino Enjoy 設定檔:

選擇 Filament > Import

1

2

Page 57: 86Duino 小六足機器人 DIY 課程教材

選擇 Filament-Settings.rcp 設定檔後,按下開啟舊檔

Page 58: 86Duino 小六足機器人 DIY 課程教材

在 Print Configuration 選項中,套用 86Duino

Enjoy 設定檔:選擇 Print-Settings

Page 59: 86Duino 小六足機器人 DIY 課程教材

在 Filament Setting 中,Extruder1 套用 86Duino

Enjoy 設定檔:選擇 Filament-Settings

Page 60: 86Duino 小六足機器人 DIY 課程教材

載入小六足 STL 檔 點擊 Load 按鈕,載入 86小六足足部檔案:

A_arm_bottom、A_arm_top、leg 、linker

Page 61: 86Duino 小六足機器人 DIY 課程教材

載入後的圖如下:

Page 62: 86Duino 小六足機器人 DIY 課程教材

基本操作 在下圖紅框中按著滑鼠左鍵並移動,可以旋轉視角

在足部零件上面,按著滑鼠右鍵並移動,可以移動零件

Page 63: 86Duino 小六足機器人 DIY 課程教材

點選 Linker,將零件沿著 Y 軸翻轉 90 度,如下圖:

Page 64: 86Duino 小六足機器人 DIY 課程教材

翻轉後的 linker 零件,擺放角度應如下圖:

Page 65: 86Duino 小六足機器人 DIY 課程教材

點選 A_arm_bottom,將零件沿著 Y 軸翻轉 180 度,

如下圖:

2 3

Page 66: 86Duino 小六足機器人 DIY 課程教材

翻轉後的 A_arm_bottom 零件,擺放角度應如下圖:

Page 67: 86Duino 小六足機器人 DIY 課程教材

翻轉完成後的足部零件如下圖:

Page 68: 86Duino 小六足機器人 DIY 課程教材

打開支撐選項 設定 Support Type 為 Everywhere

Page 69: 86Duino 小六足機器人 DIY 課程教材

按下切片按鈕,就會立即進行切片

Page 70: 86Duino 小六足機器人 DIY 課程教材

切片完成後會出現類似下面畫面:

Page 71: 86Duino 小六足機器人 DIY 課程教材

傳輸列印檔案至 86Duino Enjoy 傳輸檔案給 86Duino Enjoy 的方法有兩種:

方法一:使用 USB 線傳輸

方法二:使用 SD 卡

Page 72: 86Duino 小六足機器人 DIY 課程教材

方法一: 使用 USB 線 切片完成後,直接按下列印按鈕,86DuinoEnjoy 會

立即開始列印

Page 73: 86Duino 小六足機器人 DIY 課程教材

方法二: 使用 SD 卡 不使用 USB 線連接 86Duino Enjoy,改插上

86Duino Enjoy 專用的 SD 卡至您的電腦

Page 74: 86Duino 小六足機器人 DIY 課程教材

切片完成後,點擊如下圖示, 將 G-code 檔儲存至 SD

卡中:選擇 G-Code Editor 分頁 > 按下儲存按鈕

1

2

Page 75: 86Duino 小六足機器人 DIY 課程教材

將檔案儲存在 SD 卡中的 gcode 資料夾下,儲存檔名

改成 auto.gcode,按存檔

Page 76: 86Duino 小六足機器人 DIY 課程教材

從電腦拔出 SD 卡,將此 SD 卡置入 86Duino Enjoy

背面的 SD 卡插槽

SD 卡插槽

86Duino Enjoy 控制盒背面

Page 77: 86Duino 小六足機器人 DIY 課程教材

打開 86Duino Enjoy 電源,86Duino Enjoy 會自動讀

取 auto.gcode 檔開始列印!

電源

86Duino Enjoy 控制盒背面

Page 78: 86Duino 小六足機器人 DIY 課程教材

86小六足 DIY 流程 使用 86Duino Enjoy 3D 印表機列印小六足零件

列印件前處理

組合足部

組合身體

Page 79: 86Duino 小六足機器人 DIY 課程教材

此步驟中,我們需要對 86小六足的足部和身體列

印件做組裝的前處理,包括:拆除支撐、打磨、

鑽孔、攻牙。

拆除支撐:支撐為列印過程所需,列印完成後必需拆除

打磨:由於零件表面/邊緣有時會存在變形或凸起,需

要用工具打磨平整

鑽孔:可讓螺絲穿過,將螺絲做為軸承使用

攻牙:可讓螺絲鎖入,用以固定零件

Page 80: 86Duino 小六足機器人 DIY 課程教材

認識工具

1. 鑽孔刀 2. 攻牙刀 3. 手握夾頭 4. 尖嘴鉗 5. 平銼刀 6. 圓銼刀

7. 螺絲起子 8. 斜口鉗

1 2 3

4

5 6 7

8

Page 81: 86Duino 小六足機器人 DIY 課程教材

額外材料

1. 2mm x 4mm 螺絲 2. 2mm x 8mm 螺絲 3. 2mm x 15mm 螺絲

4. 杜邦線 5. 電子擴充板 (for 86DuinoZero) 6. 杜邦針腳

1 2

3 4

5

6

Page 82: 86Duino 小六足機器人 DIY 課程教材

Linker 零件前處理

Page 83: 86Duino 小六足機器人 DIY 課程教材

取出列印好的 linker 零件

拆除 linker 零件的支撐

Page 84: 86Duino 小六足機器人 DIY 課程教材

使用尖嘴鉗拆除以下支撐:

1

2 3

Page 85: 86Duino 小六足機器人 DIY 課程教材

拆除支撐示意圖:

尖嘴鉗

拆除支撐

Page 86: 86Duino 小六足機器人 DIY 課程教材

使用銼刀來回將左下圖箭頭所指的表面磨平:

打磨 linker 零件

銼刀

來回打磨

Page 87: 86Duino 小六足機器人 DIY 課程教材

磨到可以將伺服機順利置入即可:

Page 88: 86Duino 小六足機器人 DIY 課程教材

如果該處磨掉很多後伺服機還是很難置入,這是因為

列印件的邊緣可能有些凸起或變形,干涉到伺服機外

殼,請用銼刀將這些邊緣磨掉一些即可:

Page 89: 86Duino 小六足機器人 DIY 課程教材

linker 零件攻牙 使用工具:2mm 攻牙刀 + 手握夾頭

手握夾頭

2mm 攻牙刀

Page 90: 86Duino 小六足機器人 DIY 課程教材

將 2mm 攻牙刀套入手握夾頭並鎖緊

1 2

Page 91: 86Duino 小六足機器人 DIY 課程教材

Linker 零件上需要攻牙的孔,如下圖紅圈處:

俯視圖 底視圖

Page 92: 86Duino 小六足機器人 DIY 課程教材

側視圖1 側視圖2

Page 93: 86Duino 小六足機器人 DIY 課程教材

攻牙時,請盡量保持攻牙刀與需要攻牙的孔位角度垂

直,不要傾斜,否則孔位可能會被擴大,導致螺絲鎖

入後無法固定。

正確 錯誤

保持與孔位垂直後旋入攻牙刀 攻牙刀角度傾斜時,請勿旋入

90 度

Page 94: 86Duino 小六足機器人 DIY 課程教材

linker 零件鑽孔 使用工具:2mm 鑽孔刀 + 手握夾頭

手握夾頭 2mm 鑽孔刀

Page 95: 86Duino 小六足機器人 DIY 課程教材

將 2mm 鑽孔刀套入手握夾頭並鎖緊

1 2

Page 96: 86Duino 小六足機器人 DIY 課程教材

使用鑽孔刀對下圖指示的孔位鑽孔:

俯視圖 底視圖

Page 97: 86Duino 小六足機器人 DIY 課程教材

使用鑽孔刀時,也請盡量保持與孔洞垂直後,再旋入

鑽孔刀:

鑽孔

Page 98: 86Duino 小六足機器人 DIY 課程教材

操作影片

Page 99: 86Duino 小六足機器人 DIY 課程教材

A_arm_bottom 零件前處理

Page 100: 86Duino 小六足機器人 DIY 課程教材

準備 取出 A_arm_bottom、 leg 零件

取出十字型伺服機配件盤

A_arm_bottom leg

Page 101: 86Duino 小六足機器人 DIY 課程教材

十字型配件盤鑽孔 在十字型伺服機配件盤上,由中心數來第二個孔,用

鑽孔刀鑽出 2mm 的洞,如下圖:

Page 102: 86Duino 小六足機器人 DIY 課程教材

將鑽孔處垂直 90 度的另一個孔,用鑽孔刀鑽出 2mm

的洞,如下圖:

Page 103: 86Duino 小六足機器人 DIY 課程教材

拆除 A_arm_bottom 上的支撐,用圓挫刀來回打磨

左下圖箭頭所指的面:

來回打磨

Page 104: 86Duino 小六足機器人 DIY 課程教材

磨到將十字型伺服機配件盤靠上時,可以看到孔位對

齊 (如右下圖箭頭所指處):

孔位對齊

Page 105: 86Duino 小六足機器人 DIY 課程教材

使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭

所指的面:

Page 106: 86Duino 小六足機器人 DIY 課程教材

持續打磨直到 leg 零件置入後,可以輕鬆旋轉的程度:

※如果已經將 A_arm_bottom 磨掉很多了,leg 零件置入後轉起來還是很緊,

請改為打磨 leg 零件的接觸面

來回打磨

輕鬆旋轉

leg

Page 107: 86Duino 小六足機器人 DIY 課程教材

A_arm_bottom 零件鑽孔 用鑽孔刀對下圖箭頭指示的孔位鑽孔:

鑽孔

Page 108: 86Duino 小六足機器人 DIY 課程教材

A_arm_bottom 零件攻牙 使用攻牙刀在下圖指示的孔位上攻牙:

攻牙

Page 109: 86Duino 小六足機器人 DIY 課程教材

leg 零件攻牙 使用攻牙刀在下圖指示的孔位上攻牙:

攻牙

Page 110: 86Duino 小六足機器人 DIY 課程教材

操作影片

Page 111: 86Duino 小六足機器人 DIY 課程教材

A_arm_top 零件前處理

Page 112: 86Duino 小六足機器人 DIY 課程教材

準備 取出 A_arm_top、leg 零件

A_arm_top leg

Page 113: 86Duino 小六足機器人 DIY 課程教材

使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭

所指的面:

Page 114: 86Duino 小六足機器人 DIY 課程教材

打磨到 leg 零件置入後,可以輕鬆旋轉的程度:

※如果已經將 A_arm_top 磨掉很多了, leg 零件置入後轉起來還是很緊,可

以改為打磨 leg 零件的接觸面

來回打磨

輕鬆旋轉

leg

Page 115: 86Duino 小六足機器人 DIY 課程教材

鑽孔 用鑽孔刀對下圖指示的孔位鑽孔:

鑽孔

Page 116: 86Duino 小六足機器人 DIY 課程教材

Body_top 零件前處理

Page 117: 86Duino 小六足機器人 DIY 課程教材

準備 取出 body_top 零件

Page 118: 86Duino 小六足機器人 DIY 課程教材

使用尖嘴鉗拆除背面支撐

拆除前 拆除後

Page 119: 86Duino 小六足機器人 DIY 課程教材

重複使用平銼刀打磨拆除支撐後的面,直到伺服機可

以容易的置入:

來回打磨

Page 120: 86Duino 小六足機器人 DIY 課程教材

攻牙 用攻牙刀對下圖指示的孔位攻牙 (下圖藍圈處)

攻牙

Page 121: 86Duino 小六足機器人 DIY 課程教材

鑽孔 用鑽孔刀對下圖指示的孔位鑽孔:

鑽孔

Page 122: 86Duino 小六足機器人 DIY 課程教材

Body_bottom 零件前處理

Page 123: 86Duino 小六足機器人 DIY 課程教材

準備 取出 body_bottom 零件

Page 124: 86Duino 小六足機器人 DIY 課程教材

在 body_bottom 零件上置入伺服機,如下圖:

置入

Page 125: 86Duino 小六足機器人 DIY 課程教材

如果發現很難置入 (置入後出現空隙,如下圖):

空隙

難以壓入伺服機

Page 126: 86Duino 小六足機器人 DIY 課程教材

請移除伺服機,然後使用平銼刀磨平 body_bottom

與伺服機的接觸表面,直到伺服機可以順利壓入:

來回打磨

Page 127: 86Duino 小六足機器人 DIY 課程教材

用攻牙刀對下圖指示的孔位攻牙 (左下圖紅圈處):

攻牙

攻牙

Page 128: 86Duino 小六足機器人 DIY 課程教材

用鑽孔刀對下圖指示的孔位鑽孔 (左下圖紅圈處):

鑽孔

鑽孔

Page 129: 86Duino 小六足機器人 DIY 課程教材

86Duino 簡介

Page 130: 86Duino 小六足機器人 DIY 課程教材

它是世界上第一個發表的 x86

Arduino 相容板 (比 Intel Galileo 還早)

比 Arduino 的 CPU 時脈快數十倍

內建 Arduino UNO/MEGA 板上沒有

的額外硬體(如: SD 卡、LAN 網路)

可以跑 Windosw XP 與 Linux

作業系統

相容 Arduino Leonardo 腳位

什麼是 86Duino?

Page 131: 86Duino 小六足機器人 DIY 課程教材

86Duino 的種類和名稱

86Duino ONE

86Duino EduCake

入門款 機器人專用 教育用

86Duino Zero

Page 132: 86Duino 小六足機器人 DIY 課程教材

86Duino 特色 (2/2) 軟體

相容 Arduino 的開發環境

完整相容 Arduino 程式語法、API、標準函式庫

額外內建 33 個 Arduino 相容函式庫

完完全全 Made In Taiwan(連 CPU 也是 Made In

Taiwan,板子上的零件多數也是 Made In Taiwan)

Page 133: 86Duino 小六足機器人 DIY 課程教材

86Duino 計畫緣起

Maker 運動

Arduino 紀錄片

開源、教育夢

86Duino 計劃開始

三年前

N 年前 許多非電子專業的人開始使用開發板

重新從人的角度思考

工程師的夢想

Page 134: 86Duino 小六足機器人 DIY 課程教材

86Duino 開發環境命名 Coding:培養使用者寫程式解決問題的能力,期望人們在應

用 86Duino 的過程中,能不斷精進寫程式(coding)能力,

進而以寫程式(coding)改變世界。

中文名稱:口丁,由於 86Duino 計劃的種子是由

OpenLab.Taipei 社群翻譯的 Arduino 記錄片所種下,「口丁」

有代表 OpenLab.Taipei 縮寫的意思,同時,它發音也近於英

文「Coding」,正好也隱含了用 coding 改變世界的意義

詳細內容請點此連結:http://www.86duino.com/index.php?p=5746&lang=TW

Page 135: 86Duino 小六足機器人 DIY 課程教材

生產 86Duino 的 DM&P 集團 DM&P 集團為一跨國性的嵌入式系統製造商,以台灣

為設計研發中心及營運總部,在美東、美西、英國、

日本、巴西、深圳、上海、西安均設有分公司。

Page 136: 86Duino 小六足機器人 DIY 課程教材

硬體規格上的差異 本課程中會用到的 86DuinoZero 或 86DuinoOne,

這兩塊在硬體規格方面,和 Arduino 有什麼相似處?

或不同之處?

Page 137: 86Duino 小六足機器人 DIY 課程教材

Arduino 與 86DuinoZero 硬體規格比較

Page 138: 86Duino 小六足機器人 DIY 課程教材

86DuinoZero 與 Arduino 效能比較表 Dhrystone 性能評測

Dhrystone 性能評測 sketch 下載: https://www.facebook.com/download/1026109197423161/Arduino_dhrystone.ino

Page 139: 86Duino 小六足機器人 DIY 課程教材

Zero 與 One 的硬體規格比較

Page 140: 86Duino 小六足機器人 DIY 課程教材

如何將 RC 伺服機連接到

86Duino Zero ?

Page 141: 86Duino 小六足機器人 DIY 課程教材

連接 86Duino Zero Zero 開發板沒有 RC 伺服機專用插座,但可透過以下任一

方式與 RC 伺服機連接:

方法一:使用轉接用的 Arduino shields

方法二:透過麵包板轉接

方法三:手工製作伺服機轉接插座

Page 142: 86Duino 小六足機器人 DIY 課程教材

方法一 使用 Arduino Sensor Shlied 轉接

Arduino Sensor Shlied 86Duino Zero

+

Page 143: 86Duino 小六足機器人 DIY 課程教材

86Duino Zero +

Arduino Sensor shield

RC Servo – SG90 x 3

Page 144: 86Duino 小六足機器人 DIY 課程教材

方法二 使用麵包板轉接

Page 145: 86Duino 小六足機器人 DIY 課程教材
Page 146: 86Duino 小六足機器人 DIY 課程教材

只接單顆伺服機時,可直接透過杜邦線連接

Page 147: 86Duino 小六足機器人 DIY 課程教材

杜邦線 RC Servo – SG90

86Duino Zero

Page 148: 86Duino 小六足機器人 DIY 課程教材

方法三 使用 2.54mm 杜邦頭製作轉接插座

86小六足用的方法

將伺服機插在杜邦插座上

杜邦插座

Page 149: 86Duino 小六足機器人 DIY 課程教材

杜邦插座

Page 150: 86Duino 小六足機器人 DIY 課程教材

如何將 RC 伺服機連接到

86Duino One

Page 151: 86Duino 小六足機器人 DIY 課程教材

連接方法 (1/2) 86Duino One 外側有一排為 RC 伺服機設計的插座,

信號安排如右下圖所示:

PWM VIN GND

86Duino One

Page 152: 86Duino 小六足機器人 DIY 課程教材

連接方法 (2/2) 將 RC 伺服機依正確方向插上:

正確方向

GND (黑線) 電源 (紅線) PWM (黃線)

RC Servo – SG90

Page 153: 86Duino 小六足機器人 DIY 課程教材

接上電源 86Duino One 左上方的綠色端子台是 RC 伺服機主要

的電源輸入端,允許 6 ~ 24 伏特的電壓輸入:

Page 154: 86Duino 小六足機器人 DIY 課程教材

注意事項 (1/4) RC 伺服機本身有自己適合的工作電壓範圍,接上電

源之前,請先閱讀 RC 伺服機的規格書或說明書,確

認其工作電壓,如果輸入的電壓超過工作電壓,太高

可能導致伺服機永久燒毀,太低則會讓伺服機無法運

作。

Page 155: 86Duino 小六足機器人 DIY 課程教材

注意事項 (2/4) 有些廉價 RC 伺服機設計不良,在啟動瞬間會大幅干

擾 VIN 電源之供給,將 VIN 電源拉低至 6V 以下,這

會使 86Duino 的 CPU 模組啟動欠壓保護而停機。如

發生這種狀況,一個解決方法是更換可瞬間供應大電

流的外部電源(例如:具有高放電系數的遙控模型用

鋰電池)以克服伺服機的干擾。

Page 156: 86Duino 小六足機器人 DIY 課程教材

注意事項 (3/4) 另一方法是從 micro-USB 接頭另外供應穩定的 5V 電源給

CPU 模組,這是市面上伺服機控制板常見的雙電源供電方

式,以 One 為例,如下圖所示:

Page 157: 86Duino 小六足機器人 DIY 課程教材

注意事項 (4/4) Zero 雖然可透過板上 5V 直接對吃電較小的伺服機供

電,但連接大電流的伺服機時,應使用雙電源供電。

micro USB:5V

外接電源

Page 158: 86Duino 小六足機器人 DIY 課程教材

86小六足 DIY 流程 使用 86Duino Enjoy 3D 印表機列印小六足零件

列印件前處理

組合足部

組合身體

Page 159: 86Duino 小六足機器人 DIY 課程教材

組裝概述 用螺絲將伺服機和足部列印件組合起來

歸零伺服機至中點

鎖上伺服機配件盤

完成足部組裝

Page 160: 86Duino 小六足機器人 DIY 課程教材

組裝完成圖:

Page 161: 86Duino 小六足機器人 DIY 課程教材

準備材料 2mm x 4mm 螺絲 3 顆

2mm x 8mm 螺絲 4顆

2mm x 15mm 螺絲 1顆

SG-90 伺服機 1 顆

十字型伺服機配件盤 1 個

※組合一個足部為例

Page 162: 86Duino 小六足機器人 DIY 課程教材

組合足部 將伺服機如下圖方式壓入 linker 零件:

linker

Page 163: 86Duino 小六足機器人 DIY 課程教材

用長度 8mm 螺絲鎖緊,如下圖:

長度 8mm 螺絲

Page 164: 86Duino 小六足機器人 DIY 課程教材

合上 A_arm_top,再用長度 15mm 螺絲鎖緊,如下

圖:

長度 15mm 螺絲

A_arm_top

Page 165: 86Duino 小六足機器人 DIY 課程教材

A_arm_top 另一側用長度 8mm 螺絲鎖緊,如下圖:

長度 8mm 螺絲

Page 166: 86Duino 小六足機器人 DIY 課程教材

完成後用手搖動 A_arm_top 零件,如果發現 A_arm_top

搖動起來不順暢,表示 A_arm_top 和 linker 之間的磨擦

力太大,請將上鎖的螺絲鬆開一點再試試看:

搖動 A_arm_top

Page 167: 86Duino 小六足機器人 DIY 課程教材

假如鬆開螺絲後還是感覺磨擦力很大,請將 A_arm_top

零件拆下,使用銼刀稍微打磨 A_arm_top 和 linker 的接

觸的面後再裝上:

A_arm_top

Page 168: 86Duino 小六足機器人 DIY 課程教材

鎖上 A_arm_top 零件後,用長度 4mm 螺絲鎖上

A_arm_bottom 零件,如下圖:

長度 4mm 螺絲

Page 169: 86Duino 小六足機器人 DIY 課程教材

翻到另一面,我們準備將伺服機十字型配件盤裝在伺

服機輸出軸上:

Page 170: 86Duino 小六足機器人 DIY 課程教材

在裝上配件盤之前,我們先要對伺服機做中點歸零

中點歸零後的伺服機,可確保足部最大的可動範圍為正負

90度 (共 180 度),如下圖:

中點

旋轉範圍:180 度

Page 171: 86Duino 小六足機器人 DIY 課程教材

伺服機歸零程式 下載單一伺服機歸零的 sketch 程式:

http://www.roboard.com/temp/servo.zip

Page 172: 86Duino 小六足機器人 DIY 課程教材

86DuinoZero 歸零程式 #include <Servo86.h> // 使用 Servo86 函式庫 Servo myservo1; // 初始化 Servo 物件 void setup() { // 設定 Servo 腳位為 2 myservo1.attach(2); // 送出 1500us 的 PWM 信號,使伺服機歸零至中點 myservo1.write(1500); } void loop() {}

Page 173: 86Duino 小六足機器人 DIY 課程教材

86DuinoOne 歸零程式 #include <Servo86.h> // 使用 Servo86 函式庫 Servo myservo1; // 初始化 Servo 物件 void setup() { // 設定 Servo 腳位為 21 myservo1.attach(21); // 送出 1500us 的 PWM 信號,使伺服機歸零至中點 myservo1.write(1500); } void loop() {}

Page 174: 86Duino 小六足機器人 DIY 課程教材

燒錄 Sketch 程式至 86Duino 下載 86Duino Coding 210,將 sketch 燒錄至

86Duino

http://www.86duino.com/86Duino_IDE/86Duino_C

oding_210_WIN.zip

Page 175: 86Duino 小六足機器人 DIY 課程教材

燒錄完成後, 86Duino 會立刻從指定腳位送出 duty

為 1500us 的 PWM,接著我們要將伺服機與

86Duino 連接起來。

伺服機連接 86Duino 的步驟

86DuinoZero

1. 將 PWM 信號線連接至轉接板

2. 伺服機插上轉接板

86DuinoOne

直接將伺服機連接線接上 86DuinoOne 的伺服機座

Page 176: 86Duino 小六足機器人 DIY 課程教材

86DuinoZero 上的連接方法 將 PWM 信號線連接至轉接板

拿出轉接板 1 塊

拿出 3 條杜邦線 (紅、黑、黃顏色各一條)

杜邦線 轉接板

Page 177: 86Duino 小六足機器人 DIY 課程教材

轉接板上面的腳位安排如下:

12 組 RC Servo 插座 電源/鋰電池插座

※ 電源/鋰電池插座旁各有一個的紅點和黑點,紅點代表電源,黑點代表地

Page 178: 86Duino 小六足機器人 DIY 課程教材

轉接板的電路如下圖:

:PWM 信號腳,各別獨立

:電源線,彼此相連

:地線,彼此相連

左圖對應轉接板背面

電源/鋰電池插座

轉接板背面

Page 179: 86Duino 小六足機器人 DIY 課程教材

將信號排線和電源線插到轉接板上

在歸零程式中使用了第 2 腳位做為 PWM 信號輸出腳,

所以我們將杜邦線連接如下圖:

2 5V

GND

Page 180: 86Duino 小六足機器人 DIY 課程教材

插上需要歸零的伺服機 伺服機的橘線,為 PWM 信號線

,需接在杜邦線下方 (如右圖)

伺服機的紅線接在電源 (5V)

伺服機的黑線接地 (GND)

伺服機橘線要連接在 PWM 信號排線下方

杜邦線

Servo橘線

Page 181: 86Duino 小六足機器人 DIY 課程教材

86DuinoOne 上的連接方法 歸零程式中使用了第 21 腳位做為 PWM 信號輸出腳,

我們直接將伺服機連接至 86DuinoOne 即可:

Page 182: 86Duino 小六足機器人 DIY 課程教材

將 86Duino 接上電源/電池後,伺服機會立即轉到中

點位置,此時請用奇異筆標記如下位置,以利後續不

插電時辨識:

標記線

Page 183: 86Duino 小六足機器人 DIY 課程教材

標記完成後,請拔除伺服機連接線,讓伺服機停止出

力:

後面步驟即將鎖上配件盤,如果不拔除伺服機連接線,

伺服機會一直保持在中點位置,此時若用螺絲起子將配

件盤鎖上,鎖上的力道容易導致伺服機內部減速機崩牙。

※ 崩牙後的 SG-90 伺服機將永遠無法順利轉動,只能更換新的伺服機

Page 184: 86Duino 小六足機器人 DIY 課程教材

將十字型配件盤的短軸對齊中點 (標記線),套在伺服

機輸出軸上,如下圖所示:

將配件盤的短軸對齊標記線 套在伺服機輸出軸上

標記線

十字配件盤短軸 對齊標記線

十字配件盤短軸

Page 185: 86Duino 小六足機器人 DIY 課程教材

用 4mm 長度的螺絲 2 根,鎖緊 A_arm_bottom

使用伺服機配件包中的自攻螺絲鎖緊十字配件盤

長度4mm 螺絲

伺服機配件包

中的自攻螺絲

Page 186: 86Duino 小六足機器人 DIY 課程教材

用斜口鉗修飾配件盤,剪除較長的邊,形成下圖:

Page 187: 86Duino 小六足機器人 DIY 課程教材

用長度 8mm 螺絲 2 顆鎖上 leg 零件,最後完成圖如

下:

長度 2mm 螺絲

Leg

Page 188: 86Duino 小六足機器人 DIY 課程教材

組裝影片

Page 189: 86Duino 小六足機器人 DIY 課程教材

86小六足 DIY 流程 使用 86Duino Enjoy 3D 印表機列印小六足零件

列印件前處理

組合足部

組合身體

Page 190: 86Duino 小六足機器人 DIY 課程教材

組裝概述 將 6 顆伺服機置入 body_bottom 零件中

蓋上 body_top 零件,用螺絲固定

鎖上 6 個已完成的足部、86Duino 開發板

連接並整理外露的伺服機連接線,完成 86小六足

Page 191: 86Duino 小六足機器人 DIY 課程教材

將 6 顆伺服機置於 body_bootom,如下圖:

Page 192: 86Duino 小六足機器人 DIY 課程教材

將落在外側的伺服機連接線,各別拉至身體中央,統

一從一端伸出 (這麼做是為了方便後續整線):

完成圖 將伺服機連接線拉進身體 並從一端伸出

Page 193: 86Duino 小六足機器人 DIY 課程教材

準備蓋上 body_top 零件

Page 194: 86Duino 小六足機器人 DIY 課程教材

先將 body_top 零件旋轉如下圖:

正確方向 錯誤方向

Page 195: 86Duino 小六足機器人 DIY 課程教材

蓋上 body_top 零件

Page 196: 86Duino 小六足機器人 DIY 課程教材

用 6 顆長度15mm 的螺絲鎖緊 body_top,如下圖紅

圈處:

長度 15 mm 螺絲

Page 197: 86Duino 小六足機器人 DIY 課程教材

使用鑽孔刀對一字型配件盤鑽孔 (由中心數來第二個

孔,如下圖),一共要對 6 個一字型配件盤鑽孔:

一字型配件盤上要鑽孔的孔位 鑽孔完成

Page 198: 86Duino 小六足機器人 DIY 課程教材

將 6 顆伺服機分別歸零至中點,並畫上標記線

將一字型配件盤照下圖方式套至伺服機輸出軸:

45 度 45 度

45 度 45 度

※ 身體邊角上的伺

服機,每個一字型

配件盤套上伺服機

時, 需要與左圖中的

紅色虛線呈 45 度

Page 199: 86Duino 小六足機器人 DIY 課程教材

用 3 顆 2mm x 4mm 螺絲固定足部 (2 顆固定配件盤,

另一顆固定 linker 與 body_bottom)

以自攻螺絲鎖緊伺服機一字型配件盤

長度 4mm 螺絲 長度 4mm 螺絲

長度 4mm 螺絲

伺服機自攻螺絲

Page 200: 86Duino 小六足機器人 DIY 課程教材

用斜口鉗將一字型配件盤凸出的部分剪除,增加美觀,

如下圖:

Page 201: 86Duino 小六足機器人 DIY 課程教材

6 個足部全部鎖上後,如下圖:

Page 202: 86Duino 小六足機器人 DIY 課程教材

組合 86DuinoZero 小六足

Page 203: 86Duino 小六足機器人 DIY 課程教材

對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲固定

86DuinoZero 於 body_top 上

裝上 86DuinoZero 開發板

Page 204: 86Duino 小六足機器人 DIY 課程教材

用 2 顆 2mm x 4mm 螺絲固定擴充板:

長度 4mm 螺絲

Page 205: 86Duino 小六足機器人 DIY 課程教材

使用杜邦線連接 86DuinoZero 與擴充板

PWM 信號線、電源線、地線共 14 條,擴充板上的腳位對應

如下:

2 3 4 5

6 7 8 9

10 11 12 13

電源 (VIN)

地 (GND)

Page 206: 86Duino 小六足機器人 DIY 課程教材

使用 12 條黃色 (PWM)、1 條紅色(VIN)、1 條黑色

(GND)的杜邦線連接 86DuinoZero 和轉接板:

Page 207: 86Duino 小六足機器人 DIY 課程教材

將足部的伺服機連接線穿過 body_bottom 下方的孔

足部伺服機連接線

Page 208: 86Duino 小六足機器人 DIY 課程教材

連接伺服機與擴充板 86小六足伺服機編號與擴充板上的腳位對應如下:

1 2

3 4

9 10

11 12

Page 209: 86Duino 小六足機器人 DIY 課程教材

將所有伺服機連接線連接至擴充板上:

Page 210: 86Duino 小六足機器人 DIY 課程教材

組合 86DuinoOne 小六足

Page 211: 86Duino 小六足機器人 DIY 課程教材

對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲將

86DuinoOne 固定於 body_top 零件上

裝上 86DuinoOne 開發板

Page 212: 86Duino 小六足機器人 DIY 課程教材

將足部伺服機連接線穿過 body_bottom 下方的孔

足部伺服機連接線

Page 213: 86Duino 小六足機器人 DIY 課程教材

連接伺服機與擴充板 86小六足伺服機編號與擴充板上的腳位對應如下:

1 2

3 4

9 10

11 12

Page 214: 86Duino 小六足機器人 DIY 課程教材

將所有伺服機連接線連接至 86DuinoOne 上:

Page 215: 86Duino 小六足機器人 DIY 課程教材

我們將外露的連接線稍做整理,讓 86小六足看起來更

美觀。

無論使用 86DuinoZero 或 86DuinoOne,整線方法都

相同,下面我們以 86DuinoZero 為例,介紹整線方法。

伺服機連接線整理

Page 216: 86Duino 小六足機器人 DIY 課程教材

先將外露的伺服機連接線拉至 86小六足身體內,如下

圖:

將伺服機連接線塞進 86小六足身體

連接線整理

Page 217: 86Duino 小六足機器人 DIY 課程教材

將伺服機連接線來回折短,用束線帶固定在兩旁支架:

折短的 伺服機 連接線

束線帶

示範影片

Page 218: 86Duino 小六足機器人 DIY 課程教材

用 束線帶固定完成後,盡量讓下圖紅框處沒有伺服機

連接線穿過,因為這是未來要放置鋰電池的空間

最後完成如下圖:

鋰電池空間

Page 219: 86Duino 小六足機器人 DIY 課程教材

置入鋰電池後的完成圖

7.4V 850mA 鋰電池

Page 220: 86Duino 小六足機器人 DIY 課程教材

組裝身體影片

Page 221: 86Duino 小六足機器人 DIY 課程教材

附錄- 接上鋰電池 接上鋰電池前,請注意

7.4V 鋰電池充飽時,一般電壓是 8.2V ~ 8.4V,86小六

足使用的 SG-90 伺服機,操作電壓為 4.8V ~ 7.2 V。如

果直接接上充飽的鋰電池,會因過高的電壓造成 SG-90

運作時產生不規律抖動,再接上鋰電池之前,請先用三

用電表量測電壓,待電壓下降至 7.2V ~ 7.4V 時,再接

上 86小六足。

Page 222: 86Duino 小六足機器人 DIY 課程教材

鋰電池放電的方法

閒置鋰電池,等待內部自放電至適合電壓 (缺點:等待時間長)

接上 20 歐姆 40W 的水銀電組主動降壓 (約 20 分鐘後降到適合電

壓)

Page 223: 86Duino 小六足機器人 DIY 課程教材

除了將鋰電池放電,我們也可以直接用充飽的鋰電池,透

過 DC to DC 降壓模組為 86小六足供電

由於 86小六足身上的 12 顆 SG-90 啟動電流會超過 3A,

建議購買提供電流超過 5A 的 DC-DC 降壓模組

DC-DC 降壓模組

※ 輸出電壓可透過模組

上的可變電阻調整

Page 224: 86Duino 小六足機器人 DIY 課程教材

** 鋰電池的電源線,紅線必需朝著伺服機,黑線朝外,不可弄反!!

鋰電池腳位

鋰電池電源線

連接鋰電池的方法 – 86DuinoZero

Page 225: 86Duino 小六足機器人 DIY 課程教材

連接鋰電池的方法 – 86DuinoOne 將 2 pins 的杜邦針腳鎖在綠色端子台上:

Page 226: 86Duino 小六足機器人 DIY 課程教材

連接鋰電池的方法 – 86DuinoOne

鋰電池電源線

依照下圖方向插上鋰電池電源線:

紅線接 +

黑線接 - +

-

Page 227: 86Duino 小六足機器人 DIY 課程教材

Arduino/86Duino

控制伺服機方式簡介

Page 228: 86Duino 小六足機器人 DIY 課程教材

Arduino 控制伺服機: 使用 Servo 函式庫 attach() - 初始化 Servo pin

write() - 控制 Servo 轉動至 0 ~ 180 度

writeMicroseconds()- 輸入 PWM duty 來控制 Servo 角度

read() - 讀 Servo 目前角度

attached() - 檢查 Servo pin 是否 attach 過

detach() - 關閉 Servo pin

** Servo 函式庫使用方法大部分 Arduino 書籍皆有介紹,此處不再贅述**

Page 229: 86Duino 小六足機器人 DIY 課程教材

範例程式 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(900); delay(1000); myservo.write(2000); delay(1000); myservo.write(900); delay(1000); myservo.write(2000); } void loop() {}

Demo 影片

伺服機以最快速度轉動,無法直接控制速度

Page 230: 86Duino 小六足機器人 DIY 課程教材

Servo 函式庫的改良: 86Duino Servo86 函式庫 可設定每顆伺服機轉動速度

可同步控制多顆伺服機轉動,並且在同時間內到達目標位置

可支援最多 45 顆伺服機同步控制

改善 PWM Duty 抖動(jitter)的問題

支持以 Frame 為基礎的機器人動作流程控制方法

Page 231: 86Duino 小六足機器人 DIY 課程教材

範例程式 #include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(900); delay(1000); myservo.setVelocity(1100); myservo.write(2000); delay(1000); myservo.setVelocity(550); myservo.write(900); delay(2000); myservo.setVelocity(2200); myservo.write(2000); } void loop() {}

Demo 影片

伺服機轉動速度簡易可控

Page 232: 86Duino 小六足機器人 DIY 課程教材

PWM Duty 抖動現象 (1/2) 由於舊的 Arduino Servo 函式庫裡 PWM 是用軟體模擬的

方式來實現,所以會出現以下情形:

實際輸出的 PWM duty 時間會有抖動現象 ( jitter)

當使用的 PWM channel 超過 12 組, Arduino 會啟用

更多組 Timer, 多個 Timer 中斷彼此干擾, 有時會惡化

PWM jitter 現象

Page 233: 86Duino 小六足機器人 DIY 課程教材

PWM Duty 抖動現象 (2/2) 以示波器量測 Arduino 輸出的 PWM duty,如下圖:

因抖動造成的誤差範圍與 CPU 特性及軟體模擬算法有關

抖動現象

Page 234: 86Duino 小六足機器人 DIY 課程教材

以 Arduino UNO 為例, 觀察 PWM 抖動情況

+

示波器 Arduino UNO

波型抖動 實況影片:

Page 235: 86Duino 小六足機器人 DIY 課程教材

PWM 抖動現象的影響 在命令解析度比較高的 RC Servo 上, 會造成 servo 輸出軸

實際的抖動

一般模型用的低價 RC Servo 解析度較低, 受 PWM 抖動現

象的影響不大

Arduino UNO

+

KONDO KRS4014 Servo

Servo抖動實況影片

Page 236: 86Duino 小六足機器人 DIY 課程教材

在 Arduino 和 86Duino 上只使用 1 個 servo pin, 並量測

輸出的 PWM duty 與目標值的誤差,所測得的數據如下:

各板子的 PWM Duty 抖動實測 (1/2)

板子 目標 duty

實際量測值 duty 誤差範圍 最小 最大

Arduino UNO 1000 us 1000.04 us 1006.42 us 約 6 ~ 7 us

Arduino Leonardo

1000 us 1000.04 us 1007.92 us 約 7 ~ 8 us

Arduino DUE 1000 us 998.200 us 998.280 us 約 1 ~ 2 us

Arduino Mega2560

1000 us 1001.12 us 1008.87 us 約 8 ~ 9 us

86Duino 1000 us 998.64 us 1001.1 us 約 1 ~ 2 us **

** 在 86Duino 有標註硬體 PWM 功能的 I/O pin 上, 誤差則是 0

Page 237: 86Duino 小六足機器人 DIY 課程教材

在 Arduino DUE / Mega2560 和 86Duino 上啟用 45 組

servo pins, 並量測其中一個 pin 輸出的 PWM duty 與目

標值的誤差, 所測得的數據如下表所示:

各板子的 PWM Duty 抖動實測 (2/2)

板子 目標 duty 實際量測值 duty 誤差範圍

最小 最大

Arduino DUE 1000 us 998.05 us 1004.68 us 約 2 ~ 5 us

Arduino Mega2560

1000 us 1001.09 us 1076.96 us 約 1 ~ 77 us

86Duino 1000 us 998.70 us 1001.31 us 約 1 ~ 2 us

Arduino 的 Servo 函式庫在超過 12 組 channels 時, 會啟用 2 組以上 Timer 中斷, 以上表格可以看出多組 Timer 中斷互相影響所造成的 jitter 惡化情形

Page 238: 86Duino 小六足機器人 DIY 課程教材

用動畫的概念控制機器人動作

Page 239: 86Duino 小六足機器人 DIY 課程教材

動畫播放原理 (1/3) 翻書動畫:https://www.youtube.com/watch?v=oOgHzcrVG1s

Page 240: 86Duino 小六足機器人 DIY 課程教材

動畫播放原理 (2/3)

Page 241: 86Duino 小六足機器人 DIY 課程教材

動畫播放原理 (3/3)

Page 242: 86Duino 小六足機器人 DIY 課程教材

Frame (幀) 的概念 機器人的動作編輯,也可以視為在編輯圖片中人物的

動作,一個動作(畫面)稱為 ”幀 (Frame)”,多個

靜止動作透過 Servo86 函式庫連續播放出來,機器

人就會動起來了。

在一些專用的機器人控制板中,Frame 有時候被成為

Pose (姿勢)

Page 243: 86Duino 小六足機器人 DIY 課程教材

機器人動作編輯與播放 編輯 Frame 1 編輯 Frame 2 編輯 Frame 3 編輯 Frame 4 編輯 Frame 5

播放全部 Frames 影片:

Page 244: 86Duino 小六足機器人 DIY 課程教材

動畫 Frame 每張圖片上的人物姿勢

機器人 Frame 伺服機目標位置列表

Frame1: 1500, 1300, 1200, 900, 1765, 1809, 1243, 1200,990, 754, 2000 …

Frame2: 1340, 1200, 1543, 2178, 1222, 1456, 1723, 1111, 954, 1245…

Frame3: 1000, 2345, 2000, 800, 1200, 2019, 2430, 1432, 1270, 955, 1560…

Page 245: 86Duino 小六足機器人 DIY 課程教材

86ME 機器人動作編輯器簡介

Page 246: 86Duino 小六足機器人 DIY 課程教材

86ME 機器人專用動作編輯器,編輯機器人動作 Frame 變得

更輕鬆,可以自動產生使用 Servo86 函式庫的

86Duino 的程式,省掉我們寫程式的工夫

是一套綠色、開源軟體,解開可立即使用,無須安裝,

原始碼可以根據自己的喜好修改

Page 247: 86Duino 小六足機器人 DIY 課程教材

使用 86ME 的基礎觀念 Frame

各個伺服機角度所組成的一個姿勢

Motion

展現一連串 frame 的整個過程

homeframe

機器人上電之後所會展現的第一個 frame,編輯各個 frame 時的初始值也會同 homeframe

offset

機器人實際的 homeframe 難免會因為組裝上有誤差而與自己的理想值有偏移,這個偏移量即為 offset

Page 248: 86Duino 小六足機器人 DIY 課程教材

86ME 功能簡介 支援線上調整 offset 與 homeframe

支援線上調整 frame,讓使用者能立即看到編輯結果

並即時調整

支援編輯多個動作 (motion),並且可即時播放動作的

連續 frame

可設定 motion 的觸發條件,並且可以產生 86Duino

的 sketch 程式

Page 249: 86Duino 小六足機器人 DIY 課程教材

86ME Demo 影片 https://www.youtube.com/watch?v=LZhoCQ4E-N4

Page 250: 86Duino 小六足機器人 DIY 課程教材

86ME 安裝和使用教學

Page 251: 86Duino 小六足機器人 DIY 課程教材

86ME 安裝 1. 下載最新版 86ME:

http://www.86duino.com/index.php?page_id=8923&lang=TW

2. 解壓縮檔案,進入 86ME 資料夾後檢查有下列檔案即完成安裝

3. 目前僅支援 Windows 環境下執行,且須要有 .NET Framework 3.5 以上的環境才能正常啟動 86ME

Page 252: 86Duino 小六足機器人 DIY 課程教材

86ME 與 86Duino 的溝通方式

USB 線

PC 上的 86ME

燒錄 86Duino

86ME 韌體程式

Page 253: 86Duino 小六足機器人 DIY 課程教材

燒錄 86ME 的韌體至 86Duino 使用一條 USB 線將電腦與 86Duino 連接起來

Page 254: 86Duino 小六足機器人 DIY 課程教材

燒錄 86ME 的韌體至 86Duino 1. 打開 86Duino Coding IDE

2. 選擇工具 > 板子 > 86Duino Zero

3. 選擇工具 > COM port > (86Duino 的虛擬連接埠)

4. 選擇 檔案 > 範例 > Servo86 > MotionEditor

Page 255: 86Duino 小六足機器人 DIY 課程教材
Page 256: 86Duino 小六足機器人 DIY 課程教材

燒錄 86ME 的韌體至 86Duino 按下燒錄按鈕,之後看到 Uploading the binary sketch …

Done 訊息,說明燒錄已完成

燒錄

完成

Page 257: 86Duino 小六足機器人 DIY 課程教材

開啟 86ME 韌體燒錄完成後,關閉 86Duino IDE,滑鼠左鍵雙擊

86ME,此時會看到連接埠選擇視窗

選擇 86Duino 虛擬連接埠,也可以選 Auto 由 86ME

自動選取

自動抓取 COM port 離線模式 選定一個 COM port

Page 258: 86Duino 小六足機器人 DIY 課程教材

新增專案 (1/6) 選擇好連線模式之後,會出現主畫面如下:

Page 259: 86Duino 小六足機器人 DIY 課程教材

新增專案 (2/6) 此時大部份的控制鍵是不能使用或無效的,要在畫面

左上方點選新增一個專案或是讀取一個專案後才能再

進行後續動作:

新增專案 讀取專案

Page 260: 86Duino 小六足機器人 DIY 課程教材

新增專案 (3/6) 新 增 專 案 後 會 彈 出 Robot

Configuration 介面。這個介面

是用來設定所使用的 86Duino

型號、機器人的圖片、各 Pin 腳

的伺服機型號,以及設定 Home

的位置與各個伺服機的 Offset。

而這些設定也都能夠透過 Robot

Configuration 再調整

Page 261: 86Duino 小六足機器人 DIY 課程教材

新增專案 (4/6)

設定 86Duino 型號

設定伺服機型號

設定是否同步、Offset、 歸 Home 時的角度

Page 262: 86Duino 小六足機器人 DIY 課程教材

新增專案 (5/6) 86小六足有十二個自由度,所以至少要選用 12 個伺

服機才能充分發揮小六足動作

範例中,86DuinoZero 規劃給 86小六足使用的腳位

為 2~13,型號為 TOWERPRO_SG90

這時利用線上調整功能將 Home 點設定好(調整

offset),讓小六足每隻腳都能夠接觸地面,設定完

成的部分畫面如下:

Page 263: 86Duino 小六足機器人 DIY 課程教材

盡量呈現水平

觸地

Page 264: 86Duino 小六足機器人 DIY 課程教材

新增專案 (6/6) 最下方的 Load Robot Picture 按鈕可以讓使用者載入

機器人圖片,方便對應機器人和伺服機之間的位置:

Page 265: 86Duino 小六足機器人 DIY 課程教材

1. 2.

按下 OK 後,會被載入指定圖片

載入圖片功能:

Page 266: 86Duino 小六足機器人 DIY 課程教材

完成新增專案 設定完成後按下 OK,接著 86ME 會開啟 Motion

Name 欄位可供使用者建立 Motion

Page 267: 86Duino 小六足機器人 DIY 課程教材

用 86ME 編輯一個 Frame

Page 268: 86Duino 小六足機器人 DIY 課程教材

編輯 Frame (1/6) 1. 在畫面右邊的 Motion Name 欄位中輸入字串,替動作

取名

2. 按下上方的 Add Motion 按鈕建立 Motion,Motion 可

以含有許多不同的 Frame 或其他 Action 來組成一個完

整的動作

1

2

Page 269: 86Duino 小六足機器人 DIY 課程教材

編輯 Frame (2/6) 3. 在 Action List 空白處按滑鼠右鍵

4. 選擇 Add new action at the first field

5. 選擇 Frame

選擇 Frame

Page 270: 86Duino 小六足機器人 DIY 課程教材

編輯動作 (3/6) 新增一個 Frame 後,你會在左邊的空白區塊看到以

CH<num>開頭的控制項出現在左邊的空白區域,而

num 即為伺服機腳位編號,編號後面接的數字是 PWM

duty,數字後面的拉桿可以調整 PWM duty 大小,一共

可看到三個這樣的控制項

Page 271: 86Duino 小六足機器人 DIY 課程教材
Page 272: 86Duino 小六足機器人 DIY 課程教材

編輯動作 (4/6) 調整 PWM duty:可以手動輸入或是以滑鼠左鍵拉動拉桿

來調整

Page 273: 86Duino 小六足機器人 DIY 課程教材

編輯動作 (5/6) 為了要讓使用者方便對應馬達的編號與實際的位置,使用

者可以在 Robot Configuration 中載入機器人圖片,空白

區域底圖會設為此圖

滑鼠指到 CH 字樣時會出現 圖示,可以把整個控制項拖

拉到圖片中機器人關節旁邊,這樣就不用花時間去記憶伺

服機和腳位的對應關係,直接調整關節旁的伺服機即可

Page 274: 86Duino 小六足機器人 DIY 課程教材

滑鼠左鍵拖曳

Page 275: 86Duino 小六足機器人 DIY 課程教材

編輯動作 (6/6) 線上調整 Frame:勾選左上角的 Sync,此時當你拖拉光

桿來改變 PWM duty 的時候,伺服機也會同步跟著動作

Page 276: 86Duino 小六足機器人 DIY 課程教材

編輯完成 利用線上同步編輯伺服機角度的功能,可以方便的調

整一個 Frame

當我們調整好 12 個伺服機角度時,第一個 Frame 就

完成了

Page 277: 86Duino 小六足機器人 DIY 課程教材

完成一個 Motion

Page 278: 86Duino 小六足機器人 DIY 課程教材

新增 Frame (1/3) 只有一個 Frame 無法完成前進、後退等等的動作,我

們需要新增更多 Frame 來完成一個 Motion

1) 在剛剛 Frame 0 的下方再新增一個 Frame 1

2) 滑鼠右鍵選擇

add new action at the next field -> frame

Page 279: 86Duino 小六足機器人 DIY 課程教材

新增 Frame (2/3) 做為範例,我們先編輯 4 個測試動作,如下圖所示:

Page 280: 86Duino 小六足機器人 DIY 課程教材

新增 Frame (3/3) 另一個新增方式:Duplicate frame

會複製所選 Frame 並新增在下方,若下個 Frame 大部

分的伺服機角度與上個 Frame 相同,就可以利用此功

能來新增 Frame

Page 281: 86Duino 小六足機器人 DIY 課程教材

測試動作

Page 282: 86Duino 小六足機器人 DIY 課程教材

測試動作 (1/3) 有了 4 個 Frame,86ME 右上方像音樂播放器的按鈕,

可以幫助我們實現連續 Frame 的播放、暫停和停止:

Page 283: 86Duino 小六足機器人 DIY 課程教材

測試動作 (2/3) 播放:全部 Frame 會從頭執行到底,共一次

暫停:保持目前播放到的位置並暫停播放,再按一次

播放時會從上次暫停的地方開始

停止:從目前播放到的位置中斷但不記住位置

Page 284: 86Duino 小六足機器人 DIY 課程教材

測試動作 (3/3)

從頭到底播放一次 暫停動作,再按播放後會從暫停處繼續往下播放至底

停止播放

暫停 停止

Page 285: 86Duino 小六足機器人 DIY 課程教材

循環播放

Page 286: 86Duino 小六足機器人 DIY 課程教材

循環播放 我們要用到兩個元素: Flag 和 Goto

Flag & Goto 必須成對才會有作用,流程如下:

播放到 Goto 時

是否有同名的 Flag

不跳轉,繼續播放

依照 Goto 所設定之條件判斷是否

跳轉

回到同名的 Flag 繼續播放

播放

Page 287: 86Duino 小六足機器人 DIY 課程教材

Flag 新增 Flag

設定 Flag Name

選擇 Flag

Page 288: 86Duino 小六足機器人 DIY 課程教材

Goto 新增 Goto

選擇 Goto

Page 289: 86Duino 小六足機器人 DIY 課程教材

點擊 Goto 後,左邊空白處會出現設定項目:

Target Flag Name:選擇要跳到哪個 Flag

Enable Goto:選擇是否啟用 Goto 功能

Loop Infinitely:選擇是否啟用循環功能

Page 290: 86Duino 小六足機器人 DIY 課程教材

設定無限循環播放

Target Flag Name:選擇要跳到哪一個目標 Flag

Enable Goto:打勾

Loop Infinitely:打勾

Page 291: 86Duino 小六足機器人 DIY 課程教材
Page 292: 86Duino 小六足機器人 DIY 課程教材

設定有限循環播放 將 Loop Infinitely 打勾取消,下方的 Number of

loops 的數值可以決定要 Goto 幾次後停止播放

以下圖為例, Number of loops 填 2,這邊的次數為

Goto 會跳轉的次數,並不是整個 Motion 的總執行

次數

Page 293: 86Duino 小六足機器人 DIY 課程教材

編輯第二個 Motion

Page 294: 86Duino 小六足機器人 DIY 課程教材

新增 Motion 1. 打上新的 Motion 名稱,按下 Add Motion 按鈕

2. 此時 Motion name 下拉式選單的內容也會跟著更

新,如下圖

Page 295: 86Duino 小六足機器人 DIY 課程教材

Motion 觸發設定

Page 296: 86Duino 小六足機器人 DIY 課程教材

觸發概念簡介 觸發的概念即利用某些控制方式來驅動小六足的動作

觸發

Page 297: 86Duino 小六足機器人 DIY 課程教材

設定觸發方式 86ME 允許每個 Motion 設定一個觸發條件,目前共

有四種方式:

Auto

Keyboard

Bluetooth

PS2 Controller

Page 298: 86Duino 小六足機器人 DIY 課程教材

第一個觸發方式:Auto Always On

永遠觸發目前所選的動作

Always Off

永不觸發目前所選的動作

Start Up

目前所選的動作只會在開機後執行一次

Page 299: 86Duino 小六足機器人 DIY 課程教材

第二個觸發方式:Keyboard Keyboard

Key:選擇以哪個按鍵觸發

Type:何種狀態下觸發,分為

First Press(第一次按下)

Pressed(一直按住)

Release(放開)

Page 300: 86Duino 小六足機器人 DIY 課程教材

第三個觸發方式:Bluetooth Bluetooth

Key:選擇以甚麼樣的字元觸發

Baud Rate:選擇藍芽模組所採

用的 Baud Rate

Used Port:選擇藍牙模組是連

接在 86Duino 的哪個 Port 上

Page 301: 86Duino 小六足機器人 DIY 課程教材

第四個觸發方式:PS2 搖桿 PS2 搖桿

Key:選擇搖桿上的按鈕以用來觸

發動作

Type:與 Keyboard 相同

DAT、CMD、ATT、CLK 為 PS2

接收器接上 86Duino 時需要接的

腳位,須選擇自己接線時所用的

Pin 腳

Page 302: 86Duino 小六足機器人 DIY 課程教材

啟用觸發條件 設定完成的觸發條件不會立即反應在 86Duino 上,我

們要使用自動產生 sketch 的按鈕,並且將產生的

sketch 程式燒錄至 86Duino 才會起作用。

Page 303: 86Duino 小六足機器人 DIY 課程教材

產生 86Duino sketch 程式

Page 304: 86Duino 小六足機器人 DIY 課程教材

產生 86Duino Sketch (1/3) 86ME 可以將編輯好的所有 Motion 產生成 86Duino

Sketch,燒錄產生的 Sketch 進 86Duino 後,86Duino

會根據觸發條件判斷是否操作這個 Motion

86ME 提供兩種產生 Sketch 的方式

• Frame 檔和 sketch 分開

• 所有 Frame 直接寫在 sketch 內

Page 305: 86Duino 小六足機器人 DIY 課程教材

產生 86Duino Sketch (2/3) • Frame 檔與 sketch 分開:

• 按下下圖中的第一個按鈕,會產生 Offset 檔、86Duino Frame

檔與 sketch 程式 (.ino 檔)

• Offset 檔、 Frame 檔必須放在 SD 卡中,sketch 執行時會自動

讀取

Page 306: 86Duino 小六足機器人 DIY 課程教材

產生 86Duino Sketch (3/3) • 所有 Frame 直接寫在 sketch 內(建議方式,不需 SD 卡)

• 按下下圖中第二個按鈕,只會產生一個 sketch 程式 (.ino 檔),

Offset 與 Frame 皆已寫好在程式中

• 用此方式可直接將產生的程式燒錄進 86Duino,不需要 SD 卡

Page 307: 86Duino 小六足機器人 DIY 課程教材

認識六足 –

六足機構原理

Page 308: 86Duino 小六足機器人 DIY 課程教材

六足機構原理

足部的機構設計

Serial 機構

parallel 機構

工作空間的考量

Page 309: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 昆蟲單足的腿部構造

Page 310: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 一隻腳可以達到 6 DOF

機構設計必須考慮單足的自由度(簡化)

自由度的多寡會影響工作空間的大小及靈活性

機構設計必須考慮工作空間的大小

Page 311: 86Duino 小六足機器人 DIY 課程教材

足部 serial 機構設計 單足 1 個自由度的設計 即使是 1 DOF,靈活性還是很好

影片網址:http://www.youtube.com/watch?v=a0NFrA-Nx4Y

Page 312: 86Duino 小六足機器人 DIY 課程教材

足部 serial 機構設計 單足 2 個自由度的設計

影片網址: https://www.youtube.com/watch?v=MMrbYbdmvqM

Page 313: 86Duino 小六足機器人 DIY 課程教材

足部 serial 機構設計 單足 3 個自由度的設計

影片網址: http://www.youtube.com/watch?v=0jyBiECoS3Q

Page 314: 86Duino 小六足機器人 DIY 課程教材

足部 serial 機構設計 單足 4 個自由度的設計

影片網址: http://www.youtube.com/watch?v=6J9GKPKTyb8

Page 315: 86Duino 小六足機器人 DIY 課程教材

足部 parallel 機構設計 單足 2 個自由度的設計

平行機構 影片網址: http://www.youtube.com/watch?v=RVqn-UZahpw

Page 316: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 Serial 機構的特性

腿節長度(L)是固定的

角度(β)需要脛節馬達的帶動才會變化

腿節與脛帶的動作是獨立的

L

β

Page 317: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 下列以 DMP Hexapod 示範

腿節長度由短變長

腿節的動作帶動脛帶的動作

只轉動腿節的馬達,脛節的馬達是不動的

足部夾角由小變大

Page 318: 86Duino 小六足機器人 DIY 課程教材

足部機構設計

這顆馬達是沒有動作的

只會轉動這 顆馬達

Page 319: 86Duino 小六足機器人 DIY 課程教材

足部機構設計

Page 320: 86Duino 小六足機器人 DIY 課程教材

足部機構設計

Page 321: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 Parallel 機構腿節長度不固定 增加六足機器人運動學計算的難度

Page 322: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 Parallel 機構腿節的動作可以帶動脛帶的動作

可以考慮脛節少負載一個馬達

編輯六足機器人的歩行變得容易

編輯動作可以不用考慮脛節馬達的位置

Page 323: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 Parallel 機構工作空間的受限

腿部的位置會影響脛部的工作空間

脛節馬達轉動的角度大於 180 度

Page 324: 86Duino 小六足機器人 DIY 課程教材

足部機構設計

脛節馬達轉動的角度約 100 度

Page 325: 86Duino 小六足機器人 DIY 課程教材

足部機構設計 腿部的工作空間會受 parallel 機構影響

脛節馬達轉動的角度約 120 度

Page 326: 86Duino 小六足機器人 DIY 課程教材

Parallel vs. Serial

Parallel 機構 Serial 機構

工作空間 較小 較大

動作編輯 容易 較難

運動學計算 較繁瑣困難 較直接簡單

Page 327: 86Duino 小六足機器人 DIY 課程教材

認識六足 –

六足步態簡介

Page 328: 86Duino 小六足機器人 DIY 課程教材

步態類型 Tripod 步態 Wave (Metachronal) 步態 Ripple 步態

Page 329: 86Duino 小六足機器人 DIY 課程教材

Tripod Gait 三足同步的方式 (L1,R2,L3) -> (R1,L2,R3) -> (L1,R2,L3) -> …

步徏轉移的時間較短 行進的速度較快

Page 330: 86Duino 小六足機器人 DIY 課程教材

Tripod Gait (影片)

影片網址: https://www.youtube.com/watch?v=O4rff7KnkeA

Page 331: 86Duino 小六足機器人 DIY 課程教材

Wave Gait 單足行進的方式 L3 -> L2 -> L1 -> R3 -> R2 -> R1 -> L3 -> …

步徏轉移的時間較長 行進的速度較慢

Page 332: 86Duino 小六足機器人 DIY 課程教材

Wave Gait (影片)

影片網址: http://www.youtube.com/watch?v=6F5VSLm3qkY

Page 333: 86Duino 小六足機器人 DIY 課程教材

Ripple Gait 單足行進的方式 L3 -> R1 -> L2 -> R3 -> L1 -> R2 -> L3 -> …

步徏轉移的時間較長 行進的速度較慢

Page 334: 86Duino 小六足機器人 DIY 課程教材

Ripple Gait (影片)

影片網址: http://www.youtube.com/watch?v=5ro_1-6ADQM

Page 335: 86Duino 小六足機器人 DIY 課程教材

認識六足 –

DMP 小六足

Page 336: 86Duino 小六足機器人 DIY 課程教材

DMP 小六足 (影片) 內部研發自我消遣用 (做好玩的)

平行機構

可自適應地形

具前方避障功能

內部使用逆運動學計算

步伐

影片網址:https://www.youtube.com/watch?v=MuY1w_5qIOk Open Source on GitHub website: https://github.com/acen2009/roboard-hexapod/tree/Copy_Files_from_Google

Page 337: 86Duino 小六足機器人 DIY 課程教材

DMP 小六足 (影片) DMP 暑期實習生專題

六足蠍子 - 史迦納

Serial 機構

內部使用逆運動學來

計算步伐

根據展現的動作會發出

不同音效

影片網址:https://www.youtube.com/watch?v=ujsKvYa32kY Open Source on GitHub website:https://github.com/RoBoardGod/Robot-Sk

Page 338: 86Duino 小六足機器人 DIY 課程教材

使用 86ME 編輯小六足動作

Page 339: 86Duino 小六足機器人 DIY 課程教材

概念說明 六足的常見步態有 Tripod、Wave、Ripple,而我們所採用的範例為

Tripod 步態,同時會有三隻腳觸地,另外三隻腳離地,機器人的移動

是藉由觸地的腳位移產生。而這三隻腳如下圖是分為兩組,抬腳時會

一起行動。

右上-左中-右下 為紅組

左上-右中-左下 為藍組

以最前方的腳簡稱 紅

Page 340: 86Duino 小六足機器人 DIY 課程教材

標注說明 之後會說明 86小六足的範例步態,為了方便理解,會

以實際圖片加上輔助的標注來表達

腳部抬升離地以 表示, 表示放腳觸地

Page 341: 86Duino 小六足機器人 DIY 課程教材

標注說明 圖片皆為俯視圖,上方為小六足的前方

前方

Page 342: 86Duino 小六足機器人 DIY 課程教材

編輯前進動作

Page 343: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (1/6) 紅組抬腳

紅組向前

藍組向後

Page 344: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 345: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (2/6) 紅組放腳觸地

其餘不動

Page 346: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 347: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (3/6) 藍組抬腳

其餘不動

Page 348: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 349: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (4/6) 藍組向前

藍組抬腳

紅組向後

Page 350: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 351: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (5/6) 藍組放腳觸地

其餘不動

Page 352: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 353: 86Duino 小六足機器人 DIY 課程教材

前進的方式 (6/6) 紅組抬腳

其餘不動

Page 354: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 355: 86Duino 小六足機器人 DIY 課程教材

連續慢動作播放前進影片

Page 356: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (1/6) 第一個 Frame:

playtime 300 ms

Page 357: 86Duino 小六足機器人 DIY 課程教材
Page 358: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (2/6) 第二個 Frame:

playtime 150 ms

Page 359: 86Duino 小六足機器人 DIY 課程教材
Page 360: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (3/6) 第三個 Frame:

playtime 150 ms

Page 361: 86Duino 小六足機器人 DIY 課程教材
Page 362: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (4/6) 第四個 Frame:

playtime 300 ms

Page 363: 86Duino 小六足機器人 DIY 課程教材
Page 364: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (5/6) 第五個 Frame:

playtime 150 ms

Page 365: 86Duino 小六足機器人 DIY 課程教材
Page 366: 86Duino 小六足機器人 DIY 課程教材

實際調整前進動作 (6/6) 第六個 Frame:

playtime 150 ms

Page 367: 86Duino 小六足機器人 DIY 課程教材
Page 368: 86Duino 小六足機器人 DIY 課程教材

完成前進動作 將編輯好的 frame 連續播放,86小六足就能向前奔跑囉

若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto

Page 369: 86Duino 小六足機器人 DIY 課程教材

編輯左轉動作

Page 370: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (1/6) 藍組抬腳

前後移動如圖

Page 371: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 372: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (2/6) 藍組放腳觸地

其餘不動

Page 373: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 374: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (3/6) 紅組抬腳

其餘不動

Page 375: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 376: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (4/6) 紅組抬腳

前後移動如圖

Page 377: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 378: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (5/6) 紅組放腳觸地

其餘不動

Page 379: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 380: 86Duino 小六足機器人 DIY 課程教材

左轉的方式 (6/6) 藍組抬腳

其餘不動

Page 381: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 382: 86Duino 小六足機器人 DIY 課程教材

連續慢動作播放左轉影片

Page 383: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (1/6) 第一個 Frame:

delay 300 ms

Page 384: 86Duino 小六足機器人 DIY 課程教材
Page 385: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (2/6) 第二個 Frame:

delay 150 ms

Page 386: 86Duino 小六足機器人 DIY 課程教材
Page 387: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (3/6) 第三個 Frame:

delay 150 ms

Page 388: 86Duino 小六足機器人 DIY 課程教材
Page 389: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (4/6) 第四個 Frame:

delay 300 ms

Page 390: 86Duino 小六足機器人 DIY 課程教材
Page 391: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (5/6) 第五個 Frame:

delay 150 ms

Page 392: 86Duino 小六足機器人 DIY 課程教材
Page 393: 86Duino 小六足機器人 DIY 課程教材

實際調整左轉動作 (6/6) 第六個 Frame:

delay 150 ms

Page 394: 86Duino 小六足機器人 DIY 課程教材
Page 395: 86Duino 小六足機器人 DIY 課程教材

完成左轉動作 將編輯好的 frame 連續播放,86小六足就能左轉囉

若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto

Page 396: 86Duino 小六足機器人 DIY 課程教材

編輯右轉動作

Page 397: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (1/6) 藍組抬腳

前後移動如圖

Page 398: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 399: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (2/6) 藍組放腳觸地

其餘不動

Page 400: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 401: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (3/6) 紅組抬腳

其餘不動

Page 402: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 403: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (4/6) 紅組抬腳

前後移動如圖

Page 404: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 405: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (5/6) 紅組放腳觸地

其餘不動

Page 406: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 407: 86Duino 小六足機器人 DIY 課程教材

右轉的方式 (6/6) 藍組抬腳

其餘不動

Page 408: 86Duino 小六足機器人 DIY 課程教材

慢動作播放影片

Page 409: 86Duino 小六足機器人 DIY 課程教材

連續慢動作播放右轉影片

Page 410: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (1/6) 第一個 Frame:

delay 300 ms

Page 411: 86Duino 小六足機器人 DIY 課程教材
Page 412: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (2/6) 第二個 Frame:

delay 150 ms

Page 413: 86Duino 小六足機器人 DIY 課程教材
Page 414: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (3/6) 第三個 Frame:

delay 150 ms

Page 415: 86Duino 小六足機器人 DIY 課程教材
Page 416: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (4/6) 第四個 Frame:

delay 300 ms

Page 417: 86Duino 小六足機器人 DIY 課程教材
Page 418: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (5/6) 第五個 Frame:

delay 150 ms

Page 419: 86Duino 小六足機器人 DIY 課程教材
Page 420: 86Duino 小六足機器人 DIY 課程教材

實際調整右轉動作 (6/6) 第六個 Frame:

delay 150 ms

Page 421: 86Duino 小六足機器人 DIY 課程教材
Page 422: 86Duino 小六足機器人 DIY 課程教材

完成右轉動作 將編輯好的 frame 連續播放,86小六足就能右轉囉

若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto

Page 423: 86Duino 小六足機器人 DIY 課程教材

雖然現在有了前進、左轉、右轉等動作,但仍是靠著

USB 線連接 86小六足才能動作。接下來,我們要將

動作燒錄至 86小六足,並且介紹如何用第三方控制器

(如:鍵盤、手機或 PS2 搖桿)來選擇播放的動作。

Page 424: 86Duino 小六足機器人 DIY 課程教材

動作觸發方式的設定

Page 425: 86Duino 小六足機器人 DIY 課程教材

USB 鍵盤觸發 在 86ME 中,假設以英文大寫字母 W、A 、D 分別代

表前進、左轉、右轉的動作,設定如下:

持續按著 W 鍵觸發前進動作

持續按著 A 鍵觸發左轉動作

持續按著 D 鍵觸發左轉動作

前進 左轉 右轉

Page 426: 86Duino 小六足機器人 DIY 課程教材

藍牙觸發 在 86ME 中,假設以英文大寫字母 U、L 、R 分別代

表前進、左轉、右轉的動作,設定如下:

收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作

前進 左轉 右轉

Page 427: 86Duino 小六足機器人 DIY 課程教材

PS2 搖桿觸發 在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右

分別代表前進、左轉、右轉的動作,設定如下:

持續按著十字鍵的”上”觸發前進動作

持續按著十字鍵的”左”觸發前進動作

持續按著十字鍵的”右”觸發前進動作

※ 設定中 DAT、CMD 、ATT 、CLK 可以任選四根沒用到的腳位

前進 左轉 右轉

Page 428: 86Duino 小六足機器人 DIY 課程教材

全部設定完成後,按下 Generate 86Duino sketch

(All in One) 按鈕,將產生出來的 .ino 燒錄至

86Duino。然後拔除 86小六足的 USB 線,接上鋰電

池,開始用指定的第三方控制器控制 86小六足的動作!

下面我們將詳細介紹前進/左轉/右轉動作的藍牙觸發

設定方法,最後以手機遙控 86小六足。

Page 429: 86Duino 小六足機器人 DIY 課程教材

實作觸發範例 –

用手機藍牙遙控 86小六足

Page 430: 86Duino 小六足機器人 DIY 課程教材

手機藍牙控制原理 我們會使用一塊藍牙模組與 86DuinoZero 連接,藍

牙模組會接收手機藍牙 APP 送來的命令,並將命令透

過 UART 介面送給 86DuinoZero,收到命令的

86DuinoZero 便將指定的小六足動作播放一次,如此

一來,即達到用手機控制小六足的效果

Page 431: 86Duino 小六足機器人 DIY 課程教材

示意圖:

86Duino Zero

藍牙模組 UART

伺服機 伺服機 伺服機

PWM

86小六足

PWM

藍牙遙控

‧‧‧ ‧‧‧

Page 432: 86Duino 小六足機器人 DIY 課程教材

手機藍牙遙控步驟

下載藍牙遙控 APP

設定藍牙觸發

產生 sketch 程式

燒錄 sketch 程式

使用 86ME

使用 86Duino IDE

使用手機 設定按鍵字元

藍牙配對

開始遙控 86小六足

連接藍牙模組 86DuinoZero

Page 433: 86Duino 小六足機器人 DIY 課程教材

86DuinoZero 連接藍牙模組 準備 HC-06 或 HC-05 模組 1 塊(以下以 HC-06 藍

牙模組做為範例說明):

Page 434: 86Duino 小六足機器人 DIY 課程教材

HC-06 對外連接介面為 UART,連接腳有 4 支:VCC、

GND 、RXD 、 TXD

這裡我們以 86DuinoZero 的 Serial1 為例,對照下表,

連接 86DuinoZero 與 HC-06 :

Page 435: 86Duino 小六足機器人 DIY 課程教材

實際連接如下圖所示:

藍牙模組 HC-06

藍牙 TXD 接 pin 0 藍牙 RXD 接 pin 1

RXD TXD

Page 436: 86Duino 小六足機器人 DIY 課程教材

當 HC-06 接上電源後,可以看到上面的 LED 燈號快

速閃爍 (間隔約 0.2 秒),代表 HC-06 正在等待配對:

快速閃爍

Page 437: 86Duino 小六足機器人 DIY 課程教材

1) 選擇一個小六足動作

例如:forward

2) 選擇 Trigger 分頁

3) 選擇 Bluetooth 為觸發方式

4) 選擇要觸發這個動作的字元

該字元可以於手機藍牙 APP 中自由設定

例如:英文字大寫 U

5) 選擇 86Duino 與藍牙模組通訊的 Baud Rate

例如:9600

6) 選擇 86Duino 與藍牙模組通訊的序列埠

例如:Serial1

86ME 設定藍牙觸發 1

3 4

5

2

6

Page 438: 86Duino 小六足機器人 DIY 課程教材

86ME 產生 Sketch 程式 按下 86ME 右下角的 “Generate 86Duino sketch (All in

One” 按鈕,它將自動產生 86Duino sketch 程式

Page 439: 86Duino 小六足機器人 DIY 課程教材

燒錄藍牙控制程式 打開 86Duino IDE,選擇檔案 > 開啟... ,選擇剛剛

86ME 產生出來的程式

Page 440: 86Duino 小六足機器人 DIY 課程教材

然後按下 86Duino IDE 的燒錄按鈕,將程式燒錄至

86Duino 上

燒錄

Page 441: 86Duino 小六足機器人 DIY 課程教材

下載藍牙遙控 APP 手機環境為 Android 系統:

在 Google 商店中搜尋 “Bluetooth Controller”

手機環境為 iOS 系統

APP store 中搜尋 “LightBlue”

※下面我們以 Android 系統上的 Bluetooth Controller App 為例,介紹其操

作方式。在 iOS 上,操作方法與 Bluetooth Controller App 大同小異

Page 442: 86Duino 小六足機器人 DIY 課程教材

設定按鍵名稱和對應字元 打開 Bluetooth Controller,點擊 “Set Keys”

Page 443: 86Duino 小六足機器人 DIY 課程教材

進入設定畫面後,我們要設定按鍵名稱 “Key Name”

和對應字元 “Data of Key”

Page 444: 86Duino 小六足機器人 DIY 課程教材

對應 86ME 中選取的動作名稱,這裡的按鍵名稱也命

名為 “forward”,觸發字元為 “U”,如右下圖:

Page 445: 86Duino 小六足機器人 DIY 課程教材

回到主畫面,會看到下方按鍵上出現剛剛設定的名稱:

Page 446: 86Duino 小六足機器人 DIY 課程教材

按下 Scan,APP 會自動搜尋並列出附近的藍牙裝置:

Page 447: 86Duino 小六足機器人 DIY 課程教材

這裡我們選 HC-06,APP 將會自動配對

配對成功後,下方會出現 “Connect to HC-06” 訊息

Page 448: 86Duino 小六足機器人 DIY 課程教材

配對成功同時,我們也可以看到 HC-06 藍牙模組的

LED 燈從快速閃爍狀態,改為常亮狀態,此時代表我

們可以用手機藍牙遙控 86小六足了!!

常亮

Page 449: 86Duino 小六足機器人 DIY 課程教材

此時手機上按下 forward 按鈕,就可以看到 86小六

足播放前進的動作了:

Page 450: 86Duino 小六足機器人 DIY 課程教材

使用其他藍牙 APP 可以安裝具有控制鍵等圖形的藍牙 APP,讓操控介面

變得更直覺。例如:

BlueControl Arduino BT Joystick Free

Page 451: 86Duino 小六足機器人 DIY 課程教材

小六足動作程式解析

Page 452: 86Duino 小六足機器人 DIY 課程教材

我們將 86ME 產生出來的程式稱為 86小六足動作程式

86小六足動作程式運作流程如下:

解析命令 (有設定觸發條件的情況)

Servo86 函式庫

Timer

GPIO

GPIO

GPIO … …

Page 453: 86Duino 小六足機器人 DIY 課程教材

由於 86小六足動作程式只使用一個函式庫:Servo86,

因此,我們要先對 Servo86 函式庫有基礎的認識,後

面在講解 86小六足動作程式時會比較容易理解其運作

原理。

Page 454: 86Duino 小六足機器人 DIY 課程教材

Servo86 函式解說

Page 455: 86Duino 小六足機器人 DIY 課程教材

單一伺服機設定函式 setVelocity()

setPosition()

setOffset()

setRealTimeMixing()

Page 456: 86Duino 小六足機器人 DIY 課程教材

setVelocity() 設定伺服機的轉速。

傳入參數:轉動速度,單位 us/s

#include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(1500); // 將伺服機轉動到 1500us 角度 myservo.setVelocity(1000); // 設定速度 1000us/s myservo.write(900); // 啟動伺服機,用 1000us/s 的速度轉到 900us 角度 } void loop() {}

Page 457: 86Duino 小六足機器人 DIY 課程教材

setPosition() 設定伺服機目標角度。(在呼叫 run() 之前,伺服機還不會轉動)

傳入參數:目標角度和轉動時間。您也可以不設定轉動時間,此時伺

服機會用最快速度轉到目標位置。

#include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.setPosition(1500); // 設定以最快速度轉動到 1500us 角度 myservo.run(); // 轉動伺服機 myservo.setPosition(1000, 1000); // 設定轉到 1000us 角度,用時 1 秒 myservo.run(); // 轉動伺服機 } void loop() {}

Page 458: 86Duino 小六足機器人 DIY 課程教材

setOffset() 設定伺服機原點的微調角度

用於校正伺服機原點誤差及機器人組裝的位置誤差

傳入參數:微調值,範圍 -256 ~ 256,單位 us

#include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.setOffset(-10); // 設定 -10 us 的微調角度 myservo.write(1500); // 將伺服機轉動到 1500us 角度 (實際上是 1500 - 10 = 1490us) } void loop() {}

Page 459: 86Duino 小六足機器人 DIY 課程教材

setRealTimeMixing() 動態設定伺服機對目標角度的偏移值。當機器人裝有感應

器的情況下,此函式可以將感測器回傳的偏差值即時加入

目標角度的運算式中,進而修正伺服機的目標角度。

此功能的一個應用是可根據陀螺儀的回傳數值對機器人的平

衡動作進行動態補償,進而增加動作時的穩定性

傳入參數:偏移值,單位 us。

Page 460: 86Duino 小六足機器人 DIY 課程教材

單一伺服機動作函式 run()

pause()

resume()

stop()

release()

isMoving()

Page 461: 86Duino 小六足機器人 DIY 課程教材

run() 啟動伺服機(伺服機開始出力)往目標角度轉動

傳入參數:無 #include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.setPosition(1500); // 設定以最快速度轉動到 1500us 角度 myservo.run(); // 啟動伺服機 myservo.setPosition(1000, 1000); // 設定轉到 1000us 角度,用時 1 秒 myservo.run(); // 啟動伺服機 } void loop() {}

Page 462: 86Duino 小六足機器人 DIY 課程教材

pause() 暫停正在動作的伺服機。

傳入參數:無

Page 463: 86Duino 小六足機器人 DIY 課程教材

resume() 恢復暫停中的伺服機

傳入參數:無

Page 464: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(1500); // 將伺服機轉到 1500us 初始位置 delay(100); } void loop() { myservo.setPosition(1800, 3000); // 設定伺服機的目標角度:1800us,時間:3 秒 myservo.run(); delay(1000); myservo.pause(); // 伺服機暫停轉動 delay(1000); // 暫停 1 秒 myservo.resume(); // 伺服機恢復轉動 delay(3000); }

Page 465: 86Duino 小六足機器人 DIY 課程教材

stop() 停止動作中的伺服機。

經由 stop() 停止的伺服機無法 resume。呼叫 stop() 後

必須重新設定伺服機目標角度以及呼叫 run(),才會讓

伺服機再往目標角度移動。

傳入參數:無

Page 466: 86Duino 小六足機器人 DIY 課程教材

release() 讓伺服機停止出力

前面提到的 stop()、pause(),呼叫後伺服機會停下並

持續出力。而 release() 則會使伺服機停下並處於脫力

(不出力) 狀態。

輸入參數:無

Page 467: 86Duino 小六足機器人 DIY 課程教材

isMoving() 回傳伺服機是否已到達目標位置

傳入參數:無

回傳:true (伺服機仍在轉動,尚未到達目標位置) 或

false (伺服機已到達目標位置)

Page 468: 86Duino 小六足機器人 DIY 課程教材

多伺服機同時動作函式 servoMultiRun() - 同時啟動多顆伺服機

servoMultiPause() - 同時暫停多顆伺服機

servoMultiResume() - 同時恢復多顆伺服機

servoMultiStop() - 同時停止多顆伺服機

isServoMultiMoving() - 同時檢查多顆伺服機是否

已全部到達目標位置

Page 469: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo servo1; Servo servo2; void setup() { servo1.attach(6); servo2.attach(10); // 使用 pin 6、10 servo1.setPosition(1500); servo2.setPosition(1500); servoMultiRun(servo1, servo2); // 將 servo1、servo2 轉到初始位置 } void loop() { servo1.setPosition(2000, 2000); servo2.setPosition(1800, 2000); servoMultiRun(servo1, servo2); // 使 servo1 和 servo2 同時往新目標角度轉動 while(isServoMultiMoving() == true); // 等待所有伺服機都轉到目標位置 servo1.setPosition(1700, 2000); servo2.setPosition(1600, 2000); servoMultiRun(); // 使 servo1、servo2 同時往新目標角度轉動 while(isServoMultiMoving() == true); // 等待所有伺服機都轉到目標位置 }

Page 470: 86Duino 小六足機器人 DIY 課程教材

Servo86 函式庫對 Frame 的支援

Page 471: 86Duino 小六足機器人 DIY 課程教材

ServoFrame 函式 ServoFrame 類別

positions[]

setPositions()

playPositions()

load()

save()

Page 472: 86Duino 小六足機器人 DIY 課程教材

positions[] 儲存所有伺服機位置的列表。最多 45 顆伺服機。

#include <Servo86.h> Servo myservo0; Servo myservo1; Servo myservo2; ServoFrame myframe; // 宣告一個 Frame 物件 void setup() { myservo0.attach(9); myservo1.attach(11); myservo2.attach(5); myframe.positions[0] = 1800; // 設定 Frame 內容 myframe.positions[1] = 1300; myframe.positions[2] = 2000; // 設定以 500ms 的時間將伺服機轉動到 Frame 指定的位置 (myservo0 轉動到 position[0] // 位置, myservo1 轉動到 position[1] 位置, myservo2 轉動到 position[2] 位置) myframe.setPositions(500, myservo0 , myservo1, myservo2); servoMultiRun(); // 根據設定值轉動所有伺服機 } void loop() {}

Page 473: 86Duino 小六足機器人 DIY 課程教材

setPositions() 把代表 Frame 的目標位置列表分別指定給各伺服機

輸入參數:轉動時間和 Servo 類別。轉動時間可以不

輸入,如果沒有輸入時間,預設會用最快的速度轉到

目標位置。

Page 474: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo0; Servo myservo1; Servo myservo2; ServoFrame myframe; // 宣告一個 Frame 物件 void setup() { myservo0.attach(9); myservo1.attach(11); myservo2.attach(5); myframe.positions[0] = 1800; // 設定 Frame 內容 myframe.positions[1] = 1300; myframe.positions[2] = 2000; // 設定以 500ms 的時間將伺服機轉動到 Frame 指定的位置 (myservo0 轉動到 position[0] // 位置, myservo1 轉動到 position[1] 位置, myservo2 轉動到 position[2] 位置) myframe.setPositions(500, myservo0 , myservo1, myservo2); servoMultiRun(); // 根據設定值轉動所有伺服機 } void loop() {}

Page 475: 86Duino 小六足機器人 DIY 課程教材

playPositions() 把代表 Frame 的目標位置列表指定給各伺服機並立即控制

伺服機移動到 Frame 指定的角度

等同先呼叫 setPositions() 再接著呼叫 servoMultiRun() 的

效果

輸入參數:和 setPositions() 一樣

Page 476: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo0; Servo myservo1; Servo myservo2; ServoFrame myframe; // 宣告一個 Frame 物件 void setup() { myservo0.attach(9); myservo1.attach(11); myservo2.attach(5); myframe.positions[0] = 1800; // 設定 Frame 內容 myframe.positions[1] = 1300; myframe.positions[2] = 2000; // 以 500ms 的時間將伺服機轉動到 Frame 指定的位置 (myservo0 轉動到 position[0] // 位置, myservo1 轉動到 position[1] 位置, myservo2 轉動到 position[2] 位置) myframe.playPositions(500, myservo0 , myservo1, myservo2); } void loop() {}

Page 477: 86Duino 小六足機器人 DIY 課程教材

save() 儲存目前的 Frame 至指定檔案

輸入參數:86Duino Frame 檔名

#include <Servo86.h> Servo myservo1; Servo myservo2; Servo myservo3; ServoFrame myframe; void setup() { myservo1.attach(9); myservo2.attach(11); myservo3.attach(5); myframe.positions[0] = 1800; // 設定 Frame 內容 myframe.positions[1] = 1300; myframe.positions[2] = 2000; myframe.save(“frm0.txt”); // 將動作幀儲存至 SD 卡根目錄下的 "frm0.txt" } void loop() {}

Page 478: 86Duino 小六足機器人 DIY 課程教材

load() 載入 86Duino Frame 檔案

輸入參數:86Duino Frame 檔名

#include <Servo86.h> Servo myservo1; Servo myservo2; Servo myservo3; ServoFrame myframe; void setup() { myservo1.attach(9); myservo2.attach(11); myservo3.attach(5); myframe.load(“frm0.txt”); // 從指定的檔案載入機器人動作幀 myframe.playPositions(500, myservo1, myservo2, myservo3); // 以 500 ms 的時間播放此 Frame } void loop() {}

Page 479: 86Duino 小六足機器人 DIY 課程教材

擴充的 ServoFrame 類別 (可以用來讀取其他專用伺服機控制板的 Frame 檔)

Page 480: 86Duino 小六足機器人 DIY 課程教材

Pololu RC 伺服機控制板

Pololu Maestro

影片網址:https://www.youtube.com/watch?v=AqToEWmTVXA

Demo 影片

Page 481: 86Duino 小六足機器人 DIY 課程教材

Pololu 動作編輯器

※ 會將動作儲存到一個特定格式的 .txt 檔

Page 482: 86Duino 小六足機器人 DIY 課程教材

ServoFramePololu 函式 ServoFramePololu 類別

positions[] – 功能與 ServoFrame 一樣

setPositions() – 功能與 ServoFrame 一樣

playPositions() – 功能與 ServoFrame 一樣

load() - 讀取 Pololu 的 .txt Frame 檔

save() – 功能與 ServoFrame 一樣

Page 483: 86Duino 小六足機器人 DIY 課程教材

load() 讀取 Pololu Frame 檔案

傳入參數:檔案名稱、Sequence 名稱和 Frame 名稱

Sequence 名稱和 Frame 名稱可在 Pololu 編輯器中查

詢取得

回傳:true 為讀取成功,false 為失敗

Page 484: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo1; Servo myservo2; Servo myservo3; ServoFramePololu myframe; void setup() { myservo1.attach(9); myservo2.attach(11); myservo3.attach(5); myframe.load(“pololu.txt”, “Sequence 0”, “Frame 0”); // 讀取 Pololu Frame 檔中 Sequence 0 的 Frame 0 myframe.playPositions(myservo1, myservo2, myservo3); // 播放動作 } void loop() {}

Page 485: 86Duino 小六足機器人 DIY 課程教材

Innovati RC 伺服機控制板

影片網址: https://www.youtube.com/watch?v=SOrZUK1i34g

控制機器人影片

Page 486: 86Duino 小六足機器人 DIY 課程教材

Innovati 動作編輯器

※ 會將編輯好的 Frame 個別存到 .ftxt 檔

Page 487: 86Duino 小六足機器人 DIY 課程教材

ServoFrameInno 函式 ServoFrameInno 類別

positions[] – 功能與 ServoFrame 一樣

setPositions() – 功能與 ServoFrame 一樣

playPositions() – 功能與 ServoFrame 一樣

load() - 讀取 Innovati 的 .ftxt Frame 檔

save() – 功能與 ServoFrame 一樣

Page 488: 86Duino 小六足機器人 DIY 課程教材

load() 讀取 Innovati Frame 檔案

傳入參數:Frame 檔案名稱

回傳:true 為讀取成功,false 為失敗

Page 489: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo1; Servo myservo2; Servo myservo3; ServoFrameInno myframe; void setup() { myservo1.attach(9); myservo2.attach(11); myservo3.attach(5); myframe.load(“Frame0.ftxt”); // 讀取 Innovati 的 Frame 0 檔案 myframe.playPositions(myservo1, myservo2, myservo3); // 播放動作 } void loop() {}

Page 490: 86Duino 小六足機器人 DIY 課程教材

KONDO RC 伺服機控制板

控制機器人影片 KONDO RCB-1/RCB-3

影片網址: https://www.youtube.com/watch?v=KPaTl9qljRU

Page 491: 86Duino 小六足機器人 DIY 課程教材

KONDO 動作編輯器

※ 會將編輯好的 Frame 全部存在一個 .RCB 檔

Page 492: 86Duino 小六足機器人 DIY 課程教材

KONDO Frame 函式 ServoFrameKondo 類別

positions[] – 功能與 ServoFrame 一樣

setPositions() – 功能與 ServoFrame 一樣

playPositions() – 功能與 ServoFrame 一樣

load() - 讀取 KONDO 的 .RCB Frame 檔

save() – 功能與 ServoFrame 一樣

capture() – 抓取 KONDO 伺服機目前角度(KONDO 伺服機專用的位置抓取函式)

Page 493: 86Duino 小六足機器人 DIY 課程教材

load() 讀取 KONDO Frame 檔案

傳入參數:檔案名稱和 Frame 名稱

Frame 名稱可在 KONDO 編輯器中查詢取得

回傳:true 為讀取成功,false 為失敗

Page 494: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo1; Servo myservo2; Servo myservo3; ServoFrameKondo myframe; void setup() { myservo1.attach(9); myservo2.attach(11); myservo3.attach(5); myframe.load(“kondo.rcb”, “Frame0”); // 讀取 KONDO Frame 檔中的 Frame0 myframe.playPositions(myservo1, myservo2, myservo3); // 播放動作 } void loop() {}

Page 495: 86Duino 小六足機器人 DIY 課程教材

支援 KONDO 伺服機的

位置回授功能

Page 496: 86Duino 小六足機器人 DIY 課程教材

KONDO 機器人專用伺服機 (1/2)

KRS-786 KRS-788HV KRS-4014

Page 497: 86Duino 小六足機器人 DIY 課程教材

KONDO 機器人專用伺服機 (2/2) 這種伺服機除了可以控制角度外,也具有抓取位置功能。

可以用來做教導式的機器人的動作編輯,如下面影片:

影片網址: https://www.youtube.com/watch?v=8ucti15PX20

Page 498: 86Duino 小六足機器人 DIY 課程教材

Servo86 函式庫的 capture() 功能可以用來抓取

KONDO 伺服機的位置

Page 499: 86Duino 小六足機器人 DIY 課程教材

capture() 讀取 KONDO 伺服機回傳的角度。注意,capture()

需要在所有伺服機皆為 release 狀態下才有作用,如

果您之前有啟動過任一伺服機,必須先呼叫 release()

後再呼叫此函式。

傳入參數:要 capture 的 servo 類別

回傳:讀到的角度,單位 us。

Page 500: 86Duino 小六足機器人 DIY 課程教材

#include <Servo86.h> Servo myservo0; Servo myservo1; Servo myservo2; ServoFrameKondo myframe; void setup() { myservo0.attach(9); myservo1.attach(11); myservo2.attach(5); // 分別讀取 myservo0、myservo1、myservo2 的回傳角度 myframe.positions[0] = myframe.capture(myservo0); myframe.positions[1] = myframe.capture(myservo1); myframe.positions[2] = myframe.capture(myservo2); Serial.println(myframe.positions[0]); Serial.println(myframe.positions[1]); Serial.println(myframe.positions[2]); myframe.save(“captured_frame.txt”); } void loop() {}

Page 501: 86Duino 小六足機器人 DIY 課程教材

KONDO 伺服機和 86Duino 連接的注意事項 86Duino 要透過 capture() 來讀取 KONDO 伺服機回傳的角度前,要

注意阻抗匹配問題,也就是說您必須在 PWM 信號腳加上一個 5k 以

下的 pull-up 電阻,才有辦法讀取回傳角度, 如下圖:

5K 電阻

3.3V

Page 502: 86Duino 小六足機器人 DIY 課程教材

更詳細的內容請參考 86Duino 官網的 Servo86 文件:

http://www.86duino.com/?p=11050&lang=TW

Page 503: 86Duino 小六足機器人 DIY 課程教材

解析 86小六足動作程式

Page 504: 86Duino 小六足機器人 DIY 課程教材

前言 為了用較簡單清晰的方式來解析小六足動作程式,我

們先將前進/左轉/右轉的動作設定成 Always ON/Off,

來認識基本的程式結構,最後再設定其他的觸發方式,

了解不同觸發方式在程式中所做的改變。

這裡我們使用的 86ME 為 v1.5 版。

※ 未來新版 86ME 產生的小六足動作程式架構可能有所進化,導致

新版小六足動作程式與下面將要介紹的內容不同。

Page 505: 86Duino 小六足機器人 DIY 課程教材

產生小六足動作程式檔 (1/2) 先將小六足四個 Motion 的觸發設定為

forward:Always On

left :Always On

right :Always On

home :Always Off

forward

home right left

Page 506: 86Duino 小六足機器人 DIY 課程教材

產生小六足動作程式檔 (2/2) 按下 Generate 86Duino Sketch (All in One) 按鈕

將產生名稱為 AllinOne_Motion_Sketch 的 .ino 檔,

即小六足動作程式檔:

Page 507: 86Duino 小六足機器人 DIY 課程教材

打開小六足動作程式檔 用 86Duino IDE 或

Notepad++ 等文書

編輯軟體打開小六

足動作程式檔:

Page 508: 86Duino 小六足機器人 DIY 課程教材

小六足動作程式結構簡介 程式結構分為三大段:

引入 Servo86 和其他必要的函式庫、宣告變數

setup 初始化 Servo Pin、設定 Offset 和 Frame,最後讓機器人出力並回到 Home 姿勢

更新狀態(鍵盤、藍牙等等)並逐一判斷是否執行各個 Motion

loop

第一段

第二段

第三段

Page 509: 86Duino 小六足機器人 DIY 課程教材

小六足動作程式解析 – 第一段 #include <Servo86.h> Servo myservo2; Servo myservo13; ServoOffset myoffs; ServoFrame _86ME_HOME;

引入 Servo86 函式庫

宣告 Servo 變數,用來初始化 Servo 物件內部的變數,如:PWM 範圍、Servo 數量等等

宣告 ServoOffset 變數來設定伺服機微調值,即 86ME 裡面設定的 offset 值

宣告 ServoFrame 變數 _86ME_HOME,用來讓機器人在開啟時即轉到 Home 點, 即 86ME 裡面設定的 HomeFrame

Page 510: 86Duino 小六足機器人 DIY 課程教材

ServoFrame forward_frm0; ServoFrame forward_frm5; ServoFrame left_frm0; ServoFrame left_frm5; ServoFrame right_frm0; ServoFrame right_frm5; ServoFrame home_frm0;

宣告 ServoFrame forward_frm0 ~ frm 5 ,用來儲存 forward 這個 Motion 各個 Frame 的值

宣告 ServoFrame left_frm0 ~ frm 5 ,用來儲存 left 這個 Motion 各個 Frame 的值

宣告 ServoFrame right_frm0 ~ frm 5 ,用來儲存 right 這個 Motion 各個 Frame 的值

宣告 ServoFrame home_frm0,用來儲存 home 這個 Motion Frame 的值

Page 511: 86Duino 小六足機器人 DIY 課程教材

void setup() { myservo2.attach(2); myservo13.attach(13); myoffs.offsets[1] = -140; myoffs.offsets[3] = -50; myoffs.offsets[5] = -50; myoffs.offsets[7] = -90; myoffs.offsets[9] = -110; myoffs.offsets[11] = -100;

… 初始化 Servo pin,這裡用到 pin

2 ~ pin 13,共 12 個 pins

初始化每個 pin 上伺服機的偏轉角度,offset[0] 對應至 pin 2,offset[1] 對應至 pin 3 … 依此類推,不需要改變微調值的 pin 可以跳過不設定,其預設值為 0,例如左邊沒列出的 offset[0]、 offset[2]、 offset[4] 等值皆為 0

小六足動作程式解析 – 第二段

Page 512: 86Duino 小六足機器人 DIY 課程教材

forward_frm0.positions[0] = 1700; forward_frm0.positions[11] = 1700; forward_frm1.positions[0] = 1700; myoffs.setOffsets(); _86ME_HOME.playPositions(0); } //end of setup

設定 forward 動作的第一個 frame ,所有伺服機的角度

依此類推,後面依序設定 left、right、home 各個 Motion 所有 frame 的伺服機角度

… …

將上一頁設定的所有 offset 值設定至伺服機

播放小六足的 homeframe,即 86ME 中設定的 HomeFrame,讓小六足接電後便自動調整到 HOME 的姿勢

設定 forward 動作的第二個 frame ,所有伺服機的角度

Page 513: 86Duino 小六足機器人 DIY 課程教材

void loop() { if(1) { forward_frm0.playPositions(300); while(isServoMultiMoving() == true); } if(1) { left_frm0.playPositions(300); while(isServoMultiMoving() == true); } }

依此類推,後面是 right 動作的判斷式,格式與 forward、left 相同

1. 按照指定播放時間來播放 left 動作的每個 frame

2. 直到所有伺服機都轉到目標位置後,才會在播放下一個 frame

因為 forward 動作的觸發設定為 Always On,所以判斷式為永遠成立的 if(1),在 loop 迴圈中,forward 動作會一直重複不斷的播放

因為 left 動作的觸發設定為 Always On,所以判斷式為永遠成立的 if(1),在 loop 迴圈中,left 動作會一直重複不斷的播放 (順序在 forward 動作播放完之後)

小六足動作程式解析 – 第三段

1. 按照指定播放時間來播放 forward動作的每個 frame

2. 直到所有伺服機都轉到目標位置後,才會在播放下一個 frame

Page 514: 86Duino 小六足機器人 DIY 課程教材

void loop() { if(0) { home_frm0.playPositions(1000); while(isServoMultiMoving() == true); } }

因為 home 動作的觸發設定為 Always Off,所以判斷式為永遠不成立的 if(0),在 loop 迴圈中,home 動作永遠不會播放

Page 515: 86Duino 小六足機器人 DIY 課程教材

更改觸發條件 以上是使用 Always On/Off 觸發所產生的小六足動作

程式,我們用它來認識基本的程式結構。

下面我們將改用藍牙/USB鍵盤/PS搖桿來觸發前進/左

轉/右轉動作,然後產生程式,看看產生出來的小六足

動作程式有哪裡不同,並了解那些不同的程式的作用。

Page 516: 86Duino 小六足機器人 DIY 課程教材

USB 鍵盤觸發

Page 517: 86Duino 小六足機器人 DIY 課程教材

設定鍵盤觸發 在 86ME 中,假設以英文大寫字母 W、A 、D 分別代

表前進、左轉、右轉的動作,設定如下:

第一次按下 W 鍵觸發前進動作

持續按著 A 鍵觸發左轉動作

放開 D 鍵觸發左轉動作

前進 左轉 右轉

Page 518: 86Duino 小六足機器人 DIY 課程教材

打開產生出來的小六足動作程式,在第一段程式碼中

會額外引入 KeyboardController.h 並產生更新鍵盤按

鍵狀態必要的程式碼:

Page 519: 86Duino 小六足機器人 DIY 課程教材

setup() 上方會新增一個函式,為 key_state(),用來

判斷一個按鍵的狀態,狀態可分成:

第一次按下

持續按著

放開

下面來看看 key_state() 的程式碼,並了解其運作原理:

Page 520: 86Duino 小六足機器人 DIY 課程教材

回傳 0 代表第一次按下

回傳 1 代表持續按著

回傳 2 代表放開

共可判斷 128 個按鍵,陣列中的元素號碼對應到一個鍵盤按鍵,例如:key_state[4] 為鍵盤 A 的狀態

當鍵盤按鍵被按下時,按下的按鍵會即時儲存至 current_key 變數中

按鍵的按下狀態,1 為按下,0 為放開

非以上狀態回傳 3

判斷是否第一次按下

判斷是否持續按著

判斷是否放開

Page 521: 86Duino 小六足機器人 DIY 課程教材

取得鍵盤按鍵狀態

更新按鍵 W、A 、D 的狀態

判斷是否第一次按下 W 鍵

如果是第一次按下 W 鍵,則播放 forward 動作

Page 522: 86Duino 小六足機器人 DIY 課程教材

左轉的動作判斷式變更為

右轉的動作判斷式變更為

判斷是否持續按著 A 鍵

如果是持續按著 A 鍵,則播放 left 動作

判斷是否放開 D 鍵

如果是放開 D 鍵,則播放 right 動作

Page 523: 86Duino 小六足機器人 DIY 課程教材

藍牙觸發

Page 524: 86Duino 小六足機器人 DIY 課程教材

藍牙觸發 在 86ME 中,假設以英文大寫字母 U、L 、R 分別代

表前進、左轉、右轉的動作,設定如下:

收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作

前進 左轉 右轉

Page 525: 86Duino 小六足機器人 DIY 課程教材

打開產生出來的小六足動作程式,可以看到程式開頭

不需要額外引入函式庫,只需要多宣告一個變數來接

收收到的字元,並在 Setup 函式初始化指定的 Serial

Port:

多宣告一個變數

初始化 Serial1

Page 526: 86Duino 小六足機器人 DIY 課程教材

接收新指令,並且把 指 令 存 到 Serial_Command 變數中 沒有指令傳過來時,變數值

為 0xFFF,代表不做任何事

是否收到命令 ‘U’ 字元

如果收到 ‘U’ 字元,則播放 forward 動作

Page 527: 86Duino 小六足機器人 DIY 課程教材

左轉的動作判斷式變更為

右轉的動作判斷式變更為

判斷是否收到 ‘L’ 字元

如果收到 ‘L’ 字元,則播放 left 動作

判斷是否收到 ‘R’ 字元

如果收到 ‘R’ 字元 ,則播放 right 動作

Page 528: 86Duino 小六足機器人 DIY 課程教材

PS2 搖桿觸發

Page 529: 86Duino 小六足機器人 DIY 課程教材

PS2 搖桿觸發 在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右

分別代表前進、左轉、右轉的動作,設定如下:

持續按著十字鍵的”上”觸發前進動作

持續按著十字鍵的”左”觸發前進動作

持續按著十字鍵的”右”觸發前進動作

※ 設定中 DAT、CMD 、ATT 、CLK 可以任選四根沒用到的腳

前進 左轉 右轉

Page 530: 86Duino 小六足機器人 DIY 課程教材

不同觸發條件的影響 – PS2搖桿 打開產生出來的小六足動作程式,程式開頭引入

PS2X_lib.h 並宣告 PS2X 物件來初始化搖桿

初始化 PS2 搖桿

Page 531: 86Duino 小六足機器人 DIY 課程教材

Setup 函式中以 config_gamepad 來設定 PS2 接收

器與 86Duino 連接的腳位

Page 532: 86Duino 小六足機器人 DIY 課程教材

讀取 PS2 搖桿狀態 按下 + 非第一次按下 = 持續按下

如果持續按著十字件的 ‘上’,則播放 forward 動作

Page 533: 86Duino 小六足機器人 DIY 課程教材

左轉的動作判斷式變更為

右轉的動作判斷式變更為

判斷是否持續按著十字鍵的 ‘左’

如果是,則播放 left 動作

判斷是否持續按著十字鍵的 ‘右’

如果是,則播放 right 動作

Page 534: 86Duino 小六足機器人 DIY 課程教材

進階練習 –

改寫一個有效率的小六足動作程式

Page 535: 86Duino 小六足機器人 DIY 課程教材

以上展示的小六足動作,一定會播放完整個動作後才

能再接收新指令,這是因為每個 frame 中間都呼叫了

isServoMultiMoving() 來等待所有伺服機轉到目標角

度,造成小六足無法 “即時反應” 新動作的指令:

Page 536: 86Duino 小六足機器人 DIY 課程教材

這裡我們以藍牙觸發的小六足動作程式為例,介紹如

何把程式改成可以立即反應新指令的到來。

修改要點:

在 while(isServoMultiMoving() == true) 中不斷地

判斷是否有新指令到來,如果有,則跳出目前正在播

放的動作,改播放新動作

最簡單、直接的方法是使用 Flag 和 Goto,見下頁說明

Page 537: 86Duino 小六足機器人 DIY 課程教材

加入 flag

每個 while 迴圈中,判斷是否有新指令到來,若有,則跳到 flag 去接收新指令,這麼一來,動作就會立即改變了

後面的 left、right 動作的 while 迴圈中,加入上述相同的判斷式

Page 538: 86Duino 小六足機器人 DIY 課程教材

用以上方法可以簡單的將原程式改寫成對新指令 “即

時反應” 的程式

但事實上,可以實現這個目標的方法不只一種,您可以

使用有結構性的方法讓程式變得更簡潔、易修改(留給

各位自行發揮)。

Page 539: 86Duino 小六足機器人 DIY 課程教材

86小六足創意改造

Page 540: 86Duino 小六足機器人 DIY 課程教材

動作創作 如何加快 86小六足走路速度?

如何編輯 86小六足打招呼、伸懶腰動作?

如何編輯出其他種六足步態?

如何使用鍵盤或PS2搖桿觸發動作?

如何加入運動學計算來控制小六足步態?

Page 541: 86Duino 小六足機器人 DIY 課程教材

創作屬於自己的小六足 例如:

加入上半身

搭載獠牙,尾巴…

Page 542: 86Duino 小六足機器人 DIY 課程教材

Thank You 感謝大家來參與 86Duino Maker Day IV

DMP Electronics Inc. (瞻營全電子) [email protected]