动作录制、组合与播放

在自定义区域加载完成3D模型之后,可通过右键菜单(菜单路径如下)进入动作录制、组合与播放功能。

菜单路径:右键菜单–>人形操作–>动作任务

1.动作录制

首先右键空白处打开“动作录制”功能,
然后根据以下指引:
1.输入文件名
2.点击“新”
3.选择新建的xml
4.勾选要录制的电机分组
5.点击“启动”,此时电机无使能,使用者可以拖拽机械臂至目标姿态
6.在“动作名称”框内输入信息(不可重复)
7.点击“录制”即可保存当前姿态
8.此时返回5,重复执行即可
../../_images/ActionRecord.png ../../_images/ActionRecordStep.png

2.动作组合

动作序列编辑界面包括三个模块:

  • 文件切换:通过下拉框选择并打开xml格式的动作文件

  • 动作列表:列举动作文件中的所有动作

  • 动作组合:以节点的形式组建动作

../../_images/func_section.png

2.1.动作文件操作

(1)打开和切换文件

  • 动作文件存放在"xml"文件夹中,通过文件切换下拉框切换并打开动作文件,打开成功后将展示相应的动作列表。

../../_images/file_combo.png
  • 在切换动作文件时需要关闭已打开的动作。

../../_images/enable_file_combo2.png

(2)新建动作

  • 在未打开动作的状态下双击“+”号区域创建新的动作。

../../_images/add_action.png

(3)打开现有动作

  • 双击动作列表的动作或通过右键菜单打开相应的动作。

../../_images/open_action.png

(4)保存动作

通过动作组合工具栏中的“保存”或“另存为”按钮保存动作,“保存”将覆盖已有动作,“另存为”会保存为一个新的动作。

../../_images/save_action.png ../../_images/save_action_as.png

(5)删除动作

  • 通过右键菜单删除动作。

../../_images/del_action.png

2.2.添加动作节点

  • 动作节点通过三种方式创建:

(1)通过幕布右键节点菜单创建。可创建命令编辑节点、随机数节点、条件判断节点、等待节点。

../../_images/node_menu.png

(2)通过拖拽创建引用节点。

../../_images/createRefNode1.png

(3)通过复制节点。在已创建的节点上按右键打开菜单,可删除或复制该节点。

../../_images/node_inner_menu.png
  • 现有的节点功能介绍如下:

节点

功能

相关参数

参数含义

开始节点

动作播放的起点,会默认创建

-

-

命令编辑节点

输入多条MML命令

-

-

随机数节点

生成一个范围在[0,max]的随机整数,可被条件判断节点使用

max

随机整数的最大值

条件判断节点

根据自定义条件实现分支跳转

if

输入条件判断的语句,例如“position>90”、“rand==1”,现支持的参数有:
position(电机位置,单位为°)
rand(随机数,配合随机数节点使用)

target

目标电机名称,将实时读取该电机的position用于条件判断

等待节点

等待上一个节点的MML命令执行,直至电机到达指定误差范围内

误差(°)

电机位置判断误差范围,当电机实际位置与目标位置差值的绝对值小于tol时认为电机已到该位置

延迟(ms)

电机位置条件满足后的额外延迟时间

超时(ms)

等待时间大于超时时间后会结束当前节点并继续执行下一节点

引用节点

从动作列表拖拽创建,用于调用已有动作

-

-

2.3.组合动作

(1)连接节点

(2)取消连接

3.动作播放

同上打开“动作播放”功能,
根据以下步骤:
1.点击“刷新”更新动作文件列表
2.点击“下拉框”选中要播放的文件
3.点击要播放的动作
4.模型收到动作后就会运动起来(图示未连接电机,是模拟运动)
../../_images/ActionPlay.png

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>