当前位置:文档之家› 基于摄像头的最佳道路识别及赛车控制算法 飞思卡尔

基于摄像头的最佳道路识别及赛车控制算法 飞思卡尔

基于摄像头的道路识别及赛车控制算法杨运海周祺吕梁摘要:本文探讨了摄像头在智能车道路识别中的应用,并提出了一种通用的控制算法。

在准确采集图像的基础上,利用临近搜索法对有效道路信息进行快速提取,通过分析赛道信息,计算出赛道黑线的走向趋势及赛车当前位置。

在充分考虑当前和过去的赛道信息的基础上,对赛道类型进行判断及分类。

在综合考虑赛道类型,黑线走向及车当前位置,对舵机的转向和电机的速度进行精确控制。

关键词:图像采集;临近搜索;转向控制,速度控制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 32 63 94 125 156 18 每4行采集一行7 228 269 3010 3411 3812 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。

图B-8 一行一行搜索的弊端图B-9 三行每列相加搜索的优点实践表明,该算法适应性强,不受外界干扰,做到了人眼能识别出来的黑线都能被它识别出来。

外界干扰主要有环境光,赛道污点,赛道交叉(包括非十字交叉),阴影,附近有其它赛道,接缝等等。

最糟糕的是,赛道背景也是黑的,但只要黑线比背景黑依然可以识别出来。

4.视觉调整摄像头由于视觉的缘故,所能拍摄的区域不是长方形,而是一个等腰梯形。

最前方拍摄的范围较宽(75cm ),最后方拍摄的范围则较窄(37cm ),其关系近似为2倍的现行比例关系。

如果拍出来的图像没有进行调整放大,则会造成图像失真,以致可能对弯道误判为直线。

故进行放大调整非常有必要,放大比例关系具体为第一行放大2倍,最后一行放大1倍,其余根据线性关系确定放大系数。

假设path[0..ROW]是各行黑线与图像中心的偏差,则第i 行的偏差应调整为][_2][i buffer path ROWi ROW i path −= ……公式B-1 调整后,path [0..ROW]真实体现出了道路的变化及趋势,为接下来对赛道类型的判断及转向、速度的控制奠定了基础。

对于0.8m 圆弧,调整前后对比效果如下图:图B-10 调整前和调整后的图图B-11 真实的图5.赛车转向控制5.1 赛车方向偏差计算(delta)赛车方向偏差可定义为delta=k1*(path[head]-path [tail]),其中k1为像素与长度单位的转换系数。

当赛车进入弯道,如图6.1所示,那么delta很好的反映了弯道的曲率,即弯道越急,delta就越大。

图B-12 方向偏差delta5.2 赛车位置偏差计算(offset)前面提到的方向偏差,反映了道路情况,反映道路的方向。

另外我们采用CCD图像最底部tail的黑线位置距离中心位置的大小,来反映当前赛车的位置偏差,如图6.2所示。

图B-13 位置偏差offset5.3 转弯半径计算(R )正常情况下,车是沿着黑线前进的,这也就是说,车的前进方向是与黑线相切的。

故任意时刻,车与黑线切点对应的转弯半径与车前进方向垂直。

如图5.10所示,由直角三角形的比例关系可得转弯半径近似为:deltah delta R 222+= ……公式B-2图B-14 转弯半径计算示意图其中delta 为有效黑线水平偏差,即上一节所提到的赛车偏差;h 为纵向偏差,即h=k2*(tail-head)。

这里k2为像素与长度单位的转换系数。

5.4 角度计算得到R 后,便可求得该点的曲率2221h delta delta R curve +==。

经验表明,直接用斜率hdelta k =也能很好地表征出赛道的弯曲程度,效果与用参数Curve 几乎一致,而对于S12单片机来说,计算斜率k 要比计算Curve 容易多。

下表是智能车在不同赛道类型时对应的斜率k 的值:图B-15 弯道类型 位置序列 ① ② ③ ④ ⑤ ⑥ 斜率k 0.2 0.9 1.5 2.0 1.0 0.2从上表可知,直线部分或小S 弯部分,斜率k 绝对值不超过0.2,进入转弯时,k 大小在0.2到1.0,处于转弯时,k 大小在1.0到2.0之间。

由于计算斜率k 时,考虑的是整幅图像,故斜率k 直接反映了当前转弯的整体紧急程度,在转向控制中可作为控制的输入量,而角度angle 则作为控制的输出量。

采用P 控制时,具体关系可如下定义:hdelta Kp angle *= ……公式B-3 考虑到斜率k 或方向偏差delta 仅仅反映了道路的趋势,却忽略了车与黑线的当前偏差offset ,我们重新对角度控制进行矫正,加上最近一行tail 的位置偏差offset ,那么公式就变成了:offset K hdelta K angle *2*1+= ……公式B-4 这里k1,k2为待定参数,k1越大,提前转弯量越大,走内线越明显。

而k2越大,则对当前量的看得越重,车沿着黑线跑越明显,走内线程度则相应被削减。

综合考虑了CCD 的拍摄范围及采集的行列数,我们取k1=20,k2=2/3。

这样实现了直线不抖,转弯走内线,S 弯与直线一样直接过。

赛车经过直线,delta=0或非常小,那么offset将发挥作用,控制赛车贴着黑线行驶,如图图B-16 直线段控制赛车经过弯道,delta和offset共同发挥作用,关键在于参数k1和k2的大小,这两个参数只能通过不断的调试获得,前面已经提到了,k1决定转弯大小,k2抑制或促进转弯,为的是将赛车尽量拉回黑线。

相关主题