基于Arduino的六轴舞狮机器人
2017-06-01梁巧仪郑誉煌李国豪林焕然亚梅肖
梁巧仪 郑誉煌 李国豪 林焕然 亚梅 肖俊杰
摘要:六轴舞狮机器人采用Arduino平台控制六个数字舵机,每个舵机分别牵引带动机器人腰部、大臂、小臂、小臂旋转、腕部、爪部动作。根据舞狮子的运动特点,这台机器人实现了一套完整的机器人舞狮动作。
关键词:舞狮;机器人;Arduino
中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2017)08-0090-02
舞狮文化源远流长并且深得广大人民群众的喜爱,每逢佳节喜事,舞狮是用来活跃气氛很好的选择。当今舞狮主要是由人穿上舞狮服来舞动,需要多个人来配合。舞狮属于高强度运动,对人的体力消耗很大,人不可能长时间不停歇进行。另外有些小型庆祝活动或临时节目需要舞狮子助兴,请舞狮队的成本较高。为此本文研究了采用基于Arduino的六轴舞狮机器人,这台机器人便于携带,而且能够实现常见的舞狮动作。
1六轴舞狮机器人的硬件构造
本文提出的六轴舞狮机器人的工作原理框图如图1所示。将支架和舵机进行组装、电路连接以及舞狮模型固定,即完成六轴舞狮机器人的硬件安装,其外观如图2所示。
六轴舞狮机器人的核心部件功能介绍如下:
1)舵机:又称伺服马达,是程序的执行器,也是机器人的动力来源,本系统采用六个舵机分别来驱动机器人的六个关节,从而控制机器人底部、大臂、小臂、小臂旋转关节、腕部、爪部六个部位的运动。舵机的输入信号为周期为20ms的脉冲信号,信号脉冲宽度0.5ms~2 4ms对应0°~180°。我们选用的是辉盛MG-996r舵机。
2)Arduino上位机:整个机器人的控制中心,根据编程输出脉冲信号来控制六个舵机的转动角度、速率、时间点,从而达成机器人的運动达成一整套舞狮动作。Arduino上位机的程序由Arduino IDE编译器编译烧录,我们选用的型号是ArduinoUNO。
3)Arduino UNO扩展板:为上位机和舵机提供电压,承载舵机的电流,同时对Arduino上位机的接口进一步扩展以及排列,以便电路进行连接。
4)开关电源:将220V交流电转换为5V直流电源,为Ardui-no上位机和舵机提供额定5V电压。
5)机械臂支架:整个的机器人主体支架,为六轴结构。
6)舞狮模型:分为头和身两部分,头固定在机器人爪部、身披在机器人小臂上。
2舞狮机器人的控制原理
2.1程序关键函数
Arduino上位机的编程是在Arduino IDE上进行编译,其语言开发环境与Java和c语言近似。
在程序的最开始会调用舵机库文件,其调用语句为#in-clude
1)Servo.attach():该函数的参数有(pin,min,max),pin参数设置舵机对应在上位机上连接的pwm端,Arduino UNO上的pwm端口为3、5、6、9、10、11。min、max(可选,默认min为544,max为2400)参数设置舵机舵机最小、最大角度时的脉冲宽度,以微秒为单位。
2)Servo.write ():控制舵机转动到对应角度,范围为0~180。
3J Servo.read():读取舵机当前对应的角度值,范围为0~180。
4)sutup();loop():这两个函数为Arduino IDE中的两个重要默认函数,setup()函数会在上位机每次启动时自动运行一次,本套程序中是在此函数里设置舵机的对应连接端口,以及对舵机的角度初始化,loop()函数会在上位机启动后循环运行,本套函数中是在此函数里写入机器人的动作运行代码,以达到机器人不断地执行舞狮动作的目的。
圳本程序中是以for(pos=0;pos<=speed;pos++),{servo.write(int(map(pos,1,speed,a,b)));}的组合形式运用这两个函数来控制舵机的转动速度以及舵机的始末角度。speed为舵机转动速度控制值,实际上此组合函数是控制for()函数的循环次数来控制舵机从始位置转到末位置的时间,进而控制舵机转动速度,因此speed实质为for()函数的循环次数。a为舵机的始角度值,b为末角度值,map()函数的功能是控制servo.write()中的值随循环次数的递增从a变化到b,即舵机从a角度转到b角度。
6)delay():此函数为延时函数,由函数内的整数值决定延迟时间,单位为一,函数作为动作函数之间的缓冲,能让舵机在上个动作完成时得到一定的稳定时间,以免舵机在不停歇的工作中损坏。
2.2舞狮动作说明
1)初始状态:本程序中设置舵机A、B、C、D、E、F分别对应端口3、5、6、9、10、11。首先需要给机器人设置静止状态时每个舵机的角度,考虑到舞狮动作的美观性,我们设置舵机A、B、C、D、E、F的静止时角度分别为80、140、10、90、170、90。
2)狮子点头动作:主要由E舵机来实现,舵机转动范围在150到170之间,每个点头动作完成后延时300ms,换句话说,就是每个点头动作之间间隔为300ms。
3)狮子摇头动作:主要由F舵机来实现,F舵机从静止状态时的90度转动到45度,再从45度转动到135度,继而从135度转动到90度,完成一个摇头动作,每次舵机转动,延时200ms,实现了狮子三次摇头动作。
4)狮子摇身动作:主要是由D舵机来实现,舵机由静止状态时的90度转动到110,然后转动到70度,继而回到静止状态时的90度,每一次舵机转动,延时200ms,实现了狮子三次摇身动作。
5)狮子连贯综合动作:狮子完成了点头,摇头和摇身三个动作之后,开始站立,在高处动作。实现狮子站立的是B舵机,B舵机由静止状态时的90度转动到120度,实现站立,并且在高处重复点头,摇头,摇身等动作。动作完之后,狮子可以继续站立,站得更高,由B舵机实现狮子站立得更高。B舵机由原来的120度继续站立到90度,之后舵机延时300ms。狮子站高之后可以做低头转身动作,低头转身动作由A舵机和C舵机共同实现。首先狮子低头,由C舵机来完成,C舵机从10度转动到70度,之后舵机延时250ms。低头后转身,A舵机主要是实现转身,由80度转动到40度,狮子动作到左边方向,之后舵机延时250ms。狮子转过身之后,在此方向舞动,重复上面的摇头、转身动作。在左下方舞动完之后,狮子站立,C舵机回到10度,转身,A舵机回到80度,在此方向继续做点头、摇头、摇身动作。同样的,狮子低头转身到右下方,继续舞动,在此不再详述。
实际上,在这套舞狮编程中,我们设置了机器人有三个模式,分别为静止模式,计算机控制模式和自动运行模式。在编写动作时,我们主要采用计算机控制模式来编写,观察机器人舞动时舵机应设定的最佳角度,确定下来并完成一整套编程。值得注意的是,狮子头的安装位置会影响狮子舞动时每个舵机应该设置的角度,不同的狮子头安装位置会对应不同的角度,在设置舞狮动作的速度时,我们应避免速度设置得过快,防止舵机烧坏。
3结束语
本文研究了基于Arduino平台的六轴舞狮机器人,这台机器人体型较小,便于携带。实践证明,本机器人在迎宾和一些小型庆祝会上能带来很好的喜庆气氛,也得到观众们的肯定。今后将研究六轴以上和实现可以自动行走的舞狮机器人。