第7章 智能汽车设计实践—— 摄像头型设计
第7章 智能汽车设计实践——摄像头型设计 两种检测方案的比较—— 表7.1 两种检测方案的比较 路径识别方法 优 点 缺 点 红外光电管 第7章 智能汽车设计实践——摄像头型设计 两种检测方案的比较—— 路径识别方法 优 点 缺 点 红外光电管 传感器方案 1.电路设计相对简单 2.检测信息速度快 3.成本低 1.道路参数检测精度低、种类少 2.检测前瞻距离短 3.耗电量大 4.占用MCU端口资源较多 5.容易受到外界光线影响 摄像头传感 器方案 1.检测前瞻距离远 2.检测范围宽 3.检测道路参数多 4.占用MCU端口资源少 1.电路相对设计复杂 2.检测信息更新速度慢 3.软件处理数据较多 表7.1 两种检测方案的比较
第7章 智能汽车设计实践——摄像头型设计 图像采集传感器可分为CCD型和CMOS型,其中CMOS型摄像头工艺简单,价格便宜,对于识别智能车赛道这样的黑白二值图像能力足够,因此,我们以下主要以CMOS型摄像头为例,介绍基于摄像头方案的智能车详细设计。
第7章 智能汽车设计实践——摄像头型设计 7.1 机械设计 1 7.2 硬件设计 2 7.3 软件设计 3
7.1 机械设计 同光电管方案比起来,摄像头方案机械设计的不同主要体现在摄像头传感器的安装上,而舵机及车速检测单元的安装基本同光电管一样。下面我们将重点介绍摄像头传感器安装这一问题。 摄像头的作用是检测道路的信息,相当于人的眼睛,其视野范围和前瞻距离决定了小车的过弯性能和速度。所以摄像头的安装方式要适当。摄像头的安装方案有两种:一种是正向安装,另一种是旋转90°安装。
7.1 机械设计 图像采集是智能车设计的一个技术难点。普通图像传感器通过行扫描方式,将图像信息转换为一维的视频模拟信号输出。由于S12的A/D转换器采集速度较低,进行10位A/D转换所需要的时间为7 μs。这样,采集的图像每行只有8个像素,图像的水平分辨率很低。倘若在此基础之上就进行智能车的路径识别,则很可能漏检宽度仅2.5 cm的黑色引导线,从而导致某些控制决策因无法获取足够精度的路径信息而失效。但同时,S12每场图像大约可以采集300行左右的图像信息,故图像的垂直分辨率相对较高。
7.1 机械设计 而按照大赛采用跑道的形状特点,这些跑道都是由直线和圆弧组成的,检测车模前方一段路径参数,只需要得到中心线上3~5个点的位置信息就可以估算出路径参数,如位置、方向和曲率等。通过图像中的若干行信息就可以检测出这排点的位置,故所需的检测图像应该是水平分辨率高,垂直分辨率低。
7.1 机械设计 倘若正向安装摄像头,尽管水平方向的视野开阔一些,不至于迷失黑线跑出赛道。但实际采集到的图像是水平分辨率低,垂直分辨率高,与所需的检测图像要求刚好相反。 为了保证不漏检黑色引导线,正向安装就需要提高水平方向的分辨率,这就需要大大提高MC9S12DG128单片机的A/D采样频率,导致MC9S12DG128超频使用。单片机超频使用会影响系统稳定性,容易发生程序失稳的现象。 除此之外,由于正向安装采集到的图像宽度大,长度短,致使智能车容易看到赛道边缘以及地面,产生较大的干扰,而且对底端的图像信息丢失也过多,大大影响过弯速度。
7.1 机械设计 倘若将CMOS摄像头旋转90°安装,输出的图像信息也将旋转90°,通过S12的A/D转换器采集的图像信息,水平分辨率与垂直分辨率会发生互换,从原来的水平分辨率低、垂直分辨率高的图像变成水平分辨率高、垂直分辨率低的实际图像,正好符合道路参数检测模型的要求。 在同样保证90 cm的前瞻下,底端的宽度有22 cm左右,顶端65 cm,可以达到避免地面干扰的效果。同时底端仅有不到20 cm的图像丢失,而且摄像头的俯角相对较小,可以克服反光的问题,这样过弯道的时候会有安全保障。
7.1 机械设计 此外,摄像头所架的高度一定要适宜。架得过高会导致小车的视野过大,看到的黑线变得太细,还会导致智能车的重心太高,使智能车快速过弯时容易翻车;架得太低又会影响前瞻,带来反光的问题,影响采样。合适的高度要既满足小车的重心要求,又保证前瞻距离。 安装摄像头的底座和支杆应使用刚度大、质量轻的材料,以防晃动。
7.2 硬件设计 在摄像头方案中,由于车速检测模块、舵机控制单元及直流驱动电机控制单元同光电管方案相同,以下对路径识别单元、HCS12控制核心及电源管理单元做简要介绍。
7.2 硬件设计 7.2.1 HCS12控制核心 7.2.2 电源管理单元 7.2.3 路径识别单元
7.2.1 HCS12控制核心 HCS12控制核心单元既可以直接采用组委会提供的MC9S12EVKX电路板,也可以自行购买MC9S12DG128单片机,然后量身制作适合自己需要的最小开发系统。
7.2.1 HCS12控制核心 在摄像头方案中,其I/O口具体分配如下: PAD1用于摄像头视频信号的输入口; IRQ(PE1引脚)用于摄像头行同步信号的输入捕捉; PM0用于摄像头奇-偶场同步信号的输入口; PT0用于车速检测的输入口; PB口用于显示小车的各种性能参数; PWM0(PP0引脚)与PWM1(PP1引脚)合并用于伺服舵机的PWM控制信号输出; PWM2(PP2引脚)与PWM3(PP3引脚)合并用于驱动电机的PWM控制信号输出(电机正转); PWM4(PP4引脚)与PWM5(PP5引脚)合并用于驱动电机的PWM控制信号输出(电机反转)。
7.2.1 HCS12控制核心 具体的对应引脚详见图7.1 图7.1 112引脚封装的MC9S12DG12B单片机引脚图
7.2.2 电源管理单元 同光电管方案比较,摄像头方案的电源管理单元就显得复杂得多。根据系统各部分正常工作的需要,各模块的电压值可分为2.5 V, 5 V, 6.5 V, 7.2 V, 12 V五个挡,主要包含以下五个方面:
7.2.2 电源管理单元 (1)采用稳压管芯片LM2576将电源电压稳压到5 V后,给单片机系统电路、车速检测的转角编码器电路供电,且为后面的升压降压做准备; (2)经过一个二极管降至6.5 V左右后供给转向伺服电机; (3)直接给直流驱动电机、驱动芯片MC33886电路供电; (4)采用升压芯片B0512S将5 V电压升压到12 V后,给摄像头供电; (5)采用稳压芯片LT1764将5 V电压稳压到2.5 V后,作为单片机A/D模块参考电压。
由于稳压芯片LM2576的额定输出电流较小,故采用两片LM2576分别对单片机电路、车速检测电路供电,以保证系统正常运行。 7.2.2 电源管理单元 由于稳压芯片LM2576的额定输出电流较小,故采用两片LM2576分别对单片机电路、车速检测电路供电,以保证系统正常运行。 其电源分配图如图7.2所示。 图7.2 电源分配图
7.2.3 路径识别单元 路径识别单元是智能车控制系统的输入采集单元,其优劣直接影响智能车的快速性和稳定性。在摄像头方案中,其前瞻距离及检测到的赛道信息是红外线光电管方案远不能比拟的,但其软、硬件设计也较红外线光电管方案难。
7.2.3 路径识别单元 要能有效地采样摄像头视频信号,首先要处理好的技术问题就是能提取出摄像头信号中的行同步脉冲、消隐脉冲和场同步脉冲。否则,单片机将无法识别所接收到的视频信号处在哪一场,也无法识别是在该场中的场消隐区还是视频信号区,更无法识别是在视频信号区的第几行。
要处理好行同步脉冲和场同步脉冲提取的问题,有以下两种可供参考的方法。 7.2.3 路径识别单元 要处理好行同步脉冲和场同步脉冲提取的问题,有以下两种可供参考的方法。 方法一:直接采用A/D转换进行提取。当摄像头信号为行同步脉冲、消隐脉冲或场同步脉冲时,摄像头信号电平就会低于这些脉冲模式之外时的摄像头信号电平。据此,可设一个信号电平阈值来判断A/D转换采样到的摄像头信号是否为行同步脉冲、消隐脉冲或场同步脉冲。 方法二:就是给单片机配以合适的外围芯片,此芯片要能够自己提取出摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲,以供单片机控制之用。
7.2.3 路径识别单元 倘若采用第一种方法,则无需配以外部芯片,在硬件上就可以较为简便。然而,此方法在智能车控制系统的设计中存在两大局限性。 其一,S12的A/D转换时间还不够短,在不超频的情况下,该单片机的A/D转换时间最短为7 μs,而行同步脉冲一般只有4.7 μs左右的持续时间,大多数消隐脉冲更只有3.5 μs的持续时间,持续时间都小于7 μs,所以A/D转换很有可能漏检行同步脉冲或消隐脉冲。一旦漏检一两个脉冲,就会使摄像头视频采样的效果大打折扣。
7.2.3 路径识别单元 其二,在智能车控制系统中,S12除负责摄像头视频采样方面的处理之外,还要负责黑色引导线的提取、方向速度控制等方面的处理,但毕竟MC9S12DG128 的处理能力还是有限的,若采用此方法,会使得在视频采样上花费较多的S12处理资源,这样摄像头视频采样本身的效率较低。此外,黑色引导线的提取、方向速度控制等方面的设计也会局限于所剩余的单片机处理资源。
7.2.3 路径识别单元 倘若采用第二种方法,则需要配以专门的外围芯片。虽然硬件上相对要繁琐一些,但在资源的合理配置上则大大提高。目前,LM1881视频同步信号分离芯片就是一款合适的芯片,它提取摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲,并将它们转换成数字式电平直接输给单片机的I/O口作为控制信号。其硬件连接图如图7.3所示。
7.2.3 路径识别单元 图7.3 摄像头采样电路图
7.2.3 路径识别单元 摄像头视频信号端接LM1881的视频信号输入端,同时也接入S12的一个A/D转换器口(选用PAD1)。 LM1881的行同步信号端(引脚1)接入S12的一个外部中断IRQ口。 LM1881的奇-偶场同步信号输出端接S12的普通I/O口即可(选用PORTM0)。
7.3 软件设计 在摄像头方案智能车控制系统的软件设计中,程序的主流程是:通过外部中断采集程序对摄像头的视频信号进行采集,主程序在两次外部中断的间隙中完成对数据进行处理及计算并给出控制量,采样周期为20 ms。其中,主程序主要完成的任务是:单片机初始化和黑线提取算法;图像滤波算法;舵机控制算法及驱动电机控制算法。
7.3 软件设计 摄像头方案具体主程序流程图如图7.4所示。 图7.4 摄像头方案具体主程序流程图
7.3 软件设计 7.3.1 初始化算法 7.3.2 图像采集算法 7.3.3 黑线提取算法 7.3.4 图像滤波算法 7.3.5 控制策略及控制算法
7.3.1 初始化算法 1.锁相环的设置 2.脉冲宽度调制(PWM)初始化 3.定时中断及输入捕捉通道的初始化 4.A/D转换模块初始化 5.外部中端(IRQ)的初始化
通过设置锁相环,可以改变单片机的时钟频率。在MC9S12单片机中,靠锁相环产生的时钟频率由下面的公式得到: 1.锁相环的设置 通过设置锁相环,可以改变单片机的时钟频率。在MC9S12单片机中,靠锁相环产生的时钟频率由下面的公式得到: 式中,OSCCLK是外部晶体振荡时钟频率,一般为8 MHz或16 MHz;SYNR是时钟合成寄存器;REFDV是时钟分频寄存器。 (7.1)
2.脉冲宽度调制(PWM)初始化 PWM是用于舵机和驱动电机的控制,在MC9S12单片机中,其初始化主要包括以下六大步骤:禁止PWM;选择时钟;选择极性;选择对齐模式;对占空比和周期编程;使能PWM通道。
3.定时中断及输入捕捉通道的初始化 定时中断及输入捕捉通道主要用于产生周期中断以进行速度采集,其初始化工作主要包括:设定预分频系数;定时器溢出中断使能;定时器使能。其中断函数主要包括:清标志位;用户自己的代码。
4.A/D转换模块初始化 A/D转换模块主要用于视频信号的采集,将模拟的视频电压信号转换成对应的数值,以便于后面的黑线提取算法实现。
5.外部中端(IRQ)的初始化 IRQ主要用于捕捉视频信号的行同步信号,产生外部中断以进行图像采集。
7.3.2 图像采集算法 图像信号采集作为整个控制算法的基础,具有举足轻重的地位,同时也是智能车软件设计的一个技术难点。其设计得好坏与否,直接关系到智能车的整体性能。
7.3.2 图像采集算法 通常,摄像头产品说明书上会给出有效像素和分辨率,分辨率即为每场信号中真正为视频信号的行的数目。但产品说明书上通常不会具体介绍视频信号行的持续时间、它们在每场信号中的位置、行消隐脉冲的持续时间等参数,而这些参数又关系到图像采样的有效实现。因此需要设计软、硬件方法实际测量一下这些参数。以下给出上海交通大学代表队通过实验测出的1/3 OmniVision CMOS摄像头时序参数以供参考,如表7.2所示。
7.3.2 图像采集算法 表7.2 1/3 OmniVision CMOS摄像头的时序参数 信 号 属 性 行 序 数 行持续时间 7.3.2 图像采集算法 信 号 属 性 行 序 数 行持续时间 行同步脉冲 持续时间 消隐脉冲 场消隐区 1~4 23 µs 3.5 µs 5 27.3 µs 8 µs 6 37.3 µs 7~10 29.8 µs 11~22 64 µs 4.7 µs 视频信号区 23~310 (同步脉冲) 311~314 315 316~319 320 53.4 µs 28 µs 表7.2 1/3 OmniVision CMOS摄像头的时序参数
7.3.2 图像采集算法 考虑到实际赛道只是在白色KT板上布置黑色引导线,路径识别只需大致提取出黑色引导线即可,不必每行采集。因此,我们可以采用隔行采集思想来压缩图像的数据。 实践证明,智能车控制系统的图像传感系统在单一方向上只要有40像素的分辨能力就足够用了。故我们只需对这288 行视频信号中的某些行进行采样就可以了。
7.3.2 图像采集算法 假设每场采样40行图像数据,为了方便软件程序的编写,可以均匀地采样288行视频信号中的40行,即每隔7个有效行采集一行。例如采样其中的第7行、第14行、第21行、…、第273行、第280行,即采样该场信号的第29行、第36行、第43行、…、第295行、第302行(每场开始的前22行视频为场消隐信号)。
7.3.2 图像采集算法 此外,为了进一步解决图像数据大与HCS12单片机数据处理速度有限的矛盾,还可以通过适当地将S12的CPU超频运行,以及降低A/D转换器的转换精度,以提高A/D转换器的速度,具体实现流程图(以采集一幅16行×40列的图像为例)如图7.5所示。
7.3.2 图像采集算法 图7.5 图像采集程序流程图
7.3.2 图像采集算法 图7.5中,数据转存由于是在CMOS摄像头安装时旋转90°后使用的,故在图像采集后应将其还原,以方便后面的图像处理。具体是通过设置VideoLine[i]和VideoImage[i][j]两个数组来实现的。
7.3.3 黑线提取算法 由于智能车系统对实时性的要求很高,过于复杂的黑线提取算法,会导致决策周期溢出,使程序崩溃,所以必须采用简单高效的图像识别算法。 上海交通大学代表队将常用的黑线提取算法划分为二值化算法、直接边缘检测算法和跟踪边缘检测算法。
7.3.3 黑线提取算法 1.二值化算法 2.直接边缘检测算法 3.跟踪边缘检测算法
二值化算法 二值化算法的思路是:设定一个阈值valve,对于视频信号矩阵中的每一行,从左至右比较各像素值和阈值的大小,若像素值大于或等于阈值,则判定该像素对应的是白色赛道;反之,则判定对应的是黑色的目标引导线。记下第一次和最后一次出现像素值小于阈值时的像素点的列号,算出两者的平均值,以此作为该行上目标引导线的位置。 该算法的思想简单,但是这种提取算法的鲁棒性较差,当拍摄图像中只有目标引导线一条黑线时,尚能准确提取出该目标引导线,但当光强有大幅度变化或图像中出现其他黑色图像的干扰时,该算法提取的位置就有可能与目标引导线的实际位置偏离较大。
2.直接边缘检测算法 采用逐行搜索的算法,首先找到从白色像素到黑色像素的下降沿和从黑色像素到白色像素的上升沿,然后计算上升沿和下降沿的位置差,如果大于一定的标准值,即认为找到了黑线,并可求平均值算出黑线的中心点。
2.直接边缘检测算法 至于上升沿、下降沿的检测,可以通过上上次采样数与这次采样数的差值的绝对值是否大于一个阈值来判断,如果“是”且差值为负,则为上升沿;如果“是”且差值为正,则为下降沿。 这里,阀值可以根据经验设定,基本上介于30~46之间(当A/D模块的参考电压为2.5 V时),也可以采用全局自适应法设定,每次采样后首先都遍历一次图像,得到图像灰度值的平均值,然后用这个平均值乘以一个调试系数即可得到所要的阈值。
2.直接边缘检测算法 该算法较二值化方法而言,抗环境光强变化干扰的能力更强,同时还能削弱或消除垂直交叉黑色引导线的干扰。
3.跟踪边缘检测算法 由于黑色的目标引导线是连续曲线,所以相邻两行的左边缘点比较靠近。跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。其思路是:若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。
3.跟踪边缘检测算法 该算法的优点:在首行边缘检测正确的前提下,该算法具有较强的抗干扰性,能更有效地消除垂直交叉黑色引导线的干扰,以及引导线外黑色图像的影响,始终跟踪目标引导线。另外,较之前两种算法,跟踪边缘检测算法的时间复杂度更低,因此效率更高。 但该算法的问题在于:由于是在连续邻域上跟踪引导线边缘,若第一行左边缘位置的检测位置和实际导引线偏差较大,就会产生一连串的错误,甚至造成智能车失稳。
3.跟踪边缘检测算法 综上所述,从算法的简洁性和实用性综合考虑,直接边缘检测算法相对于其他两种算法是一个较好的选择。
7.3.4 图像滤波算法 虽然采用了边缘检测的方法进行黑线提取,但由于赛道对小车有十字交叉线的干扰、光线对小车有反光的影响、小车本身也存在视野狭窄的缺陷,故用黑线提取算法得到的路径信息有可能错误,不能如实地反映赛道情况。为了不导致决策失误,必须对图像加以滤波,并且对错误数据适当地进行校正。
在图像滤波算法中,主要应考虑以下几个方面: 7.3.4 图像滤波算法 在图像滤波算法中,主要应考虑以下几个方面: 首先,根据图像模型去噪,例如,由于赛道的黑色引导线是绝对连续的,故两个中间有黑线的行之间不能有全白行(注意中间二字:如果黑线在边缘,则可能是由于摄像头的视野太窄或智能车身不正导致在过弯道时只能看到部分黑色引导线),这主要是解决光线对摄像头的反光问题; 其次,在理想的情况下,根据赛道的黑色引导线的连续性,如果某一行求取的中心线位置与相邻的两行都相差很大,则可以认为该行数值错误,抛弃该行的数据或使用其前后两行数据的平均值来替代该错误数值用以校正。
在调试过程中会出现两段黑线情况,这种图像信息比较复杂,这时可能存在三种路况: 7.3.4 图像滤波算法 在调试过程中会出现两段黑线情况,这种图像信息比较复杂,这时可能存在三种路况: (1)赛道比较密集时,检测到多条赛道; (2)大“S”弯道; (3)“十”字交叉道。 处理策略为:保留最底下的一段,这主要是从安全角度考虑的,防止赛道周围环境对小车的干扰。
7.3.4 图像滤波算法 另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产生影响。对于这种失真,可以通过对每行提取的赛道位置添加一个线性修正值来消除,一般通过实验的方法确定线性补偿的系数。
7.3.5 控制策略及控制算法 1.赛道参数的计算 2.转向控制 3.速度控制
1.赛道参数的计算 影响赛车速度成绩的一个重要因素就是对弯道和直道的提前识别判断,从而实现安全过弯,快速过直道、S弯道,以提高比赛成绩。而摄像头方案在这方面有天然的优势:相对于光电管传感器,可以获得较远的路径信息;不仅可以得到单行的黑线信息,还可以同时获得多行的黑线信息。经过图像处理算法后,得到的信息是关于前瞻范围内的黑线的具体位置,它一般是一个二维数组linepos[i][j]。现在就是要从这个二维数组中提取出智能车前方的路径信息,以便于后面转向和速度的控制。
1.赛道参数的计算 (1)偏差的计算 (2)曲率的计算
(1)偏差的计算 为了使小车运行得快而稳,联想到光电管方案可以从一维数组linepos[j]中提炼出一个黑线距离车身中心轴的偏差量Offset,要求出这个偏差量必须至少考虑三个因素: 最远行黑线位置linepos[topline] 黑线平均位置averlinepos 全白行行数whiteline_sum
(2)曲率的计算 从理论上讲,相对于偏差量Offset,曲率是智能车更好的一个控制变量。但由于路径检测单元的局限性,很难计算出非常精确的曲率。 如果用曲率值进行智能车方向及速度的辅助控制,还是能够起到一定的效果的。
转向控制采用了分段比例和前馈补偿相结合的控制方法。 2.转向控制 转向控制采用了分段比例和前馈补偿相结合的控制方法。 (1)分段比例控制 (2)前馈补偿控制
(1)分段比例控制 因为小车处于弯道和直道的转向模型不同,若采用统一的比例系数设置,那么该系数过大会导致小车振荡,过小会导致最大控制量偏小,小车转向不足,过弯时易冲出赛道。使用分段比例控制既方便又可以解决以上两种问题。
(2)前馈补偿控制 由于CMOS方案不像光电管方案,它存在图像失真的情况,越远地方的图像失真越厉害,而对于计算offset偏差量来说,越远的路径信息越有参考价值,故其比重也相对较大。这样,就导致小车转向微调时的效果往往不太如人意。 鉴于此,在小车前述的分段比例控制基础上又加入了前馈补偿控制进行微调。
3.速度控制 (1)模糊控制设定速度 (2)PID控制调整速度
(1)模糊控制设定速度 因为小车比赛的赛道是未知的,弯道的分布情况也不能确定,小车可能频繁地进出弯道,不停地调整速度来适应不同轨迹。这样就难以建立精确的数学模型,且赛车对动态性能的要求较高 考虑到该款S12单片机有一套特色指令——模糊控制指令,执行时间只有几十微妙级(时钟频率为25 MHz),不会影响决策周期,且简单易行,而模糊控制具有处理不明确信号的能力,故可以采用模糊控制设定速度。
(1)模糊控制设定速度 1)模糊输入、输出量的选取 2)隶属函数的确定 3)模糊规则库的建立 4)模糊推理及解模糊化
(2) PID控制调整速度 速度调整要求对智能车的速度的调整既要快速,又要准确,而且不能频繁波动。故采用PID控制算法不失为一种简单而有效的策略。
(2) PID控制调整速度 考虑到摄像头方案的控制周期较长,假设按2.5 m/s的平均速度计算,则一个控制周期小车大概可以跑过5 cm,如果按这种周期用上述PID调节速度,则会导致加速、减速均过长的后果,严重地影响小车的快速性和稳定性。 为了解决这个问题,可以在PID调速控制中加入BANG-BANG控制思想。
思考题 1.摄像头型智能车相对于光电管型智能车的优势 体现在何处? 2.摄像头型智能车相对于光电管型智能车的优势 体现在何处? 3.若赛道中的一段出现空白,摄像头型智能车如 何识别路径,并保持正确的行进方向?
思考题 4.摄像头型智能车如何区分赛道中的十字交叉线 与赛道的起始端线? 5.简述在机械安装中,摄像头装配高度和装配俯 角大小对智能车行驶的影响。