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()
- 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()
使用者除了直接用 ServoFrame
的 save()
函式生成动作帧档案之外,亦可采用 86ME 机器人动作编辑器来编辑及生成动作帧档案。其后,只要透过 ServoFrame
的 load()
函式,即可将动作帧档案载入到程式中使用。
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.