整个系统基本上可以分成以下几个部分的任务:
(1)控制边毛刷电动机、吸尘电动机 边毛刷电动机和吸尘电动机可以同时控制,需要清洁机器人开始清扫工作的时候,三个电动机同时开始工作,停止清扫的时候,三个电动机同时停止,通过控制电动机转速,来改变吸力的大小。另外,当边毛刷电动机被线等物体缠住不能转动时,判断为故障,停止工作。
(2)检测台阶防止坠落 清洁机器人底部的红外台阶检测传感器如果检测到台阶,则要求机器人强行后退,然后采用右手法则,向右转弯。这三个传感器分别放置在正前方、左前方和右前方,只要其中的一个或几个检测到台阶都做同样的处理,所以对这三个信号做或运算后用单片机的一个I/O来接收。这部分实时性要求高,所以采用中断来实现。
(3)探测机器人周边障碍物情况 在机器人前后左右各有一反射式红外线传感器,在前端另有两个碰撞传感器。因为行进过程中要对障碍物的位置做出初步的判断,然后采取相应的处理,所以这六个信号是相互独立的。
(4)控制机器人左右电动机行走 通过PWM子程序可以按要求控制电动机的转速,并通过霍尔传感器反馈电动机转角。并编写后退、右转90°、左转180°、右转180°这些常用的功能子程序。
(5)键盘功能管理 需要对键盘进行软件去抖动处理。
(6)LCD显示和LED显示 设置时通过LCD显示相应信息提示和时间等,用发光二极管指示机器人相应的状态。
(7)充电控制 通过A/D检测电池电压,当电池电压低于一定值时启动寻找充电站子程序。电池充上电后,监测电压防止过充电。
(8)控制警报声起停 当机器人运行过程中出现重大故障时,开警报声进行人工干预。
以上的每个任务都对应几个子程序或中断程序,整个系统的流程如图11-54所示。其中障碍检测、按键、电压检测等都采用了分时查询的方式,台阶检测和大部分延时程序采用了中断的方式。这样合理利用资源的同时也提高了机器人的响应速度。
状态初始化部分主要为STC89C52的系统初始化以及使用到的各个外设模块等资源的工作模式设定,包括初始化数据读取、开定时器和外部中断等。当定时时间到或检测到台阶时,进入中断程序,具体流程如图11-55所示。
图11-54 主程序流程图
图11-55 中断服务程序流程图
1.单片机系统控制程序
(1)时钟与设置程序 清洁机器人需要实现定时工作,就需要一个时钟系统。考虑到定时不需要太精确,为节约成本使用单片机自身的定时器实现。STC89C52有3个定时器,选择定时器T0用于计时。将T0设置为工作方式1,单片机系统为12MHz的晶振,则最大定时为65536μs,为方便计算,选择定时60000μs,即0.06s,则赋初值为0×15A0,即TH1=0×15,TL1=0×A0。设定3个变量ti,minute和hour,在定时中断程序中,ti累加,到1000次时,计1min。系统计时程序流程如图11-56所示。
通过4个按键和LCD显示,可以对清洁机器人的系统时间、工作时间和工作方式进行设置。4个按键分别定义为SET、ADD、DEC和OK键。SET为设置键,与外部中断相连,第一次按下时进入设置中断程序,以后每按一次切换一项设置内容项,最后跳出中断。ADD和DEC为设置的增减键,用于增减内容数据。OK为确定键,用于完成数据修改后确认修改,在时间设置中还用于在时与分之间的修改切换,具体流程如图11-57所示。
图11-56 系统计时程序流程图
图11-57 设置程序流程图
(2)液晶显示程序1602液晶模块组件内部主要由LCD显示屏、控制器、列驱动器和偏压产生电路组成。
控制器接收来自MPU的指令和数据,控制着整个模块的工作,由CGROM、CGRAM和DDRAM等字符存储区域以及与MPU和列驱动器的I/O接口、指令寄存和译码机构、地址计数器等部分组成。在控制器的控制下,模块通过数据总线DB0~DB7和E、R/W、RS 3个输入控制端与MPU接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线DB接收MPU发送来的指令和数据,从CGROM中找到欲显示的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。控制器还可以根据MPU的指令,实现字符的显示、闪烁和移位等显示效果,LCD显示程序流程如图11-58所示。
2.驱动电动机控制程序
(1)电动机正反转控制 清洁机器人左右轮分别由一直流电动机驱动,需要实现差速驱动。两直流电动机的驱动采用L298N芯片,L298N的逻辑功能见表11-14。这样要实现电动机的正反转就比较简单了,只要将L298的IN1、IN2与IN3、IN4都连接至单片机的I/O,按照表11-14的逻辑功能,通过I/O输出高低电平的组合就可以实现两电动机的正转和反转。
图11-58 LCD显示程序流程图
表11-14 L298N的逻辑功能
注:H—高电平;L—低电平;×—任意。
(2)电动机转速控制 电动机的转速通过PWM方式控制。PWM是指将输出信号的基本周期固定,通过调整基本周期内工作周期的大小来控制输出功率。原理就是开关管在一个周期内的导通时间为t,周期为T,则电动机两端的平均电压U=VCC×t/T=aVCC。其中,a=t/T(占空比),VCC是电源电压。电动机的转速与电动机两端的电压成比例,而电动机两端的电压与控制波形的占空比成正比,因此电动机的速度与占空比成正比,占空比越大,电动机转得越快。
PWM波的产生可以采取延迟和定时器两种方式实现。采用延迟法太占系统资源,所以选择用定时器来产生PWM波。89C52有三个定时器T0、T1和T2,T0用于系统计时,可以利用T1和T2分别产生两组PWM波。但这里我们提出一种只使用一个定时器便能产生多组PWM波的新方法。其原理是设定一个周期时间为T,将这一个周期时间等分成N份(这里取10),每一小段时间为t,t为定时器的定时时间。在定时中断程序中,PWM1和PWM2都先赋高电平,根据需要的占空比,如PWM1为30%、PWM2为50%时,PWM1在三个定时中断后变为低电平,而PWM2继续为高电平,直到五个定时中断后才转变为低电平,取10个定时中断为一个周期,这样循环就产生了两个占空比不同的PWM波,利用这个原理可以产生多组并行的PWM波,如图11-59所示。
按照上述原理可以产生两组可变占空比的PWM波,分别赋给ENA和ENB,就可以控制两直流电动机的转速。具体流程如图11-60所示,temp为一临时变量,tnA、tnB分别为ENA和ENB的占空比,取值0~10之间。则可以实现0%~100%之间以10%变化的占空比。也就是对电动机可以实现10级变速,对于清洁机器人运动的控制已经能满足要求。
(3)电动机反馈控制 在两个驱动轮的齿轮轴的偏心位置分别安装有小直径的磁钢片,在磁钢片上方的某个位置安装有霍尔传感器,用于检测电动机的转角(或转速)。电动机带动的齿轮轴每转动一圈,霍尔传感器便产生一个高电平脉冲,通过检测高电平脉冲的个数,推知电动机的转速和轮子的转角。
脉冲的个数检测通过计数器来实现,STC89C52中有三个定时器/计数器:T0、T1和T2。T0已经用于系统计时,T1被用于产生PWM波,但可以重复用它,限定两者的工作之间不冲突,这样T1和T2分别用来计左右轮霍尔传感器产生的脉冲数。(www.xing528.com)
图11-59 多组并行PWM波产生原理示意图
图11-60 两组PWM波产生程序流程图
3.避障处理
主动回避障碍是清洁机器人的一个基本的安全运动要求,也是机器人能否实现自主作业的关键。
(1)未知环境探测 清洁机器人被置于一个未知环境下,不存在任何经验信息,包括环境大小、形状、障碍物位置等,而且环境中不存在如路标等人为设定的参照物。这就需要避障系统首先要求对清洁机器人四周环境进行探测,显然,单一传感器是不能满足要求的。考虑到传感器价位和技术水平的实际情况,用红外线传感器和碰撞传感器组成传感器网络对周围环境进行探测是较好的选择,红外线传感器有一定的预瞻能力,机械式碰撞传感器性能可靠。利用红外线传感器可以及早地发现远处存在的障碍物,再综合碰撞传感器的探测情况,依据一定的算法,对传感器给出的不确定信息融合,可以得出较为真实的环境状况,从而有利于机器人做出正确的判断。
传感器的布局与探测区如图11-61所示,在机器人的四周各有一个反射式红外传感器,用于四周环境的探测,前方另有两个碰撞传感器,在底盘也有三个红外线传感器,用于台阶检测。图中点画线为清洁机器人需要探测的区域,而机器人实际能探测的区域为图中虚线所围部分,在此之间存在着几片盲区,主要在左后侧和右后侧。清洁机器人在一般正常工作情况下一直前行,只有在遇到障碍物发生了碰撞或检测到了台阶后才需要后退一小段距离。所以这几个探测盲区并不会影响到清洁机器人的工作。
(2)实时避障方法的实现 在室内环境中,不仅障碍物形状复杂、摆放零乱,而且由于人员的走动等经常会形成运动的障碍物,这样,为保证机器人能够在室内环境中及时、安全、有效地避障显得尤其重要。
对于避障问题的研究,每年都会出现许多新的方法或者对传统方法的改进,比较常见的方法有势场法、栅格法等。由于这里所涉及的机器人行为,不需要机器人到达精确的目标位置,因此给出的是实际应用中一种简单有效的基于多传感器的反应式实时避障策略,它具有快速、实时、高效的特点,特别适合在未知动态环境中进行避障。
图11-61 传感器布局与探测区
图11-62 实时避障处理过程图
实时避障处理过程如图11-62所示,单片机首先通过传感器采集周围环境信息,当前红外线传感器检测到障碍物,就减速前进直到发生碰撞就停止并后退一小段距离,然后通过左右侧红外传感器检测两边环境,优先右转,不行左传,再不行就后退,当后退的路被移动的障碍物挡住就延时一段时间再检测周围环境,到延时次数超过一定值,即总延时时间超过一定值(如5min)后,仍然不行时就认为机器人进入了一个特殊状况,启动报警。另外,当底盘的任一红外线传感器检测到台阶时,启动中断程序,选择后退,防止跌落。
另外,图11-62中点画线框内部分的转向选择因路径规划的不同会不同,图中只表示一般原则。
4.路径规划
路径规划技术是智能机器人领域中的核心问题之一,移动机器人的路径规划就是要给定机器人及其工作环境信息,按照某种优化指标,在起始点和目标点之间规划出一条与环境障碍物无碰撞的路径。对移动机器人路径规划系统主要的要求是:
1)在环境地图中寻找移动路径,保证机器人沿该路径移动时不与外界发生碰撞。
2)能够处理用传感器感知的环境中的不确定因素和路径执行中出现的误差。
3)通过使机器人避开外界物体而使其对机器人传感器感知范围的影响降到最小。
4)能够按照需要找到最优路径。
对于清洁机器人来说,由于它要完成的是将整个房间清扫干净,这就要求它要将房间的每一个地方都走到,所以这与一般的移动机器人路径规划不同,它要求按照一定的轨迹来运动,同时具有运动的遍历性和不重复性。所谓遍历性是指清洁机器人要尽可能地走遍所有需要清扫的空间,它直接反映了机器人工作的效果。所谓不重复性是指清洁机器人的行走路线应尽量避免重复,它反映了机器人的工作效率问题。
随着商用和家用清洁机器人产业化进程的推进,“遍历”路径规划的研究越来越受到关注和重视。“遍历”是指机器人完全覆盖所有无障碍区域的运动,如扫地机、吸尘器、草坪修剪机和壁面清洗机器人等的运动都具有遍历的性质。遍历路径规划方法是指机器人根据所感知的环境信息,按照某种优化指标在起始点和目标点之间规划出一条与环境障碍物无碰撞的路径并实现需清扫区域的完全合理路径覆盖,即在满足某种性能评价指标最优或者比较优的前提下寻找一条在设定区域内从起始点到终点经过所有可达点的连续路径。
遍历规划可以分为两种:随机遍历规划和完全遍历规划。随机遍历规划即机器人无法直行时就随机转一角度继续直行。该方法无需定位传感器,且算法简单,但效率比较低。有关资料表明:随机规划通常第一遍可覆盖清洁区域的65%,第二遍85%,第三遍92%,第四遍98%,不惜时间的话可以趋向100%。但实际上,由于清洁机器人自带电池,电量有限,完全随机方式的规划覆盖率是十分有限的。目前,家用清洁机器人大都采用此种规划方法。完全遍历规划采用某种性能评价函数来控制机器人的遍历运动,以使性能评价函数达到最优。性能评价函数通常为清洁效率、清洁面积百分率、清洁重叠率、未清洁面积百分比或能量消耗等。
图11-63 四种遍历方式
目前,常见的路径规划方法有:人工势场法、栅格法、模板模型法、人工智能法,这些方法中大多需要较多的内存空间。对于使用单片机控制的清洁机器人来说,要求过于苛刻。对应清洁机器人自身与工作环境的特点,提出四种实用的路径规划算法,分别为:内螺旋式、往返式(犁式)、椭圆式和随机式,如图11-63所示,图中的箭头表示行走方向,直线表示行走路程。
下面主要对内螺旋算法进行设计。内螺旋算法,顾名思义是让移动机器人沿着墙边移动,然后进行内收缩式的清扫。在移动过程中,可以不断根据与墙边的距离调整所走的方向,这样对于在移动中自身坐标不是很确定的移动机器人来说,可以辅助周边的事物对其当前的位置进行调整。
这种路径规划的算法是先让清洁机器人从指定位置沿墙壁及靠墙壁的障碍物外缘按顺时针(或逆时针)绕房间走一圈,自动描绘出工作环境的轮廓。然后按照规划方法来清扫,清扫过程中遇到障碍物时,采用避障算法,具体的算法流程如图11-64所示。
内螺旋式家用自主移动清洁器路径规划算法充分考虑实际工作环境,它有效地提高了清洁器的清扫效率,并且有自动避障功能。但是由于它需要记录整个房间的全局障碍信息,因此需要移动机器人有足够的内存以存放这些信息。
本实例提出的改进的内螺旋算法要求机器人沿墙壁及靠墙壁的障碍物外缘按顺时针方向绕房间走一圈,初步地了解室内的环境,然后从最近的一个墙角按照规划的方法清扫。遇到障碍物则先采用避障策略,绕开障碍物后继续清扫。这种方法简单,很好地满足了遍历性和不重复性的要求,而且提高了效率。
室内智能清洁机器人控制系统源程序清单较长,这里不再列出,有需要的读者可以跟编著者联系。
图11-64 内螺旋算法流程图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。