机器人比赛在中国科技大学已经成为一项重大的校园科技活动。本文所实现的四足机器人在2002年的比赛中获得了亚军。我们通过一种基于“对角线一致”策略成功地实现了四足机器人的行走,机器人的九个自由度全部由步进电机实现,利用AT89C51单片机控制整个系统。在软件上利用加速控制思想,从而使机器人的动作更加平滑,结合背景音乐,精确控制机器人的动作,使机器人随着音乐跳舞。
四足舞蹈机器人的实现策略
陶阳宇,甘业兵,江朝晖
(中国科学技术大学电子科学技术系,安徽合肥,230026)
摘 要:机器人比赛在中国科技大学已经成为一项重大的校园科技活动。本文所实现的四足机器人在2002年的比赛中获得了亚军。我们通过一种基于“对角线一致”策略成功地实现了四足机器人的行走,机器人的九个自由度全部由步进电机实现,利用AT89C51单片机控制整个系统。在软件上利用加速控制思想,从而使机器人的动作更加平滑,结合背景音乐,精确控制机器人的动作,使机器人随着音乐跳舞。
关键词:四足机器人,行走机器人,对角线一致,步进电机加速控制
A Means of Realization of the Four-Leg Robot
TAO Yang_yu,GAN Ye_bing
JIANG Zhao_hui
(Department of Electronic Science & Technology of USTC,Anhui,Hefei,PRC 230026)
Abstract: The Robot-game contest has become one of the significant scientific activities on campus of USTC(University of Science & Technology of China). The four-leg robot described in this paper won the runner-up in the contest this year(2002). We make it realized that the robot can tread with four legs itself based on consistency of diagonal . The robot has nine articulations which are really nine step-motors. The whole system is commanded by the AT89C51 MCU. We use the method of accelerate-control in the part of software so that the robot can move more smoothly and elegantly to dance in the background music.
Keywords: four-leg robot, mobile robot, consistency of diagonal, accelerate-control of step-motor
1.引言
目前在国外,机器人的研制有了很大的发展,除了传统的工业控制机器人外,
各种商用,民用机器人也不断地研制出来。无论在机械结构还是在自动控制上,都向着更高的技术难度进步了。如日本,继SONY在2002年3月发布双足行走机器人”SDR―4X”后不久,2002年9月日本又推出新一代行走机器人”PINO” 。
中国科技大学已经连续举办了两届“大学生Robot-game活动周”等科技活动,引起强烈反响,以及CCTV举办的“中国大学生机器人比赛”等一系列活动。促进了机器人研究与制作在大学生中的广泛开展。
本文中介绍的机器人是一个四足行走式机器人,外形酷似水母,整个身体由四条腿支撑。四条腿在解决平衡性问题上较容易,只需四点共面即可保持整个机器人的平衡。但机器人在行走时,四条腿之间必然有一个协调配合的问题,只有当四条腿迈步一致时才能保证机器人的身体在一个水平面内,保持它的稳定性。否则要么机器人会倾斜摔倒,要么动作僵硬不够平滑。机器人的上部还有三只手臂,每只手臂有两个自由度,可以在程序的控制下挥动手臂,配合腿完成一定的动作。
为了既能够保持机器人的稳定性,又让它的动作舒缓平滑,我们提出了一种基于“对角线一致”的行走策略:仿照四足动物的行走方式,先左前腿和右后腿同时迈进,接着右前腿和左后腿同时迈进,形成两条交叉的对角线,这样就完成了一个周期的行走动作。以后如此类推。再配合加速电机控制方法,使电机的运转更加平滑,避开其固有的振动。
以下分机械实现部分和控制部分分别详述整个机器人的实现。
2.机械实现
机器人的整体视图:
图一,俯视图(点击得大图)
图二,单项轮视图(点击得大图)
一,整个机器人的结构总体上分为上身、腰部和下肢三部分。
上身由头部和手臂组成。控制的核心部分----电路板以及电源就装在头部的圆罩中。每只手臂由电机连接的前臂和后臂组成。后臂通过电机固定在机身上。前臂和后臂都能自由活动,作出各种动作。在机器人的表演过程中,起着支撑作用的是腰部。腰是用一个深5.0cm,直径35.0cm的塑料圆筒和一个有机玻璃底盘做成的,这样的材料结实,有韧性而且重量轻。
在我们的动作设计中,要求机器人腰部可以扭转。为保持旋转的均匀、平衡,必然要求电机轴在底盘的中心。我们将控制腰部的电机固定在两根穿过有机玻璃盘的长螺丝上。然后在头部底衬盘下对称地安装了三个万向轮,万向轮可以在有机玻璃底板上自由滚动,大大减少了腰部转动地摩擦力。同时,腿部电机与控制电路有导线相连,为尽量减少导线的缠绕,我们在有机玻璃底板上设置了一个直径0.9cm的导管作为导线通道,解决了走线问题。
机器人行走实现的另一个关键问题是腿部,我们只用了两个电机就实现了四条腿的驱动难题,如何设计巧妙的机械结构同时带动四条腿,又要使行走平稳,我们动了很多脑筋,做了很多尝试,终于找到一种巧妙的连杆传动装置。(如图3)
图三,机器人的一个行走周期
由上图可见,机器人在行走时,的确是“对角线一致”,这种方法保证了行走的平稳性,使得行走得以实现。实际上,这只需后腿上的两个电机以相同的方向关于竖直线作来回摆动即可。在模拟实际情况腰部、头部重量时,腰部的旋转动作要更为自然、流畅,不会出现因电机带不动而丢步的情况。
让机器人行走起来,只是完成了工作的第一步,重要的是如何让九个电机协调一致地配合工作,按照预先设定好的动作翩翩起舞。
3.电路控制
电路控制部分是机器人的心脏。驱动电路板主要由主控芯片部分、信号锁存部分、电机驱动部分以及电源稳压部分等组成。
我们的控制芯片采用的是Atmel公司的AT89C051单片机微控制器。主要是由于AT89C051单片机工作主频可以达到12MHz,内置有两个16位定时/计数器,并有4k的EPROM,存储容量大,可反复烧写1000次。我们的舞蹈机器人可以完成3分21秒的舞蹈动作,动作数据量大。而且在动作过程中要求精确控制,为了使动作平滑流畅,衔接良好,我们要求转动角度精确到0.1度。这对控制器的工作频率有一定的要求,在综合评估了几个公司的产品,包括Intel 51系列、Motololar、Atmel系列等,最后选择了AT89C051这一款。
作为一个控制系统,其执行部件是非常重要的。机器人的执行部件就是它的电机部分,目前最常见的控制电机主要有直流电机和步进电机两大类:直流电机工作原理简单,一般两根电源连线,如果带码盘等反馈的也不过三根线。但是直流电机难于精确控制,且转矩较小,功耗大。步进电机恰恰能较精确的控制,转矩大,但难点在于工作原理较复杂,需要多相激励。为了最终效果,我们选择了步进电机,用软件来进行精确控制。步进电机直接用芯片的I/O口输出数字脉冲控制,为了使步进电机获得足够的转动力矩,并且动作平缓,在软件实现时采用了四相加速激励技术,成功地实现了步进电机的平稳加速。
具体电路图见图四。
图四,控制电路图(点击得大图)
因为在调试或比赛过程中,可能会出现故障等问题,所以我们采样了复位电路(见图五),这样可以及时的调整重启。
工作过程:
将编制好的舞蹈程序烧写在单片机的EPROM中,上电复位,由复位电路产生一个电平跳变,送到单片机的RESET脚,同时石英晶体振荡器开始工作,产生12M的时钟信号,送到单片机的CLK脚,于是程序从ROM的0000H处开始执行。
根据程序的设定,由单片机的 P0,P1,P2,P3口不断输出脉冲信号,以ALE信号作时钟将输出信号锁存在锁存器74LS374中,信号从74LS374输出到驱动芯片ULN2803中,在ULN2803中,信号被放大,经其反相后的信号直接驱动步进电机工作。我们采用的是4相步进电机,工作电压+12V,用共阳极的接法。从ULN2803输出的信号A、B、C、D,若A=0(低电平),则表示该步进电机的A相导通,接着再让B相导通,如果有规律地使4相依次导通:A-B-C-D-A,那么电机就会转动起来(见图五)。
图五 步进电机4相激励
电源也是一个关键问题,其中,AT89C051电压为+5V,而步进电机要求+12V电压,考虑到整个机器人对重量的要求,我们采用了10节5号干电池串联作为电源POWER。+12V电压经过MC7805电平转换成+5V供给AT89C051,为了保护CPU安全,还增加了若干退耦电容。考虑到AT89C051的带负载能力有限,我们还给每个口增加了上拉电阻,增强它的的带负载能力。同时,灯光控制集成片控制七组发光二极管以“追逐”形式旋环闪烁,以增加美感。
3.软件控制
整个系统采用AT89C51单片机控制,程序采用汇编语言编写。程序的编写思路没有用传统的查数据表形式,其原因主要是:
(1)舞蹈机器人的动作较多,数据表的内容将很庞大;
(2)数据缺乏可读性,给程序的阅读带来不便;
(3)数据表形式不符合现代软件编程的思想。
鉴于以上原因,机器人的控制程序采用模块化的编程思路,首先需要研究机器人的动作特点,将整体的动作进行分解,找到它的基本动作元素,然后通过编写通用的子程序实现各种基本动作,将这些基本元素作为动作库零件。而在编写整个动作时,只需按照要求调用不同的基本元素即可,如果动作有了变化,程序修改起来相当容易,省时省力。这种编程的思想为我们后来程序的修改带来了很大的方便。
一, 步进电机的驱动特点
步进电机是利用数字脉冲激励的,通过输入数字脉冲,如双四拍AB-BC-CD-DA,电机轴即可转动一周,但步进电机的激励频率如果过低会出现振动现象,启动频率过高又会出现丢步的现象,为了克服这种对启动频率和转动力矩的双重需求,机器人的驱动程序采用了加速激励技术,脉冲的频率是通过脉冲延时DELAY子程序来调节的:将加速需要的延时数据做成表的形式存在CPU中,不断地读取这个数据表,作为参数传递给DELAY子程序
例如:下面就是一个典型的A型电机500MS的加速数据:
图五,步进电机加速激励过程
以上就是A型电机在500MS内从静止加速到500PPS的数据表,表示分成11个阶段加速到高速状态,其中延时数据就是传递给DELAY子程序的,调节脉冲的频率。加速的过程如下:
从以上的加速过程可以看出:在500ms内电机的加速几乎是以均匀的加速度进行的,这样可以保证加速过程的平稳性,机器人的动作的平稳性正是来自这种精细的加速激励技术。
选择加速激励技术的原因:
1) 防止低频时与电机的固有频率发生共振现象;
2) 成功地实现从低速到高速的平稳加速过程;
3) 采用加速技术后,电机具有自启动能力,不会出现因突然的阻力而造成的“阻死”现象。
机器人软件控制模块如下:
一个典型的A型电机的加速过程amotor.asm程序清单:
;该程序用来驱动A型电机左右各转120度
DRIVE: MOV 81H,#40H ;避免堆栈指针的影响,81H为SP的物理地址
ACALL INIT ;调用初始化子程序
MOV DPTR,#004FH ;DPTR指向数据表
MOV R0,05H ;开始为向右转,05H为R5的物理地址
TURN: CLR A
MOVC A,@A+DPTR ;取脉冲数
MOV R3,A ;R3存每阶段的脉冲数
STEP: MOV A,#0FH
MOVC A,@A+DPTR ;取该阶段的延时数
MOV R4,A ;延时数存R4中
CJNE @R0,#00H,NEXT ;状态字指针R0到尽头
MOV R0,05H ;指针复位
NEXT: MOV 80H,@R0 ;输出脉冲,89H为P2口的物理地址
MOV 90H,@R0
MOV 0A0H,@R0
MOV 0B0H,@R0
INC R0 ;指针下移
ACALL DELAY ;延时
DJNZ R3,STEP ;该阶段循环
INC DPTR
DJNZ R2,TURN ;执行下一阶段
DEC R6
MOV A,R6
JZ STOP ;总步数结束
MOV R7,#40
REST: MOV R4,#0FFH ;正转120度,休息
ACALL DELAY
DJNZ R7,REST
MOV R2,#0FH ;加速阶段数复位
MOV DPTR,#004FH ;DPTR复位
CJNE R5,#20H,RIGHT ;R5存正反状态字
LEFT: MOV R5,#25H
MOV R0,05H
SJMP TURN
RIGHT: MOV R5,#20H
MOV R0,05H
SJMP TURN
STOP: SJMP STOP ;停机
;
ORG 004FH
PULETAB: DB 9,10,11,12,14,15,16,17
DB 18,19,108,108,108,108,108
TIMETAB: DB 55,50,45,42,36,33,31,29
DB 27,26,24,24,24,24,24
DELAY1: MOV 08H,#34 ;DELAY1为延时0.1MS的标准子程序
LOOP1: NOP
DJNZ 08H,LOOP1
RET
DELAY: ACALL DELAY1
DJNZ R4,DELAY
RET
INIT: MOV 20H,#33H ;INIT为初始化子程序
MOV 21H,#66H
MOV 22H,#0CCH
MOV 23H,#99H
MOV 24H,#00H ;20H
|