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()
write()
writeMicroseconds()
read()
readMicroseconds()
attached()
detach()
setOffset()
setVelocity()
setPosition()
setRealTimeMixing()
run()
pause()
resume()
stop()
release()
isMoving()
angleMap()

多伺服机同步动作函式

下面各函式是伺服机的批次处理函式,可控制任意指定的多颗伺服机同时进行动作。

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

ServoFrame 类别

许多市面上的机器人动作编辑软体,引用电脑动画领域里的动画帧(Key Frame)概念来表示机器人动作,将一个机器人姿势(Pose)──也就是机器人身上各颗伺服机的位置集合而成的列表,称为一个动作帧(Frame)。Servo86 函式库提供 ServoFrame 类别来支援以动作帧控制机器人动作的概念,此类别亦可载入及生成 Servo86 函式库专用的机器人动作帧档案。

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

使用者除了直接用 ServoFramesave() 函式生成动作帧档案之外,亦可采用 86ME 机器人动作编辑器来编辑及生成动作帧档案。其后,只要透过 ServoFrameload() 函式,即可将动作帧档案载入到程式中使用。

ServoFramePololu 类别

此为 ServoFrame 的衍生类别,支援读取 Pololu 公司的动作编辑器 Maestro Control Center 所产生的机器人动作档,生成可供 Servo86 函式库使用的机器人动作帧。

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

ServoFrameKondo 类别

此为 ServoFrame 的衍生类别,支援读取 KONOD 公司的动作编辑器 HTH3 所产生的机器人动作档,生成可供 Servo86 函式库使用的机器人动作帧;此外,亦提供了即时抓取 KONDO 伺服机当前位置的特殊功能。

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

ServoFrameInno 类别

此为 ServoFrame 的衍生类别,支援读取 Innovati 公司的动作编辑器所产生的机器人动作档,生成可供 Servo86 函式库使用的机器人动作帧。

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

ServoFrameVstone 类别

此为 ServoFrame 的衍生类别,支援读取 Vstone 公司的动作编辑器 RobovieMaker2 所产生的机器人动作档,生成可供 Servo86 函式库使用的机器人动作帧。

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

ServoOffset 类别

有些型号的 RC 伺服机由于生产上的差异,彼此在中心位置上可能具有些许误差。Servo86 函式库支援微调伺服机中心位置偏移量来补偿此类误差,使得各伺服机可精准对齐。此类别可用来定义、储存、载入提供 Servo86 函式库使用的伺服机中心偏移量微调值(Offset)。

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

ServoOffsetKondo 类别

ServoOffset 的衍生类别,支援读取 KONOD 动作编辑器(HTH3)产生的伺服机中心偏移量微调值档案,提供给 Servo86 函式库补偿伺服机中心位置误差。

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

ServoOffsetInno 类别

ServoOffset 的衍生类别,支援读取 Innovati 动作编辑器(innoBASIC WorksShop2)产生的伺服机中心偏移量微调值档案,提供给 Servo86 函式库补偿伺服机中心位置误差。

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

限制

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.