Servo86 函式庫

86Duino IDE 從 Coding 209 開始加入此函式庫,除了完全向下相容 Arduino/86Duino 舊有的 Servo 函式庫外,並加入許多新功能函式,讓玩家更容易操作 RC 伺服機所組成的機器人(例如玩家型兩足機器人和六足機械獸)動作。利用 Servo86 函式庫,使用者可以:

  1. 指定單一伺服機角度、速度,並設定多顆伺服機同時運作。
  2. 機器人所有伺服機角度可儲存為單一動作幀(frame),可自由決定動作幀播放時間間隔,重現或紀錄機器人的動作。

Servo86 函式庫也改進了 Arduino Servo 函式庫的 PWM 抖動(jitter)現象,詳見此篇文章說明。

配合 Servo86 函式庫,我們製作了一個機器人動作編輯器:86ME(86Duino Motion Editor),您可以用它編輯機器人動作幀並自動生成調用 Servo86 函式庫的草稿碼(sketch)。

Servo 類別

此類別提供 Arduino/86Duino 舊有的 Servo 函式庫之 Servo 類別所有功能,並增加更進階的函式可控制伺服機動作流程及轉動速度。

Servo
attach()
attached()
write()
writeMicroseconds()
read()
readMicroseconds()
setOffset()
setVelocity()
setPosition()
setRealTimeMixing()
run()
pause()
resume()
stop()
release()
isMoving()
angleMap()
detach()

多伺服機同步動作函式

下面各函式是伺服機的批次處理函式,可控制任意指定的多顆伺服機同時進行動作。

servoMultiRun()
servoMultiPause()
servoMultiResume()
servoMultiStop()
isServoMultiMoving()

ServoFrame 類別

許多市面上的機器人動作編輯軟體引用電腦動畫領域裡的動畫幀(Key Frame)概念來表示機器人動作,將一個機器人姿勢(Pose)──也就是機器人身上各顆伺服機的位置集合而成的列表,稱為一個動作幀(Frame)。Servo86 函式庫提供 ServoFrame 類別來支援以動作幀控制機器人動作的概念,此類別亦可載入及生成 Servo86 函式庫專用的機器人動作幀檔案。

ServoFrame
load()
save()
positions[]
setPositions()
playPositions()

使用者除了直接用 ServoFramesave() 函式生成動作幀檔案之外,亦可採用 86ME 機器人動作編輯器來編輯及生成動作幀檔案。其後,只要透過 ServoFrameload() 函式,即可將動作幀檔案載入到程式中使用。

ServoFramePololu 類別

此為 ServoFrame 的衍生類別,支援讀取 Pololu 公司的動作編輯器 Maestro Control Center 所產生的機器人動作檔,生成可供 Servo86 函式庫使用的機器人動作幀。

ServoFramePololu
load()
save()
positions[]
setPositions()
playPositions()

ServoFrameKondo 類別

此為 ServoFrame 的衍生類別,支援讀取 KONOD 公司的動作編輯器 HeartToHeart3 所產生的機器人動作檔,生成可供 Servo86 函式庫使用的機器人動作幀;此外,亦提供了即時抓取 KONDO 伺服機當前位置的特殊功能。

ServoFrameKondo
load()
save()
positions[]
setPositions()
playPositions()
capture()

ServoFrameInno 類別

此為 ServoFrame 的衍生類別,支援讀取 Innovati 公司的動作編輯器所產生的機器人動作檔,生成可供 Servo86 函式庫使用的機器人動作幀。

ServoFrameInno
load()
save()
positions[]
setPositions()
playPositions()

ServoFrameVstone 類別

此為 ServoFrame 的衍生類別,支援讀取 Vstone 公司的動作編輯器 RobovieMaker2 所產生的機器人動作檔,生成可供 Servo86 函式庫使用的機器人動作幀。(此類別由 86Duino Coding 300 開始支援。)

ServoFrameVstone
load()
save()
positions[]
setPositions()
playPositions()

多動作幀運動平滑化函式

由 86Duino Coding 300 開始,Servo86 函式庫支援了三次雲曲線(Cubic Spline)的運動路徑插補方法,可使機器人在連續動作幀之間的動作撥放變得更平順,並降低關節機構的振動。下列函式可開啟此連續動作幀的平滑插補功能:

servoBeginSplineMotion()
servoEndSplineMotion()

ServoOffset 類別

有些型號的 RC 伺服機由於生產上的差異,彼此在中心位置上可能具有些許誤差。Servo86 函式庫支援微調伺服機中心位置偏移量來補償此類誤差,使得各伺服機可精準對齊。此類別可用來定義、儲存、載入提供 Servo86 函式庫使用的伺服機中心偏移量微調值(Offset)。

ServoOffset
load()
save()
offsets[]
setOffsets()

ServoOffsetKondo 類別

ServoOffset 的衍生類別,支援從 KONOD 公司的動作編輯器 HeartToHeart3 所產生的機器人動作檔裡讀取偏移量微調值,提供給 Servo86 函式庫使用,以補償伺服機中心位置的誤差。

ServoOffsetKondo
load()
save()
offsets[]
setOffsets()

ServoOffsetInno 類別

ServoOffset 的衍生類別,支援讀取 Innovati 公司的動作編輯器所產生的偏移量微調值檔案,提供給 Servo86 函式庫使用,以補償伺服機中心位置的誤差。

ServoOffsetInno
load()
save()
offsets[]
setOffsets()

ServoOffsetVstone 類別

ServoOffset 的衍生類別,支援從 Vstone 公司的動作編輯器 RobovieMaker2 產生的動作設定檔裡讀取偏移量微調值,提供給 Servo86 函式庫使用,以補償伺服機中心位置的誤差。(此類別由 86Duino Coding 300 開始支援。)

ServoOffsetVstone
load()
save()
offsets[]
setOffsets()

使用限制

Servo86 函式庫在運作時會使用 86Duino 內部的計時器(Timer),TimerOne 函式庫和 Servo 函式庫也會使用該計時器,因此為了避免函式庫彼此發生衝突,這三個函式庫一次只能使用一個。

86ME 動作編輯器

86ME(86Duino Motion Editor)是一個開源(Open Source)的機器人動作編輯器,可以像編輯動畫一樣來編輯機器人動作,支援生成可供 ServoFrame 載入的機器人動作幀檔案,並能自動產生可直接燒錄到 86Duino 上的機器人動作程式,詳情請見 86ME 使用說明


展示影片


函式庫參考主頁面

The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.