机器人动作编辑器说明

本动作编辑器适用于非常常见的17舵机人型机器人,也可取其中一部分用于更简单的机器人的动作编辑。

于2011年完成,当时为了给学校做机器人,做好之后就一直自己私藏着,如今将其公开,如果有做同类型机器人或者更简单的机器人时可以选择使用。

总体编辑过程大概是这样:

1、在使用动作编辑器编辑的过程中会同时向机器人发送指令,可以实时观察机器人的状态并调整动作,将一个个造型保存,最终导出一个 .source动作源文件。此步详见“动作编辑器和.source文件”。

2、把动作源文件(.source文件)用动作编译器打开,编译出动作文件 .action。详见“动作编译器和.action文件”

3、.action文件放到机器人身上执行(实际使用是把文件放在SD卡里,然后插到机器人上。你可以准备多张SD卡放不同的动作,也可以在一张SD卡里放多个动作,只要机器人能将动作文件读取出来即可)。

以上是我采用的控制方法,也可以不用我的控制方案,我会将动作编辑器的协议给出,可以从中针对性地取用一部分功能,或者按照自己的想法进一步开发。


一、动作编辑器和.source文件

1、界面说明


动作编辑器主要由左边的动作编辑滚动条和右边的一编好动作列表框组成,在左边编辑动作,在右边查看和修改编好的动作。

 

下面分别介绍一下每个命令按钮的功能:


这几个可以设置串口相关的参数,在编辑器修改动作进行编辑的过程中会讲当前动作状态实时发送出去,用的就是串口。



动作编辑滚动条,每个滚动条的值的变化范围是50~250(因为一般舵机脉宽变化范围是500us~2500us,将其200等分),每次修改滚动条的值都会把当前修改的值发送出去,用于让机器人实时地摆出造型,具体发送协议将在后面介绍。



立正:把所有17个舵机的脉宽值回到初始状态(一般是立正状态),并按规定协议发送出去,刷新机器人全身舵机。

同步机器人:不改变任何舵机的脉宽值,将现在17个滚动条所代表的的脉宽按照规定协议发送出去。

保存当前造型为立正姿势:每个机器人由于舵机安装初始状态不同,可能最佳立正姿势有所不同。单击此按钮会将当前滚动条状态设为默认状态,以方便编辑。



插入造型:在右边动作列表框选中动作的上面插入当前滚动条状态代表的一个动作。

保存造型:在右边动作列表框的最后插入当前滚动条状态代表的一个动作。

耗时文本框:从之前的动作变动到当前滚动条代表的动作用的时间,这个值会保存到动作源文件的每个动作的最后,在动作编译时会根据这里的时间把动作进行等时分割。详见“动作编译器和.action文件”。

删除行:删除右边动作列表框当前选中的动作行。



摆指定pose:把当前列表框选中的pose发送出去。

从指定处开始摆pose:从右边动作列表框选中的地方开始,对各个动作根据“耗时”进行分割,每20ms会根据规定的协议发送一次17路舵机的脉宽值,此时机器人的运动效果就是编译后的效果。(这个功能还有BUG,分割时间上会出问题,不建议使用)

全部pose:从右边动作列表框的第一项,对各个动作根据“耗时”进行分割,每20ms会根据规定的协议发送一次17路舵机的脉宽值,此时机器人的运动效果就是编译后的效果。(这个功能有BUG,发送动作的时间会有错误,不建议使用

暂停在进行“从指定处开始摆pose”或“全部pose”过程中,单击此按钮会暂停,再次点击会继续之前的动作发送数据。

停止:在进行“从指定处开始摆pose”或“全部pose”过程中,单击此按钮会停止摆pose。

自动pose:每次在单击列表框,选择一个新的pose时会自动把这个pose发送出去。



导入源文件:可导入现有已经做好的动作源文件,如果动作列表框里已经有一些动作的话,新导入的文件将在当前选中项的下方插入进去。利用这个功能可以分步编辑动作,然后再把各个动作组合到一起。

后面会介绍.source文件的格式,如果你了解它的格式的话,可以直接使用文本编辑器进行编辑和组合。

重排序号和时间:重新排列所有动作的序号和经历的总时间。这个功能有BUG,重排序号和时间之后后面的注释会消失。



执行动作:当SD卡保存多套动作时可以通过此按钮指定执行几号动作。

停止动作:此按钮将发送一个固定的控制信号。当机器人正在执行它自身保存的动作时,此信号用于指示其停止。


2、协议说明:
2.1 动作编辑器输出协议说明

输出使用串口。

发送数据的结构是 控制信号 + 数据。其中数据就是舵机的脉宽信号,范围是50~250,代表脉宽值500us~2500us。剩下的0~49 并 251~255 作为控制信号。

具体有一下几种格式:

舵机序号 + 单个舵机脉宽:

         【触发】在单个动作编辑滚动条发生变化时会自动发送这个指令。

【功能】指定某个舵机的脉宽(注意动作序号和动作编辑器的滚动条序号相同)。

【例】 10 + 200意思即为设置10号舵机脉宽为200*10us。

20(十进制) + 17个舵机脉宽:

         【触发】

单击“摆指定pose”会发送一次本指令,把当前列表框选中的pose发送出去。

单击“从指定处开始摆pose”或者“全部pose”会对列表框的动作根据指定的耗时进行分割,每隔20ms发送一次本指令。

         【功能】设置全身舵机脉宽,17个脉宽按照序号从小到大的顺序发送。

         【例】 20 + 155 + 135 +212 + …… + 146,共18个字节。

30(十进制) + 动作序号(2字节):

         【触发】单击“执行动作”按钮会发从一次本指令。

         【功能】通知机器人执行几号动作。

         动作序号是一个16位数据,先传高8位,后传低8位。也就是说最多允许保存和区分65536套动作(只要机器人能存得下)。

         【例】 30 + 0x00 + 0x01,执行第1号动作。

31(十进制):

【触发】单击“停止动作”按钮。

【功能】通知机器人停止当前正在执行的动作。

2.2 source文件格式说明

source文件是自己定义的一个保存动作文件,具有记录序号、总耗时、各个动作及其耗时,以及添加注释的功能。

它实际就是一个文本文件,可以直接使用文本编辑器编辑,也可以使用动作编辑器生成,当然使用后者会方便得多。

具体格式如下:

文件由行为单位组成,分为三种行:动作行、结束行和注释行。

动作行:

这种行在文件中存在最普遍,下面是格式,黑色位内容,蓝色为固定不可改变的标识符:

序号\t总耗时\t|脉宽0(speace)脉宽1(speace)……脉宽17(speace)/动作耗时<注释

序号:各个动作的号码标识,不会参与动作编译,错了也没关系。

总耗时:本动作文件到当前这个造型所经历的总时间,不会参与编译。

脉宽0~脉宽17:下一个将要摆出的造型。舵机序号和动作编辑器所标明的序号相同。

动作耗时:从上个造型变化到本动作行所指定的造型所需的耗时,单位ms。动作编译器会根据上个造型以及本耗时时间,对各个舵机的脉宽进行20ms等分,以20ms的单位存储各个舵机信息,供给机器人刷新全身舵机。

比如耗时为1000ms,动作编译器则会把每个舵机的上个脉宽到本次买块平均分成50份,保存全身舵机的50帧数据,机器人只要每20ms读取并刷新一次全身舵机就可连贯地执行动作。

注释:注释的内容可以是中文及任何字符,但不能有回车。

注释行:

注释行以“<”开头,后面可以任意添加注释。

需要注意,动作编译器是可以识别注释行并能够正确编译,但是为了减小动作编辑器的难度,动作编辑器是识别不了注释行的。所以不建议使用注释行。

结束行:

仍和一个.source文件的最后都要以结束行结尾,编译器在扫描到结束行之后就不会再对之后的数据进行编译了。

结束行格式是33个“>”,实际上编译器只要检测到一个“>”就会立刻结束编译。


二、动作编译器和.action文件

要说本节内容,需要先了解一下机器人对动作的读取方法,我采用的方法是机器人每20ms刷新一次全身17个舵机,就像放电影一样。而舵机的数据保存在SD卡里(.action文件),每套动作的各帧数据连续排列,机器人只要连续地读取就行了。

1、action文件

action文件保存连续的舵机脉宽信息,属于二进制文件,由一帧一帧的脉宽信号组成,每一帧的格式如下:

0xff + 1号舵机脉宽 + 2号舵机脉宽 + ……+ 17号舵机脉宽

0xff是每一帧开始的起始信号,后面紧接着17个舵机的脉宽信号,机器人每20ms刷新一帧数据即可(读取数据则是以扇区为单位读取的)。

在winhex里查看action文件的内容如下:


一帧由18个字节组成,每帧由0xff标志开始。

执行一秒钟的动作需要50帧,也就是50*18=900个字节。1M的存储空间可以让机器人连续执行2^20/900 ~= 1165s ~= 19.4分钟。

2、动作编译器

.source文件具有良好的可读性,配合动作编辑器可以方便地编辑动作;

.action文件则对机器人有很方便的执行性。

动作编译器的功能就是把动作.source文件编译为.action文件。

使用方法只要在dos界面使用动作编译器打开.source文件即可,或者直接把.source文件拖到动作编译器上。


编译完成之后会生成一个.action文件,这个文件就可以直接给机器人执行了。


最后看一下当时做的效果吧:http://v.youku.com/v_show/id_XMzA2NjUyNDU2.html

下载地址:http://download.csdn.net/detail/nicekwell/6192535


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值