微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 智能循迹小车硬件设计及路径识别算法

智能循迹小车硬件设计及路径识别算法

时间:02-14 来源:互联网 点击:

2 图像采集及处理
2.1 图像采集
常用的摄像头视频输出信号是PAL电视机制式,它的工作原理与电视机的工作原理相似:在一定分辨率下,每秒扫描25帧图像,每帧图像含有625行信息,分为奇、偶场,进行隔行扫描,总共每秒50场信号,每场有312.5行信息,从奇数行开始扫描,即依次扫描第1、3、5、7、
9……行,当扫描完奇数场后,再开始扫描偶数场,构成一帧图像。
对图像的采集即是根据摄像头的行信号和场信号对图像模拟量采集。输出信号包括行同步信号,场同步信号,图像时间,以及各种消隐时间。行同步信号代表一行的图像数据扫描开始,场同步信号代表一帧的图像数据扫描开始。要完成图像的正确采集,必须严格遵守时序的要求:当捕捉到一行信号时,开始对该行各点的模拟量进行采集,当下一行信号发生时表明该行采集完毕,需要对下一行的模拟量进行采集。
2.2 图像采集的主要硬件设计
摄像头产品说明上通常会给出有效像素和分辨率,分辨率即为每场信号中真正为视频信号的行的数目。但产品说明上通常不会具体介绍视频信号行的持续时间、它们在每场信号中的位置、行消隐脉冲的持续时间等参数,而这些参数又关系到图像采样的有效实现。因此需要设计软、硬件方法实际测量一下这些参数。
经过测量,所采用的CMOS摄像头每秒能够输出25帧图像信号,每帧分为奇场和偶场,每场包含312线,那么,每条线的扫描时间大约为64 μs。
通常,摄像头横向(行方向)的像素数远多于对单行视频信号A/D采样的点数。真正决定赛车图像采样模块实际横向分辨能力的不是摄像头横向的像素数,而是A/D采样单行视频信号的点数。所以,把摄像头旋转了90°使用,把以前的线信号组合起来,变成行信号,所以在一行的赛道信息上最多采集到312个点,这样就可以满足路径识别的需要了。
摄像头使用12 V的电源供电,所以设计了升压电路,如图5所示。


在方案中,使用LM1881视频分离芯片来辅助采样视频。LM1881提取摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲,并将它们转换成数字电平直接输给单片机的I/O口,可以使用S12单片机I/O口的中断功能来接收这些信号。图6为LM1881的电路图。

引脚1为行同步信号输出端,它输出的信号波形只是输入的摄像头信号在黑屏电位之下的波形的简单复制。引脚2为视频信号输入端,摄像头信号即由此输入LM1881。引脚3为场同步信号输出端,当摄像头信号的场同步脉冲到来时,该端将变为低电平,一般维持230μs,然后重新变回高电平。引脚7为场同步信号输出端,当摄像头信号处于奇场时,该端为高电平,当处于偶场时为低电平。奇偶场的交替处与场同步信号的下降沿同步,也就是和场同步脉冲后的上升沿同步。

3 视频信号的采样和滤波
3.1 视频信号的采样
摄像头每场信号包括312行,即每场会扫描产生312行的视频信号。也就是说,摄像头在纵向上有312像素的分辨能力,这对于本智能车定位系统设计所要求的图像传感精度来说远远够用。为方便设计,忽略奇场和偶场在扫描位置上的细微差别,认为奇、偶场的扫描位置相同。当然,在测试中发现,312行信号并不能够全部使用,其两侧信号并不是有效的视频信号,而312个点显然数量巨大且占用太多的计算时间。所以,每隔4行扫描一次,而排除首尾无效的信号点。一共使用了60行作为需要处理的视频信号,显然对于路径检测来说,已经足够了。而在采样过程中发现,如果不对ATD模块进行超频,则很难采集在有效视野中的多行信号。所以,在把单片机总线频率超频到40 MHz的同时,还需要把ATD模块进行超频,这样可以加快其采样速度,能够在同等的时间内获得更多的行视频信号。视频信号采集后,可以使用单行信号对舵机进行P控制,也可以使用多行信号进行大弯道和S弯的判断。
3.2 视频信号的滤波
拿一行视频信号为例,采集到的60个数据逐个转换为0和1存储到一个一维数组中,这个数组是一个0和1组成的序列,“1”代表白色,“0”代表黑色。通常,由于各种原因,视频信号里会带有杂波,如果不滤除的话,会对路径的判断带来麻烦。所以,编写了滤波函数对视频信号进行滤波,事实证明,这样的滤波函数在时间上完全满足要求,并且滤波很可靠。滤波函数的主要原理是,滤波函数1主要负责把数组中异常的单个杂波信号滤除,如果有一个序列如下:
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
则程序会检测到0所在的位置,并且把它的值取反,而对于只有一个杂波1的序列,此方法同样有效。在函数中一共作了60次循环,如果检测到第i个元素与第i-1个和i+1个都不相同的话,则把第i个元素进行取反操作。这样,使用此函数对行视频信号进行扫描,可以有效地滤除单个杂波信号。
滤波函数2主要负责把数组中异常的两个杂波信号滤除,如果有一个序列如下:
1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
则程序会检测到0 0所在的位置,并且把它们的值取反,而对于只有两个杂波11的序列,此方法同样有效。在函数中一共作了58次循环,如果检测到第i个元素与第i-1个和i+2个都不相同而与第i+1个相同的话,则把第i个和i+1个元素进行取反操作。这样,使用此函数对行视
频信号进行扫描,可以有效地滤除两个杂波信号。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top