前言
~
正文
添加SpecialAction
- 在 \Src\Representations\MotionControl\SpecialActionRequest.h 中名为SpecialActionID的ENUM对象中添加一个新的action
- 在 \Config\mof 目录下添加一个空文件,命名为 ${actionName}.mof
- 在 \Config\mof 下的extern.mof添加一个action入口
- 在 \Config\Scenaios\Default下的specialActions.cfg中声明,格式如下:
mof 语法
1.每个mof文件必须声明此action的名字,mof文件的第一行添加motion_id = {actionName}
2.文件中的空行随意,以 英文双引号" 开头表示注释掉此行
3.在mof文件中必须有一个label start, 通常以 label+{name} 表示标签,作为mof文件之间的跳转节点
4.节点转换: transition,通常为 transition {mof1} {mof2} {label}。有一个可表示任意mof的allMotions。例如 transition standup standup start, 表示程序到此处时,若正在执行名为standup的mof时,跳转到standup的mof中名为start的label。而transiton allMotions standup start, 表示程序到此处时,直接跳转到standup的start。
5.关节角度设置,一行有28个值,分别用空格隔开,前26个为不同的关节的角度(单位为度),接着的一个表示是否采用插值(用0表示不使用插值,1表示采用插值),最后一个表示此动作经历的时间(ms)。其中前26个关节角度除了数字之外,还有两种方式 -和*(其中 - 表示‘关闭此关节’,* 表示关节动作和刚执行的一步的角度相同)。当倒数第二位为0(不采用插值)时,关节运动瞬间到预设值然后延时直到此步动作执行完(超过最后一位设置的ms)。若倒数第二位为1(采用插值),关节运动会较为平滑,隔一段时间运动一个角度,在动作结束时刚好到达预设值。
6.刚度设置, 一行以stiffness开头,后面接了27个值,前26个表示关节,最后一个表示插值和时间(为0时表示不插值,为其他数字时表示采用插值的ms时间,相当于将上面的两个值合并为一个)。前面的26个数的取值范围为0~100,若为*时,表示刚度为默认值。数值越大,关节越"硬"。当刚度设置为采用插值且同一动作需要不同的刚度时,若第一个刚度时间结束且刚度还没有到达预设值时,则会跳转到下一个刚度描述语句,以前面的语句结束时的刚度为初始值,重新插值,而不是等前面一个执行完。