5.1 软件设计思想
5.1.1 软件设计基本思想
在系统设计过程中,为了寻求最优的方法,一定要通过比较多种方法,要做不同的对比试验,从而决定那种方案最优。为了方便高效的移植程序以适应不同的方案策略,系统软件设计始终努力做到功能模块化、参数层次化。
在本系统的软件设计中,功能模块化是指将各部分不同功能的模块严格分开,每一部分完成特定的功能,同时向外提供统一的接口以供调用,这样,系统设计如有变化,只需修改相应的部分即可。系统功能模块可以分为以下几个主要部分:
1、键盘输入和LED输出模块,用于参数调整;
2、定时器模块,用于输出比较定时和输入捕捉测速;
3、PWM模块,用于电机和舵机的控制;
4、ATD模数转换模块,用于视频信号灰度化和电压检测;
5、图像信息提取模块,在灰度化的基础上提取道路信息;
6、决策控制,根据道路信息控制运动轨迹
参数层次化主要处理对象是视频信号和测速信号。它是指将信息处理层次化,即每一层中利用下一层提供的参数进行处理,处理结束后将会向上一层提供格式化的参数,以此可以方便的在每一层中试用不同的算法。系统可以分为以下几层:
1、原始信息提取层:包括视频信号灰度值输入和测速脉冲信号输入,主要功能是将视频信号转化为灰度值,测速部分功能是将脉冲间隔捕获,便于计算速度;

2、预处理层:在图像灰度化过程中利用有限时间对灰度值进行预处理,提取出行黑点左右边界、黑点个数、最黑点灰度值、异常情况记录等信息,测速 部分主要是计算速度,剔出无效数据;
3、路况识别层:根据预处理层提供的本场图像道路信息判断当前路面情况;
4、决策控制层:根据当前路面情况和速度决策电机和舵机的输出量。
5.1.2 软件设计流程
软件设计流程如图5.1所示,主要包括以下几个部分:初始化、图像采集、图像处理、决策控制等几个部分。为了方便调试,在正常的初始化之中加了参数调整部分。
5.2信息处理算法
5.2.1 图像采集处理

图像采集处理部分是系统中最关键的部分,是所有后续工作的前提,采集信息的多少和正确与否直接关系到后续的控制效果。在本次竞赛中就是要赛车以最优的路径、保证可靠性的前提下最快的速度沿着黑线前进。所以在图像的处理中第一步就是判断黑点,本设计中采用了动态阈值[16]的方法。
CCD采集进来的是灰度图像,需要有一个阈值将以便确定黑线位置。由于现场光线和路面情况对图像灰度影响较大,故不能始终用一个阈值来处理图像。本方案采取分割最优阈值的迭代算法对采集到的每副图像进行阈值计算。
在迭代算法中需要对每副图像分别求其灰度平均值,如公式1。

上式说明,随着迭代次数的增加,平均灰度值将趋向于真值。所以由迭代算法计算的最佳值不受噪声干扰的影响。算法描述如下。
首先选择一个近似值作为初始值 进行图像分割;并根据子图像的特性来选取新的值,再用新的值分割图像,经过几次循环,使前后两次值之差的绝对值小于预设的阈值误差范围。算法步骤如下。


其中 是预先设定的阈值允许误差范围,本方案中选为2。算法流程图如图5.3所示。同过实验我们得到这种方法一般经过2,3次就可收敛,不会占用单片机太多的时间。

设计中采用A/D转换视频信号的灰度值作为路面信息来源,但由于视频信号的特点,在每个场周期20ms的时间内,除去场消隐时间1.6ms,其它的时间都有视频信号产生,因此没有大的时间块用来处理图像,尽管LM1881可以提供奇偶场信息,可以此选择单独采集奇场信息或单独采集偶场信息,但这样会使得控制周期由20ms增大为40ms,使得控制的实时性变差。
考虑到标准视频信号行分辨率是312.5,而实际应用并不需要这么高的分辨率,本系统中用到的行分辨率定为34,具体实现方法是每9行采集1行视频信息。这种情况下,在每9个行周期时间内,采集时间只有1个行周期,其它时间处理器为空闲状态,但这些被采集时间隔开的时间是均匀分布在场扫描正程的18.4ms里边的,如果设计得当,可以用来对采集到的图像进行处理。因此对灰度化图像的处理是镶嵌在图像采集过程中的。
图像采集过程中,首先是等待场同步信号[7],场同步触发系统中断表明新的场图像的开始,但场同步出现之后的信号并不马上就是视频信号,中间有一段时间的场消隐信号,因此需要在场中断中开启用于除去场消隐时间的定时器;待场消隐时间过后,若是间隔行数达到9行则开始采集行信息,否则转入图像处理程序,间隔行数满足要求后开始采集新的行信息;开启A/D转换,同样之前还有一段时间的行消隐时间要滤除;判断一行采集完成后返回图像处理程序;若采集行数达到要求,则本场图像采集结束。图像采集处理流程如图5.2所示。
图像处理过程将得到被采集路面的信息,这些信息包括路面每行的黑点左右极限位置、黑点个数、最黑点灰度值等重要参数,为后续的处理提供依据。其算法流程如图5.3所示。
5.2.2 测速算法
在制作霍尔式测速计的时候,已知车轮周长 ,车轮上均匀分布 个磁珠,车轮每转一圈,将会产生 个脉冲,MC9S12DG128B的定时器模块提供输入捕捉和输出比较功能,这两种定时器使用方式都可以测定速度。 利用输出比较的定时功能,可以记录在一定的定时时间 内的脉冲个数 ,由公式7即可得到车速 :

5.3 道路识别算法
5.3.1 道路形状

如图5.5所示,比赛道路主要分为直道、急转弯、“S”形弯、十字交叉四种形状,虽然比赛中有小于 的上下坡,但配合控制算法,上下坡可以近似认为是直道。为了高效的通过这些形状的道路,首先必须正确识别不同的道路形状。
5.3.2 道路形状识别
在CCD摄像头已经准确识别道路黑点中心的基础上,利用所提取的信息,可以分辨出当前路面的形状。
具体方法是均匀选取若干行的黑点中心位置,以4行为例,如图5.6所示:


这样计算出来的黑点中心的平均位置可以用来分辨出不同的赛道,而且其优点是,如果区分各种图形的阈值设定得当,这种方法能够将图中所示的“S”形弯识别为直线,这正是我们想要的结果。 与视场中心View_Centre的绝对值之差Offset表示当前赛道的弯曲程度,其值的正负表示是向左弯曲还是向右弯曲。值越大,说明拐弯半径越小,若遇急转弯,则Turn_Flag置位。
实际试验中发现,以上的算法对于“S”形弯、直道、弯道区分效果理想,在车体平行驶过十字交叉路段时(如图5.7中a图所示),也可以正确区分十字交叉路,但恰当小车经由弯道末端驶出而车身未与跑道平行时,此时视野内的十字交叉就会变形为斜十字交叉,如图5.7中b图、c图所示。
此时再用平均黑点位置算法就会引起较大误差。观察此时的道路灰度值发现在斜十字交叉的情况下所采图像信息中每一行中将会有两处不连续黑点,而非斜十字交叉的图像中每行中的黑点都是连续的,中间没有间隔。部分数据信息如表5.1、5.2所示。

每三行数据用来存储一行图像信息,除去每三行的第一个和最后三个数据,剩余数据中处于B0-C0之间的象素点都被认为是黑点,其余为白点。通过两组数据的对比发现斜十字交叉时图像黑点是不连续的,而其它情况下黑点位置是连续的,这也是前面图像信息处理时记录下每行黑点的最大间隔Max_Interval的缘故。若某行的黑点是连续的,则其相邻黑点最大间隔应为1,否则认为黑点是不连续的,若统计发现某场图像里边具有不连续黑点行数超过一定数值,则认为此时为十字交叉路径,并设置十字交叉标志位Cross_Flag为1,否则Cross_Flag为0。试验结果这种算法可有效提高小车对十字交叉的分辨能力。
综上所述,道路形状识别算法流程如图5.8所示。

至此,程序中已识别出十字交叉、急转弯、直道、“S”形弯等道路形状,并且黑点位置等信息已提取出来。
5.4 决策控制算法
智能车控制的主要目的,是使模型车在封闭跑道上稳、准、快地运行。在已知当前路面信息和速度的前提下,根据控制算法可以计算电机和舵机的输出量。 智能车控制系统为双输入双输出系统,其中视频信号和速度反馈为输入,电机和舵机为输出,这足以构成一个闭环控制系统。作为经典的常用控制方法,PID控制法具有偏差小,无差度高,调节时间短的优点,而且如果各参数调节得当,超调量也能达到要求的范围。故本方案输出量控制采用PID算法的思想。
5.4.1 速度控制算法
实际控制过程中,速度控制量输出的原则是根据当前测速和路面弯道情况设定安全速度,所谓安全速度就是指以此速度可以安全过弯,不需减速,这一系列的安全速度由实验测得。如果速度反馈Speed_Feedback 小于设定速度Speed_Set则加速、两者相等则保持现状、反馈速度大于设定速度则减速。加减速算法采用公式11[12]:

5.4.2 舵机控制算法
舵机的控制决定了小车运动的轨迹,为了尽可能提高车模运行平均速度,针对不同的路面需要对运动轨迹进行优化。对于急转弯路面,应尽量靠内道行驶,而“S”形弯应该取直穿过。理想运动轨迹如图5.9所示:
为了简化问题,可以将小车的运动规律进行简化:车体近似沿着道路中心线运行时,改变舵机输出转角即可改变小车前轮转向,并改变车体与道路中心线的相对位置,而位置的改变量近似等于舵机输出转角随着距离的积分,如公式12所示:

从这个简化车体运动模型可以看出,小车与道路中心线的相对位置是舵机输出转角的积分量,舵机的控制规律可以采用比例负反馈控制,使得舵机输出转角大小正比于模型车与道路位置偏移量,且方向相反。因此本方案采用以下方法对小车的舵机进行控制:首先,在采集来的图像上建立一定的直角坐标系,通过对参考行黑点中心位置进行分析,获得前方路径的斜率 ,以及小车所在位置 。然后根据路径斜率 及小车位置 的值,来设定小车应有的转弯角度,将道路斜率信息加入到控制率中等效于控制中增加了微分项。

5.4.3 异常情况处理
实践中发现,小车运行过程中最常见的异常情况分两种:一种是十字交叉,尤其是过弯后立刻有十字交叉的情况,小车路径选择错误;另一种是速度过快运行时,遇到急转弯情况,小车拐弯不及,摄像头“看”出跑道,导致视场内失去黑点导引。这两种情况也是制约小车行驶速度提高的主要因素。 两种异常情况的路况识别方法已在前文讨论过,在路径识别算法中正确识别出这两种异常情况后,会有标志变量Cross_Flag和Turn_Flag的置位,同时标识行信息具有两段黑点或没有黑点的行为无效行,否则称为有效行。
十字交叉情况下,视野远端图像信息是不连续的两段黑点,因此无法判断哪一处黑点是前方引导黑线,因此确定路径斜率时,舍弃无效行,只利用有效行信息来计算。急转弯导致视场内无黑点时,通常原因是舵机转向力度不够,这种情况下采用保持原转向不变并加强拐弯力度的处理方法。
5.4.4 控制算法小结
安全速度的选择、舵机输出转角与PWM信号占空比的对应关系是电机和舵机控制的关键。安全速度既不能过大,也不宜太过保守:安全速度过大,车体容易冲出跑道,违反比赛规则;安全速度设定太过保守,小车性能得不到发挥,也不适合比赛用途。而异常情况处理是提升速度的关键,若处理不好,十字交叉路径选择错误或者急转弯冲出跑道,两种情况都会迫使安全速度降低,反之安全速度就可以大大提高。综上所述,模型车运动控制过程可用图5.10流程表示。



