引言
智能车辆(intelligent vehicle)是一种集环境感知、决策规划、自动行驶等功能于一体的综合智能系统,整合了自动控制、人工智能、信息融合、传感器技术、图像处理技术及计算机等多门学科的最新研究成果,是当前最为活跃的研究领域之一。国外的一些经济发达国家对智能车的研究开始于20世纪50年代,直到20世纪70年代末,智能车辆的研究只是集中在美国、日本及欧洲的少数几个发达国家。从20世纪80年代开始,随着计算机处理能力的提升、自动控制技术越来越成熟、电子科学和通信技术的不断发展,人们对智能车的研究越来越深入,也取得了丰硕的研究成果,特别是在20世纪90年代,智能车的研究深入系统化、大规模化,各式各样的智能车被研发出来,其中最具有代表性的是美国、德国、意大利和英国等国家的研究成果[1]。目前,美国是在智能车辆领域研究最深、投入资金最大的国家。在我国,20世纪80年代国防科技大学开始对智能车辆技术进行研究,清华大学汽车研究所是国内最早成立的主要从事智能车研究单位之一,在汽车导航、主动避撞、车载微机等方面进行了广泛而深入的研究。2000年6月,国防科技大学成功试验了第4代无人驾驶汽车,它的最高时速达到了75.6 km,创国内最高纪录。另外,浙江大学、中国科学院电子研究所、北京理工大学、南京理工大学等各大院校和研究所都对该领域进行了相关研究,并取得了一定的研究成果。这一新兴学科吸引着越来越多的研究机构、学者加入到智能车相关技术开发研究中来,深入地研究智能车辆技术,对推进智能车的快速发展和广泛应用有着非常重大的现实意义。
1 系统硬件设计
以7.2 V的可充电式NiCd电池作为电源,通过稳压,为各个模块供电,核心控制器为MC9S12XS128,以具有良好分辨率和前瞻性的CMOS摄像头OV7620作为传感器,将道路图像信息传送给MC9S12XS128计算处理,提取出道路的中心并判断出道路类型。系统总框图如图1所示。
图1 智能车系统总框图
可靠稳定的硬件电路是智能车平稳快速前行的保障。本智能车系统基于尽量开发MC9S12XS128单片机功能的想法,在硬软件设计电路方面,尽量使其具备更多的功能。本设计的硬件电路主要包括MC9S12XS128最小系统模块、BDM下载调试模块、电源稳压模块、TF卡模块、舵机模块、电机驱动模块、摄像头模块、液晶显示模块、编码器模块、4×4矩阵键盘模块、无线通信模块等等。
1.1 MC9S12XS128最小系统模块
采用MC9S12XS128芯片作为系统中央处理器,MC9S12XS128是Freescale公司生产的一款16位单片机,其运算速度快、低功耗、功能强,总线速度高达40 MHz。在实际设计中,采用了超频,超频到了64 MHz。该芯片作为智能车的核心芯片。
1.2 BDM下载调试模块
BDM(Background Debugging Mode)是摩托罗拉公司支持的一种OCD的调试模式。通过BDM接口可以完成基本的调试功能,例如:设置断点、读写内存、读写寄存器、下载程序、单步执行程序、运行程序、停止程序运行等。为了方便装载程序,将BDM调试模块集成到PCB中。BDM主要芯片是MC68HC908JB8ADW,支持OCD调试模式,具有性能稳定,低功耗等特点。
1.3 电源稳压模块
电源管理是智能车设计中的重要环节,它给系统的各个模块进行供电,可靠的电源设计是整个硬件电路稳定运行的基础[2]。智能车的供电电源采用的是“飞思卡尔”杯智能车大赛组委会提供的可充电式NiCd电池,其供电电压为7.2 V,容量为1 800 mA/h,由于智能车系统各个模块所需的电压不同,因此需要进行电压调节。
MC9S12XS128最小系统模块、摄像头模块、液晶显示模块、编码器测速模块、所需电压为5 V,BDM下载调试模块所用电压为3.3 V,方向控制模块所用电压为6 V,电机驱动模块所用电压为7.2 V。
所使用的稳压芯片有LM29405,AMS11173.3,LM2596ADJ。
1.4 摄像头模块
采用的是CMOS摄像头OV7620,直接输出8位灰度值数字图像。摄像头模块的供电电压为+5 V,摄像头分辨率为640×480,图像采集速度为30帧/s。OV7620的控制采用SCCB(Serial Camera Control Bus)协议。
1.5 电机驱动模块
电机驱动电路如图2所示,BTS7960是一款集成度很高的大电流半桥驱动芯片,该芯片内部集成了一个P沟道的高端MOSFET和一个N沟道的低端MOSFET,由于高端采用P沟道MOSFET,因此避免了电磁干扰,提高了电磁兼容能力[3]。采用这个设计方案是因为由BTS7960组成的电路简单,简化了电路的设计,提高了电路的可靠性,且该电路持续的漏极电流可高达40A,能允许PWM的频率0~25 kHz之间任意变化,因此BTS7960为低电压高电流的PWM调速电机提供了一个较优的解决方案,具有很高的可靠性。
图2 电机驱动
2 软件设计
整个智能车系统利用OV7620采集道路图像信息,再经过图像处理,本文仿真的公路用两条黑线代替车道,拟提取出道路两边的黑线,经过计算,得出道路中心信息,确定智能车行驶路径,将一帧道路的图像分为3个区域,通过判断各个区域的不同特征,如偏差等,判断出当前道路的道路类型,再通过PID环路控制,使核心控制器输出PWM信号,进行方向和速度的控制,实现智能车的智能行驶。
2.1 图像信息提取方法
图像信息的提取包括图像的采集和采集后对跑道黑线信息提取两个部分,图像信息提取是整个系统软件算法设计的基础。OV7620可直接输出8位灰度值数字图像,其时序图如图3所示。
图3 OV7620时序图
其中VSYNC为场同步信号,HREF为行同步信号,摄像头每场像素最高可达640×480,由于单片机的主频超频到了64 MHz,因此单片机不可能采集到每一个像素点信息。而如果图像的信息量太大,很难进行后续的图像处理,并占用很多资源,所以,选择抽样提取32×84的图像信息,方便在液晶上显示图像信息。
首先定义一个数组Image_Data用来存储图像信息,并写场中断函数和行中断函数。场同步信号是每一场开始的信号,采集完一场数据之后,都需要清场中断;行同步信号是每一行开始的信号,在行中断信号到来之后,在行中断函数中对一行的数据进行采集,通过循环规定次数,使之采集到所需的点数。
跑道黑线信息提取在整个智能车系统中起着至关重要的作用,经过不断调试,最终确定用Get_Way函数提取跑道信息,得出最终智能车的行驶路线。
2.2 黑线提取算法
直接利用原始图像逐行扫描,根据设定的阈值提取黑白跳变点;利用仿真道路黑线的连续性,根据上一行黑线中心的位置来确定本行求出的黑线中心是否有效;求黑线中心时,因为近处的黑线稳定,远处黑线不稳定,所以采用由近及远的办法;图像数据量大,全部扫描一遍会浪费很多时间,利用前面已经求出的黑线中心位置判断出黑线的趋势,从而推断出下一行的黑线大概位置,确定出扫描范围,避免整行逐点扫描,节约时间;具体算法流程图如图4所示。
2.3 路径判断与转向和速度调节的PID控制算法
在路径的判断方面,本设计将一帧道路的图像分为3个区域,通过判断各个区域的不同特征,从而判断出道路是直道、弯道。首先根据最远的区域判断道路是否有界,如果无界则表明道路为直道或者小S弯道,有界则表明道路为弯道。分别求出接下来两个区域的中心的偏差值的平均值,如果赛道无界则也要求出最远那个区域的中心偏差值的平均值。根据道路的偏差平均值以及道路的方差,判断道路类型。这个部分需要不断的调试,才能调出最好的效果[4]。
图4 黑线提取算法流程图
2.3.1 PID控制原理
电机控制算法有开环控制和闭环控制两种,从之前的比赛成绩和设计经验可知,开环控制算法对电机的控制效果非常不理想,存在很多缺陷。运用由比例环节、积分环节和微分环节组成的PID控制系统,可以大大改善对智能车系统的控制精度和稳定性,确保系统响应的实时性,采用PID控制算法,不需要针对智能车建立非常精确的数学模型,只要参数匹配合适,就可以实现对智能车电机较好的控制,且PID算法简单异行,稳定性好,多用于控制模型不准的工业领域。因此,本文采用基于反馈控制的PID算法。
比例调节是在系统输入和输出产生一定偏差时,按照给定的比例因子Kp来反映系统此时产生的偏差,并且及时的发挥比例环节的协调作用,以使输入和输出尽量趋于一致,误差尽量小。但是比例作用过大带来的问题是车速的超调和振荡。车速经常出现猛增猛减的现象会使智能车系统变得不稳定。智能车容易因为速度阶跃变化而影响赛道表现甚至会冲出赛道。因此,在智能车速度控制中,找到一个非常合适的比例系数Kp至关重要。
2.3.2 增量式PID控制算法
增大微分项系数可以加快动态系统响应,但容易引起震荡。通常增大比例系数能够减小上升时间,但不能消除稳态误差。增大积分系数能够消除稳态误差,但会使瞬时响应变差。增大微分系数能够增强系统的稳定特性,减小超调,并且改善瞬时响应。
用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数字PID控制器的位置算式模型:
其中,积分放大系数Ki=KpTTi,微分放大系数Kd=KpTdTi,比例放大系数Kp,u(n)为第n个采样时刻的控制,T为采样周期。
由式(1)可得到控制器的第n-1个采样时刻的输出值为:
将式(1)和式(2)相减并整理,可得增量式PID控制算法公式为:
其中,A=Kp(1+TTi+TdT), B=Kp(1+2TdT),C=KpTdT。由式(3)可知,如果计算机控制系统采用恒定的采样周期T,一旦确定A,B,C,只要使用前后三次测量的偏差值,就可以由式(3)求出控制量。增量式PID控制算法与位置式PID算法相比,计算量小得多,因此,在实际中得到广泛应用。
增量式PID算法在速度控制中采取的基本策略是弯道降速,直道提速,将图像经过算法处理后得到的黑线位置和对应的速度PID参照速度处理成二次曲线的关系,如图5所示。在实际测试中,发现小车直道和弯道相互过渡时加减速比较灵敏,与舵机转向控制配合较好。
对舵机的控制采用了位置式PID算法,根据道路中心的位置动态改变PID参数,得到了较好的控制效果,经反复测试,在PID调节中将积分项系数置零,比较稳定性和精确性,舵机动态随动系统对动态响应性能要求更高。更重要的是,在Ki置零的情况下,通过合理调节Kp参数,发现小车在直线高速行驶时仍能保持车身非常稳定,没有震荡,基本没有必要使用Ki参数;微分项系数Kd则使用定值,由于舵机在一般赛道中都需要较好的动态响应能力;对Kp采用二次函数曲线,Kp随黑线的偏离位置成二次函数关系增大,如图5所示。
图5 黑线位置和给定速度实测曲线
3 实物运行
经测试,电源稳压模块电路可靠有效,输出电压均符合要求。测试摄像头的主要通过LCD5110和串口调试,使之通过摄像头采集图像,再将数据传送给MC9S12XS128,经过二值化处理后传送到LCD 110上显示出来或通过串口传送到电脑上用串口调试助手显示,明显可看到赛道的图像。经实物运行,本文设计的智能车系统能有效循迹,快速转弯,具有较好的抗干扰能力,满足设计要求。
结语
本设计用模块化的思想设计了以MC9S12XS128为核心控制器的硬件控制电路,CMOS摄像头作为路径识别的传感器,具有较好的前瞻性,各个模块间协调工作,很好地满足了智能车的控制要求。以PID算法为主要控制策略提出了改进的新算法,根据道路的不同类型采用不同的控制参数,对智能车循迹起到一个良好的预判作用,使智能车能够平滑地行驶,且有效地提升了单片机的处理速度和系统控制的响应速度和精度,所设计智能车能有效循迹,快速转弯,且系统具有较好的抗干扰能力,满足设计要求。