APP下载

舞蹈机器人动作编程研究

2010-07-23徐谋锋黄雪梅

关键词:数组舵机角度

徐谋锋,黄雪梅

(山东理工大学机械工程学院,山东淄博255049)

舞蹈机器人在做动作时是按顺序读取预先设计好的动作程序,而这些动作程序是每个舵机转动的数据。舞蹈机器人动作实现的传统方法是把每个舵机的转动数据存储在一个大型数组中,每隔一段时间读取这些数据[1].这种实现方法的缺点是舞蹈机器人在做动作时,有些舵机并不参与运动,这样在数组中会有很多的0元素存在,从而占用了大量的存储空间.本文对这些数据的存储方式进行了改进,并且只存储那些参与运动的舵机转动数据,从而大大节省了存储空间.

1 舞蹈机器人及控制器简介

舞蹈机器人的动作,主要是通过各个关节的精确运动来实现.由于舵机具有精确的位置角度控制能力,所以选用舵机作为舞蹈机器人的驱动元件.图1为舞蹈机器人自由度分配图,图1中,“”表示侧向转动的自由度;”表示水平转动的自由度;“”表示前后转动的自由度.舞蹈机器人踝关节分配2个自由度,膝关节有1个自由度,髋关节分配2个自由度,这样下肢共有10个自由度;肘部分配1个自由度,肩部分配2个自由度,这样上身共设计6个自由度;再加上头部的1个自由度,舞蹈机器人一共有17个自由度.为了方便识别每个自由度,对每个舵机进行了数字编号.

图1 舞蹈机器人自由度分配图

采用TI公司的高性能数字信号处理器TMS320LF2407A来控制17个舵机的转动.为了缩短程序的编写时间和降低开发难度,采用C语言作为舞蹈机器人动作的编程语言,采用TI公司提供的DSP开发工具CCS2000进行开发[2].采用TMS320LF2407A数字I/O端口A、B、E进行17路舵机控制用PWM波形输出.利用TMS320LF2407A的事件管理器A中的定时器1和全比较单元1、2、3来产生中断.舵机的控制信号PWM周期为20ms,PWM对应的高电平时间0.5ms~2.5ms对应的舵机输出角度为0~180°,它们之间呈线性关系.可以把一个PWM周期分成8个时间段,每个时间段输出3路PWM波形[3-4].这样在一个PWM周期内可以同步输出24路PWM波形,完全满足同步输出17路PWM波形的需要.把A、B、E口相对应的端口分为一组,定时器1定时2.5ms,定时时间到,发生中断,把下一组的端口置高.把各组端口控制的PWM波形高电平计数值对应地存入3个比较寄存器中.其中比较单元1控制A口输出,比较单元2控制B口输出,比较单元3控制E口输出.当定时器1的计数器值和比较单元值匹配时,在比较中断函数中置低相应的端口.24路PWM波形的发生时序如图2所示.

图2 24路PWM波发生时序

2 舞蹈机器人动作编程实现

舞蹈机器人动作实现总流程如图3所示.初始化主要包括系统CPU初始化;数字I/O初始化;事件管理器A的初始化;机器人初始位置初始化,即机器人各个舵机输出初始角度的初始化.在完成初始化后,按组号读取数组中的动作数据.在读取数据前,需要对动作数据进行地址计算,按照计算出的地址从数组中读取数据.读取完数据后就可以输出舵机的输出角度了.这组的动作做完后再读取下一组的动作数据.

舞蹈机器人的这些数据可以利用solidworks的动画制作插件Animator进行获取,利用插件Animator对舞蹈机器人的动作进行设计.在用solidwoiks对舞蹈机器人进行建模时,对应于17个舵机的转动,分别做了17个角度配合.在动作设计时,为了简化动作,将每个舵机的转动均设计成匀速转动.舞蹈机器人每做完一个动作,对每个舵机的转动角度设置一个关键点,关键点记录了角度位置,关键点之间的距离记录了所用的时间.这样就可以得到舞蹈机器人的动作数据.

图3 舞蹈机器人动作实现流程图

2.1 舵机转速数据的存储

采用型号为S3003的舵机作为舞蹈机器人的驱动元件,该型号舵机在4.8V时输出的最大转速为0.23s/60°.即在230ms内允许舵机转动60°,超过这个角度舵机反应不过来.对舵机速度的调节,以每40ms增加舵机的输出角度来实现.在40ms内允许舵机最大的输出角度为αmax=40×60/230≈10°,即其输出的角度范围在0~10°.舵机增加输出的角度越大,舵机转速越快,所以舵机的速度可以在0~10°范围内调节.因此可以把舵机的转速数据存在一个数组中,数据越多,舵机可调的速度越丰富.考虑到舵机的转速一般很少使用高速,所以在慢速的区域分布的点多,而高速的区域分布的点可以很少.速度数组定义如下:

2.2 结构体数据结构的数组

为了方便对17个舵机转动数据信息的描述和处理我们定义结构体数组,结构体的数据有:舵机的输出角度、舵机的输出转速地址、舵机的转动方向.舵机的输出角度是指舵机在做这组动作时,要转动的角度.舵机的输出转速地址是指舵机在转动时的速度值在速度数组中的位置.用1或-1来表示舵机的正转或反转(1表示正转,-1表示反转).结构体数组的定义代码如下:

2.3 动作数据的存储

为了减少动作中的数据,可以只记录那些转动的舵机数据信息,以节省存储空间.定义舞蹈机器人动作数据的代码如下:

把舞蹈机器人每做一个动作所涉及到的舵机转动数据作为一组.每一组动作数据的第一位是指在这个动作中有多少个在舵机转动,例如data[0] =2,是指在第1组的动作数据中有两个舵机在转动.在动作数据中,舵机转动数据信息由4个元素描述,第1个元素指舵机的编号,所谓舵机的编号是指对舞蹈机器人17个舵机进行编号,以识别舞蹈机器人的各个自由度.例如data[1] =2是指编号为2的舵机,在这里是指舞蹈机器人的右肩关节.第2个元素是指舵机的转动角度.第3个元素是指舵机每40ms增加的角度值在速度数组中的地址,其取值范围为0~39.第4个元素是指舵机的转动方向,当其值为1时代表舵机正转,其值为-1时代表舵机反转.

2.4 动作数据的读取

舞蹈机器人在做动作时,需要从动作数组中读取数据.在读取数据时是以组为基本单位的,也就是说舞蹈机器人在做一个动作时需要读取一组数据.而这需要知道这个动作的数据在动作数组中的位置,即地址.因此需要对各个组的地址进行计算.计算各个组地址的代码如下:

函数adreesdata(int grop)的功能是实现各个动作数据的首地址计算.传递的参数是每个动作所在的组号,而返回的是这个动作数据的首地址.

在知道了动作数据的首地址后就可以按照地址读取数据了,读取的数据存储在结构体数组中.读取数据的函数传递的参数也是动作数据的组号.根据传递的组号读取相应组的数据.其主要代码如下:

局部变量adr存储返回的该组动作数据的首地址.数据data[adr] 是本动作数据中运动的舵机个数.用两层for循环对结构体数组的地址标号和舵机编号进行比较.如果相等则把动作数据组中的数据存储到相应的结构体数组中.

2.5 舵机的速度控制

读取完数据后,就可以根据舵机的转动数据来对舵机进行输出.定时器1的定时时间是2.5ms,每40ms对舵机输出角度增加一次[5].可以定义一个计数器,定时器1定时时间到,计数器的值增1.如果计数器的值从0增到15时,40ms时间到,对要输出的角度按照动作数据中的速度值增加到相应的舵机上.增加的角度还需要转化为以定时器1中的计数器为单位的计数值.TMS320LF2407A处理器的时钟采用10MHz的无源晶振,经过内部锁相环的4倍频后的CPU时钟为40MHz.定时器1设置为16分频,则舵机输出角度α和以定时器1中的计数器为单位的计数值C之间的关系为

根据公式(2)可以通过速度值计算出每40ms比较寄存器需要增加的值,这样就可以实现舵机按照设定的速度值输出.

3 程序的硬件仿真

将编写的程序在TMS320LF2407A学习板上仿真运行,以验证其正确性.程序的在线仿真利用DSP仿真器XDS510-USB2.0通过14口的JTAG引脚与目标板进行连接.程序的编译环境采用CCS2000.如果程序编译无误,通过仿真器下载到TMS320LF2407A学习板上的RAM进行仿真运行.仿真运行后如果效果令人满意则可以通过CCS2000的FLASH烧写插件,把编译的程序烧写到芯片内的FLASH存储器上.这样处理器可以脱离仿真器进行独立运行.在CCS2000编译环境下读取的一组动作数据如图4所示.

图4 动作数据的读取

4 结束语

采用结构体数组来存储转动舵机的信息,在存储舞蹈机器人动作数据时忽略了数据为0的舵机,这样节省了大量的存储空间.舞蹈机器人在做动作的时候,按照预先设置好的动作数据组顺序读取,然后按照动作组内的数据信息输出舵机的转动角度,这样舞蹈机器人就可以按照预先设置好的动作进行表演.

[1] 杨子夫,米良川,李德升,等.舞蹈机器人步进电机驱动电路和程序设计[J] .计算机应用,2002,28(9):1-5.

[2] 张小鸣.DSP控制器原理及应用[M] .北京:清华大学出版社,2009.

[3] 刘歌群,卢京朝,闫建国,等.用单片机产生7路舵机控制PWM波的方法[J] .机械与电子,2004(2):76-78.

[4] 梁峰,王志良,解仑,等.多舵机控制在类人机器人上的应用[J] .微计算机信息,2008(1-2):242-243.

[5] 司东宏,刘红俊.舵机的程序控制[J] .实验室科学,2005(4):83-86.

猜你喜欢

数组舵机角度
神奇的角度
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
含齿隙弹载舵机的全局反步模糊自适应控制
一个涉及角度和的几何不等式链的改进
基于dsPIC单片机的飞艇舵机控制实现
角度不同
人啊
Excel数组公式在林业多条件求和中的应用
基于高速同步485总线通信的多通道舵机控制器设计