随着计算机和信息技术的快速发展,AGV智能车在运输、仓储等工业领域获得了广泛的应用。特别是随着现代物流业的飞速发展,运输以及仓储成本问题已成为物流企业在成本核算中一个无法忽视的问题,实现产品的零库存是节约成本、提高产品竞争力的目标之一。一方面是为了节约成本,实现零库存;另一方面是为了获得规模效益而不断扩大的储备仓库,要实现不同产品的自动归库和自动出仓,需要一种可以实现自动化操作的智能设备,来完成这些无人化工作,从而实现高效管理和自动控制的目标。AGV智能车恰好可以实现这样的功能。本文基于单片机的原理,探讨和模拟了AGV智能车在仓库中实现对产品的自动归库和自动出仓的工作方式。
1 方案选择及硬件电路设计
1.1 MC9S12DJ128单片机
MC9S12DJ128 MCU是一种16 bit的MCU,其内部主要由MCU的基本部分和CAN功能模块组成。MCU的基本部分主要包括:
(1)时钟和复位产生模块CRG(Clock and Reset Generator)。包括低电流振荡器或是标准振荡器的选择、锁相环时钟频率放大器、看门狗、实时中断和时钟监控器。
(2)存储器包括128 KB的Flash、 8 KB的RAM、 2 KB的EEPROM。具有5V输入和驱动能力,CPU的工作频率可达到50 MHz,并支持单线背景调试模式(BDM),可以在线调试。
(3)29路独立的数字I/O接口,20路带中断和唤醒功能的数字I/O接口;2个8通道的10位A/D转换器、具有外部转接触能力;具有8通道的输入捕捉/输出比较,还具有8个可编程PWM通道,可配置成8通道8位或4通道16位PWM,其每个通道的周期和占空比均可以通过编程独立设置。
(4)具有2个串行异步通信接口SCI、2个同步串行外设接口SPI、Byteflight,Inter-IC总线以及SAE J1850 Class B数据通信网络接口[1]。
为了实现AGV智能车的控制实现无人化操作,硬件电路的设计主要包括路径信息采集分离模块、电源管理模块、舵机控制模块、电机驱动控制模块及速度检测控制电路等。其设计框图如图1所示。
为了方便硬件电路调试、便于硬件电路的分割处理、避免硬件电路可能出现的信号干扰、串扰问题,方便机械结构的设计,本设计采用模块化设计,不同模块之间可以通过屏蔽线或同轴电缆实现信号传输,通过实验,其效果比较理想。
1.2 电源管理模块
本设计中AGV智能车采用7.2 V的电池组供电。常用的直流低压控制电路可采用开关稳压和串联稳压方式。开关稳压芯片的工作效率高但电路有较大的电源噪声,适用于耗电量较大的电路[2]。当电路的电池电压由于消耗变低时,通用的LM7805芯片输出电压就难以保证,容易造成单片机的自复位。另外在考虑到驱动电机有较大的电流,尤其智能车在启动和加速时,可能会造成电池比较大的输出压降。
基于以上的考虑,本设计电源模块的主控芯片分别采用MAX1771CSA和MAX1626ESA,该芯片有较大的电压输入范围,能有效地保证由于电池的损耗输出电压降低而造成的稳压电路的较大电压波动输出。采用MAX1771CSA构成12 V升压电路,MAX1626ESA构成5 V降压电路。单片机主控制电路、舵机驱动、速度检测均需要+5 V的控制电压,而视频采集电路需+12 V控制电压。该电源供电模块设计完全可以满足控制要求。
1.3 CCD视频采集分离模块
本文采用Clarion CC-450型车载前端摄像头,该摄像为NTSC制式,扫描525线30帧/s的图像。CCD摄像头输出标准的视频复合信号,通过行扫描的方式,将图像信息转换为一维的视频模拟信号输出。通过对比S12单片机采集图像分辨率的特点及路径检测所需图像分辨率的要求可以发现,在安装CCD摄像头的时候,只要将其旋转90°,则图像信息也将旋转90°,如图2所示。通过A/D转换器采集的图像信息,水平分辨率与垂直分辨率会发生互换,从原来的水平分辨率低、垂直分辨率高的图像,变成水平分辨率高、垂直分辨率低的图像,正好可以满足道路参数检测的要求。
由于摄像头采集的信号数据量较大,采用单片机本身自带的A/D转换I/O口可能出现转换速度无法满足要求的情况,所以,在本设计中另外采用了1片A/D信号转换芯片ADC1775CIMTC,以满足摄像头信号采集和转换使用。步信号分离芯片LM1881和ADC1775CIMTC的A/D转换可以对视频信号进行采集,从而得到CCD的灰度图像数据,经二值化处理就可以在图像上得到黑色路径轨迹的点阵[3],视频信号通过比较器与设定的值进行比较,从而得到视频电压的二值化。二值化电路原理图如图3所示。A/D信号转换芯片ADC1775CIMTC如图4所示。调节设定电压比较值,将该值设定为视频信号中黑白亮色的分界电压值,以提高输出图像识别效果。摄像头采集电路如图5所示。
1.4 电机驱动模块
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自主寻迹智能车,来实现仓库的无人化管理。通过实验证明,本智能车在这种环境中实现的可行性。基于多传感器信息导航系统在大型仓库管理中实现智能车无人化管理,给工业现场多信息导航智能系统提供有益的参考。