基于摄像头的最佳道路识别及赛车控制算法 飞思卡尔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于摄像头的道路识别及赛车控制算法
杨运海周祺吕梁
摘要:本文探讨了摄像头在智能车道路识别中的应用,并提出了一种通用的控制算法。在准确采集图像的基础上,利用临近搜索法对有效道路信息进行快速提取,通过分析赛道信息,计算出赛道黑线的走向趋势及赛车当前位置。在充分考虑当前和过去的赛道信息的基础上,对赛道类型进行判断及分类。在综合考虑赛道类型,黑线走向及车当前位置,对舵机的转向和电机的速度进行精确控制。
关键词:图像采集;临近搜索;转向控制,速度控制
1.概述
在飞思卡尔智能车汽车比赛中,路径识别方法主要有两大类,一类是基于红外光电传感器,令一类是基于摄像头。通常,红外光电传感器安装灵活,原理简单,可靠性好,不易受环境光干扰,因而得到了广泛应用,但其对前方道路的预判距离非常有限,不适宜赛车高速行驶。另一类是基于摄像头,与光电传感器相比,其优点非常明显,能提前获取大量前方道路信息,有利于实现赛车的最优控制。但其缺点是图像采集要求有高的AD转换频率,图像处理算法复杂度高,且容易受环境光的干扰。考虑到摄像头的优点远大于其缺点,因此选择了摄像头。以下是摄像头的工作流程图:
图B-1 摄像头工作流程
摄像头控制赛车行驶方案有三大模块:图像采集、赛道信息提取、转向和速度控制。
2.图像采集
考虑到S12的运算能力,我们采用了黑白制式、320*240的CMOS单板摄像头。摄像头出来的是模拟信号,每秒有50场图像,场之间有场消隐信号,行之间有行消隐信号,经过lm1881分离后,可得到场同步信号和行同步信号,作为行中断信号。由于行中断中要采集该行的信号,对时间要求很严格,其中断优先级应比普通中断的优先级高,因此我们选择IRQ作为行同步信号输入口,PT0作为场信号输入口。此外,为保证图像不丢失,我们仅对场信号的下降沿进行捕捉。
图B-2 摄像头视频信号
按照目前车的刹车时的加速度,我们选定图像拍摄最远处为前方1米就足以对速度做出了控制。考虑到前轮到前方20cm为摄像头的盲区,故有效拍摄范围为0.8m,为了保证不丢失起跑线,每2.5cm至少拍摄一行,故一幅图像至少采集32行。为了稳妥起见,我们选择了ROW=45行。摄像头最前方拍摄的宽度为80cm,而黑线宽度为2.5cm,故一行至少采集32,为了稳妥起见,一行采集的点数定为COL=45个点。
正常情况下,S12的AD频率不能超过2M,转化一个点需要14个周期,如果不超频,一行将只能采集8个点(24M主频时)。将分频系数设为0,此时AD 频率为12M。在行采集过程中,我们通过查询方式来判断AD是否转换完成,并对AD转换时间进行了记录,发现记录到的时间恰是期间指令执行一次的时间,这表明,影响一行采集的点数已不是AD的频率,而是执行指令的时间,因此采集过程中不需要查询A TDSTA T0的标志位,只需要通过执行一定数量的NOP空操作指令延时即可。例如采集47个点需要时,每个点的时间间隔是53us/47=1.125us,对应的指令周期数为1.125*24=27。通过反编译知读写等指令本身有13个指令周期,故令加14个NOP指令即可实现。
由于摄像头的角度关系,拍摄是不均匀的,而是前方疏,近处密。为了保证采集的均匀,采集的行之间间隔的行数就不能相同。摄像头的有效行数为285行左右,具体关系如下表:
行采集计数器line 摄像头行计数器row 备注
0 0 每3行采集一行
1 3
2 6
3 9
4 12
5 15
6 18 每4行采集一行
7 22
8 26
9 30
10 34
11 38
12 42 每5行采集一行
……
…… ……
n i*(3*i+15)+(i+3)*(n%6) 其中i=n/6
每i+3行采集一行 图像采样基本思路是行中断服务程序开启行中断,在行中断中对每行的采集作计数,当达到预定的行数时表示一幅图像采集完,此时关闭行中断,置位图像缓冲区已满标志,并对各个技术器进行清零,以准备下一幅图像的采集。具体流程如下图 图B-3 场中断流程图
当黑线位于中心时,将采集到的数据通过串口发送至PC 并利用MA TLAB 还原,对应部分波形如下图,其中,星号表示一行的结束。与示波器的波形对比,采集效果非常好。
图B-4 行中断服务程序流程图
图B-5 采集到的数据(*号与*号之间表示一行)
当车位于起跑线时,拍摄效果如图4所示。
图B-6 46行*47列时起跑线拍摄效果
3.黑线提取
考虑到赛道黑线是连续的一条线,我们采用邻近搜索法将有效黑线段搜索出来,以便对速度和转向进行控制。该算法的最大优点是不易受干扰,只要黑线是连续的就能正确的提取出来。此外其算法复杂度非常低,因为只对有效黑线及其附近的点进行识别,提取一幅图像黑线最大时间(全部有效时)为1.7ms,而采集一幅图像需20ms,除了1/6时间用来采集数据之外,还剩16ms 的时间,足以用来提取黑线及控制舵机和电机了。本算法搜索方向是从底部到前方(即由近及远),其关键之处在底部第一个黑线中心的提取。考虑到稳定性,底部第一个黑点的搜索以相邻3行作为考察对象,并从第二列开始,到倒数第二列,通过比较,找出其最小值,若最小值满足黑线对应的AD值,则第一个黑线的中心搜索完毕,否则重复上述步骤,直到搜索到黑线或图像
的第一行。找到底部第一个黑线中心后,接下来就是在该点的左右共7个点的范围内进行搜索,找出其中的最小值,并一该点作为新的黑线中心,然后重复搜索下去,直到发现所得最小值大于某个值(如50,这意味着最黑的点已不是黑点,即黑线结束),或者黑线的中心已到图像边沿(此也意味着黑线将要结束)。在此过程中,将所得到的黑线中心坐标保存到path数组中,至此图像有效信息已全部提取出来了,详细提取流程图如图5.8所示:
图B-7 黑线提取流程图
原先没有采用三行每列相加,搜索示意图5.9所示,那么如果图像采集出现小问题,连续的黑线在某处断开,那么黑线搜索在该处就停止了,导致有上段黑线信息丢失。为了防止这种情况,我们想到了,在黑线提取之前对图像进行滤波处理,三行每列相加求平均,思想等同于中值滤波。但是如果这样,也就意味着要对图像处理两遍,效率太低了。这样我们想到,不妨在对图像滤波处理的同时也对黑线进行提取,那么就有了现在的提取算法,示意图如图5.10。