汽车信息化、智能化是当今汽车研究的重点,已经成为衡量各国汽车工业发展水平的重要标志[1],智能汽车作为一种全新的汽车概念和汽车产品,将成为汽车生产和汽车市场的主流产品[2]。而“飞思卡尔”杯全国大学生智能车竞赛由高等学校自动化专业教学指导分委员会主办,飞思卡尔半导体公司协办,并由各个分赛区的承办大学组织。比赛以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性,旨在培养大学生对知识的把握和创新能力,以及从事科学研究的能力[3]。
根据“飞思卡尔”智能车大赛规则要求:使用统一车模,核心控制单元采用飞思卡尔MC9S12DG128CPU。在此基础上,自主构思控制方案及系统控制电路的设计。系统控制电路设计包括:传感器信号的采集、处理电路设计、驱动电机及转向舵机控制电路设计以及各类接口电路设计。控制方案设计包括:控制系统的组成设计、各类算法的设计及优化等内容。系统设计、调试完成后,在规定的、标有引导线的赛道上完成自寻迹行走,其赛道是在白色底板上铺设黑色引导线,以完成时间最短者为优胜。比赛分为光电组和摄像头组。笔者为摄像头组,采用的是摄像头寻迹方式。
智能小车(以下简称小车)的控制系统主要由三大部分组成:传感器信号采集及处理、车速控制和转向控制。由摄像头采集道路信息,经处理分析后识别路径,根据不同的路径决策出不同的速度和转向角度[4-5]。在保证安全的基础上,一方面需要考虑如何提高极限速度,另一方面需要考虑如何提高平均速度,其平均速度的大小最终将决定比赛成绩。分析历届比赛可以发现,整个赛道中60%~70%的长度为弯道,因此,小车弯道行驶速度很大程度上决定了小车在整个赛道上平均速度的大小。本文将针对小车在行走过程中,就如何利用图像数据,给出合理的转向策略进行深入探讨。
就普通驾驶员而言,驾驶车辆行驶在公路上,直道时保持高速运行状态,而弯道时会根据不同的弯道做出合理的决策。一般为先减速,然后在一个比较低的速度下通过弯道,过弯后加速,最终回到直道速度。而在赛车场上的情景则不同,赛车选手轻易不会选择普通驾驶员的转弯策略,而是利用前轮转向带来的向心力并结合赛车入弯前的固有惯性达到快速转弯的目的。对于一辆有视觉的智能小车是否也可以模拟这种高速运动过程,从而赢得比赛?笔者在综合分析视觉图像的特点、舵机模型以及圆周运动的特点后提出了一种可以高速入弯而不必减速或轻微减速、同时又能保证小车不会冲出赛道的安全过弯策略。
1 道路信息提取
要实现一个完整的基于视觉寻迹的智能小车,首先需利用摄像头获取道路信息,然后对采集到的原始图像进行数据处理,以获取赛道中引导线在图像坐标系中的位置[6-8]。
图1为摄像头安装示意图。其中,Z1为摄像头距地面的高度;w为视野场景的宽度,其大小与摄像机安装的俯角和高度都有关系;b为轮间距。对场景中的特征点,只要知道其在场景中的位置,即可计算出该点与小车的相对位置。由上往下延Z轴反方向看,可得到场景平面,如图2所示。其中,场景平面离小车的距离为d,这段距离为盲区,场景平面宽为W,长为H。定义小车的中线为基准线,由摄像头获得的图像即是场景平面。受MC9S12DG128CPU单片机处理能力的限制,选用356×292 CMOS黑白摄像头,将其设置为逐行扫描模式。单行采样106点。根据实验结果,综合考虑各种因素,选取其中64行信息形成一幅64×106的图像平面,用来判断弯道、直道以及弯道位置,从而达到减小计算量的目的。图像如图3所示。
在图3图像平面的基础上,利用参考文献[9~10]中的方法逐行扫描提取引导线位置。对于没有引导线的行将其标记出来并将没有引导线的边界行记为row_sure,这个值记录着64行数据中从第几行开始没有引导线,简称为出界点。得到引导线在图像中的位置,可根据引导线的图像坐标来控制舵机的转角。单行图像数据的图像坐标与其对应的真实场景坐标呈线性变换关系,即每行任意两像素坐标的列差值乘以一个近似固定的比例系数K就可得到真实场景对应行坐标的差值:
ΔXworld=K×ΔXimage=K×(line2-line1) (1)
式中ΔXworld为真实场景坐标中两点的距离,ΔXimage为图像平面对应行上两点的像素坐标的列差值。
利用上面的关系,可以间接测量出小车与目标引导线之间的偏角,如图4所示。若设AB为基准线,即车的中线;AK为引导线;过F点向y轴做垂线,与基准线AB的交点为C,定义C点为基准位置。在三角形AFC中,角β为基准线与引导线之间的夹角:
在理想情况下,控制舵机向左偏转β角度即可让小车追随到引导线。但这样计算角度的计算负担很重,简化参考文献[2]中横向偏差的测量方法,在基准位置固定的情况下,可用CF的长度近似表示角度β的大小:
|CF|=K×β (3)
式中,K为一个比例系数。结合图像平面与场景平面之间的关系,定义CF的长度即为偏差,转化到图像平面为:
err=line1-linem (4)
式中, linem为基准位置对应的列值,line1为同行引导线的列值,err为位置偏差。因此,在实际的软件设计中,不必得到真实场景坐标,可以直接对引导线实际位置与基准位置间图像坐标的差(line1-linem)设计控制算法。如增量PID控制器可设计为:
Δu(k)=u(k)-u(k-1)=KP[err(k)-err(k-1)]+KIerr(k)+KD[err(k)-2err(k-1)+err(k-2)]
式中,KP为比例系数,KI为积分系数,KD为微分系数。Δu为舵机给定的增量[7-11]。
2 转向模型
获得道路的位置信息,即获得了此刻小车的转向角。参考文献[11]中的舵机转向模型,在理想状态下,此刻控制舵机使前轮偏转相应角度即可实现小车对道路的跟随。舵机的转向相当于给车一个向心力,在转角不变时,小车做圆周运动;如果控制驱动电机的PWM脉宽不变,则小车做匀速圆周运动,驱动电机的 PWM脉宽对应的小车速度相当于匀速圆周运动的线速度。如图5所示,设车的侧轮距为b,舵机转角为θ,O为车做圆周运动的圆心,R为外轮所对应半径,则每一个转角对应圆周运动的半径[2]如下:
设控制周期为T,小车当前速度为V,α为一个控制周期T内小车沿圆周行驶的弧度数,则有:
由以上模型可以看出,不同的速度和转角会在一个控制周期T内得到不同的弧度,对上述公式离散化后可以得到:
小车在转弯的过程中,舵机转角受多种因素限制(如:小车转向机构造成的转向的延滞、舵机的时间常数等),是一个渐变的过程,而利用公式(8)进行计算的前提是舵机的方向能随控制量的改变而立即改变。为了简化分析,将舵机模型视为仅具有延滞时间TD的延滞环节而忽略其时间常数。如图6所示,由于TD的存在,速度越大,在滞后时间TD内,小车行走的距离越远。
3 转向策略设计
如图7所示,设小车前方距离D处为弯道,小车此刻速度为V,结合图6小车舵机转向理想模型响应曲线,如果让小车在A点入弯,速度必须满足:
D=V×TD (9)
在图4中,对于基准位置1和基准位置2,由道路信息提取的结果,为了保证A点入弯,基准位置2比基准位置1更早地发出转向命令,需要更大的速度才可以在A点入弯,在保证两位置的速度可以安全过弯的前提下,基准位置2得到了更高的入弯速度,所以更早地得到弯道的信息可以提高入弯速度。同时小车要想快速地入弯,必须将基准位置提到一个与此刻速度匹配的位置,才可以抵消舵机延时带来的附加行驶路径。但并不是说只要将基准位置选得足够远就可以得到很大的入弯速度,答案是否定的。小车的转向为一个近似的圆周运动,不同的速度显然对应不同的行驶半径,即不同的路径。速度快时,半径大;速度慢时,半径小。过快的速度会使小车冲出赛道。竞赛赛道的弯道主要由360°、180°、90°、S型赛道组成。在图8所示的180°弯道中,中间的粗实线为引导线,最外围的实线为赛道边界,曲线1、2、3、4为小车行驶路线。设所有行驶路线有同样的入弯角度,曲线1、2、3为B点入弯,速度不同;曲线4为E点入弯,速度与曲线3速度一致。
显然,曲线1、2、3中曲线3速度为最快,但路径却最长,同时还有冲出赛道的危险;曲线2虽“抄近道”,但速度稍慢;曲线1由于速度太慢而无法过弯。不难看出,其实曲线2、3、4的过弯时间相差并不是很大。但是由于曲线2中,由直道AB入弯时需要减速,过弯后需加速,这段时间却比曲线3、4来得长。经综合考虑,曲线3、4过弯时间最短。曲线3、4中曲线3很显然有冲出赛道的危险,因此曲线4为过180°弯的最优路径。可以看出,高速时提前入弯可以使小车以一个比较高的速度驶过弯道,同时保证了安全而又不会冲出赛道。
对于90°弯道,与180°类似,最优的策略是为保持直道高速行驶,通过上述的提前入弯策略保证安全过弯。
对于S道的进入,可以类推。而对于S道的行驶则应适当降低车速并将基准位置适当降低。如图9所示,最短路径也为最快速度,两者是统一的。真实过程中很难做到让车走CD路线,但是如果能使舵机保持在一个小角度左右调节的过程中则可逼近CD路线。实践证明,高速通过S道时避免剧烈的角度变化给定为最优策略。
综合以上分析,可以得到以下两点结论:
(1) 基准位置距小车的距离与速度呈正比关系。想要不减速入弯,必须改变基准位置,使之可以满足公式(9)。
(2) 速度与转弯半径呈正比关系。保持高速入弯,同时不冲出赛道,提前入弯策略可以有效解决这个问题。
4 策略的实现
由以上分析可知,场景中的基准位置可以近似看成入弯点,并且不同的速度会导致不同的入弯点,也会导致不同的过弯路径。因此,需完成的控制任务是:高速过弯,在入弯前不减速,为了防止冲出赛道还需要提前入弯。可见,需要在与速度适应的入弯点的基础上进一步提前基准位置,即基准位置离小车的前端距离为:
L=V×TD+V×τ (10)
式中,L为基准位置离小车的距离,V为此刻小车的速度,V×TD为抵消延迟时间带来的附加行驶距离,V×τ为提前入弯点的距离。
可以看出,基准位置与小车的距离是一个与小车速度相关的变量,不同的速度需要不同的取值。对于不同的速度将基准位置按照公式(10)设置,这样即可以实现高速入弯。为了得到较佳的入弯点,本策略对图像平面(64×106)做了进一步的处理,针对已经得到的图像平面(64×106),将图像平面平分为10个区域,每个区域求取引导线的平均位置,对于没有引导线的区域使用一个不可能出现的值代替,这样便将引导线信息简化为10行信息表示,记为:average[i],i=1,2,…,10。其中,average[i]记录每行信息中引导线的平均位置的列坐标值,i标表示行值。图10为最终的图像平面。
图10中, row_sure(出界点)用来选择10个点中哪几个点为可用点。average[1]为离车最近的点,随着序号增大,离车越远。在图10的图像平面中,计算偏差改为:
err=average[i]-mid (11)
式中, i< P>
当小车车速很高时,选择较远处的点求取偏差,等效于时间上提前入弯。这样由以上策略分析可知,只要入弯点合适,基本不用减速就可以直接入弯,还可以得到不错的安全系数。当速度处于一个较低水平时可使用最近处的点,即average[1],这样就保证车只有走到弯道处才会转向,不会提前入弯,避免提前入弯带来的冲出内道。
5 实验数据
根据比赛要求,赛道中最小弧度半径不小于0.5 m,在参考历届赛道的基础上,笔者设计了如图11的测试赛道,全长约38 m。实验室测试成绩为18 s跑完全程,平均速度达到2 m/s。
图12为90°弯道过弯图,粗实线为引导线,虚线为赛车实际行驶路线。可以看出,小车实现了提前入弯,这是比较好的路径,有效地节省了时间。
过弯速度的测量,由无线模块每40 ms发回编码器测得的速度脉冲,先由直道加速后入弯得到如表1所示的数据。
由表1可以明显看出速度的变化,其中62为入弯速度,折合成标准速度为2.4 m/s;弯道速度为40,折合成标准速度为1.5 m/s,这个速度很接近平均速度。
图13为360°弯道过弯图,粗实线为引导线,虚线为小车实际的行驶路线。可以看出实现了提前入弯,后半程受舵机最大偏转角的限制,无法继续加大偏转,造成有一些跑外道。
图14为S过弯图,粗实线为引导线,虚线为小车实际的行驶路线。可以看出,小车行驶路线已经很逼近直道了,由无线模块每40 ms发回编码器测得的速度脉冲,先由直道加速后入弯得到如表2所示的数据。
可以看出,S道的速度变化很小,同时弯道速度平均在1.5 m/s以上,很好地逼近了预期的路线。
本文根据转向模型,通过分析过弯路径与过弯速度之间的关系,得到了不同速度对应不同入弯路径和入弯点的结论。利用这个结论,改变控制器偏差计算,达到动态地设置入弯点,快速入弯,尽量做到不减速或少减速,缩短弯道行驶时间,从而提高小车行驶速度的目的。该方法在其他智能车跟随引导线的系统中同样适用,由于其良好的超前预测性能,对于短暂的引导线丢失也可以很好地跟随。