86Duino 动作编辑器
86Duino Motion Editor (86ME) 支援86Duino 开发板来编辑机器人动作,让编辑机器人动作的流程更加快速,并且能够自动产生86Duino 程式让机器人操作编辑好动作。
86ME概念影片:
安裝教學
目前 86ME 支援 Windows XP/Vista/7/8/10,环境内必须安装 MicroSoft .NET framework 4.5。下载86ME并解压缩后会得到资料夹 86ME ,里头的档案如下图所示,包含 86ME 执行档与所需的函式库和相关说明,在支援的环境下直接执行 86ME.exe 即可开始操作 86ME 。
事前準備
- 建立 86Duino 与 86ME 的桥梁:86ME 会透过 Firmata 函式库与 86Duino 做指令的传输,因此在使用 86ME 之前要将 86Duino Coding 210 的范例草稿(档案->范例->Servo86->MotionEditor)烧录到 86Duino 中,建立好双方沟通的桥梁之后便可以正式开始操作 86ME。
- 连线方式与说明:目前 86ME 支援电脑以 COM port 与 86Duino 连接并发送动作讯号,86ME 一开始会让使用者选择 86Duino 与电脑的接口,并且分为自动、离线、选定三种模式来初始化连线。在执行 86ME.exe 之前,必须先了解这些模式。图中的 –auto– 选项会去开启最后加入的 COM port, COM4 则是 86ME 侦测到目前电脑上存在的 COM port,而 –offline– 选项则表示离线模式,将不会与 86Duino 做沟通。
因此,离线模式只支援档案的编辑与 86Duino 程式产生,不支援即时的马达控制。若要直接的控制马达来编辑动作,在使用程式之前得先将 86Duino 上的 USB device 与电脑的 USB 连接并选择 86Duino 所连上的 COM port(可以使用自动或是选择已知的COM port)。如果想确认 86Duino 连上哪一个 port,可以尝试在装置管理员中找到 86Duino 与其所连接的 COM port,如下图范例,可以得知 86Duino 与电脑的 COM4 连接。若在没有连接 86Duino 的情况下选择自动模式,程式将会在执行过程中切回离线模式。
一般来说,离线模式较适合对机器人动作已经非常熟悉的使用者,让这些使用者方便的去编辑现有的档案做调整。而自动模式可以让使用者方便的开始使用 86ME ,但若是电脑接上许多 86Duino 或许多不同的 COM port,为了避免混淆则建议使用选定模式。接着,设定好 COM port 接口后即可按下 Start 按钮来进入 86ME 主视窗或是按 Exit 按钮可以离开 86ME。
功能說明
在此,我们会先将程式介面分为几个区块来做说明。
- 这个部分有三个下拉式选单 File、Options、Help,其展开后的选项如下
File 选单的功能包含新增专案、读取专案、储存专案和结束程式,眼尖的读者可能会发现许多的按钮一开始呈现灰色不可点击的状态,若要编辑动作、测试动作就需要先以 File->New Project 来建立专案或是以 File->Open Project 来读取之前储存的专案。而 File->Save Project 可以储存目前所编辑的专案,File->Exit 则可以结束程式。 那么如何新增专案呢?点选 File->New Project 会弹出一个 Robot Configuration 视窗,在这个视窗中可以设定四项机器人相关的设定。
(1) 86Duino Board:用来选择机器人所使用的 86Duino 型号,目前有 86Duino One/Zero/EduCake 供使用者选择,选用不同型号的 86Duino 会开起数量不同的 SetServo 让使用者设定,例如 86Duino One 有45根可以控制马达的接脚,则 SetServo 0~44 都会出现,而 86Duino Zero 则只会出现 SetServo 0~13 和 42~44。
(2) IMU Settings:设定机器人所使用的 Inertial Measurement Unit (IMU) ,目前支援的 IMU 型号有 86Duino One 上内建的 IMU 与 RM-G146 两种。选择 IMU 型号并处在连线模式时,可透过 "Initialize IMU" 这个按钮对连接在 86Duino 上的 IMU 做初始化,并且可以透过 "Auto Detect Orientation" 来侦测目前 IMU 的 Base Orientation。这些设定完成之后才能正确使用 IMU 补偿功能,以利于机器人的平衡。
(3) SetServo :用来设定连接在 86Duino 上的马达,在这边提供了马达型号、偏移量(offset)、起始位置(homeframe)、马达所支援的最大(Max)、最小值(min)来让使用者设定,目前所支援的马达型号如下:
选择马达后,就可以藉由下图中的卷轴操控选项来调整偏移量、起始位置,并且勾选 Sync 控制项后可以将偏移量、起始位置的角度同步在马达上,可以即时调整。而马达的可接受数值范围在选择马达之后会自动变更,若要手动修改必须先勾选右上角的 min Max 控制项。而有设定 IMU 的话,即可设定 IMU Src 来开启 IMU 补偿功能并选择补偿来源,并透过 Gain 栏位来设定补偿系数,想要增加第二个补偿来源可以按下 Src 1 图示切换到 Src 2 来设定第二组补偿来源。
(4) Load Robot Picture:为了方便对应马达的位置到机器人的各个部位,使用者可以选择一张图片做为机器人的代表图,可在编辑 Frame 时选择伺服机与图片的对应位置,方便使用者辨认所伺服机与实际机器人的对应关系。 (5) Load Mirror Config: 此功能可读取使用者定义的镜像组态,用来方便编辑有对称关系之机器人,如人形机器人,当编辑好左半边的动作时,可利用此功能复制左半身的动作到右半身去,加速动作编辑的过程。而镜像组态存在副档名为 cfg 之档案,内容表明伺服机一对一之对应关系,每一行写上一组对应,中间以 "-" 号分隔,例如 1-2,表示 Pin 脚 1 和 2 上的伺服机是对称边,1 表左,2 表右,以此类推。
- Options 选单包含了 Robot Configuration 选项,用来编辑目前的机器人相关设定,所包含的内容如同 File->New Project。
- Preference 选单是提供使用者选择操作介面的语言,目前支援英语、繁体中文、简体中文与日本语。
- Help 选单包含了 Tutorials 和 About 选项,点击 Tutorials 会跳转到 86Duino 网站上关于 86ME 的说明文件,而 About 则会显示出 86ME 相关的讯息,如作者资讯、86Duino 官方粉丝页等等。
- Edit Settings 區塊有以下功能
(1) Sync 功能可以让使用者决定是否同步目前所选到的 Frame 即时反应在机器人身上。
(2) 这边的拉霸可以决定 sync 时马达转动的速度,共区分成五级,右边为最快,左边最慢。
(3) 释放马达,让马达不再出力。
(4) Capture,用来读取目前马达的角度,目前所支援的马达为 Kondo、Hitec、Futaba 这三个系列,使用时请特别小心,因为 Capture 功能会先将所有马达释放掉,如果没有支撑好机器人可能会让机器人跌倒。
- Action 區塊,可以用于
(1) 设定移动到此动作的时间,单位为毫秒。
(2) 当选择的 Action 为 Frame 时,Action 区块会出现 储存/读取 86Duino Frame File 的两个按钮。储存功能可以将目前所选 Frame 的伺服机角度存在一个文字档中,而读取功能可以将已经存好的 Frame File 数值读取至当前的 Frame。
- Hint 区块,在这个区块会提供使用者一些操作提示,如要怎么新增动作列表、执行动作时有哪些注意事项等等,若已经对 86ME 非常熟悉,可以按自己的想法去操作程式,小提示基本上是针对刚开始使用 86ME 的使用者来提供下一步。
Motion区块,用来编辑和测试机器人的动作。每个动作会以 "Motion Name" 区隔,例如使用者可以新增如走、挥拳、蹲下等等的动作,按下 "+" 按钮会跳出一个视窗来让使用者决定 "Motion Name",如下图:
- 按下 "OK" 后即可新增动作。而当要新增别的动作时再按下 "+" 并重复相同流程即可,若要编辑已经存在的其他动作则可以利用 "Motion Name" 栏位的卷轴选取。而最右方的齿轮型按钮提供了一些管理 Motion 的功能,包含复制、更名、删除、汇入与汇出。
Action List:建立 Motion 之后就可以开始编辑动作列表(Action List),例如某个的动作如果需要四个 Frame 来呈现,就可以在 "Action List" 中按滑鼠右键新增动作。
关于 Action List 的操作主要有
(1) 新增 Action,总共有九个类型的 Action
(2) 对所选的 Frame 执行镜像操作(如上右图,共五种操作),包含镜像复制(左至右及右至左,其左右关系定义在镜像档中)、以反向数值(相对于伺服机 home 值)镜像复制、及左右交换。
(3) 删除所选的 Action。
(4) 可以复制 Frame 或 HomeFrame 在下一格 而 actions 的上移下移可以利用下方的两个按钮来完成。
Action List 还有一个方便的功能,当 Frame 的后头紧接着 Frame 的状况下会开启一个功能可以插入一个 Frame ,各个马达的角度为前后两个 Frame 相对应马达相加后除二的结果,这个功能可以方便编辑移动距离很大的两个 Frame 之间的动作。而动作参数的调整会在区块6与使用范例说明。
将动作列编辑好之后,若是在与 86Duino 连线的状况,按下播放按钮就可以测试 Action List 中从第一个动作到最后一个动作了,使用者可以经由这个功能测试动作。
Trigger:
至于最下面的两个按钮,则是将目前的专案输出成可以烧进 86Duino 的 ino 程式档,Generate 86Duino Sketch (with Frame Files) 会产生一个 ino 档和若干个动作设定档,而 Generate 86Duino Sketch (All in One) 则会将所有设定都写进一份 ino 程式。而档案是依照目前所编辑的所有动作加上每个动作各自的 Trigger、Property 所产生,Trigger 的设定是选定一个 Motion 后转到 Trigger 分页即可设定,目前所支援的 Trigger 方式有五种,分别为 auto、keyboard、bluetooth、ps2 controller 和 Accelerometer 。
- Auto 底下分为 Always On、Always Off 和 Start Up,Always On 表示此动作要永远展现,Always Off 则表示永远不展现此动作,Start Up 则是会在 86Duino 启动时展现一次。
- Keyboard 可以设定 Key 与 Type,Key 目前提供 A~Z 与上下左右、空白、ESC 可以选择,Type 则提供 First Press、Pressed 与 Release,在 Key 与对应的情况下就会触发 Motion 。例如将机器人的行走设定为 Key A、Pressed 状态下,机器人回到站立姿势设定为 Key A、Release ,当我们按下 A 键机器人即可一直走,放开 A 键则回到站姿 ,更完善的话还可以加入 Key A、First Press 为跨半部之类的起始步伐。
- Bluetooth 可以选择一个单一字元的 Key 输入,以及 Mode 与蓝芽模组所在的 Baud Rate 和 Serial Port。例如我们将蓝芽模组装在 86Duino 的 Serial1,设定向前走的 Motion 之 Key 为 B,产生程式并烧录后,就可以用手机 APP 软体(目前只支援传送单一字元的APP)传送讯号控制机器人向前走了。而 Mode 选项分为 OneShot 与 Continuous,OneShot 模式会让讯号只触发动作一次,可以用在机器人挥拳,踢腿之类的动作,而 Continuous 则会不断去触发动作,可以用在前进、后退等动作。
- PS2 Controller 可以选择 PS2 摇杆上的按钮作为 Key ,以及与键盘一样可以设定触发此按钮的 Type 。除此之外,如果像用 PS2 摇杆控制机器人,还必须设定 PS2 与 86Duino 连接的四个脚位,分别为 DAT(data)、CMD(command)、ATT(attention)、CLK(clock) 这四根脚所对应到的 86Duino pin 脚。
- Accelerometer 可以選擇加速度計 X、Y、Z 三軸的讀數來當作出發條件,只要設定好三個軸的範圍,和讀數持續在這個範圍的時間即可。而 "Auto Detect" 按鈕是當 IMU 正確在 Robot Configuration 被初始化後,可以自動偵測目前加速度計的讀數,並自動選取範圍填入空格中。
- WiFi Camera (WiFi602) 是一个视讯串流模组,脚位有 5V、GND、TX 和 RX,通电后会建立一个 WiFi AP,让手机连上此 WiFi 并开启 APP 就可以取得串流了。除此之外还可经由 Serial Port 传送 APP 的按钮状态,因此要选择一个 Serial Port,而目前所支援的 Key 如图所示有 Up、Down、Left、Right、A 和 B,在 APP 中的位置如下图所示。
- Analog 可以藉由类比讯号来触发动作,如下图所示,Pin 用来设定类比来源脚位,中间的 Combo Box 用来选取判断条件,包括 =、≠、≧、≦、>、<,而 Value 用来选择数值,当条件成立时即触发动作。
- ESP8266 触发目前支援此 APP,首先要将 ESP8266 与 86Duino 接上,并将之设定为 AP 基地台模式,接着在 86ME 里设定对应的 Baud Rate 、所连接的 Serial Port 与 ESP8266 的 CH_PD 脚位是接到 86Duino 的哪个 PIN,接着再设定 Key 来与 APP 中的图片对应即大功告成,APP 中的按钮如下图所示,其 Key 值为图片编号前加上 "$PM",例如向左按钮之 Key 为 "$PM00"。
最后,要编译产生出来的程式前,需利用 Coding IDE 中汇入程式库功能汇入 ESP8266 涵式库。成功编译后即完成 ESP8266、86Duino 与 APP 之串接。
Property:
Property 的设定目前分为:
(1) Blocking 和 Non-Blocking:Blocking 的 Motion 在产生的程式中不会被其他的 Motion 中断,而 Non-Blocking 的 Motion 则会因为其他 Motion 的触发而中断。
(2) Motion Layer:设定动作所在的层级,这个功能是为了能让不同层级的动作能够同时被触发,举例来说,当人型机器人在移动的同时,依然可以触发挥拳的动作。然而若两个层级的动作会使用到相同的伺服机,就会牵涉优先权的问题,此处是层级 1 的动作会较层级 0 的优先。所以当某个动作设定为 Motion Layer 1 之后,使用者要去 Frame 属性中勾选要使用到的伺服机,如下图所示,这样一来当同时触发层级 0 与层级 1 的动作时,被勾选的伺服机 CH 2 和 CH 3 就会优先去执行层级 1 所编辑之动作。
(3) Trajectory:设定动作轨迹规划之方式,目前支援 Linear、Constrained Cubic、Natural Cubic 和 Catmull-Rom Spline 四种方式,三种 Cubic 的规划方式比起 Linear 能够减少运动时产生的震动,又以 Natural Cubic 效果最为显著,只不过 Natural Cubic 的规划方式有可能会有 overshooting 的产生,即动作的曲线可能会变得幅度过大,采用 Catmull-Rom Spline 和 Constrained Cubic 的规划方式则可避免此问题的产生,其中以 Constrained Cubic 最能抑制 overshooting,但减少震动的效果就没有 Natural Cubic 那样惊艳。而三种 Cubic 的规划方式目前仅支援全为 Frame 的动作,即不能含有除了 Frame 以外的 Action,若有其他 Action 会自动退化回 Linear,使用上请多加留意。
(4) IMU Compensation Range:设定 IMU 补偿功能的有效角度 (0~180度,0表示关闭补偿功能),只有在 (-设定值 ~ +设定值) 角度内,IMU 才会产生补偿值,这个功能可以设定补偿的有效范围,若是有些动作不需要补偿功能,也可以设定为 0 来关闭补偿。
最终产生出来的程式有两种类型,其烧录方式也略有不同。
Generate 86Duino Sketch (with Frame Files) 所生出的档案除了要将 ino 程式烧录进 86Duino 外,还需要将产生出来的设定档资料夹放入 86Duino SD 卡中(製作 86Duino SD 卡)的根目录底下才可正确执行。而 Generate 86Duino Sketch (All in One) 只会产生出一个 ino 程式,只要将产生出来的程式烧进 86Duino 即可。
- 这个区块是用来修改 Action List 里头每个不同动作的详细内容,例如每个 Frame 中马达的角度。而要详细的演示如何操作,在下面会以一个较完整的使用范例来说明。
使用范例
此使用范例希望能让使用者了解 86ME 的操作流程,会以 86ME 操作一个三颗伺服马达所组成的六足机器人来当范例。此六足以一片 86Duino Zero 和三颗 DMP_RS0263 为主体,分别将左、中、右三只脚对应到 86Duino 的第 11、43、44脚位。
步驟一:
- 在 86ME 资料夹中对 86ME.exe 双击左键执行。
- 选择 auto 来自动连接 COM port 并按下 Start 按钮。
步驟二:
- 点击 New Project 来新增一个专案,接着会弹出 Robot Configuration 视窗。
- 设定 86Duino Board 为 86Duino Zero,这为此范例的 86Duino 型号,此范例无 IMU 因此设定为 None。
- 设定 11、43、44 接脚为马达 DMP_RS0263 伺服马达,此处的 offset、homeframe、Max&min 可以依照使用者的需求去设定,此次的范例采用预设值。 IMU 补偿方面设定为不补偿。
- 按下 OK 按钮完成设定。
步驟三:
- 建立好专案后可以发现 "+" 按钮亮起来,我们可以利用此按钮来新增动作,按下 "+" 按钮
- 弹出 Create a New Motion 视窗,在 Motion Name 栏位输入要新增的动作名称,此处的举例为 right (右转)
- 按下 "OK" 完成动作的建立
步驟四:
在 Action List 下方的空白处点滑鼠右键 -> add action at the first field 来选择一种 Action 新增动作到动作列中。 共有九种 Action,其功能说明如下,
Frame
选择 Frame 之后可以调整当初所设定过的三个马达,并且有几个功能会开启让使用者调整。
- 勾选 Sync 会让机器人立即反应目前所设定的值,在勾选着 Sync 的状态下去移动下面的卷轴或改变数字,都可以让机器人即时的反应。而 Sync 旁的拉霸可以调整 Sync 时马达转动的速度。
- Free Motors 按钮可以将所有出力状态的马达释放掉,不再出力。
- Capture,用来读取目前马达的角度,目前所支援的马达为 Kondo、Hitec、Futaba 这三个系列,使用时请特别小心,因为 Capture 功能会先将所有马达释放掉,如果没有支撑好机器人可能会让机器人跌倒。
- Play Time 为移动到目前所设定的马达角度要花上多少毫秒,直接输入数字即可设定,如果设定为 0 的话动作是会被跳过的,所以请记得设定 Play Time。
- 设定要传给马达的 PWM 讯号数值,可以拉卷轴或是输入数值来设定。最右方有个圆形的按钮,用来个别决定马达要不要被 Sync,预设的状况下所有马达在被 Sync 时都会依照所给的目标 PWM 数值去转动,显示为绿色的 "ON",当点选这个按钮时图片会转变为红色的 "OFF",并会让马达停止出力,此功能可以让目前不需要加入编辑的马达休息,以避免长时间的出力导致烧坏。
Delay
可以让使用者设定 Delay,而这边的延迟是单纯的停滞,不会让机器人有任何动作的产生。
Flag & Goto
- Goto 和 Flag 是让使用者可以以回圈的方式测试动作,而不用写一大串的 Frame 出来。 Flag 只需要设定好名字,即可查看 Action List 里头的 Flag 是否加上刚刚所设定的名字了,若是有则设定成功。
- 而 Goto 除了设定名称之外,还必须设定回圈次数与是否触发与 Goto 次数或可以选择无穷跳转。 Goto 详细的行为是在播放状态下,执行到 Goto 时会去检查是否要执行此 Goto,若要执行,则去寻找 Goto 所设定的目标 Flag 名称,找到后再一次从 Flag 那边开始执行动作。
- 写好目标 Flag 的名称,此处写上跟刚刚所建立之 Flag 相同的 test。
- 设定是否执行。
- 设定是否无穷执行 Goto。
- 设定执行次数。
HomeFrame
选择 HomeFrame 会加入一个值为初始位置且不可更改的 Frame,要更改 HomeFrame 的值只能在 Options -> Robot Configuration 中修改。这一选择是方便使用者归 Home ,并且能辨认出哪里会执行归 Home 的动作。
GotoMotion
GotoMotion 能方便的使机器人操作其他 Motion 的内容,只需要简单的设定 Target Motion 与 Method。而 GotoMotion 只会反应在产生出来的程式之中,目前不支援使用 86ME 的播放来测试。
- Target Motion:要执行的 Motion,在选择 Target Motion 时需要特别注意 86ME 目前不支援递回呼叫,例如呼叫自己或是互相呼叫对方,这些状况可能会导致不可预期的动作出现,还请大家特别注意!
- Method:分为 Call target motion、Jump to the target motion,Call target motion 会在执行完 target motion 后继续执行目前 Motion 剩余的 Action;Jump to the target motion 则不会回到目前的 Motion。
If
If 提供了动作编辑的弹性,目前提供五十个变数以及若干个实用的系统变数来供使用者运用,只需要设定好的判断条件成立,就会 Goto 到指定的 Flag 去。
- 设定左子式的变数,"V0~V49" 为可让使用者自行运用的变数,要注意的是这些变数是各个动作所共用的。其他系统变数有 "NowTime" 表示 86Duino 目前的时间(ms)、"Random" 表示随机数、"Analog0~Analog5" 为 86Duino 上 A0~A5 的读数、"AccX/Y/Z" 为加速度计 X Y Z 三个轴的读数,"GyroRoll" 和 "GyroPitch" 则为目前 IMU 相较于 Base Orientation 的倾角,Roll 对应到 X 轴,Pitch 对应至 Y 轴,"VKeyUp"、"VKeyDown" 等等为虚拟按钮,当按钮没被压下时数值为 0,被压下时非零,虚拟键盘可与 PS2 摇杆对应。
- 设定左右两个变数的判断子,支援等于、不等于、大于等于、小于等于、大于、小于。
- 设定右子式,与左子式相同,但不可选择虚拟按钮。
- 若右子式为常数,可以选择此方式并输入数字。
- 设定 If 成立时要跳转到的目标。
Compute
Compute 可以用来做简易的计算,并将数值存入指定的变数中(V0~V49)。
- 设定左子式的变数,可选择 "V0~V49"。
- 选择要使用公式,第一条公式可以对两个变数做运算,包含加、减、乘、除、次方、取余数、AND 运算和 OR 运算。第二条公式提供对某个变数做运算,包含 NOT、开根号、exp、对数、绝对值、负号、sin、cos。第三条公式为单纯的 assignment。第四条公式可以指定常数。
- 设定好选用的式子后就完成了。
Release
在执行到 Release 时会使所有伺服机停止出力,而此 Action 不须设定,被执行到后会立即动作,可以在机器人将遭遇危险(例如跌倒)时使用,避免马达瞬间承受过大的力量而导致损坏。
步驟五:
编辑好自己所希望的动作后,就可以利用播放、暂停、停止按钮进行测试,一般的执行顺序如左下图 ,若是在执行 Goto 的状况则如右下图。
接着,使用者们可以选择继续编辑不同专案 (回到步骤二),或是不同的动作 (回到步骤三)。或是选择存档 ( File->Save Project ),会产生一个 .rbm 档案,下一次若用 ( File->Load Project )则可以继续使用上次储存的专案。
加入图片:
这个功能的目的是为了让使用者方便对应马达,不用每次读取专案都还要回想马达的对应到机器人的哪个位置。在新增专案( File-> New Project ) 或是修改专案组态 ( Options->Robot Configuration ) 时都可以加入机器人图片,利用 Load Robot Picture 按钮可以读取 PNG、JPG、GIF 档案来当作机器人图片。一旦读取之后便不可再移除,而设定好之后, Action List 中的 Frame 型别动作就可以让马达自由移动,来达到马达与机器人部位对应的效果。
若是读取图片后存档,所储存的 .rbm 档案会记住图片在电脑中的路径,因此若是图片位置有变更或移除,下一次读取专案时可能会找不到,还请使用者们多多注意!
原始码
86ME 为开源的动作编辑器,原始码发布在GitHub上,欢迎有兴趣的朋友下载或分享。此专案建置的环境为 Windows 7/10 + Visual Studio 2013 社群版。