动作录制、组合与播放
在自定义区域加载完成3D模型之后,可通过右键菜单(菜单路径如下)进入动作录制、组合与播放功能。
菜单路径:右键菜单–>人形操作–>动作任务
1.动作录制
首先右键空白处打开“动作录制”功能,
然后根据以下指引:
1.输入文件名
2.点击“新”
3.选择新建的xml
4.勾选要录制的电机分组
5.点击“启动”,此时电机无使能,使用者可以拖拽机械臂至目标姿态
6.在“动作名称”框内输入信息(不可重复)
7.点击“录制”即可保存当前姿态
8.此时返回5,重复执行即可
2.动作组合
动作序列编辑界面包括三个模块:
文件切换:通过下拉框选择并打开xml格式的动作文件
动作列表:列举动作文件中的所有动作
动作组合:以节点的形式组建动作
2.1.动作文件操作
(1)打开和切换文件
动作文件存放在"xml"文件夹中,通过文件切换下拉框切换并打开动作文件,打开成功后将展示相应的动作列表。
在切换动作文件时需要关闭已打开的动作。
(2)新建动作
在未打开动作的状态下双击“+”号区域创建新的动作。
(3)打开现有动作
双击动作列表的动作或通过右键菜单打开相应的动作。
(4)保存动作
通过动作组合工具栏中的“保存”或“另存为”按钮保存动作,“保存”将覆盖已有动作,“另存为”会保存为一个新的动作。
(5)删除动作
通过右键菜单删除动作。
2.2.添加动作节点
动作节点通过三种方式创建:
(1)通过幕布右键节点菜单创建。可创建命令编辑节点、随机数节点、条件判断节点、等待节点。
(2)通过拖拽创建引用节点。
(3)通过复制节点。在已创建的节点上按右键打开菜单,可删除或复制该节点。
现有的节点功能介绍如下:
节点 |
功能 |
相关参数 |
参数含义 |
|---|---|---|---|
开始节点 |
动作播放的起点,会默认创建 |
- |
- |
命令编辑节点 |
输入多条MML命令 |
- |
- |
随机数节点 |
生成一个范围在[0,max]的随机整数,可被条件判断节点使用 |
max |
随机整数的最大值 |
条件判断节点 |
根据自定义条件实现分支跳转 |
if |
输入条件判断的语句,例如“position>90”、“rand==1”,现支持的参数有: |
target |
目标电机名称,将实时读取该电机的position用于条件判断 |
||
等待节点 |
等待上一个节点的MML命令执行,直至电机到达指定误差范围内 |
误差(°) |
电机位置判断误差范围,当电机实际位置与目标位置差值的绝对值小于tol时认为电机已到该位置 |
延迟(ms) |
电机位置条件满足后的额外延迟时间 |
||
超时(ms) |
等待时间大于超时时间后会结束当前节点并继续执行下一节点 |
||
引用节点 |
从动作列表拖拽创建,用于调用已有动作 |
- |
- |
2.3.组合动作
(1)连接节点
(2)取消连接
3.动作播放
同上打开“动作播放”功能,
根据以下步骤:
1.点击“刷新”更新动作文件列表
2.点击“下拉框”选中要播放的文件
3.点击要播放的动作
4.模型收到动作后就会运动起来(图示未连接电机,是模拟运动)
4.动作文件XML格式
<root>
└─ <action>
├─ <connections>
│ └─ <conn>
├─ <start>
├─ <command>
├─ <wait>
├─ <rand>
└─ <condition>
<action name="说明">
<!--repeat写在最前-->
<repeat>2</repeat>
<!--基本属性:name,id,nextId,x,y 可以不使用-->
<!--不写id和nextId属性,程序内部会自动生成id和nextId,nextId会初始化为下一行的指令-->
<command>SET MOTIONPARA: OBJECT="Joint_dev0_cha0_id1", PARATYPE="ANGLE", Angle=0, Speed=2000;</command>
<!--wait特有属性:判断误差tol(deg),等待后延迟时间delay(ms),超时时间timeOut(ms),不写属性时有默认值-->
<wait delay="0" timeOut="1e4" tol="0.1"/>
<command>SET MOTIONPARA: OBJECT="Joint_dev0_cha0_id1", PARATYPE="ANGLE", Angle=0, Speed=2000;</command>
<reference refAction="minus90deg"/>
<rand max="5"/>
<condition falseBranch="node_mcisk8xt" trueBranch="node_mcir4vdj"><![CDATA[rand === 0]]></condition>
</action>