武豪杰,李发海
(湖北汽车工业学院电气与信息工程学院,湖北十堰, 442002)
本项目主要是应用所学知识对STM32F407单片机进项改装设计来控制仿人型格斗机器人以达到竞赛所需的目的,本次项目为我校学生提供了一次探索科技、创新思维与实际行动结合的机会。也为激发我校学生对高科技的兴趣与爱好、激励创新意识、活跃校园科技活动、培养未来科技人才提供了大舞台,也是深化“科技兴国”战略方针的一个新举措。
仿人型格斗机器人的系统结构主要由主控机构、伺服舵机、传动系统组成[1]。仿生机器人共有2条腿,均匀分布在圆形躯干的两边,每条腿上有5个关节,机器人中的关节一般用“自由度”来表示。即机器人每条腿上有5个自由度,全身共19个自由度。对于一个仿生机器人来说,每条腿上的5个自由度基本能满足到达各个位置的要求,关节部位通过来伺服舵机进行实现。主控机构可以控制全身的伺服舵机进行合适的角度调整以达到仿人效果。手部可以根据实际情况安装合适的手型。
控制板可以控制全身的伺服舵机进行合适的角度调整以达到仿人效果,在此基础上完成合适的仿人动作。核心处理器采用STM32F407VET6;动作存储空间:采用128MBTF储存卡,最大可支持32G;控制方式:蓝牙模块控制;485舵机接口:5个,理论可同时控制舵机数量为254个;TTL舵机接口: 5个,理论可同时控制舵机数量为254个;喇叭接口: 可同时连接2个8欧3瓦的喇叭;串口数量: 预留3个TTL接口;三维软件操作接口:标准USB接口;姿态传感器(陀螺仪);电源模块:采用12V
图1 系统模块设计图
航模电池供电,再使用降压模块分别引出10V、5V、3.3V接口,分别为电机、各传感器、STM32单片机供电。
要完成在蓝牙模块控制的情况下,能够根据周围情况的不同,做出合适的仿人动作。其动作有前进,后退,左右撤步和左、右转正面,左、右直拳。通过STM32控制板进行蓝牙模块控制、电源检测等基础硬件配置,接收蓝牙发送过来的信息[2],进行电源监控以及进一步子模块的运行。其子模块是其某个具体动作的实现。系统模块设计图如图1所示。
机器人采用的舵机为总线式舵机,此种舵机连接方式可以看作是所有的舵机是被一组线串联起来的[3]。因此控制方式不是简单的单对单控制命令,而是主控器将控制信号下发之后,每个舵机根据自己的ID号自动挑选自己对应的命令而执行。而这些命令全部通过485或串口发送给各个舵机,同时也将舵机的当前信息发回到控制器。
本项目要研究的主要问题是通过所学知识对STM32F407单片机的改装以及机器人程序的编写和改进,同时对机器人进行硬件改装和软件设计以用于适应仿人搏斗机器人竞赛。而基于STM32F407芯片的单片机与传感器和数量足够多的舵机的组合设计成的格斗机器人是一个嵌入式系统,通过蓝牙控制系统以执行各种命令,实现仿人格斗动作。软件系统结构框图如图2所示。
图2 软件系统结构框图
机器人的多个关节组合运动实现了机器人的连贯性动作,在控制机器人动作的时候,能够控制各个舵机分别匀速平滑的由一个位置到另外一个位置,便可以实现机器人的动作连贯性。通过将舵机位移过程分数的方式,使得舵机的运行速度尽量的匀速平滑。舵机运动控制图如图3所示。
图3 舵机运动控制图
//函数名称:voidp_to_p(int delay)
//函数说明:position 变化子程序,实现同起同落
//入口参数:delay=延时,define:决定循环次数由自//己决定还是通过程序算出结果
voidp_to_p(s16 delay,s16 define)
{
u8i,j; float c;
s16a,b=0,M=0;
u8 position_buあer[24];
for(i=0;i<24;i++)
{
position_buあer[i]=position[i];
//记录当前位置值
}
if(define==0) //决定循环次数M
M=1;
else
M=define;
for(i=1;i<=M;i++) //开始循环M次输出
{
for(j=0;j<24;j++)
{
// position_change记录的是舵机的目标位置与当前位置差
c = position_change[j]; //将距离目标点的值分数,一步步逼近目标值
if(i==1)
a=(c*i)/M;
else
{
a=(c*i)/M;
b=(c*(i-1))/M;
}
position[j]+=(a-b);//每次加上分数值取整
}
SendMultipleServosAngles(position, 24); //执行24舵机输出
low_level_500u(delay); //小延时,用于调速。
}
for(i=0;i<24;i++) //最后补偿每个舵机的误差
{
position[i]= position_buあer[i]+ position_change[i];
}
SendMultipleServosAngles(position, 24);
//执行24舵机输出
low_level_500u(delay);
}
嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如转动机器人左臂的舵机,当遥控左臂出拳时,左臂的四个舵机调节转轴角度做出类人出拳的动作。程序流程图如图4所示。
姿态传感器是一种将非电量转换为电量信号的检测装置,灵活的运用它,可以赋予机器人调整姿态,使其出现任何不规则的姿势回归到标准站姿。开始要给传感器设置合理的初始数值,作为判断摔倒的依据,在倒地时能准确判断并站立。机器摔倒判流程如图5所示。
图4 程序流程图
图5 机器摔倒判别流程图
本项目的关键问题在于,第一在硬件上理解舵机的驱动原理,即通过某种频率的脉冲信号来控制舵机的转动速度和方向,需要对19个舵机进行通电同步控制,连接蓝牙模块,设置好舵机稳定的初始位置,配置姿态传感器等处理。第二在软件上,利用proteus仿真和keil5软件进行C语言编写,编程语言嵌入单片机后,当用蓝牙控制机器人时,使机器人能够依靠多个舵机同时转动及时做出合理的动作,即要为单片机植入合理的程序,写入多样的动作模块,使机器人结合多个攻击动作,完成比赛要求。第三,在其他方面上,例如机械结构,既要保证机器人的强度也要保证机器人的灵活性,确保材料稳定,同时也要研究多个舵机转动协调出动作,这是确保机器人在应对突发情况时是否能及时做出应对的关键。