基于线性CCD循迹的智能车系统设计
智能车竞赛是一种越来越多的大学生参加的学科竞赛,本文公开了一种研制智能车的方案。根据“飞思卡尔”杯智能车竞赛的要求,本文设计了一种基于核心板MK60DN512ZVLL10的智能车循迹系统,以线性CCD为传感器;通过线性CCD采集数据进行数据处理,判断智能车偏离赛道中心的程度;通过PID控制算法及输出占空比控制舵机转角;通过闭环检测控制智能车速度;结合串口、蓝牙反映智能车自主运行状态。通过竞赛取得的优异成绩验证了本文所提方案的稳定性和快速性。
【关键词】智能循迹 线性CCD 电源转换 H桥
无人车是现代科技发展的方向,以实现在无人控制的情况下,车能自主运行,给人们带来极大的便利。同时,无人车的发展也标志着一个国家智能控制技术水平和综合科研实力。而智能小车的搭建与运行正给当代大学生提供了一个了解、研发的平台。
1 系统总体设计
本次设计基于“飞思卡尔”杯智能车竞赛的要求,总体分为硬件与软件两个部分。将智能车整体分为电源模块、线性CCD模块、电机驱动模块、测速反馈模块、舵机转向模块和辅助调试模块六个部分。核心板采用MK60DN512ZVLL10微处理器,线性CCD模块将线性CCD采集到的赛道信息转化为数字量,通过算法带动舵机转向模块运作,测速反馈模块通过编码器输出带动速度的变化,使智能车能够循迹前进。
2 硬件结构设计
2.1 核心板设计
核心板采用MK60DN512VLL10嵌入式微处理器,K60微处理器是基于ARM Cortex-M4内核的32位MCU,它将Cortex-M系列处理器低功耗特点和良好的信号处理能力结合,十分适合智能车的控制和信息处理单元。K60内核带有DSP指令,提供不同级别的CPU频率,最高可达100MHz,可以高速地对大量数据进行处理,程序运行更加流畅。
2.1.1 电源模块
采用电压7.2V、容量 2000mAh 可充电镍镉电池作为系统的电源,7.2V 的镍镉电池不能为控制器和其他模块直接供电。用lm2940芯片将7.2V电压稳压到5V为SD-5舵机、编码器和线性CCD供电,再用lm1117芯片将5V电压稳压到3.3V给 K60 控制芯片最小系统供电,如图1。
2.1.2 线性CCD模块
线性CCD采用蓝宙电子TSL1401线性传感器。前瞻较远,能在较远距离采集到赛道黑线,且黑线与背景压差较大,用简单算法即可提取黑线位置信号。用一个线性CCD前瞻可以达到30~40cm的前瞻距离,探测宽度可达 32cm,分辨率约 1mm。同一曝光时间及镜头光圈难以适应各种环境,在光线较弱环境下的参数在强光下会出现输出饱和,在较强光线下调节好的参数在弱光下输出电压过低,甚至处于截止状态。在智能车循迹中通过硬件二值化处理,将曝光时间变成一个可变参数,让智能车适应环境的变化。
2.1.3 舵机模块
舵机采用SD-5舵机,控制信号为周期是20ms的脉宽调制信号,其中脉冲宽度从1ms-2ms,相对应舵盘的位置为0-180度,呈线性变化。用K60的PTC3引脚输出连接舵机,舵机利用微控制器内部时钟信号产生舵机的控制信号并与内部基准信号的比较电压来控制舵机转向,使智能车适应跑道的变化不致跑出跑道。
2.1.4 编码器测速反馈模块
智能车在跑的过程中能快速加速、及时减速依赖于速度闭环返回的速度脉冲值的可靠度和精确度,因此为了提高检测精度选用精度较高的欧姆龙500线光电编码器。编码器安装在车轮旁,齿轮与车轮齿轮紧贴在一起,车轮旋转通过齿轮带动光电编码器一起转动,光电编码器通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量进行输出,编码器每转过一圈会产生500个脉冲,分析脉冲个数可以得到车速。
2.2 驱动板设计
驱动电路采用H桥式电路,电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。不同三极管导通,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。驱动电路如图2所示,左上角及右下角三极管导通时电机正转,右上角及左下角三极管导通时电机反转。
3 软件设计及算法
软件设计部分主要包括:图像采集与处理、舵机控制、电机控制。
3.1 图像采集与处理
智能车在赛道上行驶时主要依靠赛道边沿的黑线识别路径。线性CCD扫描到的图像由128个点构成,每个点的灰度值用一个字节表示。提取赛道边沿就是在这128个像素点中找出左边沿和右边沿对应的像素点。
3.1.1 过滤图像噪点
使用高斯模糊算法过滤掉图像中由于电气干扰或其他异常情况导致的噪点。高斯模糊算法用正态分布计算图像中每个像素的变换。N维空间正态分布方程为:
G(r)=
其中r是模糊半径(r2=u2+v2),σ是正态分布的标准偏差。
3.1.2 找交互点
通过遍历像素点得到128个像素点中灰度最小的一个点作为白色区域中的一个点。之后通过每五个值进行一次平均值的计算来滤波。线性CCD采集到的数据二值化以后,黑色的边沿呈现高电平,而中央白色区域呈现低电平。由于智能车行驶过程中,赛道上可能有污垢或者由于光线问题造成二值化以后在本应该全是低电平的白色区域产生少数高电平,这时使用腐蚀算法从赛道内侧白色点分别向左右方向遍历。对于一幅图像,腐蚀算法的处理是以1值像素为被注视像素,如果被注视像素的较长领域内存在0值像素,那么就把1值像素置换成0值像素,所以该算法能把赛道白色区域中存在的少数高电平置换成为低电平,保证智能车准确地扫描到正确的图像。之后找出灰度值与已知白色点相差预定值以上的点,即赛道左右边沿黑线和赛道白色区域的交接点。通过坐标变换计算得到赛道边沿相对于小车正前方的距离。当赛道中央有障碍物时,腐蚀算法也能准确的将128个线性点中间部分存在障碍物的部分置为高电平,帮助智能车避障。
3.1.3 求中心线
当赛道左右边沿都出现在线性CCD采集的图像中,即智能车行驶在直道上,直接通过计算得到左右边沿中间点作为赛道中心线。当赛道左边沿或右边沿未能出现在线性CCD采集的图像中,即智能车处于弯道上,使用设置好的赛道值分别对左、右边沿做加、减运算得到赛道中心线。当赛道左边沿和右边沿都未能出现在线性CCD采集的图像中,即智能车冲出赛道时,将跳过对这一帧图像的处理,使错误计数器加一,当计数器达到设定的上限值,智能车便会停下避免碰撞。
3.2 舵机控制
舵机控制采用PD控制,增加响应的快速性及稳定性,舵机PWM输出占空比=KP×偏心距+KD×偏心距变化率。通过对智能车系统进行建模,将向心加速度的影响分量加入,最终舵机控制如下式所示:
舵机PWM占空比=KP×偏心距+KD×偏心距变化率+KA× ,其中v为小车当前速度,R为赛道曲率半径,比例系数KA在硬件与运行环境不变情况下为常数。
3.3 电机控制
电机控制采用PID控制。电机带载运行时响应较慢,比例环节增加相应的快速性,积分环节减小系统稳态误差。智能车电机采用simulink建模,将RS-540电机实际参数工作电压DC7.2V、空载电流1.72A、最大电流9.71A、空载转速23400RPM±10%等模拟到simulink当中,先在上位机中模拟电机运行状态,按照先比例后积分再微分的顺序反复调试参数,先找到可能参数的范围,之后再把这些参数在实际车模上调试。由于智能车的电机带载运行响应相对控制周期来说较长,造成加速和制动的滞后。因此在PID控制的中结合棒棒控制,当速度值与设定值相差比较大时直接设置PWM输出最大占空比100%或最小0%。
3.4 调试结果
通过参数调试,舵机控制得到合适的一组KP、KD值:KP=142,KD=7。向右角度超过10个点,舵机就向左打死;向左角度超过10个点,舵机就向右打死。确定要给的转角公式为Givingangle = (1*dir_value+750),其中dir_value为dir_value=KP*(65-medium)+0.1*deviation*KD,medium为中点值,deviation为上一次角度的偏差减去这次角度的偏差。经过参数调试得到舵机向左打死的Givingangle=829,向右打死的Givingangle=690。经过调试,电机控制部分决定采用PI控制结合棒棒控制,KP=50,KI=0.095。占空比在20%的情况下,智能车能以2米/秒的速度完成赛道。
4 结论
本文基于第九届“飞思卡尔”智能车竞赛,对线性CCD循迹的智能车系统进行了论述,总体结构从硬件与软件两个方面将系统分为六个部分。在线性CCD扫描赛道提取图像方面,采用高斯模糊算法过滤干扰点,用腐蚀算法确保CCD图像准确二值化。电机控制方面,采用simulink建模,这样的仿真模型可以找到PID参数KP、KI、KD的变化,避免了“黑箱”调试参数的弊端,方便地实现、验证和改进控制算法。另外,PID算法中融入棒棒控制,解决在直道上速度难以提升和进弯减速不及时的问题,有效提高智能车的整体速度。经过实验与比赛的验证,智能车能以较佳速度行驶完赛道。
参考文献
[1]邹淑彩.刷卡式无人车在物料搬运系统中的应用[J].航空精密制造技术,2014.
[2]郭佳,刘晓玉,吴冰,付晓薇.一种光照不均匀图像的二值化方法[J].计算机应用与软件,2014.
[3]陶凯,赖康生.基于PWM控制H桥驱动半导体制冷片的恒温系统[J].工业控制计算机,2013.
[4]卢燕飞,荆涛.利用图像边缘变化特性寻找模糊处理痕迹[J].信号处理,2011.
[5]齐鑫.基于膨胀腐蚀算法的数字信号处理[J].自动化技术与应用,2010.
[6]赵国材,孙广涛,王仕鏹.电动车无刷直流电机simulink建模仿真[J].计算机系统应用,2012.
作者简介
孙羽羿(1993-),女,贵州省贵阳市人。中南大学本科在读。主要研究方向为自动化控制。
作者单位
中南大学 湖南省长沙市 410012