您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 基于摄像头的最佳道路识别及赛车控制算法--飞思卡尔
基于摄像头的道路识别及赛车控制算法杨运海周祺吕梁摘要:本文探讨了摄像头在智能车道路识别中的应用,并提出了一种通用的控制算法。在准确采集图像的基础上,利用临近搜索法对有效道路信息进行快速提取,通过分析赛道信息,计算出赛道黑线的走向趋势及赛车当前位置。在充分考虑当前和过去的赛道信息的基础上,对赛道类型进行判断及分类。在综合考虑赛道类型,黑线走向及车当前位置,对舵机的转向和电机的速度进行精确控制。关键词:图像采集;临近搜索;转向控制,速度控制1.概述在飞思卡尔智能车汽车比赛中,路径识别方法主要有两大类,一类是基于红外光电传感器,令一类是基于摄像头。通常,红外光电传感器安装灵活,原理简单,可靠性好,不易受环境光干扰,因而得到了广泛应用,但其对前方道路的预判距离非常有限,不适宜赛车高速行驶。另一类是基于摄像头,与光电传感器相比,其优点非常明显,能提前获取大量前方道路信息,有利于实现赛车的最优控制。但其缺点是图像采集要求有高的AD转换频率,图像处理算法复杂度高,且容易受环境光的干扰。考虑到摄像头的优点远大于其缺点,因此选择了摄像头。以下是摄像头的工作流程图:图像采集赛道信息提取转向控制速度控制image[ROW][COL]Path[ROW]摄像头舵机模块电机模块speedangle图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的频率,而是执行指令的时间,因此采集过程中不需要查询ATDSTAT0的标志位,只需要通过执行一定数量的NOP空操作指令延时即可。例如采集47个点需要时,每个点的时间间隔是53us/47=1.125us,对应的指令周期数为1.125*24=27。通过反编译知读写等指令本身有13个指令周期,故令加14个NOP指令即可实现。由于摄像头的角度关系,拍摄是不均匀的,而是前方疏,近处密。为了保证采集的均匀,采集的行之间间隔的行数就不能相同。摄像头的有效行数为285行左右,具体关系如下表:行采集计数器line摄像头行计数器row备注00每3行采集一行132639412515618每4行采集一行722826930103411381242每5行采集一行………………ni*(3*i+15)+(i+3)*(n%6)其中i=n/6每i+3行采集一行图像采样基本思路是行中断服务程序开启行中断,在行中断中对每行的采集作计数,当达到预定的行数时表示一幅图像采集完,此时关闭行中断,置位图像缓冲区已满标志,并对各个技术器进行清零,以准备下一幅图像的采集。具体流程如下图开行中断图像缓冲区是否空返回是否图B-3场中断流程图当黑线位于中心时,将采集到的数据通过串口发送至PC并利用MATLAB还原,对应部分波形如下图,其中,星号表示一行的结束。与示波器的波形对比,采集效果非常好。延时10us返回判断当前行是否应采集采样视频是否大于阀值30通过指令延时采集列数个点sample_line_cnt++CCD_line_cnt++行数是否为LINE_MAX置位图像已满标志是否关行中断Sample_line_cnt=0,CCD_line_cnt=0是否图B-4行中断服务程序流程图55060065070075080085090035404550556065图B-5采集到的数据(*号与*号之间表示一行)当车位于起跑线时,拍摄效果如图4所示。图B-646行*47列时起跑线拍摄效果3.黑线提取考虑到赛道黑线是连续的一条线,我们采用邻近搜索法将有效黑线段搜索出来,以便对速度和转向进行控制。该算法的最大优点是不易受干扰,只要黑线是连续的就能正确的提取出来。此外其算法复杂度非常低,因为只对有效黑线及其附近的点进行识别,提取一幅图像黑线最大时间(全部有效时)为1.7ms,而采集一幅图像需20ms,除了1/6时间用来采集数据之外,还剩16ms的时间,足以用来提取黑线及控制舵机和电机了。本算法搜索方向是从底部到前方(即由近及远),其关键之处在底部第一个黑线中心的提取。考虑到稳定性,底部第一个黑点的搜索以相邻3行作为考察对象,并从第二列开始,到倒数第二列,通过比较,找出其最小值,若最小值满足黑线对应的AD值,则第一个黑线的中心搜索完毕,否则重复上述步骤,直到搜索到黑线或图像的第一行。找到底部第一个黑线中心后,接下来就是在该点的左右共7个点的范围内进行搜索,找出其中的最小值,并一该点作为新的黑线中心,然后重复搜索下去,直到发现所得最小值大于某个值(如50,这意味着最黑的点已不是黑点,即黑线结束),或者黑线的中心已到图像边沿(此也意味着黑线将要结束)。在此过程中,将所得到的黑线中心坐标保存到path数组中,至此图像有效信息已全部提取出来了,详细提取流程图如图5.8所示:最小值是否小于阈值145?是从底层第Line-1行开始搜索,即i=0将Line-1-i,Line-2-i,Line-3-i三行的每列相加,搜索最小值,i++i大于Line/2?否否搜索到的黑线位置为j0,在j0附近左右共7列搜索,仍然三行每列相加,阈值设为165i++结束是i大于Line?否是图B-7黑线提取流程图原先没有采用三行每列相加,搜索示意图5.9所示,那么如果图像采集出现小问题,连续的黑线在某处断开,那么黑线搜索在该处就停止了,导致有上段黑线信息丢失。为了防止这种情况,我们想到了,在黑线提取之前对图像进行滤波处理,三行每列相加求平均,思想等同于中值滤波。但是如果这样,也就意味着要对图像处理两遍,效率太低了。这样我们想到,不妨在对图像滤波处理的同时也对黑线进行提取,那么就有了现在的提取算法,示意图如图5.10。图B-8一行一行搜索的弊端图B-9三行每列相加搜索的优点实践表明,该算法适应性强,不受外界干扰,做到了人眼能识别出来的黑线都能被它识别出来。外界干扰主要有环境光,赛道污点,赛道交叉(包括非十字交叉),阴影,附近有其它赛道,接缝等等。最糟糕的是,赛道背景也是黑的,但只要黑线比背景黑依然可以识别出来。4.视觉调整摄像头由于视觉的缘故,所能拍摄的区域不是长方形,而是一个等腰梯形。最前方拍摄的范围较宽(75cm),最后方拍摄的范围则较窄(37cm),其关系近似为2倍的现行比例关系。如果拍出来的图像没有进行调整放大,则会造成图像失真,以致可能对弯道误判为直线。故进行放大调整非常有必要,放大比例关系具体为第一行放大2倍,最后一行放大1倍,其余根据线性关系确定放大系数。假设path[0..ROW]是各行黑线与图像中心的偏差,则第i行的偏差应调整为][_2][ibufferpathROWiROWipath-=……公式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所示,由直角三角形的比例关系可得转弯半径近似为:deltahdeltaR222+=……公式B-2图B-14转弯半径计算示意图其中delta为有效黑线水平偏差,即上一节所提到的赛车偏差;h为纵向偏差,即h=k2*(tail-head)。这里k2为像素与长度单位的转换系数。5.4角度计算得到R后,便可求得该点的曲率2221hdeltadeltaRcurve+==。经验表明,直接用斜率hdeltak=也能很好地表征出赛道的弯曲程度,效果与用参数Curve几乎一致,而对于S12单片机来说,计算斜率k要比计算Curve容易多。下表是智能车在不同赛道类型时对应的斜率k的值:图B-15弯道类型位置序列①②③④⑤⑥斜率k0.20.91.52.01.00.2从上表可知,直线部分或小S弯部分,斜率k绝对值不超过0.2,进入转弯时,k大小在0.2到1.0,处于转弯时,k大小在1.0到2.0之间。由于计算斜率k时,考虑的是整幅图像,故斜率k直接反映了当前转弯的整体紧急程度,在转向控制中可作为控制的输入量,而角度angle则作为控制的输出量。采用P控制时,具体关系可如下定义:hdeltaKpangle*=……公式B-3考虑到斜率k或方向偏差delta仅仅反映了道路的趋势,却忽略了车与黑线的当前偏差offset,我们重新对角度控制进行矫正,加上最近一行tail的位置偏差offset,那么公式就变成了:offsetKhdeltaKangle*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抑制或促进转弯,为的是将赛车尽量拉回黑线。所以说,调解两者大小可以很好的控制赛车跑内线的程度。图B-17弯道段控制同样赛车进入S弯道,由于两种偏差的相互抵消,转角非常的小,就如同直线段一样了。如果赛车慢速行驶,舵机会略微转动,幅度不大;但是如果赛车较快的行驶,由于舵机的滞后性,赛车就会直接冲过S弯道。图B-18S弯道控制6.速度控制速度上,k越小,则说明前方的赛道越直,应将车控制在一个较高的速度上。K越大,则说明前方的赛道越陡,相应车应该运行在一个较低的速度上。具体可定义为:MINVkKMINVMAXVV___+Δ-=……公式B-5由于电机有很大的滞后性,采用PID调节容易出现震荡,且响应速度慢,我们采用Bang-Bang控制方法,也就是速度小于预
本文标题:基于摄像头的最佳道路识别及赛车控制算法--飞思卡尔
链接地址:https://www.777doc.com/doc-7215499 .html