基于基于CCD摄像头智能车分段摄像头智能车分段PID控制算法设计控制算法设计
自动寻迹智能车涉及到当前高技术领域内的许多先进技术,其中最主要的是传感技术、路径规划和运动控制。
本课题是以飞思卡尔智能车竞赛为背景,以单片机作为核心控制单元,以摄像头作为路径识别传感器,以直流
电机作为小车的驱动装置,以舵机控制小车转向来设计的。
车模竞赛的赛道是一个具有特定几何尺寸约束、摩擦系数及光学特性的KT板,其中心贴有对可见光及不可见光均有较强吸收
特性的黑色条带作为引导线,宽度为2.5 cm。在行驶过程中,系统通过摄像头获取前方赛道的图像数据,同时通过测速传感
器实时获取智能车的速度,采用路径搜索算法进行寻线判断和速度分析,然后作控制决策,控制转向舵机和直流驱动电机工
作。智能车通过实时对自身运动速度及方向等进行调整来“沿”赛道快速行驶。本文主要介绍摄像头通过提取赛道黑线信息交予
单片机处理,通过单片机输出控制信号控制舵机转向来控制车模的转向,从而很好的自动循迹。
1 总体软硬件结构及思路
此智能车辆定位系统用摄像头拍摄车辆前方的赛道,通过MC9S12XS128采样视频信号,获得图像数据。然后用合适的算法,
如跟踪边缘检测算法,分析图像数据,提取目标指引线。然后,系统根据目标指引线的位置信息,对舵机和电机施以合适的控
制。本智能车运动系统的结构图如图1所示。
因为系统是一个有机的整体,所以需配合好系统的摄像头、控制单片机、电机(包括直流伺服电动机、光电编码器)、舵机和辅
助电路(电源板、电机驱动板)等各个部分。舵机是实时控制车模的转向,是比赛快速性和稳定性的关键,舵机控制有很多的控
制算法,如:PID经典控制算法、模糊算法、人工智能算法等。
2 系统程序总体控制流程
系统的基本软件流程是:首先,对各功能模块和控制参数进行初始化;然后,通过图像采集模块获取前方赛道的图像数据,同
时通过速度传感器模块获取赛车的速度。采用PID对舵机进行反馈控制。另外根据检测到的速度,结合速度控制策略,对赛车
速度不断进行适当调整,使赛车在符合比赛规则的前提下,沿赛道快速行驶。系统的基本软件结构流程图,如图2所示。
系统的软件要求控制的准确性、稳定性。采样提取黑线是控制输入量的基础,要求采样的精确稳定。输入量给舵机以后又要求
舵机输出的快速相应性、稳定性和准确性。经过多次实验及近一个学期的调车经验,选用了并改进了经典的PID控制器对车模
的舵机进行控制调节。
3 图像识别
用CCD摄像头采集车模前方一定距离内的黑线,从中提取相关量,用来控制舵机的转向,实现智能车的自动循迹。由于单片
机数据处理能力和速度有限,不能在短短的20 ms时间内处理整场图像。本系统设置摄像头前瞻为1.2 m。在不影响道路检测
精度需要的前提下,本系统采用隔行采集来压缩图像数据,即相隔不同的有效行采集一行数据(近处相隔的少,远处相隔的
多),一共可采集 44行数据。此外为了进一步提高A/D转换的速度,本系统还适当地将XS12的CPU超频运行并且设置A/D
转换器的精度为8位,这样每行能采样到67个点,形成了一个面阵,而黑线在其中占据了某些点位。由于我们一行采集67个
点,故中间值为33。图像是智能车的底层,图像的采集正确与否在以后的控制中尤为重要,故一定要确保采集回来的黑线的
真实有效性,并且要增加滤波算法,比如在有效前瞻很小的时候,本来只要判断出黑线的转向即可,给舵机以极限转角可以让
车急转弯。但是有效行很少的时候,如果不用特殊的滤波方法,只要有一行的黑线提错,就可能让小车转错,至于转出界。
4 分段PID控制
4.1 图像信息提取量
从采集回来的图像中提取控制量来控制舵机的转向,实现智能车的自动循迹。本系统采用黑线偏移量even_diff和黑线某段斜
率 D_diff-erent对舵机进行控制,可称为PD控制器。由于车模是个随动系统,在摄像头1.2 m前瞻内覆盖的黑线不一定有设
置的44行,特别是前方的弯特别急的时候,在摄像头前瞻视角范围内覆盖的黑线会特别少,比如13行或13行以下。根据这个
特点,可设置一个有效前瞻量valid_line作为对前方的弯的平缓程度的反应。
把每一行的黑线位置值与中间值作差,得到该行的偏移量,中间值33位赛道的中心位置点,偏移量表示在车模的视角下黑线
处于赛道中的位置值。把每一行的偏移量相加之和除以摄像头前瞻范围内的提取出的黑线行数,得到黑线相对于车模中心的整
体偏移量even_diff,用有效行内的远处某些行与近处某些行(如前半场与后半场)偏移量之差得到有效行内的黑线斜率
D_differen。
这样,从一场的黑线位置数据中,系统提取了有效行valid_line、even_diff、D_different 3个量来对舵机进行控制。在实际情况
中,D_different可以很灵活,因为前方黑线的斜率可以取不同段得到,可以根据实际要求得到不同段的斜率值,如速度快时可
以适当的取距车较远处的黑线斜率,以实现超前控制。
在智能车调试参数的时候,对这3个量的理解很是重要,具体来说,valid_line表征车模的有效前瞻,即看得有多远,对于智能
车在道路上行驶,看得远说明黑线都在前方,看不远说明智能车前方的黑线已经偏左或者偏右,而这个量的大小正好可以表征
弯的平缓与急切。另外,看得远则摄像头采集的黑线多,系统信息量大,那么怎么处理这些大量的信息为我们所用就变得很关
键,如看得1.2 m都能看见,说明小车必然在长直道上,不然也是小S弯,稍作处理就可以过滤掉小S弯了,让小车像都是在
直道上跑;看得很近说明弯已经很急,这时候,只要能够判断出弯往那边拐就可以给舵机一个极值急拐。even_diff表征在某
评论0