引言
智能车辆集中运用了自动控制、多传感器信息融合、导航技术、无线通信技术以及人工智能等高新技术[1]。在传统智能车比赛中经常应用光电传感器作为图像数据的路径识别模块,但光电传感器的前瞻较小且延伸调节不方便,其能获取到的有效数据局限于有限的几点,因此在多变的赛道环境中的适应性较差。而CMOS OV5116动态集成模拟摄像头的前瞻较远且可调节性较强,能及早捕捉和提取循迹轨道信息以便做出加速、减速等处理。图像数据中路径识别模块处理的方法决定着智能循迹车的稳定性能和行驶速度。以嵌入式单片机MK60DN512ZLVQ10(以下简称K60)为核心控制器,利用其强大的数据处理能力和丰富的外设接口设计,来实现摄像头图像数据处理、舵机转向控制和电机转速控制等。
1 系统硬件设计方案
智能车系统主要包括以下几部分:OV5116摄像头进行跑道图形采集;编码器测量小车当前的运行速度;Freescale系列的K60微处理器进行信息处理;舵机控制车模的转向;电机控制车模的运行速度。系统总体结构如图1所示。在系统硬件设计中,对图像进行硬件二值化处理,不仅提高了图像采集的可靠性,而且减小了CPU的运算负荷。
图1 系统总体设计结构图
1.1 小车主板设计
为了合理利用车模空间,并尽可能把小车的重心放低,在对电路进行详细分析后,对其进行了简化,使本系统硬件电路部分轻量化指标都达到了设计要求,主板整体效果略——编者注。
1.2 电源管理模块设计
整个系统的电源由7.2 V、2 Ah的可充电镍镉电池提供。由于电路中不同模块所需要的工作电压、电流各不相同,因此电源模块包含多个降压稳压电路,将电池电压转换成各个模块所需要的电压。
电池经过稳压芯片SPX3940为光电编码器、摄像头、舵机提供电源,并运用大量电感、电容,从而可以提供较为平稳的5 V电压,避免电压波动对器件造成损害,电池电压稳压到5 V电路如图2所示。
图2 电池电压稳压到5 V电路
再经稳压芯片LM1117为微处理器模块提供3.3 V电压,5 V电压稳压到3.3 V电路如图3所示。
图3 5 V电压稳压到3.3 V电路
1.3 图像采集模块设计
1.3.1 OV5116摄像头成像原理
图像采集模块主要是通过CMOS OV5116动态集成模拟摄像头采集赛道信息,并对信息进行处理以判断车模在赛道上的位置。CMOS动态集成模拟摄像头OV5116采用5 V电源供电,集成了模拟转化为数字式的电平信号LM393和LM1881视频分离芯片,具有输出信号稳定且容易测试、功耗低、发热小等优点。除镜头外,摄像头还有一块感光处理芯片、时钟发生电路及一些外围电路。感光处理芯片由方阵排列的感光元组成,当外部图像经镜头折射、聚焦到感光芯片上时,灰度信息转化为电压信息存储在这些感光元中,在时钟脉冲的作用下这些电压信息顺序输出到信号线上。为了实现序列图像的同步顺序传输,在扫描过程中加入了场同步和行同步信号。现在国内通用的视频信号是PAL制信号,摄像头传送的信号也是PAL制。现在通用的视频信号是625线,即一幅图像竖着分为625行,这625行又按奇偶分为奇偶场,即每场图像只有312行。摄像头每秒扫描25幅图像,每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50场图像。奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行,当一场结束后,扫描点会从这场右下角扫到下场图像的左上角[2]。图4为PAL制信号时序图。
图4 PAL制信号时序图
1.3.2 图像硬件二值化处理
将图像导入MATLAB进行分析,发现原始图像像素值均在0~255内,而白色区域像素值一般在160以上,黑色区域一般在70以下。为了提取出黑线,检测像素值的跳变是最直观的方案,但是实际中一般黑白线边沿的像素值不是突然跳变的,而是有一个过渡过程。所以将原始图像进行二值化处理不但有清晰边沿线的功能,还能方便后续路径识别部分算法的设计与处理。二值化处理就是对于输入图像的各个像素,先确定某个亮度值,当像素的亮度超过该阈值时,将对应输出图像的像素值设为1,否则为0。行同步信号为一行扫描的开始信号,结合处理后的二值化图像,计时出行同步信号到第一次检测到的黑线的时间t1来得出第一条黑线的位置,同时计时t2来得到黑线的宽度,计时t2到t3来得到白色赛道的宽度。行分离、输出二值化的视频信号如图5所示。
图5 行分离、输出二值化的视频信号
摄像头通过赛道的黑线来进行图像识别,在摄像头行消隐下降沿启动定时器,每当有二值化边沿来到时就会触发相应的引脚中断,读取定时器的值,通过中断的次数可以反映对应行的赛道信息,通过读取定时器定时值可以反映车体在当前赛道的位置[2]。定时器中断的次数与赛道底色有必然联系,对于蓝色的赛道底色,在没有干扰的情况下中断次数为2,计数器的值分别为左右白色起点的位置,而对于白色的赛道底色,在没有干扰的情况下中断次数为6,第2、3次的中断采用对图像进行硬件二值化处理,不仅提高了图像采集的可靠性,而且减小了CPU的运算负荷。设计的电路图略——编者注。
1.3.3赛道识别策略
依据摄像头所获取的赛道信息判断赛道环境和车体位置,根据赛道情况来使智能车控制舵机角度和电机速度。当前的赛道环境有:直线赛道、“十”字赛道和“S”弯赛道。各个赛道情况如图6所示。
图6 赛道情况
当智能车位于直线赛道时依据摄像头二值化端口输出的图像中t1检测的时间来判断车体位置。当t1等于车体位于正中的t0时,舵机不作处理;当偏小时,舵机向左侧打角度;当偏大时,舵机向右侧打角度。
当智能车位于“十”字赛道时,会出现摄像头看到的许多行全为白色的情况,即中断次数为2,此时默认为小车处于赛道中心位置,可以不对小车位置进行调整,即小车可以保持原来的行驶状态,直到检测到弯道为止。
当智能车位于“S”弯赛道时,摄像头二值化端口输出的图像中, t1的计时时间数值增大,表明智能车进入“S”弯赛道。舵机处理方法类似于“十”字赛道,多行采集的数据中,视频信号由检测到黑线低电平到无低电平输出,再到检测到低电平信号,表明智能车进入的是“S”弯赛道的虚线段。此时可以使小车按之前的舵机角度保持行驶,直至图像采集完虚线赛道进入实线弯道[3]。
起跑线识别策略:因为需要通过定时器中断的次数和定时器的数据来对摄像头采集的数据进行处理,在程序中应用了很多算法对赛道中的干扰进行滤除,因此当检测到起跑线时,定时器对应行定时器中断次数为白底10次、蓝底6次,以此作为标志,当检测到此标志时就认为检测到了起跑线,从而停车。
1.4 电机驱动电路设计
整个电机驱动电路使用两路PWM输入,可以灵活控制电机的正反转、加速以及减速。电机使能端接到单片机的I/O口,可以快速控制电机启动和停止。使用了由分立元件制作的直流电动机可逆双极型桥式驱动器,该驱动器额定工作电流远大于电动机正常工作电流,因而不易损坏。电机驱动电路原理图略——编者注。
本设计采用增量式PID控制来调节车速,通过控制编码器对应的数值来调节电机的PWM值。增量式PID调速是指控制的对象是速度的增量Δv(t),此时的控制量Δv(t)对应着本次速度的增量,使用寄存器来存储每次速度的增量。增量式算法优点包括:算式中不需要累加,控制增量的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小。采用软件来实现PID控制,可利用算式(1)来完成:
设计中选择周期T=20 ms,当确定了Kp、Ti、Td时,只要从寄存器读出前后3次的速度偏差值Δv(t),便可由式(1)和式(2)求出控制增量。实验证明:增量式PID控制能快速精准地调节小车的速度,在直道加速和弯道减速过程中平稳有效地控制小车的行驶。
2 系统软件设计方案
2.1 主程序流程图
主程序包括系统初始化、自学习矫正图像并存储信息、舵机和电机初始化、赛道信息采集与处理、舵机控制、速度监测并控制电机的旋转速度、检测起跑线等过程,主程序流程图如图7所示。
图7 主程序流程图
主程序包括自学习数据处理子函数,根据采集到行信息的边沿数目以及从定时器取出的数据,从而确定跑道宽度以及黑线的位置;实时处理摄像头数据子函数,对正在运行车模采集到的数据根据边沿数进行相应的分类处理;通过本行定时器数据差值的比较,滤除相邻跑道干扰的子程序;滤除相邻行边沿数不等且多余的干扰数据的子程序;处理数组列号是5(行信息边沿触发数)转换成4的数据,便于判断弯道并计算相邻行黑线起点位置的子程序。
2.2 控制算法的设计
2.2.1 舵机控制算法的设计
首先将车模摆放在直道中间位置,通过初始化自学习采集较为标准的图像,由于摄像头采集的图像是变形的,以摄像头采集的第0行的数据作为基准,将其他行的数据与基准数据对比生成一系列数据并保存。当小车跑起来时,对采集到的数据用自学习时生成的系数进行校正,因为在自学习过程中两条黑线及跑道中心线的位置已经确定,此时可通过对当前摄像头采集到的黑线位置计算生成的中心线的位置,与自学习生成的中心线位置数据进行比较,获得当前位置的偏差,并根据偏差来计算当前位置舵机的PWM值。舵机根据单片机输出的PWM值旋转一定的角度,从而控制小车实时的转向。
对摄像头采集到的40行数据进行分段,计算出各段的偏差,并根据不同段偏差值的大小选择控制舵机旋转的连续行数据段,再根据不同的系数通过比例控制得到较为理想的控制舵机连续的PWM值。为了防止频繁控制舵机导致车模晃动,对偏差值设置一定的死区,可让小车平稳转弯。针对不同跑道可以相应设置舵机控制标志位,选择不同的控制函数。
2.2.2 电机控制算法的设计
为了更好地控制智能车,舵机控制必须和速度控制结合起来,因此速度控制算法的实现很重要。在小车运行的过程中直道和弯道的速度不同,直道需要加速,而弯道需要减速才能更好地过弯,这就需要在直道和弯道的交界处提前减速。因为摄像头的前瞻性,在远处就可以识别出远处的弯道,此时就需要减速,但由于车体的惯性因素,智能车不会立即将速度减到预定的大小,此时通过比较实际运行速度与设定速度的偏差来控制速度。如果偏差过大,就需要反向制动使智能车急减速,到弯道时速度就会减慢。通过编码器每20 ms检测一次速度,不断判别实际速度与设定速度的偏差,从而校正车体速度以达到需要的效果。根据当前控制舵机的偏差值,把车模的速度分成3个档位,分别对应3个不同的速度,足以应对不同的弯道,再通过调节系数大小可以实现不同速度档位下小车的平滑行驶。
结语
本文论述了以嵌入式单片机K60作为核心控制器,动态集成模拟摄像头OV5116作为图像传感器获取跑道信息,以增量式PID算法来控制舵机、电机的运行。实验证明,此设计的相关硬件电路设计合理,电源模块能高效稳定运行,图像信息采集快速准确,智能车变向及时、变速迅捷。