基于单片机的AGV智能车的设计
机驱动模块
AGV智能车上采用RS-380SH型驱动电机,为了可靠保证智能车的速度,提高其负载能力,本设计采用2片并联使用的具有短路保护、欠压保护与过温保护功能的MC33887芯片驱动电机,保证电机的驱动能力,实现对速度进行控制。通过将各种状态引入单片机的中断口,使单片机能对外界的异常情况进行实时处理。采用2部分电路对称布置,如图6所示为其中的1片硬件电路。
1.5 舵机控制模块
本设计采用SRM-102型舵机,其响应速度为0.2s/60°。控制舵机的脉冲可以使用S12单片机的1路PWM产生。单片机中有8路PWM输出端口,可以将其中相邻的2路PWM输出级联成一个16位PWM输出。在单片机为24 MHz时,设置级联PWM周期常数为60 000,对应PWM周期为20 ms的脉冲信号,PWM占空比常数为4 500时对应输出为1.5 ms。改变占空比常数可以改变输出脉冲的宽度。另外,脉冲宽度与转角的线性关系计算公式为:
a=(L-1.5)×90°
式中,a是舵机的转角,单位为度(°);L是脉冲宽度,单位是ms。
其转角和脉冲宽度对应关系如图7所示。
测试过程中,发现舵机一定的转角有时间的延迟,时间延迟正比于旋转过的角度,反比于舵机的响应速度,通过分析可知,舵机的响应速度直接影响小车转弯的速度。而且在实际的控制现场,还影响转向的精确度。通过不断的测试发现可以适当抬高摄像头的高度,使其能够探测更远的距离,提前采集弯道信息,提前对舵机给以响应。但同样存在一个问题,摄像头抬得过高会出现采集回来的路径的灰度值偏低,必须通过不断的实验找到一个合适的结合点。
1.6 速度检测模块
本设计采用齿槽圆盘加直射式光电对射传感器构成车速检测电路。通过光电传感器读取齿槽圆盘转动脉冲。传感器输出的电压信号可以由单片机的A/D端口进行读取,其余的输出脉冲信号可以利用单片机I/O端口输入到单片机内部的定时器/计数器模块中进行测量。通过周期读取计数器的计数数值,可以反映脉冲的频率,从而得到车速信息。
假设n为后轴的转速(单位为r/s);N为1个采样周期T内光电传感器记录的脉冲个数;P为齿槽盘的齿数;T为采样周期(单位s)。则:
N=T×n×P (1)
因此小车后轮的转速为:
n=N/(P×T) (2)
经测量,小车后轮直径D=55 mm,则可以得到小车瞬时速度为:
V=π×n×D (3)
固定在后轴上的齿槽盘是1个圆周被分成60个等份的齿槽圆盘。齿槽盘上的1个齿和1个缺口连续通过速度传感器后,速度传感器就会生成1个脉冲信号。经过整形处理有单片机的I/O口对其进行计数捕捉,每捕捉到1个脉冲信号,智能车前进的路程就可用下式得到:
L=1/60×π×D (4)
把D=55 mm代入公式(4)中可以得到:
L=1/60×π×55 mm=2.879 mm (5)
通过测试可以确定,当速度采样周期为0.2 s时效果最佳。如果采样周期太长,则脉冲累加器得到的数量太多,在软件编程时对算法不利。基于上述分析,将定时器时间设定为48 ms,即每隔48 ms定时器就产生1次中断并读取脉冲累加器中的数值。设定经过4个间隔后做1次PID算法来改变电机的驱动信号,进而改变智能车的速度。在PID算法中的检测值(反馈值)由这4次读取脉冲累加器的值平均后得到,其目的在于防止检测信号突变而干扰控制。为了滤除干扰信号,在PID控制算法中加1个滑动平均滤波器。按上述设定定时器设定值和脉冲累加器后,可以推算出智能车的速度表达式如式(6)所示,从而完成对智能车的速度的测量。
V=(L×N)/48 (6)
1.7 键盘显示控制模块
本设计采用的单片机自身带有可用于扩展键盘和显示的I/O口,硬件设计直接采用外置式8针插拔4×4键盘,以及带有字库的外置式点阵液晶显示模块,以方便在调试过程中及时纠正智能车在运行过程中的路径偏差。在实际的控制现场,可以采用无线通信模块来给AGV传输指令,实现远距离操控[1]。
2 系统软件设计
2.1 系统初始化
在系统运行开始时,首先需要进行初始化,初始化主要包括时钟初始化、A/D口初始化、PWM初始化、IRQ初始化以及I/O口初始化。其中,A/D和IRQ在CCD图像采集过程中使用,PWM主要应用在舵机的控制和电机驱动的控制上。
2.2 PID算法设计
舵机转角与电机转速算法从最远的一行图像开始,根据预设的标志位判断该行是否有效。如果不是有效行,则判断下一行,直到找到有效的第1行为止。找到有效行就可以获得中心线的位置信息,继续寻找最后一行有效黑线,据此计算出黑线的斜率。将黑线中心位置及黑线的斜率代入本设计的舵机控制量与中心位置公式,计算出舵机应有的控制量,从而确定相应的舵机转角及电机的转速。计算公式如下:
舵机控制量=比例控制量+积分控制量+微分空置量 (7)
式中,比例控制量根据黑线中心位置乘以比例系数得到,积分控制量根据黑线斜率计算得到,微分空置量则是第K次与第K-1次比例控制量的差值[5]。各控制量的系数值均通过测试选定。
对于电机速度的控制,主要根据在起始时给定智能车的运行速度以及启动后计算出的舵机控制量判断智能车是否行驶在直道上,如果是在直道上则加快速度,否则根据控制量的大小进行适当的减速,以保证智车能在过弯时能更加顺畅和精确。
2.3 CCD图像采集
本设计采用的CCD图像传感器采集图像的帧周期为33.4 ms,行周期为63.6 μs。在智能车行驶过程中需要对采集的图像进行实时处理,并不断进行反馈以对舵机转角和速度进行控制,因此,在采集工程中以半帧为1个采集周期,每8线采集1线,剩余时间执行其他任务。
2.4 图像处理
通过CCD采集获得的是一幅灰度图像,为了确定路径,需要进行二值化并对中心线进行直线拟合。由于单片机要不断地进行图像采集,所以计算时间剩余十分有限,为此进行二值化和直线拟合就需要采用计算量最小的算法来完成。
2.5 图像阈值的确定
由于摄像头采集的图像信息数据量比较大,而且必须是动态实时的路径信息。基于单片机的处理速度和时间,本文采用固定的阈值进行图像的二值化。单片机本身无法进行动态计算,所以需要确定一个比较合理的方法来确定一个固定阈值。本设计利用分割最优阈值迭代算法进行阈值计算[6]。当采集完1幅图像之后进行最优阈值计算,计算完成后将计算结果发给单片机,然后进行下一幅图像采集,如此循环。
在迭代算法中,需要对分割出的图像分别求出其灰度平均值,计算如下:
式中,E{g(x,y)}表示灰度平均值,f(x,y)表示图像二维定义,e(x,y)表示偏差函数。
(8)式、(9)式说明了随着迭代次数的增加,平均灰度值将趋向于真值。因此,用迭代算法求得的最佳值不受噪声干扰的影响。
在计算过程中,首先选择一个近似值作为初始值,然后进行分割,产生子图像;并根据子图像的特性选取新的值,然后用新的值分割图像,经过几次循环,使错误分割图像像素点降到最少。这样做的结果明显优于用初始值直接分割图像的效果,值的改进策略是用迭代算法的关键[7]。具体步骤如下:
(1)选择一个初始值的估算值
通过分析,确定16为图像的固定阈值。实验证明,经过以16为阈值的二值化处理后的图像比较清晰,在实验室光照较好的条件下,没有出现离散斑点,智能车的自主识别效果很好。在软硬件程序的联合调试过程中,在实验室正常灯光环境下,智能车能很好地沿线行驶,在实际的调试中发现如果光线太暗,会造成CCD摄像头采集回来的图形灰度值偏低的情况。针对这种情况,可以尝试采用补光的措施,来满足摄像头对环境光照的要求。智能车控制系统流程如图8所示。
智能车在直线行驶过程中,舵机与前轴夹角为90°,考虑到车辆行驶中偏离路径出现的误差,当其夹角范围在80°~100°范围内时,直接输出舵机的计算值;当检测到的夹角超出此范围值时,为保证智能车的正确行驶方向,由光电传感器进一步检测其行驶路径,并输出计算的舵机转角。
智能车是在预先设置好的路径上行驶。在实际的仓库环境中,由于智能车会有较大的负载,为了保证安全,在智能车出现错道情况时,必须让其强制停止。在到达箱体货物跟前必须减速。所以针对这种情况可以安装其他设备,如红外传感器和行程开关,以保证检测信息足够让智能车安全行驶。
本文通过模拟在大型仓库中,AGV自主寻迹智能车,来实现仓库的无人化管理。通过实验证明,本智能车在这种环境中实现的可行性。基于多传感器信息导航系统在大型仓库管理中实现智能车无人化管理,给工业现场多信息导航智能系统提供有益的参考。