黄锦阳,胡傲,秦浩杰,赵春锋
(上海工程技术大学工程实训中心,上海201620)
随着科学技术水平和生产力发展水平的提高,人们越来越追求智能化,而交通工具对未来社会的发展起着举足轻重的作用,智能汽车则是最重要的一个环节。智能小车系统是智能汽车的一个缩影,两者在信息获取、信息处理、控制系统构成以及车辆整体设计方案方面有着许多相似之处。因此,研究智能小车的必要性显而易见。智能小车主要由核心控制模块、电源管理模块、路径识别模块、车速测定模块、电机驱动模块、舵机等组成。
本文主要研究在使用线性CCD的基础上,由单片机控制自主循迹的智能车。智能车的主控制器为K60单片机,设计智能车各个模块单元的控制,以实现智能车在无人操作下智能循迹,实现自动驾驶。
智能车系统的基本结构可以分为三部分组成:传感器、控制器和执行器。智能小车是以检测车道两边黑线为基础,通过单片机处理信号从而实现对车体能够自主沿着预设的道路路径智能行驶。智能车依靠线性CCD摄像头来获取收集车道信息,信息到智能车的“大脑”K60微型控制器,对信息进行确认和给出相应的反应(沿着最合理的路径循迹);通过安装在车上的编码器检测车速的大小,并采用K60的输出捕捉功能进行脉冲计数从而获取智能车的实时车速;使用脉冲宽度调制(PWM)来控制驱动电机调整电机的功率;要实现对智能小车运动速度和方向的闭环控制,本文采用经典的PID控制算法调节控制驱动电机的转速以及转向舵机偏转的角度。除此之外,为了对获得的图像信息进行实时的分析和处理,本文在小车上安装了LCD液晶显示屏。系统总框图如图1所示。
图1 系统总框图
小车上的硬件总电源由7.2V/2000mAh的镍镉蓄电池提供。因为系统中的各个电路模块所需要的工作电压及工作电流各不相同,所以电源模块中包含有多种稳压电路,目的是将蓄电电池7.2V电压转换成各个模块所需要的相应的电压。其中K60单片机、线性CCD摄像头和LCD液晶显示屏均需要3.3V直流供电,选用LP38690-3.3V稳压芯片能很好的提供稳定的电压。另外,为了保证单片机工作不受其他模块影响,这里采用一块LP38690-3.3V单独给单片机供电。编码器则需要5V直流电压供电,选用LP38690-5V芯片能提供所需要的电压。舵机所需的6V电压由LM2941提供。为了提高智能车的响应速度,保证动力充足,电机驱动模块则由7.2V镍铬蓄电池直接供电。
车道信息采集模块最主要的部分就是摄像头。CCD摄像头的感光度大概比普通CMOS摄像头的高出2-9倍,所以在其他条件相同的情况下,要拍摄同样亮度的图像,普通摄像头的曝光时间将会比CCD的多2-9倍。也就是说,在速度较快的情况下小车用普通摄像头获得的图像将会变得很模糊。并且在图像噪声方面,CCD也比CMOS摄像头更加突出。CCD摄像头全部的感光点都经过一个电荷-电压转换器,因此可以保证几万个感光点的一致性,这就又进一步提高了图像的稳定性。本文采用的CCD摄像头型号是TSL1401,该CCD摄像头包含了128个光电二极管的线性阵列。电路中单片机I/O口直接驱动SI和SLK信号。该CCD的AO输出引脚有内置的增益调节器,所以从CCD的AO口输出的电压不需要经过其他运放,便可以直接接入单片机的AD输入引脚。CCD的电路接口图如图2所示。
图2 CCD电路接口图
常用的电机驱动有两种方式。第一是采用N沟道MOSFET和专用栅极驱动芯片设计,使用MOSFET搭建的驱动模块,虽然输出的电流小,发热量小,但是电路设计较为复杂,可靠性也不高。第二则是采用集成电机驱动芯片,它的优势电路设计简单、可靠性较高。所以本电路设计采用的是BTS7970芯片,它的每一片芯片可以集成一个半桥,这里需要两片BTS7970构成一个全桥。该芯片的安全性主要体现在它在高负荷的情况下工作时,芯片内部会产生较大电流、产生较多的热量,从而导致内部的过热保护电路自动切断电源,使芯片停止工作。使用两片这样的芯片便可以很好地控制电机,实现相应的功能。电机驱动模块的工作原理图如图3所示。
图3 BTS7970结构图
首先是车道中心线的提取,采用硬件二值化的方法,一个周期为20ms。根据光线强弱,设定适当的电压比较值,因为车道黑白分明,通过硬件二值化容易区分车道黑白。通过比较器LP393,如果输出为1(高电平)则为白点,若是输出0(低电平)则为黑点。信号采集时以上一行的中值为本行采集的中点,向两边扫描,若满足白黑白的条件,则这个黑点为这一边赛道边界,如此很容易识别车道,并计算出当前位置。
由于采用CCD摄像头可以获取许多车道的信息,为了选择合适偏差值本文采用加权平均数的方式,选取不同行的偏差值并乘以一个权重并相加得到一个最终的偏差值,这样能够更加客观地反映车道的信息。但是仅仅使用偏差值并不能完全反映车道元素的状况,根据实验数据,本文采用方差的方式来识别一些车道元素,例如长直道路和小S,并分配予不同的控制算法以提高小车的速度。
舵机控制本文采用位置式PD控制算法来控制,在求取了小车在车道的准确位置后,利用位置式PD公式算得控制量,再将控制量按照Servo=P+D公式转换成驱动舵机的PWM模块的寄存器的数值。公式中P为比例项,为偏差量和比例系数的乘积量;D为微分项,为微分系数和偏差量的变化量的乘积。
智能小车在行驶过程中,根据车道信息的改变电机需要随时变速,经典的PID算法对本文的电机控制十分合适,数字PID闭环反馈控制系统如图4所示。
图4 数字PID闭环反馈控制系统图
增量PID算法是数字PID控制经常使用的算法,表达式如下:
y(k)=y(k-1)+△y(k)
其中:
y(k)——第k次输出的控制(信号)值
y(k-1)——前一次输出的控制(信号)值
△y(k)——输出增量(可为正、负数)
△y(k)=kp[e(k)-e(k-1)]+ki·e(k)+kd[e(k)-2e(k-1)+e(k-2)]
其中:
Kp——比例系数
Ki——积分系数
Kd——微分系数
e(k)——第k次采样时的偏差值(采样值与设定值之差)
e(k-1)——第k-1次采样时的偏差值(采样值与设定值之差)
e(k-2)——第k-2次采样时的偏差值(采样值与设定值之差)
上式中有kp、ki、Kd 3个系数需要确定,在实际实验操作中颇具难度,根据之前的钻研结果,可采用如下简化的经验公式:
该式中只包含一个系数,也就是Kp,因此容易在随后的实验中慢慢调整确定。
增量式PID的优越性主要体现在,控制增量△u(k)的确定仅与最近k次的采样值有关,通过加权处理而不需要累加就可以得到较好的控制效果。该算法具备信号锁存功能,系统发生故障时,也可以保持原值不变。
本文从硬件设计、软件算法设计两个方面对基于线性CCD循迹智能车的设计与实现进行了论述。本文采用模块化思想,将智能车各个功能的实现分到各个模块上去,每个模块之间既相对独立又存在一定的联系,进而完成对整个智能小车的控制。经过实验表明,该套系统可以使智能车在两边黑线的白色车道内平稳运行,达到了预期的效果。