摘 要: 介绍了智能车模型系统。以MC9S12XS128微控制器为核心控制单元,通过OV7620数字摄像头检测赛道信息,并对所采集到的图像进行二值化,提取两边黑色引导线,用于路径识别;通过光电编码器检测模型车的速度,使用经典PID控制算法控制舵机的转向和驱动电机的转速。
关键词: OV7620;算法;路径识别;XS128
当今汽车产业发展非常迅速,但随之带来的城市交通拥堵、交通事故也随之增加。有统计显示80%以上的交通拥堵和交通事故是人为原因造成的,随着汽车饱有量越来越多如何解决这些问题就显得十分重要,于是智能汽车算法的概念近些年被提出作为解决上述问题的一种方法。本文介绍了以OV7620数字摄像头来采集路面信息,以XS128单片机作为控制核心,进行图像处理、路径识别并因此来控制电机转速和舵机转向的模拟自动驾驶汽车的研究[1]。
1 系统概述
自动驾驶的智能车应具有良好的自主道路识别能力和稳定性,并能以较快的速度行驶以及稳定的转向能力。本文的自动驾驶智能车系统的设计主要包括以下两部分:(1)自动驾驶智能车控制器的硬件电路设计,调整和改进模拟测试车模的机械结构,最大限度地发挥车模的机械性能。(2)结合软件算法,使小车转向准确、稳定,能够安全通过各种弯道和十字交叉路口,最大限度地模拟现实中的道路。同时在保证可靠运行的前提下,电路设计尽量简洁紧凑,以减轻系统负载,提高自动驾驶智能车的灵活性,并以稳定性为首要前提,实现车辆的快速运行。作为能够自动识别道路运行的自动驾驶智能汽车,信息处理与控制算法至关重要,主要由运行在XS128单片机中的控制算法来完成。因此,控制算法的设计是本文的核心部分。
测试跑道采用普通白色KT板,宽度为50 cm,KT板两边各有约2.5 cm的黑色胶带。如图1所示。
2 系统的硬件设计
2.1 图像传感
目前以图像传感器作为智能车路径识别采集系统,应用比较多的图像传感器主要分为CCD和CMOS两大类。CCD摄像头具有对比度高、动态特性好的优点,但需要工作在12 V电压下,对于整个系统来说过于耗电,并且电路设计较为复杂,成本相对较高;CMOS摄像头体积小,耗电量小,图像稳定性较高,电路设计简单,工作在5 V电压下即可,不用另作升压电路,减少了设计难度。因此,经过实验论证之后决定采用CMOS摄像头。本文路径识别系统的信号采集部分所使用的传感器为Omni Vision公司的CMOS图像传感器,CMOS摄像头又分为数字和模拟两种,而数字摄像头和模拟摄像头的区别在于模拟摄像头在接入单片机之前需要加A/D转换芯片,用来将模拟摄像头采集的模拟信号转换成能被单片机所识别的0~5 V电压。数字摄像头则可以直接将信号线连接到单片机,减少了单片机对A/D转换的编程。本文采用OV7620数字摄像头采集测试跑道的路径信息,为路径识别提供输入信号[2]。
数字摄像头OV7620可以直接输出8路数字图像信号,简化主板硬件电路的设计,总有效像素单元为664(水平方向)×492(垂直方向)像素;内置10位双通道A/D转换器,输出8位图像数据;具有自动增益和自动白平衡控制,能进行亮度、对比度、饱和度、Y校正等多种调节功能;其视频时序产生电路可产生行同步、场同步、混合视频同步等多种同步信号和像素时钟等多种时序信号;工作功耗<120 mW,待机功耗<10 μW,能够满足本系统测试识别的要求。OV7620的有效像素为664×492,但实际处理时无法处理这么多的数据,同时也没有必要处理这么多的数据。通过串口采集图像进行分析论证,采集40行120列作为图像信号输入。
首先将图像通过奇、偶场信号输出,即隔行采集的方法得到一场数据,若是采奇数行称为奇场信号,若是采集偶数行则称为偶场信号。奇场和偶场所采集的图像是一样的,只要用奇、偶其中一场就可以完成系统识别的要求。
一场图像的行数为246行,要从中提取40行作为本文模型车路径识别系统的有效处理行,一场图像的前15行左右为行消隐区,16行之后为有效行。本文以17行做为图像信号采集的第一行,由于OV7620摄像头近处图像看的比较清楚,远处图像看的比较模糊,为了能够更好地反映测试跑道的情况,采取不等间距采行法,即从间隔1行到间隔6行,形成近处采集的行数少,远处采集的行数多,最终所采集行数如表1所示。
列数采用等距采集,采取隔4列提取一列的方式,最终通过行和列的采集得到40(行)×120(列)的图像信号,作为本文模型车路径识别算法的图像输入信号。
2.2 系统整体框图
由以上的分析确定系统的总体方案:采用CMOS摄像头进行路径检测,舵机实现车辆的转向控制,速度闭环控制方式对车辆速度实施精确控制。系统的整体框图如图2所示。
2.3.2 重心调整
汽车在其他要素稳定的情况下,车体重量对于车的加减速性能有着至关重要的影响,因此本文的机械设计中,在布置自动驾驶模型车的传感器支架和设备时,应该尽量减少不必要的配置,使车总重尽量减轻。车体重心高低主要影响车身运动中的稳定性,对于拐弯的平滑性及稳定性有很大的影响。在车体调整以及减轻车体总重量采用以下几点:(1)将测试模型车的前后结合悬挂拆掉,仅保留前后车体连接的金属片,并用胶体加固。这样已经足够模型测试车转向时候的平衡。(2)将车上各种设备尽量布置在车体转动中心上,有利于车体在拐弯时的响应,车辆不易侧翻。比如将电池移动到车子前部,将电路板放在靠后的位置,整车的重心基本上在中间位置。(3)为了降低整车重心,本文严格控制摄像头传感器及其安装架的重量。本文采用了小巧的OV7620摄像头,重量轻但却能够满足采集图像的精度。设计了轻巧的铝合金CMOS夹持组件,便于摄像头的拆卸,并采用了碳纤维管作为安装传感器的主杆,这样不仅重量轻而且刚度也能达到要求[3]。
3 系统电路设计
3.1 电源模块
本文所设计的系统总电源供应来自7.2 V大容量镍镉电池,但是单片机最小系统和一些芯片都需要5 V的电源,SD卡和无线调试模块需要3.3 V低压,伺服电机工作电压范围在4 V~6 V之间,CMOS摄像头经过改装应用5 V供电,驱动电路需要5 V的电源,直流电机需要7.2 V电池直接供电,图5为系统的稳压模块。
3.2 电机驱动
电机控制从控制方法上可以分为开环控制和闭环控制两种。开环控制在用法上比较简单,只需考虑输出,不需要反馈信号,使用比较简单,但是速度控制的精度较低,不能适应不同的环境。另一种为闭环控制,电机的速度控制信号输出由需要的速度和电机的实际转速两者决定,即需要对电机的实际转速进行采集和反馈。这种方法控制精度比较高,对赛道的适应性较高。本文在电机驱动电路和硬件反馈电路上做了多组试验,最终确定了一种硬件的闭环控制方案。根据电子调速器的硬件原理,采用8个mosfet搭建电机驱动电路。电机驱动电路并不使用全桥驱动,而是使用半桥。这种电路结构的好处是它可以比全桥少用一半的MOSFET,或者说在相同体积内可以多并联一倍的MOSFET来提升驱动能力。此外,驱动电路中还有一个需要注意的地方,一般的MOSFET的开启电压至少在4.5 V以上,而负责刹车的MOSFET其参考点与电池正极是连通的,因此其开启电压至少在12 V以上。实际设计中,本文驱动电路使用了IRL2203作为驱动芯片,采用4并联驱动、4并联刹车的形式,使用IR2103作为mosfet driver,用MC34063升压电路,升压至12 V为mosfet driver供电。图6为电机驱动电路。
3.3 速度检测模块
本文自动驾驶智能车在调试中经常遇到速度失控的情况,例如直道速度可以很高,而弯道速度过大就会出现侧滑,最终冲出测试跑道。各种不同的道路组合后速度时常应对迟缓,要想改变这种情况,速度的反馈检测就成为了速度控制的重要任务。
目前测速的方法有很多种,如:霍尔传感器测速、红外反射式光电测速、测速发电机、光电传感器测速等等。通过多次试验,霍尔测速法需加磁钢而且间距不好控制,因此精度不高。测速发电机体积大、不易安装,而且重量大,增大了电机负载,而且额外增加的ADC模块也不适合;而光电传感器检测易受光源影响需加固定光源,因此也不能满足要求;本文最终选择了编码器测速。
4 软件设计
4.1 路径识别
目前智能车使用比较多的路径识别方法是通过确定跑道两边黑线的位置,通过求均值提取中心线的方法进行路径识别,所得到的中心线还需要进行曲率计算来确定是直道还是弯道。这种路径识别算法对图像的质量要求比较高,增加了滤波的难度,同时编程比较复杂,数据运算量也比较大。
本文并没有采用中心线提取的路径识别算法,而是采用“全白”算法,“全白”算法指的是当所提取的图像信息全部为白色的时候,认为是当前路况为直道[4]。
首先将采样的120列图像分为两部分:一部分是0~59,另一部分是60~119。将图像分成左右两个部分,是因为跑道有两条黑线分别在左右两端,这样分割可以保证每一部分各有一条黑线。由于单片机是逐行接收数据,为了提高整个系统的响应速度,没有必要对所采样的40行数据都要进行判断,只需对其中的几行进行判断即可。本文选择判断三行,这样既可以减少图像噪点所带来的信号采集误差,也可以使单片机能够及时处理[5]。
当摄像头采集到原始图像后,本文采取“缩列”的方式来减少梯形失真对整个系统的影响,以0~59列为例,若当前路况是直道,则反映到图像上应该是一条斜线且前端偏向图像中心,所以只要是直道的情况下0~59列上一定有黑线。最终本文采用了“不全列”扫描法,“不全列”扫描法是在0~59、60~119这两部分,只扫描其中的部分列,只要保证该部分列有黑线,即认为该范围内有黑线。最终得出如下数据:在0~59列的左侧图像扫描27~32列,在60~119列的右侧图像扫描75~85列,而行数扫描4、5、6行。
根据得到的行、列数据进行路径识别。首先要先选定一个阈值,本文经过试验得出在阈值=100的时候,OV7620的成像情况比较理想,能够很好地反映测试跑道情况。
4.2 舵机算法
弯道采用双边沿算法,采集到图像中每一行的边沿位置,并利用数组中存取两个边沿,进而利用双边沿实现弯急走外道,弯缓走内道。这样的好处是:在弯急时,由于车转角比较大,车在大多数情况下会贴着内道走,车辆行走的路径的半径比较小,一则转弯的阻力非常大,二则程序中弯道减速非常大,这两者的综合结果是,车转弯时车速非常慢,采用走外道的方法可以减弱这种状况带来的影响。在弯缓时,由于这时车速比较快,车的转角大,车的转弯阻力也不大,转向等状况比较好,可以走内道减少行车路径的长度节约时间。
本文方向采用PID控制,由于积分项会引起滞后,而舵机转向对动态响应性能要求较高,合适的调节比例项也能够很好地保证智能车行驶的稳定性,故将积分系数IK置0。而由于摄像头前瞻较远,不需要通过微分项来提高动态响应能力,加上微分项易受干扰,故将微分系数DK置0。转向控制只使用比例项进行控制。将比例系数PK按智能车速度大小进行分段,速度小时使用小的比例系数,高速时使用大的比例系数,这样在速度较低时能保证智能车不切弯过度,速度快时能提高响应速度[6]。
4.3 控制策略与算法
本文采用增量式PID算法用来控制步进电机(对直流电机也可以采用),其实如果对控制有更高的要求或者干扰因素较多,也可以对PID算法做各种改进,比如用梯形法做数值积分以提高精度,将差分改成一阶数字滤波等。本文在实际调试的过程中,遇到过由于编码器采样得到的脉冲上升下降沿不够陡峭,使得速度采样出现不稳定和失真,但由于这些附加处理比较耗费代码的运行时间,出于代码效率和实际效果的比较,因此本文没有采用这些改进的方案[7]。
本文介绍了基于OV7620摄像头寻迹的智能车算法的研究。该系统以Freescale 16位单片机MC9S12XS128作为系统控制处理器,采用基于摄像头的图像采样获取赛道图像信息,通过边沿检测方法提取赛道黑线,采用增量式PID控制算法,通过速度传感器对小车形成速度闭环的控制。在硬件方面包括了电源分模块供电和驱动电路等部分,软件方面包括“全白”算法、“不全列”算法等,为无人驾驶汽车提出了一种新的思路。
参考文献
[1] 程亚龙.基于CMOS传感器的智能车路径识别研究[J].机械制造与研究,2007,36(5)13-15.
[2] Freescale Sem iconductor, Inc. MC9S12DG128 Device User Guide[M]. 2007.
[3] SHOJI M. CMOS Digital Circuit Technology Prentic Hal1[Z].1988.
[4] 谭浩强.C语言程序设计[M].北京:清华大学出版社(第2版)[M].2003 1-120.
[5] 夏良正.数字图像处理[M].南京:东南大学出版社,1999.
[6] 李绍民.图像传感器OV7620在自主足球机器人中的应用[J].国外电子元器件,2004(10):11-14.
[7] OmniVision Technologies, Inc.OV7620/OV7120 Specification[Z]. 2001.