简 介: 本文设计的智能车系统以 为核心控制单元,通过CMOS摄像头检测赛道信息,使用数字摄像头采集赛道的灰度图,通过动态阈值算法生成二值化图像数组,提取黑色引导线,用于赛道识别;通过光电编码器检测模型车的实时速度,使用PID控制算法调节驱动左右电机的转速,实现了对车运动速度和运动方向的闭环控制。为了提高模型车的速度和稳定性,使用C#、MFC上位机等调试工具,进行了大量硬件与软件测试。实验结果表明,该系统设计方案确实可行。
学 校:北京科技大学
队伍名称:北京科技大学智能视觉组
参赛队员:范一鸣
潘依涵
陈云青
指导教师:马飞
引 言
随着信息技术的发展,汽车的电子化模块越来越多,智能汽车领域受到了大量的关注。受教育部高等教育司委托(教高司函[2005]201号文),高等学校自动化专业教学指导分委员会主办全国大学生智能汽车竞赛,以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。
参赛选手须使用竞赛秘书处统一指定并负责采购竞赛车模,自行采用 32 位微控制器作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等,完成智能汽车工程制作及调试,于指定日期与地点参加场地比赛。参赛队伍之名次(成绩)由赛车现场成功完成赛道比赛时间为主,技术方案及制作工程质量评分为辅来决定。
本届全国大学生智能汽车竞赛分竞速赛和创意赛,竞速比赛分为基础四轮组、节能信标组、智能视觉组、电磁越野组、双车接力组、全向行进组、单车拉力组、专科基础组八个组别,分别进行比赛,我队参与智能视觉组比赛。此次比赛按照官方规定需使用C型车模,使用指定NXP系列单片机,完成本次比赛设计。
本篇技术报告主要包括机械系统、硬件系统、软件系统等,详尽地阐述了我们的设计方案,具体表现在硬件电路的设计以及控制算法的部分想法,希望能和其他学校的同学交流沟通,更进一步。
第一章 方案设计
1.1系统概述
摄像头车的系统整体结构如图所示。微处理器通过采集模拟CMOS摄像头的硬件二值化信号,得到赛道边沿信息;通过采集陀螺仪数据分析计算过桥信息;通过采集光电编码器对车轮转速的脉冲计数,得到车行进的速度数据。通过微处理器对图像处理,对角度、速度进行PID控制,最后PWM波输出驱动电机、舵机。
第二章 智能车机械
根据今年组委会的相关规定以及智能视觉组比赛规则使用新C车模完成任务,因此需要合理的方案完成任务。在比赛备战之初,我们就对该车模进行了详细的系统分析。但由于新C型车模精度不是很高,因此在规则允许范围内尽量改造车模,提高车模整体精度,以提高车辆行驶的稳定性。本章将主要介绍智能汽车车模的机械结构及调整方案。
2.1车体机械方案
根据十六届智能车竞赛细则对智能视觉组的要求,我们选择新C车模完成任务。
2.2四轮车模机械建模
此次竞赛的四轮赛车车模选用由东莞市博思电子数码科技有限公司提供的新C型车模。车模外形如图2.1所示:
▲ 图图2 1 四轮车模俯视图
2.2.1四轮车模前轮倾角的调整
四轮车模后桥固定,对于后桥并无大的改动。在调试过程中,我们发现前轮对于车模的运行影响较大,并且由于前轮轴和车轮之间的间隙较大,对车高速时转向中心的影响较大,会引起高速转向下模型车的转向不足。然而这里是规则中严禁改动的部分,所以为了尽可能降低转向舵机负载,我们对前轮的安装角度,即前轮定位进行了调整。
前轮定位的作用是保障汽车直线行驶的稳定性,转向轻便和减少轮胎的磨损。前轮是转向轮,它的安装位置由主销内倾、主销后倾、前轮外倾和前轮前束等4种可调参数决定,实现转向轮、主销和前轴等三者在车架上的位置关系。
在实际调试中,我们发现适当增大内倾角可以增大转弯时车轮和地面的接触面积,从而增大车了地面的摩擦程度,使车转向更灵活,减小因摩擦不够而引起的转向不足的情况。并且我们智能视觉组设计的车模相对于往届车模来说重心更高,更靠前,所以我们对于主销后倾做了一些调整。
2.2.2底盘高度的调整
在保证顺利通过坡道的前提下,底盘尽量降低,从整体上降低模型车的重心,可使模型车转弯时更加稳定、高速。但是过低的底盘会造成上桥剐蹭底盘等的现象,对车模正常行驶造成影响。
2.2.3齿轮啮合以及编码器的安装
考虑到智能视觉组需要停车这一问题,我们对于车子齿轮啮合需要较高的要求,如果啮合不好,对于车子正常行驶和停车正不正都有较大影响。为了更为精确的获得电机转速的返回值,本次车模上安装的是与上届相同的编码器。最终综合考虑了读数精准和重心分布两大因素,用齿轮进行了安装配合,尽量使得传动齿轮轴保持平行,传动部分轻松、流畅,不存在过大噪音,卡齿,丢数情况。如图2.2所示。
▲ 图图2 2 编码器安装
2.2.4 舵机安装结构的安装
考虑到主板的安装方便以及车模转向性能,我们对舵机安装结构进行了较大的调整。比赛车模的转向是通过舵机带动左右横拉杆实现。舵机的转动速度和功率是一定,要想加快转向机构的响应速度,唯一的办法就是优化舵机的安装位置及其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。利用实际参数经计算,我们得出了一套可以稳定高效工作的参数及结构。
最终,我们设计了一套舵机连片(转向拉杆),综合考虑了速度与力矩的关系,并根据模型车底盘的具体结构,简化了安装方式,实现了预期目标。
关于舵机的安装方式,我们实验室较为主流的有直立式安装和倒置式安装,我们的舵机安装如图2.3所示。
▲ 图图2 3 舵机安装
2.2.5 舵机转角分析
车模的转向运动主要是靠舵机和前轮来实现的,因此,关于舵机和前轮转向关系的分析就显得尤为重要。依据数学建模,通过MATLAB进行分析后,得出了如下结果。
右前轮转角(绿色)及舵机转角(红色)关于转弯半径关系图,如图2.4所示。
舵机转角关于(右)前轮转角关系图,如图2.5所示。
由以上两图得出结论:
舵机转角变化范围即使较小,转弯半径的变化也会很大,因而对多级的控制显得尤为很重要。
前轮打角越小,随着打角变化,转弯半径变化越明显,即小转角对半径的变化会更加明显,因而从前桥到舵机连片的机械固定需牢靠,尽量减少虚位。
舵机转角关于前轮转角呈线性变化,在思路上为通过舵机转角改变从而获得所要前轮转角提供便利。改变前束,获得新的右前轮转角(绿色)及舵机转角(红色)关于转弯半径关系图,如图2.6。通过与图2.4的对比,获得两种前轮方案对转角的影响,从而选择合适的方案。
▲ 图2.6
2.2.6 摄像头的安装
为了降低整车重心,需要严格控制CMOS摄像头的安装位置和重量,我们自行设计了轻巧的铝合金夹持组件并采用了碳纤维管作为安装CMOS的主桅,这样可以获得最大的刚度质量比,整套装置具有很高的定位精度和刚度,使摄像头便于拆卸和维修,具有赛场快速保障能力。摄像头的安装如图2.7所示。
▲ 图2.7
2.2.7 运用mini摄像头完成任务设计
在mini摄像头固定的设计时,由于mini摄像头需要旋转,我们用了一个小金属舵机带动mini旋转,这样既可以减小体积,又可以减轻重量,固定方式和CMOS摄像头一样,该方案具有高稳定性以及高鲁棒性的优点。经过实际测试后,该方案可行性得到了验证。
第三章 电路设计说明
3.1硬件方案设计
我们主要从系统的稳定性、可靠性、高效性、实用性、简洁等方面来考虑硬件的整体设计。从最初方案设定到最终方案的敲定,我们经历各种讨论与大的改动才有了如下的硬件方案。
可靠性与稳定性是一个系统能够完成预设功能的最大前提。在原理图与PCB的设计过程中,我们考虑到各个功能模块的电特性以及之间的耦合作用。对易受干扰的模块做了电磁屏蔽作用,而其他部分则做了相应的接地、滤波、模拟与数字电路的隔离等。
高效与实用性是指本系统的各模块能充分完美的实现相应的功能。从以下两点可以体现出:
视频信号的提取一般有三种方法:片内AD转化、基于TLC5510的8位并行AD、硬件二值化。第一种方通过片内AD转换把连续的模拟视频信号转为数字信号存储起来。第二种方法通过外部AD芯片直接把视频信号转为并行的数字信号,而处理芯片只要通过普通IO来读取存储;前者不需要外部电路但浪费系统时间,对于主频不高的处理芯片会造成很大负担。而后者虽然精度高但浪费过多的硬件资源。硬件二值化是通过比较器去捕捉视频信号的跳变沿,这不仅减少了采集时间,也节约硬件资源,还省去了许多存储空间。但硬件二值化灵活性差,在面对复杂光线环境,固定阈值无法根据需求动态调整局部阈值,无法解决光线分布不均匀的赛道环境。数字信号虽然占用运算资源,但在芯片运算能力满足的条件下,可以通过程序复杂算法应对光线分布不均匀的赛道环境,适应能力更强。
对于电机驱动,由于新C车模电机对驱动性能要求高。我们设计了由单独的驱动芯片组成驱动器,该驱动器瞬间驱动电流最大可以达到几十安。
简洁是指在满足了可靠、高效的要求后,为了尽量减轻车模的负载,降低模型车的重心位置,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻,易于安装。在设计完原理图后,注重PCB板的布局,优化电路的走线,整齐排列元器件,最终做到电路板的简洁。
3.2传感器选择
3.2.1摄像头选择
- COMS与CCD
CCD摄像头具有对比度高、动态特性好的优点,但需要工作在12V电压下,对于整个系统来说过于耗电,而且CCD体积大,质量重,会抬高车体的重心,这对于高速情况下小车的行驶非常不利。
与之相比,COMS摄像头具有体积小、质量轻、功耗低,图像动态特性好等优点,因为小车对图像的清晰度,分辨率要求并不高,所以选用COMS摄像头。
对于摄像头的选择,主要考虑以下几个参数:
- 芯片大小自动增益分辨率最小照度信噪比标准功率扫描方式
其中芯片大小主要会对视场的范围会有影响,扫描方式主要有追行扫描以及隔行扫描,像ov5116就是隔行扫描。
市面上的摄像头主要分为数字和模拟两种,数字摄像头主要有OV7620,OV6620,OV7670,OV7725,模拟摄像头主要有OV5116,BF3003,MT9V136。大多数摄像头都支持sccb通信,可以很好的实现单片机与摄像头之间的交互。
智能车的摄像头队图像的分辨率要求并不高,但是对动态特性要求非常高,特别是小车在高速行驶入弯或者出弯的时候,图像变化较大,这就对摄像头的自动增益有较高的要求。一般来说,在摄像头图像发生突变时,感光芯片本身会有一段适应时间,这段时间要求越小越好。
我们先后试用了OV5116、MT9V022、OV7725、BF3003、MT9V136以及PC1030N等摄像头,后四种均为彩色摄像头,在经过硬件二值化后可以取其有效信息,与黑白数字摄像头得到的信息类似。经过对比,虽然后四种摄像头图像效果更好,动态性能也更好,但是在弯道、回环等元素中由于自动曝光导致得到赛道信息不准确,在智能车应用中MT9V022已足够满足需求,因此我们最终选择了MT9V022数字摄像头。
3.2.2陀螺仪选择
本届大赛对陀螺仪的型号没有限制,经过挑选我们最终确定陀螺仪使用L3G4200D。
L3G4200D该产品为ST推出采用一个感应结构检测三条正交轴向运动的3轴数字陀螺仪。L3G4200D是三轴共用一个感应结构,这一突破性概念可以消除轴与轴之间的信号干扰,避免输出信号收到干扰信号的影响。
3.2.3编码器选择
为了使用闭环控制,我们在汽车模型上附加了编码器。经过机械和电路性能的考虑和挑选,最终我们选用了ABI Mini增量式旋转编码器。
和其他元件相比,选用编码器可以使电路更加完善,信号更加精确。编码器功耗低,重量轻,抗冲击抗震动,精度高,寿命长,非常实用。编码器内部无上拉电阻,因此编码器接口出需要设计上拉电阻。同时为了保证波形的稳定,主控板上使用了74HC14非门隔离。微处理器自身具有正交解码功能,因此这里无需使用任何外围计数辅助器件,只需要将接口连接到单片机上相应的接口即可。接口如图3.1和图3.2所示。
▲ 图3.1 编码器接口
▲ 图3.2 非门电路
3.3电路模块实现
3.3.1电源管理模块
首先了解一下不同电源的特点,电源分为开关电源和线性电源,线性电源的电压反馈电路是工作在线性状态,开关电源是指用于电压调整的管子工作在饱和和截至区即开关状态的。线性电源一般是将输出电压取样然后与参考电压送入比较电压放大器,此电压放大器的输出作为电压调整管的输入,用以控制调整管使其结电压随输入的变化而变化,从而调整其输出电压,但开关电源是通过改变调整管的开和关的时间即占空比来改变输出电压的。
从其主要特点上看:线性电源技术很成熟,制作成本较低,可以达到很高的稳定度,波纹也很小,而且没有开关电源具有的干扰与噪音,开关电源效率高、损耗小、可以降压也可以升压,但是交流纹波稍大些。
电源模块对于一个控制系统来说极其重要,关系到整个系统是否能够正常工作,因此在设计控制系统时应选好合适的电源模块。竞赛规则规定,比赛使用智能汽车竞赛统一配发的标准车模用7.2V 2000mAh Ni-cd供电或者使用锂电池(两节18650,2AH,配备保护板),我们在多次尝试对比之后选择采用锂电池。而路径识别的CCD传感器均使用的是3.3V的电源。单片机系统、陀螺仪、编码器需要5V电源,伺服电机工作电压范围为4V到6V(为提高伺服电机响应速度,采用7.2V 供电),直流电机可以使用锂电池直接供电,智能汽车电压调节电路示例见图3.3。
▲ 图3 3 电源管理模块原理图
在电源管理模块中,我们选用了5片TPS7350和2片TPS7333,其中DCDC5-12和IR2184S共用一个5V电源,逻辑元件和编码器共用另一个5V电源,OpenArt mini单独使用一个5V电源,主单片机单独使用一个5V电源,其余模块共用3.3V电源。为了使摄像头的供电稳定,满足摄像头在高速下的运行要求,我们外加了一块5V电源单独给摄像头供电。
16届规则规定,AI视觉组的微控制器使用 NXP 公司的任意一款单片机。经过考虑,我们决定采用 微处理器作为主控单片机。我们最先使用TPS7350作为 微处理器的供电芯片,但是在实际使用过程中发现TPS7350容易出现过热保护的问题,考虑到 微处理器的功耗比较大,我们决定不采用LDO作为 微处理器最小系统的供电芯片,而是更换为DC-DC降压芯片。我们向后尝试了AOZ1280CI和MP1584EN这两款芯片,实际使用一段时间后,我们最终确定使用MP1584EN。其原理图和PCB布局如下:
▲ 图3 4 ME1584EN-3.3V稳压原理图
▲ 图3 5 ME1584EN-3.3V稳压PCB布局
3.3.2电机驱动模块
常用的电机驱动有两种方式:
一、集成电机驱动芯片;
二、采用N沟道MOSFET和专用栅极驱动芯片设计。市面上常见的集成H桥式电机驱动芯片中,33886型芯片性能较为出色,该芯片具有完善的过流、欠压、过温保护等功能,内部MOSFET导通电阻为120毫欧,具有最大5A的连续工作电流。使用集成芯片的电路设计简单,可靠性高,但是性能受限。由于比赛电机内阻仅为几毫欧,而集成芯片内部的每个MOSFET导通电阻在120毫欧以上,大大增加了电枢回路总电阻,此时直流电动机转速降落较大,驱动电路效率较低,电机性能不能充分发挥。
由于分立的N沟道MOSFET具有极低的导通电阻,大大减小了电枢回路总电阻。另外,专门设计的栅极驱动电路可以提高MOSFET的开关速度,使PWM控制方式的调制频率可以得到提高,从而减少电枢电流脉动。并且专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。
1.专用栅极驱动芯片的选择:IR公司号称功率半导体领袖,所以我们主要在IR公司的产品中进行选择。其中IR2184型半桥驱动芯片可以驱动高端和低端两个N沟道MOSFET,能提供较大的栅极驱动电流,并具有硬件死区、硬件防同臂导通等功能。使用两片 IR2184型半桥驱动芯片可以组成完整的直流电机H桥式驱动电路。由于其功能完善,价格低廉容易采购,所以我们选择它进行设计,如图3.4所示。
▲ 图3 6 IR2184应用图
2.MOSFET的选择:选择MOSFET时主要考虑的因素有:耐压、导通内阻和封装。智能汽车电源是额定电压为7.2V的电池组,由于电机工作时可能处于再生发电状态,所以驱动部分的元件耐压值最好取两倍电源电压值以上,即耐压在16V以上。而导通内阻则越小越好。封装越大功率越大,即同样导通电阻下通过电流更大,但封装越大栅极电荷越大,会影响导通速度。常用的MOSFET封装有TO-220、TO-252、SO-8等,TO-252封装功率较大、而栅极电荷较小。于是我们最终选择了IR公司TO-252封装的LR7843型N沟道MOSFET,VDSS=55伏、RDS(on)=8.0毫欧、ID=110安。
3、驱动电路的原理分析及元件参数确定
▲ 图3 7 电机驱动分析图
这个驱动设计单从信号逻辑上分析比较容易理解,但要深入的理解和更好的应用,就需要对电路做较深入的分析,对一些外围元件的参数确定做理论分析计算。图3.8中IC是一个高压驱动芯片,驱动2个半桥MOSFET。Vb,Vs为高压端供电;Ho为高压端驱动输出;COM为低压端驱动供电,Lo为低压端驱动输出;Vss为数字电路供电.此半桥电路的上下桥臂是交替导通的,每当下桥臂开通,上桥臂关断时Vs脚的电位为下桥臂功率管Q2的饱和导通压降,基本上接近地电位,此时Vcc通过自举二极管D对自举电容C2充电使其接近Vcc电压.当Q2关断时Vs端的电压就会升高,由于电容两端的电压不能突变,因此Vb端的电平接近于Vs和Vcc端电压之和,而Vb和Vs之间的电压还是接近Vcc电压.当Q2开通时,C2作为一个浮动的电压源驱动Q2;而C2在Q2开通其间损失的电荷在下一个周期又会得到补充,这种自举供电方式就是利用Vs端的电平在高低电平之间不停地摆动来实现的。
由于自举电路无需浮动电源,因此是最便宜的,如图所示自举电路给一只电容器充电,电容器上的电压基于高端输出晶体管源极电压上下浮动。图2.6中的D和C2是IR2184在脉宽调制(PWM)应用时应严格挑选和设计的元器件,根据一定的规则进行计算分析;并在电路实验时进行调整,使电路工作处于最佳状态,其中D是一个重要的自举器件,应能阻断直流干线上的高压,其承受的电流是栅极电荷与开关频率之积,为了减少电荷损失,应选择反向漏电流小的快恢复二极管,芯片内高压部分的供电都来自图中自举电容C2上的电荷;为保证高压部分电路有足够的能量供给应适当选取C2的大小.
MOSFET具有相似的门极特性,开通时需要在极短的时间内向门极提供足够的栅电荷,在自举电容的充电路径上,分布电感影响了充电的速率,下桥臂功率管的最窄导通时间应保证自举电容有足够的电荷以满足栅极所需要的电荷量再加上功率器件稳态导通时漏电流所失去的电荷量.因此,从最窄导通时间为最小值考虑,自举电容应足够小;综上所述,在选择自举电容大小时应考虑,既不能太大影响窄脉冲的驱动性能;也不能太小影响宽脉冲的驱动要求,应从功率器件的工作频率、开关速度、门极特性等方面进行选择、估算后调试而定。
3.3.3视频处理模块
我们的智能模型车自动控制系统中使用黑白全电视信号格式CMOS摄像头采集赛道信息。摄像头视频信号中除了包含图像信号之外,还包括了行同步信号、行消隐信号、场同步信号、场消隐信号以及数字信号等。因此,若要对视频信号进行采集,就必须通过SCCB设置数字摄像头的部分参数。
3.3.4 OpenArt mini
对于AI视觉组来说,要完成AI部分的识别二维码、数字、水果、动物等任务,OpenArt mini是必不可少的。我们购买了逐飞的成品摄像头,通过串口将识别的信息与主单片机进行通信,从而执行对应的任务。
3.3.5接口及外接模块
对于单片机最小系统、陀螺板、视频模块、OpenArt mini,我们在主板上设计了外接接口,用于连接。
▲ 图 3.8:微处理器 控制最小系统接口
▲ 图3 9:微处理器 图像最小系统接口
我们最小系统的原理图参考了龙邱公司、NXP公司的 微处理器最小系统原理图,我们更改了内核供电方案,屏蔽了没有使用到的引脚。在软件上,我们使用了龙邱公司提供的开源库。
在调试过程之中,我们需要实时的了解与掌握一些车的运行状态,比如说传感器的状态,舵机的转角等,调试时用OLED显示屏将这些参数显示出来,让我们实时的监测车的状态,从而做出判断,这样很大程度的方便了对车的调试。
第四章 智能车控制软件
高效的软件程序是智能车高速平稳自动寻线的基础。我们设计的智能车系统采用CMOS摄像头进行赛道识别,图像采集及校正处理就成了整个软件的核心内容。在智能车的转向和速度控制方面,我们使用了鲁棒性很好的经典PID控制算法,配合使用理论计算和实际参数补偿的办法,使智能车能够稳定快速寻线。
4.1赛道中心线提取及优化处理
4.1.1原始图像的特点
在单片机采集图像信号后需要对其进行处理以提取主要的赛道信息,同时,由于交叉道、起点线的存在,光线、杂点、赛道远处图像不清楚的干扰,图像效果会大打折扣。因此,在软件上必须排除干扰因素,对赛道进行有效识别,并提供尽可能多的赛道信息供决策使用。
在图像信号处理中我们提取的赛道信息主要包括:赛道两侧边沿点位置、通过校正计算的赛道中心位置,中心点规划面积,赛道变化幅度,赛道类型判别。
由于摄像头自身的特性,图像会产生梯形式变形,这使得摄像头看到的信息不真实。因此我们利用赛道进行测量,创建函数还原出了真实赛道信息。原始图像是一个将数字图像经模拟电路转换得到的二维数据矩阵,矩阵的每一个元素对应一个像素点,近处的图像大,黑线为梯形状。
程序上将每一行的黑白跳变点(跳变点按从右到左的顺序)记录下来,保存到两个二维数组里(分别表示上升沿、下降沿)。通过遍历上升沿和下降沿可以完成赛道边沿的提取。
摄像头采集到几种典型赛道图像如图4.1~图4.4所示。
4.1.2赛道边沿提取
边沿提取算法的基本思想如下:
(1) 直接逐行扫描原始图像,根据设定的阈值提取黑白跳变点;
(2) 赛道宽度有一个范围,在确定的赛道宽度范围内提取有效赛道边沿,这样可以滤除不在宽度范围内的干扰;
(3) 利用赛道的连续性,根据上一行白块的位置和边沿的位置来确定本行的边沿点;
(4) 求边沿点时,因为近处的图像稳定,远处图像不稳定,所以采用由近及远的办法;
(5) 进出十字的时候,通过校正计算出边沿角度可较好的滤除十字并补线;
(6) 人字元素是整个赛道边沿角度是尖锐角的部分,根据这个特征通过计算边沿的角度以及内侧两条边沿包络形成的面积可以有效的识别出人字;为了排除赛道方向的突变对控制造成干扰,将人字建模成为具有一定曲率的弯道,并进行补线;
(7) 由于权重分配的问题,如果不对障碍进行一定的处理的话,控制量对于远端的障碍相应比较小,可能在很接近障碍的时候才有响应,这样很容易造成撞到障碍,为了消除这种影响,我们利用曲线包络的形式 将障碍作用的区域人为扩大,这样有效避免了碰撞障碍的危险。
边沿提取算法的程序流程如图4.5所示。
处理后得到的黑线中心如图4.6~4.9图所示。
4.1.3图像校正
图像校正的实现如下:(1) 调整好摄像头位置、前瞻,固定好;将摄像头对准黑白相间的赛道板,然后用电视观看摄像头图像,用照相机对准电视拍照(见图4.10);
(2) 从照片中截取出赛道部分,然后用matlab编写程序,载入图片并进行相应的桶形变换、透视变换,调整好参数,生成校正表和反校正表;
▲ 图4.11 校正后的效果
(3) 在单片机程序中加入常量表,然后就可进行相应的校正和反校正变换了。(4) 用上位机观察的校正效果如下:
▲ 图4.12 上位机模拟校正
4.1.4推算中心
通过之前提取的赛道边沿数据推算中心:当左右边沿点总数较少时返回;若只有单边有边沿点数据,则通过校正对单边数据按法线平移赛道宽度一半的距离;当能找到与一边能匹配上的另一边沿点时则直接求其中心作为中心点。推算完中心点后,对中心点进行均匀化,方便之后的控制。计算出的中心点效果如下:
4.1.5摄像头图像入库的处理
我们的策略是使用摄像头后车入库。车子接到球跑完赛道后半段,图像在车库前先识别出车库的特征,判断出当前图像为车库后,寻找入库补线的起始点和终止点,然后调用补线函数,在图像校正域中补一条半径为赛道宽度的四分之一圆弧,对左右边界点进行均匀化处理后,就得到了以上图像。
4.1.6路径选择
根据往届比赛以及本届华北赛的经验,赛车能否以最短的时间完成比赛,与赛车的速度和路径都有着密切的关系,因此,如何使赛车以一个最合理、最高效的路径完成比赛是提高平均速度的关键。对于赛车路径的优化,我们从以下三个方面来完成:
1)增加视场的长度和宽度根据我们的分析,当赛车采集到的图像能够覆盖一个比较完整的S弯道时,通过加权算法计算出来的中心就会处于视场中央附近,此时赛车会以一个比较好的路径快速通过S弯道;相反,如果视场无法覆盖一个完整的S弯道,赛车就会误处理为普通的单向弯道,这样赛车的速度就会大大减慢。因此,尽量增大视场的长度和宽度就很有必要了。
视场的长度与单片机可以处理的图像行数成正比。我们采用由运算放大器制作的模拟比较器进行图像二值化,处理速度较A/D转换有了很大提高,大大增加了单片机处理的图像行数,最终处理行数为95行(隔3行提取一行),达到的视场长度为200多cm。为了增加视场宽度,增加每行采集的图像点数之外,我们采用了广角镜头,从而有效地增加了视场宽度。
2)优化加权算法对整场有效行的中心求加权平均值的算法,在低速情况下可以有效地优化赛车路径,但在赛车速度提高到一定程度之后由于过弯时的侧滑,路径不是很好。而由于图像分布不均,三分之二的行分布于车体前方40cm的范围内,求出的加权平均值受车体近处的图像影响较大,因此整场图像求加权的算法对于高速情况下的路径优化效果不是很明显。
为了解决这个问题,我们对于参与加权计算的图像行数及权重进行了处理,减小了车体前部50cm范围内的图像参与加权的行数和权重,同时增大视场前部图像的权重。在经过长期调试之后,得到了一套比较合适的参数,能够有效优化高速情况下的赛车路径。
3)对不合理的中心点进行处理对于在校正后的图像数据中求得的中心线,反校正到原始图像后存在一行中含有多个中心点的情况。在通常情况下,这种情况出现在较远的视野中,但由于我们增大了视场前部图像的权重,这些中心点对权重的影响极大,导致车模容易出现掉轮甚至冲出赛道的现象。
为了解决这个问题,我们利用数学方法求出了中心线的折点,对折点之后的中心点单独处理,使车模不再出现掉轮的现象。
4.2折点求取原理简介
折点是指数学中的极值点,即一阶导数为0的点,但一阶导数为0的点不一定都是极值点,究竟是否是极值点,还要判断二阶导数。在图像的离散数据中,极值点的离散化计算公式如式如下:
但这个公式在图4.18中存在一些问题,对于(Xn,Yn)点,由于 为0,所以该点不会被判断为极值点。但我们认为这样的点也能反映图像的特征,因此对上式作出修改得到新的折点计算方法:
极值点是针对某一个坐标轴而言的,对上式稍作修改,即可得到针对另一个坐标轴的极值点的计算公式:
将两个方向上的极值点结合使用,不仅可以对不合理的中心点加以滤除,还可以实现对赛道类型的粗略判断。
4.3PID控制算法介绍
【PID算法,省略】
4.4转向舵机的PID控制算法
对于舵机的闭环控制,我们采用了位置式PID控制算法,根据往届的技术资料和实际测试,将每场图像的黑线中心加权平均值与舵机PID参考角度值构成一次线性关系。
在较低速(2m/s以下)试验时,在偏离黑线很少的某个范围,将Kp直接置零,在偏离黑线较少的某个范围,将Kp值减小为原来的一半,在偏离较大的其他情况,则保持Kp原来的大小。取得的实际效果在弯道较多、直道较短的赛道上,车子转弯流畅,直道也能基本保持直线加速,车身左右抖动较小。
在提高车速至高速(2.5m/s以上)时,我们发现车身在直道上特别是长直道上时,车身左右震荡比较严重,究其原因,硬件上,我们认为首先是轮轴本身的松动并且转向机构左右转向性能可能存在不对称性,设计有待改进,软件上,则是自身编写的PID舵机控制还不够精细,动态适应能力不够。在从弯道到直道的过程中,由于小车寻赛道本质上是一个随动系统,积分项在弯道累积的偏差错误地加在直道的跟踪上,造成在进入直道时转向不够准确,跑直道时虽然能跟踪黑线,但是转向调整往往超调,导致车身在直道上左右震荡,这种震荡严重影响了车的整体速度。此外,我们对S弯的控制也过于简单,没有特别的处理,导致车在跑S弯的时候,几乎完全沿弯走,没有明显的直冲S弯的效果,原因是在前瞻有限的情况下,在采集的图像中S弯入弯和普通弯道是一样的,导致小车开始转向,由于中间一直检测到弯道,小车会沿S弯道左右震荡,同时相应会减速。
经过反复调试PID参数,我们发现只调整PID参数很难使车在跑S弯和长直道时都选择最佳路径,同时不影响在普通弯处的转向。这就要求系统能够智能地识别出当前赛道是哪种类型,我们没有选择赛道记忆等方法,而采取在不降低远处分辨率的情况下,尽量让摄像头看得更远的方法。最后,在MCU超频的条件下,每行图像采集了210个点,成功地增大了CMOS摄像头采集图像的分辨率。在透视问题影响远处分辨率的制约下,使视场长度(视场最远处和最近处的距离)达到2m多,最远前瞻达到2.20m,足以覆盖赛道中的各种赛道类型,使得我们在程序中并没有加入了对S弯、长直道以及大弯进行可靠识别的算法,仅仅根据中心位置动态改变PID参数,就得到了较好的控制效果。
经过反复测试,我们选择的PID调节策略是:
(1) 将积分项系数置零,我们发现相比稳定性和精确性,舵机在这种随动系统中对动态响应性能的要求更高。更重要的是,在KI置零的情况下,我们通过合理调节Kp,发现车能够在直线高速行驶时仍能保持车身非常稳定,没有震荡,基本没有必要使用KI参数;
(2) 微分项系数KD使用定值,原因是舵机在一般赛道中都需要较好的动态响应能力;
(3) 对Kp,我们使用了二次函数曲线,Kp随中心位置与中心值的偏差呈二次函数关系增大,在程序中具体代码如下:loca_Kp = (loca_error * loca_error)/2 + 1000
其中,local_error是中心位置与中心值的偏差。
▲ 图4 22 中心位置和动态Kp值的二次函数曲线
经不断调试,最终我们选择了一组PID参数,得到了较为理想的转向控制效果。
4.5驱动电机的PID控制算法
对于速度控制,我们采用了增量式PID控制算法,基本思想是直道加速,弯道减速。经过反复调试,将每场图像得到的黑线位置与速度PID参考速度值构成二次曲线关系。在实际测试中,我们发现小车直道和弯道相互过渡时加减速比较灵敏,与舵机转向控制配合得较好。
▲ 图4 23 黑线位置和给定速度的二次函数曲线
在程序中具体代码如下:sPID.vi_Ref = g_HighestSpeed - (59 - g_Control) * (59 - g_Control) * (g_HighestSpeed- g_LowestSpeed)/ 3481 其中,g_HighestSpeed为最高速,g_LowestSpeed为最低速,g_Control为黑线位置,取值范围为0~120,图4.10中,g_HighestSpeed为80,g_LowestSpeed为50。
但是,该方法存在一定的局限。一方面是车在从弯道入直道时加速和从直道入弯道时减速达不到最好的控制效果,弯道入直道减速不够快速,直道入弯道加速的时机不够及时。因此我们做了进一步的改进,根据入弯时黑线位置的特点动态改变二次曲线中最高点(直道的最高速度)和最低点(弯道的最低速度)的大小,结果表明,控制效果更好。另一方面是没有考虑到实际比赛中长直道急速冲刺的情况,赛前在程序中人为设定直线速度不够灵活不够合理,所以我们在程序中根据赛道状态动态提高了直线速度g_HighestSpeed,使车能够在长直道上充分发挥潜能。
4.6 OpenArtMini模块控制
对于视觉识别部分,我们采用了逐飞科技的产品OpenArtMini套件,部署了简单的卷积神经网络,并通过tflite进行模型的量化,最终部署到OpenArtMini上,实现了对动物、水果、二维码、数字的识别。同时通过设置模块的PWM通道占空比实现了激光的点亮。
第五章 调试过程
5.1开发工具 程序开放在IAR Embedded Workbench IDE下进行, Embedded Workbench for ARM 是IAR Systems 公司为ARM 微处理器开发的一个集成开发环境(下面简称IAR EWARM)。比较其他的ARM 开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。
EWARM 中包含一个全软件的模拟程序(simulator)。用户不需要任何硬件支持就可以模拟各种ARM 内核、外部设备甚至中断的软件运行环境。从中可以了解和评估IAR EWARM 的功能和使用方法。
5.2上位机图像显示
5.2.1C#静态上位机
为了观察摄像头采集图像的直观效果,我们还采用了VS2012的C#作为辅助开发调试工具。
我们设计的智能车系统采用CMOS摄像头采集赛道信息,分析处理之后用来编写黑线识别及控制算法。虽然直接将摄像头通过视频接口连接到电视可观察到摄像头所采的图像,但对于图像分析不够方便,且无法实时精确地反馈出一些特定信息。我们在VS2012的C#环境下开发了一套基于PC机平台的图像显示与处理程序,可完成赛道显示及相关参数的实时反馈。
显示区域可原始图像及处理后的中心点,这为控制算法的编写提供了非常好的依据,也大大减少了调试者的工作量。
5.2.2MFC SD卡上位机
我们在VS2012的C++环境下用MFC编写了SD卡上位机,每次模型车跑完全程之后,通过该上位机程序可得到运动过程中的每一场图像及相关数据及曲线,并可使用原始数据进行相关算法的模拟以及校正效果的显示(上位机主界面见图5.3)。
▲ 图5 3 SD卡上位机主界面
▲ 图5 4 SD卡上位机运行界面
模型车在运动过程中,记录下的典型赛道图像,如下图5.5~5.9所示。
5.3SD卡模块
5.3.1SD卡介绍
SD卡( Secure Digital Memory Card )是一种基于半导体快闪存的新一代记忆设备。由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,其大小犹如一张邮票,重量只有2克,却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD卡的数据存储管理可以类似于硬盘的磁盘管理系统,以FAT格式来存储数据。
SD卡的接口支持SD模式和SPI模式,主机系统可以选择其中任一模式。SPI模式允许简单通用的SPI通道接口,这种模式相对于SD模式的不足之处是降低了速度。由于飞思卡尔系列单片机拥有SPI接口,所以我们使用了SD卡的SPI模式。
5.3.2SPI总线介绍
SPI (Serial Peripheral Interface,串行外围设备接口总线) 总线技术是MOTOROLA公司推出的一种同步串行总线接口, 它是目前单片机应用系统中最常用的几种串行扩展接口之一。SPI总线主要通过三根线进行数据传输: 同步时钟线SCK,主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI,另外还有一条低电平有效的从机片选线CS。SPI系统的片选信号以及同步时钟脉冲由主机提供。SPI总线模式的数据是以字节为单位进行传输的,每字节为8位,每个命令或者数据块都以字节对齐的(8个时钟的整数倍)。主机与SD卡的各种通信都由主机控制, 主机在对SD卡进行任何操作前都必须先要拉低SD卡的片选信号CS (card select) ,然后由主机向SD卡发送命令, SD卡对主机发送的任何命令都要进行响应, 不同的命令会有不同的响应格式(1个字节或2个字节响应)。SD卡除了对命令响应外, 在执行写操作时, 还要对主机发送的每个数据块进行响应(向主机发送一个特殊的数据响应标志)。
5.3.3软件实现
首先需要将SPI模块设置为主机模式,并设置相关的寄存器使SPI模块有高速和低速之分。SD卡的软件设计主要包括两部分内容:SD卡的上电初始化过程和对SD卡的读写操作。对SD卡初始化程序流程如图5.10所示。
SD卡上电后,主机必须先向SD卡发送74个时钟周期,以完成SD卡上电过程。SD卡上电后会自动进入SD总线模式,并在SD总线模式下向SD卡发送复位命令(CMD0),若此时片选信号CS处于低电平态,则SD卡进入SPI总线模式,否则SD卡工作在SD总线模式。SD卡进入SPI工作模式会发出应答信号,若主机读到的应答信号为01,即表明SD卡已进入SPI模式,此时主机即可不断地向SD卡发送命令字(CMD1) 并读取SD卡的应答信号,直到应答信号为00,以表明SD卡已完成初始化过程,准备好接受下一命令。
此后,系统便可读取SD卡的各寄存器,并进行读写等操作,每次读写数据都是按照扇区操作的,每次操作512字节。
第六章 模型车的主要技术参数
赛车基本参数
- 长 295mm宽 183mm高 230mm车重 1200g功耗 空载 10W带载 大于12W电容总容量 2500uF传感器 CMOS摄像头 1个陀螺仪 1个编码器 2个OpenArt mini 1个除了车模原有的驱动电机、舵机之外伺服电机个数 1个赛道信息检测 视野范围(近瞻/远瞻) 20cm/240cm精度(近/远) 2/12.5mm频率 50Hz
结论
自报名参加第十六届全国大学生智能汽车竞赛以来,我们小组成员从查找资料、设计机构、组装车模、编写程序一步一步的进行,最后终于完成了最初目标,定下了现在这个设计方案。
在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械、电路以及最重要的控制算法的创新思想。在机械结构方面,我们分析了整车质量分布,调整重心位置,优化机械结构。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动等模块分别设计,在查找资料的基础上各准备了几套方案;然后我们分别实验,最后以报告中所提到的形式决定了我们最终的电路图。在程序方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用稳定的程序。在这套算法中,我们结合路况调整车速,做到直道加速、弯道减速,保证在最短时间内跑完全程。
在这几个月的备战过程中,场地和经费方面都得到了学校和学院的大力支持,在此特别感谢一直支持和关注智能车比赛的学校和学院领导以及各位指导老师、指导学长,同时也感谢比赛组委会能组织这样一项有意义的比赛。
现在,面对即将到来的大赛,在历时近五个月的充分准备以及华北赛的考验之后,我们有信心在全国比赛中取得优异成绩。也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们小组辛勤汗水的结晶,凝聚着我们小组每个人的心血和智慧,随着它的诞生,这份经验将永伴我们一生,成为我们最珍贵的回忆。