一种仓库搬运机器人的设计与实现
2022-02-02严毓培尹雪梅汤佩豫黎伟邓泽霖朱贵芳
严毓培 尹雪梅 汤佩豫 黎伟 邓泽霖 朱贵芳
摘要:大部分的机器人设计都是基于ROS系统,该系统的优点是功能丰富、设计快速,缺点是设计的硬件成本高、功耗高,ROS系统庞大,实时性不高。针对以上缺点,本文阐述的物流机器人的设计是基于ARM架构的S5PV210的CPU,运行嵌入式Linux操作系统,由单片机、S5PV210主板和APP3部分组成。该设计降低了硬件成本、节省了电池功耗,可根据定制需求开发,实时性较高,且运行稳定、负载量大,可在室内动态环境中自主导航并完成相关搬运服务。目前该物流机器人已经制作完成。
关键词:搬运机器人;ARM;嵌入式Linux;单片机;自主导航
*基金项目:广东省普通高校特色创新类项目(自然科学)(2018GKTSCX056);广东普通高校重点项目(自然科学)(2019GZDXM014);珠海城市职业技术学院2021年科研项目(KY2021Y01Z);2020年教育部高等学校项目(2020ITA03008)
0 引言
目前大部分的机器人都是基于ROS系统实现,一般ROS在Ubentu系统中的稳定性最好,因此需要Intel或者高性能ARM架构的CPU的支撑,但存在的问题是硬件成本高,功耗高,产品的体积大。同时ROS系统中有很多功能对于某些特定的应用场景而言是冗余的,这些冗余的功能会使系统庞大,占用很多内存和CPU的资源,而且机器人反应不够灵敏,实时性较差。如果将ROS移植到基于ARM架构的低成本低功耗的CPU上,或者对ROS系统进行裁剪以去掉冗余的部分,存在工作难度大周期长的问题,而且ROS后期运行时不够稳定。因此要设计一款在特定应用场景中运行的低成本、低功耗的机器人,不应采用ROS系统开发,而应根据具体需求采用适用于特定应用场景下的定制化的软硬件设计方案,在降低成本、功耗、体积的同时可以提高系统的稳定性和实时性。
1硬件设计
本文阐述的搬运机器人如图1所示,硬件部分由ARM主板和单片机电路板组成,具体的硬件框架如图2所示。
其中ARM主板采用了S5PV210的CPU,带有512M的RAM和512M的flash,LCD触摸屏,SD卡插槽,3个USB接口和4个串口,运行嵌入式Linux操作系统[1],如图3所示。利用该主板可实现机器人的激光雷达扫描,LCD触摸屏显示,机器人与手机APP之间的蓝牙通信,运行mjpeg-stream的实时web视频显示等功能。
因ARM主板运行的是嵌入式Linux系统,该系统是非实时系统,无法准确读取25kHz的光电编码器的脉冲,因此用单片机进行电机控制和光电编码器的脉冲读取,单片机与S5PV210主板之间用自定义的通信协议传输电机数据[2],如圖4所示。
SCM6716的电流驱动模块,可输出的最大瞬时电流达2A,如图5所示。该机器人采用了直流电机搭配减速电机的方式,增强驱动力,可以负载超100kg重物。
机器人外接模块可以为机器人提供更加丰富的功能,如图6所示,其中USB摄像头用来提供机器人现场的视频,USBWiFi模块用来将摄像头的视频传输到web页面浏览,串口蓝牙模块用来和手机APP连接,飞控模块包含GPS,陀螺仪,电子罗盘,加速度计等传感器,并内置了传感器融合等算法,为室内机器人判断运动方向提供参考[3]。
机器人可连接激光传感器,该传感器可以扫描周围的环境,得到周围6m范围内的每个障碍物的角度和距离,如图7所示。
2 软件设计
2.1 单片机的软件设计
机器人的直流电机连接着减速电机,因此光电编码器 1s可以读入 25kHz的脉冲,但嵌入式Linux操作系统是非实时的操作系统,读取脉冲不够准确 [4],因此用单片机来读取25kHz的脉冲,并将脉冲值通过串口自定义的简单协议传给ARM开发板。
单片机采用STC15F2K60S2,其中外部中断0和外部中断1分别用来读取左右两个电机的光电编码器的脉冲,定时器0设置为8位重装用以设置波特率为115200。定时器1每4ms中断1次,在中断服务程序里,生成可以驱动直流电机转速的占空比,每200ms计算1次轮子的速度,假设两个电机的光电编码器的脉冲数为P,轮子转一圈是25000个脉冲,轮子的半径是r,则轮子的速度为2×3.14×9/25000,并进行1s的定时[5]。
串口中断服务程序根据从ARM板获取到的串口信息控制两个电机的启动停止、转动方向、设定速度,如图8所示,可通过手机APP或者机器人的液晶触摸屏上的按钮来发送这些指令,因点击按钮是间断性的动作,同时发送两次设定速度的按钮的时间间隔会比较久,所以在获取设定速度时如果buffer[2]的值有可能等于13,即/r,也不会认为这是新的一条指令。
主程序每秒钟发送两个电机的速度到ARM板,因嵌入式系统底层读取串口数据是不定时的,很多情况下会读取到一个不完整的包[6],考虑到机器人的速度不可能达到65535mm/s,因此可以将通信协议简单设计如下:
当嵌入式Linux读到两个连续的0xFF,则认为是1个新的包的开始,将后面接收到的数据存放起来,直到读满6个字节再开始计算两个轮子的速度。
主程序中每秒将计算设定速度的上下限,上限是设定速度的105%,下限是设定速度的95%,当电机的速度在上下限之间不需调节占空比,否则每200ms调节1次占空比。
2.2嵌入式Linux的软件设计
系统从QT的TMainForm进入后分别对mjpeg-stream,GPIO,串口,液晶屏,摄像头进行初始化,并启动QT的定时器,每1秒刷新1次控件。
在robot_start的进程中设置1个死循环,不断从串口0连接的串口蓝牙模块来获取手机APP发送过来的命令并加以执行,同时不断从串口3连接的单片机来获取机器人的速度,通过与设定的速度对比后向单片机发送占空比,并根据累积的脉冲数计算机器人行走的总里程和某时刻的朝向。
由于GPS传感器、陀螺仪、加速度计、磁力计和电子罗盘等传感器在室内无法使用,该方法使用里程计信息对机器人的位置和角度进行计算,因此机器人的朝向可以通过刚体的运动进行计算得出。
移动机器人的轮子由电机带动,轮子的直径为D,则轮子的周长为πD,电机转动的圈数m可以由光电编码器获取,当机器人在前进或者后退状态,移动机器人移动的距离S可以由S=m×πD得到[7]。
当移动机器人在左转或者右转状态,左转或者右转的角度可以由图11中的弧线S获取,机器人的初始位置在黄色的位置,旋转过一定角度θ2后到了绿色的位置,从图1可知θ1=θ2,如果可以得到图11中的长度AC,则通过弧线S和AC则可求出机器人旋转的角度θ1,则旋转角度θ2也可以得到[8]。
从图12可知,机器人的重心位置在A,对于前后左右对称的机器人,A是机器人的中心位置,如果不是前后左右对称的机器人,A的位置可以通过测量得到,B是机器人左边沿的中点,C是左上轮的中心点,因此AB和BC的长度可以通过测量得到,则AC的长度可通过余弦定理得到:
AC=(AB2+BC2)? (1)
机器人后端的光电编码器得到的反馈脉冲数的总数是P,如果机器人的轮子旋转2π,光电编码器得到的反馈脉冲数是F,则旋转的圈数M=P/F,则旋转角度θ2的弧度值为
θ2=S/AC=D×P/(F*(AB2+BC2) ? ) (2)
图5中绿色方块代表在移动机器人,红色圆圈代表导航的终点位置,A代表移动机器人的初始位置,C代表移动机器人在某一时刻的位置,B点为导航的终点位置[9],由图5可知:
BC=((BX?CX)2+(BY?CY)2) ? (3)
其中:
Bx=AB×cosα
By=AB×sinα
因為AB和α为移动机器人在初始位置时获取的导航终点位置和终点角度,可以由手机APP输入,以便告知初始位置的机器人,导航终点的距离和角度,因此BX和BY可以式(3)计算得出。
接下来计算CX和CY,因为机器人运动的距离会不断地累积,因此可知
式(4)中i为机器人根据表1和表2转变运动状态的次数,S为机器人在前进和后退时移动的距离,前进时S为正值,后退时S为负值,β为机器人在左转和右转时转动的角度,右转时β为正值,左转时β为负值,S和β可由里程计信息得出[10]。
由上得出BX和BY,CX和CY,则BC的值便可以求出,接下来求移动机器人在任意一点C的终点角度θ,首先γ可由下式得出,
由图5可知,θ=γ-β,因此机器人在任意位置的终点角度θ便可求出,需要注意的是当θ<0时,θ=θ+2π,因此移动机器人在任意位置相对于导航终点的距离和终点角度都可以求出,结合上面的分析,移动机器人在未知室内动态环境中,在无传感器,无地图和动态避障的情况下导航到终点。
根据以上公式,机器人在每1s求1次角度,并计算角度的累计和,以此判断出机器人的朝向,因为激光数据处理的进程也会对角度数据进行读写操作,因此在以上流程执行前需要加上互斥锁mutex_lock,执行完毕后关闭互斥锁[11]。
串口3连接飞控模块,根据模块提供的通信协议,每1s获取1次飞控模块的经纬度的数据,经度和纬度数据都是4个字节,需要拼接后得到十进制的经纬度,当机器人如果到室外运动时可以通过经纬度对机器人进行粗略的定位。
机器人每1s也会判断设定速度是否发生改变,如果改变了就会根据新的设定速度计算占空比并下发到单片机,如果机器人按照设定速度来调整占空比,会出现机器人的速度忽大忽小的情况,因此将速度上限定为设定速度的101%,速度下限定为设定速度的99%,误差率为±1%,当机器人的速度在速度的上下限范围内则不用调整占空比,机器人可以运行得更平稳[12]。
机器人的液晶触摸屏采用QT的图形界面进行设计,其中界面布局可以在QTdesigner中完成,并在QTdesigner中直接添加槽函数,可通过qt_second()函数每秒钟对界面的控件进行刷新,当按钮单击后按钮文本会发生变化,可通过PushButton->setText函数完成按钮文本的设计,同样设定速度的输入框可以通过LineEdit1->setText(QString::number(setup_speed));完成设计,单击+、-两个按钮可以修改机器人的设定速度,当机器人的设定速度大于1000mm/s或者小于0时,弹出警告框QMessageBox::information(this,”Error”, “speedshouldbeinrange0-999mm/s”);,设定速度、两个电机的速度、经纬度数据可通过以下TextLabel2->setText(QString::number(setup_speed)+”mm/s”);等函数完成显示。
if(webcamera==0)
{
intmjpg_streamer2;
chararg[40]=”/mjgp-streamer/start_uvc_yuv.
sh”;
mjpg_streamer2=system(arg);
if((mjpg_streamer2==127)||(mjpg_streamer2<0))
webcamera=0;
else
webcamera=1;
printf(“themjgp_streamer2is%i\n”,mjpg_streamer2);
}
机器人通过以上mjpeg-streamer组件的代码完成了web远程监控的功能,可在远程打开firefox浏览器看到机器人上摄像头拍到的视频。
激光探头可以测量到周围障碍物的距离和角度,当激光探头发现在320°~40°的范围内,在距离激光探头1m的范围内有移动障碍物,则变量stop_forward=1,否则该变量为0,该角度和距离可以根据实际机器人的情况做相应调整。同理当激光探头发现在40°~140°的范围内,在距离激光探头1m的范围内有障碍物,则变量stop_right=1,否则该变量为0。
如果变量stop_forward=1,则此时机器人需要旋转到某个角度,从周围障碍物的缝隙中出去,图15中障碍物的缝隙的角度θ1~θ4可以计算得出,例如θ1=θB-θA,OA,OB的值可以通过激光探头的输出数据得出,則根据余弦定理,障碍物缝隙的大小可通过下式得出
AB=(OA2+OB2?2*OA*OB*cosθ) ? ( 8)
当导航的终点在机器人的左侧时,此时机器人可以沿着θ3/2的方向移动出去。
图16中的红色圆圈是导航的终点,绿色的是机器人,黑色的是障碍物,机器人的初始位置在底部,此时机器人左右分别有障碍物1和障碍物2,如果按照逆时针来计算角度,图3中的θ1是机器人在初始位置的终点相对于机器人的角度,把这个角度叫做终点角度。
根据表1的内容,移动机器人可判断下一秒是前进、右转、左转或者后退,如果沿着终点角度的方向有障碍物,则根据表2的判断,移动机器人计算出一个与终点角度最近且缝隙间隔大于机器人宽度的角度,沿着该角度的中线方向移动出去。
if(angle new_start=1; if ((max_data[1]>=40.0)&&(max_data[1]<=130.0)) turning_right++; elseif((max_data[1]>=220.0)&&(max_data[1]<=310.0)) turning_left++;} if((angle>310)||(angle<40)){ if((distance<800.0)&&(distan ce>0.0)){ stop_forward++;}}if((destination_angle>30)&&(destination_ angle<330)){ if(angle<=(360-destination_ angle+30))&&(angle>=(360-destination_angle-30))){if((distance<1000.0) &&(distance>0.0)){ stop_destination++;}}} 结合以上的内容,可以了解到机器人在周围布满障碍物的情况下该如何决策,比如在图4中,机器人在初始位置position1应前进,但此时前方有障碍物,此时左边无障碍物,根据表1向左转至position2后再向前移动,在前进的过程中一直监测终点角度,当移动至position3时突然前方出现了移动障碍物3,结合表1和表2,则机器人应向右转,在旋转的过程中一直检测终点角度,当终点角度满足表1的前进时,机器人则向着终点前进,如果在前进的过程中又出现了其他的障碍物,则机器人根据实时监测到的终点角度和表1与表2的内容,迭代地进行决策,直到达到终点。 以上导航过程不需要事先对周围环境建图,也不需要传感器的数据,在整个导航过程中可以根据实际移动障碍物的情况做出实时判断,适合在室内未知动态环境中进行导航。该方法简单高效,使用成本较低的CPU甚至MCU就可以实现,同时可节省机器人的功耗和体积。 在激光扫描的进程中,机器人根据表1和表2进行相应的运动决策,激光传感器7圈/s,因激光传感器的精度有限,加上环境噪声的影响,在激光扫描的过程中会出现一些噪点,通过计算7个点/s落在了哪个角度区域,选择拥有点数最多的角度区域作为判断下一步动作的依据,如图17所示,20~160的区域有5个黑色的点,200~340的区域有1个红色的点,340~360的区域有1个红色的点,20~160区域对应的动作是右转,因此机器人下一秒的动作是右转。 可利用状态机处理该部分代码,一共有3种状态: ①在左轉或者右转中以寻找终点方位的状态,②前进或者后退中不断向终点靠近,③寻找新的空隙的状态。 2.3安卓端软件设计 机器人通过串口蓝牙模块和安卓手机连接,主要修改的文件是安卓系统里的BluetoothChat.java文件,以下是控件的初始化。 APP的其他控件功能如下:bluetoothdatabuffer区域显示的是机器人和安卓手机通过蓝牙通信的数据,fullscreen按钮可将该区域全屏显示,hexdisplay单选框可以切换该区域数据的十六进制和十进制的显示,clearscreen按钮可以清空该区域的数据显示,connect按钮可以启动或者关闭安卓手机和机器人之间的连接,stop按钮可以启动或者停止机器人,speed(mm/s)用来显示机器人的实时速度,hexoutput单选框用来切换速度的十六进制或十进制的显示,longitude显示机器人所在位置的经度,latitude显示机器人所在位置的纬度,angle需要输入机器人相对于导航终点的朝向角度,distance需要输入机器人相对于导航终点的距离,这是一种角坐标的表示,有了这两个数据就可以确定导航终点相对于机器人的具体位置,laserscanstop按钮可以切换激光传感器的启动和停止,sendspeed按钮可以发送机器人的设定速度,sendposition按钮会将angle输入框和distance输入框的内容发送到机器人,以便机器人了解导航终点的位置,navigation按钮用来切换手动移动和自动导航模式,整体界面左下方的上下左右四个箭头按钮可以控制机器人前进、后退、左转和右转,界面右下方显示机器人的实时速度,电机1和电机2的速度,以及距离机器人最近的障碍物的距离。 4 结束语 本文阐述了一种非ROS系统的定制化物流机器人的设计方法,通过该方法设计,可以节省机器人的成本和功耗,在实现丰富的定制化功能的同时,可根据手机APP上输入的终点位置和角度,在室内动态未知环境中导航到终点,通过实验验证,机器人运行稳定高效,说明该设计方法具有一定的实用性和可靠性。 参考文献: [1] 苏青.多机器人路径规划与协同避碰研究[D].南京:南京邮电大学,2014. [2] 张文辉,齐乃明,尹洪亮.自适应神经变结构的机器人轨迹跟踪控制[J].控制与决策,2011(7):33-37. [3]鲍敦桥.仿真类人机器人设计及高层决策方法的研究[D].合肥:合肥工业大学,2009. [4]余婷.多机器人队列曲线运动研究[D].上海:上海交通大学,2009. [5]韩雪峰.导盲机器人[D].哈尔滨:哈尔滨工程大学,2009. [6] 马斌奇.多机器人协作与控制策略研究[D].西安:西安电子科技大学,2009. [7] YAN Y P. WONG S F, A navigation algorithm of the mobile robot in the indoor and dynamic environment based on the PF-SLAM algorithm[J].Cluster Computing,2019(12):133-139. [8]YANYP.LIYM.Mobilerobotautonomouspathplanning based on fuzzy logic and filter smoothing in dynamic environment[C].12th World Congress on Intelligent Control and Automation,2016,6. [9] HE P.Consensus of uncertain parabolic PDE agents via adaptive unit-vector control scheme[J]. IET Control Theory &Applications,2018,12(18):2488-2494. [10]ZHUSP,XIA L M.Human action recognition based on fusion feathers extraction of adaptive background subtraction and optical flow model, mathematical problems in engineering [J].2015(4). [11]YANY P,LI Y M, Autonomous path planning and navigation of a mobile robot with multi-sensors based on fuzzy logic in dynamic environment[J].International Journal of Intelligent Systems and Applications in Robotics,2016,7(1):1-14. [12] YAN Y P, WONG S F. A navigation algorithm for the mobile robot in the indoor and dynamic environment based on the image recognition algorithm[J].The Hong Kong Institution of Engineers,2018.