*基金项目:广东省普通高校特色创新类项目(自然科学)(2018GKTSCX056);广东普通高校重点项目(自然科学)(2019GZDXM014);珠海城市职业技术学院2021年科研项目(KY2021Y01Z);2020年教育部高等学校项目(2020ITA03008)
本文引用地址:
0 引言
目前大部分的机器人都是基于ROS 系统实现,一般ROS 在Ubentu 系统中的稳定性最好,因此需要Intel或者高性能 架构的CPU 的支撑,但存在的问题是硬件成本高,功耗高,产品的体积大。同时ROS 系统中有很多功能对于某些特定的应用场景而言是冗余的,这些冗余的功能会使系统庞大,占用很多内存和CPU的资源,而且机器人反应不够灵敏,实时性较差。如果将ROS 移植到基于 架构的低成本低功耗的CPU上,或者对ROS 系统进行裁剪以去掉冗余的部分,存在工作难度大周期长的问题,而且ROS 后期运行时不够稳定。因此要设计一款在特定应用场景中运行的低成本、低功耗的机器人,不应采用ROS 系统开发,而应根据具体需求采用适用于特定应用场景下的定制化的软硬件设计方案,在降低成本、功耗、体积的同时可以提高系统的稳定性和实时性。
1 硬件设计
本文阐述的如图1 所示,硬件部分由 主板和电路板组成,具体的硬件框架如图2 所示。
图1
图2 硬件框架图
其中ARM 主板采用了S5PV210 的CPU,带有512M 的RAM 和512 M 的flash,LCD 触摸屏,SD 卡插槽,3 个USB接口和4 个串口,运行 操作系统[1],如图3 所示。利用该主板可实现机器人的激光雷达扫描,LCD 触摸屏显示,机器人与手机APP 之间的蓝牙通信,运行mjpeg-stream 的实时web 视频显示等功能。
图3 ARM开发板
因ARM 主板运行的是 系统,该系统是非实时系统,无法准确读取25 kHz 的光电编码器的脉冲,因此用进行电机控制和光电编码器的脉冲读取,与S5PV210 主板之间用自定义的通信协议传输电机数据[2],如图4 所示。
图4 单片机主板
图5 SCM6716电路板
图6 外接模块
SCM6716 的电流驱动模块,可输出的最大瞬时电流达2 A,如图5 所示。该机器人采用了直流电机搭配减速电机的方式,增强驱动力,可以负载超100 kg 重物。
机器人外接模块可以为机器人提供更加丰富的功能,如图6 所示,其中USB 摄像头用来提供机器人现场的视频,USB WiFi 模块用来将摄像头的视频传输到web页面浏览,串口蓝牙模块用来和手机APP 连接,飞控模块包含GPS,陀螺仪,电子罗盘,加速度计等传感器,并内置了传感器融合等算法,为室内机器人判断运动方向提供参考[3]。
机器人可连接激光传感器,该传感器可以扫描周围的环境,得到周围6 m 范围内的每个障碍物的角度和距离,如图7 所示。
图7 激光传感器
2 软件设计
2.1 单片机的软件设计
机器人的直流电机连接着减速电机,因此光电编码器1 s 可以读入25 kHz 的脉冲, 但 操作系统是非实时的操作系统,读取脉冲不够准确[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’,也不会认为这是新的一条指令。
图8 单片机串口中断服务程序
图9 发送实时电机速度的协议
主程序每秒钟发送两个电机的速度到ARM 板,因嵌入式系统底层读取串口数据是不定时的,很多情况下会读取到一个不完整的包[6],考虑到机器人的速度不可能达到65 535 mm/s,因此可以将通信协议简单设计如下:
当嵌入式Linux 读到两个连续的0xFF,则认为是1个新的包的开始,将后面接收到的数据存放起来,直到读满6 个字节再开始计算两个轮子的速度。
主程序中每秒将计算设定速度的上下限,上限是设定速度的105%,下限是设定速度的95%,当电机的速度在上下限之间不需调节占空比,否则每200 ms 调节1次占空比。
2.2 嵌入式Linux的软件设计
图10 嵌入式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 移动机器人的旋转示意图
当移动机器人在左转或者右转状态,左转或者右转的角度可以由图11 中的弧线S 获取,机器人的初始位置在黄色的位置,旋转过一定角度θ2 后到了绿色的位置,从图1 可知θ1 = θ2,如果可以得到图11 中的长度AC,则通过弧线S 和AC 则可求出机器人旋转的角度θ1,则旋转角度θ2 也可以得到[8]。
图12 移动机器人的观测模型
从图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)计算得出。
接下来计算CX 和CY ,因为机器人运动的距离会不断地累积,因此可知式(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]。
图13 机器人液晶触摸屏设计
机器人的液晶触摸屏采用QT 的图形界面进行设计,其中界面布局可以在QT designer 中完成,并在QT designer 中直接添加槽函数,可通过qt_second() 函数每秒钟对界面的控件进行刷新,当按钮单击后按钮文本会发生变化,可通过PushButton->setText 函数完成按钮文本的设计,同样设定速度的输入框可以通过LineEdit1->setText(QString::number(setup_speed)); 完成设计,单击+、- 两个按钮可以修改机器人的设定速度,当机器人的设定速度大于1000mm/s 或者小于0 时,弹出警告框QMessageBox::information(this,”Error”,“speed should be in range 0-999 mm/s”);,设定速度、两个电机的速度、经纬度数据可通过以下TextLabel2->setText(QString::number(setup_speed)+”mm/s”);等函数完成显示。
if (webcamera==0)
{
int mjpg_streamer2;
char arg[40]=”/mjgp-streamer/start_uvc_yuv.
sh”;
mjpg_streamer2=system(arg);
i f ( (mjpg_streamer2= =127) | | (mjpg_
streamer2<0))
webcamera=0;
else
webcamera=1;
printf(“the mjgp_streamer2 is %in”,mjpg_
streamer2);
}
图14 远程监控
机器人通过以上mjpeg-streamer 组件的代码完成了web远程监控的功能,可在远程打开fi refox 浏览器看到机器人上摄像头拍到的视频。
图15 移动机器人的旋转决策
激光探头可以测量到周围障碍物的距离和角度,当激光探头发现在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 移动机器人的移动决策过程
图16 中的红色圆圈是导航的终点,绿色的是机器人,黑色的是障碍物,机器人的初始位置在底部,此时机器人左右分别有障碍物1 和障碍物2,如果按照逆时针来计算角度,图3 中的θ1 是机器人在初始位置的终点相对于机器人的角度,把这个角度叫做终点角度。
表1 终点角度和旋转方向的关系
终点角度 |
旋转方向 |
320°~40°同时该区域的所有障碍物距离大于1米 |
前进 |
40°~140°同时该区域的所有障碍物距离大于1米 |
右转 |
220°~320°同时该区域的所有障碍物距离大于1米 |
左转 |
140°~220°同时该区域的所有障碍物距离大于1米 |
后退 |
根据表1 的内容,移动机器人可判断下一秒是前进、右转、左转或者后退,如果沿着终点角度的方向有障碍物,则根据表2 的判断,移动机器人计算出一个与终点角度最近且缝隙间隔大于机器人宽度的角度,沿着该角度的中线方向移动出去。
表2 前方1 m范围内有障碍物时的判断
终点角度下一秒 |
动作 |
320°~40°同时该区域的某个障碍物距离小于1米 |
找到与终点角度最近,且缝隙间隔大于机器人宽度的角度移动出去。 |
40°~140°同时该区域的某个障碍物距离小于1米 | |
220°~320°同时该区域的某个障碍物距离小于1米 | |
140°~220°同时该区域的某个障碍物距离小于1米 |
if (angle<last_data[0]){new_start=1;
i f ( ( m a x _data[1]>=40.0)&&(max_data[1]<=130.0))turning_right++;
else if ((max_data[1]>=220.0)&&(max_data[1]<=310.0))turning_left++;}
if ((angle>310)||(angle<40)){
if ((distance<800.0)&&(distance>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 的其他控件功能如下: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 的速度,以及距离机器人最近的障碍物的距离。
图17 动作判断依据
图18 利用状态机处理部分代码
图19 软件设计
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] YAN Y P, LI Y M. Mobile robot autonomous path planning 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] ZHU S P, 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] YAN Y 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.
(本文来源于《电子产品世界》杂志2022年12月期)