基于视觉的车辆控制系统设计与实现
2019-04-24李博威侯明蒋泽鑫
李博威 侯明 蒋泽鑫
北京信息科技大学,北京 100192
关键字:鹰眼;PID;单片机;智能车
一、引言
伴随着科学技艺的快速发展,智能化技术的研究和开发势头强劲,发展越来越快,应用的范围也得到了极大的扩展,复杂环境下的人工智能数量迅猛增加,其中,智能化车辆作为人工智能的一个重要旁支,也受到了日益增长的关注。
基于视觉的智能车辆可以在人类无法作业的环境中作业,这种创新性技术的开发与研究,可以减少不必要的花费,加快工作进程,提高效率,节约成本。
上个世纪80年代,机器视觉开始在车载视觉系统中出现,汽车厂家的参与和政府的支持促进了机器视觉的发展,主动机器视觉的研究前期进展缓慢,在完成了以联合传感器为基础的硬件实验后,实现了对传感器的主动控制,从而通过对环境的识别和实时跟踪实现了对运动的控制,从此摄像头常用于检验视觉的工作。目前,机器视觉具有能遥测、检测信息大等优点,常用于路径识别。因考虑成本,许多科研人员通过算法的改善减少计算量。
本文从智能车机械结构、供电电路设计、控制算法等方面详细介绍智能车的整个准备过程。
二、机械结构
小车整体结构由舵机、摄像头、编码器等部分组成。如图1所示。
1、舵机的安装
舵机的安装现在有两种转向器安装方案:水平安装、垂直安装。 水平安装方案的优点是响应速度较快,安装比较方便,重心减少,但是左右的转向杆的长度不一样,导致两侧做出转向时的响应时间不同;垂直安装则是增加了方向舵框架的高度,并使智能小车响应更灵活。我们通过伺服性能的比较和实际情况的需求,选择了垂直安装的方案。为了能够让智能小车可以获得更好的响应速度,我们通过大量的实验测试,最终选用了一套舵机连片,实现了预期目标,安装图如图2所示。
2、摄像头的安装
为了可以获取稳定可靠的信息,必须要将摄像头固定牢固。在固定摄像机的过程中,它还需要可以进行上下调整,所以我们使用轻质铝合金夹持组件,因此可以获得最大的刚度质量比,这样整个设备就拥有了非常高的定位精度和刚度,并且摄像头容易进行拆卸和维护,具有更好的保障能力。按照我们的需求,底座和摄像头安装的实际设计如图3所示。
3、编码器安装
编码器的齿轮需要调整,目的是使它与所配备的差速齿轮紧紧地契合在一起,以提高被测速度的精确度。如果咬合过紧,齿轮间隙过小,声音会变得沉闷,有滞后的现象,这会使电机负载增加;如果齿轮间隙太大,那么将会发生电机的空转现象,编码器的齿轮和差速齿轮不能有效地契合,发出的声音将会异常的刺耳。为了方便编码器的安装,在设计整体的小车框架时,已经预先留下了编码器安装位置,不需要再另外制作配件,安装完成后如图4所示。
三、电路设计
智能车的控制方案中,采用单片机作为核心控制器,也就是智能车的“大脑”,是整个智能车的核心。K60核心板通过摄像头对路径信息采集、编码器对脉冲信号的采集、智能车速度调节,将控制算法写入程序中,计算相应的电机的控制量,对舵机与驱动电机进行控制,通过测速模块的反馈,电机进行的闭环控制控制了小车的整体运动,如图5所示。
电源是智能小车的动力来源,也为智能小车的控制系统提供可靠的供电,我们采用电压7.2 V、容量2000 mAh可充电镍镉电池作为系统的电源。由于7.2 V的镍镉电池不能为控制器和其他模块直接供电,因此需要设计电源转换电路。电源转换电路对于任何一个电路系统都非常重要,是智能小车稳定运行的基础。
本章主要介绍了我们设计的电源转换电路,以及采用BTN7971为主要芯片的驱动电路。
1、舵机供电模块
这款小车装配的转向舵机采用的型号为FutabaS3010,其特点是成本较低、扭矩较高,电压的变化范围为4.5 V~6.0 V,为了使舵机具有更快的响应速度和更大的转矩,我们决定使用6.0 V电源电压[1]。我们采用的是7.2 V电池,因此选择了 Lm2941可调稳压芯片,经过长时间的试验,该模块稳定性很好。电路如图6所示。
2、液晶屏、鹰眼供电模块
液晶屏的型号是ST7735S,摄像头的型号是OV7725,对数据手册查询,二者需要供电3.3 V,因此选用AMS1117-3.3[2],通过测试能够满足需要,这款稳压器性价比很高,能够很稳定地将电压降至3.3 V。供电模块如图7所示。
3、MCU供电模块
K60DN512ZVLQ10是Kinetis系列中的一款增强型32位单片机,K60最小系统核心板是本控制体系的重要部分[3]。它主要是负责收取和分析所接收到的行进路径的信息、小车速度反馈等信息,并对信息进行适当操作。在控制算法的控制下,为舵机形成合适的输出量。用驱动电机操控小车速度,以便使整个小车快速前进,控制小车[4]。
K60核心板的电压是3.3 V,因此,我们同样使用稳压芯片AMS1117-3.3进行稳压,MCU供电电路设计图如图8所示。
4、编码器供电模块
编码器需要系统5 V的电压进行供电,从而我们运用ASM1117系列的5.0版本的稳压芯片进行稳压,其供电模块如图9所示。
5、驱动电路
小车需要驱动两个电机,我们选用了集成电机驱动芯片的电机驱动方式,现在非常实用的是BTN系列驱动芯片,因此选择了BTN7971芯片,此芯片是通过半桥来进行驱动的,因此要完成正转和反转则需要两片芯片。
两个半桥智能功率驱动芯片BTN7971组合成一个全桥驱动器,使电机发生旋转,通过施加频率为20 kHz的PWM信号来掌控,以完成正向和反向PWM驱动和正反向制动[5],驱动模块如图10所示。
四、软件设计
整个软件系统有两部分:路径识别和速度方向。这些都是通过控制车模的摄像头和驱动电机与舵机完成的。系统将摄像头采集的数据处理,通过边线处理达到路径识别,进而进行舵机与电机的控制,两者是相互协同配合的。
1、路径边线处理
(1)直接逐行扫描原始图像,根据设置的阈值提取黑白跳变点;
(2)按照循迹算法开始循迹,对于前三行,采用由视野中心向两边找点的方式,找出近处赛道边沿线;
(3)行驶路径宽度有一个范围,在确定的路径宽度的有效范围内提取边沿,可以滤除不在边沿内的干扰;
(4)对于十字,由于双侧赛道边沿的丢失,确定找点的初始位置,选择由中间向两边找的方式寻找路径,同时根据矫正图像滤除十字拐角线,从而顺利连线;
(5)中心引导线,从视野的两边向中间扫描,判断中心引导线并控制舵机打角,让小车沿引导线行驶。
边沿提取算法的流程如图11所示。
2、舵机PID参数整定
在舵机的控制方法中,通过测试之后发现,在将积分项I置零的时候,舵机在需要快速响应的情况下,它的响应速度相比于稳定性和准确性而言,要具有更加重要的地位,并且,在将积分项I置零的同时,智能小车在直道上快速行进的时候,其舵机的转向方面不会发生振荡,所以基本上不需要Ki参数来进行积分调节,我们对于微分环节D的选取方法是采用定值,其原因是因为舵机在智能小车的行进过程中都需要较强的响应能力,因此采取定值可以保证它的响应能力。所以我们最终采取的Kd值为45,Kp则需要通过智能小车所采用的路线来进行选择,Kp是通过经验法得出。
舵机控制采用位置式PID控制,因为位置式PID不需要对控制量进行复制,其公式为:
在从路径信息中获得Kp信息之后,再通过图像处理,我们获得了一个偏差值,并且记录了上次的偏差值,从而根据PID公式计算获得舵机最终需要的角度。其最终的完整程序的获取Kp、计算误差、记录和改变误差如下所示。
jiaodu_num=(int)(duoji_pid.Kp*duoji_pid.err+direct_Kd*(duoji_pid.err-duoji_pid.err_last))。
3、电机PID参数整定
在尝试使用传统的PID方法进行速度控制时,发现无法达到理想的速度要求,我们最后采用了增量式PID算法[6]:
我们要在程序中定义几个变量:此时的速度,期望输出的速度,本次PWM的输出值,PID的分别数值,上次的差值和上上次的差值。其中,P、I、D的值按照公式(2)分别用本次偏差值、上次偏差值和上上次偏差值进行运算,PWM值则是通过将P、I、D值相加得到。其中,本次的偏差值是通过由预期的速度与目前的速度相减得到,当前的速度是由编码器采值等方式得到,在进行完一次运算之后,本次的偏差和上次的偏差依次变成上次的偏差和上上次偏差。得到的PWM就是占空比,从而进行电机的控制[7]。
pidl.PWM+= (int16)(P*error1 + I*error0 + D*error2)。
五、 总结
总体来说,对车模方向、速度的控制方案可以使小车在赛道上行驶。但是在路径识别方面,小车有时无法很好地提取边线从而造成误差,这是我们设计的短板,尚没有做出更好的解决方案,从而使车模运行到这些位置的时候行驶明显不够流畅,这是我们以后需要改进的地方。
六、结论
基于视觉的车辆控制是一个集动态决策和规划、环境感知、行为控制和执行等多种功能于一体的综合复杂系统,其关键在于如何通过图像处理更准确地还原现实中的路况信息,进而进行车辆控制,最终实现车辆的平稳安全行进。