系统概述
智能小车系统主要由路径识别、速度采集、转向控制及车速控制等功能模块组成。路径识别功能采用CMOS摄像头,将其模拟量的视频信号进行视频解码后,经过二值化处理并转化为18×90pix的图像数据后送入MCU进行处理;转向控制采用基于模糊控制算法进行调节;而车速控制采用的是经典PID算法,通过对赛道不同形状的判断结果,设定不同的给定速度。该系统以50Hz的频率通过不断地采集实时路况信息和速度,实现对整个系统的闭环控制,如图1所示。
智能小车的图像采集与存储
图像采集模块设计
CMOS摄像头正常供电后,便可输出原始图像的信号波形,它是PAL制式的模拟信号,包含行同步、行消隐、场同步、场消隐等信号如图2所示。但该形式的信号并不能被CPU直接使用,需要加入视频解码芯片如SAA7111,它的功能是将摄像头输出的模拟信号转化为数字信号,同时产生各种同步信号,CPU利用此同步信号将图像的数字信号存储在一个外部FIFO芯片AL422中,这便构成了基本的路径检测模块,如图3所示。
图像数据存储
SAA7111是飞利浦公司一款增强型视频输入处理器芯片,常应用在嵌入式视频应用的高度集成的电路中。工作时,模拟视频图像从SAA7111的4个输入端口中的一个端口输入,经模拟处理后,一路通过缓冲器从模拟输出端输出用于监视,另一路经A/D后产生数字色度信号、亮度信号,分别进行亮度信号处理、色度信号处理。亮度信号处理的结果,一路送到色度信号处理器进行综合处理,产生Y、U、V信号,经格式化后从VPO输出,输出的信号格式有422YUV或CCIR-656(8位)等;另一路进入同步分离器,经数字PLL,产生相应的行、场同步信号HS、VS及像素时钟信号LLC和LLC2等信号,这些信号是实现视频数据采集的依据。SAA7111输出的每帧图像大小可设为720×286,其数据量相对于单片机的处理速度来说是比较大的,较为理想的图像大小是18×45,压缩后的数据量仅为原始图像的0.394%。为了使图像的数据得到有效压缩,可以采用将图像的数字信号存入FIFO中,经过一定的分频处理后便能压缩图像大小,系统所采用的FIFO芯片是AL422B。
为了实现图像数字信号的分频处理,可以分为两种实现方式,其一是软件分频,另一种是硬件分频。对于软件分频来说,系统不需要额外的分频电路,而是单片机利用解码芯片SAA7111输出的控制信号,对读时钟进行分频后再执行实际的读操作,这种方式的缺点是分频工作需要占用单片机资源,影响系统的实时性等性能;对于硬件分频来说,需要加入专门的分频处理电路,在不需要单片机控制的条件下实现图像的压缩,从而在根本上减少了单片机处理的数据量并缩短读取图像的时间。因此该系统采用了硬件分频的方式。
图像去噪与特征提取
图像二值化
图像二值化是数字图像处理技术中的一项基本技术,该系统中由于赛道是由黑色和白色两种颜色组成的,并且背景颜色基本也是白色的,系统的任务是识别出黑色的引跑线位置,由于其图像的干扰并不是很强,因此可以采用二值化的技术作为系统的图像预处理。经过二值化处理将原来白色的像素点用0表示,而黑色像素点用1表示。图像二值化技术的关键在于如何选取阈值通常来说,常用的方法包括有全局阈值法,局部阈值法及动态阈值法。由于赛道现场光线是比较均匀,而且赛道周围的底色基本上都是白色的,所以在该系统设计中采用全局阈值法,可达到算法简单,执行效率高的效果。
二值化阀值选取
在对赛道环境的分析中,我们可以发现黑线部分的亮度是相对比较固定的,其波动的范围非常小,小于20(亮度值最大为255),而白色底板的亮度值变化相对较大一些,但仍能保证其与黑线的亮度值有较大的梯度。因此,可以采用直方图统计法来对其阀值进行自动设定,具体方法如下。首先存储一幅原始图像的所有数据,然后对整幅图像的第一像素点进行统计,最终把第个亮度值所对应的像素点个数统计出来,结果将出现一个双波峰形图,如图4所示。这将能较直接地比较出亮度值集中的区域,以两个波峰的中心位置所在的中点值作为该赛道的二值化阀值。该算法计算的精度较高,能够找到理想的一个阀值点,虽然它执行的时间较长,但是这只是在赛车未起跑前进行的初始化运算,对赛车起跑后的速度完全没有影响,因此该方案是可以采用的。
图像去噪
在车体运动过程中,图像经过二值化后并不会出现太大的噪声,只是在局部出现了一小部分的椒盐噪声,其典型图像如图5所示。在该系统设计中,图像处理的目的是准确地找到黑线的中心位置。由于图像中噪声的面积非常小,并且一般出现在离黑线较远的地方,处理的方法也比较多,可采用中心坐标递推法。
由于该赛道的黑线细分为每一行的坐标后,相邻两行之间的中心坐标值之差是比较小的,经实验测试得其差一般不会超过5,具有很好的递推性。因此可以利用前一行的中心坐标往下递推来求解,具体步骤如下。
(1)由于摄像头近处的黑线拍摄效果较好,不仅黑线的宽度比较大,而且基本不会出现任何噪声,用其作为递推的基准点是非常好的选择。由于这是整幅图像的基准点,因此对其准确性要求比较高,在计算第一行的中心坐标值时采用黑线连续记数法,即只有连续读取到3个或以上“1”时才算有效的黑线,并记录黑线的块数,否则将其清零,最终再查看该行黑线块数是否为1,若不为1则改用第二行图像数据作判断,如此递增直到找到唯一的黑线为止。
(2)以第一次找到的中心坐标为基准,向上一行搜索分布在其左右两侧各10个点这个区间内的黑线位置,然后同样利用重心法求出在该区间内的黑点中心坐标值,并把它作为这一行的中心坐标基准点。
(3)按照步骤(2)逐步往上一行递推,如果遇到全0的行则停止黑线的搜索。图5所示的图像经过该算法处理后得到的图像如图6所示,可见此方法能够有效地消除图像的噪声。