基于STM32的智能物流机器人的设计*
2020-08-13周子楠杨琦何海燕
周子楠 杨琦 何海燕
(1安徽工业大学电气与信息工程学院;2安徽工业大学创新教育学院;3安徽工业大学机械工程学院 安徽马鞍山 243002)
近年来,电商和快递业正处于爆发式增长中,传统的人力分拣物流的方式难以满足当前行业的需求,整个行业对智能化机器人愈加需求,部分企业已逐渐使用机器人。目前的搬运机器人主要有两大类,一种是由传统单片机控制,与各类传感器配合的小型自动控制机器人;另一种是采用PLC与专用工业现场总线及分布式硬件结构构成的中型机器人。但是大部分应用案例都偏向于对物料的搬运过程,对于工业现场的路径规划研究较少,大部分也是由人为遥控,并不能完全节约人力资源。目前市场缺少真正智能化且方便简易性价比高的物流机器人,可以自主进行路径规划,识别物料,独立完成整个搬运流程。
安徽省大学生工程训练综合能力竞赛要求是设计并制作一款“智能制造场景中的智能物流机器人”。竞赛规则要求:机器人从出发区经过一个A4纸大小的门框,到达二维码识别区接受任务,再前往物料提取区根据识别到的任务顺序依次搬运物料从提取区至存放区。物料设置为方形、圆柱、球及其组合等简单几何体,重量为40~80g,尺寸为30~80mm。完成搬运任务后机器人返回出发区。
1 控制系统
制定控制系统时,首先要对完成比赛的流程进行规划。然后挑选核心控制器件,即确定使用何种类型的单片机,并对比赛流程中需要使用的检测元件进行选型并组合,最后编写程序驱动每一个硬件单元相互配合完成比赛。
1.1 流程设计及控制策略
根据比赛场地及任务制定了如下任务流程,机器人只需根据该流程即可完成任务。静止时机械臂为折叠状态,机器人采用一键启动。启动后,机器人从出发点开始做巡线运动,先左移两格,再向前进六格。向前移动时,在移动两格后经过物料存放处时减慢移动速度并逐渐抬起机械臂至水平,摄像头开始拍摄并处理存储物料颜色顺序。前进结束后二维码模块扫描二维码获取到任务,后退两格到达物块存放处中间物块的前方并停下开始执行夹取任务。机械臂伸出并根据颜色夹取第一个物块,直接将物块放置在存放区的指定位置,即靶环上,之后再夹取第二和第三个物块。三个物块均夹取结束后,机械臂折叠回收到初始状态,机器人后退四格右移两格,回到出发点,完成任务。
机器人由单片机控制,用二维码模块扫描二维码,用OpenMV识别物料颜色,光敏二极管模块采集赛道。以上三种模块均可以将采集到的信息通信给单片机。单片机根据接受到的数据进行处理之后驱动电机使车轮旋转机器人移动,驱动舵机使机械臂动作。为保证机器人恒速行驶,还需要在电机上安装编码器测量电机实时速度并反馈给单片机对速度进行调节,构成闭环系统。
根据流程设计及控制策略的制定,列出了机器人程序运行流程,如图1所示。
图1 程序流程图
1.2 控制核心
考虑到控制系统的简易性与可靠性,采用STM32F103VET6单片机(以下简称STM32)作为控制芯片,搭载在自制的PCB电路板上组成控制系统[1]。该款STM32集成了80个通用IO口以及11个16位定时器。单片机引用了两个串口,分别用以与OpenMV摄像头和二维码模块通信;8路ADC通道采集灰度管采集到的电压信号;5路PWM波控制舵机,4路PWM波控制直流减速电机;还引出多个IO口配合按键,开关以及OLED显示屏使用。电路板上除了集成了单片机相关资源外设电路,还集成了稳压电路,复位电路,电机驱动电路等。
1.3 运动模块
该机器人采用直流减速电机,在普通直流电机的基础上,加上配套齿轮减速箱,较低转速以提高转矩。要保持机器人在运动时整体的稳定性,不需要太快的运动速度,而且机器人本体较重,需要大扭矩电机驱动,固不使用一般直流电机。使用的电机为 JGB37-520减速电机。该电机额定工作电压为6-12V,自带编码器。根据麦克纳姆轮前后左右的控制方式,列出如下程序控制:
switch(dir)
{
case zuo:
speed_set[xf_motor] = -speed_set_t_r;
speed_set[xb_motor] = -speed_set_t_r;
speed_set[yf_motor] = speed_set_t_l;
speed_set[yb_motor] = speed_set_t_l;
break;
...
}
电机的转速由PWM波的占空比控制。上程序中speed_set[]数组负责存放直接输入给四个电机的PWM占空比,数组名称xf_motor等四个变量对应四个电机,speed_set_t_r及speed_set_t_l为经过PID控制后实时给定的PWM占空比。通过上文麦克纳姆轮受力分析出机器人的四个运动方向对应车轮和电机运动的方向后,给定四个电机相应的占空比并通过程序封装,即可直接对机器人运动方向进行控制[2]。
该型号的直流减速电机自带了一个霍尔编码器。编码器码盘上的刻线由磁条组成,属于磁敏元件,用以产生脉冲,计算位移。该编码器刻线为13线精度,减速比为1:30,对于编码器的输出,其精度可达到390线[3]。
当霍尔传感器采集到电机的实时速度后,就可以将每一时刻的速度作为输入带入增量式PID进行计算,不断刷新输出速度,尽量使整个系统趋于稳定。
式PWM_speed+=(int)(kp*ec+ki*e+ed*ec_ec))为增量式PID,kp,ki,kd分别表示比例积分微分系数,ec为比例项,由电机转速的当前误差与上次误差作差求得,e为积分项,是电机转速当前误差,ec_ec为当前比例项与前一时刻比例项的差[4]。此程序中ki积分系数为0,并没有使用积分I控制只使用了PD控制,积分拥有更强的消除误差的能力但是响应较慢,而该系统对反应速度要求要高于精度。
1.4 颜色识别模块
由于搬运任务中包含对物料的颜色进行识别,然后根据获取的任务选择正确颜色的物料进行搬运,所以需要给机器人加入颜色识别模块。其需要识别的颜色分别为红色、蓝色和绿色,对应的RGB值为红(255,0,0)、蓝(0,0,255)、绿(0,255,0)。颜色采集模块使用的是OpenMV摄像头模块。该模块上使用的是OV7725摄像头,配合低功耗,低成本的电路板以及强大的处理器STM32H743VI,适用范围广,处理与传输速度快。颜色识别过程只需要将OpenMV识别并处理后的颜色用一串数字表示,通过串口通讯发送到主控芯片即可。
该颜色识别采取的策略是颜色逐个识别。如果将三个物料同时集中在摄像头图像中,要同时对红蓝绿三个颜色分量的像素点进行比较处理。若是机器人在靠近物料处缓慢移动,让物料逐个单独进入图像中,摄像头对画面中的红绿蓝三色进行识别并按顺序记录出现的顺序且只记录一次,将顺序组合成一个三位数以字符串的形式串口通信给STM32即可完成颜色识别。颜色识别是通过在图像上寻找指定颜色的LAB阈值的像素点,找到符合阈值的像素点进行滤波处理后,若满足一定数量则认为识别到颜色从而完成识别。
1.5循迹模块
比赛场地布置为蓝色地面,由垂直交错的黑色条纹将场地分为若干小格。考虑到物料的摆放位置的中线与黑色条纹中线共线,所以可以将黑色线条作为规划运动轨迹的依据。将黑线作为引导线,通过计数经过的黑线数来判断此时的位置。
巡线的模块使用的是光敏二极管模块。光敏二极管模块是由光敏二极管和白光LED以及电阻组成,可以将光信号转换为电信号。当白光LED发光时,光线照射到物体反射到光敏二极管上,接受的光照越强,通过其的光电流越强,光电流经过与其串联的负载,负载上的电压越大[5]。因为场地上蓝色与黑色颜色在经过光照射后返回的光强是不同的,蓝色反光强,黑色反光弱,所以通过采集光敏二极管模块的电压值进行简单的换算处理就可以判断机器人是否经过黑线从而判断其大致位置。
每个机器人活动场地为半场,以场地上提取区和存放区的位置为中垂线,中垂线方向为左右方向,垂直方向为前后方向,机器人原始位置方向为后。由于场地上平行于中垂线的黑线为单黑线,垂直于中垂线的黑线为双黑线,所以机器人上前后方向的光敏二极管传感器排布方式为T型排布,左右方向各只有一个与车身垂直独立模块,见图2。
图2 光敏二极管模块T型排布示意图
模块的功能主要分为巡线和数线。T型排布主要实现巡线功能,巡线的原理是左右两个模块上LED照射出的光斑可以完全覆盖在黑线上,此时反射光的光强最弱,中间的模块有光斑覆盖在黑线上,反射光较强。只要测试并记录,设定好一个合适的电压阈值,如果机器人的中垂线偏离黑线,模块接受到的电压值就偏离了阈值,对比设定的电压阈值判断机器人左偏或右偏,然后在机器人偏离某方向时,在该方向上控制运动的轮子增加一些使车身可以反方向运动的速度,使机器人始终保持稳定在黑线上稳定运行。
当机器人前后方向运动时,前后模块实现巡线功能。左右模块实现数线功能。每当机器人经过一条左右方向的黑线时,左右方向的模块阈值改变一次,记录走过一格。当机器人左右方向运动时,前后模块中垂直的单个模块实现数线功能,其他两个模块不工作,左右方向的灰度管也不进行巡线功能。因为机器人在赛道内行走时,大部分是前后运动,只有在从出发点离开以及回到出发点时需要左右移动两格,所以不用在左右移动时加入巡线功能,见图3。
由于巡线与数线时的阈值不同,巡线时需要阈值高反应灵敏,数线时只要不发生误判就可以。固阈值与电压的对应关系不同,对应关系为:
Thser=(ADG-ADB)*80%+ADB
(1)
Thnum=(ADG-ADB)*50%+ADB
(2)
Thser式中,Thnum为寻线时的阈值,为数线的阈值,为模块在黑色引导线上AD采集的值,为模块在背景上的AD采集值。
图3 数线巡线程序流程图
在仓储配送现场中,如果使用类似比赛场地布置的地面,配合这种智能物流机器人的循迹方式,可以稳定高效的执行作业。
1.6任务获取模块
任务即物块搬运的顺序,是由数字1、2、3组成的三位数,存放在一个二维码中。机器人要拥有二维码识别功能来获取任务,使用MG65条码识读模块。该模块可以直接读取二维码信息,并通过串口与单片机通信。单片机简单处理该三位数获得搬运顺序即获取到任务。
1.7抓取模块
机械臂的每个轴关节上都装有一个舵机来实现轴旋转控制。由于机械臂本身较重且伸出长度较长,力矩很大,所以采用的舵机是20kg大功率DS3120舵机。测试时假使机器人正好停稳在存放区与提取区中间,手动调整机械臂最适合的夹取位置并记录此时每个舵机对应的PWM占空比状态,放在单片机程序中,每次开电启动时,舵机都会旋转到测试时的设定位置,准确完成夹取任务。
2机械结构设计
机器人的机械结构需要包括:机械臂,机器人底盘,电机和车轮。由于比赛场地为平地,为了保证结构稳定且简单,选用平板式底板,一体性底板结构紧密。竞赛要求机器人通过一个A4纸大小的门框,且在整个搬运的过程中保持整体结构的稳定,夹取和放置物料时精确快速。结合上述要求及任务,做出以下具体设计。
2.1机械臂设计
机器人需要精确且稳定的执行夹取与放置物料的任务,满足刚性强,惯性小,运动速度适中,工作空间范围广,位置精度高等条件,尤其要保证机械臂在伸长较长时,车体可以保持稳固。综合以上要求,并参考IRB660码垛机器人设计出机械臂,如图4所示。
图4 机械臂结构简图
机械臂具有四个关节,其中CD为大臂、NC为小臂、MNJ为手腕、Z为底座固定在底板上,构成了机械臂的四个自由度。各部分的运动都由20kg,270°大舵机直接驱动。在舵机的回转运动下,底座可以实现水平旋转,大臂能够在前后方向上带动机械臂做伸展运动,小臂则在上下方向上进行抬放运动。腕部与小臂的前端部分连接,同样通过舵机的回转运动使腕部转动。四个舵机以及机械臂之间的协同合作实现了物料在X、Y、Z方向上的平移以及旋转运动,达到了工作空间范围广的要求。最后还在机械臂结构里加入了三个连杆,组成了一个双平行四边形连杆机构。该机构解决了其他机械关节在运动时可能因为机械臂韧性与惯性造成的偏移问题,时刻保证机械臂整体与地面平行,配合高精度舵机,提高了物料抓取的稳定性与准确性。同时使机械臂的受力均匀,提高了机械臂的承载能力,减小了舵机的负载,降低其驱动功率,节约能源。
图5是基于MATLAB软件的机械臂工作空间的三维仿真图。由于每个舵机的工作角度为270°,会产生一部分空间的死角。但是所需搬运的物料为一字型摆放,可以通过控制机械臂旋转和拉伸确保每个舵机都可以在其范围内工作[6]。
图5 机械臂工作空间三维图
该机械臂设计最大的优点是可以保证当机器人在赛道中间位置某处时就可以通过调整自身伸出车身的长度直接对物块进行抓取与搬运,而不用移动车身,减小了机器人来回运动带来的位置上的偏离,提高了放置物块的精确度。
2.2麦轮行走方案
机器人的移动采用麦克纳姆轮控制策略。基于麦克纳姆轮的全方位运动能力,机器人可以直接实现前行、横移、斜行、旋转及其组合等运动方式,提高了其运动时的平稳性及作业效率。因麦克纳姆轮自身特性,麦轮由轮毂和辊子两大部分组成,一套麦轮中两两相同,辊子轴与轮轴呈45°或135°角,辊子沿轮轴线圆周排列,所以不同的安装方式配合不同的电机驱动方案会使机器人产生不同的运动轨迹。此方案采用的麦克纳姆轮安装方式为“O-长方形安装”,O 指麦克纳姆轮的四个辊子呈环形O型,长方形则可以适应更多的底盘形状。该安装方式产生的yaw偏航角动力矩的力臂较长,见图6所示。
图6 O-长方形安装
在轮子旋转移动时,辊子受到来自地面的摩擦力,方向沿辊子轴线。摩擦力可以分解为X轴与Y轴的分量,四个轮子分量的合力决定了整个车体的移动方向。求出车体在所有移动状态下每个轮子对应的旋转方向后,即可在程序中给定每个电机的旋转方向,实现机器人运动方向的控制。
由图7(a)可知,当四个麦轮同时向前或后滚动时,其合力指向机器人前方或后方。即可实现机器人前向的运动。由图7(b)当对角线的麦轮同向运动,相邻的麦轮反向运动时,其合力指向机器人左方或右方,即可实现机器人横向的运动。
图7 小车运动时轮子受力图
麦克纳姆轮由直流减速电机传动,电机转速由麦克纳姆轮逆运动学方程计算得出。逆向运动学方程是指给出需求的车速,从而逆推出每个车轮所需要的转速,用以程序控制。根据机器人简化俯视图(见图8)可以推出逆向运动学方程式[7]:
ω=1/r(Vx-Vy-Tωv)
(3)
ω=1/r(Vx-Vy-Tωv)
(4)
图8 小车简化俯视图
最终将软件与硬件结合,设计出的智能物流机器人,如图9所示。
图9 智能物流机器人实物图
3实验
搬运物体的精确度是衡量物流机器人仓储过程中稳定性最重要的标准。机器人在巡线过程中,在适当的速度下位置基本不会发生偏移,及时在巡线过程中某段路程出现偏移,也会在光敏二极管模块以及PID调节下矫正方位,影响精确度的主要原因是机器人在巡线结束后其中心位置是否可以准确地与纵横线的交点重合以及在机械臂运动过程中机械臂的大力矩是否会带动机器人使其位置发生偏移。
在实际工业生产中,物流机器人要处理各种体型重量的货物,这种机械臂的带载能力也是机器人性能重要的影响因素之一。比赛中要求搬运的是不超过100g的小型物块,机器人与机械臂已经制作完成,机械臂的最大可伸展范围已经确定,系统中可以改变的参量只有机器人的巡线速度以及其重量。需要通过实验对当前状态下的机器人进行检测观察其稳定性和精确度是否能够满足工业生产的要求。
3.1舵机占空比测量实验
机械臂的运动主要受舵机控制,由于机器人与搬运位置以及放置区的相对位置一定,所以采用预制固定占空比的方式控制舵机。通过实验测量计算出最合适的占空比并在程序中直接配置,这样每次运行时舵机都会按照相同的旋转角度带动机械臂旋转。舵机的旋转角度由PWM波占空比决定,在占空比设置完毕后,每次舵机旋转的角度几乎没有偏差。
占空比测量实验步骤如下:编写程序使机器人运动到在目标夹取位置时停下,使用机器人上的按键可以增加或减少每个舵机的角度;通过上位机的调试功能显示每个舵机的当前占空比;观察机械臂与物料以及存放区的位置,记录下此时的占空比;记录多组数据观察数据的是否存在较大的波动范围,如果波动范围较大表明该搬运机器人稳定性较差,如果波动范围小表明机器人稳定性强,求取数据的平均值作为占空比的预置值。实验具体测量数据如表1所示。
表1 舵机PWM波占空比值
为了简化按键增加占空比的操作,设置每次按键按下时占空比加减2,所以数据均为偶数。数据表明占空比值变化的范围很小,实验数据可以继续进行平均值处理。设置求得的平均值为舵机的预置占空比,在程序中完成配置。
3.2放置精度实验
使用完整的程序及之前测量出的舵机占空比测试机器人在当前重量和速度下放置物块的精度。比赛场地中存放区有十圈靶环,通过观察物体所在靶环可以判断放置的精度,其中十环为最内圈。在第一次实验中,机械臂携带物块旋转时机器人出现了轻微侧倾现象,以至于中心位置发生了偏离。因为机械臂自身较重且伸展距离长力矩十分大,所以带动较轻的车身移动。在实际应用中,机械臂以及车身可以采用密度不同的材质进行制作尽量保证机械臂远轻于车身。实验中采用在机器人底板加上金属块以降低机器人重心的方式。在机器人边缘加上四块金属块后,机械臂在携带物块旋转时不再出现侧倾现象。在多次实验中,该款机器人都可以在较短的时间内,准确地将所有物块按顺序放置在十环靶心内。说明该物流机器人可以满足仓储过程中对物料搬运放置的精度的需要。每次任务执行时间在40秒左右,因为受程序以及光敏二极管模块的反应速度等因素影响,若再提高运行速度会降低机器人的稳定性与搬运精度,可以通过程序优化以及更换更好的光敏二极管模块和电机模块以提升速度。
4结语
文章设计了一款小型智能搬运机器人,该机器人结构简单、控制简洁、适应性强,只需对其程序进行简单修改就可以适应不同的场地执行多种任务。在不断地测验与调试后,该机器人在安徽省第五届工程训练综合能力竞赛中获得一等奖第二名的优秀成绩。该研究结果可对井喷式增长的传统物流服务对智能机器人迫切需求的现状提供有效的解决方法。当前智能物流机器人正处于技术迭代完善的过程中,还存在许多技术、管理和成本等问题。该款机器人则可以充分发挥其特性,与未来物流仓储行业一同发展。