DMP Electronics Inc. (瞻營全電子)
robotics@dmp.com.tw
早上 10:00 ~ 11:00
Arduino 和 86Duino 控制伺服機的方法簡介
86ME 機器人動作編輯器簡介
86ME 安裝和使用教學
下午 1:30 ~ 2:30
六足機構原理
六足步態簡介
使用 86ME 編輯小六足動作
手機藍芽遙控小六足
下午 3:30 ~ 4:30
Servo86 函式介紹
86ME 產生的程式介紹
進階 – 小六足程式修改介紹
Arduino/86Duino
控制伺服機方式簡介
Arduino 控制伺服機:
使用 Servo 函式庫
 attach() - 初始化 Servo pin
 write() - 控制 Servo 轉動至 0 ~ 180 度
 writeMicroseconds()- 輸入 PWM duty 來控制 Servo 角度
 read() - 讀 Servo 目前角度
 attached() - 檢查 Servo pin 是否 attach 過
 detach() - 關閉 Servo pin
** Servo 函式庫使用方法大部分 Arduino 書籍皆有介紹,此處不再贅述**
範例程式
#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 影片
伺服機以最快速度轉動,
無法直接控制速度
Servo 函式庫的改良:
86Duino Servo86 函式庫
 可設定每顆伺服機轉動速度
 可同步控制多顆伺服機轉動,並且在同時間內到達目標位置
 可支援最多 45 顆伺服機同步控制
 改善 PWM Duty 抖動(jitter)的問題
 支持以 Frame 為基礎的機器人動作流程控制方法
範例程式
#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 影片
伺服機轉動速度簡易可控
PWM Duty 抖動現象 (1/2)
 由於舊的 Arduino Servo 函式庫裡 PWM 是用軟體模擬的
方式來實現,所以會出現以下情形:
 實際輸出的 PWM duty 時間會有抖動現象 (jitter)
 當使用的 PWM channel 超過 12 組, Arduino 會啟用更
多組 Timer, 多個 Timer 中斷彼此干擾, 有時會惡化
PWM jitter 現象
PWM Duty 抖動現象 (2/2)
 以示波器量測 Arduino 輸出的 PWM duty,如下圖:
 因抖動造成的誤差範圍與 CPU 特性及軟體模擬算法有關
抖動現象
以 Arduino UNO 為例, 觀察 PWM 抖動情況
+
示波器 Arduino UNO
波型抖動
實況影片:
PWM 抖動現象的影響
 在命令解析度比較高的 RC Servo 上, 會造成 servo 輸出軸
實際的抖動
 一般模型用的低價 RC Servo 解析度較低, 受 PWM 抖動現
象的影響不大
Arduino UNO
+
KONDO
KRS4014 Servo
Servo抖動實況影片
 在 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
 在 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 惡化情形
用動畫的概念控制機器人動作
動畫播放原理 (1/3)
 翻書動畫:https://www.youtube.com/watch?v=oOgHzcrVG1s
動畫播放原理 (2/3)
動畫播放原理 (3/3)
Frame (幀) 的概念
 機器人的動作編輯,也可以視為在編輯圖片中人物的
動作,一個動作(畫面)稱為 ”幀 (Frame)”,多個靜
止動作透過 Servo86 函式庫連續播放出來,機器人
就會動起來了。
 在一些專用的機器人控制板中,Frame 有時候被成為
Pose (姿勢)
機器人動作編輯與播放
編輯 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: 1340, 1200, 1543, 2178, 1222, 1456, 1723, 1111, 954, 1245…
Frame3: 1000, 2345, 2000, 800, 1200, 2019, 2430, 1432, 1270, 955, 1560…
86ME 機器人動作編輯器簡介
86ME
 機器人專用動作編輯器,編輯機器人動作 Frame 變得
更 輕 鬆 , 可 以 自 動 產 生 使 用 Servo86 函 式 庫 的
86Duino 的程式,省掉我們寫程式的工夫
 是一套綠色、開源軟體,解開可立即使用,無須安裝,
原始碼可以根據自己的喜好修改
使用 86ME 的基礎觀念
 Frame
 各個伺服機角度所組成的一個姿勢
 Motion
 展現一連串 frame 的整個過程
 homeframe
 機器人上電之後所會展現的第一個 frame,編輯各個 frame 時的初
始值也會同 homeframe
 offset
 機器人實際的 homeframe 難免會因為組裝上有誤差而與自己的理
想值有偏移,這個偏移量即為 offset
86ME 功能簡介
 支援線上調整 offset 與 homeframe
 支援線上調整 frame,讓使用者能立即看到編輯結果
並即時調整
 支援編輯多個動作 (motion),並且可即時播放動作的
連續 frame
 可設定 motion 的觸發條件,並且可以產生 86Duino
的 sketch 程式
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. 目前僅支援 Windows 環境下執行,且須要有 .NET
Framework 3.5 以上的環境才能正常啟動 86ME
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. 選擇 檔案 > 範例 > Servo86 > MotionEditor
燒錄 86ME 的韌體至 86Duino
 按 下 燒 錄 按 鈕 , 之 後 看 到 Uploading the binary
sketch … Done 訊息,說明燒錄已完成
燒錄
完成
開啟 86ME
 韌體燒錄完成後,關閉 86Duino IDE,滑鼠左鍵雙擊
86ME,此時會看到連接埠選擇視窗
 選擇 86Duino 虛擬連接埠,也可以選 Auto 由 86ME
自動選取
自動抓取 COM port
離線模式
選定一個 COM port
新增專案 (1/6)
 選擇好連線模式之後,會出現主畫面如下:
新增專案 (2/6)
 此時大部份的控制鍵是不能使用或無效的,要在畫面
左上方點選新增一個專案或是讀取一個專案後才能再
進行後續動作:
新增專案
讀取專案
新增專案 (3/6)
 新 增 專 案 後 會 彈 出 Robot
Configuration 介面。這個介面
是用來設定所使用的 86Duino
型號、機器人的圖片、各 Pin
腳 的 伺 服 機 型 號 , 以 及 設 定
Home 的位置與各個伺服機的
Offset。而這些設定也都能夠透
過 Robot Configuration 再調整
新增專案 (4/6)
設定 86Duino 型號
設定伺服機型號
設定是否同步、Offset、
歸 Home 時的角度
新增專案 (5/6)
 86小六足有十二個自由度,所以至少要選用 12 個伺
服機才能充分發揮小六足動作
 範例中,86DuinoZero 規劃給 86小六足使用的腳位
為 2~13,型號為 TOWERPRO_SG90
 這時利用線上調整功能將 Home 點設定好(調整
offset),讓小六足每隻腳都能夠接觸地面,設定完
成的部分畫面如下:
盡量呈現水平
觸地
新增專案 (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 來組成一個完整
的動作
1
2
編輯 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 action at the next field -> frame
新增 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
 設定 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
新增 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 時需要接的
腳位,須選擇自己接線時所用的
Pin 腳
啟用觸發條件
 設定完成的觸發條件不會立即反應在 86Duino 上,我
們要使用自動產生 sketch 的按鈕,並且將產生的
sketch 程式燒錄至 86DUino 才會起作用。
產生 86Duino sketch 程式
產生 86Duino Sketch (1/3)
 86ME 可以將編輯好的所有 Motion 產生成 86Duino
Sketch,燒錄產生的 Sketch 進 86Duino 後,伺服機會根
據觸發條件判斷是否操作這個 Motion
 86ME 提供兩種產生 Sketch 的方式
• Frame 檔和 sketch 分開
• 所有 Frame 直接寫在 sketch 內
產生 86Duino Sketch (2/3)
• Frame 檔與 sketch 分開:
• 按下下圖中的第一個按鈕,會產生 Offset 檔、86Duino Frame
檔與 sketch 程式 (.ino 檔)
• Offset 檔、 Frame 檔必須放在 SD 卡中,sketch 執行時會自動
讀取
產生 86Duino Sketch (3/3)
• 所有 Frame 直接寫在 sketch 內(建議方式,不需 SD 卡)
• 按下下圖中第二個按鈕,只會產生一個 sketch 程式 (.ino 檔),
Offset 與 Frame 皆已寫好在程式中
• 此方式不用準備另外存放 Offset 檔與 Frame 檔的 SD 卡

瞻營全電子_六足機器人(三)