Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
DMP Electronics Inc. (瞻營全電子)
robotics@dmp.com.tw
講師自介
 林恩州
 現任 DM&P 86Duino 研發工程師
 主要負責 86Duino 基礎軟體開發
大綱
 第一天上午
 86Duino Enjoy 3D 印表機簡介
 使用 86Duino Enjoy 列印 86小六足零件
 小六足列印件前處理
 第一天下午
 86Duino 簡介
 組合小六足足部
 組合小六足身體
 第二天上午
 Arduino 和 86Duino 控制伺服機的方法簡介
 86ME 機器人動作編輯器簡介
 86ME 安裝和使用教學
 第二天下午
 認識六足 - 六足機構原理
 認識六足 - 六足步態簡介
 使用 86ME ...
 第二天下午
 Servo86 函式庫介紹
 86小六足動作程式解析
 進階 – 86小六足動作程式修改
 86小六足創意改造
86Duino Enjoy
3D 印表機簡介
 86Duino Enjoy 為一台基於 CNC 金屬框架的 3D 印
表機,剛性的結構有助於減少震動,並提供一個穩定
的列印環境。
 86Duino Enjoy 3D 印表機內部設計一套簡單的校準
方法,可以輕易的列印或複製出您的作品。
86Duino Enjoy 列印規格
 成形方式:熔融層積 (Fused Filament Fabrication)
 列印體積: 100 * 100 * 150 mm ( 1,500 cm3)
 最小層高: 0.1 mm
 噴嘴直徑:...
86Duino Enjoy 軟體
 列印軟體:Repetier-Host (簡稱 RH)
 檔案傳輸方式:SD card (SDHC Class 10), USB,
Ethernet
86Duino Enjoy 3D printer
Demo Video
影片網址: https://www.youtube.com/watch?v=oOsUWsNCfMY
自行研發的x86 Soc – Vortex86EX
Print3D 控制器
H-Bot 結構 鋁壓鑄成型
自行研發的擠出頭
溫度最高可加熱到 300 度
支援自動水平校正
金屬進料齒輪組
自行研發的步進馬達
DIY 86小六足
86小六足:
1. 具有 12 個自由度
2. 可實現前進、左轉、
右轉等動作
3. 可用手機、USB 鍵
盤或 PS2 搖桿控制
86小六足 DIY 流程
 使用 86Duino Enjoy 3D 印表機列印小六足零件
 列印件前處理
 組合足部
 組合身體
86小六足 DIY 流程
 使用 86Duino Enjoy 3D 印表機列印小六足零件
 列印件前處理
 組合足部
 組合身體
 至 Thingiverse 網站下載 86小六足 STL 檔案:
http://www.thingiverse.com/thing:964149
點擊
下載
 解壓縮後有六個檔案,如下圖:
零件中文名稱對照
 A_arm_top:上 A 臂
 A_arm_bottom:下 A 臂
 Leg:垂直腳
 Linker:連結器
 Body_top:身體上半部
 Body_bottom:身體下半部
Leg 零件
A_arm_top 零件
A_arm_bottom 零件
linker 零件
Body_bottom 零件
body_top 零件
leg
A_arm_bottom
A_arm_top
linker
零件名稱和實際對應圖
body_bottom
body_top
零件名稱和實際對應圖
 A_arm_bottom、A_arm_top 、leg 、linker 為小六
足足部的組合零件,這 4 個零件可以組合成一個足部
 body_top 為小六足身體上半部零件
 body_bottom 為小六足身體下半部零件
 完成一整隻 86小六足一共要列印:
 6 個足部
 1 個身體上半部
 1 個身體下半部
 下載並安裝 Repetier-Host 軟體
 http://www.repetier.com/downloads/
安裝 Repetier-Host
點擊
下載
 86Duino Enjoy 驅動程式下載
 http://www.ftdichip.com/Drivers/VCP.htm
下載 & 安裝驅動程式
連接 86Duino Enjoy 和電腦
 驅動程式安裝完成後,使用 USB 線連接電腦和 86Duino
Enjoy
USB 線
86Duino Enjoy
PC
 此時裝置管理員應該會出現一個虛擬 COM port ,如
下圖:
 下載 86Duino Enjoy 專用的設定檔
 http://www.roboard.com/temp/settings.zip
 解壓縮後可以看到資料夾結構如下:
 開啟 Repetier-Host 軟體
滑鼠雙擊
圖示
開啟後的畫面
 選擇 Config > Printer Settings
 將 Connection 分頁中的設定選項,設定如下圖:
Connection 分頁
的設定選項如右:
 按 ”連線” 按鈕,連線成功時會聽到 86Duino
Enjoy 發出連續三個音效,且連線按鈕會變成右下圖:
未連線 連線成功
連線
 連線後,我們可以選擇 “Manual Control” 分頁,
再按下歸 HOME 按鈕,如下圖所示:
1
2
 按下歸 HOME 按鈕後,86Duino Enjoy 3D 印表機的
X、Y 、Z 軸會立即回到機械原點,代表我們已經可以
操作 86Duino Enjoy 3D 印表機了
繼續其他設定
 在 Config > Printer Settings 中,設定 Printer 分頁
如下圖:
Printer 分頁的
設定選項如右:
Extruder 分頁的
設定選項如右:
Printer Shape 分頁
的設定選項如右:
載入 86Duino Enjoy 設定檔
 選擇 Slicer > CuraEngine
1
2
 選擇 Slicer > Configuration
1
2
 選擇 Print > Import
1
2
 打開 86Duino Enjoy 設定檔資料夾, 進入CuraEngine 資
料夾,選擇 Print-Settings.rcp 設定檔,按下開啟舊檔
 載入 86Duino Enjoy 設定檔:
 選擇 Filament > Import
1
2
 選擇 Filament-Settings.rcp 設定檔後,按下開啟舊檔
 在 Print Configuration 選項中,套用 86Duino
Enjoy 設定檔:選擇 Print-Settings
 在 Filament Setting 中,Extruder1 套用 86Duino
Enjoy 設定檔:選擇 Filament-Settings
載入小六足 STL 檔
 點擊 Load 按鈕,載入 86小六足足部檔案:
A_arm_bottom、A_arm_top、leg 、linker
 載入後的圖如下:
基本操作
 在下圖紅框中按著滑鼠左鍵並移動,可以旋轉視角
 在足部零件上面,按著滑鼠右鍵並移動,可以移動零件
 點選 Linker,將零件沿著 Y 軸翻轉 90 度,如下圖:
1
2
3
 翻轉後的 linker 零件,擺放角度應如下圖:
 點選 A_arm_bottom,將零件沿著 Y 軸翻轉 180 度,
如下圖:
1
2
3
 翻轉後的 A_arm_bottom 零件,擺放角度應如下圖:
 翻轉完成後的足部零件如下圖:
打開支撐選項
 設定 Support Type 為 Everywhere
 按下切片按鈕,就會立即進行切片
 切片完成後會出現類似下面畫面:
傳輸列印檔案至 86Duino Enjoy
 傳輸檔案給 86Duino Enjoy 的方法有兩種:
 方法一:使用 USB 線傳輸
 方法二:使用 SD 卡
方法一: 使用 USB 線
 切片完成後,直接按下列印按鈕,86DuinoEnjoy 會
立即開始列印
方法二: 使用 SD 卡
 不使用 USB 線連接 86Duino Enjoy,改插上
86Duino Enjoy 專用的 SD 卡至您的電腦
 切片完成後,點擊如下圖示, 將 G-code 檔儲存至 SD
卡中:選擇 G-Code Editor 分頁 > 按下儲存按鈕
1
2
 將檔案儲存在 SD 卡中的 gcode 資料夾下,儲存檔名
改成 auto.gcode,按存檔
 從電腦拔出 SD 卡,將此 SD 卡置入 86Duino Enjoy
背面的 SD 卡插槽
SD 卡插槽
86Duino Enjoy 控制盒背面
 打開 86Duino Enjoy 電源,86Duino Enjoy 會自動讀
取 auto.gcode 檔開始列印!
電源
86Duino Enjoy 控制盒背面
86小六足 DIY 流程
 使用 86Duino Enjoy 3D 印表機列印小六足零件
 列印件前處理
 組合足部
 組合身體
 此步驟中,我們需要對 86小六足的足部和身體列
印件做組裝的前處理,包括:拆除支撐、打磨、
鑽孔、攻牙。
 拆除支撐:支撐為列印過程所需,列印完成後必需拆除
 打磨:由於零件表面/邊緣有時會存在變形或凸起,需
要用工具打磨平整
 鑽孔...
認識工具
1. 鑽孔刀 2. 攻牙刀 3. 手握夾頭 4. 尖嘴鉗 5. 平銼刀 6. 圓銼刀
7. 螺絲起子 8. 斜口鉗
1 2
3
4
5
6 7
8
額外材料
1. 2mm x 4mm 螺絲 2. 2mm x 8mm 螺絲 3. 2mm x 15mm 螺絲
4. 杜邦線 5. 電子擴充板 (for 86DuinoZero) 6. 杜邦針腳
1 2
3
4
5
6
Linker 零件前處理
 取出列印好的 linker 零件
拆除 linker 零件的支撐
 使用尖嘴鉗拆除以下支撐:
1
2
3
4
5
6
 拆除支撐示意圖:
尖嘴鉗
拆除
支撐
 使用銼刀來回將左下圖箭頭所指的表面磨平:
打磨 linker 零件
銼刀
來回
打磨
 磨到可以將伺服機順利置入即可:
 如果該處磨掉很多後伺服機還是很難置入,這是因為
列印件的邊緣可能有些凸起或變形,干涉到伺服機外
殼,請用銼刀將這些邊緣磨掉一些即可:
linker 零件攻牙
 使用工具:2mm 攻牙刀 + 手握夾頭
手握夾頭
2mm
攻牙刀
 將 2mm 攻牙刀套入手握夾頭並鎖緊
1 2
 Linker 零件上需要攻牙的孔,如下圖紅圈處:
俯視圖 底視圖
側視圖1 側視圖2
 攻牙時,請盡量保持攻牙刀與需要攻牙的孔位角度垂
直,不要傾斜,否則孔位可能會被擴大,導致螺絲鎖
入後無法固定。
正確 錯誤
保持與孔位垂直後旋入攻牙刀 攻牙刀角度傾斜時,請勿旋入
90 度
linker 零件鑽孔
 使用工具:2mm 鑽孔刀 + 手握夾頭
手握夾頭2mm
鑽孔刀
 將 2mm 鑽孔刀套入手握夾頭並鎖緊
1 2
 使用鑽孔刀對下圖指示的孔位鑽孔:
俯視圖 底視圖
 使用鑽孔刀時,也請盡量保持與孔洞垂直後,再旋入
鑽孔刀:
鑽孔
操作影片
A_arm_bottom 零件前處理
準備
 取出 A_arm_bottom、 leg 零件
 取出十字型伺服機配件盤
A_arm_bottom leg
十字型配件盤鑽孔
 在十字型伺服機配件盤上,由中心數來第二個孔,用
鑽孔刀鑽出 2mm 的洞,如下圖:
 將鑽孔處垂直 90 度的另一個孔,用鑽孔刀鑽出 2mm
的洞,如下圖:
 拆除 A_arm_bottom 上的支撐,用圓挫刀來回打磨
左下圖箭頭所指的面:
來回
打磨
 磨到將十字型伺服機配件盤靠上時,可以看到孔位對
齊 (如右下圖箭頭所指處):
孔位對齊
 使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭
所指的面:
 持續打磨直到 leg 零件置入後,可以輕鬆旋轉的程度:
※如果已經將 A_arm_bottom 磨掉很多了,leg 零件置入後轉起來還是很緊,
請改為打磨 leg 零件的接觸面
來回
打磨
輕鬆
旋轉
leg
A_arm_bottom 零件鑽孔
 用鑽孔刀對下圖箭頭指示的孔位鑽孔:
鑽孔
A_arm_bottom 零件攻牙
 使用攻牙刀在下圖指示的孔位上攻牙:
攻牙
leg 零件攻牙
 使用攻牙刀在下圖指示的孔位上攻牙:
攻牙
操作影片
A_arm_top 零件前處理
準備
 取出 A_arm_top、leg 零件
A_arm_top
leg
 使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭
所指的面:
 打磨到 leg 零件置入後,可以輕鬆旋轉的程度:
※如果已經將 A_arm_top 磨掉很多了, leg 零件置入後轉起來還是很緊,可
以改為打磨 leg 零件的接觸面
來回
打磨
輕鬆
旋轉
le
g
鑽孔
 用鑽孔刀對下圖指示的孔位鑽孔:
鑽孔
Body_top 零件前處理
準備
 取出 body_top 零件
 使用尖嘴鉗拆除背面支撐
拆除前 拆除後
 重複使用平銼刀打磨拆除支撐後的面,直到伺服機可
以容易的置入:
來回
打磨
攻牙
 用攻牙刀對下圖指示的孔位攻牙 (下圖藍圈處)
攻牙
鑽孔
 用鑽孔刀對下圖指示的孔位鑽孔:
鑽孔
Body_bottom 零件前處理
準備
 取出 body_bottom 零件
 在 body_bottom 零件上置入伺服機,如下圖:
置入
 如果發現很難置入 (置入後出現空隙,如下圖):
空隙
難以壓入伺服機
 請移除伺服機,然後使用平銼刀磨平 body_bottom
與伺服機的接觸表面,直到伺服機可以順利壓入:
來回打磨
 用攻牙刀對下圖指示的孔位攻牙 (左下圖紅圈處):
攻牙
攻牙
 用鑽孔刀對下圖指示的孔位鑽孔 (左下圖紅圈處):
鑽孔
鑽孔
86Duino 簡介
 它是世界上第一個發表的 x86
Arduino 相容板 (比 Intel Galileo 還早)
 比 Arduino 的 CPU 時脈快數十倍
 內建 Arduino UNO/MEGA 板上沒有
的額外硬體(如: SD 卡、LAN 網...
86Duino 的種類和名稱
86Duino ONE
86Duino EduCake
入門款 機器人專用 教育用
86Duino Zero
86Duino 特色 (2/2)
 軟體
 相容 Arduino 的開發環境
 完整相容 Arduino 程式語法、API、標準函式庫
 額外內建 33 個 Arduino 相容函式庫
 完完全全 Made In Taiwan(連 C...
86Duino 計畫緣起
Maker 運動
Arduino 紀錄片
開源、教育夢
86Duino 計劃開始
三年前
N 年前
許多非電子專業的人開始使用開發板
重新從人的角度思考
工程師的夢想
86Duino 開發環境命名
Coding:培養使用者寫程式解決問題的能力,期望人們在應
用 86Duino 的過程中,能不斷精進寫程式(coding)能力,
進而以寫程式(coding)改變世界。
中文名稱:口丁,由於 86Duino 計劃的...
生產 86Duino 的 DM&P 集團
 DM&P 集團為一跨國性的嵌入式系統製造商,以台灣
為設計研發中心及營運總部,在美東、美西、英國、
日本、巴西、深圳、上海、西安均設有分公司。
硬體規格上的差異
 本課程中會用到的 86DuinoZero 或 86DuinoOne,
這兩塊在硬體規格方面,和 Arduino 有什麼相似處?
或不同之處?
Arduino 與 86DuinoZero 硬體規格比較
86DuinoZero 與 Arduino 效能比較表
 Dhrystone 性能評測
Dhrystone 性能評測 sketch 下載:
https://www.facebook.com/download/1026109197423161/...
Zero 與 One 的硬體規格比較
如何將 RC 伺服機連接到
86Duino Zero ?
連接 86Duino Zero
 Zero 開發板沒有 RC 伺服機專用插座,但可透過以下任一
方式與 RC 伺服機連接:
 方法一:使用轉接用的 Arduino shields
 方法二:透過麵包板轉接
 方法三:手工製作伺服機轉接插座
方法一
 使用 Arduino Sensor Shlied 轉接
Arduino Sensor Shlied86Duino Zero
+
+
86Duino Zero
+
Arduino Sensor
shield
RC Servo – SG90 x 3
方法二
 使用麵包板轉接
 只接單顆伺服機時,可直接透過杜邦線連接
杜邦線 RC Servo –
SG90
86Duino Zero
方法三
 使用 2.54mm 杜邦頭製作轉接插座
 86小六足用的方法
將伺服機插在
杜邦插座上
杜邦
插座
杜邦插座
如何將 RC 伺服機連接到
86Duino One
連接方法 (1/2)
 86Duino One 外側有一排為 RC 伺服機設計的插座,
信號安排如右下圖所示:
PWM
VIN
GND
86Duino
One
連接方法 (2/2)
 將 RC 伺服機依正確方向插上:
正確方向
GND (黑線) 電源 (紅線) PWM (黃線)
RC Servo – SG90
接上電源
 86Duino One 左上方的綠色端子台是 RC 伺服機主要
的電源輸入端,允許 6 ~ 24 伏特的電壓輸入:
注意事項 (1/4)
 RC 伺服機本身有自己適合的工作電壓範圍,接上電
源之前,請先閱讀 RC 伺服機的規格書或說明書,確
認其工作電壓,如果輸入的電壓超過工作電壓,太高
可能導致伺服機永久燒毀,太低則會讓伺服機無法運
作。
注意事項 (2/4)
 有些廉價 RC 伺服機設計不良,在啟動瞬間會大幅干
擾 VIN 電源之供給,將 VIN 電源拉低至 6V 以下,這
會使 86Duino 的 CPU 模組啟動欠壓保護而停機。如
發生這種狀況,一個解決方法是更換可瞬間供...
注意事項 (3/4)
 另一方法是從 micro-USB 接頭另外供應穩定的 5V 電源給
CPU 模組,這是市面上伺服機控制板常見的雙電源供電方
式,以 One 為例,如下圖所示:
注意事項 (4/4)
 Zero 雖然可透過板上 5V 直接對吃電較小的伺服機供
電,但連接大電流的伺服機時,應使用雙電源供電。
micro USB:5V
外接電源
86小六足 DIY 流程
 使用 86Duino Enjoy 3D 印表機列印小六足零件
 列印件前處理
 組合足部
 組合身體
組裝概述
用螺絲將伺服機和足部列印件組合起來
歸零伺服機至中點
鎖上伺服機配件盤
完成足部組裝
 組裝完成圖:
準備材料
 2mm x 4mm 螺絲 3 顆
 2mm x 8mm 螺絲 4顆
 2mm x 15mm 螺絲 1顆
 SG-90 伺服機 1 顆
 十字型伺服機配件盤 1 個
※組合一個足部為例
組合足部
 將伺服機如下圖方式壓入 linker 零件:
linker
 用長度 8mm 螺絲鎖緊,如下圖:
長度 8mm 螺絲
 合上 A_arm_top,再用長度 15mm 螺絲鎖緊,如下
圖:
長度 15mm 螺絲
A_arm_top
 A_arm_top 另一側用長度 8mm 螺絲鎖緊,如下圖:
長度 8mm
螺絲
 完成後用手搖動 A_arm_top 零件,如果發現 A_arm_top
搖動起來不順暢,表示 A_arm_top 和 linker 之間的磨擦
力太大,請將上鎖的螺絲鬆開一點再試試看:
搖動 A_arm_top
 假如鬆開螺絲後還是感覺磨擦力很大,請將 A_arm_top
零件拆下,使用銼刀稍微打磨 A_arm_top 和 linker 的接
觸的面後再裝上:
A_arm_top
 鎖上 A_arm_top 零件後,用長度 4mm 螺絲鎖上
A_arm_bottom 零件,如下圖:
長度 4mm
螺絲
 翻到另一面,我們準備將伺服機十字型配件盤裝在伺
服機輸出軸上:
 在裝上配件盤之前,我們先要對伺服機做中點歸零
 中點歸零後的伺服機,可確保足部最大的可動範圍為正負
90度 (共 180 度),如下圖:
中點
旋轉範圍:180 度
伺服機歸零程式
 下載單一伺服機歸零的 sketch 程式:
 http://www.roboard.com/temp/servo.zip
86DuinoZero 歸零程式
#include <Servo86.h> // 使用 Servo86 函式庫
Servo myservo1; // 初始化 Servo 物件
void setup()
{
// 設定 Servo 腳位為 2
m...
86DuinoOne 歸零程式
#include <Servo86.h> // 使用 Servo86 函式庫
Servo myservo1; // 初始化 Servo 物件
void setup()
{
// 設定 Servo 腳位為 21
m...
燒錄 Sketch 程式至 86Duino
 下載 86Duino Coding 210,將 sketch 燒錄至
86Duino
 http://www.86duino.com/86Duino_IDE/86Duino_C
oding_21...
 燒錄完成後, 86Duino 會立刻從指定腳位送出 duty
為 1500us 的 PWM,接著我們要將伺服機與
86Duino 連接起來。
 伺服機連接 86Duino 的步驟
 86DuinoZero
1. 將 PWM 信號線連接至...
86DuinoZero 上的連接方法
 將 PWM 信號線連接至轉接板
 拿出轉接板 1 塊
 拿出 3 條杜邦線 (紅、黑、黃顏色各一條)
杜邦線
轉接板
 轉接板上面的腳位安排如下:
12 組 RC Servo 插座電源/鋰電池
插座
※ 電源/鋰電池插座旁各有一個的紅點和黑點,紅點代表電源,黑點代表地
 轉接板的電路如下圖:
:PWM 信號腳,各別獨立
:電源線,彼此相連
:地線,彼此相連
左圖對應轉接板背面
電源/鋰電池
插座
轉接板背面
 將信號排線和電源線插到轉接板上
 在歸零程式中使用了第 2 腳位做為 PWM 信號輸出腳,
所以我們將杜邦線連接如下圖:
2
5
V
GND
插上需要歸零的伺服機
 伺服機的橘線,為 PWM 信號線
,需接在杜邦線下方 (如右圖)
 伺服機的紅線接在電源 (5V)
 伺服機的黑線接地 (GND)
伺服機橘線要連接在
PWM 信號排線下方
杜邦線
Servo
橘線
86DuinoOne 上的連接方法
 歸零程式中使用了第 21 腳位做為 PWM 信號輸出腳,
我們直接將伺服機連接至 86DuinoOne 即可:
 將 86Duino 接上電源/電池後,伺服機會立即轉到中
點位置,此時請用奇異筆標記如下位置,以利後續不
插電時辨識:
標
記
線
 標記完成後,請拔除伺服機連接線,讓伺服機停止出
力:
 後面步驟即將鎖上配件盤,如果不拔除伺服機連接線,
伺服機會一直保持在中點位置,此時若用螺絲起子將配
件盤鎖上,鎖上的力道容易導致伺服機內部減速機崩牙。
※ 崩牙後的 SG-90 伺服...
 將十字型配件盤的短軸對齊中點 (標記線),套在伺服
機輸出軸上,如下圖所示:
將配件盤的短軸對齊標記線
套在伺服機輸出軸上
標記線
十字配件盤短軸
對齊標記線
十字配件盤短軸
 用 4mm 長度的螺絲 2 根,鎖緊 A_arm_bottom
 使用伺服機配件包中的自攻螺絲鎖緊十字配件盤
長度
4mm
螺絲
伺服機配件包
中的自攻螺絲
 用斜口鉗修飾配件盤,剪除較長的邊,形成下圖:
 用長度 8mm 螺絲 2 顆鎖上 leg 零件,最後完成圖如
下:
長度 2mm 螺絲
Leg
組裝影片
86小六足 DIY 流程
 使用 86Duino Enjoy 3D 印表機列印小六足零件
 列印件前處理
 組合足部
 組合身體
組裝概述
將 6 顆伺服機置入 body_bottom 零件中
蓋上 body_top 零件,用螺絲固定
鎖上 6 個已完成的足部、86Duino 開發板
連接並整理外露的伺服機連接線,完成 86小六足
 將 6 顆伺服機置於 body_bootom,如下圖:
 將落在外側的伺服機連接線,各別拉至身體中央,統
一從一端伸出 (這麼做是為了方便後續整線):
完成圖將伺服機連接線拉進身體
並從一端伸出
 準備蓋上 body_top 零件
 先將 body_top 零件旋轉如下圖:
正確方向 錯誤方向
 蓋上 body_top 零件
 用 6 顆長度15mm 的螺絲鎖緊 body_top,如下圖紅
圈處:
長度 15 mm 螺絲
 使用鑽孔刀對一字型配件盤鑽孔 (由中心數來第二個
孔,如下圖),一共要對 6 個一字型配件盤鑽孔:
一字型配件盤上要鑽孔的孔位 鑽孔完成
 將 6 顆伺服機分別歸零至中點,並畫上標記線
 將一字型配件盤照下圖方式套至伺服機輸出軸:
45 度 45 度
45 度45 度
※ 身體邊角上的伺
服機,每個一字型
配件盤套上伺服機
時, 需要與左圖中的
紅色虛線呈 45 度
 用 3 顆 2mm x 4mm 螺絲固定足部 (2 顆固定配件盤,
另一顆固定 linker 與 body_bottom)
 以自攻螺絲鎖緊伺服機一字型配件盤
長度 4mm 螺絲
長度 4mm 螺絲
長度 4mm 螺絲
伺服機自攻螺絲
 用斜口鉗將一字型配件盤凸出的部分剪除,增加美觀,
如下圖:
 6 個足部全部鎖上後,如下圖:
組合 86DuinoZero 小六足
 對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲固定
86DuinoZero 於 body_top 上
裝上 86DuinoZero 開發板
 用 2 顆 2mm x 4mm 螺絲固定擴充板:
長度 4mm 螺絲
 使用杜邦線連接 86DuinoZero 與擴充板
 PWM 信號線、電源線、地線共 14 條,擴充板上的腳位對應
如下:
2 3 4
5
6 7 8
9
10 11 12
13
電源 (VIN)
地 (GND)
 使用 12 條黃色 (PWM)、1 條紅色(VIN)、1 條黑色
(GND)的杜邦線連接 86DuinoZero 和轉接板:
 將足部的伺服機連接線穿過 body_bottom 下方的孔
足部伺服機連接線
連接伺服機與擴充板
 86小六足伺服機編號與擴充板上的腳位對應如下:
1
2
34
5
6
7
8
9 10
11
12
 將所有伺服機連接線連接至擴充板上:
組合 86DuinoOne 小六足
 對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲將
86DuinoOne 固定於 body_top 零件上
裝上 86DuinoOne 開發板
 將足部伺服機連接線穿過 body_bottom 下方的孔
足部伺服機連接線
連接伺服機與擴充板
 86小六足伺服機編號與擴充板上的腳位對應如下:
1
2
34
5
6
7
8
9 10
11
12
 將所有伺服機連接線連接至 86DuinoOne 上:
 我們將外露的連接線稍做整理,讓 86小六足看起來更
美觀。
 無論使用 86DuinoZero 或 86DuinoOne,整線方法都
相同,下面我們以 86DuinoZero 為例,介紹整線方法。
伺服機連接線整理
 先將外露的伺服機連接線拉至 86小六足身體內,如下
圖:
將伺服機連接線塞進 86小六足身體
連接線整理
 將伺服機連接線來回折短,用束線帶固定在兩旁支架:
折短的
伺服機
連接線
束線帶
示範影片
 用 束線帶固定完成後,盡量讓下圖紅框處沒有伺服機
連接線穿過,因為這是未來要放置鋰電池的空間
 最後完成如下圖:
鋰電池空間
置入鋰電池後的完成圖
7.4V 850mA 鋰電池
組裝身體影片
附錄- 接上鋰電池
 接上鋰電池前,請注意
 7.4V 鋰電池充飽時,一般電壓是 8.2V ~ 8.4V,86小六
足使用的 SG-90 伺服機,操作電壓為 4.8V ~ 7.2 V。如
果直接接上充飽的鋰電池,會因過高的電壓造成 SG-9...
 鋰電池放電的方法
 閒置鋰電池,等待內部自放電至適合電壓 (缺點:等待時間長)
 接上 20 歐姆 40W 的水銀電組主動降壓 (約 20 分鐘後降到適合電
壓)
 除了將鋰電池放電,我們也可以直接用充飽的鋰電池,透
過 DC to DC 降壓模組為 86小六足供電
 由於 86小六足身上的 12 顆 SG-90 啟動電流會超過 3A,
建議購買提供電流超過 5A 的 DC-DC 降壓模組
DC-DC...
** 鋰電池的電源線,
紅線必需朝著伺服機,
黑線朝外,不可弄反!!
鋰電池腳位
鋰電池電源線
連接鋰電池的方法 – 86DuinoZero
連接鋰電池的方法 – 86DuinoOne
將 2 pins 的杜邦針腳鎖在綠色端子台上:
連接鋰電池的方法 – 86DuinoOne
鋰電池電源線
依照下圖方向插上鋰電池電源線:
紅線接 +
黑線接 -
+
-
Arduino/86Duino
控制伺服機方式簡介
Arduino 控制伺服機:
使用 Servo 函式庫
 attach() - 初始化 Servo pin
 write() - 控制 Servo 轉動至 0 ~ 180 度
 writeMicroseconds()- 輸入 PWM du...
範例程式
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.write(900);
delay(1000);
myservo.write(20...
Servo 函式庫的改良:
86Duino Servo86 函式庫
 可設定每顆伺服機轉動速度
 可同步控制多顆伺服機轉動,並且在同時間內到達目標位置
 可支援最多 45 顆伺服機同步控制
 改善 PWM Duty 抖動(jitter)...
範例程式
#include <Servo86.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.write(900);
delay(1000);
myservo.setVel...
PWM Duty 抖動現象 (1/2)
 由於舊的 Arduino Servo 函式庫裡 PWM 是用軟體模擬的
方式來實現,所以會出現以下情形:
 實際輸出的 PWM duty 時間會有抖動現象 (jitter)
 當使用的 PWM c...
PWM Duty 抖動現象 (2/2)
 以示波器量測 Arduino 輸出的 PWM duty,如下圖:
 因抖動造成的誤差範圍與 CPU 特性及軟體模擬算法有關
抖動現象
以 Arduino UNO 為例, 觀察 PWM 抖動情況
+
示波器 Arduino UNO
波型抖動
實況影片:
PWM 抖動現象的影響
 在命令解析度比較高的 RC Servo 上, 會造成 servo 輸出軸
實際的抖動
 一般模型用的低價 RC Servo 解析度較低, 受 PWM 抖動現
象的影響不大
Arduino UNO
+
KONDO
K...
 在 Arduino 和 86Duino 上只使用 1 個 servo pin, 並量測
輸出的 PWM duty 與目標值的誤差,所測得的數據如下:
各板子的 PWM Duty 抖動實測 (1/2)
板子 目標
duty
實際量測值 dut...
 在 Arduino DUE / Mega2560 和 86Duino 上啟用 45 組
servo pins, 並量測其中一個 pin 輸出的 PWM duty 與目
標值的誤差, 所測得的數據如下表所示:
各板子的 PWM Duty 抖動...
用動畫的概念控制機器人動作
動畫播放原理 (1/3)
 翻書動畫:https://www.youtube.com/watch?v=oOgHzcrVG1s
動畫播放原理 (2/3)
動畫播放原理 (3/3)
Frame (幀) 的概念
 機器人的動作編輯,也可以視為在編輯圖片中人物的
動作,一個動作(畫面)稱為 ”幀 (Frame)”,多個
靜止動作透過 Servo86 函式庫連續播放出來,機器
人就會動起來了。
 在一些專用的機器人控制板中,...
機器人動作編輯與播放
編輯 Frame 1 編輯 Frame 2 編輯 Frame 3 編輯 Frame 4 編輯 Frame 5
…
播放全部
Frames
影片:
 動畫 Frame 每張圖片上的人物姿勢
 機器人 Frame 伺服機目標位置列表
Frame1: 1500, 1300, 1200, 900, 1765, 1809, 1243, 1200,990, 754, 2000 …
Frame2:...
86ME 機器人動作編輯器簡介
86ME
 機器人專用動作編輯器,編輯機器人動作 Frame 變得
更 輕 鬆 , 可 以 自 動 產 生 使 用 Servo86 函 式 庫 的
86Duino 的程式,省掉我們寫程式的工夫
 是一套綠色、開源軟體,解開可立即使用,無須安...
使用 86ME 的基礎觀念
 Frame
 各個伺服機角度所組成的一個姿勢
 Motion
 展現一連串 frame 的整個過程
 homeframe
 機器人上電之後所會展現的第一個 frame,編輯各個 frame 時的
初始值...
86ME 功能簡介
 支援線上調整 offset 與 homeframe
 支援線上調整 frame,讓使用者能立即看到編輯結果
並即時調整
 支援編輯多個動作 (motion),並且可即時播放動作的
連續 frame
 可設定 mot...
86ME Demo 影片
https://www.youtube.com/watch?v=LZhoCQ4E-N4
86ME 安裝和使用教學
86ME 安裝
1. 下載最新版 86ME:
 http://www.86duino.com/index.php?page_id=8923
&lang=TW
2. 解壓縮檔案,進入 86ME 資料夾後檢查有下列檔案
即完成安裝
3. 目前僅支...
86ME 與 86Duino 的溝通方式
USB 線
PC 上的 86ME
燒錄
86Duino
86ME 韌體程式
燒錄 86ME 的韌體至 86Duino
 使用一條 USB 線將電腦與 86Duino 連接起來
燒錄 86ME 的韌體至 86Duino
1. 打開 86Duino Coding IDE
2. 選擇工具 > 板子 > 86Duino Zero
3. 選擇工具 > COM port > (86Duino 的虛擬連接埠)
4. 選擇 檔案 >...
燒錄 86ME 的韌體至 86Duino
 按下燒錄按鈕,之後看到 Uploading the binary sketch …
Done 訊息,說明燒錄已完成
燒錄
完成
開啟 86ME
 韌體燒錄完成後,關閉 86Duino IDE,滑鼠左鍵雙擊
86ME,此時會看到連接埠選擇視窗
 選擇 86Duino 虛擬連接埠,也可以選 Auto 由 86ME
自動選取
自動抓取 COM port
離線模式
選定一個...
新增專案 (1/6)
 選擇好連線模式之後,會出現主畫面如下:
新增專案 (2/6)
 此時大部份的控制鍵是不能使用或無效的,要在畫面
左上方點選新增一個專案或是讀取一個專案後才能再
進行後續動作:
新增專案
讀取專案
新增專案 (3/6)
 新 增 專 案 後 會 彈 出 Robot
Configuration 介面。這個介面
是用來設定所使用的 86Duino
型號、機器人的圖片、各 Pin 腳
的伺服機型號,以及設定 Home
的位置與各個伺服機的 O...
新增專案 (4/6)
設定 86Duino 型號
設定伺服機型號
設定是否同步、Offset、
歸 Home 時的角度
新增專案 (5/6)
 86小六足有十二個自由度,所以至少要選用 12 個伺
服機才能充分發揮小六足動作
 範例中,86DuinoZero 規劃給 86小六足使用的腳位
為 2~13,型號為 TOWERPRO_SG90
 這時利用線上調整...
盡量呈現水平
觸地
新增專案 (6/6)
 最下方的 Load Robot Picture 按鈕可以讓使用者載入
機器人圖片,方便對應機器人和伺服機之間的位置:
1. 2.
按下 OK 後,會
被載入指定圖片
載入圖片
功能:
完成新增專案
 設定完成後按下 OK,接著 86ME 會開啟 Motion
Name 欄位可供使用者建立 Motion
用 86ME 編輯一個 Frame
編輯 Frame (1/6)
1. 在畫面右邊的 Motion Name 欄位中輸入字串,替動作
取名
2. 按下上方的 Add Motion 按鈕建立 Motion,Motion 可
以含有許多不同的 Frame 或其他 Action 來組成...
編輯 Frame (2/6)
3. 在 Action List 空白處按滑鼠右鍵
4. 選擇 Add new action at the first field
5. 選擇 Frame
選擇 Frame
編輯動作 (3/6)
 新增一個 Frame 後,你會在左邊的空白區塊看到以
CH<num>開頭的控制項出現在左邊的空白區域,而
num 即為伺服機腳位編號,編號後面接的數字是 PWM
duty,數字後面的拉桿可以調整 PWM duty 大小...
編輯動作 (4/6)
 調整 PWM duty:可以手動輸入或是以滑鼠左鍵拉動拉桿
來調整
編輯動作 (5/6)
 為了要讓使用者方便對應馬達的編號與實際的位置,使用
者可以在 Robot Configuration 中載入機器人圖片,空白
區域底圖會設為此圖
 滑鼠指到 CH 字樣時會出現 圖示,可以把整個控制項拖
拉到圖片中機...
滑鼠左鍵拖曳
編輯動作 (6/6)
 線上調整 Frame:勾選左上角的 Sync,此時當你拖拉光
桿來改變 PWM duty 的時候,伺服機也會同步跟著動作
編輯完成
 利用線上同步編輯伺服機角度的功能,可以方便的調
整一個 Frame
 當我們調整好 12 個伺服機角度時,第一個 Frame 就
完成了
完成一個 Motion
新增 Frame (1/3)
 只有一個 Frame 無法完成前進、後退等等的動作,我
們需要新增更多 Frame 來完成一個 Motion
1) 在剛剛 Frame 0 的下方再新增一個 Frame 1
2) 滑鼠右鍵選擇
add new ...
新增 Frame (2/3)
 做為範例,我們先編輯 4 個測試動作,如下圖所示:
新增 Frame (3/3)
 另一個新增方式:Duplicate frame
 會複製所選 Frame 並新增在下方,若下個 Frame 大部
分的伺服機角度與上個 Frame 相同,就可以利用此功
能來新增 Frame
測試動作
測試動作 (1/3)
 有了 4 個 Frame,86ME 右上方像音樂播放器的按鈕,
可以幫助我們實現連續 Frame 的播放、暫停和停止:
測試動作 (2/3)
 播放:全部 Frame 會從頭執行到底,共一次
 暫停:保持目前播放到的位置並暫停播放,再按一次
播放時會從上次暫停的地方開始
 停止:從目前播放到的位置中斷但不記住位置
測試動作 (3/3)
從頭到底播放一次 暫停動作,再按
播放後會從暫停
處繼續往下播放
至底
停止播放
暫停 停止
循環播放
循環播放
 我們要用到兩個元素: Flag 和 Goto
 Flag & Goto 必須成對才會有作用,流程如下:
播放到 Goto 時
是否有同
名的 Flag
是
否
不跳轉,繼續播放
依照 Goto
所設定之條
件判斷是否
跳轉
是
...
Flag
 新增 Flag
 設定 Flag Name
選擇 Flag
Goto
 新增 Goto
選擇 Goto
 點擊 Goto 後,左邊空白處會出現設定項目:
 Target Flag Name:選擇要跳到哪個 Flag
 Enable Goto:選擇是否啟用 Goto 功能
 Loop Infinitely:選擇是否啟用循環功能
設定無限循環播放
 Target Flag Name:選擇要跳到哪一個目標 Flag
 Enable Goto:打勾
 Loop Infinitely:打勾
設定有限循環播放
 將 Loop Infinitely 打勾取消,下方的 Number of
loops 的數值可以決定要 Goto 幾次後停止播放
 以下圖為例, Number of loops 填 2,這邊的次數為
Goto 會跳轉的次...
編輯第二個 Motion
新增 Motion
1. 打上新的 Motion 名稱,按下 Add Motion 按鈕
2. 此時 Motion name 下拉式選單的內容也會跟著更
新,如下圖
Motion 觸發設定
觸發概念簡介
 觸發的概念即利用某些控制方式來驅動小六足的動作
觸發
設定觸發方式
 86ME 允許每個 Motion 設定一個觸發條件,目前共
有四種方式:
 Auto
 Keyboard
 Bluetooth
 PS2 Controller
第一個觸發方式:Auto
 Always On
 永遠觸發目前所選的動作
 Always Off
 永不觸發目前所選的動作
 Start Up
 目前所選的動作只會在開機後執行一次
第二個觸發方式:Keyboard
 Keyboard
 Key:選擇以哪個按鍵觸發
 Type:何種狀態下觸發,分為
 First Press(第一次按下)
 Pressed(一直按住)
 Release(放開)
第三個觸發方式:Bluetooth
 Bluetooth
 Key:選擇以甚麼樣的字元觸發
 Baud Rate:選擇藍芽模組所採
用的 Baud Rate
 Used Port:選擇藍牙模組是連
接在 86Duino 的哪個 Port...
第四個觸發方式:PS2 搖桿
 PS2 搖桿
 Key:選擇搖桿上的按鈕以用來觸
發動作
 Type:與 Keyboard 相同
 DAT、CMD、ATT、CLK 為 PS2
接收器接上 86Duino 時需要接的
腳位,須選擇自己接線...
啟用觸發條件
 設定完成的觸發條件不會立即反應在 86Duino 上,我
們要使用自動產生 sketch 的按鈕,並且將產生的
sketch 程式燒錄至 86Duino 才會起作用。
產生 86Duino sketch 程式
產生 86Duino Sketch (1/3)
 86ME 可以將編輯好的所有 Motion 產生成 86Duino
Sketch,燒錄產生的 Sketch 進 86Duino 後,86Duino
會根據觸發條件判斷是否操作這個 Motion...
產生 86Duino Sketch (2/3)
• Frame 檔與 sketch 分開:
• 按下下圖中的第一個按鈕,會產生 Offset 檔、86Duino Frame
檔與 sketch 程式 (.ino 檔)
• Offset 檔、 F...
產生 86Duino Sketch (3/3)
• 所有 Frame 直接寫在 sketch 內(建議方式,不需 SD 卡)
• 按下下圖中第二個按鈕,只會產生一個 sketch 程式 (.ino 檔),
Offset 與 Frame 皆已寫好...
認識六足 –
六足機構原理
六足機構原理
足部的機構設計
 Serial 機構
 parallel 機構
工作空間的考量
足部機構設計
 昆蟲單足的腿部構造
足部機構設計
 一隻腳可以達到 6 DOF
 機構設計必須考慮單足的自由度(簡化)
 自由度的多寡會影響工作空間的大小及靈活性
 機構設計必須考慮工作空間的大小
足部 serial 機構設計
 單足 1 個自由度的設計
 即使是 1 DOF,靈活性還是很好
影片網址:http://www.youtube.com/watch?v=a0NFrA-Nx4Y
足部 serial 機構設計
 單足 2 個自由度的設計
影片網址: https://www.youtube.com/watch?v=MMrbYbdmvqM
足部 serial 機構設計
 單足 3 個自由度的設計
影片網址: http://www.youtube.com/watch?v=0jyBiECoS3Q
足部 serial 機構設計
 單足 4 個自由度的設計
影片網址: http://www.youtube.com/watch?v=6J9GKPKTyb8
足部 parallel 機構設計
 單足 2 個自由度的設計
平行機構
影片網址: http://www.youtube.com/watch?v=RVqn-UZahpw
足部機構設計
 Serial 機構的特性
 腿節長度(L)是固定的
 角度(β)需要脛節馬達的帶動才會變化
 腿節與脛帶的動作是獨立的
L
β
足部機構設計
 下列以 DMP Hexapod 示範
 腿節長度由短變長
 腿節的動作帶動脛帶的動作
 只轉動腿節的馬達,脛節的馬達是不動的
 足部夾角由小變大
足部機構設計
這顆馬達
是沒有動
作的
只會轉動
這 顆馬達
足部機構設計
足部機構設計
足部機構設計
 Parallel 機構腿節長度不固定
 增加六足機器人運動學計算的難度
足部機構設計
 Parallel 機構腿節的動作可以帶動脛帶的動作
 可以考慮脛節少負載一個馬達
 編輯六足機器人的歩行變得容易
 編輯動作可以不用考慮脛節馬達的位置
足部機構設計
 Parallel 機構工作空間的受限
 腿部的位置會影響脛部的工作空間
 脛節馬達轉動的角度大於 180 度
足部機構設計
 脛節馬達轉動的角度約 100 度
足部機構設計
 腿部的工作空間會受 parallel 機構影響
 脛節馬達轉動的角度約 120 度
Parallel vs. Serial
Parallel 機構 Serial 機構
工作空間 較小 較大
動作編輯 容易 較難
運動學計算 較繁瑣困難 較直接簡單
認識六足 –
六足步態簡介
步態類型
 Tripod 步態
 Wave (Metachronal) 步態
 Ripple 步態
Tripod Gait
 三足同步的方式
 (L1,R2,L3) -> (R1,L2,R3) -> (L1,R2,L3) -> …
 步徏轉移的時間較短
 行進的速度較快
Tripod Gait (影片)
影片網址: https://www.youtube.com/watch?v=O4rff7KnkeA
Wave Gait
 單足行進的方式
 L3 -> L2 -> L1 -> R3 -> R2 -> R1 -> L3 -> …
 步徏轉移的時間較長
 行進的速度較慢
Wave Gait (影片)
影片網址: http://www.youtube.com/watch?v=6F5VSLm3qkY
Ripple Gait
 單足行進的方式
 L3 -> R1 -> L2 -> R3 -> L1 -> R2 -> L3 -> …
 步徏轉移的時間較長
 行進的速度較慢
Ripple Gait (影片)
影片網址: http://www.youtube.com/watch?v=5ro_1-6ADQM
認識六足 –
DMP 小六足
DMP 小六足 (影片)
 內部研發自我消遣用 (做好玩的)
 平行機構
 可自適應地形
 具前方避障功能
 內部使用逆運動學計算
步伐
影片網址:https://www.youtube.com/watch?v=MuY1w_5qIOk...
DMP 小六足 (影片)
 DMP 暑期實習生專題
 六足蠍子 - 史迦納
 Serial 機構
 內部使用逆運動學來
計算步伐
 根據展現的動作會發出
不同音效
影片網址:https://www.youtube.com/watch?...
使用 86ME 編輯小六足動作
概念說明
 六足的常見步態有 Tripod、Wave、Ripple,而我們所採用的範例為
Tripod 步態,同時會有三隻腳觸地,另外三隻腳離地,機器人的移動
是藉由觸地的腳位移產生。而這三隻腳如下圖是分為兩組,抬腳時會
一起行動。
右上-左...
標注說明
 之後會說明 86小六足的範例步態,為了方便理解,會
以實際圖片加上輔助的標注來表達
 腳部抬升離地以 表示, 表示放腳觸地
標注說明
 圖片皆為俯視圖,上方為小六足的前方
前方
編輯前進動作
前進的方式 (1/6)
 紅組抬腳
 紅組向前
 藍組向後
慢動作播放影片
前進的方式 (2/6)
 紅組放腳觸地
 其餘不動
慢動作播放影片
前進的方式 (3/6)
 藍組抬腳
 其餘不動
慢動作播放影片
前進的方式 (4/6)
 藍組向前
 藍組抬腳
 紅組向後
慢動作播放影片
前進的方式 (5/6)
 藍組放腳觸地
 其餘不動
慢動作播放影片
前進的方式 (6/6)
 紅組抬腳
 其餘不動
慢動作播放影片
連續慢動作播放前進影片
實際調整前進動作 (1/6)
 第一個 Frame:
playtime 300 ms
實際調整前進動作 (2/6)
 第二個 Frame:
playtime 150 ms
實際調整前進動作 (3/6)
 第三個 Frame:
playtime 150 ms
實際調整前進動作 (4/6)
 第四個 Frame:
playtime 300 ms
實際調整前進動作 (5/6)
 第五個 Frame:
playtime 150 ms
實際調整前進動作 (6/6)
 第六個 Frame:
playtime 150 ms
完成前進動作
 將編輯好的 frame 連續播放,86小六足就能向前奔跑囉
 若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
編輯左轉動作
左轉的方式 (1/6)
 藍組抬腳
 前後移動如圖
慢動作播放影片
左轉的方式 (2/6)
 藍組放腳觸地
 其餘不動
慢動作播放影片
左轉的方式 (3/6)
 紅組抬腳
 其餘不動
慢動作播放影片
左轉的方式 (4/6)
 紅組抬腳
 前後移動如圖
慢動作播放影片
左轉的方式 (5/6)
 紅組放腳觸地
 其餘不動
慢動作播放影片
左轉的方式 (6/6)
 藍組抬腳
 其餘不動
慢動作播放影片
連續慢動作播放左轉影片
實際調整左轉動作 (1/6)
 第一個 Frame:
delay 300 ms
實際調整左轉動作 (2/6)
 第二個 Frame:
delay 150 ms
實際調整左轉動作 (3/6)
 第三個 Frame:
delay 150 ms
實際調整左轉動作 (4/6)
 第四個 Frame:
delay 300 ms
實際調整左轉動作 (5/6)
 第五個 Frame:
delay 150 ms
實際調整左轉動作 (6/6)
 第六個 Frame:
delay 150 ms
完成左轉動作
 將編輯好的 frame 連續播放,86小六足就能左轉囉
 若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
編輯右轉動作
右轉的方式 (1/6)
 藍組抬腳
 前後移動如圖
慢動作播放影片
右轉的方式 (2/6)
 藍組放腳觸地
 其餘不動
慢動作播放影片
右轉的方式 (3/6)
 紅組抬腳
 其餘不動
慢動作播放影片
右轉的方式 (4/6)
 紅組抬腳
 前後移動如圖
慢動作播放影片
右轉的方式 (5/6)
 紅組放腳觸地
 其餘不動
慢動作播放影片
右轉的方式 (6/6)
 藍組抬腳
 其餘不動
慢動作播放影片
連續慢動作播放右轉影片
實際調整右轉動作 (1/6)
 第一個 Frame:
delay 300 ms
實際調整右轉動作 (2/6)
 第二個 Frame:
delay 150 ms
實際調整右轉動作 (3/6)
 第三個 Frame:
delay 150 ms
實際調整右轉動作 (4/6)
 第四個 Frame:
delay 300 ms
實際調整右轉動作 (5/6)
 第五個 Frame:
delay 150 ms
實際調整右轉動作 (6/6)
 第六個 Frame:
delay 150 ms
完成右轉動作
 將編輯好的 frame 連續播放,86小六足就能右轉囉
 若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
 雖然現在有了前進、左轉、右轉等動作,但仍是靠著
USB 線連接 86小六足才能動作。接下來,我們要將
動作燒錄至 86小六足,並且介紹如何用第三方控制器
(如:鍵盤、手機或 PS2 搖桿)來選擇播放的動作。
動作觸發方式的設定
USB 鍵盤觸發
 在 86ME 中,假設以英文大寫字母 W、A 、D 分別代
表前進、左轉、右轉的動作,設定如下:
持續按著 W 鍵觸發
前進動作
持續按著 A 鍵觸發
左轉動作
持續按著 D 鍵觸發
左轉動作
前進 左轉 右轉
藍牙觸發
 在 86ME 中,假設以英文大寫字母 U、L 、R 分別代
表前進、左轉、右轉的動作,設定如下:
收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作
前進 左轉 右轉
PS2 搖桿觸發
 在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右
分別代表前進、左轉、右轉的動作,設定如下:
持續按著十字鍵的”
上”觸發前進動作
持續按著十字鍵的”
左”觸發前進動作
持續按著十字鍵的”
右”觸發前進動作
※ ...
 全部設定完成後,按下 Generate 86Duino sketch
(All in One) 按鈕,將產生出來的 .ino 燒錄至
86Duino。然後拔除 86小六足的 USB 線,接上鋰電
池,開始用指定的第三方控制器控制 86小六足...
實作觸發範例 –
用手機藍牙遙控 86小六足
手機藍牙控制原理
 我們會使用一塊藍牙模組與 86DuinoZero 連接,藍
牙模組會接收手機藍牙 APP 送來的命令,並將命令透
過 UART 介 面 送 給 86DuinoZero , 收 到 命 令 的
86DuinoZero 便將指...
 示意圖:
86Duino Zero
藍牙模組
UART
伺服機伺服機 伺服機
PWM
86小六足
PWM
藍牙遙控
‧‧‧ ‧‧‧
手機藍牙遙控步驟
下載藍牙遙控 APP
設定藍牙觸發
產生 sketch 程式
燒錄 sketch 程式
使用
86ME
使用
86Duino IDE
使用
手機
設定按鍵字元
藍牙配對
開始遙控 86小六足
連接藍牙模組86DuinoZero
86DuinoZero 連接藍牙模組
 準備 HC-06 或 HC-05 模組 1 塊(以下以 HC-06 藍
牙模組做為範例說明):
 HC-06 對外連接介面為 UART,連接腳有 4 支:VCC、
GND 、RXD 、 TXD
 這裡我們以 86DuinoZero 的 Serial1 為例,對照下表,
連接 86DuinoZero 與 HC-06 :
 實際連接如下圖所示:
藍牙模組 HC-06
藍牙 TXD 接 pin 0
藍牙 RXD 接 pin 1
RXD TXD
 當 HC-06 接上電源後,可以看到上面的 LED 燈號快
速閃爍 (間隔約 0.2 秒),代表 HC-06 正在等待配對:
快速閃爍
1) 選擇一個小六足動作
 例如:forward
2) 選擇 Trigger 分頁
3) 選擇 Bluetooth 為觸發方式
4) 選擇要觸發這個動作的字元
 該字元可以於手機藍牙 APP 中自由設定
 例如:英文字大寫 U
5) 選擇...
86ME 產生 Sketch 程式
 按下 86ME 右下角的 “Generate 86Duino sketch (All in
One” 按鈕,它將自動產生 86Duino sketch 程式
燒錄藍牙控制程式
 打開 86Duino IDE,選擇檔案 > 開啟... ,選擇剛剛
86ME 產生出來的程式
 然後按下 86Duino IDE 的燒錄按鈕,將程式燒錄至
86Duino 上
燒錄
下載藍牙遙控 APP
 手機環境為 Android 系統:
 在 Google 商店中搜尋 “Bluetooth Controller”
 手機環境為 iOS 系統
 APP store 中搜尋 “LightBlue”
※下面我們以 A...
設定按鍵名稱和對應字元
 打開 Bluetooth Controller,點擊 “Set Keys”
 進入設定畫面後,我們要設定按鍵名稱 “Key Name”
和對應字元 “Data of Key”
 對應 86ME 中選取的動作名稱,這裡的按鍵名稱也命
名為 “forward”,觸發字元為 “U”,如右下圖:
 回到主畫面,會看到下方按鍵上出現剛剛設定的名稱:
 按下 Scan,APP 會自動搜尋並列出附近的藍牙裝置:
 這裡我們選 HC-06,APP 將會自動配對
 配對成功後,下方會出現 “Connect to HC-06” 訊息
 配對成功同時,我們也可以看到 HC-06 藍牙模組的
LED 燈從快速閃爍狀態,改為常亮狀態,此時代表我
們可以用手機藍牙遙控 86小六足了!!
常亮
 此時手機上按下 forward 按鈕,就可以看到 86小六
足播放前進的動作了:
使用其他藍牙 APP
 可以安裝具有控制鍵等圖形的藍牙 APP,讓操控介面
變得更直覺。例如:
BlueControl Arduino BT Joystick Free
小六足動作程式解析
 我們將 86ME 產生出來的程式稱為 86小六足動作程式
 86小六足動作程式運作流程如下:
解析命令 (有設定觸發條件的情況)
Servo86 函式庫
Timer
GPIO
GPIO
GPIO
… …
 由於 86小六足動作程式只使用一個函式庫:Servo86,
因此,我們要先對 Servo86 函式庫有基礎的認識,後
面在講解 86小六足動作程式時會比較容易理解其運作
原理。
Servo86 函式解說
單一伺服機設定函式
 setVelocity()
 setPosition()
 setOffset()
 setRealTimeMixing()
setVelocity()
 設定伺服機的轉速。
 傳入參數:轉動速度,單位 us/s
#include <Servo86.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myserv...
setPosition()
 設定伺服機目標角度。(在呼叫 run() 之前,伺服機還不會轉動)
 傳入參數:目標角度和轉動時間。您也可以不設定轉動時間,此時伺
服機會用最快速度轉到目標位置。
#include <Servo86.h>
Se...
setOffset()
 設定伺服機原點的微調角度
 用於校正伺服機原點誤差及機器人組裝的位置誤差
 傳入參數:微調值,範圍 -256 ~ 256,單位 us
#include <Servo86.h>
Servo myservo;
voi...
setRealTimeMixing()
 動態設定伺服機對目標角度的偏移值。當機器人裝有感應
器的情況下,此函式可以將感測器回傳的偏差值即時加入
目標角度的運算式中,進而修正伺服機的目標角度。
 此功能的一個應用是可根據陀螺儀的回傳數值對機...
單一伺服機動作函式
 run()
 pause()
 resume()
 stop()
 release()
 isMoving()
run()
 啟動伺服機(伺服機開始出力)往目標角度轉動
 傳入參數:無
#include <Servo86.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.setPo...
pause()
 暫停正在動作的伺服機。
 傳入參數:無
resume()
 恢復暫停中的伺服機
 傳入參數:無
#include <Servo86.h>
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.write(1500); // 將伺服機轉到 1500us 初始位置
delay(100...
stop()
 停止動作中的伺服機。
 經由 stop() 停止的伺服機無法 resume。呼叫 stop() 後
必須重新設定伺服機目標角度以及呼叫 run(),才會讓
伺服機再往目標角度移動。
 傳入參數:無
release()
 讓伺服機停止出力
 前面提到的 stop()、pause(),呼叫後伺服機會停下並
持續出力。而 release() 則會使伺服機停下並處於脫力
(不出力) 狀態。
 輸入參數:無
isMoving()
 回傳伺服機是否已到達目標位置
 傳入參數:無
 回傳:true (伺服機仍在轉動,尚未到達目標位置) 或
false (伺服機已到達目標位置)
多伺服機同時動作函式
 servoMultiRun() - 同時啟動多顆伺服機
 servoMultiPause() - 同時暫停多顆伺服機
 servoMultiResume() - 同時恢復多顆伺服機
 servoMultiStop...
#include <Servo86.h>
Servo servo1; Servo servo2;
void setup()
{
servo1.attach(6); servo2.attach(10); // 使用 pin 6、10
servo1...
Servo86 函式庫對 Frame 的支援
ServoFrame 函式
 ServoFrame 類別
 positions[]
 setPositions()
 playPositions()
 load()
 save()
positions[]
 儲存所有伺服機位置的列表。最多 45 顆伺服機。
#include <Servo86.h>
Servo myservo0; Servo myservo1; Servo myservo2;
ServoFrame myf...
setPositions()
 把代表 Frame 的目標位置列表分別指定給各伺服機
 輸入參數:轉動時間和 Servo 類別。轉動時間可以不
輸入,如果沒有輸入時間,預設會用最快的速度轉到
目標位置。
#include <Servo86.h>
Servo myservo0; Servo myservo1; Servo myservo2;
ServoFrame myframe; // 宣告一個 Frame 物件
void setup()
{
m...
playPositions()
 把代表 Frame 的目標位置列表指定給各伺服機並立即控制
伺服機移動到 Frame 指定的角度
 等同先呼叫 setPositions() 再接著呼叫 servoMultiRun() 的
效果
 輸入參...
#include <Servo86.h>
Servo myservo0; Servo myservo1; Servo myservo2;
ServoFrame myframe; // 宣告一個 Frame 物件
void setup()
{
m...
save()
 儲存目前的 Frame 至指定檔案
 輸入參數:86Duino Frame 檔名
#include <Servo86.h>
Servo myservo1; Servo myservo2; Servo myservo3;
Se...
load()
 載入 86Duino Frame 檔案
 輸入參數:86Duino Frame 檔名
#include <Servo86.h>
Servo myservo1; Servo myservo2; Servo myservo3;
...
擴充的 ServoFrame 類別
(可以用來讀取其他專用伺服機控制板的 Frame 檔)
Pololu RC 伺服機控制板
Pololu Maestro
影片網址:https://www.youtube.com/watch?v=AqToEWmTVXA
Demo 影片
Pololu 動作編輯器
※ 會將動作儲存到一個特定格式的 .txt 檔
ServoFramePololu 函式
 ServoFramePololu 類別
 positions[] – 功能與 ServoFrame 一樣
 setPositions() – 功能與 ServoFrame 一樣
 playPos...
load()
 讀取 Pololu Frame 檔案
 傳入參數:檔案名稱、Sequence 名稱和 Frame 名稱
 Sequence 名稱和 Frame 名稱可在 Pololu 編輯器中查
詢取得
 回傳:true 為讀取成功,f...
#include <Servo86.h>
Servo myservo1; Servo myservo2; Servo myservo3;
ServoFramePololu myframe;
void setup()
{
myservo1.att...
Innovati RC 伺服機控制板
影片網址: https://www.youtube.com/watch?v=SOrZUK1i34g
控制機器人影片
Innovati 動作編輯器
※ 會將編輯好的 Frame 個別存到 .ftxt 檔
ServoFrameInno 函式
 ServoFrameInno 類別
 positions[] – 功能與 ServoFrame 一樣
 setPositions() – 功能與 ServoFrame 一樣
 playPositio...
load()
 讀取 Innovati Frame 檔案
 傳入參數:Frame 檔案名稱
 回傳:true 為讀取成功,false 為失敗
#include <Servo86.h>
Servo myservo1; Servo myservo2; Servo myservo3;
ServoFrameInno myframe;
void setup()
{
myservo1.attac...
KONDO RC 伺服機控制板
控制機器人影片KONDO RCB-1/RCB-3
影片網址: https://www.youtube.com/watch?v=KPaTl9qljRU
KONDO 動作編輯器
※ 會將編輯好的 Frame 全部存在一個 .RCB 檔
KONDO Frame 函式
 ServoFrameKondo 類別
 positions[] – 功能與 ServoFrame 一樣
 setPositions() – 功能與 ServoFrame 一樣
 playPositions...
load()
 讀取 KONDO Frame 檔案
 傳入參數:檔案名稱和 Frame 名稱
 Frame 名稱可在 KONDO 編輯器中查詢取得
 回傳:true 為讀取成功,false 為失敗
#include <Servo86.h>
Servo myservo1; Servo myservo2; Servo myservo3;
ServoFrameKondo myframe;
void setup()
{
myservo1.atta...
支援 KONDO 伺服機的
位置回授功能
KONDO 機器人專用伺服機 (1/2)
KRS-786 KRS-788HV KRS-4014
KONDO 機器人專用伺服機 (2/2)
 這種伺服機除了可以控制角度外,也具有抓取位置功能。
可以用來做教導式的機器人的動作編輯,如下面影片:
影片網址: https://www.youtube.com/watch?v=8ucti15PX20
 Servo86 函式庫的 capture() 功能可以用來抓取
KONDO 伺服機的位置
capture()
 讀取 KONDO 伺服機回傳的角度。注意,capture()
需要在所有伺服機皆為 release 狀態下才有作用,如
果您之前有啟動過任一伺服機,必須先呼叫 release()
後再呼叫此函式。
 傳入參數:要 ca...
#include <Servo86.h>
Servo myservo0; Servo myservo1; Servo myservo2;
ServoFrameKondo myframe;
void setup()
{
myservo0.atta...
KONDO 伺服機和 86Duino 連接的注意事項
 86Duino 要透過 capture() 來讀取 KONDO 伺服機回傳的角度前,要
注意阻抗匹配問題,也就是說您必須在 PWM 信號腳加上一個 5k 以
下的 pull-up 電阻,...
 更詳細的內容請參考 86Duino 官網的 Servo86 文件:
http://www.86duino.com/?p=11050&lang=TW
解析 86小六足動作程式
前言
 為了用較簡單清晰的方式來解析小六足動作程式,我
們先將前進/左轉/右轉的動作設定成 Always ON/Off,
來認識基本的程式結構,最後再設定其他的觸發方式,
了解不同觸發方式在程式中所做的改變。
 這裡我們使用的 86ME 為...
產生小六足動作程式檔 (1/2)
 先將小六足四個 Motion 的觸發設定為
 forward:Always On
 left :Always On
 right :Always On
 home :Always Off
forwa...
產生小六足動作程式檔 (2/2)
 按下 Generate 86Duino Sketch (All in One) 按鈕
 將產生名稱為 AllinOne_Motion_Sketch 的 .ino 檔,
即小六足動作程式檔:
打開小六足動作程式檔
 用 86Duino IDE 或
Notepad++ 等文書
編輯軟體打開小六
足動作程式檔:
小六足動作程式結構簡介
 程式結構分為三大段:
引入 Servo86 和其他必要的函式庫、宣告變數
setup
初始化 Servo Pin、設定 Offset 和 Frame,最後讓機器
人出力並回到 Home 姿勢
更新狀態(鍵盤、藍牙等等...
小六足動作程式解析 – 第一段
#include <Servo86.h>
Servo myservo2;
Servo myservo13;
ServoOffset myoffs;
ServoFrame _86ME_HOME;
…
引入 Serv...
ServoFrame forward_frm0;
ServoFrame forward_frm5;
ServoFrame left_frm0;
ServoFrame left_frm5;
ServoFrame right_frm0;
Servo...
void setup()
{
myservo2.attach(2);
myservo13.attach(13);
myoffs.offsets[1] = -140;
myoffs.offsets[3] = -50;
myoffs.offsets...
forward_frm0.positions[0] = 1700;
forward_frm0.positions[11] = 1700;
forward_frm1.positions[0] = 1700;
myoffs.setOffsets()...
void loop()
{
if(1)
{
forward_frm0.playPositions(300);
while(isServoMultiMoving() == true);
}
if(1)
{
left_frm0.playPositi...
void loop()
{
if(0)
{
home_frm0.playPositions(1000);
while(isServoMultiMoving() == true);
}
}
…
因為 home 動作的觸發設定為 Always Of...
更改觸發條件
 以上是使用 Always On/Off 觸發所產生的小六足動作
程式,我們用它來認識基本的程式結構。
 下面我們將改用藍牙/USB鍵盤/PS搖桿來觸發前進/左
轉/右轉動作,然後產生程式,看看產生出來的小六足
動作程式有哪裡...
USB 鍵盤觸發
設定鍵盤觸發
 在 86ME 中,假設以英文大寫字母 W、A 、D 分別代
表前進、左轉、右轉的動作,設定如下:
第一次按下 W 鍵觸
發前進動作
持續按著 A 鍵觸發
左轉動作
放開 D 鍵觸發左轉
動作
前進 左轉 右轉
 打開產生出來的小六足動作程式,在第一段程式碼中
會額外引入 KeyboardController.h 並產生更新鍵盤按
鍵狀態必要的程式碼:
 setup() 上方會新增一個函式,為 key_state(),用來
判斷一個按鍵的狀態,狀態可分成:
 第一次按下
 持續按著
 放開
 下面來看看 key_state() 的程式碼,並了解其運作原理:
回傳 0 代表第一次按下
回傳 1 代表持續按著
回傳 2 代表放開
共可判斷 128 個按鍵,陣列中的元素號碼對應到
一個鍵盤按鍵,例如:key_state[4] 為鍵盤 A 的狀
態
當鍵盤按鍵被按下時,按下的按鍵會
即時儲存至 curre...
取得鍵盤按鍵狀態
更新按鍵 W、A 、D 的狀態
判斷是否第一次按下 W 鍵
如果是第一次按下 W 鍵,則播
放 forward 動作
 左轉的動作判斷式變更為
 右轉的動作判斷式變更為
判斷是否持續按著 A 鍵
如果是持續按著 A 鍵,
則播放 left 動作
判斷是否放開 D 鍵
如果是放開 D 鍵,則
播放 right 動作
藍牙觸發
藍牙觸發
 在 86ME 中,假設以英文大寫字母 U、L 、R 分別代
表前進、左轉、右轉的動作,設定如下:
收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作
前進 左轉 右轉
 打開產生出來的小六足動作程式,可以看到程式開頭
不需要額外引入函式庫,只需要多宣告一個變數來接
收收到的字元,並在 Setup 函式初始化指定的 Serial
Port:
多宣告一個變數
初始化 Serial1
接收新指令,並且
把 指 令 存 到
Serial_Command
變數中沒有指令傳過來時,變數值
為 0xFFF,代表不做任何事
是否收到命令 ‘U’ 字
元
如果收到 ‘U’
字元,則播放
forward 動作
 左轉的動作判斷式變更為
 右轉的動作判斷式變更為
判斷是否收到 ‘L’ 字
元
如果收到 ‘L’ 字元,
則播放 left 動作
判斷是否收到 ‘R’
字元
如果收到 ‘R’ 字元
,則播放 right 動作
PS2 搖桿觸發
PS2 搖桿觸發
 在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右
分別代表前進、左轉、右轉的動作,設定如下:
持續按著十字鍵的”
上”觸發前進動作
持續按著十字鍵的”
左”觸發前進動作
持續按著十字鍵的”
右”觸發前進動作
※ ...
不同觸發條件的影響 – PS2搖桿
 打開產生出來的小六足動作程式,程式開頭引入
PS2X_lib.h 並宣告 PS2X 物件來初始化搖桿
…
初始化 PS2 搖桿
 Setup 函式中以 config_gamepad 來設定 PS2 接收
器與 86Duino 連接的腳位
讀取 PS2 搖桿狀態 按下 + 非第一次按下 = 持續按下
如果持續按著十字
件的 ‘上’,則播
放 forward 動作
 左轉的動作判斷式變更為
 右轉的動作判斷式變更為
判斷是否持續按著十字鍵的 ‘左’
如果是,則播放 left 動作
判斷是否持續按著十字鍵的 ‘右’
如果是,則播放 right 動作
進階練習 –
改寫一個有效率的小六足動作程式
 以上展示的小六足動作,一定會播放完整個動作後才
能再接收新指令,這是因為每個 frame 中間都呼叫了
isServoMultiMoving() 來等待所有伺服機轉到目標角
度,造成小六足無法 “即時反應” 新動作的指令:
 這裡我們以藍牙觸發的小六足動作程式為例,介紹如
何把程式改成可以立即反應新指令的到來。
 修改要點:
在 while(isServoMultiMoving() == true) 中不斷地
判斷是否有新指令到來,如果有,則跳出目前正在播
放...
加入 flag
每個 while 迴圈中,
判斷是否有新指令
到來,若有,則跳
到 flag 去接收新指
令,這麼一來,動
作就會立即改變了
後面的 left、right 動作的 while 迴圈中,加入上述相同的判斷式
 用以上方法可以簡單的將原程式改寫成對新指令 “即
時反應” 的程式
 但事實上,可以實現這個目標的方法不只一種,您可以
使用有結構性的方法讓程式變得更簡潔、易修改(留給
各位自行發揮)。
86小六足創意改造
動作創作
 如何加快 86小六足走路速度?
 如何編輯 86小六足打招呼、伸懶腰動作?
 如何編輯出其他種六足步態?
 如何使用鍵盤或PS2搖桿觸發動作?
 如何加入運動學計算來控制小六足步態?
創作屬於自己的小六足
 例如:
 加入上半身
 搭載獠牙,尾巴…
Thank You
感謝大家來參與 86Duino Maker Day IV
DMP Electronics Inc. (瞻營全電子)
robotics@dmp.com.tw
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
Upcoming SlideShare
Loading in …5
×

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

5,605 views

Published on

86Duino 12自由度小六足機器人 DIY 教學

86小六足3D列印機構檔: http://www.thingiverse.com/thing:964149
86小六足原始設計檔: https://github.com/roboard/86Hexapod

This slide is made by the RoBoard team of DMP Electronics Inc.:
https://www.facebook.com/roboard.fans

Published in: Devices & Hardware
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Read now Create DOWNLOAD for free Kindle ===dayna.club8806064290-Il-signor-Puntila-e-il-suo-servo-Matti-.html
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. DMP Electronics Inc. (瞻營全電子) robotics@dmp.com.tw
  2. 2. 講師自介  林恩州  現任 DM&P 86Duino 研發工程師  主要負責 86Duino 基礎軟體開發
  3. 3. 大綱  第一天上午  86Duino Enjoy 3D 印表機簡介  使用 86Duino Enjoy 列印 86小六足零件  小六足列印件前處理  第一天下午  86Duino 簡介  組合小六足足部  組合小六足身體
  4. 4.  第二天上午  Arduino 和 86Duino 控制伺服機的方法簡介  86ME 機器人動作編輯器簡介  86ME 安裝和使用教學  第二天下午  認識六足 - 六足機構原理  認識六足 - 六足步態簡介  使用 86ME 編輯小六足動作  手機藍芽遙控 86小六足
  5. 5.  第二天下午  Servo86 函式庫介紹  86小六足動作程式解析  進階 – 86小六足動作程式修改  86小六足創意改造
  6. 6. 86Duino Enjoy 3D 印表機簡介
  7. 7.  86Duino Enjoy 為一台基於 CNC 金屬框架的 3D 印 表機,剛性的結構有助於減少震動,並提供一個穩定 的列印環境。  86Duino Enjoy 3D 印表機內部設計一套簡單的校準 方法,可以輕易的列印或複製出您的作品。
  8. 8. 86Duino Enjoy 列印規格  成形方式:熔融層積 (Fused Filament Fabrication)  列印體積: 100 * 100 * 150 mm ( 1,500 cm3)  最小層高: 0.1 mm  噴嘴直徑: 0.3 mm  列印材料:PLA (玉米澱粉)
  9. 9. 86Duino Enjoy 軟體  列印軟體:Repetier-Host (簡稱 RH)  檔案傳輸方式:SD card (SDHC Class 10), USB, Ethernet
  10. 10. 86Duino Enjoy 3D printer Demo Video 影片網址: https://www.youtube.com/watch?v=oOsUWsNCfMY
  11. 11. 自行研發的x86 Soc – Vortex86EX
  12. 12. Print3D 控制器
  13. 13. H-Bot 結構 鋁壓鑄成型
  14. 14. 自行研發的擠出頭 溫度最高可加熱到 300 度 支援自動水平校正
  15. 15. 金屬進料齒輪組
  16. 16. 自行研發的步進馬達
  17. 17. DIY 86小六足
  18. 18. 86小六足: 1. 具有 12 個自由度 2. 可實現前進、左轉、 右轉等動作 3. 可用手機、USB 鍵 盤或 PS2 搖桿控制
  19. 19. 86小六足 DIY 流程  使用 86Duino Enjoy 3D 印表機列印小六足零件  列印件前處理  組合足部  組合身體
  20. 20. 86小六足 DIY 流程  使用 86Duino Enjoy 3D 印表機列印小六足零件  列印件前處理  組合足部  組合身體
  21. 21.  至 Thingiverse 網站下載 86小六足 STL 檔案: http://www.thingiverse.com/thing:964149 點擊 下載
  22. 22.  解壓縮後有六個檔案,如下圖:
  23. 23. 零件中文名稱對照  A_arm_top:上 A 臂  A_arm_bottom:下 A 臂  Leg:垂直腳  Linker:連結器  Body_top:身體上半部  Body_bottom:身體下半部
  24. 24. Leg 零件
  25. 25. A_arm_top 零件
  26. 26. A_arm_bottom 零件
  27. 27. linker 零件
  28. 28. Body_bottom 零件
  29. 29. body_top 零件
  30. 30. leg A_arm_bottom A_arm_top linker 零件名稱和實際對應圖
  31. 31. body_bottom body_top 零件名稱和實際對應圖
  32. 32.  A_arm_bottom、A_arm_top 、leg 、linker 為小六 足足部的組合零件,這 4 個零件可以組合成一個足部  body_top 為小六足身體上半部零件  body_bottom 為小六足身體下半部零件
  33. 33.  完成一整隻 86小六足一共要列印:  6 個足部  1 個身體上半部  1 個身體下半部
  34. 34.  下載並安裝 Repetier-Host 軟體  http://www.repetier.com/downloads/ 安裝 Repetier-Host 點擊 下載
  35. 35.  86Duino Enjoy 驅動程式下載  http://www.ftdichip.com/Drivers/VCP.htm 下載 & 安裝驅動程式
  36. 36. 連接 86Duino Enjoy 和電腦  驅動程式安裝完成後,使用 USB 線連接電腦和 86Duino Enjoy USB 線 86Duino Enjoy PC
  37. 37.  此時裝置管理員應該會出現一個虛擬 COM port ,如 下圖:
  38. 38.  下載 86Duino Enjoy 專用的設定檔  http://www.roboard.com/temp/settings.zip  解壓縮後可以看到資料夾結構如下:
  39. 39.  開啟 Repetier-Host 軟體 滑鼠雙擊 圖示 開啟後的畫面
  40. 40.  選擇 Config > Printer Settings
  41. 41.  將 Connection 分頁中的設定選項,設定如下圖: Connection 分頁 的設定選項如右:
  42. 42.  按 ”連線” 按鈕,連線成功時會聽到 86Duino Enjoy 發出連續三個音效,且連線按鈕會變成右下圖: 未連線 連線成功 連線
  43. 43.  連線後,我們可以選擇 “Manual Control” 分頁, 再按下歸 HOME 按鈕,如下圖所示: 1 2
  44. 44.  按下歸 HOME 按鈕後,86Duino Enjoy 3D 印表機的 X、Y 、Z 軸會立即回到機械原點,代表我們已經可以 操作 86Duino Enjoy 3D 印表機了
  45. 45. 繼續其他設定  在 Config > Printer Settings 中,設定 Printer 分頁 如下圖:
  46. 46. Printer 分頁的 設定選項如右:
  47. 47. Extruder 分頁的 設定選項如右:
  48. 48. Printer Shape 分頁 的設定選項如右:
  49. 49. 載入 86Duino Enjoy 設定檔  選擇 Slicer > CuraEngine 1 2
  50. 50.  選擇 Slicer > Configuration 1 2
  51. 51.  選擇 Print > Import 1 2
  52. 52.  打開 86Duino Enjoy 設定檔資料夾, 進入CuraEngine 資 料夾,選擇 Print-Settings.rcp 設定檔,按下開啟舊檔
  53. 53.  載入 86Duino Enjoy 設定檔:  選擇 Filament > Import 1 2
  54. 54.  選擇 Filament-Settings.rcp 設定檔後,按下開啟舊檔
  55. 55.  在 Print Configuration 選項中,套用 86Duino Enjoy 設定檔:選擇 Print-Settings
  56. 56.  在 Filament Setting 中,Extruder1 套用 86Duino Enjoy 設定檔:選擇 Filament-Settings
  57. 57. 載入小六足 STL 檔  點擊 Load 按鈕,載入 86小六足足部檔案: A_arm_bottom、A_arm_top、leg 、linker
  58. 58.  載入後的圖如下:
  59. 59. 基本操作  在下圖紅框中按著滑鼠左鍵並移動,可以旋轉視角  在足部零件上面,按著滑鼠右鍵並移動,可以移動零件
  60. 60.  點選 Linker,將零件沿著 Y 軸翻轉 90 度,如下圖: 1 2 3
  61. 61.  翻轉後的 linker 零件,擺放角度應如下圖:
  62. 62.  點選 A_arm_bottom,將零件沿著 Y 軸翻轉 180 度, 如下圖: 1 2 3
  63. 63.  翻轉後的 A_arm_bottom 零件,擺放角度應如下圖:
  64. 64.  翻轉完成後的足部零件如下圖:
  65. 65. 打開支撐選項  設定 Support Type 為 Everywhere
  66. 66.  按下切片按鈕,就會立即進行切片
  67. 67.  切片完成後會出現類似下面畫面:
  68. 68. 傳輸列印檔案至 86Duino Enjoy  傳輸檔案給 86Duino Enjoy 的方法有兩種:  方法一:使用 USB 線傳輸  方法二:使用 SD 卡
  69. 69. 方法一: 使用 USB 線  切片完成後,直接按下列印按鈕,86DuinoEnjoy 會 立即開始列印
  70. 70. 方法二: 使用 SD 卡  不使用 USB 線連接 86Duino Enjoy,改插上 86Duino Enjoy 專用的 SD 卡至您的電腦
  71. 71.  切片完成後,點擊如下圖示, 將 G-code 檔儲存至 SD 卡中:選擇 G-Code Editor 分頁 > 按下儲存按鈕 1 2
  72. 72.  將檔案儲存在 SD 卡中的 gcode 資料夾下,儲存檔名 改成 auto.gcode,按存檔
  73. 73.  從電腦拔出 SD 卡,將此 SD 卡置入 86Duino Enjoy 背面的 SD 卡插槽 SD 卡插槽 86Duino Enjoy 控制盒背面
  74. 74.  打開 86Duino Enjoy 電源,86Duino Enjoy 會自動讀 取 auto.gcode 檔開始列印! 電源 86Duino Enjoy 控制盒背面
  75. 75. 86小六足 DIY 流程  使用 86Duino Enjoy 3D 印表機列印小六足零件  列印件前處理  組合足部  組合身體
  76. 76.  此步驟中,我們需要對 86小六足的足部和身體列 印件做組裝的前處理,包括:拆除支撐、打磨、 鑽孔、攻牙。  拆除支撐:支撐為列印過程所需,列印完成後必需拆除  打磨:由於零件表面/邊緣有時會存在變形或凸起,需 要用工具打磨平整  鑽孔:可讓螺絲穿過,將螺絲做為軸承使用  攻牙:可讓螺絲鎖入,用以固定零件
  77. 77. 認識工具 1. 鑽孔刀 2. 攻牙刀 3. 手握夾頭 4. 尖嘴鉗 5. 平銼刀 6. 圓銼刀 7. 螺絲起子 8. 斜口鉗 1 2 3 4 5 6 7 8
  78. 78. 額外材料 1. 2mm x 4mm 螺絲 2. 2mm x 8mm 螺絲 3. 2mm x 15mm 螺絲 4. 杜邦線 5. 電子擴充板 (for 86DuinoZero) 6. 杜邦針腳 1 2 3 4 5 6
  79. 79. Linker 零件前處理
  80. 80.  取出列印好的 linker 零件 拆除 linker 零件的支撐
  81. 81.  使用尖嘴鉗拆除以下支撐: 1 2 3 4 5 6
  82. 82.  拆除支撐示意圖: 尖嘴鉗 拆除 支撐
  83. 83.  使用銼刀來回將左下圖箭頭所指的表面磨平: 打磨 linker 零件 銼刀 來回 打磨
  84. 84.  磨到可以將伺服機順利置入即可:
  85. 85.  如果該處磨掉很多後伺服機還是很難置入,這是因為 列印件的邊緣可能有些凸起或變形,干涉到伺服機外 殼,請用銼刀將這些邊緣磨掉一些即可:
  86. 86. linker 零件攻牙  使用工具:2mm 攻牙刀 + 手握夾頭 手握夾頭 2mm 攻牙刀
  87. 87.  將 2mm 攻牙刀套入手握夾頭並鎖緊 1 2
  88. 88.  Linker 零件上需要攻牙的孔,如下圖紅圈處: 俯視圖 底視圖
  89. 89. 側視圖1 側視圖2
  90. 90.  攻牙時,請盡量保持攻牙刀與需要攻牙的孔位角度垂 直,不要傾斜,否則孔位可能會被擴大,導致螺絲鎖 入後無法固定。 正確 錯誤 保持與孔位垂直後旋入攻牙刀 攻牙刀角度傾斜時,請勿旋入 90 度
  91. 91. linker 零件鑽孔  使用工具:2mm 鑽孔刀 + 手握夾頭 手握夾頭2mm 鑽孔刀
  92. 92.  將 2mm 鑽孔刀套入手握夾頭並鎖緊 1 2
  93. 93.  使用鑽孔刀對下圖指示的孔位鑽孔: 俯視圖 底視圖
  94. 94.  使用鑽孔刀時,也請盡量保持與孔洞垂直後,再旋入 鑽孔刀: 鑽孔
  95. 95. 操作影片
  96. 96. A_arm_bottom 零件前處理
  97. 97. 準備  取出 A_arm_bottom、 leg 零件  取出十字型伺服機配件盤 A_arm_bottom leg
  98. 98. 十字型配件盤鑽孔  在十字型伺服機配件盤上,由中心數來第二個孔,用 鑽孔刀鑽出 2mm 的洞,如下圖:
  99. 99.  將鑽孔處垂直 90 度的另一個孔,用鑽孔刀鑽出 2mm 的洞,如下圖:
  100. 100.  拆除 A_arm_bottom 上的支撐,用圓挫刀來回打磨 左下圖箭頭所指的面: 來回 打磨
  101. 101.  磨到將十字型伺服機配件盤靠上時,可以看到孔位對 齊 (如右下圖箭頭所指處): 孔位對齊
  102. 102.  使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭 所指的面:
  103. 103.  持續打磨直到 leg 零件置入後,可以輕鬆旋轉的程度: ※如果已經將 A_arm_bottom 磨掉很多了,leg 零件置入後轉起來還是很緊, 請改為打磨 leg 零件的接觸面 來回 打磨 輕鬆 旋轉 leg
  104. 104. A_arm_bottom 零件鑽孔  用鑽孔刀對下圖箭頭指示的孔位鑽孔: 鑽孔
  105. 105. A_arm_bottom 零件攻牙  使用攻牙刀在下圖指示的孔位上攻牙: 攻牙
  106. 106. leg 零件攻牙  使用攻牙刀在下圖指示的孔位上攻牙: 攻牙
  107. 107. 操作影片
  108. 108. A_arm_top 零件前處理
  109. 109. 準備  取出 A_arm_top、leg 零件 A_arm_top leg
  110. 110.  使用平銼刀,打磨會接觸 leg 零件的面,如下圖箭頭 所指的面:
  111. 111.  打磨到 leg 零件置入後,可以輕鬆旋轉的程度: ※如果已經將 A_arm_top 磨掉很多了, leg 零件置入後轉起來還是很緊,可 以改為打磨 leg 零件的接觸面 來回 打磨 輕鬆 旋轉 le g
  112. 112. 鑽孔  用鑽孔刀對下圖指示的孔位鑽孔: 鑽孔
  113. 113. Body_top 零件前處理
  114. 114. 準備  取出 body_top 零件
  115. 115.  使用尖嘴鉗拆除背面支撐 拆除前 拆除後
  116. 116.  重複使用平銼刀打磨拆除支撐後的面,直到伺服機可 以容易的置入: 來回 打磨
  117. 117. 攻牙  用攻牙刀對下圖指示的孔位攻牙 (下圖藍圈處) 攻牙
  118. 118. 鑽孔  用鑽孔刀對下圖指示的孔位鑽孔: 鑽孔
  119. 119. Body_bottom 零件前處理
  120. 120. 準備  取出 body_bottom 零件
  121. 121.  在 body_bottom 零件上置入伺服機,如下圖: 置入
  122. 122.  如果發現很難置入 (置入後出現空隙,如下圖): 空隙 難以壓入伺服機
  123. 123.  請移除伺服機,然後使用平銼刀磨平 body_bottom 與伺服機的接觸表面,直到伺服機可以順利壓入: 來回打磨
  124. 124.  用攻牙刀對下圖指示的孔位攻牙 (左下圖紅圈處): 攻牙 攻牙
  125. 125.  用鑽孔刀對下圖指示的孔位鑽孔 (左下圖紅圈處): 鑽孔 鑽孔
  126. 126. 86Duino 簡介
  127. 127.  它是世界上第一個發表的 x86 Arduino 相容板 (比 Intel Galileo 還早)  比 Arduino 的 CPU 時脈快數十倍  內建 Arduino UNO/MEGA 板上沒有 的額外硬體(如: SD 卡、LAN 網路)  可以跑 Windosw XP 與 Linux 作業系統  相容 Arduino Leonardo 腳位 什麼是 86Duino?
  128. 128. 86Duino 的種類和名稱 86Duino ONE 86Duino EduCake 入門款 機器人專用 教育用 86Duino Zero
  129. 129. 86Duino 特色 (2/2)  軟體  相容 Arduino 的開發環境  完整相容 Arduino 程式語法、API、標準函式庫  額外內建 33 個 Arduino 相容函式庫  完完全全 Made In Taiwan(連 CPU 也是 Made In Taiwan,板子上的零件多數也是 Made In Taiwan)
  130. 130. 86Duino 計畫緣起 Maker 運動 Arduino 紀錄片 開源、教育夢 86Duino 計劃開始 三年前 N 年前 許多非電子專業的人開始使用開發板 重新從人的角度思考 工程師的夢想
  131. 131. 86Duino 開發環境命名 Coding:培養使用者寫程式解決問題的能力,期望人們在應 用 86Duino 的過程中,能不斷精進寫程式(coding)能力, 進而以寫程式(coding)改變世界。 中文名稱:口丁,由於 86Duino 計劃的種子是由 OpenLab.Taipei 社群翻譯的 Arduino 記錄片所種下,「口丁」 有代表 OpenLab.Taipei 縮寫的意思,同時,它發音也近於英 文「Coding」,正好也隱含了用 coding 改變世界的意義 詳細內容請點此連結:http://www.86duino.com/index.php?p=5746&lang=TW
  132. 132. 生產 86Duino 的 DM&P 集團  DM&P 集團為一跨國性的嵌入式系統製造商,以台灣 為設計研發中心及營運總部,在美東、美西、英國、 日本、巴西、深圳、上海、西安均設有分公司。
  133. 133. 硬體規格上的差異  本課程中會用到的 86DuinoZero 或 86DuinoOne, 這兩塊在硬體規格方面,和 Arduino 有什麼相似處? 或不同之處?
  134. 134. Arduino 與 86DuinoZero 硬體規格比較
  135. 135. 86DuinoZero 與 Arduino 效能比較表  Dhrystone 性能評測 Dhrystone 性能評測 sketch 下載: https://www.facebook.com/download/1026109197423161/Arduino_dhrystone.ino
  136. 136. Zero 與 One 的硬體規格比較
  137. 137. 如何將 RC 伺服機連接到 86Duino Zero ?
  138. 138. 連接 86Duino Zero  Zero 開發板沒有 RC 伺服機專用插座,但可透過以下任一 方式與 RC 伺服機連接:  方法一:使用轉接用的 Arduino shields  方法二:透過麵包板轉接  方法三:手工製作伺服機轉接插座
  139. 139. 方法一  使用 Arduino Sensor Shlied 轉接 Arduino Sensor Shlied86Duino Zero +
  140. 140. + 86Duino Zero + Arduino Sensor shield RC Servo – SG90 x 3
  141. 141. 方法二  使用麵包板轉接
  142. 142.  只接單顆伺服機時,可直接透過杜邦線連接
  143. 143. 杜邦線 RC Servo – SG90 86Duino Zero
  144. 144. 方法三  使用 2.54mm 杜邦頭製作轉接插座  86小六足用的方法 將伺服機插在 杜邦插座上 杜邦 插座
  145. 145. 杜邦插座
  146. 146. 如何將 RC 伺服機連接到 86Duino One
  147. 147. 連接方法 (1/2)  86Duino One 外側有一排為 RC 伺服機設計的插座, 信號安排如右下圖所示: PWM VIN GND 86Duino One
  148. 148. 連接方法 (2/2)  將 RC 伺服機依正確方向插上: 正確方向 GND (黑線) 電源 (紅線) PWM (黃線) RC Servo – SG90
  149. 149. 接上電源  86Duino One 左上方的綠色端子台是 RC 伺服機主要 的電源輸入端,允許 6 ~ 24 伏特的電壓輸入:
  150. 150. 注意事項 (1/4)  RC 伺服機本身有自己適合的工作電壓範圍,接上電 源之前,請先閱讀 RC 伺服機的規格書或說明書,確 認其工作電壓,如果輸入的電壓超過工作電壓,太高 可能導致伺服機永久燒毀,太低則會讓伺服機無法運 作。
  151. 151. 注意事項 (2/4)  有些廉價 RC 伺服機設計不良,在啟動瞬間會大幅干 擾 VIN 電源之供給,將 VIN 電源拉低至 6V 以下,這 會使 86Duino 的 CPU 模組啟動欠壓保護而停機。如 發生這種狀況,一個解決方法是更換可瞬間供應大電 流的外部電源(例如:具有高放電系數的遙控模型用 鋰電池)以克服伺服機的干擾。
  152. 152. 注意事項 (3/4)  另一方法是從 micro-USB 接頭另外供應穩定的 5V 電源給 CPU 模組,這是市面上伺服機控制板常見的雙電源供電方 式,以 One 為例,如下圖所示:
  153. 153. 注意事項 (4/4)  Zero 雖然可透過板上 5V 直接對吃電較小的伺服機供 電,但連接大電流的伺服機時,應使用雙電源供電。 micro USB:5V 外接電源
  154. 154. 86小六足 DIY 流程  使用 86Duino Enjoy 3D 印表機列印小六足零件  列印件前處理  組合足部  組合身體
  155. 155. 組裝概述 用螺絲將伺服機和足部列印件組合起來 歸零伺服機至中點 鎖上伺服機配件盤 完成足部組裝
  156. 156.  組裝完成圖:
  157. 157. 準備材料  2mm x 4mm 螺絲 3 顆  2mm x 8mm 螺絲 4顆  2mm x 15mm 螺絲 1顆  SG-90 伺服機 1 顆  十字型伺服機配件盤 1 個 ※組合一個足部為例
  158. 158. 組合足部  將伺服機如下圖方式壓入 linker 零件: linker
  159. 159.  用長度 8mm 螺絲鎖緊,如下圖: 長度 8mm 螺絲
  160. 160.  合上 A_arm_top,再用長度 15mm 螺絲鎖緊,如下 圖: 長度 15mm 螺絲 A_arm_top
  161. 161.  A_arm_top 另一側用長度 8mm 螺絲鎖緊,如下圖: 長度 8mm 螺絲
  162. 162.  完成後用手搖動 A_arm_top 零件,如果發現 A_arm_top 搖動起來不順暢,表示 A_arm_top 和 linker 之間的磨擦 力太大,請將上鎖的螺絲鬆開一點再試試看: 搖動 A_arm_top
  163. 163.  假如鬆開螺絲後還是感覺磨擦力很大,請將 A_arm_top 零件拆下,使用銼刀稍微打磨 A_arm_top 和 linker 的接 觸的面後再裝上: A_arm_top
  164. 164.  鎖上 A_arm_top 零件後,用長度 4mm 螺絲鎖上 A_arm_bottom 零件,如下圖: 長度 4mm 螺絲
  165. 165.  翻到另一面,我們準備將伺服機十字型配件盤裝在伺 服機輸出軸上:
  166. 166.  在裝上配件盤之前,我們先要對伺服機做中點歸零  中點歸零後的伺服機,可確保足部最大的可動範圍為正負 90度 (共 180 度),如下圖: 中點 旋轉範圍:180 度
  167. 167. 伺服機歸零程式  下載單一伺服機歸零的 sketch 程式:  http://www.roboard.com/temp/servo.zip
  168. 168. 86DuinoZero 歸零程式 #include <Servo86.h> // 使用 Servo86 函式庫 Servo myservo1; // 初始化 Servo 物件 void setup() { // 設定 Servo 腳位為 2 myservo1.attach(2); // 送出 1500us 的 PWM 信號,使伺服機歸零至中點 myservo1.write(1500); } void loop() {}
  169. 169. 86DuinoOne 歸零程式 #include <Servo86.h> // 使用 Servo86 函式庫 Servo myservo1; // 初始化 Servo 物件 void setup() { // 設定 Servo 腳位為 21 myservo1.attach(21); // 送出 1500us 的 PWM 信號,使伺服機歸零至中點 myservo1.write(1500); } void loop() {}
  170. 170. 燒錄 Sketch 程式至 86Duino  下載 86Duino Coding 210,將 sketch 燒錄至 86Duino  http://www.86duino.com/86Duino_IDE/86Duino_C oding_210_WIN.zip
  171. 171.  燒錄完成後, 86Duino 會立刻從指定腳位送出 duty 為 1500us 的 PWM,接著我們要將伺服機與 86Duino 連接起來。  伺服機連接 86Duino 的步驟  86DuinoZero 1. 將 PWM 信號線連接至轉接板 2. 伺服機插上轉接板  86DuinoOne  直接將伺服機連接線接上 86DuinoOne 的伺服機座
  172. 172. 86DuinoZero 上的連接方法  將 PWM 信號線連接至轉接板  拿出轉接板 1 塊  拿出 3 條杜邦線 (紅、黑、黃顏色各一條) 杜邦線 轉接板
  173. 173.  轉接板上面的腳位安排如下: 12 組 RC Servo 插座電源/鋰電池 插座 ※ 電源/鋰電池插座旁各有一個的紅點和黑點,紅點代表電源,黑點代表地
  174. 174.  轉接板的電路如下圖: :PWM 信號腳,各別獨立 :電源線,彼此相連 :地線,彼此相連 左圖對應轉接板背面 電源/鋰電池 插座 轉接板背面
  175. 175.  將信號排線和電源線插到轉接板上  在歸零程式中使用了第 2 腳位做為 PWM 信號輸出腳, 所以我們將杜邦線連接如下圖: 2 5 V GND
  176. 176. 插上需要歸零的伺服機  伺服機的橘線,為 PWM 信號線 ,需接在杜邦線下方 (如右圖)  伺服機的紅線接在電源 (5V)  伺服機的黑線接地 (GND) 伺服機橘線要連接在 PWM 信號排線下方 杜邦線 Servo 橘線
  177. 177. 86DuinoOne 上的連接方法  歸零程式中使用了第 21 腳位做為 PWM 信號輸出腳, 我們直接將伺服機連接至 86DuinoOne 即可:
  178. 178.  將 86Duino 接上電源/電池後,伺服機會立即轉到中 點位置,此時請用奇異筆標記如下位置,以利後續不 插電時辨識: 標 記 線
  179. 179.  標記完成後,請拔除伺服機連接線,讓伺服機停止出 力:  後面步驟即將鎖上配件盤,如果不拔除伺服機連接線, 伺服機會一直保持在中點位置,此時若用螺絲起子將配 件盤鎖上,鎖上的力道容易導致伺服機內部減速機崩牙。 ※ 崩牙後的 SG-90 伺服機將永遠無法順利轉動,只能更換新的伺服機
  180. 180.  將十字型配件盤的短軸對齊中點 (標記線),套在伺服 機輸出軸上,如下圖所示: 將配件盤的短軸對齊標記線 套在伺服機輸出軸上 標記線 十字配件盤短軸 對齊標記線 十字配件盤短軸
  181. 181.  用 4mm 長度的螺絲 2 根,鎖緊 A_arm_bottom  使用伺服機配件包中的自攻螺絲鎖緊十字配件盤 長度 4mm 螺絲 伺服機配件包 中的自攻螺絲
  182. 182.  用斜口鉗修飾配件盤,剪除較長的邊,形成下圖:
  183. 183.  用長度 8mm 螺絲 2 顆鎖上 leg 零件,最後完成圖如 下: 長度 2mm 螺絲 Leg
  184. 184. 組裝影片
  185. 185. 86小六足 DIY 流程  使用 86Duino Enjoy 3D 印表機列印小六足零件  列印件前處理  組合足部  組合身體
  186. 186. 組裝概述 將 6 顆伺服機置入 body_bottom 零件中 蓋上 body_top 零件,用螺絲固定 鎖上 6 個已完成的足部、86Duino 開發板 連接並整理外露的伺服機連接線,完成 86小六足
  187. 187.  將 6 顆伺服機置於 body_bootom,如下圖:
  188. 188.  將落在外側的伺服機連接線,各別拉至身體中央,統 一從一端伸出 (這麼做是為了方便後續整線): 完成圖將伺服機連接線拉進身體 並從一端伸出
  189. 189.  準備蓋上 body_top 零件
  190. 190.  先將 body_top 零件旋轉如下圖: 正確方向 錯誤方向
  191. 191.  蓋上 body_top 零件
  192. 192.  用 6 顆長度15mm 的螺絲鎖緊 body_top,如下圖紅 圈處: 長度 15 mm 螺絲
  193. 193.  使用鑽孔刀對一字型配件盤鑽孔 (由中心數來第二個 孔,如下圖),一共要對 6 個一字型配件盤鑽孔: 一字型配件盤上要鑽孔的孔位 鑽孔完成
  194. 194.  將 6 顆伺服機分別歸零至中點,並畫上標記線  將一字型配件盤照下圖方式套至伺服機輸出軸: 45 度 45 度 45 度45 度 ※ 身體邊角上的伺 服機,每個一字型 配件盤套上伺服機 時, 需要與左圖中的 紅色虛線呈 45 度
  195. 195.  用 3 顆 2mm x 4mm 螺絲固定足部 (2 顆固定配件盤, 另一顆固定 linker 與 body_bottom)  以自攻螺絲鎖緊伺服機一字型配件盤 長度 4mm 螺絲 長度 4mm 螺絲 長度 4mm 螺絲 伺服機自攻螺絲
  196. 196.  用斜口鉗將一字型配件盤凸出的部分剪除,增加美觀, 如下圖:
  197. 197.  6 個足部全部鎖上後,如下圖:
  198. 198. 組合 86DuinoZero 小六足
  199. 199.  對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲固定 86DuinoZero 於 body_top 上 裝上 86DuinoZero 開發板
  200. 200.  用 2 顆 2mm x 4mm 螺絲固定擴充板: 長度 4mm 螺絲
  201. 201.  使用杜邦線連接 86DuinoZero 與擴充板  PWM 信號線、電源線、地線共 14 條,擴充板上的腳位對應 如下: 2 3 4 5 6 7 8 9 10 11 12 13 電源 (VIN) 地 (GND)
  202. 202.  使用 12 條黃色 (PWM)、1 條紅色(VIN)、1 條黑色 (GND)的杜邦線連接 86DuinoZero 和轉接板:
  203. 203.  將足部的伺服機連接線穿過 body_bottom 下方的孔 足部伺服機連接線
  204. 204. 連接伺服機與擴充板  86小六足伺服機編號與擴充板上的腳位對應如下: 1 2 34 5 6 7 8 9 10 11 12
  205. 205.  將所有伺服機連接線連接至擴充板上:
  206. 206. 組合 86DuinoOne 小六足
  207. 207.  對應下圖紅圈處,用 3 顆 2mm x 4mm 螺絲將 86DuinoOne 固定於 body_top 零件上 裝上 86DuinoOne 開發板
  208. 208.  將足部伺服機連接線穿過 body_bottom 下方的孔 足部伺服機連接線
  209. 209. 連接伺服機與擴充板  86小六足伺服機編號與擴充板上的腳位對應如下: 1 2 34 5 6 7 8 9 10 11 12
  210. 210.  將所有伺服機連接線連接至 86DuinoOne 上:
  211. 211.  我們將外露的連接線稍做整理,讓 86小六足看起來更 美觀。  無論使用 86DuinoZero 或 86DuinoOne,整線方法都 相同,下面我們以 86DuinoZero 為例,介紹整線方法。 伺服機連接線整理
  212. 212.  先將外露的伺服機連接線拉至 86小六足身體內,如下 圖: 將伺服機連接線塞進 86小六足身體 連接線整理
  213. 213.  將伺服機連接線來回折短,用束線帶固定在兩旁支架: 折短的 伺服機 連接線 束線帶 示範影片
  214. 214.  用 束線帶固定完成後,盡量讓下圖紅框處沒有伺服機 連接線穿過,因為這是未來要放置鋰電池的空間  最後完成如下圖: 鋰電池空間
  215. 215. 置入鋰電池後的完成圖 7.4V 850mA 鋰電池
  216. 216. 組裝身體影片
  217. 217. 附錄- 接上鋰電池  接上鋰電池前,請注意  7.4V 鋰電池充飽時,一般電壓是 8.2V ~ 8.4V,86小六 足使用的 SG-90 伺服機,操作電壓為 4.8V ~ 7.2 V。如 果直接接上充飽的鋰電池,會因過高的電壓造成 SG-90 運作時產生不規律抖動,再接上鋰電池之前,請先用三 用電表量測電壓,待電壓下降至 7.2V ~ 7.4V 時,再接 上 86小六足。
  218. 218.  鋰電池放電的方法  閒置鋰電池,等待內部自放電至適合電壓 (缺點:等待時間長)  接上 20 歐姆 40W 的水銀電組主動降壓 (約 20 分鐘後降到適合電 壓)
  219. 219.  除了將鋰電池放電,我們也可以直接用充飽的鋰電池,透 過 DC to DC 降壓模組為 86小六足供電  由於 86小六足身上的 12 顆 SG-90 啟動電流會超過 3A, 建議購買提供電流超過 5A 的 DC-DC 降壓模組 DC-DC 降壓模組 ※ 輸出電壓可透過模組 上的可變電阻調整
  220. 220. ** 鋰電池的電源線, 紅線必需朝著伺服機, 黑線朝外,不可弄反!! 鋰電池腳位 鋰電池電源線 連接鋰電池的方法 – 86DuinoZero
  221. 221. 連接鋰電池的方法 – 86DuinoOne 將 2 pins 的杜邦針腳鎖在綠色端子台上:
  222. 222. 連接鋰電池的方法 – 86DuinoOne 鋰電池電源線 依照下圖方向插上鋰電池電源線: 紅線接 + 黑線接 - + -
  223. 223. Arduino/86Duino 控制伺服機方式簡介
  224. 224. Arduino 控制伺服機: 使用 Servo 函式庫  attach() - 初始化 Servo pin  write() - 控制 Servo 轉動至 0 ~ 180 度  writeMicroseconds()- 輸入 PWM duty 來控制 Servo 角度  read() - 讀 Servo 目前角度  attached() - 檢查 Servo pin 是否 attach 過  detach() - 關閉 Servo pin ** Servo 函式庫使用方法大部分 Arduino 書籍皆有介紹,此處不再贅述**
  225. 225. 範例程式 #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 影片 伺服機以最快速度轉動, 無法直接控制速度
  226. 226. Servo 函式庫的改良: 86Duino Servo86 函式庫  可設定每顆伺服機轉動速度  可同步控制多顆伺服機轉動,並且在同時間內到達目標位置  可支援最多 45 顆伺服機同步控制  改善 PWM Duty 抖動(jitter)的問題  支持以 Frame 為基礎的機器人動作流程控制方法
  227. 227. 範例程式 #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 影片 伺服機轉動速度簡易可控
  228. 228. PWM Duty 抖動現象 (1/2)  由於舊的 Arduino Servo 函式庫裡 PWM 是用軟體模擬的 方式來實現,所以會出現以下情形:  實際輸出的 PWM duty 時間會有抖動現象 (jitter)  當使用的 PWM channel 超過 12 組, Arduino 會啟用 更多組 Timer, 多個 Timer 中斷彼此干擾, 有時會惡化 PWM jitter 現象
  229. 229. PWM Duty 抖動現象 (2/2)  以示波器量測 Arduino 輸出的 PWM duty,如下圖:  因抖動造成的誤差範圍與 CPU 特性及軟體模擬算法有關 抖動現象
  230. 230. 以 Arduino UNO 為例, 觀察 PWM 抖動情況 + 示波器 Arduino UNO 波型抖動 實況影片:
  231. 231. PWM 抖動現象的影響  在命令解析度比較高的 RC Servo 上, 會造成 servo 輸出軸 實際的抖動  一般模型用的低價 RC Servo 解析度較低, 受 PWM 抖動現 象的影響不大 Arduino UNO + KONDO KRS4014 Servo Servo抖動實況影片
  232. 232.  在 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
  233. 233.  在 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 惡化情形
  234. 234. 用動畫的概念控制機器人動作
  235. 235. 動畫播放原理 (1/3)  翻書動畫:https://www.youtube.com/watch?v=oOgHzcrVG1s
  236. 236. 動畫播放原理 (2/3)
  237. 237. 動畫播放原理 (3/3)
  238. 238. Frame (幀) 的概念  機器人的動作編輯,也可以視為在編輯圖片中人物的 動作,一個動作(畫面)稱為 ”幀 (Frame)”,多個 靜止動作透過 Servo86 函式庫連續播放出來,機器 人就會動起來了。  在一些專用的機器人控制板中,Frame 有時候被成為 Pose (姿勢)
  239. 239. 機器人動作編輯與播放 編輯 Frame 1 編輯 Frame 2 編輯 Frame 3 編輯 Frame 4 編輯 Frame 5 … 播放全部 Frames 影片:
  240. 240.  動畫 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…
  241. 241. 86ME 機器人動作編輯器簡介
  242. 242. 86ME  機器人專用動作編輯器,編輯機器人動作 Frame 變得 更 輕 鬆 , 可 以 自 動 產 生 使 用 Servo86 函 式 庫 的 86Duino 的程式,省掉我們寫程式的工夫  是一套綠色、開源軟體,解開可立即使用,無須安裝, 原始碼可以根據自己的喜好修改
  243. 243. 使用 86ME 的基礎觀念  Frame  各個伺服機角度所組成的一個姿勢  Motion  展現一連串 frame 的整個過程  homeframe  機器人上電之後所會展現的第一個 frame,編輯各個 frame 時的 初始值也會同 homeframe  offset  機器人實際的 homeframe 難免會因為組裝上有誤差而與自己的理 想值有偏移,這個偏移量即為 offset
  244. 244. 86ME 功能簡介  支援線上調整 offset 與 homeframe  支援線上調整 frame,讓使用者能立即看到編輯結果 並即時調整  支援編輯多個動作 (motion),並且可即時播放動作的 連續 frame  可設定 motion 的觸發條件,並且可以產生 86Duino 的 sketch 程式
  245. 245. 86ME Demo 影片 https://www.youtube.com/watch?v=LZhoCQ4E-N4
  246. 246. 86ME 安裝和使用教學
  247. 247. 86ME 安裝 1. 下載最新版 86ME:  http://www.86duino.com/index.php?page_id=8923 &lang=TW 2. 解壓縮檔案,進入 86ME 資料夾後檢查有下列檔案 即完成安裝 3. 目前僅支援 Windows 環境下執行,且須要有 .NET Framework 3.5 以上的環境才能正常啟動 86ME
  248. 248. 86ME 與 86Duino 的溝通方式 USB 線 PC 上的 86ME 燒錄 86Duino 86ME 韌體程式
  249. 249. 燒錄 86ME 的韌體至 86Duino  使用一條 USB 線將電腦與 86Duino 連接起來
  250. 250. 燒錄 86ME 的韌體至 86Duino 1. 打開 86Duino Coding IDE 2. 選擇工具 > 板子 > 86Duino Zero 3. 選擇工具 > COM port > (86Duino 的虛擬連接埠) 4. 選擇 檔案 > 範例 > Servo86 > MotionEditor
  251. 251. 燒錄 86ME 的韌體至 86Duino  按下燒錄按鈕,之後看到 Uploading the binary sketch … Done 訊息,說明燒錄已完成 燒錄 完成
  252. 252. 開啟 86ME  韌體燒錄完成後,關閉 86Duino IDE,滑鼠左鍵雙擊 86ME,此時會看到連接埠選擇視窗  選擇 86Duino 虛擬連接埠,也可以選 Auto 由 86ME 自動選取 自動抓取 COM port 離線模式 選定一個 COM port
  253. 253. 新增專案 (1/6)  選擇好連線模式之後,會出現主畫面如下:
  254. 254. 新增專案 (2/6)  此時大部份的控制鍵是不能使用或無效的,要在畫面 左上方點選新增一個專案或是讀取一個專案後才能再 進行後續動作: 新增專案 讀取專案
  255. 255. 新增專案 (3/6)  新 增 專 案 後 會 彈 出 Robot Configuration 介面。這個介面 是用來設定所使用的 86Duino 型號、機器人的圖片、各 Pin 腳 的伺服機型號,以及設定 Home 的位置與各個伺服機的 Offset。 而這些設定也都能夠透過 Robot Configuration 再調整
  256. 256. 新增專案 (4/6) 設定 86Duino 型號 設定伺服機型號 設定是否同步、Offset、 歸 Home 時的角度
  257. 257. 新增專案 (5/6)  86小六足有十二個自由度,所以至少要選用 12 個伺 服機才能充分發揮小六足動作  範例中,86DuinoZero 規劃給 86小六足使用的腳位 為 2~13,型號為 TOWERPRO_SG90  這時利用線上調整功能將 Home 點設定好(調整 offset),讓小六足每隻腳都能夠接觸地面,設定完 成的部分畫面如下:
  258. 258. 盡量呈現水平 觸地
  259. 259. 新增專案 (6/6)  最下方的 Load Robot Picture 按鈕可以讓使用者載入 機器人圖片,方便對應機器人和伺服機之間的位置:
  260. 260. 1. 2. 按下 OK 後,會 被載入指定圖片 載入圖片 功能:
  261. 261. 完成新增專案  設定完成後按下 OK,接著 86ME 會開啟 Motion Name 欄位可供使用者建立 Motion
  262. 262. 用 86ME 編輯一個 Frame
  263. 263. 編輯 Frame (1/6) 1. 在畫面右邊的 Motion Name 欄位中輸入字串,替動作 取名 2. 按下上方的 Add Motion 按鈕建立 Motion,Motion 可 以含有許多不同的 Frame 或其他 Action 來組成一個完 整的動作 1 2
  264. 264. 編輯 Frame (2/6) 3. 在 Action List 空白處按滑鼠右鍵 4. 選擇 Add new action at the first field 5. 選擇 Frame 選擇 Frame
  265. 265. 編輯動作 (3/6)  新增一個 Frame 後,你會在左邊的空白區塊看到以 CH<num>開頭的控制項出現在左邊的空白區域,而 num 即為伺服機腳位編號,編號後面接的數字是 PWM duty,數字後面的拉桿可以調整 PWM duty 大小,一共 可看到三個這樣的控制項
  266. 266. 編輯動作 (4/6)  調整 PWM duty:可以手動輸入或是以滑鼠左鍵拉動拉桿 來調整
  267. 267. 編輯動作 (5/6)  為了要讓使用者方便對應馬達的編號與實際的位置,使用 者可以在 Robot Configuration 中載入機器人圖片,空白 區域底圖會設為此圖  滑鼠指到 CH 字樣時會出現 圖示,可以把整個控制項拖 拉到圖片中機器人關節旁邊,這樣就不用花時間去記憶伺 服機和腳位的對應關係,直接調整關節旁的伺服機即可
  268. 268. 滑鼠左鍵拖曳
  269. 269. 編輯動作 (6/6)  線上調整 Frame:勾選左上角的 Sync,此時當你拖拉光 桿來改變 PWM duty 的時候,伺服機也會同步跟著動作
  270. 270. 編輯完成  利用線上同步編輯伺服機角度的功能,可以方便的調 整一個 Frame  當我們調整好 12 個伺服機角度時,第一個 Frame 就 完成了
  271. 271. 完成一個 Motion
  272. 272. 新增 Frame (1/3)  只有一個 Frame 無法完成前進、後退等等的動作,我 們需要新增更多 Frame 來完成一個 Motion 1) 在剛剛 Frame 0 的下方再新增一個 Frame 1 2) 滑鼠右鍵選擇 add new action at the next field -> frame
  273. 273. 新增 Frame (2/3)  做為範例,我們先編輯 4 個測試動作,如下圖所示:
  274. 274. 新增 Frame (3/3)  另一個新增方式:Duplicate frame  會複製所選 Frame 並新增在下方,若下個 Frame 大部 分的伺服機角度與上個 Frame 相同,就可以利用此功 能來新增 Frame
  275. 275. 測試動作
  276. 276. 測試動作 (1/3)  有了 4 個 Frame,86ME 右上方像音樂播放器的按鈕, 可以幫助我們實現連續 Frame 的播放、暫停和停止:
  277. 277. 測試動作 (2/3)  播放:全部 Frame 會從頭執行到底,共一次  暫停:保持目前播放到的位置並暫停播放,再按一次 播放時會從上次暫停的地方開始  停止:從目前播放到的位置中斷但不記住位置
  278. 278. 測試動作 (3/3) 從頭到底播放一次 暫停動作,再按 播放後會從暫停 處繼續往下播放 至底 停止播放 暫停 停止
  279. 279. 循環播放
  280. 280. 循環播放  我們要用到兩個元素: Flag 和 Goto  Flag & Goto 必須成對才會有作用,流程如下: 播放到 Goto 時 是否有同 名的 Flag 是 否 不跳轉,繼續播放 依照 Goto 所設定之條 件判斷是否 跳轉 是 回到同名的 Flag 繼續播放 否 播放
  281. 281. Flag  新增 Flag  設定 Flag Name 選擇 Flag
  282. 282. Goto  新增 Goto 選擇 Goto
  283. 283.  點擊 Goto 後,左邊空白處會出現設定項目:  Target Flag Name:選擇要跳到哪個 Flag  Enable Goto:選擇是否啟用 Goto 功能  Loop Infinitely:選擇是否啟用循環功能
  284. 284. 設定無限循環播放  Target Flag Name:選擇要跳到哪一個目標 Flag  Enable Goto:打勾  Loop Infinitely:打勾
  285. 285. 設定有限循環播放  將 Loop Infinitely 打勾取消,下方的 Number of loops 的數值可以決定要 Goto 幾次後停止播放  以下圖為例, Number of loops 填 2,這邊的次數為 Goto 會跳轉的次數,並不是整個 Motion 的總執行 次數
  286. 286. 編輯第二個 Motion
  287. 287. 新增 Motion 1. 打上新的 Motion 名稱,按下 Add Motion 按鈕 2. 此時 Motion name 下拉式選單的內容也會跟著更 新,如下圖
  288. 288. Motion 觸發設定
  289. 289. 觸發概念簡介  觸發的概念即利用某些控制方式來驅動小六足的動作 觸發
  290. 290. 設定觸發方式  86ME 允許每個 Motion 設定一個觸發條件,目前共 有四種方式:  Auto  Keyboard  Bluetooth  PS2 Controller
  291. 291. 第一個觸發方式:Auto  Always On  永遠觸發目前所選的動作  Always Off  永不觸發目前所選的動作  Start Up  目前所選的動作只會在開機後執行一次
  292. 292. 第二個觸發方式:Keyboard  Keyboard  Key:選擇以哪個按鍵觸發  Type:何種狀態下觸發,分為  First Press(第一次按下)  Pressed(一直按住)  Release(放開)
  293. 293. 第三個觸發方式:Bluetooth  Bluetooth  Key:選擇以甚麼樣的字元觸發  Baud Rate:選擇藍芽模組所採 用的 Baud Rate  Used Port:選擇藍牙模組是連 接在 86Duino 的哪個 Port 上
  294. 294. 第四個觸發方式:PS2 搖桿  PS2 搖桿  Key:選擇搖桿上的按鈕以用來觸 發動作  Type:與 Keyboard 相同  DAT、CMD、ATT、CLK 為 PS2 接收器接上 86Duino 時需要接的 腳位,須選擇自己接線時所用的 Pin 腳
  295. 295. 啟用觸發條件  設定完成的觸發條件不會立即反應在 86Duino 上,我 們要使用自動產生 sketch 的按鈕,並且將產生的 sketch 程式燒錄至 86Duino 才會起作用。
  296. 296. 產生 86Duino sketch 程式
  297. 297. 產生 86Duino Sketch (1/3)  86ME 可以將編輯好的所有 Motion 產生成 86Duino Sketch,燒錄產生的 Sketch 進 86Duino 後,86Duino 會根據觸發條件判斷是否操作這個 Motion  86ME 提供兩種產生 Sketch 的方式 • Frame 檔和 sketch 分開 • 所有 Frame 直接寫在 sketch 內
  298. 298. 產生 86Duino Sketch (2/3) • Frame 檔與 sketch 分開: • 按下下圖中的第一個按鈕,會產生 Offset 檔、86Duino Frame 檔與 sketch 程式 (.ino 檔) • Offset 檔、 Frame 檔必須放在 SD 卡中,sketch 執行時會自動 讀取
  299. 299. 產生 86Duino Sketch (3/3) • 所有 Frame 直接寫在 sketch 內(建議方式,不需 SD 卡) • 按下下圖中第二個按鈕,只會產生一個 sketch 程式 (.ino 檔), Offset 與 Frame 皆已寫好在程式中 • 用此方式可直接將產生的程式燒錄進 86Duino,不需要 SD 卡
  300. 300. 認識六足 – 六足機構原理
  301. 301. 六足機構原理 足部的機構設計  Serial 機構  parallel 機構 工作空間的考量
  302. 302. 足部機構設計  昆蟲單足的腿部構造
  303. 303. 足部機構設計  一隻腳可以達到 6 DOF  機構設計必須考慮單足的自由度(簡化)  自由度的多寡會影響工作空間的大小及靈活性  機構設計必須考慮工作空間的大小
  304. 304. 足部 serial 機構設計  單足 1 個自由度的設計  即使是 1 DOF,靈活性還是很好 影片網址:http://www.youtube.com/watch?v=a0NFrA-Nx4Y
  305. 305. 足部 serial 機構設計  單足 2 個自由度的設計 影片網址: https://www.youtube.com/watch?v=MMrbYbdmvqM
  306. 306. 足部 serial 機構設計  單足 3 個自由度的設計 影片網址: http://www.youtube.com/watch?v=0jyBiECoS3Q
  307. 307. 足部 serial 機構設計  單足 4 個自由度的設計 影片網址: http://www.youtube.com/watch?v=6J9GKPKTyb8
  308. 308. 足部 parallel 機構設計  單足 2 個自由度的設計 平行機構 影片網址: http://www.youtube.com/watch?v=RVqn-UZahpw
  309. 309. 足部機構設計  Serial 機構的特性  腿節長度(L)是固定的  角度(β)需要脛節馬達的帶動才會變化  腿節與脛帶的動作是獨立的 L β
  310. 310. 足部機構設計  下列以 DMP Hexapod 示範  腿節長度由短變長  腿節的動作帶動脛帶的動作  只轉動腿節的馬達,脛節的馬達是不動的  足部夾角由小變大
  311. 311. 足部機構設計 這顆馬達 是沒有動 作的 只會轉動 這 顆馬達
  312. 312. 足部機構設計
  313. 313. 足部機構設計
  314. 314. 足部機構設計  Parallel 機構腿節長度不固定  增加六足機器人運動學計算的難度
  315. 315. 足部機構設計  Parallel 機構腿節的動作可以帶動脛帶的動作  可以考慮脛節少負載一個馬達  編輯六足機器人的歩行變得容易  編輯動作可以不用考慮脛節馬達的位置
  316. 316. 足部機構設計  Parallel 機構工作空間的受限  腿部的位置會影響脛部的工作空間  脛節馬達轉動的角度大於 180 度
  317. 317. 足部機構設計  脛節馬達轉動的角度約 100 度
  318. 318. 足部機構設計  腿部的工作空間會受 parallel 機構影響  脛節馬達轉動的角度約 120 度
  319. 319. Parallel vs. Serial Parallel 機構 Serial 機構 工作空間 較小 較大 動作編輯 容易 較難 運動學計算 較繁瑣困難 較直接簡單
  320. 320. 認識六足 – 六足步態簡介
  321. 321. 步態類型  Tripod 步態  Wave (Metachronal) 步態  Ripple 步態
  322. 322. Tripod Gait  三足同步的方式  (L1,R2,L3) -> (R1,L2,R3) -> (L1,R2,L3) -> …  步徏轉移的時間較短  行進的速度較快
  323. 323. Tripod Gait (影片) 影片網址: https://www.youtube.com/watch?v=O4rff7KnkeA
  324. 324. Wave Gait  單足行進的方式  L3 -> L2 -> L1 -> R3 -> R2 -> R1 -> L3 -> …  步徏轉移的時間較長  行進的速度較慢
  325. 325. Wave Gait (影片) 影片網址: http://www.youtube.com/watch?v=6F5VSLm3qkY
  326. 326. Ripple Gait  單足行進的方式  L3 -> R1 -> L2 -> R3 -> L1 -> R2 -> L3 -> …  步徏轉移的時間較長  行進的速度較慢
  327. 327. Ripple Gait (影片) 影片網址: http://www.youtube.com/watch?v=5ro_1-6ADQM
  328. 328. 認識六足 – DMP 小六足
  329. 329. 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
  330. 330. DMP 小六足 (影片)  DMP 暑期實習生專題  六足蠍子 - 史迦納  Serial 機構  內部使用逆運動學來 計算步伐  根據展現的動作會發出 不同音效 影片網址:https://www.youtube.com/watch?v=ujsKvYa32kY Open Source on GitHub website:https://github.com/RoBoardGod/Robot-
  331. 331. 使用 86ME 編輯小六足動作
  332. 332. 概念說明  六足的常見步態有 Tripod、Wave、Ripple,而我們所採用的範例為 Tripod 步態,同時會有三隻腳觸地,另外三隻腳離地,機器人的移動 是藉由觸地的腳位移產生。而這三隻腳如下圖是分為兩組,抬腳時會 一起行動。 右上-左中-右下 為紅組 左上-右中-左下 為藍組 以最前方的腳簡稱 紅 紅 紅 藍 藍 藍
  333. 333. 標注說明  之後會說明 86小六足的範例步態,為了方便理解,會 以實際圖片加上輔助的標注來表達  腳部抬升離地以 表示, 表示放腳觸地
  334. 334. 標注說明  圖片皆為俯視圖,上方為小六足的前方 前方
  335. 335. 編輯前進動作
  336. 336. 前進的方式 (1/6)  紅組抬腳  紅組向前  藍組向後
  337. 337. 慢動作播放影片
  338. 338. 前進的方式 (2/6)  紅組放腳觸地  其餘不動
  339. 339. 慢動作播放影片
  340. 340. 前進的方式 (3/6)  藍組抬腳  其餘不動
  341. 341. 慢動作播放影片
  342. 342. 前進的方式 (4/6)  藍組向前  藍組抬腳  紅組向後
  343. 343. 慢動作播放影片
  344. 344. 前進的方式 (5/6)  藍組放腳觸地  其餘不動
  345. 345. 慢動作播放影片
  346. 346. 前進的方式 (6/6)  紅組抬腳  其餘不動
  347. 347. 慢動作播放影片
  348. 348. 連續慢動作播放前進影片
  349. 349. 實際調整前進動作 (1/6)  第一個 Frame: playtime 300 ms
  350. 350. 實際調整前進動作 (2/6)  第二個 Frame: playtime 150 ms
  351. 351. 實際調整前進動作 (3/6)  第三個 Frame: playtime 150 ms
  352. 352. 實際調整前進動作 (4/6)  第四個 Frame: playtime 300 ms
  353. 353. 實際調整前進動作 (5/6)  第五個 Frame: playtime 150 ms
  354. 354. 實際調整前進動作 (6/6)  第六個 Frame: playtime 150 ms
  355. 355. 完成前進動作  將編輯好的 frame 連續播放,86小六足就能向前奔跑囉  若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
  356. 356. 編輯左轉動作
  357. 357. 左轉的方式 (1/6)  藍組抬腳  前後移動如圖
  358. 358. 慢動作播放影片
  359. 359. 左轉的方式 (2/6)  藍組放腳觸地  其餘不動
  360. 360. 慢動作播放影片
  361. 361. 左轉的方式 (3/6)  紅組抬腳  其餘不動
  362. 362. 慢動作播放影片
  363. 363. 左轉的方式 (4/6)  紅組抬腳  前後移動如圖
  364. 364. 慢動作播放影片
  365. 365. 左轉的方式 (5/6)  紅組放腳觸地  其餘不動
  366. 366. 慢動作播放影片
  367. 367. 左轉的方式 (6/6)  藍組抬腳  其餘不動
  368. 368. 慢動作播放影片
  369. 369. 連續慢動作播放左轉影片
  370. 370. 實際調整左轉動作 (1/6)  第一個 Frame: delay 300 ms
  371. 371. 實際調整左轉動作 (2/6)  第二個 Frame: delay 150 ms
  372. 372. 實際調整左轉動作 (3/6)  第三個 Frame: delay 150 ms
  373. 373. 實際調整左轉動作 (4/6)  第四個 Frame: delay 300 ms
  374. 374. 實際調整左轉動作 (5/6)  第五個 Frame: delay 150 ms
  375. 375. 實際調整左轉動作 (6/6)  第六個 Frame: delay 150 ms
  376. 376. 完成左轉動作  將編輯好的 frame 連續播放,86小六足就能左轉囉  若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
  377. 377. 編輯右轉動作
  378. 378. 右轉的方式 (1/6)  藍組抬腳  前後移動如圖
  379. 379. 慢動作播放影片
  380. 380. 右轉的方式 (2/6)  藍組放腳觸地  其餘不動
  381. 381. 慢動作播放影片
  382. 382. 右轉的方式 (3/6)  紅組抬腳  其餘不動
  383. 383. 慢動作播放影片
  384. 384. 右轉的方式 (4/6)  紅組抬腳  前後移動如圖
  385. 385. 慢動作播放影片
  386. 386. 右轉的方式 (5/6)  紅組放腳觸地  其餘不動
  387. 387. 慢動作播放影片
  388. 388. 右轉的方式 (6/6)  藍組抬腳  其餘不動
  389. 389. 慢動作播放影片
  390. 390. 連續慢動作播放右轉影片
  391. 391. 實際調整右轉動作 (1/6)  第一個 Frame: delay 300 ms
  392. 392. 實際調整右轉動作 (2/6)  第二個 Frame: delay 150 ms
  393. 393. 實際調整右轉動作 (3/6)  第三個 Frame: delay 150 ms
  394. 394. 實際調整右轉動作 (4/6)  第四個 Frame: delay 300 ms
  395. 395. 實際調整右轉動作 (5/6)  第五個 Frame: delay 150 ms
  396. 396. 實際調整右轉動作 (6/6)  第六個 Frame: delay 150 ms
  397. 397. 完成右轉動作  將編輯好的 frame 連續播放,86小六足就能右轉囉  若是想要機器人一次多動幾步,也可以自行加入 Flag 與 Goto
  398. 398.  雖然現在有了前進、左轉、右轉等動作,但仍是靠著 USB 線連接 86小六足才能動作。接下來,我們要將 動作燒錄至 86小六足,並且介紹如何用第三方控制器 (如:鍵盤、手機或 PS2 搖桿)來選擇播放的動作。
  399. 399. 動作觸發方式的設定
  400. 400. USB 鍵盤觸發  在 86ME 中,假設以英文大寫字母 W、A 、D 分別代 表前進、左轉、右轉的動作,設定如下: 持續按著 W 鍵觸發 前進動作 持續按著 A 鍵觸發 左轉動作 持續按著 D 鍵觸發 左轉動作 前進 左轉 右轉
  401. 401. 藍牙觸發  在 86ME 中,假設以英文大寫字母 U、L 、R 分別代 表前進、左轉、右轉的動作,設定如下: 收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作 前進 左轉 右轉
  402. 402. PS2 搖桿觸發  在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右 分別代表前進、左轉、右轉的動作,設定如下: 持續按著十字鍵的” 上”觸發前進動作 持續按著十字鍵的” 左”觸發前進動作 持續按著十字鍵的” 右”觸發前進動作 ※ 設定中 DAT、CMD 、ATT 、CLK 可以任選四根沒用到的腳位 前進 左轉 右轉
  403. 403.  全部設定完成後,按下 Generate 86Duino sketch (All in One) 按鈕,將產生出來的 .ino 燒錄至 86Duino。然後拔除 86小六足的 USB 線,接上鋰電 池,開始用指定的第三方控制器控制 86小六足的動作!  下面我們將詳細介紹前進/左轉/右轉動作的藍牙觸發 設定方法,最後以手機遙控 86小六足。
  404. 404. 實作觸發範例 – 用手機藍牙遙控 86小六足
  405. 405. 手機藍牙控制原理  我們會使用一塊藍牙模組與 86DuinoZero 連接,藍 牙模組會接收手機藍牙 APP 送來的命令,並將命令透 過 UART 介 面 送 給 86DuinoZero , 收 到 命 令 的 86DuinoZero 便將指定的小六足動作播放一次,如此 一來,即達到用手機控制小六足的效果
  406. 406.  示意圖: 86Duino Zero 藍牙模組 UART 伺服機伺服機 伺服機 PWM 86小六足 PWM 藍牙遙控 ‧‧‧ ‧‧‧
  407. 407. 手機藍牙遙控步驟 下載藍牙遙控 APP 設定藍牙觸發 產生 sketch 程式 燒錄 sketch 程式 使用 86ME 使用 86Duino IDE 使用 手機 設定按鍵字元 藍牙配對 開始遙控 86小六足 連接藍牙模組86DuinoZero
  408. 408. 86DuinoZero 連接藍牙模組  準備 HC-06 或 HC-05 模組 1 塊(以下以 HC-06 藍 牙模組做為範例說明):
  409. 409.  HC-06 對外連接介面為 UART,連接腳有 4 支:VCC、 GND 、RXD 、 TXD  這裡我們以 86DuinoZero 的 Serial1 為例,對照下表, 連接 86DuinoZero 與 HC-06 :
  410. 410.  實際連接如下圖所示: 藍牙模組 HC-06 藍牙 TXD 接 pin 0 藍牙 RXD 接 pin 1 RXD TXD
  411. 411.  當 HC-06 接上電源後,可以看到上面的 LED 燈號快 速閃爍 (間隔約 0.2 秒),代表 HC-06 正在等待配對: 快速閃爍
  412. 412. 1) 選擇一個小六足動作  例如:forward 2) 選擇 Trigger 分頁 3) 選擇 Bluetooth 為觸發方式 4) 選擇要觸發這個動作的字元  該字元可以於手機藍牙 APP 中自由設定  例如:英文字大寫 U 5) 選擇 86Duino 與藍牙模組通訊的 Baud Rate  例如:9600 6) 選擇 86Duino 與藍牙模組通訊的序列埠  例如:Serial1 86ME 設定藍牙觸發 1 3 4 5 2 6
  413. 413. 86ME 產生 Sketch 程式  按下 86ME 右下角的 “Generate 86Duino sketch (All in One” 按鈕,它將自動產生 86Duino sketch 程式
  414. 414. 燒錄藍牙控制程式  打開 86Duino IDE,選擇檔案 > 開啟... ,選擇剛剛 86ME 產生出來的程式
  415. 415.  然後按下 86Duino IDE 的燒錄按鈕,將程式燒錄至 86Duino 上 燒錄
  416. 416. 下載藍牙遙控 APP  手機環境為 Android 系統:  在 Google 商店中搜尋 “Bluetooth Controller”  手機環境為 iOS 系統  APP store 中搜尋 “LightBlue” ※下面我們以 Android 系統上的 Bluetooth Controller App 為例,介紹其操 作方式。在 iOS 上,操作方法與 Bluetooth Controller App 大同小異
  417. 417. 設定按鍵名稱和對應字元  打開 Bluetooth Controller,點擊 “Set Keys”
  418. 418.  進入設定畫面後,我們要設定按鍵名稱 “Key Name” 和對應字元 “Data of Key”
  419. 419.  對應 86ME 中選取的動作名稱,這裡的按鍵名稱也命 名為 “forward”,觸發字元為 “U”,如右下圖:
  420. 420.  回到主畫面,會看到下方按鍵上出現剛剛設定的名稱:
  421. 421.  按下 Scan,APP 會自動搜尋並列出附近的藍牙裝置:
  422. 422.  這裡我們選 HC-06,APP 將會自動配對  配對成功後,下方會出現 “Connect to HC-06” 訊息
  423. 423.  配對成功同時,我們也可以看到 HC-06 藍牙模組的 LED 燈從快速閃爍狀態,改為常亮狀態,此時代表我 們可以用手機藍牙遙控 86小六足了!! 常亮
  424. 424.  此時手機上按下 forward 按鈕,就可以看到 86小六 足播放前進的動作了:
  425. 425. 使用其他藍牙 APP  可以安裝具有控制鍵等圖形的藍牙 APP,讓操控介面 變得更直覺。例如: BlueControl Arduino BT Joystick Free
  426. 426. 小六足動作程式解析
  427. 427.  我們將 86ME 產生出來的程式稱為 86小六足動作程式  86小六足動作程式運作流程如下: 解析命令 (有設定觸發條件的情況) Servo86 函式庫 Timer GPIO GPIO GPIO … …
  428. 428.  由於 86小六足動作程式只使用一個函式庫:Servo86, 因此,我們要先對 Servo86 函式庫有基礎的認識,後 面在講解 86小六足動作程式時會比較容易理解其運作 原理。
  429. 429. Servo86 函式解說
  430. 430. 單一伺服機設定函式  setVelocity()  setPosition()  setOffset()  setRealTimeMixing()
  431. 431. 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() {}
  432. 432. 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() {}
  433. 433. 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() {}
  434. 434. setRealTimeMixing()  動態設定伺服機對目標角度的偏移值。當機器人裝有感應 器的情況下,此函式可以將感測器回傳的偏差值即時加入 目標角度的運算式中,進而修正伺服機的目標角度。  此功能的一個應用是可根據陀螺儀的回傳數值對機器人的平 衡動作進行動態補償,進而增加動作時的穩定性  傳入參數:偏移值,單位 us。
  435. 435. 單一伺服機動作函式  run()  pause()  resume()  stop()  release()  isMoving()
  436. 436. 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() {}
  437. 437. pause()  暫停正在動作的伺服機。  傳入參數:無
  438. 438. resume()  恢復暫停中的伺服機  傳入參數:無
  439. 439. #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); }
  440. 440. stop()  停止動作中的伺服機。  經由 stop() 停止的伺服機無法 resume。呼叫 stop() 後 必須重新設定伺服機目標角度以及呼叫 run(),才會讓 伺服機再往目標角度移動。  傳入參數:無
  441. 441. release()  讓伺服機停止出力  前面提到的 stop()、pause(),呼叫後伺服機會停下並 持續出力。而 release() 則會使伺服機停下並處於脫力 (不出力) 狀態。  輸入參數:無
  442. 442. isMoving()  回傳伺服機是否已到達目標位置  傳入參數:無  回傳:true (伺服機仍在轉動,尚未到達目標位置) 或 false (伺服機已到達目標位置)
  443. 443. 多伺服機同時動作函式  servoMultiRun() - 同時啟動多顆伺服機  servoMultiPause() - 同時暫停多顆伺服機  servoMultiResume() - 同時恢復多顆伺服機  servoMultiStop() - 同時停止多顆伺服機  isServoMultiMoving() - 同時檢查多顆伺服機是否 已全部到達目標位置
  444. 444. #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); // 等待所有伺服機都轉到目標位置 }
  445. 445. Servo86 函式庫對 Frame 的支援
  446. 446. ServoFrame 函式  ServoFrame 類別  positions[]  setPositions()  playPositions()  load()  save()
  447. 447. 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() {}
  448. 448. setPositions()  把代表 Frame 的目標位置列表分別指定給各伺服機  輸入參數:轉動時間和 Servo 類別。轉動時間可以不 輸入,如果沒有輸入時間,預設會用最快的速度轉到 目標位置。
  449. 449. #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() {}
  450. 450. playPositions()  把代表 Frame 的目標位置列表指定給各伺服機並立即控制 伺服機移動到 Frame 指定的角度  等同先呼叫 setPositions() 再接著呼叫 servoMultiRun() 的 效果  輸入參數:和 setPositions() 一樣
  451. 451. #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() {}
  452. 452. 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() {}
  453. 453. 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() {}
  454. 454. 擴充的 ServoFrame 類別 (可以用來讀取其他專用伺服機控制板的 Frame 檔)
  455. 455. Pololu RC 伺服機控制板 Pololu Maestro 影片網址:https://www.youtube.com/watch?v=AqToEWmTVXA Demo 影片
  456. 456. Pololu 動作編輯器 ※ 會將動作儲存到一個特定格式的 .txt 檔
  457. 457. ServoFramePololu 函式  ServoFramePololu 類別  positions[] – 功能與 ServoFrame 一樣  setPositions() – 功能與 ServoFrame 一樣  playPositions() – 功能與 ServoFrame 一樣  load() - 讀取 Pololu 的 .txt Frame 檔  save() – 功能與 ServoFrame 一樣
  458. 458. load()  讀取 Pololu Frame 檔案  傳入參數:檔案名稱、Sequence 名稱和 Frame 名稱  Sequence 名稱和 Frame 名稱可在 Pololu 編輯器中查 詢取得  回傳:true 為讀取成功,false 為失敗
  459. 459. #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() {}
  460. 460. Innovati RC 伺服機控制板 影片網址: https://www.youtube.com/watch?v=SOrZUK1i34g 控制機器人影片
  461. 461. Innovati 動作編輯器 ※ 會將編輯好的 Frame 個別存到 .ftxt 檔
  462. 462. ServoFrameInno 函式  ServoFrameInno 類別  positions[] – 功能與 ServoFrame 一樣  setPositions() – 功能與 ServoFrame 一樣  playPositions() – 功能與 ServoFrame 一樣  load() - 讀取 Innovati 的 .ftxt Frame 檔  save() – 功能與 ServoFrame 一樣
  463. 463. load()  讀取 Innovati Frame 檔案  傳入參數:Frame 檔案名稱  回傳:true 為讀取成功,false 為失敗
  464. 464. #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() {}
  465. 465. KONDO RC 伺服機控制板 控制機器人影片KONDO RCB-1/RCB-3 影片網址: https://www.youtube.com/watch?v=KPaTl9qljRU
  466. 466. KONDO 動作編輯器 ※ 會將編輯好的 Frame 全部存在一個 .RCB 檔
  467. 467. KONDO Frame 函式  ServoFrameKondo 類別  positions[] – 功能與 ServoFrame 一樣  setPositions() – 功能與 ServoFrame 一樣  playPositions() – 功能與 ServoFrame 一樣  load() - 讀取 KONDO 的 .RCB Frame 檔  save() – 功能與 ServoFrame 一樣  capture() – 抓取 KONDO 伺服機目前角度(KONDO 伺服機專用的位置抓取函式)
  468. 468. load()  讀取 KONDO Frame 檔案  傳入參數:檔案名稱和 Frame 名稱  Frame 名稱可在 KONDO 編輯器中查詢取得  回傳:true 為讀取成功,false 為失敗
  469. 469. #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() {}
  470. 470. 支援 KONDO 伺服機的 位置回授功能
  471. 471. KONDO 機器人專用伺服機 (1/2) KRS-786 KRS-788HV KRS-4014
  472. 472. KONDO 機器人專用伺服機 (2/2)  這種伺服機除了可以控制角度外,也具有抓取位置功能。 可以用來做教導式的機器人的動作編輯,如下面影片: 影片網址: https://www.youtube.com/watch?v=8ucti15PX20
  473. 473.  Servo86 函式庫的 capture() 功能可以用來抓取 KONDO 伺服機的位置
  474. 474. capture()  讀取 KONDO 伺服機回傳的角度。注意,capture() 需要在所有伺服機皆為 release 狀態下才有作用,如 果您之前有啟動過任一伺服機,必須先呼叫 release() 後再呼叫此函式。  傳入參數:要 capture 的 servo 類別  回傳:讀到的角度,單位 us。
  475. 475. #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() {}
  476. 476. KONDO 伺服機和 86Duino 連接的注意事項  86Duino 要透過 capture() 來讀取 KONDO 伺服機回傳的角度前,要 注意阻抗匹配問題,也就是說您必須在 PWM 信號腳加上一個 5k 以 下的 pull-up 電阻,才有辦法讀取回傳角度, 如下圖: 5K 電阻 3.3V
  477. 477.  更詳細的內容請參考 86Duino 官網的 Servo86 文件: http://www.86duino.com/?p=11050&lang=TW
  478. 478. 解析 86小六足動作程式
  479. 479. 前言  為了用較簡單清晰的方式來解析小六足動作程式,我 們先將前進/左轉/右轉的動作設定成 Always ON/Off, 來認識基本的程式結構,最後再設定其他的觸發方式, 了解不同觸發方式在程式中所做的改變。  這裡我們使用的 86ME 為 v1.5 版。 ※ 未來新版 86ME 產生的小六足動作程式架構可能有所進化,導致 新版小六足動作程式與下面將要介紹的內容不同。
  480. 480. 產生小六足動作程式檔 (1/2)  先將小六足四個 Motion 的觸發設定為  forward:Always On  left :Always On  right :Always On  home :Always Off forward home right left
  481. 481. 產生小六足動作程式檔 (2/2)  按下 Generate 86Duino Sketch (All in One) 按鈕  將產生名稱為 AllinOne_Motion_Sketch 的 .ino 檔, 即小六足動作程式檔:
  482. 482. 打開小六足動作程式檔  用 86Duino IDE 或 Notepad++ 等文書 編輯軟體打開小六 足動作程式檔:
  483. 483. 小六足動作程式結構簡介  程式結構分為三大段: 引入 Servo86 和其他必要的函式庫、宣告變數 setup 初始化 Servo Pin、設定 Offset 和 Frame,最後讓機器 人出力並回到 Home 姿勢 更新狀態(鍵盤、藍牙等等)並逐一判斷是否執行各個 Motion loop 第一段 第二段 第三段
  484. 484. 小六足動作程式解析 – 第一段 #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
  485. 485. 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 的值
  486. 486. 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 小六足動作程式解析 – 第二段
  487. 487. 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 ,所有伺服機的角度
  488. 488. 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
  489. 489. void loop() { if(0) { home_frm0.playPositions(1000); while(isServoMultiMoving() == true); } } … 因為 home 動作的觸發設定為 Always Off,所以判斷式為永遠不成 立的 if(0),在 loop 迴圈中,home 動作永遠不會播放
  490. 490. 更改觸發條件  以上是使用 Always On/Off 觸發所產生的小六足動作 程式,我們用它來認識基本的程式結構。  下面我們將改用藍牙/USB鍵盤/PS搖桿來觸發前進/左 轉/右轉動作,然後產生程式,看看產生出來的小六足 動作程式有哪裡不同,並了解那些不同的程式的作用。
  491. 491. USB 鍵盤觸發
  492. 492. 設定鍵盤觸發  在 86ME 中,假設以英文大寫字母 W、A 、D 分別代 表前進、左轉、右轉的動作,設定如下: 第一次按下 W 鍵觸 發前進動作 持續按著 A 鍵觸發 左轉動作 放開 D 鍵觸發左轉 動作 前進 左轉 右轉
  493. 493.  打開產生出來的小六足動作程式,在第一段程式碼中 會額外引入 KeyboardController.h 並產生更新鍵盤按 鍵狀態必要的程式碼:
  494. 494.  setup() 上方會新增一個函式,為 key_state(),用來 判斷一個按鍵的狀態,狀態可分成:  第一次按下  持續按著  放開  下面來看看 key_state() 的程式碼,並了解其運作原理:
  495. 495. 回傳 0 代表第一次按下 回傳 1 代表持續按著 回傳 2 代表放開 共可判斷 128 個按鍵,陣列中的元素號碼對應到 一個鍵盤按鍵,例如:key_state[4] 為鍵盤 A 的狀 態 當鍵盤按鍵被按下時,按下的按鍵會 即時儲存至 current_key 變數中 按鍵的按下狀態,1 為按下,0 為放開 非以上狀態回傳 3 判斷是否第一次按下 判斷是否持續按著 判斷是否放開
  496. 496. 取得鍵盤按鍵狀態 更新按鍵 W、A 、D 的狀態 判斷是否第一次按下 W 鍵 如果是第一次按下 W 鍵,則播 放 forward 動作
  497. 497.  左轉的動作判斷式變更為  右轉的動作判斷式變更為 判斷是否持續按著 A 鍵 如果是持續按著 A 鍵, 則播放 left 動作 判斷是否放開 D 鍵 如果是放開 D 鍵,則 播放 right 動作
  498. 498. 藍牙觸發
  499. 499. 藍牙觸發  在 86ME 中,假設以英文大寫字母 U、L 、R 分別代 表前進、左轉、右轉的動作,設定如下: 收到 U 字母觸發前進動作 收到 L 字母觸發左轉動作 收到 R 字母觸發右轉動作 前進 左轉 右轉
  500. 500.  打開產生出來的小六足動作程式,可以看到程式開頭 不需要額外引入函式庫,只需要多宣告一個變數來接 收收到的字元,並在 Setup 函式初始化指定的 Serial Port: 多宣告一個變數 初始化 Serial1
  501. 501. 接收新指令,並且 把 指 令 存 到 Serial_Command 變數中沒有指令傳過來時,變數值 為 0xFFF,代表不做任何事 是否收到命令 ‘U’ 字 元 如果收到 ‘U’ 字元,則播放 forward 動作
  502. 502.  左轉的動作判斷式變更為  右轉的動作判斷式變更為 判斷是否收到 ‘L’ 字 元 如果收到 ‘L’ 字元, 則播放 left 動作 判斷是否收到 ‘R’ 字元 如果收到 ‘R’ 字元 ,則播放 right 動作
  503. 503. PS2 搖桿觸發
  504. 504. PS2 搖桿觸發  在 86ME 中,假設以PS2 搖桿上的十字鍵上、左 、右 分別代表前進、左轉、右轉的動作,設定如下: 持續按著十字鍵的” 上”觸發前進動作 持續按著十字鍵的” 左”觸發前進動作 持續按著十字鍵的” 右”觸發前進動作 ※ 設定中 DAT、CMD 、ATT 、CLK 可以任選四根沒用到的腳 位 前進 左轉 右轉
  505. 505. 不同觸發條件的影響 – PS2搖桿  打開產生出來的小六足動作程式,程式開頭引入 PS2X_lib.h 並宣告 PS2X 物件來初始化搖桿 … 初始化 PS2 搖桿
  506. 506.  Setup 函式中以 config_gamepad 來設定 PS2 接收 器與 86Duino 連接的腳位
  507. 507. 讀取 PS2 搖桿狀態 按下 + 非第一次按下 = 持續按下 如果持續按著十字 件的 ‘上’,則播 放 forward 動作
  508. 508.  左轉的動作判斷式變更為  右轉的動作判斷式變更為 判斷是否持續按著十字鍵的 ‘左’ 如果是,則播放 left 動作 判斷是否持續按著十字鍵的 ‘右’ 如果是,則播放 right 動作
  509. 509. 進階練習 – 改寫一個有效率的小六足動作程式
  510. 510.  以上展示的小六足動作,一定會播放完整個動作後才 能再接收新指令,這是因為每個 frame 中間都呼叫了 isServoMultiMoving() 來等待所有伺服機轉到目標角 度,造成小六足無法 “即時反應” 新動作的指令:
  511. 511.  這裡我們以藍牙觸發的小六足動作程式為例,介紹如 何把程式改成可以立即反應新指令的到來。  修改要點: 在 while(isServoMultiMoving() == true) 中不斷地 判斷是否有新指令到來,如果有,則跳出目前正在播 放的動作,改播放新動作  最簡單、直接的方法是使用 Flag 和 Goto,見下頁說明
  512. 512. 加入 flag 每個 while 迴圈中, 判斷是否有新指令 到來,若有,則跳 到 flag 去接收新指 令,這麼一來,動 作就會立即改變了 後面的 left、right 動作的 while 迴圈中,加入上述相同的判斷式
  513. 513.  用以上方法可以簡單的將原程式改寫成對新指令 “即 時反應” 的程式  但事實上,可以實現這個目標的方法不只一種,您可以 使用有結構性的方法讓程式變得更簡潔、易修改(留給 各位自行發揮)。
  514. 514. 86小六足創意改造
  515. 515. 動作創作  如何加快 86小六足走路速度?  如何編輯 86小六足打招呼、伸懶腰動作?  如何編輯出其他種六足步態?  如何使用鍵盤或PS2搖桿觸發動作?  如何加入運動學計算來控制小六足步態?
  516. 516. 創作屬於自己的小六足  例如:  加入上半身  搭載獠牙,尾巴…
  517. 517. Thank You 感謝大家來參與 86Duino Maker Day IV DMP Electronics Inc. (瞻營全電子) robotics@dmp.com.tw

×