中国民航大学三队08[1].8.19 - 图文 联系客服

发布时间 : 星期日 文章中国民航大学三队08[1].8.19 - 图文更新完毕开始阅读

第四章 软件设计

4.1 软件设计总思想

在车的硬件结构完成后,软件设计就成为了挖掘车潜力的主要工具。如果说硬件是车的身体,那么软件就是它的灵魂。好的软件能够充分发挥车的能力并在一定程度上能够克服车硬件上的不足。智能车的软件主要用于信息采集和处理、转向和速度的控制以及相关的控制方法。

4.2 视频信号的采集

车模使用摄像头采集赛道信息,输出量为模拟量的灰度,信号电压的高低对应着图像的灰度,图像越暗输出的电压值越低,反之越高。通过MC9S12DG128的ATD00引脚将视频信号传至微控制器内部的A/D转换模块,将模拟的视频信号转换成8位的数字信号,每转换一次即得到一个像素点。若将像素点组成图像供给微控制器处理,还需知道这些像素点行和列的位置。使用视频分离芯片LM1881,我们可以得到视频信号中的奇、偶场信号和行同步信号。利用这些信号就可以确定当前像素点在图像上的位置,从而可以按序将其存储,组成点阵图像。

将视频分离芯片LM1881分离出的行同步信号和奇、偶场信号分别接至微控制器具有中断功的J0口和J1口,通过设置相关控制寄存器,使接行同步信号的J0口使能,接奇、偶场信号的J1口设置为普通输入口。由第三章可知,行同步信号为负脉冲,在每次换行时出现;奇、偶场信号为频率为25Hz的方波,高、低电平分别对应着奇场、偶场,电平发生变化时表示一场信号的结束和另一场信号的开始。在每次行同步信号中断时用查询方式检测场信号是否发生变化,如果场信号的状态与记录其上一次状态的变量field不同说明场信号发生了变化,此时微控制器内部行计数变量line清零。每有一次行同步信号产生中断,line自增并检测场信号是否变化,当line大于场消隐区中行信号的数量(我们设定line大于42),每隔七行采集一行图像信息,一共采集39行图像,每行采集68点。采集到的像素点按照其所在行和列的位置存放于一个二位数组内,该点在二位数组中的位置即为其在图像中的位置。这样我们可以得到一幅分辨率为68×39的图像。为了提高赛道信息检测频率并充分利用采集图像中未被利用的时间,在采集完

14

第四章 软件设计

一幅图像后利用采集下一幅图像的时间去处理采集完的图像信息,但这样必须占用两块图像存储空间,对内存的消耗比较严重,不过由于MC9S12DG128有8K的RAM。

上述方法的程序流程图如图4.1及4.2所示。

图4.1 图像信息采集程序流程图

图4.2 采集图像信号函数getdot()流程图

4.3 速度信息提取

车模通过对射式光电对管和自制码盘得到速度信息。我们自制的码盘安装在车的后轴上,码盘上有32个等分的齿,车轮每转一圈对射式光电管产生32个脉冲,将光电管输出端直接接至微控制器具有脉冲累加功能的引脚PT3,通过设置相应控制寄存器使得其工作在计数状态,脉冲上升沿和下降沿都计数。通过在等长时间间隔读取计数器的数值(读取后清零),经过简单的计算就可以得到当前车速。为了使所得到的车速满足精度,读取的时间间隔必须足够长,即采集

15

第三届全国大学生智能汽车邀请赛技术报告

频率较低,但过低的采集频率会使得系统不能及时得到速度信息,因此,读取时间间隔的选取必须同时考虑精度和延时两个方面。采用的是摄像头视频信号的场信号作为读取信号,这样不仅可以得到较精确的定时而且可以免去使用定时器中断,因为定时器中断可能会影响视频信号的采集。在每次奇场的开始进行读取脉冲数,即采集时间间隔为40ms,每次计数大约为20~50,对于车模基本可以满足精度。由于每两场读取一次速度信息,也基本可以满足实时性的要求。

4.4 视频信号的处理

采集到视频信号之后,需要从中得到我们需要的赛道信息。首先要从中提取出黑线的位置,然后根据提取出的黑线在得到车相对于赛道的偏移量、赛道的形状等信息,进而控制电机和舵机的运动。

4.4.1 赛道黑线的提取

视频信号经过A/D转换之后,得到八位的数字量像素点。由于摄像头输出的视频信号中有一定的噪声,并且A/D转换也会产生量化噪声,此外光线对采集到的图像也会产生较大的影响。由于赛道底色为白色,赛道中心为黑色胶布,颜色反差很大,因此提取黑线较为容易。

最简单的黑线提取方法为二值化法,即选取一阈值,当像素点值大于等阈值时,将该点制改为1,即为白色;如果该点值小于阈值时,将该点值改为0,即为黑色。这种方法在外界环境光干扰较大或信号噪声较大时,较容易判断失误,因此需要对得到的数据进行去噪。因为要对图像所有点进行分析,需要的处理时间较长。

使用边沿检测法。首先在图像中找到黑线的起始点,因为最后一行离车最近,光线干扰较小,而且黑线在最后一行出现的概率较其它行大,黑线较宽较容易识别,所以要选择从图像的最后一行提取出黑线的起始点。如在第i行找到黑线的起始段后,用黑线左右两边界left和right得到黑线中点center[i]=(left+right)/2,用第i行center[i]点与i-1行该点相比较,如果相差不大,则root= center[i];如果相差较大,则比较i-1行该点左右三个点内的点,找到相差不大的点赋值给root,找不到则结束寻找。找到第i-1行root后,由root向两侧寻找黑线的中左右边界left和right,并由它们得到certer[i-1],以这种方法依次向上找到各行的黑线的中点。下图即为黑线提取的过程,其中蓝色圆圈圈起的为黑线中点,蓝色箭头为向两

16

第四章 软件设计

侧寻找的过程,黑色箭头为向上寻找的箭头,红色圆圈圈起的为与黑线相邻的白色赛道。为增大寻找黑线的准确度,不能只比较相邻两点间的差值,而需要比较三点的差值,在找到边界点后,检测相邻白色区域灰度是否变化不大(这里取了三点,即图中红色圆圈圈起部分),确保能够消除噪声造成的影响。

图4.3 视频数据处理过程

这种方法并不需对图像中所有点都进行比较,只要准确的找到黑线的起始点,就可以在很小的一块区域内寻找黑线,处理的数据量较小,由于不去考虑离黑线较远部分的数据,可有效的滤掉图像上不与黑线相邻的颜色较深的干扰。由于这种方法对黑线起始点准确性的要求很高,因此需要在算法上加强起始点的寻找,确保准确找到起始点。为了提高寻找到的起始点的准确度,在寻找起始点时,不能只考虑一行的数据而是要考虑几行的数据,只在黑色区域长度和宽度都满足一定要求后才开始向上寻找黑线。

4.4.2 十字交叉线的处理

在比赛时,会有垂直交叉的赛道,这样给赛道的识别带来了较大的难度,如果识别不好赛车很可能会走错方向。使用由图像下部至上部寻找黑线的方法,在交叉线所在行时,黑线的宽度会较上一行突然增大很多,此时按照已经寻找到的黑线的斜率来预测出本行上面第四行的黑线中点,如果该点或其周围几点为黑点则直接跳至该黑点继续寻找黑线;如果都不为黑点,则认为该处为曲线

17