Servo86 函式庫
86Duino IDE 從 Coding 209 開始加入此函式庫,除了完全向下相容 Arduino/86Duino 舊有的 Servo 函式庫外,並加入許多新功能函式,讓玩家更容易操作 RC 伺服機所組成的機器人(例如玩家型兩足機器人和六足機械獸)動作。利用 Servo86 函式庫,使用者可以:
- 指定單一伺服機角度、速度,並設定多顆伺服機同時運作。
- 機器人所有伺服機角度可儲存為單一動作幀(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()
使用者除了直接用 ServoFrame
的 save()
函式生成動作幀檔案之外,亦可採用 86ME 機器人動作編輯器來編輯及生成動作幀檔案。其後,只要透過 ServoFrame
的 load()
函式,即可將動作幀檔案載入到程式中使用。
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.