智能车黑线识别算法及控制策略研究
2 黑色指引线的提取算法
赛道是由白色KT板上铺设黑色指引线组成,外界干扰比较少容易提取黑线。据此采用的是图像处理方法是较为简单的边缘提取算法。边缘与图像的性质之所以能联系在一起,是由于图像中的物体与物体,或者物体与背景之间的交界可以视为边缘,图像的灰度及颜色急剧变化的地方也可以看作是边缘。在图像中有颜色的变化必定会有灰度的变化,故对于边缘的检测与提取焦点集中在灰度上就可以。由于黑色指引线和白色跑道的色差较大,可以确定一个分别黑白色的阈值,通过实验确定该阈值(VALUE)为8。由于光照强弱的原因黑色像素的灰度值可能不完全一样,实际操作中我们发现只要灰度值小于4(DIFFVAL)的点即可视为黑色点。
摄像头扫描的图像分为一下两种情况:
(1)扫描图像只有一条竖直黑线,如图2所示
从左边的第一个有效像素点(usefu1_line)开始依次对相邻的像素点进行灰度值相减(左减右),当两者的差值大于阈值(VALUE)时,判定下一个像素点(usful_line+1)对应的为黑线的左边缘。继续相减当差值再次大于阈值时,将此像素点定位黑线的右边缘。该程序如下所示:
其中g_ucDif 为两个像素灰度值之差的绝对值,LINE_MAX为采集图像的最大有效列数,ROW_MAX为采集图像的最大有效行数,ucImage_data[][]为存储图像像素点的一个二维数组,ucImage_temp为临时存储图像的数组。
(2)扫描到的图像为黑色交叉线,如图3所示
前面提到S12单片机的总线超频以后通过AD转换每一行图像我们能采集到70个有效数据点,而黑线的宽度只有25mm(大赛组委会规定),在这个宽度内最能只能包含6个有效的数据点。因此对于黑色交叉线我们只要将右边缘(right)所在列数与左边缘(1eft)所在列数相减,如果差值大于6,我们即可判定此时为黑色交叉线。程序只要在前面的基础上加上一下语句即可完成。
其中B1ackwire_data[]为采集到的黑线中心线数据,它将在后面的控制策略中被用到。
3智能车的控制算法
在比赛中,影响赛车速度的一个关键的因素就是赛车能不能提前识别弯道与直道,也就是说赛车的控制算法对提高赛车的成绩起到至关重要的作用。这里采用鲁棒性好且算法简单的经典PID算法。但普通的PID是线性算法,若参数设置太大则小车在走直道时很容易出现振荡的情形,而在高速走弯道的时则易出现反应迟钝、冲出赛道的情况。因此采用非线性的PID算法,使之对小偏差不敏感而对大偏差敏感,实现了直道平稳同时弯道灵敏的目的。
驱动电机的PID控制部分通过下面算法实现:
评论