基于摄像头的无人驾驶车辆的道路检测
无人驾驶技术[1].已经成为汽车行业的热门话题,为了促进该技术的进步,“全国大学生智能汽车竞赛”邀请大学生们以模型车为平台,制作一辆能在特定赛道上自主寻迹的智能车[3]来参赛。早些年,大家用飞思卡尔公司的16位芯片XS128[4]作为智能车的控制芯片,但由于处理速度不够,严重影响智能车的行驶速度,现在都普遍使用32位处理芯片了。除了使用摄像头[5]作为主传感器以外,还可以使用电感来检测铺设在车道上的通电导线[6],或者使用光电传感器等作为感知外界环境的传感器,但摄像头传感器有明显的优势,它采集到的信息量更大,有利于后期分析,同时其前瞻最远,能达到1m以上,这为智能车高速行驶提供了保障。
1微控制器与摄像头
微控制器就是智能车的“大脑”,它必须要有足够的硬件资源和强大的计算能力。MK60DN512ZVLQ10芯片是飞思卡尔公司推出的一款基于ARM Cortex-M4内核的32位微控制器,其有144个引脚,采用LQFP封装,且有丰富的可与外部设备相连的接口,在我们的智能车上用到的主要模块有:DMA(DirectMemory Access)模块,用来接收摄像头的信号数据;PWM(Pulse Width Modulation)模块,用来输出信号控制舵机转向以及电机驱动;PIT(Periodic Interrupt Timer)模块,用于设定时间以触发中断程序;UART(Universal Asynchronous Receiver andTransmitter)模块,用来实现微处理器和上位机的数据通讯,方便调试程序。
摄像头就好比智能车的“眼睛”,它为微控制器提供当前的道路信息,可将采集到的图像信息实时的传给微控制器进行处理。OV7620是CMOS数字摄像头,供电电压低,只需要5V,且功耗较低。OV7620的引脚主要有场中断信号VSYNC引脚:用来判断是否一幅图像已经开始;行中断信号HREF引脚:用来判断是否是一行图像的开始;数据输出口Y0-Y7引脚:用来输出摄像头的图像像素数据;PLCK像素同步信号引脚:一个周期表示一个点的像素值传到Y0-Y7 引脚;电源5V引脚和接地GND引脚为摄像头供电。
图1 OV7620与K60的接口电路图
OV7620与K60的引脚连接如图1所示,行场及像素中断信号分别于K60的外部中断触发引脚PTB3、PTA5和PTE5,数据输出口Y0-Y7引脚接到K60的普通IO口PTD0-PTD7。
2道路图像的采集
为了减少外界环境的影响以及提高智能车的识别效率,我们采用蓝底白道黑边的道路供智能车行驶。如图2所示。
图2 智能车行驶的道路
摄像头采集的图像信息是用二维阵列表示的,其中二维阵列的每个元素表示图像的一个像素点的灰度值。对于OV7620摄像头,我们可以根据场中断信号VSYN、行中断信号HREF、像素中断信号PCLK的波形来采集图像信息。用示波器查看以上三个中断信号的波形,可以看到它们的时序关系如图3所示。
图3 OV7620中断信号时序关系图
可以测得以上三个信号的周期分别是16.48ms、63.58us(只有高电平表示像素点的灰度值输出,大约占时47.4us)、73ns。因为1s/16.48ms=60.6,16.48ms/63.58us=259,47.4us/73ns=649,所以OV7620摄像头的分辨率可以达到标称的640*240,同时其帧率为60帧/s。
针对智能车的图像采集来说,60帧/s的帧率是足够的,但640*240的分辨率包含的数据太多,会增加微处理器的计算量,在保证图像清晰度的前提下,我们使用320*200的分辨率就够了。对于行数,我们采用隔行采集的方法,可以在原有的640行里只将320行的数据存到微处理器;对于列数,我们根据像素中断信号PCLK,将每行的前20个和后20个数据都舍弃,只存储中间的200个数据即可。这样就可以采集到合适大小的道路灰度图像,如下图4所示:
图4 道路灰度图像
3路径识别
路径识别就是根据摄像头传回来的图像信号,分析道路信息,进而计算出智能车的行驶轨迹。
常用的边缘检测算法主要有直接边缘检测算法和跟踪边缘检测法。
3.1直接边缘检测算法
白色车道的像素值明显要大于蓝底黑边的像素值,所以可以根据实际环境设置一个合适的阈值,将原图像二值化成只有车道是白色,而其他背景全为黑的图片,如图6所示。基于二值化后的图像,采用逐点比较的方法,从最下面一行最左端的第一个数据点开始依次向右进行作差。如果第i个数据点与第i+1个数据点的差值等于255(黑白像素的差值),则把第i点的位置标记为a,如果差值为0,则继续向右进行。找出a的位置后继续向右做差比较,如果a+j个数据点与a+j-1数据点的差值等于-255,则把第a+j点的位置标记为b,如果差值为0,则继续向右进行。那么左边界黑线的位置可以认为就是a,右边界黑线的位置可以认为就是b,则车道的中心坐标为(a+b)/2。直接边缘检测算法的缺点是要对每行的每个像素点都进行计算,这对于K60微控制器来说负荷比较大,占用过多的系统资源,不利于系统性能的发挥。算法示意图如图5所示。
图5 直接边缘检测法示意图
3.2跟踪边缘检测算法
此算法由直接边缘检测算法简化而来。以左边缘为例,如果已经找到某行的左边缘,由于相邻两行的两侧边缘点都比较接近,那么在寻找下一行的左边缘时,就在上一行左边缘的附近进行寻找。跟踪边缘检测算法大大简化了直接边缘检测算法,不需要对每个像素点进行比较运算,算法简单实际,不需要对整幅图像进行处理,占用系统资源较少,有利于智能车性能的发挥。
3.3十字边缘检测法
但是以上两种方法都需要对整幅图像进行检测,本文采用了一种比以上两种方法更简法的算法。根据算法检索点在图像中的位置将其称为“十字边缘检测法”,如图6所示。
图6 十字边缘检测法
“十字边缘检测法”的算法步骤为:
(1)从图像第0行的中心点依次向第1行,第2行…直到最后一行的中点进行检索,找到第一个黑点A,记A点所在的行为第a行;
(2)从a-n行(n由调试实验确定)的中心点向左检索,找到第一个黑点B,认为B点是左边缘的位置;
(3) 从a-n行的中心向右检索,找到第一个黑点C,认为C点是右边缘的位置;(4) 找到B,C两点在第a-n行的中点,记作点D,D=(B+C)/2;
(5) 认为D点为智能车当前位置,D点与第a-n行的中点位置之差即为偏航量。
根据算出的偏航量计算智能车下一个周期的行驶方向。
如图7若发现A点所在行在足够远处,如第60行以上,则认为是小”S“弯或直道,舵机打舵量变小。
图7 直道和小”S”路径图
将要冲出跑道时。采用”十字边缘检测法“对图像进行检测,如图8若检测到A点非常近外,如20行以内,则舵机打舵量变大。
图8 即将冲出跑道时的图像
十字路口。当智能车将要行驶到十字路口时,会出两种情况。第一种是A点出现在足够远处,如图9,认为是直道或小”S”弯。第二种是A点没有出现在足够远处,但此时,B,C两点必然在图像的左右两端,舵机方向回正,智能车直行向前。其中第二种情况出现的概率非常小,只有进入十字路口之前方向没有调整好时才会出现。
图9 十字路口路径图
4路径识别
本文通过对摄像头智能车的路径识别进行研究,在传统的滤波和二值化的基础上,介绍了三种路径识别方法,包括计算效率非常高的“十字边缘检测法”,利用此识别算法能够极大的节省微处理器的资源,从而缩短了控制周期,提高智能车控制系统的实时性。在此基础上,我们完成了摄像头智能车的制作,如图10所示,基于上述算法的快速性,我们的智能车的最高速度能够达到3.1m/s,平均车速能够达到2.59m/s。
图12 摄像头智能车
最新资讯
-
荷兰Zepp氢燃料电池卡车-Europa
2024-12-22 10:13
-
NCACFE -车队油耗经济性报告(2024版)
2024-12-22 10:11
-
R54法规对商用车轮胎的要求(上)
2024-12-22 10:10
-
蔚来ET9数字架构解析
2024-12-22 09:53
-
4G/5G网络新时代的高效紧急呼叫系统NG-eCal
2024-12-20 22:33