摄像头智能车方案设计
扫描二维码
随时随地手机看文章
传感器电路设计
延续往届的传感器方案,今年仍然采用了CCD作为传感器,但采用了信号质量更佳,黑白对比度更大的Sony系列CCD,当摄像头安装高度为30cm,俯角为30°时,其最大黑白电压差可达到1V。
为了从CCD输出的PAL制式信号中提取赛道信息,秉承硬件二值化的指导思想,将灰度图像转换成黑白图像,由于普通I/O和PAC的操作速度要比A/D快,可提高分辨率和前瞻。通过硬件预处理提取赛道信息,目前有两种主要途径:微分边缘检测和阈值比较检测。
微分边缘检测:通过数据采集程序效率的优化,在总线频率24MHz条件下可以准确捕获宽度1.5ms的黑线信号。并可以达到1200多的行分辨率和很高的中心解析精度。在直道上,由于远处的黑白之间的电压差较小,远处的赛道信息提取不到,得到的预处理图像是不可信的。另外,在近处也经常发生丢失赛道边缘的情况。
数字阈值比较检测 :利用快速A/D采集CCD信号,MCU输出信号作为阈值与快速A/D得到的信号通过数字比较器得到二值化信息。 这个电路的优势在于可以通过MCU输出不同的阈值从而得到良好的信噪比,另外,快速A/D得到的信号可以输入给单片机,硬件预处理效果不佳的时候可以切换到片外A/D模式,使算法更加灵活。但由于单片机的计算能力有限,切换到片外A/D模式之后数据量过大,最终没有采取这种方案。
模拟阈值比较检测 :模拟阈值比较检测与上述数字阈值比较检测原理相似,只是用D/A输出阈值与CCD输出信号进行比较得出赛道信息。该方案可以达到3m的直线前瞻,1.5m的弯道前瞻,但该方案最大的缺点就是受光线的影响较大,如果不事先适应场地光照条件,信号质量难以保证。
最终我们采取了第三种方案,图1是最终版本的模拟阈值比较电路,利用LM1881芯片获得行同步信号和场同步信号使单片机(MCU)与CCD保持同步,采集每行的边沿信息得到赛道信息。
电源系统设计
由于CCD需要12V供电,而且CCD供电电压过高容易使CCD发热,虽然短时间内信号质量将提高,但长时间会使CCD输出信号质量下降,而CCD供电电压过低会使CCD信号质量降低。为了保证CCD的正常供电,12V电路较为复杂且占用电路板空间较大,如图2。
[!--empirenews.page--]
其他部分电路
采用LED、按键及无线发送模块开发的人机界面,提高了调试效率。 使用片外FLASH存储赛道信息,由于高存储速率得到了广泛应用。但FLASH每页的存储量有限,大容量的数组需要分割开之后分页存储,这会导致程序超时。电机驱动采用遥控车用电子调速器作为驱动芯片,加速能力强但控制较为复杂,反转控制延时过长,需要3个控制周期。 速度传感器采用欧姆龙光电编码器,检测精度高,360线,最高转速可达4000rpm。
智能车软件设计方案
图像方面,由于硬件做了二值化处理,单片机得到的赛道信息少而精准,使得图像处理程序变得简练。由于单片机运行时间和存储空间的限制,我们将赛道信息以链表的形式进行存贮。该方法的优点是速度快、占用的存储空间很少,缺点是数据查找较为困难,并且难以利用赛道垂直方向的信息。
预处理
在进行图像处理的过程中,我们首先对每行赛道的信息进行预处理,根据赛道位置和宽度的信息将赛道进行过滤,找到符合要求的赛道位置,并且将这些位置进行存贮,存贮形式同样为链表。接下来图像处理的信息就是预处理得到的这些赛道片段。建立有效片段起始行在得到的预处理赛道信息中首先要找到能够建立赛道的每一段的起始位置。
具体的判断依据: 第一个起始片段是连续三行赛道中只有唯一满足宽度限制的赛道片段,这些赛道片段满足二阶连续性。其余的起始片段是满足以上两个条件并且满足起始片段前的一行不满足起始片段的条件。
在找到的起始片段的基础上进行赛道生长,继续判断如果下一行赛道存在预处理得到的有用信息,再进行以下判断:预处理出的黑线片段是否满足严格一些的宽度条件限制 ;黑线中心是否满足一阶连续性;黑线中心是否满足二阶连续性。是则将赛道标志置位,将赛道中心信息记录,否则将赛道标志置零。
在生长之后的赛道间进行赛道修补,寻找每段生长之后的赛道的起始行与结束行,判断上一段赛道结束行与下一段赛道起始行之间的距离是否超出阈值。没有超出阈值则进行修补,如果修补上赛道则记录赛道中心位置信息,并将修补段赛道的标志置位;否则将赛道标志置零。经过图像处理基本上能够充分得到赛道的有用信息。经过后期对图像处理中阈值的调整基本上解决了误识别杂点的问题。
赛道元素判断
这一届智能车加入了收紧弯元素,由于CCD路径上可能存在的内切特性,导致了在收紧弯部分可能出现车子压出赛道的情况,导致比赛失败。这一元素的出现迫使我们必须在进入收紧弯之前识别出来用于提示的三角形,并且将策略进行相应的变化。CCD有很大的特点就是图像会产生畸变,导致三角形的特点变得不明显。并且三角形之前的坎也会使得赛道信息变得无效,增加了识别三角形的难度。针对这一特点,我们采集了大量图像,并且进行分析,找到了能够较为稳定的识别三角形的方法。
1.从上一行道路点开始向两边,在一定宽度内找边沿,这样可以避免赛道边缘的影响。
2.根据需要,可以做一下图像的梯形校正。需不需要梯形校正,应该根据实际情况判断。
3.三角形的判别是在每个周期都要执行的,需要存储前几行的数据,可以通过设计良好的流程来尽量避免识别三角算法中的重复工作。
4.对于图像失真,可能的处理方法如下: 三角形底边宽度与道路宽度相比有突变,而三角形尖端的宽度与道路宽度是连续变化的,根据这个特征设计算法。正三角形:如果发现宽度突变,那么怀疑可能是正三角;以后判断边线的连续性,直到宽度由大到小,最终与道路连接,且宽度由大到小变化的行数足够多,则可以判断出遇到正三角。倒三角形:如果发现从道路点开始,一定行数内宽度由小到大,并且在最终出现宽度突变,则判断出遇到倒三角。
另一个必须识别出来的元素是终点线。最初的图像识别方法是判断赛道黑线与白线的宽度,如果满足以下条件则认为是终点线: 如果连续两行出现多于一个的黑色片段,进行赛道的寻找。 找到是赛道的黑色片段之后判断左右相邻的黑色片段是否满足终点线黑线宽度的要求。 判断黑线之间的白线是否满足宽度标准。 如果满足以上三个条件则认为是终点线。
控制算法
CCD相对来说有两个优势,一是前瞻远,二是可以一次得到一段赛道的信息从而进行整帧策略的制定。所以控制算法上一定要利用起来整帧赛道的信息,才能够出现优化赛道的效果。我们的整体控制思想是分段进行赛道中点的线性拟合。
由于我们的前瞻较远所以远处图像有些不可靠,所以使用最远有效点以下的5~10行进行拟合。实验结果是车子能够较好的切内弯,并且在连续弯道上能够稳住车身。缺点是车子控制上不是很稳定,总是太过于切内弯而冲出赛道。于是我们又加入了一条对赛道位置进行积分的控制线对控制进行限制,实验结果较好。