Deprecated: Creation of dynamic property db::$querynum is deprecated in /www/wwwroot/www.dijiaoluoshuan.net/inc/func.php on line 1413

Deprecated: Creation of dynamic property db::$database is deprecated in /www/wwwroot/www.dijiaoluoshuan.net/inc/func.php on line 1414

Deprecated: Creation of dynamic property db::$Stmt is deprecated in /www/wwwroot/www.dijiaoluoshuan.net/inc/func.php on line 1453

Deprecated: Creation of dynamic property db::$Sql is deprecated in /www/wwwroot/www.dijiaoluoshuan.net/inc/func.php on line 1454
一种仓库搬运机器人的设计与实现_williamhill威廉希尔足球体育平台官网注册入口
内燃叉车

致力于产品的良好用户体验、有效的网络营销效果而努力

一种仓库搬运机器人的设计与实现

发布时间:2025-02-02 04:48:54 来源:威廉希尔足球官网

  :大部分的机器人设计都是基于ROS系统,该系统的优点是功能丰富、设计快速,缺点是设计的硬件成本高、功耗高,ROS系统庞大,实时性不高。针对以上缺点,本文阐述的物流机器人的设计是基于ARM架构的S5PV210的CPU,运行嵌入式Linux操作系统,由单片机、S5PV210主板和APP3部分所组成。该设计降低了硬件成本、节省了电池功耗,可根据定制需求开发,实时性较高,且运行稳定、负载量大,可在室内动态环境中自主导航并完成相关搬运服务。目前该物流机器人已经制作完成。

  *基金项目:广东省普通高校特色创新类项目(自然科学)(2018GKTSCX056);

  目前大部分的机器人都是基于ROS 系统实现,一般ROS 在Ubentu 系统中的稳定性最好,因此就需要Intel或者高性能ARM架构的CPU 的支撑,但存在的问题是硬件成本高,功耗高,产品的体积大。同时ROS 系统中有很多功能对某些特定的应用场景而言是冗余的,这些冗余的功能会使系统庞大,占用很多内存和CPU的资源,而且机器人反应不够灵敏,实时性较差。如果将ROS 移植到基于ARM架构的低成本低功耗的CPU上,或者对ROS 系统来进行裁剪以去掉冗余的部分,存在工作难度大周期长的问题,而且ROS 后期运行时不够稳定。因此要设计一款在特定应用场景中运行的低成本、低功耗的机器人,不应采用ROS 系统开发,而应根据具体需求采用适用于特定应用场景下的定制化的软硬件设计的具体方案,在减少相关成本、功耗、体积的同时能大大的提升系统的稳定性和实时性。

  本文阐述的搬运机器人如图1 所示,硬件部分由ARM主板和单片机电路板组成,具体的硬件框架如图2 所示。

  其中ARM 主板采用了S5PV210 的CPU,带有512M 的RAM 和512 M 的flash,LCD 触摸屏,SD 卡插槽,3 个USB接口和4 个串口,运行嵌入式Linux操作系统[1],如图3 所示。利用该主板可实现机器人的激光雷达扫描,LCD 触摸屏显示,机器人与手机APP 之间的蓝牙通信,运行mjpeg-stream 的实时web 视频显示等功能。

  因ARM 主板运行的是嵌入式Linux系统,该系统是非实时系统,无法准确读取25 kHz 的光电编码器的脉冲,因此用单片机进行电机控制和光电编码器的脉冲读取,单片机与S5PV210 主板之间用自定义的通信协议传输电机数据[2],如图4 所示。

  SCM6716 的电流驱动模块,可输出的最大瞬时电流达2 A,如图5 所示。该机器人采用了直流电机搭配减速电机的方式,增强驱动力,可以负载超100 kg 重物。

  机器人外接模块可以为机器人提供更丰富的功能,如图6 所示,其中USB 摄像头用来提供机器人现场的视频,USB WiFi 模块用来将摄像头的视频传输到web页面浏览,串口蓝牙模块用来和手机APP 连接,飞控模块包含GPS,陀螺仪,电子罗盘,加速度计等传感器,并内置了传感器融合等算法,为室内机器人判断运动方向提供参考[3]。

  机器人可连接激光传感器,该传感器能扫描周围的环境,得到周围6 m 范围内的每个障碍物的角度和距离,如图7 所示。

  机器人的直流电机连接着减速电机,因此光电编码器1 s 可以读入25 kHz 的脉冲, 但嵌入式Linux操作系统是非实时的操作系统,读取脉冲不够准确[4],因此用单片机来读取25 kHz 的脉冲,并将脉冲值通过串口自定义的简单协议传给ARM 开发板。

  单片机采用STC15F2K60S2,其中外部中断0 和外部中断1 分别用来读取左右两个电机的光电编码器的脉冲,定时器0 设置为8 位重装用以设置波特率为115 200。定时器1 每4 ms 中断1 次,在中断服务程序里,生成可以驱动直流电机转速的占空比,每200 ms 计算1次轮子的速度,假设两个电机的光电编码器的脉冲数为P,轮子转一圈是25 000 个脉冲,轮子的半径是r,则轮子的速度为2×3.14×9/25 000,并进行1 s 的定时[5]。

  串口中断服务程序根据从ARM 板获取到的串口信息控制两个电机的启动停止、转动方向、设定速度,如图8 所示,可通过手机APP 或者机器人的液晶触摸屏上的按钮来发送这些指令,因点击按钮是间断性的动作,同时发送两次设定速度的按钮的时间间隔会比较久,所以在获取设定速度时如果buffer[2]的值有可能等于13,即’/r’,也不会认为这是新的一条指令。

  主程序每秒钟发送两个电机的速度到ARM 板,因嵌入式系统底层读取串口数据是不定时的,很多情况下会读取到一个不完整的包[6],考虑到机器人的速度不可能达到65 535 mm/s,因此能将通信协议简单设计如下:

  当嵌入式Linux 读到两个连续的0xFF,则认为是1个新的包的开始,将后面接收到的数据存放起来,直到读满6 个字节再开始计算两个轮子的速度。

  主程序中每秒将计算设定速度的上下限,上限是设定速度的105%,下限是设定速度的95%,当电机的速度在上下限之间不需调节占空比,否则每200 ms 调节1次占空比。

  系统从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的长度可通过余弦定理得到:

  机器人后端的光电编码器得到的反馈脉冲数的总数是P,如果机器人的轮子旋转2π,光电编码器得到的反馈脉冲数是F,则旋转的圈数M=P/F,则旋转角度θ2的弧度值为

  图5 中绿色方块代表在移动机器人,红色圆圈代表导航的终点位置,A代表移动机器人的初始位置,C代表移动机器人在某一时刻的位置,B点为导航的终点位置[9],由图5可知:

  因为AB和α为移动机器人在初始位置时获取的导航终点位置和终点角度,可以由手机APP 输入,以便告知初始位置的机器人,导航终点的距离和角度,因此BX和BY可以式(3)计算得出。

  式(4)中i为机器人根据表1 和表2 转变运动状态的次数,S为机器人在前进和后退时移动的距离,前进时S为正值,后退时S为负值,β为机器人在左转和右转时转动的角度,右转时β为正值,左转时β为负值,S和β可由里程计信息得出[10]。

  由上得出BX和BY,CX和CY,则BC 的值便可以求出,接下来求移动机器人在任意一点C 的终点角度θ,首先γ可由下式得出,

  由图5 可知,θ=γ-β, 因此机器人在任意位置的终点角度θ便可求出,需要注意的是当θ0时,θ=θ+2π,因此移动机器人在任意位置相对于导航终点的距离和终点角度都可以求出,结合上面的分析,移动机器人在未知室内动态环境中,在无传感器,无地图和动态避障的情况下导航到终点。

  根据以上公式,机器人在每1 s 求1 次角度,并计算角度的累计和,以此判断出机器人的朝向,因为激光数据处理的进程也会对角度数据进行读写操作,因此在以上流程执行前需要加上互斥锁mutex_lock,执行完毕后关闭互斥锁[11]。

  串口3 连接飞控模块,根据模块提供的通信协议,每1 s 获取1 次飞控模块的经纬度的数据,经度和纬度数据都是4 个字节,需要拼接后得到十进制的经纬度,当机器人如果到室外运动时能够最终靠经纬度对机器人进行粗略的定位。

  机器人每1 s 也会判断设定速度是否发生改变,如果改变了就会根据新的设定速度计算占空比并下发到单片机,若机器人按照设定速度来调整占空比,会出现机器人的速度忽大忽小的情况,因此将速度上限定为设定速度的101%,速度下限定为设定速度的99%,误差率为± 1%,当机器人的速度在速度的上下限范围内则不用调整占空比,机器人可以运行得更平稳[12]。

  机器人通过以上mjpeg-streamer 组件的代码完成了web远程监控的功能,可在远程打开fi refox 浏览器看到机器人上摄像头拍到的视频。

  激光探头可以测量到周围障碍物的距离和角度,当激光探头发现在320° ~ 40° 的范围内,在距离激光探头1 m 的范围内有移动障碍物,则变量stop_forward = 1,否则该变量为0,该角度和距离可以根据实际机器人的情况做相应调整。同理当激光探头发现在40°~140°的范围内,在距离激光探头1 m 的范围内有障碍物,则变量stop_right=1,否则该变量为0。

  如果变量stop_forward=1,则此时机器人需要旋转到某个角度,从周围障碍物的缝隙中出去,图15中障碍物的缝隙的角度θ1~θ4 可以计算得出,例如θ1=θB-θA,OA,OB的值能够最终靠激光探头的输出数据得出,则根据余弦定理,障碍物缝隙的大小可通过下式得出

  当导航的终点在机器人的左侧时,此时机器人能沿着θ3/2 的方向移动出去。

  图16 中的红色圆圈是导航的终点,绿色的是机器人,黑色的是障碍物,机器人的初始位置在底部,此时机器人左右分别有障碍物1 和障碍物2,如果按照逆时针来计算角度,图3 中的θ1 是机器人在初始位置的终点相对于机器人的角度,把这个角度叫做终点角度。

  根据表1 的内容,移动机器人可判断下一秒是前进、右转、左转或者后退,如果沿着终点角度的方向有障碍物,则根据表2 的判断,移动机器人计算出一个与终点角度最近且缝隙间隔大于机器人宽度的角度,沿着该角度的中线方向移动出去。

  结合以上的内容,可以了解到机器人在周围布满障碍物的情况下该如何决策,比如在图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 种状态:①在左转或者右转中以寻找终点方位的状态,②前进或者后退中不断向终点靠近,③寻找新的空隙的状态。

  机器人通过串口蓝牙模块和安卓手机连接,主要修改的文件是安卓系统里的BluetoothChat.java 文件,以下是控件的初始化。

  APP 的其他控件功能如下:bluetooth data buffer 区域显示的是机器人和安卓手机通过蓝牙通信的数据,full screen 按钮可将该区域全屏显示,hex display 单选框可以切换该区域数据的十六进制和十进制的显示,clear screen 按钮可以清空该区域的多个方面数据显示,connect 按钮可以启动或者关闭安卓手机和机器人之间的连接,stop 按钮可以启动或者停止机器人,speed(mm/s) 用来显示机器人的实时速度,hex output单选框用来切换速度的十六进制或十进制的显示,longitude 显示机器人所在位置的经度,latitude显示机器人所在位置的纬度,angle 要输入机器人相对于导航终点的朝向角度,distance 要输入机器人相对于导航终点的距离,这是一种角坐标的表示,有了这两个数据就能确定导航终点相对于机器人的具置,laser scan stop 按钮可以切换激光传感器的启动和停止,send speed 按钮可以发送机器人的设定速度,send position 按钮会将angle 输入框和distance 输入框的内容发送到机器人,以便机器人了解导航终点的位置,navigation 按钮用来切换手动移动和自动导航模式,整体界面左下方的上下左右四个箭头按钮能控制机器人前进、后退、左转和右转,界面右下方显示机器人的实时速度,电机1 和电机2 的速度,以及距离机器人最近的障碍物的距离。

  本文阐述了一种非ROS 系统的定制化物流机器人的设计方法,通过该方法设计,能节约机器人的成本和功耗,在实现丰富的定制化功能的同时,可根据手机APP 上输入的终点位置和角度,在室内动态未知环境中导航到终点,通过实验验证,机器人运行稳定高效,说明该设计方法具有一定的实用性和可靠性。

  [1] 苏青.多机器人路径规划与协同避碰研究[D].南京:南京邮电大学,2014.

  [2] 张文辉,齐乃明,尹洪亮.自适应神经变结构的机器人轨迹跟踪控制[J].控制与决策,2011(7):33-37.

  [3]鲍敦桥.仿真类人机器人设计及高层决策方法的研究[D].合肥:合肥工业大学,2009.

  [4]余婷.多机器人队列曲线运动研究[D].上海:上海交通大学,2009.

  [6] 马斌奇.多机器人协作与控制策略研究[D].西安:西安电子科技大学,2009.

你觉得这篇文章怎么样?

0 0

网友评论

管理员

该内容暂无评论

williamhill体育注册扫一扫咨询微信客服
在线客服
服务热线
微信咨询
威廉体育平台入口
返回顶部