您的当前位置:首页正文

基于的智能车辆的关键技术研究

2022-06-23 来源:钮旅网


分类号:U27; U46 10710-2011222008

专业硕士学位论文

基于MC9S12XS128的智能车辆的关键技术研究

赵耕云

导师姓名职称 申请学位级别 论文提交日期 学位授予单位

硕士

刘晶郁 教授

专业学位类别 及领域名称

车辆工程 2013年6月14日

2013年5月13日 论文答辩日期

长安大学

Key Technologies Reaserch of Intelligent Vehicle

Based on MC9S12XS128

A Dissertation Submitted for the Degree of Master

Candidate:Zhao Gengyun

Supervisor:Prof. Liu Jingyu

Chang’an University, Xi’an, China

摘 要

随着汽车电子技术和机器人智能技术的快速发展,车辆智能化已成为汽车工业今后的发展趋势,对智能车辆的研究也已经成为车辆控制领域内的一个重要研究热点。智能汽车是一种集环境感知,规划决策,自动行驶等功能于一体的综合高新科技系统,它的应用涉及到了众多学科,诸如自动控制、模式识别、计算机视觉、传感器技术、车辆工程、电子与电气、单片机等众多学科。

论文以第七届“飞思卡尔”智能汽车大赛智能车为研究背景,运用MC9S12XS128单片机,设计出一种能够自主寻迹的基于CCD摄像头的智能车。路径的识别算法和电机、舵机的控制算法是智能车的关键技术,论文打破以往路径识别算法中跟踪黑线的思维定势,应用独特的跟踪两条黑线中间白线(相对黑线为较宽的白线)的算法,准确的提取出路径信息,解决了跟踪黑线所带来的复杂问题。优化后的图像处理算法减少了一场图像的信息处理量,准确性和稳定性更高。论文设计的H桥加减速性能更加卓越,发热小,稳定性好。运用有效的控制算法,包括PID控制算法和模糊控制算法对智能车的转向和速度进行控制,使智能车能够稳定快速行驶。并根据实际试验比较,确定了一组使智能车平均速度最快,稳定性最好的控制算法组合。另外还对智能车的外围辅助电路,如人机信息交互模块、数据保存模块、电子密码锁等也进行了研发,通过对智能车的测试,满足设计要求。

关键词:智能车,图像采集,自动控制,PID控制,模糊控制,单片机

I

Abstract

As the rapid development of automobile electronic and robots intelligence technology,the research on intelligent vehicle has become a hot spot in the field of automatic control. The popularization of intelligence cars is a irresistable trend. Intelligence vehicle is a kind of high_tech comprehensive systems,covered environment exploration,programmed decision_ making automatic drive.Its use refers to many disciplines,such as auto_control,pattern recognition, computer vision,sensor technology,vehicle engineering,electronic,single_chip Microcomputer.

Based on the 7th Freescale Cup Intelligent Car Racing,this paper designs a kind of intelligent car who can draw its route information and auto_drive by use of MC9S12XS128 and CCD. The key technologies of the whole car's design are route recognition and control algorithm of motor and servomotor.This paper provides a new algorithm based on the white line between two black ones,getting the information accurately.This algorithm has broken down the mindset of route recognition according with black line and solve the problem successfully caused by the mindset.The optimized image processing algorithm reduce the information in an image,improved stability and accuracy.The H bridge ,paper designed,is more excellent in the performance of accelaration or speed reduction.It can make the intelligent car travel fast and steady to apply effective control algorithm,including PID and Fuzzy,to control motor and servomotor.Based on the results of tests,a best algorithm, which can control car travel fast and steady, is picked up through car test.This paper also designs for the auxiliary circuit such as human_computer information exchange modal,date storage modal , Electronic password lock and so on..

Key words: intelligent vehicle; image collecting; auto_control;PID control; Fuzzy_control;single-chip

II

目 录

第一章

绪论 ........................................................................................................................... 1 1.1 选题的背景 ................................................................................................................. 1 1.2 国内外智能汽车的研究现状 ..................................................................................... 2 1.3 国内外研究现状分析 ................................................................................................. 3 1.4 论文研究的内容和意义 ............................................................................................. 3 第二章 智能车的机械结构与运动学分析 .............................................................................. 5

2.1 车模的选择 ................................................................................................................. 5 2.2 车轮的定位参数的确定 ............................................................................................. 6 2.3 转向系统的建模及优化 ............................................................................................. 7 2.3.1 转向系统的要求 .................................................................................................. 7 2.3.2 转向系统的参数及建模 ...................................................................................... 7 2.3.3 转向梯形机构的优化和舵机的安装位置 .......................................................... 8 2.3.3.1 理想的转角关系 ............................................................................................... 8 2.3.3.2 车轮转角关系的ADMAS仿真 ....................................................................... 9 2.3.3.3 舵机的安装位置 ............................................................................................. 10 2.4 摄像头的安装 ........................................................................................................... 11 2.5 本章小节 ................................................................................................................... 11 第三章 智能车电路系统的设计 ............................................................................................ 12

3.1 MC9S12XS128内部资源 .......................................................................................... 12 3.2 XS128单片机最小系统 ............................................................................................ 12 3.3 CodeWarrior开发环境 .............................................................................................. 15 3.4 电源管理系统的设计 ............................................................................................... 15 3.4.1 总体方案设计 .................................................................................................... 15 3.4.2 5V供电电压的实现 ........................................................................................... 16 3.4.3 12V供电电压的实现 ......................................................................................... 16 3.4.4 3.3V电压的实现 ................................................................................................ 18 3.5 测速系统的设计 ....................................................................................................... 18 3.5.1 测速系统的硬件设计 ........................................................................................ 18 3.5.2 测速系统的软件设计 ........................................................................................ 19 3.6 电机驱动设计 ........................................................................................................... 20 3.6.1 电机控制系统的硬件设计 ................................................................................ 20 3.6.2 电机控制系统的软件设计 ................................................................................ 21 3.7 舵机驱动设计 ........................................................................................................... 23

I

3.8 LCD、键盘、存储芯片系统设计 ............................................................................ 24 3.9 本章小结 ................................................................................................................... 27 第四章 双黑线道路信息检测与识别算法 ............................................................................ 28

4.1 图像采集系统硬件设计 ........................................................................................... 28 4.2 基于CCD摄像头的图像信息采集算法 ................................................................ 30 4.3 图像处理与路径识别算法 ....................................................................................... 31 4.3.1 阈值的离散化 .................................................................................................... 32 4.3.2 搜索路径的算法 ................................................................................................ 32 4.3.3 优化后的预测算法 ............................................................................................ 34 4.3.4 起跑标志线的识别 ............................................................................................ 38 4.4 本章小结 ................................................................................................................... 40 第五章 智能车软件控制算法的研究 .................................................................................... 41

5.1 控制理论与控制方法 ............................................................................................... 41 5.1.1 PID控制 ............................................................................................................. 41 5.1.2 模糊控制 ............................................................................................................ 42 5.2 舵机的控制策略研究 ............................................................................................... 43 5.2.1 舵机的PD控制算法......................................................................................... 43 5.2.2 舵机的自适应PID控制算法 ........................................................................... 45 5.2.3 舵机的模糊控制算法 ........................................................................................ 47 5.3 电机的控制策略研究 ............................................................................................... 50 5.3.1 电机的PD控制算法......................................................................................... 51 5.3.2 棒棒—PD控制算法.......................................................................................... 51 5.4 电机与舵机的统一调试 ........................................................................................... 53 5.5 实际赛道测试 ........................................................................................................... 55 5.6 本章小结 ................................................................................................................... 56 第六章 智能车的辅助功能设计 ............................................................................................ 57

6.1 LCD显示摄像头图像 ............................................................................................... 57 6.1.1 图像灰度值的转换 ............................................................................................ 57 6.1.2 像素值数据的重排列 ........................................................................................ 57 6.1.3 LCD显示程序设计 ............................................................................................ 58 6.2 电机、舵机的手动控制 ........................................................................................... 58 6.3 工作模式的切换方法 ............................................................................................... 59 6.4 电子密码锁的设计 ................................................................................................... 60 6.5 本章小结 ................................................................................................................... 61

II

结论及建议 .............................................................................................................................. 62

1 结论 .............................................................................................................................. 62 2 建议 .............................................................................................................................. 63 参考文献 .................................................................................................................................. 64 附 录 ...................................................................................................................................... 66 攻读学位期间取得的研究成果 .............................................................................................. 79 致 谢 ...................................................................................................................................... 80

III

长安大学硕士学位论文

第一章 绪论

1.1 选题的背景

自20世纪90年代以来,随着科技的不断进步,经济的飞速发展,汽车早已走进千家万户,人们对汽车的舒适性、经济性、安全性也提出了越来越高的要求。在这种发展趋势和需求背景下,各种先进的电子信息技术都运用到了汽车上,使得普通汽车越来越智能化。由于智能车包括了多个学科,融入了很多高新技术,因此很快就成为了科学研究的热点之一。

智能汽车(Intelligent Vehicle)是一个集环境感知、规划决策、多等级辅助驾驶等功能与一体的综合系统[1]。它集中的应用了计算机技术、现代传感技术、图像识别技术、人工智能及自动化等技术。车载计算机是整个智能车系统的控制中心,就像大脑中枢一样,雷达、摄像头等传感器用于对智能车所处周围环境的感知,其他电子设备也是必不可少的辅助设备[2]。

车辆智能化是汽车工业今后的发展趋势,随着计算机技术和信息技术为代表的高新技术的快速发展,以及人工神经网络技术、模糊控制技术等新的控制技术的出现和发展,智能车的研究必然会有一个突破性的发展。在这种行业背景和发展趋势下,教育部为了给当代大学生,尤其是汽车电子、自动化等电学专业的学生,提供一个动手实践的平台,提高大学生的创新意识,锻炼大学生的创造能力,促进大学生的团队合作精神,为我国汽车电子信息行业培养储备人才,决定从2006年起,每年举办一届“飞思卡尔”大学生智能汽车竞赛。此项赛事最早来源于韩国汉阳大学,采用飞思卡尔系列单片机为唯一微处理器,综合运用了机械设计、单片机技术、电子电路、机器视觉、通信、C语言、控制理论等各方面知识,是一个具有有较高科技水平的知识综合体。目前,飞思卡尔大赛根据传感器的不同类型,共分为三个组别:光电组、摄像头组、电磁组,以及一个单独设置的创意赛。“飞思卡尔”智能汽车竞赛自举办以来,深受广大师生的欢迎,已经成为教育部主办的为数不多的全国性竞赛之一,在全国有很大的影响力。

长安大学作为最早参加飞思卡尔大赛的高校之一,在历届比赛中均有不错的表现,共获得了3项全国一等奖,6项全国二等奖。论文基于第七届飞思卡尔大赛的比赛要求进行摄像头组智能车的相关设计和研究。

1

第一章 绪论

1.2 国内外智能汽车的研究现状

我国在智能汽车领域也投入了很多资金和人力,很多有实力的大学和科研院所很早就在这一领域进行研究。早在1992年,吉林大学就最早开始了智能车的研究,并先后开发出JUTIV系列智能车,采用的先进技术有最优规划、多种检测手段并存,智能控制等[3]。对于在非标准化的道路环境下汽车的行驶,安全车距的保持,超车变道等关键技术难题进行了极具价值的研究。1998年,由清华大学研制的THMR系列可移动机器人

[4]

,本质上作为智能车中的一种类型,也有了很大的突破。它上面装备有各种不同的传

感仪器,在控制策略上采用了根据不同的采集信息而选择执行不同的规划路径和导航控制,这在当时国内已经达到了较高水平。由国防科技大学自主研制的红旗HQ3无人车,在2011年7月14日首次完成了从长沙到武汉286公里的高速全程无人驾驶实验,这项实验创造了我国自主研制的无人车在复杂交通状况下自主驾驶的新纪录,标志着我国无人车在复杂环境识别、智能行为决策和控制等方面达到世界先进水平。国防科技大学与中国第一汽车集团公司联合研发的无人驾驶轿车装备摄像头、雷达,可以自己导航,对道路环境、障碍物进行判别,自动调整速度,不需要人做任何干预操作。与电子巡航、GPS导航不同的是,它的定位更加精准,转弯和遇到复杂情况也不需要人工控制。车内的环境识别系统识别出道路状况,测量前方车辆的距离和相对速度;车载主控计算机和相应的路径规划软件根据计算机视觉提供的道路信息、车前状况以及自身的行驶状态,决定继续前进还是准备超车;智能控制软件按照需要跟踪的路径和汽车行驶动力学,向方向盘、油门和刹车控制器发出动作指令,操作汽车按规划好的路径前进。

发达国家从20世纪70年代开始进行无人驾驶汽车研究,目前在可行性和实用性方面,美国和德国走列。早在20世纪80年代美国就提出地面车辆(ALV)计划,这是一辆8轮车,能在校园环境中自主驾驶,但不足之处是车速不高。美国其它一些著名大学,如卡耐基梅隆大学、麻省理工学院等都先后于20世纪80年代开始研究无人驾驶智能车辆。1995年,一辆有美国卡耐基梅隆大学研制的无人驾驶智能车Navlab_V,完成了横穿美国东西部的驾驶试验。在全长5000km的美国州际高速公路上,整个试验96%以上的路程是智能车辆自主驾驶的,车速达50~60km/h。日本丰田汽车公司在2000年开发出一套无人驾驶公共汽车系统。这套公共汽车自动驾驶系统主要有道路诱导、车队行驶、追尾防止和运行管理等方面组成。安装在车辆底盘前部的磁气传感器将根据埋设在道路中间的永久性磁石进行导向,控制车辆行驶方向。

2

长安大学硕士学位论文

德国在无人驾驶智能车方面也位于世界前列,汉堡lbeo公司推出了一款其研制的无人驾驶智能车。这辆智能车由德国大众汽车公司生产的帕萨特2.0改装而成,它可以在错综复杂的城市公路系统中实现无人驾驶。车内安装的全球定位仪随时获取汽车所在准确方位的信息数据。隐藏在前灯和尾灯附近的激光扫描仪是汽车的“眼睛”,它们随时“观察”汽车周围的道路状况,构建三维道路模型。此外,智能车还能识别各种交通标志,如速度限制,信号灯,车道划分线,停车位等,保证汽车在遵守交通规则的前提下安全行驶。

1.3 国内外研究现状分析

目前,国内外对智能车辆的研究主要包括以下几项研究方向[5] [6]:

1、防碰撞预警系统。该系统的功能包括车辆前进或倒车时与其他车辆的防撞预警,以及检测横穿道路的行人状况,防止撞伤行人。

2、辅助驾驶系统。该系统可以在有紧急情况下,驾驶员因疏忽或疲劳而无法应对时,自动减速或紧急制动避免事故发生。

3、无人驾驶系统。该系统是通过车载的传感器,感知车辆周围的环境,利用传感器采集的信息,并通过智能控制算法控制车辆自主行驶。

由于在实际驾驶过程中,绝大多数信息是通过视觉获得的,因此,上述研究方向几乎都用到了摄像机作为观察外部环境的传感器[7]。摄像机安装在车辆的不同位置,从不同角度全方位拍摄车外环境。摄像机主要用于提取车道线,识别近距离内的障碍物、行人、交通信号等,这些是雷达等其他传感器无法替代的。其缺点是摄像机采集的信息量大,信息处理极为复杂,容易受周围环境影响,在能见度较低时对目标的识别准确性较低[8]。因此,机器视觉技术是一个研究热点,也是整个智能车系统的一个关键技术。

1.4 论文研究的内容和意义

随着汽车电子技术和机器人智能技术的快速发展,车辆智能化已成为汽车工业今后的发展趋势。论文以第七届“飞思卡尔”智能汽车大赛智能车为研究背景,主要研究路径的识别算法和电机、舵机的控制算法等智能车的关键技术,以稳定地控制智能车按预定轨迹达到较高的平均车速。论文通过对智能车关键技术的研究,以期为智能车辆的设计开发提供有价值的理论依据及实用参考。

论文研究的主要内容如下:

3

第一章 绪论

(1)建立智能车转向系统模型,分析其运动学特性,选定最佳的舵机安装位置 (2)设计智能车的电路系统。主要包括负责给各个模块供电的电源管理系统以及控制电机正反转的H桥,和辅助调试电路(液晶板和按键)。

(3)编写电机和舵机的驱动程序,实现电机和舵机基本功能 (4)研究图像的提取方法和处理技术,编写提取赛道信息的程序。

(5)采用不同的舵机和电机控制算法,进行智能车赛道测试,研究比较不同控制算法组合的优劣。

(6)设计在有人监视情况下控制车辆行驶的程序和一款智能车防盗的电子密码锁。 论文最终设计的循线智能车未来可以用在一些特定的环境场合,如仓库,它可以按照规划好的路线自动转运货物;如公园,它可以搭载游客按顺序参观景点。因此,循线智能车具有很好的应用前景和进一步开发的价值。

4

长安大学硕士学位论文

第二章 智能车的机械结构与运动学分析

2.1 车模的选择

第七届飞思卡尔智能车大赛提供三种车模,分别为A型车模(如图2.1),B型车模(如图2.2),和C型车模(如图2.3)。其中A型车模和C型车模类似,不同之处是C型车模的两个驱动轮分别由两个电机驱动,没有机械差速机构,而A型车模只有一个电机驱动,通过滚珠差速器实现机械差速。B型车模相对较大,电机的功率也比A型、C型车模大。

图2.1 A车模

图2.2 B车模

5

第二章 智能车的机械机构与运动学分析

图2.3 C车模

根据比赛规则要求,摄像头组别选用A型车模。A车模由于采用传统的单电机驱动,机械差速,相对于双电机驱动,采用电子差速的C车模,其对差速的控制能力较差。但A车模采用了滚珠轴承,灵活性稍好,轴承之间的摩擦力小,有利于转向。

2.2 车轮的定位参数的确定

转向轴在保证智能车转向功能的同时,应使转向轮有自动回正作用,以保证其稳定的直线行驶功能。这种自动回正作用是由转向轮的定位参数来保证实现的。转向轮定位参数包括主销后倾角、主销内倾角、前轮外倾角和前轮前束四个内容[9]。车轮定位的作用是使智能车在较长的直道时保持稳定的直线行驶,在转弯时转向轻便,并减少智能车在行驶中轮胎的磨损。如图2.4所示:

图2.4 车轮定位

6

长安大学硕士学位论文

(1)主销轴向车身内侧倾斜,该角度称为主销内倾角。当车轮以主销为中心回转时,智能车本身的重力能使转向车轮回复到原来中间位置,从而使舵机复位容易。根据多次调整试验,主销内倾角在1~2°内为宜。

(2)车轮主销向后倾斜,称为主销后倾角。主销后倾角过大,虽然复位容易,但会使舵机打舵沉重。经过调整比较试验,主销后倾角在1~2°内效果较好。

(3)由于赛道是比较光滑平坦的,没有真实道路的拱形,而且整车的质量很小,在智能车快速行驶过程中不足以使车轮产生内倾,所以前轮外倾和前轮前束对智能车的影响极小,故这两个定位参数调整为0。

总之,对于转向前轮的调整的原则就是转向轮转向轻便,易于回正。

2.3 转向系统的建模及优化

2.3.1 转向系统的要求

转向系统是用来保持或者改变车辆行驶方向的机构,在转向行驶时,要保证各转向轮之间有协调的转角关系。依据对真实汽车转向系的设计要求[10]提出对智能车转向系的要求:

1 智能车转弯时,全部车轮应尽量绕瞬时转向中心旋转,避免任意车轮产生侧滑,以免降低智能车的行驶稳定性;

2 保证智能车有较小的转弯半径,最小转弯半径不得大于50cm,以保证能顺利通过半径50cm的最小弯道。 2.3.2 转向系统的参数及建模

转向梯形有整体式和断开式,智能车采用的是断开式转向梯形,主要由转向摇臂,转向横拉杆,梯形臂等构成。采用断开式转向梯形的主要优点是它能与智能车的双横臂式独立悬架相配合,保证一侧车轮上下跳动时,不会影响另一侧车轮,使车辆行驶平稳。 论文运用ADAMS/view软件,建立了智能车转向系统的参数化模型[11] [12],建模参数列表如下(单位:mm):

表2.1 A型车模参数

主销距 车轮半径 车轮轮宽 前后轴距

124 25 25 200 7

前轮距 梯形臂长 转向节臂角 150 15.8 Tan(15/5) 第二章 智能车的机械机构与运动学分析

由于论文不研究车轮的垂向跳动,只关心车轮转角关系,故对悬架系统进行了简化,忽略了主销定位对车轮转角的影响。最终所建模型如图2.5所示。

图2.5 转向系统模型

2.3.3 转向梯形机构的优化和舵机的安装位置 2.3.3.1 理想的转角关系

在汽车转向行驶时,为避免附加阻力及轮胎磨损过快,要求转向系统能保证汽车所有车轮均作纯滚动,即所有车轮的轴线都相交于一点,此点即为车辆的转向中心。设智能车内转向轮偏转角为b,外转向轮偏转角为a。角a和b的理想关系式[13]为

cota=cotb+B/L (2.1) 式中:B—两侧主销轴线与地面相交点之间的距离 L—智能车的轴距。

论文利用Matlab软件,画出了智能车在转弯时,理想的转向车轮的转角关系曲线,如图2.6所示:

8

长安大学硕士学位论文

图2.6 理想的转角关系

其中横坐标为内侧车轮的偏转角,纵坐标为对应的外侧车轮的偏转角。由理想关系式和转角关系曲线可以很明显看出,其关系为非线性关系。

在理想情况下,选取9个特征内侧转角以及它们对应的外侧转角的值如表2.2所示(单位:°):

表2.2 理想情况下的外侧转角

内侧 外侧 5 10 15 20 25 30 35 40 45 4.744 9.031 12.941 16.539 19.886 23.033 26.024 28.900 31.686 2.3.3.2 车轮转角关系的ADMAS仿真

根据飞思卡尔比赛要求和智能车的实际情况,转向横拉杆的长度可调,转向横拉杆和舵机的连接位置在水平面内可调。故总共有三个坐标的参数可调,分别为舵机的输出轴位置坐标(DuojiMid,0),左右转向横拉杆与舵机输出轴摇臂的连接位置的坐标(15,Middrigh)、(15、Middleft)。

转向系统模型采用参数化设计,可以很方便的改变可调参数的大小,重复仿真而不需再次建模。论文根据历年各参赛队优秀智能车的舵机安装方法,提取出4种较普遍采用的安装方式,安装参数如下:

1 DuojiMid=-10;Middright=-5;Middleft=5;参数简记为(-10,-5,5)。 2 DuojiMid=-7;Middright=-5;Middleft=5;参数简记为(-7,-5,5)。 3 DuojiMid=-10;Middright=-0;Middleft=0;参数简记为(-10,-0,0)。 4 DuojiMid=-7;Middright=-0;Middleft=0;参数简记为(-7,-0,0)。 通过ADAMS仿真测试,得出了在四种安装方式下,9个特征内侧转角对应的外侧转

9

第二章 智能车的机械机构与运动学分析

角值如下(单位:°):

1当DuojiMid=-10;Middright=-5;Middleft=5时(如表2.3所示):

表2.3 参数取值为(-10,-5,5)时的外侧转角

内侧 5 10 15 20 25 30 35 40 45 外侧 4.730 9.540 13.100 16.660 19.910 22.730 25.240 27.150 28.870 2 当DuojiMid=-7;Middright=-5;Middleft=5(如表2.4所示): 表2.4 参数取值为(-7,-5,5)时的外侧转角

内侧 5 10 15 20 25 30 35 40 45 外侧 4.790 9.290 13.622 17.554 21.327 24.572 27.653 30.087 32.047 3当DuojiMid=-10;Middright=-0;Middleft=0(如表2.5所示):

表2.5 参数取值为(-10,0,0)时的外侧转角

内侧 5 10 15 20 25 30 35 40 45 外侧 4.788 9.280 13.602 17.554 21.267 24.610 27.590 30.093 32.080 4当DuojiMid=-7;Middright=-0;Middleft=0(如表2.6所示):

表2.6 参数取值为(-7,0,0)时的外侧转角

内侧 外侧 5 10 15 20 25 30 35 40 45 4.790 9.290 13.612 17.959 21.240 24.578 27.531 30.087 32.078 2.3.3.3 舵机的安装位置

以上仅对四种组合结果进行了ADAMS仿真(为了更加精确,可以选取更多不同的组合),采用自定义的类方差作为比较优劣的参数,以此来比较各曲线与理想转角关系曲线的拟合程度。

设类方差Error,其定义如下:

(2.2)

其中Uiready为第i个内侧特征转角对应的ADAMS仿真所得外侧转角, Uidesire为第i个内侧特征转角对应的理想外侧转角。

经计算分别得四种组合的类方差,列表2.7如下:

表2.7 四种组合的类方差

组合 方差和 1 3.524326 2 3.19392 3 3.155315 4 3.254207 显然,第3种组合类方差最小,即转角关系曲线最接近理想的转角关系曲线。故取

10

长安大学硕士学位论文

DuojiMid=-10、Middright=-0、Middleft=0作为舵机的最终安装参数。安装模型如图2.7所示:

图2.7 安装模型

2.4 摄像头的安装

摄像头的安装位置和其所采集到的图像质量密切相关。摄像头如果架设的太高,虽然能“看”的更远,但是会由于图像不清晰而造成前端图像畸变[14]非常严重,标志赛道边界的黑线也会变的很细,不利于黑线的识别,也就不利于路径信息的提取。如果架设的太低,虽然图像很清晰,但会造成摄像头的前瞻太小,视野太窄,甚至会看不到两侧的黑线,提取并计算出的路径只是这一幅图像中所看到的白道的中心,并不是实际赛道中整个白道宽的中线,因此会有很大的误差,在直道行驶时极易造成反复振荡现象。经过反复调试,摄像头的安装参数如下:摄像头距地面高25cm,距前轴9cm,俯仰角30°。无论摄像头安装参数如何,都必须要保证摄像头采集到的图像的中线与车身的中线重合,即必须保证摄像头在车身正中间。还要使摄像头能看到车前2.5m处的路径,即前瞻最好不小于2.5m,这也与智能车期望达到的理想车速有关。

2.5 本章小节

1、根据比赛要求确定了研究所用的智能车型号;

2、根据赛道特点,调整了智能车转向轮的定位参数,保证转向轻便灵活。建立了转向系统的ADAMS模型,进行了其运动学仿真分析,确定了舵机输出轴的安装位置及安装参数。

3、确定了摄像头的安装参数。

11

第三章 智能车电路系统的设计

第三章 智能车电路系统的设计

3.1 MC9S12XS128内部资源

MC9S12XS128是增强型的16位单片机[15],集成度相当高,片上资源丰富,是飞思卡尔公司在16位S12系列MCU的基础上推出的一款新产品。它是新一代的双核微控制器,性能可与32位微控制器相媲美。它由16位中央处理单元(CPU12X)、128KB程序Flash(P-lash)、8KB RAM、8KB 数据 Flash(D-lash)组成片内存储器。主要功能模块包括:内部存储器,内部PLL锁相环模块,2个异步串口通讯SCI,1个串行外设接口SPI,MSCAN模块,1个8通道输入/输出比较定时器模块TIM,周期中断定时器模块PIT,16通道A/D转换模块ADC,1个8通道脉冲宽度调制模块。MC9S12XS128是Freescale16位单片机的主流产品,总线频率更是进一步提高到最高80MHz。该单片机具有对用户极为方便快捷的在线编程调试功能,丰富而高效的指令系统,较强的数值运算和逻辑运算能力。

3.2 XS128单片机最小系统

MCU的硬件最小系统是指可以使内部程序运行的所必须的基本外围电路,XS128芯片的硬件最小系统包括电源及其滤波电路、复位电路、晶振电路、写入器接口电路。 (1)电源及其滤波电路

所有的电源引脚必须外接适当的滤波电容来抑制高频噪声[16],稳定电压,改善系统的电磁兼容性,降低电源波动对系统的影响,增强电路工作稳定性。 (2)复位电路

复位表示单片机重新启动。复位引脚RESET低电平有效,若RESET产生一个低电平脉冲,单片机就会自动复位。复位原理如图3.1所示:单片机正常工作时RESET通过10k的上拉电阻接到电源正极,当复位按钮按下时,RESET引脚接地,为低电平,单片机复位。如果单片机的RESET引脚一直保持下拉状态,那么单片机就一直复位而不能正常工作。单片机的复位本质上是一种特殊的中断,它具有最高的中断优先级,但是它与其他普通中断又有着本质不同。CPU检测到复位中断产生后,进入中断复位程序,之后不再返回原来的程序,而是程序寄存器PC(Program Counter)直接指向程序的第一条指令,一切重新开始。

12

长安大学硕士学位论文

图3.1 复位电路

(3)晶振电路

S12X系列芯片的晶振可以工作在两个模式:一个是循环可控制的皮尔兹模式;另一种是全振动皮尔兹模式。晶体振荡器结合单片机内部电路产生单片机所需的时钟频率,单片机晶体提供的时钟频率越快,单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率上。论文采用晶振的皮尔兹模式接法,如图3.2所示,EXTAL引脚和XTAL引脚分别是振荡器的输入和输出引脚。16MHz晶振两端分别接在单片机的EXTAL和XTAL引脚。C1、C2是晶体的匹配电容,当外部所接电容为匹配电容的情况下,振荡频率才能保证在标称频率附近的误差范围内。一般为30pF左右,太小了不容易起振。当外部接16MHz晶振后,在不采用锁相环超频技术时,总线频率是8MHz。需要注意的是,制作核心板时,晶振应尽量靠近单片机的时钟输入引脚,晶振的外壳必须接地。

图3.2 晶振电路

(4)BDM接口电路

背景调试模式BDM(Background Debug Mode)是由Freescale半导体公司自定义的片上调试规范,是一种底层的调试手段。论文采用常用的BDM调试插头,通过一根方形USB接口的线缆连接到微机的USB接口上。开发人员利用BDM向目标板下载程序,也可以支持用户进行在线仿真、程序擦除下载。BDM调试插头如图3.3所示:

13

第三章 智能车电路系统的设计

图3.3 BDM插头

引脚定义如下:

BKGD:单线背景调试模式引脚 GND:接地 VDD:电源

RESET:目标机复位引脚

由于这种连接方式在实际使用中,用户很有可能将插头插反而导致单片机烧坏,故目前也有对BDM调试器插头进行防插反的设计。 (5)时钟模块的设计

单片机的外部晶振是16MHz,这远远不能满足智能车系统的处理数据的要求,因此,必须采用锁相环技术,实现超频,将系统的总线频率提高到80MHz。倍频公式如下:

SYNR_VALUE1BUS_CLK2OSCCL_KVALUEREFD_VVALUE1 (3.1)

其中,OSCCLK_VALUE为系统的外部晶振;

VVALU为系统时钟的分频系数,在初始化中为E REFD_1; _VALU为倍频系统,为E SYNR1.

各参数定义如下:

refdv=3; /////////////pllclock=2*osc*(1+SYNR)/(1+REFDV)=160M

SYNR =0xc0 | ((80/(refdv+1))-1);///CRG合成寄存器0XC0表示压控振荡器频率范围 REFDV=0x40 | refdv; //参考分频寄存器,该寄存器设定了内部锁相环电路倍乘步长的粒度。0X40表示参考频率的范围2M到6M,取参考频率为4M,refdv=3;

POSTDIV=0x00; ///后分频寄存器0 锁相环频率等于压控振荡器频率

14

长安大学硕士学位论文

3.3 CodeWarrior开发环境

CodeWarrior开发环境(简称CW环境)是Freescale公司开发的面向Freescale MCU及DSP嵌入式应用开发的商业软件工具,在其CW环境下可以编制并调试XS128MCU的汇编语言、C语言和C++语言程序[17],如图3.4所示。CW环境包括以下几个功能模块:编辑器、源码浏览器、搜索引擎、构造系统、调试器、工程管理器。其中编辑器、编译器、连接器和调试器对应开发工程的四个主要阶段。其他模块用于支持代码浏览和构造控制,工程管理器控制整个过程。CW环境能跟踪源码的变化,进行自动编译和连接。

图3.4 CW环境

3.4 电源管理系统的设计

3.4.1 总体方案设计

电源模块为系统其它各个模块提供所需要的电源,设计中,不但要考虑电压范围和电流容量等基本参数,而且要在电源转换效率,防止干扰等方面进行优化。安全可靠高效的电源方案是整个硬件电路稳定可靠运行的基础。智能车总电源由7.2V/2000mAh Ni--cd充电电池提供。由于各电路模块所需的工作电压各不相同,为避免电机和舵机等器件对整个系统产生干扰,各功能模块均采用单独供电。具体实现方案如图3.5所示:

15

第三章 智能车电路系统的设计

图3.5 供电总体方案

3.4.2 5V供电电压的实现

采用LM2940做串联线性稳压电源具有纹波小,电路结构简单的优点,但是功耗较大,效率较低。但是对于单片机来说,需要稳定的5V工作电源,由于LM2940的稳压的线性度非常好[18],输出电流1A,所以选用LM2940来将电池电压降为5V,为单片机供电,保证智能车在高速运行时,不会因电池电压的波动而造成单片机的复位。 3.4.3 12V供电电压的实现

采用MC34063进行升压给摄像头供12V电压,MC34063的主要特性如下: 输入电压范围为2.5至40V,输出电压可调范围为1.25到40V,输出电流可达1.5A[19]。MC34063的基本结构和引脚图功能如图3.6所示。

1脚为开关管T1集电极;2脚为T1发射极;3脚为定时电容接线端;4脚为电源地;5脚为电压比较器反相输入端,也是输出电压取样端;6脚为电源;7脚为负载峰值电流;8脚为驱动管T2集电极引出端。

16

长安大学硕士学位论文

图3.6 MC34063的基本结构和引脚图

MC34063组成的升压电路原理如图3.7所示,当芯片内开关管Q1(如图3.5示)导通时,电源经取样电阻R9000、MPS8550、电感L9000、MC34063的1脚和2脚接地,此时电感L9000作为储能元件开始存储能量,而由电容C9002对负载提供能量。当Q1断开时,电源和电感同时给负载和电容C9002提供能量。电感L9000在释放能量期间,由于其两端的电动势极性与电源极性相同,相当于两个电源串联,因而负载上得到的电压高于电源电压。开关管导通与关断的频率称为芯片的工作频率。芯片的3脚所接的定时电容C9001的电容值的大小决定了振荡器频率的高低,也决定开关管T1的通断时间。只要此频率相对负载的时间常数足够高,负载上便可获得连续的直流电压。

图3.7 MC34063升压电路

17

第三章 智能车电路系统的设计

部分电阻阻值的计算:

根据芯片的说明手册,Vout(输出电压)=1.25V(1+R1/R2 ),其中R1为原理图中的R9003,R2为R9002,经计算当R9003取103(10K)的电阻,R9002取1.43K的电阻时,Vout=9.99V,完全不能满足摄像头的工作电压12V,故需重新调整R9003和R9002的阻值。经查找,当R9003=33K(333电阻),R9002=3.9K(392电阻)时,Vout=11.83V,基本可以满足摄像头的工作电压。 3.4.4 3.3V电压的实现

LM1117是一个低压差电压调节器系列。采用LM1117进行降压为液晶显示器提供3.3V工作电压[20]。电路原理图如图3.8所示,电路简单,芯片成本低廉。

图3.8 LM1117降压电路

3.5 测速系统的设计

3.5.1 测速系统的硬件设计

论文采用100线的光电编码器(型号:OME100-1N),线数就是编码器的分辨率,也就是光电码盘转一圈所发出的脉冲数。将光电编码器安装在驱动大齿轮的后方并与之啮合良好,如图3.9所示。这种方法的优点是编码器的测速精度高,误差小,安装相对较容易,缺点是与码盘相比质量较大。编码器输出为严格的方波。

18

长安大学硕士学位论文

图3.9 编码器安装方法

3.5.2 测速系统的软件设计

根据以往经验,智能车的速度大致在2~3m/s之间,为了达到较高的测速精度,确保测速准确及时,采用大约每0.1秒测一次速度,而在每个测速周期内,智能车大概运行了20cm。根据测速周期计算分频因子,n=65536,t=0.1,fbus=80MHz由公式 P=t/n×fbus (3.2) 可得P=122,故选取分频因子为128。

测速定时器初始化如下:

{ TSCR2_PR=0b00000111; //7分频 对应的分频因子128 TSCR2_TOI|=1; //定时器溢出中断使能 TSCR1_TEN=1; //定时器正常工作 }

XS128单片机的定时器模块提供了一个16位的脉冲累加器,该脉冲累加器与定时器的通道7共用引脚,故采用单片机的PT7口作为脉冲信号输入口,进行脉冲计数。

脉冲累计器初始化如下:

{ PACTL_PAMOD=0;//0 计数模式

PACTL_PEDGE=1;//1 PT7口上升沿触发计数. PACTL_PAEN=1;//1 脉冲累计器使能 }

当智能车开始运行后,定时器开始正常工作并计时,光电编码器中产生的方波被PT7口采集,由脉冲累加器计数,并将脉冲数存储在脉冲累加计数寄存器(PACNT)中,当定时器溢出后,溢出标志位(TOF)置1,因在定时器初始化中已使定时器溢出中断

19

第三章 智能车电路系统的设计

使能,故产生中断,程序进入中断服务程序,读取PACNT的数值,并清零,清除溢出标志位TOF,准备下一个测速周期。如此反复,智能车的实时速度就被采集了出来。中断服务程序如下:

void interrupt 16 INT_Timer0(void)

{ cur_speed=PACNT; //从脉冲累加计数器计数寄存器中提取出脉冲总数作为当

前的瞬时速度

PACNT=0; ////脉冲累加器清零

TFLG2_TOF=1; // 定时器溢出标志位写1清除该位 }

3.6 电机驱动设计

论文选用飞思卡尔大赛组委会提供的RS-380SH型号的直流伺服电机,该型号的电机具有优秀的速度控制性能,能输出较大的转矩直接带动负载运行。速度调节范围宽,精度高,机械特性好,运行平稳,便于使用PWM信号进行调速。 3.6.1 电机控制系统的硬件设计

直流电机作为智能车唯一的动力装置,必须要有极好的加减速性能。论文采用一片74LS244和两片BTS7970搭建H桥[21] [22] 以实现电机的正反转。

电路原理图如图3.10所示。

图3.10 H桥电路

20

长安大学硕士学位论文

74ALS244内部有两个四位三态缓冲器,其三态输出受到使能输出端的控制,当使能输出有效时,即1G和2G引脚都为低电平时,输出端Y和输入端A状态相同, 器件实现正常逻辑状态输出;当使能输出无效时,即1G和2G引脚都为高电平时,输出呈高阻态,相当与和所连的电路断开。

BTS7970是一种大功率驱动芯片,输入电压为6V-24V,输出电流最大可达40A。由原理图可以看出,当PP6引脚为高电平时(需程序中定义),INH引脚输入的就是高电平,芯片处于激活模式。当占空比大于0时,OUT端(4,8引脚)输出的电压由IN端输入的PWM占空比决定,通过调节占空比的值调节OUT端的输出电压。当占空比为0时,可以使得从OUT输入的电流经7970接地。两片BTS7970就可构成一个完整的H电桥,实现控制电机的正反转。

由BTS7970搭建的驱动桥与MC33886相比,它的加减速性能更加卓越,稳定性更好,效率更高。

搭建完成后的实物如图3.11所示:

图3.11 H桥实物

3.6.2 电机控制系统的软件设计

脉宽调制器(Pulse Width Modulator,PWM)是嵌入式应用系统常用的功能之一。 PWM工作原理简介:

PWM产生一个在高电平和低电平之间重复交替的输出信号,这个信号就称为PWM信号,也叫脉宽调制波。通过指定所需的时钟周期和占空比来控制高电平和低电平的持续时间。通常定义占空比为信号处于高电平的时间占整个信号周期的百分比。PWM的常用功能是给其他设备提供类似于时钟的信号,以及控制输入到某个设备的平均电流或电压。论文应用PWM的第二个主要功能来控制电机的转速。

21

第三章 智能车电路系统的设计

XS128单片机有8个独立的带有可编程周期和占空比的PWM通道;每个PWM通道都有一个独立的计数器;采用软件定义的方式可将8个8位通道级联为4个16位通道的PWM的分辨力。每一个PWM通道都有一个各自的8位占空比寄存器,通过定义周期寄存器、占空比寄存器和PWM脉冲极性可以算出PWM的占空比。论文将PP4和PP5级联,PP6和PP7级联,共同作为控制电机的信号,使电机能够实现正反转。

PWM模块的寄存器及初始化如下: PWME = 0x00; //禁止输出

PWMPOL = 0xff; //极性寄存器,1 先输出高电平 后为低电平 0 先输出低电平

后为高电平

PWMCTL = 0xf0; //01 23 45 67 通道级联 PWM控制寄存器

PWMPRCLK=0x55; //Clock A=Bus Clock/32 ; Clock B=Bus Clock/32; PWM

预分频时钟选择寄存器 2^5=32

PWMCLK=0b00000000; //选择clock:7B,6B,5A,4A,3B,2B,1A,0A PWM时钟选

择寄存器 当PCLKx=0时,有前面的时钟选择结果

PWME = 0xaa; //pp1,pp3,pp5,pp7口输出

PWMPER67 = 80/4*125/motor_pwm_frequ; ///// motor_pwm_frequ=1Khz,控制频率

太小容易使电机产生噪音[23].

PWMPER45 = 80/4*125/motor_pwm_frequ; 电机正反转代码如下:

void motor(unsigned int speed) ///电机正转代码 {

if(speed >PWMPER67) speed=PWMPER67; ///如果期望车速>周期寄存器,speed赋

值为周期寄存器的值

PWMDTY45=0;

PWMDTY67= speed; //赋值占空比寄存器 }

void motor_reverse(unsigned int speed) ///代码反转代码 与正转类似 {

if(speed >PWMPER45) speed =PWMPER45; PWMDTY67=0;

22

长安大学硕士学位论文

PWMDTY45= speed; }

3.7 舵机驱动设计

舵机是智能车控制前进方向的执行机构,是智能车系统中很重要的一个环节,舵机控制的效果直接影响了智能车能否高效稳定的循迹。论文舵机采用飞思卡尔大赛官方指定的舵机Futaba3003舵机。由查阅有关3003型舵机电气参数的资料[24]可知,舵机的控制信号是周期为20ms的脉宽调制信号(PWM),PWM给舵机提供一个一定脉宽的PWM信号,舵机的输出轴就会在打到并保持在一个相对应的角度上,无论外界转矩如何改变,舵机都不会改变位置。当一个周期内,高电平为1.5ms时,舵机在中间位置,当高电平为2ms时,舵机在右极限位置,当高电平为1ms时,舵机在左极限位置。此处需要注意的是,由于舵机安装在车辆底盘上后,可能当舵机在它中间位置时,它的输出摇臂及所连的转向系并不在中间位置,会产生一定的误差,此误差可以不必消除,只需在控制程序中重新调整舵机中点的占空比寄存器就能将转向系回到中间位置,也就是说,实际智能车的转向系中间位置所对应的舵机的PWM信号的高电平不一定为1.5ms,只要在舵机的打舵全范围的大概中点处即可。

舵机的控制信号采用PWM模块的PP1通道,初始化在电机PWM控制信号初始化中完成,仅需改变周期寄存器即可,如下:

PWMPER01 = 80/4*servo_period*125; //////方波的周期是20ms\\

//注释:PWMPERx=PWMx周期/通道的时钟周期=PWMx周期*通道时钟频率=20*(10^-3)*总线频率/分频因子=20*(80)/32*10^3=80/4*servo_period*(125

舵机的控制代码如下:

void pwm_setservo(unsigned int dutycycle) {

if(dutycycleSERVO_MID+SERVO_R)dutycycle=SERVO_MID+SERVO_R; PWMDTY01=dutycycle; /* 设置舵机角度 */ }

23

第三章 智能车电路系统的设计

3.8 LCD、键盘、存储芯片系统设计

液晶显示器(Liquid Crystal Display, LCD)是电子信息产品的主要显示器件,论文选用NOKIA5110作为显示器。该显示器为48*84的点阵LCD,可以显示4行汉字,它的驱动芯片是PCD8544[25],采用串行接口与MCU进行通信,接口信号线有8条,支持SPI串行外设接口[26]。论文采用普通I/O口(B口)软件模拟串行外设接口(SPI,Serial Peripheral Interface)通信。各引脚及功能如表3.1所示:

表3.1 LCD引脚名称

引脚名 VCC SCLK SDIN D/C SEC GND RST LIGHT OSC 电路连接示意图3.12如下:

功能 电源输入脚 同步时钟输入 数据输入 数据/命令切换 片选型号 地 LCD复位信号 背光 外部时钟输入 备注 3.3V 最高可达4Mbps 时钟上升沿采样 0:命令;1:数据 低电平有效 低电平有效

图3.12 LCD电路连接示意图

24

长安大学硕士学位论文

键盘是最简单的MCU数字量输入设备,论文共设8个键组成一个键盘,键盘的排布方式为独立式,MCU通过检测与键盘相连的I/O口来确定键盘状态。对应的I/O口为A0,A1,A2,A3,A4,A5,A6,A7。电路原理图如图3.13所示。当开关断开时,PAx上拉,处在高电平,开关闭合时,PAx接地,产生一个低电平脉冲,程序检测到这一脉冲信号后,开始执行信号对应的程序。按键的作用分别为换行、保存、+1、-1、+10、-10、+100、-100。

图3.13 按键电路原理图

选用AT24C02为数据存储元件。AT24CO2是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5 V)、擦写次数多(大于10 000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点[27]。而且它是采用了I2C总线技术进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。其线路接法示意图如图3.14所示。

图3.14 存储元件电路示意图

25

第三章 智能车电路系统的设计

芯片的1,2,3引脚是三根地址线,用来确定芯片的硬件地址。第5引脚SDA为串行数据输入/输出,数据通过这根双向I2C总线串行传送。第6引脚SCL为串行时钟,SDA和SCI为漏极开路端,在实际的应用当中都需要和正电源间各接一个5.1k的上拉电阻。第7脚为WP写保护端,接地时允许芯片执行一般的读写操作;接正电源时只允许对器件进行读操作,相当于对24C02中的数据进行了保护,不能更改。

I2C总线简述:I2C总线使用两根信号线来进行数据传输,一根是串行数据线(SDA),另一根是串行时钟线(SCL),总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线[28]。I2C总线数据传输的最高速率为400Kbps,标准速率为100Kbps。SDA与SCL为双向I/O线,都是开漏极端(输出1时,为高阻抗状态)。因此I2C总线上的所有设备的SDA、SCL引脚都要外接上拉电阻(3.3K-10K)。论文通过软件来模拟I2C总线时序实现数据的传输。

从24C02中读取数据的流程图3.15如下

26

长安大学硕士学位论文

图3.15 24C02读数据

详细C代码见附录:

3.9 本章小结

1、设计了智能车的电源管理系统,保证7.2V总电源能够稳定有效地给智能车各个用电模块供电。

2、设计了测速系统的软硬件,实现了智能车的测速功能。 3、设计了驱动电机正反转的H桥电路,编写了底层驱动程序。 4、编写了舵机的驱动程序。

5、设计了人机信息交互系统和数据存储模块,以利于智能车的最终调试方便。

27

第四章 双黑线道路信息检测与识别算法

第四章 双黑线道路信息检测与识别算法

4.1 图像采集系统硬件设计

图像采集系统对于智能车是至关重要的,它是智能车获取外部道路信息的唯一来源,相当于智能车的眼睛。智能车能否平稳快速准确地通过不同的弯道,很大程度上取决于图像采集系统。论文设计的图像采集系统由单板CCD(Charge-coupled Device 电荷耦合元件)摄像头(如图4.1所示)和外围电路构成。

图4.1 CCD摄像头

CCD摄像头的动态性好,稳定性高,受外界光照条件影响小[29]。CCD摄像头按一定的分辨率,以隔行扫描的方式采集图像上的点,将图像点的灰度转换成与之对应的电压值,然后将电压值以视频信号的方式输出。视频信号包括行消隐区,行同步脉冲,图像信号,场消隐区,场同步脉冲[30]。具体见图4.2示:

图4.2 图像信号

当摄像头扫描完一行后,视频信号就会产生一个信号“波谷”,它标志了一行扫描结束,进入下一行(与上一行隔一行)扫描,如此持续扫描。当一场扫描完成以后,视

28

长安大学硕士学位论文

频信号会出现一段场消隐区,其中有一个脉冲远远宽于其他的消隐脉冲,此脉冲称之为场同步脉冲,它标志着一场视频信号的结束。摄像头每秒扫描25帧图像,每帧又分为奇偶两场。

CCD摄像头输出的信号为模拟信号,需要转换为数字信号之后再由单片机进行处理。MS9S12XS128内部有两个8位A/D转换模块ATD0和ATD1,启用其中的ATD0即可进行视频信号的A/D转换。ATD0初始化代码如下:

////////////////////////A/D初始化/////////////////////////////////// void ini_AD(void) {

ATD0DIEN=0x00; /////AD口为复用功能,A/D转换模块引脚 ATD0CTL0=0x00;

///AD通道预留

ATD0CTL1=0b00111111; ///10位采样精度,放电

ATD0CTL2=0b01000000; //只要读结果寄存器,MCU就把AD转换的完成

标志位CCF[n]清0,下降沿触发,禁止外部触发,转换完成SCF=1不中断

ATD0CTL3=0b10001000; // 结果寄存器右对齐,每个序列的AD转换个数为

1,非先进先出模式(先后顺序),冻结模式下AD转换继续 ATD0CTL4=0x01;

ATD0CTL5=0b00100000; ///AD转换持续进行 }

///////////////////////A/D初始化///////////////////////////////////// 图像采集及视频信号分离电路原理图[31]如图4.3所示。

图4.3 视频分离电路

LM1881是一种针对电视信号的视频同步分离芯片[32],它能够直接对视频信号进行同步分离,准确的获得视频图像信号。由于CCD摄像头采集到信号除了包括图像信号

29

第四章 双黑线道路信息检测与识别算法

之外,还包括行同步信号、行消隐信号、场同步信号、场消隐信号以及槽脉冲信号、前均衡脉冲、后均衡脉冲等,所以采用LM1881进行视频信号分离。视频图像信号一帧画面分2场扫描,第1场先扫描奇数行1、3、5、……,称为奇数场;第2场扫描2、4、6,称为偶数场。LM1881的引脚7输出低电平表示此时采集的是偶场信号,高电平时表示为奇场信号。论文通过综合考虑单片机的处理速度和所需图像的清晰度,决定采集的每场图像的大小为65×115,即65行115列的点阵。

4.2 基于CCD摄像头的图像信息采集算法

图像信息采集算法流程图4.4如下:

图4.4 图像采集算法

30

长安大学硕士学位论文

论文通过运用定时器模块的输入捕捉功能来捕捉由T3口产生的行中断和T2口产生的场中断。定时器模块初始化如下:

/***************************行场中断初始化*****************************/ void vinterruptsinit(void) {

TIOS=0x00; //外部输入捕捉0,1通道 0 输入捕捉 1 输出比较7 所有通道输入捕捉

TCTL4=0b01110000; //行上升沿有效,场双沿都有效//0表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿

//PT3(行中断)只在上升沿捕捉, PT2(场中断)上升下降都捕捉,即奇偶场信息都记录,上升沿捕捉的是奇场信号,下降沿捕捉的是偶场信号

TSCR1=0x80; // TSCR1.TEN=1,允许定时器正常工作 }

/***************************行场中断初始化****************************/ 具体采集过程如下:

在主程序main()函数开始执行后,先禁止场中断,禁止行中断,待参数调整与显示完成后清除场中断标志位,允许场中断。当定时器捕捉到T2口的上升沿后,即奇场信号到来时,程序进入场中断处理函数,清除场中断标志位(TFLG1_C2F=1),清除行中断标志位(TFLG1_C3F=1),允许行中断(TIE_C3I = 1),并让行计数变量归零,做好采集灰度值的准备。当定时器捕捉到T3口的上升沿时,图像灰度记录数组g_VideoImageDate[ ][i]开始记录此行的灰度值,当T3口再次捕捉到上升沿时,标志新一行图像信号到来,行计数变量加1,换行继续采集并存储灰度值。当行计数变量>65行时,停止采集,不允许产生行中断(TIE_C3I = 0),清行中断标志位(TFLG1_C3F=1)。等待定时器捕捉T2口的下一个跳变沿。至此,奇场图像采集完毕,灰度值记录于二维数组g_VideoImageDate[ ][ ]中。偶场图像采集过程与其完全类似。

4.3 图像处理与路径识别算法

图像采集与处理是摄像头智能车最关键和重要的部分。智能车能否按照确定的路线快速稳定行驶很大程度上决定于路径的提取和识别算法[33]。一个识别效率高,误差率低,

31

第四章 双黑线道路信息检测与识别算法

抗干扰能力强的算法将对整个智能车系统的“智能”起决定性的作用。因此,这部分是整个智能车系统的核心。 4.3.1 阈值的离散化

一场图像形成后,其图像灰度介于纯黑和纯白之间,灰度值介于0到255之间,0是纯黑,255是纯白。为了能从图像灰度中提取出黑线的位置,就需要将图像的灰度值强行转换为黑白二值,也即需要一个标准灰度值来进行判断,此标准灰度值称为阈值。当图像点的灰度值大于阈值时,就认为是白色,当小于阈值时,就认为是黑色[34]。由于摄像头的原因,同一光照条件下,距离摄像头越近的图像越白,距离越远的图像越黑,所以,在视野远端的赛道黑线的灰度值与近端的黑线的灰度值是不一样的,所以如果整场图像采用一个阈值来判断某点是黑还是白,则会增加很多“噪声” [35],判断图像灰度的黑白时将产生很多的“错误”。因此,必须实行阈值离散,给图像的每一行都给定一个阈值以用来判别黑白。经过经验和多次调试,论文得出以下经验公式(4.1),用来做阈值离散。

MIDDLE[MAX_VIDEO_LINE-1-i]=hold_min+(hold_max-hold_min)*

(unsigned long)i*i/4096。 (4.1) 式中hold_min,hold_max分别称为远端阈值和近端阈值,MAX_VIDEO_LINE为图像的总行数65,i为0到64的整数。一般日光条件下,hold_min=70,hold_max=90。MIDDLE[i](i=0~64)即为第i行的阈值。 4.3.2 搜索路径的算法

第七届飞思卡尔大赛的比赛赛道与往届有了很大不同,从以往的中间黑线,变为了两边黑线[36],如图4.5所示:

图4.5 比赛赛道

赛道宽为45cm,两边黑线分别宽为25mm。

基于以上赛道的变化,论文初始时拟采用提取赛道两侧的黑线的中心线位置,相加后取平均作为赛道的中线,使智能车循此中线快速行驶。此想法最初易于编程,但在实

32

长安大学硕士学位论文

际调试时却出现很多问题,如弯道时可能有一侧“丢线”,十字交叉处两侧同时“丢线”,在这种情况下又需要判断是哪侧“丢线”,从而需要分多种情况判断。而且易受到相交赛道黑线的干扰,例如在十字交叉处很容易使智能车直接90°拐弯。如采用此方法,将会使程序十分繁杂,且在实际测试中,智能车正确循迹的稳定性并不高。故放弃此方法。

论文最终决定改变寻两侧黑线的基本思路,将赛道中间的白色部分作为循迹目标,让智能车沿中间相对黑线很宽的“白色引导线”来行驶。一行白道的提取算法流程图4.6如下:

图4.6 一行白道的提取算法

具体过程如下:扫描第x行,从起始点g_SearchStart(g_SearchStart在处理每场图像时初始化为0)开始扫描,根据这一行的阈值判断黑白。当扫描到白点后记录此点的纵坐标位置为m和l_BlackStartDot,继续向右扫描,l_BlackStartDot不变,m++,直到扫描到黑点或扫描到g_SearchEnd(g_SearchEnd在处理每场图像时初始化为114)停止,用g_BlackPoint[0][cnt](二维数组g_BlackPoint[2][8]已经初始化为0)记录第cnt

33

第四章 双黑线道路信息检测与识别算法

(0,1,2……8)个白条的中心位置(l_BlackStartDot + m) / 2;用g_BlackPoint[1][cnt]记录第cnt(0,1,2……8)个白条的宽度m - l_BlackStartDot + 1。当扫描完第一个白条,而m还不等于g_SearchEnd时,即m未到达g_SearchEnd时,用以上述方法继续扫描向右扫描,寻找下一个白条,并记录它的中心和宽度,重复进行上面的搜索,直到扫描完本行,即m=g_SearchEnd时结束扫描,并记录本行内所有的白条。然后依次判断每个白条与本场中心limit_cur的差值,将差值最小的白条中心记为本行的白道中线。因为发车时,车子在赛道的中间位置,所以采集到第一场图像的白道中线必然也在图像的中心,limit_cur初始定义为115/2,即一场图像的正中间。在以后的各场图像的处理过程中,由于赛道的连续性,赛道中线必然也是连续的,不会发生突变,故下一场图像的中线就在上一场图像的中线的附近,所以limit_cur就取为上一场图像的白道中线。以此参数来过滤“噪声”

此方法可以有效避免一侧“丢线”,十字交叉处时循迹失败的现象,且基本不受赛道周围地面颜色深浅的影响。

图4.7 赛道图像

如图4.7所示,虽然扫描白条时,会记录黑线外侧的白条,但是黑道外侧白条的中线值与limit_cur的差值,必然比两黑道中间白条的中线值与limit_cur的差值大,由于有中心偏差最小来“过滤”,所以总能找到两黑道中间白条的中线值作为正确的“白色中心引导线”。因此,这是一种简单有效的算法,经现场试验,本算法可以使智能车稳定的通过十字叉弯道和起跑标志线位置,暂称此方法为“逐点搜索法”。 4.3.3 优化后的预测算法

上段提出的方法虽然可行,但是当智能车速度提高到2.0m/s后,依然不稳定,经常在弯道处冲出赛道。为了能提高车速,增加稳定性和准确性,论文对以上算法进行了优化。

34

长安大学硕士学位论文

首先提出一种预测算法。当程序从图像第0行开始扫描后,找到了8个有效行后,从下一行起使用最小二乘法拟合直线X=aaY+bb[37],用上面所有有效行的中心来预测下一行的中心,以此来大致确定下一行的扫描范围。预测算法的代码如下:

mX+=(g_BlackPositionCenter[n]); mY+=(MAX_VIDEO_LINE-1-n);

mXY+=(MAX_VIDEO_LINE-1-n)*(g_BlackPositionCenter[n]); mYY+=(MAX_VIDEO_LINE-1-n)*(MAX_VIDEO_LINE-1-n);

aa=(sample_cn*mXY-mX*mY)*10/(sample_cn*mYY-mY*mY); /////拟合直线的斜率 bb=(10*mX-aa*mY)/sample_cn; /////拟合直线的截距

NextPoint =(aa*(MAX_VIDEO_LINE-1-n)+bb)/10; ///拟合出的直线表达式 其中mX、mY、mXY、mYY、aa、bb初始化时均为0, sample_cn为有效行的行数,g_BlackPositionCenter[n]为第n行的中线。经使用C编程检验(程序见附录),此方法对赛道中线的变化趋势预测有效。当有效行少于8个时,下一行的中心NextPoint为上一行的白道中线g_BlackPositionCenter[k]。

结合预测算法的优化后的算法流程图4.8如下:

35

第四章 双黑线道路信息检测与识别算法

图4.8 优化算法

提取每一行的赛道中心位置,存放在g_BlackPositionCenter[ ]中,因为赛道是连续变化的,相邻两个有效行的白道中线位置变化并不是很大,所以我们可以根据上一行的中线位置及所在行的白道宽度(此宽度根据调试时一幅图像的信息来确定,并事先列为表,存于数组Gap[ ]中)确定搜索范围。根据上两个有效行的变化趋势,判断搜索方向。当赛道有向右偏的趋势时,从右往左搜索,当赛道有向左偏的趋势时,从左往右搜索。这样,就在一个较小的范围搜索,不再需要在整行范围内搜索,以此往下,找到整场图

36

长安大学硕士学位论文

像中所有行的白道中线位置。这种优化后的算法可以有效而准确的找到所有行的赛道中线位置,节约时间,大大提高了一场图像的处理速度。

经测试,本算法可以很好的提取出不同参数赛道的中线位置,在上位机中跟踪效果如图4.9~4.10所示,黄线为提取出的赛道中线,可以看出黄线基本都在赛道的中间位置。

图 4.9 左弯道跟踪效果

图 4.10 直道跟踪效果

37

第四章 双黑线道路信息检测与识别算法

4.3.4 起跑标志线的识别

飞思卡尔大赛要求每辆智能车在赛道上跑一圈,以计时起始线为计时点,跑完一圈后智能车需要自动停止在起始线之后三米之内的赛道内,如果没有停止在规定的区域内,比赛计时成绩增加1秒。因此,正确识别起始标志线,准确控制智能车在规定的区域内停车对于比赛最终成绩将至关重要。所以,一个准确的起始线识别算法将是必不可少的。如图4.11所示,为起跑区的赛道尺寸示意图。图4.12为起始线在摄像头采集的图像中的位置。

图4.11 起跑区尺寸示意图

图4.12 起跑标志线图像

起始线识别算法流程图如图4.13所示:

38

长安大学硕士学位论文

图4.13 起跑标志识别算法

根据比赛规则要求,起始线只在长直道中出现,因此,智能车在起始线附近行驶时应相当稳定,这样有利于起始线的识别。在智能车开始运行5s 内不可能出现起跑线,

39

第四章 双黑线道路信息检测与识别算法

我们在5s 内也不检测起跑线。当开始检测后,首先根据循迹算法,找到某一行的赛道中线位置(其中还包含此中线位置所在的白条宽度信息),然后依照本行的搜索方向,找到本行的下一个白条,并记录宽度和位置,根据两个相邻的白条信息,计算出中间所夹的黑条的宽度,判断黑条的宽度是否符合起始线的特征宽度,并判断黑条相同列坐标的对应位置在相邻前后两行是否也是黑条。当以上条件都满足,就认为找到了起始线,程序执行停车代码。当流程图中任意一个判断条件不满足时,程序都跳出,即认为没有到起始线位置,正常处理图像信息,继续提取赛道的中线。在发现起始线后,如果智能车执行停车代码,关闭图像采集标志位,停止舵机工作,则时常会出现停车时甩出赛道的情况[38]。鉴于以上情况,论文对停车代码进行改进,只停止电机工作,摄像头继续采集信息给舵机提供打舵信号,以避免停车时无舵带来的弊端。在实际调试中,此算法能较准确的识别起始线,并能平稳停车。

4.4 本章小结

1、设计了图像采集系统,详细阐述了一种全新的跟踪白线的算法——逐点扫描法; 2、改进后的预测算法提高了正确跟踪赛道中线的稳定性和准确性; 3、提出了停车标志的识别算法,基本能够实现稳定停车。

40

长安大学硕士学位论文

第五章 智能车软件控制算法的研究

论文所设计的智能车的总体思路是根据面阵CCD摄像头采集赛道信息,控制智能车的行驶方向和速度,使其能按照设定的赛道行驶。智能车“智能”的高低,不仅体现在它对赛道情况的视觉感知能力,更重要的是依据赛道的情况自动控制速度和方向,使其能够良好的转向,平稳的加速,提高平均行驶速度。因此,对智能车的电机和舵机的智能控制研究将是一个关键部分。

5.1 控制理论与控制方法

智能控制起源于20世纪70年代。智能控制是控制论与人工智能的结合,是自动控制的一种高级控制技术。智能控制的目标仍然是自动控制,但其实现控制的核心是“知识”和“推理思考”,其中重要的是模仿人的智能,包括利用人类现有的控制知识和推理方法。智能控制方式类型有很多,目前比较成熟的主要有PID控制、模糊控制、神经网络控制、专家系统控制、递阶控制等智能控制类型。 5.1.1 PID控制

PID控制是最早发展起来的控制策略之一,由于其算法简单,可靠性高,被广泛应用于工业过程控制中。常规的PID控制器作为一种线性控制器,是按照偏差的比例(Proportional)、积分(Integral)和微分(Derivative)的线性组合构成控制量,对被控制对象进行控制,其控制规律如下[39]:

tu(t)Kpe(t)KIe(t)dtKD0de(t)dt (5.1)

其中,比例控制是最简单的控制方法。其控制器的输出与输入误差信号成比例关系。偏差一旦产生,控制器立即就发生作用即调节控制输出,使被控量朝着减小偏差的方向变化,偏差减小的速度取决于比例因子振荡。

KpKp,

Kp越大偏差减小的越快,但是很容易引发

越小,则发生振荡的可能性减小,但是达到稳态的时间就越长。单纯的比例

控制还存在一个不能消除的稳态误差。

积分控制,控制器的输出与输入误差信号的积分成正比关系。当一个系统在进入稳态之后存在稳态误差,为了消除此稳态误差,就必须在控制器中加入“积分项”。积分

41

第五章 智能车软件控制算法的研究

项就是误差对于时间的积分,随时间的增加,积分项变大。误差“积少成多”,使得控制器输出信号增大,进一步减小误差,直到误差为0。

微分控制,控制器的输出与输入误差信号的微分成正比关系,即控制器的输出与误差的变化率成正比关系。自动控制系统在消除误差的调节过程中可能会出现振荡甚至失稳,这是由于有较大的惯性环节,其变化总是落后于误差的变化。微分项能提前预测误差变化的趋势,提前抑制误差,从而避免了被控量的严重超调。 5.1.2 模糊控制

模糊数学[40]逻辑在自动控制领域中的应用称为模糊控制,它是20世纪中后期兴起的一门新技术,最早是由美国科学家扎德提出的。模糊控制的主要特点是将实际中专家控制经验和知识概念表示成用模糊语言描述的控制规则。通过应用这些规则去控制被控对象。模糊控制对难以建立精确数学模型的非线性系统十分有效。在现实世界中,人通过长时间的学习与实践,积累出专家经验,再对那些难以建立数学模型的被控对象进行操作。模糊控制就是通过模仿人的控制经验与控制思维,控制方式来控制被控对象。

模糊控制系统的核心部分是模糊控制器。在单变量模糊控制器中,模糊控制器的维数由输入变量的个数确定[41]。一维模糊控制器的输入变量一般选择受控量和输入给定的误差量E。由于仅仅采用偏差值,很难反映受控过程的动态特性品质,因此,所能获得的系统动态性能不能令人满意。二维模糊控制器的两个输入变量通常选用受控变量和输入给定的误差量E和误差变化量EC,由于它们能够较严格的反映受控过程中输出变量的动态特性,因此,在控制效果上要比一维模糊控制器好的多。

典型的模糊控制系统的组成[42]如图5.1所示

图5.1 模糊控制系统

由图可知模糊控制器由模糊化接口、知识库(包括数据库和规则库)、模糊推理和清晰化接口四部分组成。知识库包含模糊if_then规则库和数据库,模糊推理单元按照这些规则和所给的事实进行推理过程,求出合理的输出。输入接口将明确的输入量转换

42

长安大学硕士学位论文

为模糊量,并用模糊集合表示,模糊输入经过模糊推理得到控制量,因为控制量也是模糊量,因此,必须转换为清晰值作为模糊控制器的输出,清晰化模块就是将模糊的输出结果转变为明确的输出值。

5.2 舵机的控制策略研究

5.2.1 舵机的PD控制算法

由于作为执行机构的舵机性能及转向连杆机构的结构和参数很难完全精确掌握,因此得不到一个用于描述转向执行机构的准确的数学模型,控制理论的其他技术不便采用,这种情况下应用PID控制技术最方便且最为有效。考虑到寻线不需要智能车严格按照黑线行驶,例如,在小S弯道上希望智能车能“直冲”,而在大弯道时希望能够走赛道内侧,这样实际智能车走的路径就短,所用时间也就少,小车的打舵与“过去”误差的总和没有关系,所以去掉容易产生积分饱和系统不稳定的积分环节[43],故论文的打舵策略初步拟采用PD控制。由于单片机是一个离散化的处理系统,处理的是二进制的信息,不能实现连续的PD控制算法,必须要进行离散化处理将连续的PD控制变成数字PD控制算法[44]才能进行编程。所以可令

u(t)=u(k),e(t)=e(k),de/dt=e(k)-e(k-1). 编写的打舵程序如下:

当g_BlackPositionCenter[i]-VIDEO_MID>0时 serv=(g_BlackPositionCenter[i]-VIDEO_MID)*KP+

(g_BlackPositionCenter[i]-VIDEO_MID-diff_last)*KD

其中diff_last是上一次打舵时的偏差(g_BlackPositionCenter[i]-VIDEO_MID)。(g_BlackPositionCenter[i]-VIDEO_MID-diff_last)为本次打舵时的偏差变化率。KP为比例控制系数,KD为微分控制系数。

经调试,当KP=3,KD=1,舵机能够平滑打舵,且动态性很好。后根据实际调试的经验,在打舵公式中加入平方项,

serv=(g_BlackPositionCenter[i]-VIDEO_MID)*KP

43

第五章 智能车软件控制算法的研究

+(g_BlackPositionCenter[i]-VIDEO_MID)*(g_BlackPositionCenter[i]-VIDEO_MID)*0.05+(g_BlackPositionCenter[i]-VIDEO_MID-diff_last)*KD 当

g_BlackPositionCenter[i]-VIDEO_MID<0

,

VIDEO_MID

-g_BlackPositionCenter[i]代替g_BlackPositionCenter[i]-VIDEO_MID即可。

由于舵机的中心位置对应的PWM信号的高电平时间是1.5ms,控制信号是周期为20ms,周期寄存器PWMPER01在初始化中为50000,由公式(5.2)计算, PWMDTY01= PWMPER01×1.5÷20 (5.2) 计算后得出舵机中点的占空比寄存器PWMDTY01的值为3750,同理,计算舵机的左极限和右极限位置对应的占空比寄存器PWMDTY01的值为2500和5000,即舵机的转动范围就为2500~5000,而由于机械结构的限制,舵机并不需要在整个范围内转动,定义一个参数limit为偏离舵机中点的最大差值,程序中利用宏定义为其赋值为500(此值可根据机械结构的不同而调整大小)。

下图为利用Matlab/similink软件设计的带平方项的PD算法的模型(如图5.2),并输出了控制曲线(如图5.3)。输入信号(粉色曲线)为幅值65,频率0.5Hz的正弦波,模拟智能车在遇到连续弯道时的舵机响应情况。输出响应为图中的黄色曲线,由仿真结果可以看出,带有平方项的PD算法能够快速响应图像处理所得的路径偏差。由于similink仿真模型为连续信号,单片机处理的是离散信号,仿真模型中的微分环节在单片机的程序中是用差分来代替的,故最终的仿真结果与实际存在一定的误差,但是响应趋势及幅值应基本相当,对算法的参数调整具有参考意义。

图5.2 PD算法

44

长安大学硕士学位论文

图5.3 similink仿真曲线

5.2.2 舵机的自适应PID控制算法

在实际的智能车调试中,由于环境和其他干扰因素的影响,其循线的稳定性和可靠性会降低,因此,需要引入自适应PID算法。自适应PID算法能根据智能车在循线运动过程中赛道参数的变化和智能车姿态的变化来实时改变控制策略的参数,使控制系统性能指标始终保持在最佳范围内。自适应PID控制算法根据误差e和误差变化de来确定PID参数,然后将确定的PID参数传递给PID控制器,进行在线修改,从而使控制系统具有良好的控制性能。论文中由于舵机算法只采用PD算法,所以只需要用自适应算法确定KP,KD两个参数。自适应PD控制器,其结构如图5.4所示:

图5.4 自适应PD控制器

在自适应算法中,论文将KP,KD都分为三档,Kp1Kp2Kp3,KD1KD2KD3。由

45

第五章 智能车软件控制算法的研究

于在自适应算法中同时考虑误差e和误差变化de时,将会造成编制程序十分繁杂,且各个参数之间的关系过多,各参数并不能实际确定下来,随之使调试变的困难,反而达不到预期效果,故在自适应算法中不再考虑微分de,仅依靠误差e的相对大小来改变KP和KD。自适应算法程序流程图5.5如示,误差e为摄像头采集的图像中线偏离赛道中线的距离,范围为(-57,+57),函数

定义如下:

(5.3)

图5.5 自适应算法流程

根据已有的PID控制系统的设计经验以及实际的调车经验,结合控制理论,论文总结出自适应PD控制系统参数的调整规律:

1 当误差e的绝对值较大时,选取较大的KP和较小的KD,使系统能够快速响应消除误差[45]。

2 当误差e的绝对值中等时,选取较小的KP和适中的KD,使系统的超调较小。 3 当误差e的绝对值较小时,选取较小的KP和较大的KD,避免系统在平衡点附近出现振荡。

46

长安大学硕士学位论文

5.2.3 舵机的模糊控制算法

论文采用单变量二维模糊控制器为智能车舵机提供算法。由于在实际的控制工作应

~用背景下,模糊关系矩阵R是一个高阶矩阵,而论文对XS128单片机的编程采用的是C

语言,C语言对于矩阵运算的编程将十分复杂,且运算量相当大,需要花费大量的运算时间,造成实际一次控制循环时间过长,极大的影响了智能车的实时跟踪性。因此在实际应用中常采用的是快速查表法。快速查表法的思路是根据应用背景,提前根据经验设计出一个模糊控制表[46],并将该表以二维数组的形式写入智能车的控制程序中。当模糊控制器开始工作后,计算机只需根据每次采样得到的误差离散的量化值和误差变化离散的量化值,在储存模糊控制表的二维数组中找到针对此时输入的模糊控制输出值,反模糊化后输出精确值即可完成控制。

论文采用Mamdani型模糊控制器,设计如下:首先,定义输入、输出量的模糊分布。由摄像头采集的水平方向像素为115,可知误差e的论域可定为[-60,60],采用三角形隶属函数,划分7个模糊集合(如图5.6所示):误差负大(NB)、误差负中(NM)、误差负小(NS)、误差零(ZE)、误差正小(PS)、误差正中(PM)、误差正大(PB);误差的变化率ec的论域暂定为[-45,45],采用三角形隶属函数(如图5.7所示),划分为7个模糊集合;输出项U的论域为[-600,600],也采用三角形隶属函数(如图5.8所示),划分13个模糊集合:负极大(NBB)、负很大(NVB)、负大(NB)、负中(NM)、负小(NS)、负很小(NVS)、零(ZE)、正很小(PVS)、正小(PS)、正中(PM)、正大(PB)、正很大(PVB)、正极大(PBB);

图5.6 误差e的模糊集合

47

第五章 智能车软件控制算法的研究

图5.7 误差的变化率ec的模糊集合

图5.8 输出的模糊集合

根据控制经验归纳总结模糊规则,建立模糊控制规则表5.1如下:

表5.1 模糊控制规则

de e NB NB NM NS ZE PS PM PB PBB PBB PB PB PBB PM 48

PVB PS PVB PS PVB PB NM PVB PVS

长安大学硕士学位论文

NS PB ZE PB PS PS PM PM PM PS PVS ZE NVS NS PVS ZE NVS NM NB NM NB NB PVS ZE NVS NS NVS NS NS NVB NM NVB NB NVB NVB PB NB NBB NBB NBB 根据模糊控制规则建立模糊控制表5.2如下:

表5.2 模糊控制表

de e -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 6 5 4 4 2 -1 -4 6 4 3 3 1 -2 -5 6 4 2 1 0 -2 -5 5 3 1 0 -1 -3 -5 5 2 0 -1 -2 -4 -6 5 2 -1 -3 -3 -4 -6 4 1 -2 -4 -4 -5 -6 采用面积中心法进行反模糊计算。面积中心法就是求出模糊集合隶属函数曲线和横坐标包围区域面积的中心,选这个中心对应的横坐标值作为这个模糊集合的代表值。设输出结果论域U上模糊集合A的隶属函数为A(u),u∈U。设面积中心对应的横坐标为

49

(5.4)

第五章 智能车软件控制算法的研究

该计算公式就像计算一个多质点平面系统的重心,虽计算繁杂,但直观合理。由面积中心法反模糊后得输出量曲面如下图5.9,两个横轴分别表示输入量P(误差)和U(误差的变化量),纵轴表示输出量U=f(P,U),即输出量跟输入量的关系曲面,空间曲面的光滑表面输出近乎连续。

图5.9 输出量跟输入量的关系曲面

在C程序中将此模糊控制表保存在二维数组rule[7][7]中,通过模糊运算引擎函数int Fuzzy(int P,int D)调用此二维数组,查出输出值。由于两个输入项都采用较特殊的三角函数作为隶属度函数,故每个控制循环中最多只有四个模糊控制规则被激活,即最多只有四个输出值。再把四个输出值反模糊化后输出控制舵机信号的精确值。在C代码中反模糊化算法采用面积中心法,详细C代码见附录。

经实验测试,采用模糊控制算法也能实现打舵的功能。

5.3 电机的控制策略研究

飞思卡尔智能车大赛为竞速赛,因此,速度是每一辆智能车追求的终极目标。智能车的速度控制是一项复杂的工作,也是智能车技术的核心部分。一辆优秀的竞速智能车不仅要求动力轮要有合理的瞬时速度,更重要的是速度变化要平滑,速度波动的幅度要小。

整个智能车通过一个直流电机驱动,控制小车的行驶速度实质是控制电机的转速。在这个直流电机速度控制系统中,控制对象是直流电机的转速,控制变量是PWM信号

50

长安大学硕士学位论文

占空比(即占空比寄存器PWMDTYn),反馈是由光电编码器测得的电机当前的实际转速。

5.3.1 电机的PD控制算法

由于智能车瞬时速度是重点被控对象,需要经过中央处理器根据从图像中提取的赛道信息计算出对应的PWM控制信号来对电机进行控制,带有负载的电机是一个较复杂的模型,无法用一个准确的函数表达式来描述它的瞬时输出功率和车的瞬时速度之间的关系,用开环控制供给电机的PWM信号是无法保证控制的精确性和稳定性。故采用闭环控制方式对电机的转速进行控制。

由此得到具有反馈的数字PD控制算法,如图5.10所示:

图5.10 数字PD控制算法

其中r(t)是此时的设定的期望速度,y(t)是编码器实时测得的速度,e(t)是期望速度与实测速度的差值,u(t)是差值e(t)经PD运算后给电机的控制信号。这种算法简单实用,可变参数较少,易于调试。 5.3.2 棒棒—PD控制算法

由于当期望速度与实测速度的差值大于10之后,采用PD算法,电机的响应速度不够迅速,加减速性能不够出色,故对上文的PD算法进行改进,采用PD结合Bang-Bang的算法。算法流程图5.11如下。

51

第五章 智能车软件控制算法的研究

图5.11 棒棒PD算法

C代码如下:

if(contro_speed) //// contro_speed为速度控制信号位,当contro_speed==1,控

制速度程序起效

{

Speed_d_last=Speed_d; ///记录上次的速度差值Speed_d

Speed_d=setted_speed-cur_speed; ///计算本次的速度差值Speed_d if(Speed_d>=10){ /// 速度差值大于10

motor(200); ////全速正转,其中参数200可以根据实际情况调整 }

else if(Speed_d<-10){ /// 速度差值小于10 motor_reverse(200); ////全速反转 }

else if(Speed_d<=-8){ motor(1); ///惯性减速 }

else if(Speed_d<10&&Speed_d>-8){ ///采用PD算法的范围 tmp_speed=0x30+Speed_d*10+(Speed_d-Speed_d_last)*2; if(tmp_speed<0)

52

长安大学硕士学位论文

motor(1); else

motor(tmp_speed); }

根据改进的PD算法,当实测车速与期望车速的差距Speed_d极大时(论文设定相差大于10),就让电机全力正(反)转,以求迅速达到期望车速。此处差值的大小还和测速初始化代码及设定的期望车速的数值有关,可根据实际情况调整。判断差距是否“极大”的“阈值”要依据实际调试时智能车的表现来确定。当“阈值”的绝对值调的过大,PD算法的有效范围就越大,虽然智能车的速度变化平稳,但全程的平均速度会受到很大影响;若“阈值”的绝对值调的过小,PD算法的有效范围就变小,智能车就会趋向于匀速行驶状态,体现不出改进后的PD算法的好处,更会影响智能车在弯道的减速表现,容易使车子因无法及时减速而冲出赛道。因此,此处的“阈值”必须根据智能车在实际赛道上的试验来调整,以不冲出赛道且平均速度最快为最佳评价标准,论文经试验选择为10。

5.4 电机与舵机的统一调试

舵机控制智能车的行驶方向,电机控制智能车的行驶速度,它们共同构成了智能车系统的外部执行机构,是互相配合的,并不是毫无关系,完全割裂的。只有舵机和电机紧密配合,才能实现智能车又好又快的行驶。因此,电机的控制参数和舵机的控制参数必须是统一调试的,而不是分别调试的。实践证明,在某一确定的车速表现良好的舵机控制参数,在稍高车速时,时常会造成智能车冲出赛道,往往要重新调整舵机的参数。

调试过程主要包含以下几个方面: 1 不同弯道的期望速度

由于液晶板显示参数个数的限制,以及为减少期望速度的设定参数个数,便于临赛时快速调整参数,对于不同弯道的期望速度,论文只通过设置最高车速和最低车速,利用数学插值的方法确定不同弯道情况下的允许最大速度,即速度控制策略中的期望速度。插值公式如下:

Settle_speed=maxspeed-(1.*PID_out*PID_out*(maxspeed-minspeed))/500*500 (5.5) 其中,maxspeed为最高速度,minspeed为最低速度,PID_out为舵机的控制参数,范围为0到800之间,它和此时的赛道的弯曲程度及智能车偏离赛道的程度有关,因此,

53

第五章 智能车软件控制算法的研究

本质上电机的控制是与舵机的控制是紧密相连的,电机的期望速度是由舵机的控制参数直接决定的。通过采用这一公式就能给智能车在不同弯道不同姿态下设定允许最大速度。根据论文所设计的智能车的实际情况,初步设定其maxspeed为26,minspeed为24(在调试阶段可以根据智能车实际表现调整maxspeed和minspeed)。期望速度曲线图如下,其中横坐标为PID_out,纵坐标为期望速度。由图5.12可以看出,期望速度的变化并不是随车子偏离赛道中线的距离成线性变化,而是当车子在离赛道中线不远时,速度保持高速,偏离赛道中线越远,速度就下降的越快,这样更有利于入弯时快减速,出弯时快加速,小S弯时能保持一个较高的平均速度通过。

图5.12 期望速度的插值曲线

2 舵机和电机控制参数的调试

对舵机的控制参数的调试就是让智能车在不同的弯道时都能切内道,按最佳的路线行驶,在直道时能够不抖舵,不振荡。舵机采用PD控制,首先调整KP,当KP过小时,舵机在转弯时明显转向迟缓,走弯道的外侧;当KP过大,过弯道时内侧轮容易掉出赛道,且在直道时造成反复振荡。经过多次调整,找到一个较好的KP,再调整KD。利用微分控制,实现小S弯的近似直冲,和弯道时切内道的效果。而电机的速度也对舵机的控制有很大影响,当速度过大时,弯道易冲出或走外道。若要追求高速,此时又要重新调整舵机的控制参数KP。总之,对于舵机和电机参数的调试,没有一个固定的调试步骤,只能用试凑法来不断试验,以在实际赛道用时最短即为最优。

54

长安大学硕士学位论文

5.5 实际赛道测试

采用试车赛道如图5.13所示,赛道总长约17.62m。

图5.13 调试赛道

由5.3节理论分析得出棒棒—PD算法的控制效果较好,故在实际测试阶段电机只采用此算法,不再与PD控制算法作实际测试比较。舵机则分别采用PD控制、自适应PD控制、模糊控制算法进行实测。本次试验结果只是在特定的场地条件下,有限时间内调试出来的,并不代表三种算法本身的最佳控制的极限潜力。

不同的控制算法组合的实验结果列表5.3如下:

表5.3 实验结果

舵机控制算法类别 PD算法 有效测试次数 1 2 3 单圈用时( s ) 12.5 13.8 14.4 15.2 14.6 14.3 20 21.5 16.5 55

平均速度(m/s) 1.40 1.28 1.22 1.16 1.21 1.23 0.88 0.82 1.07 单圈最短用时( s ) 12.5 不冲出赛道的概率 3/4 自适应PD算 法 1 2 3 14.3 3/6 模糊控制算 法 1 2 3 16.5 3/9

第五章 智能车软件控制算法的研究

上表中“不冲出赛道的概率”一项的含义是3次成功跑完全程与其所需的发车次数的比值,发车次数越少,比值越大表示成功率越高,所使用的算法越稳定。从上述结果数据可以看出当舵机采用 PD算法,电机采用 棒棒—PD算法时,智能车单圈运行时间最短,稳定性最高,达到了最佳状态。由于模糊控制算法相对较复杂,编写的C程序还不够完善,占用了太长的机时,导致一次控制循环的时间较长,控制循环的频率下降,故控制效果相对较差。自适应算法需要现场调试的参数过多,短时间内不容易调整出一套较好参数,给现场快速调试带来诸多不便,也不宜采用。

论文在舵机的PD控制算法和电机的棒棒PD控制算法的基础上进行了进一步的调试,并在第七届飞思卡尔大赛西部赛中,平均速度达到了2.5m/s以上。

5.6 本章小结

1、舵机采用PD控制、自适应PD控制、模糊控制算法进行控制,并分别编写了算法的C代码;

2、电机采用PD控制和棒棒—PD控制算法进行控制,并分别编写了算法的C代码; 3、经过实际测试比较,最终选择舵机的PD控制算法和电机的棒棒—PD控制算法为最优控制组合,并分析了其他算法的不足。

56

长安大学硕士学位论文

第六章 智能车的辅助功能设计

前述章节的设计与开发都是基于飞思卡尔智能车大赛的比赛规则。预计未来真正的智能汽车不但要能在标准道路(如高速公路)上实现稳定巡航,提高运输效率,保证交通安全,而且还要能在车内或远离车辆的位置对车辆进行遥控。要实现后一种功能,就必须在人眼无法或不便直接观察的情况下,通过其他监视手段,实现对车辆所处环境的观察。在获得车辆的行驶环境后,利用简单的手持装置,控制汽车安全行驶,驾驶人不必关系汽车的实际操作步骤,如玩游戏一样简单易行。为了防盗,密码锁也将会是未来智能车辆的标准配置。

6.1 LCD显示摄像头图像

基于前面第三、四章所设计的硬件设备,利用诺基亚5110作为显示器,实时监视智能车前方赛道情况。这样可以在不连接PC机的情况下,方便地观察图像的采集情况,初步判断图像阈值的选择是否合适。 6.1.1 图像灰度值的转换

由于CCD摄像头采集到的是模拟信号,经A/D转换后为0到255的数字信号。NOKIA5110的像素只有两种状态,1:像素亮,0:像素灭。因此,首先需要将灰度值转换为0、1,由第4.3节可得每行的阈值,根据阈值判断,当灰度值大于阈值时为白,记此点对应的像素值为0,反之,则为1。根据这一方法,将一场图像的灰度值全部转换成0或1,并记录到一个新的二维数组中保存待用。 6.1.2 像素值数据的重排列

NOKIA5110为48*84的点阵LCD,数据是以字节8bit为单位下载到它的驱动芯片PCD8544的48*84bit显示数据RAM矩阵中,故需要将图像的像素值按一定规律每8位组合成一个字节。论文采用纵向每8位合并为一个字节的方法,故纵向只需6个字节即可表示完点阵的一列。由LCD的初始化设置可知,LCD是垂直寻址,像素在LCD上方的对应于8位字节的低位,像素在LCD下方的对应于8位字节的高位,假设p为某一字节,初始化为8位二进制数p=00000000。从最上的像素开始判断,当其值为0时,

57

第六章 智能车的辅助功能设计

p=p+0;当其值为1时,p=p+2^0。依次类推,当判断第x(x=0、2……7)个像素时,其值若为0,则p=p+0,若为1,则p=p+2^x。这样就把一个字节的像素值重排列好了,完成了一列数据的转换,其他列依次类推。详细C代码见附录。 6.1.3 LCD显示程序设计

如上节,p值直接代表了像素值,即点阵中每个点的显示状态,通过普通I/O口模拟SPI总线,确定坐标位置后直接写入即可。一个字节的写入程序见附录。摄像头前是一只手,采集到的图像显示效果如图6.1所示。

图6.1 LCD显示效果

6.2 电机、舵机的手动控制

论文利用四个按键,设计其复用功能,通过软件的查询方式,实现其对智能车的左转、右转、加速、减速的手动控制功能。程序流程图6.2如下:

58

长安大学硕士学位论文

图 6.2 手控模式算法

论文在此不再开发无线发射及接收装置,仅通过按键实现对车辆的手动控制来模仿对真实车辆的遥控功能。这种手控功能还可以用于检测智能车的舵机和电机是否能正常工作,并能方便的调整舵机的中点值,省去分别重新烧制舵机和电机的测试程序的麻烦。

6.3 工作模式的切换方法

根据以上章节的研究设计,现在智能车有两个运行模式,一是用于飞思卡尔大赛的自动循线模式,模仿未来真实的智能汽车在标准道路环境下的自动巡航行驶,二是模仿真实车辆远距离控制的手控模式。对于同一辆智能车,如果决定使用某一模式后再向MCU烧制这一模式的程序,这将极其麻烦,在未来,拥有多种工作模式的智能汽车也不可能有技术保障人员随时随地按车主的要求更换汽车的控制程序,这是不现实的,也是不可能的。因此,智能汽车的多种工作模式必须能在不改变整个控制程序的基础上实现实时转换。

对于论文以飞思卡尔智能车为基础而设计开发的两种模式,决定采用设置模式参数的方法来转换。在主程序中设置MOD参数,当MOD为偶数时,执行手控模式,当MOD为奇数时,执行自动寻线模式。MOD参数存储在24C02中,它能在调整参数阶段在LCD上显示,并能更改和保存。设置为奇偶区别而不是具体数值来进行区别的好处是调试者不需记忆数值,即便调试者不知道奇偶分别对应某种模式,在MOD的任何初始值下,也可在最多改变两次参数的情况下找到自己所需的工作模式。若设置为具体

59

第六章 智能车的辅助功能设计

的数值,不仅需要调试者记忆,而且由于按键的颤抖干扰,不容易调出所需的参数,比较耗费时间。模式转换程序简化如下: if(MOD%2==0)

{for( ; ; ){手控模式程序并液晶显示摄像头采集到的图像信息}}

If(MOD%2==1)

{for( ; ; ){自动寻线模式}}

经过智能车的实际测试,上述方法能够实现模式转换,且两种模式在运行时完全不会干扰。

6.4 电子密码锁的设计

汽车防盗已成为一个严峻的问题,未来的智能汽车为了防止盗贼的偷窃,当然不能缺少电子密码锁。论文为此次设计的智能车也设计了一个6位电子密码锁,模拟真实车辆的防盗功能,用来防止无关人员对智能车的扰乱。此电子密码锁完全基于前面章节的硬件设计,不需另加任何硬件,且安全性极高。对其中四个按键进行重新定义,功能分别为“下一位密码”、“确认”、“密码加1”、“密码减1”,利用NOKIA5110显示输入密码,实现人机信息交互。具体的程序流程图6.3所示。此电子密码锁操作界面简单友好,如图6.4所示,最下一行的箭头1指示当前可以调整的密码位。在连续3次输错密码后系统会直接锁死,防止他人通过多次尝试而意外打开。另外,此电子密码可以更改且不需要合法用户记忆,将其存储在24C02中,在调整参数阶段,密码会显示在液晶板的适当位置,只要合法用户记忆密码的位置就能知道密码,以防密码忘记后带来的种种麻烦。电子密码锁的C代码见附录。

60

长安大学硕士学位论文

图 6.3 密码锁控制流程

图6.4 密码输入操作界面

6.5 本章小结

1、为智能车设计了手动控制模式,并解决了两种工作模式之间的自由转换问题; 2、设计的六位电子密码锁解决了智能车的防盗问题,可防止无关人员随意调试,安全可靠。

61

结论与展望

结论及建议

1 结论

论文以第七届全国大学生“飞思卡尔”智能汽车竞赛为研究背景,从车模的安装和改造、硬件电路的搭建,再到智能车图像识别算法,电机、舵机的控制策略的编写和整车调试,最终设计出了具有自主寻线行驶功能的智能车系统。该智能车系统可以通过CCD摄像头稳定可靠的采集到清晰度较高的前方赛道信息,准确的提取出赛道的中线位置,采用不同的算法来控制舵机转向和电机驱动,实现了智能车在赛道上沿着两条边缘黑线稳定快速的自主行驶。通过论文研究得到结论如下:

1) 根据汽车理论和汽车设计相关理论知识,对智能车的转向轮的定位参数进行了确定,并对转向系统进行了运动学仿真,优化了舵机的安装位置参数。针对以往采用集成半桥芯片MC33886制作的电机驱动电路容易过热和驱动电流过低的问题,论文利用两片7970芯片自行搭建了全新的电机驱动电路,该电路控制方便,响应速度快,完全满足智能车行驶时的需求。

2) 在图像采集和处理方面,由于单片机片内内存只有128KB,内存相对较小,总线频率为8M,数据处理能力有限,难以满足要求,针对上述问题,论文采用了锁相环超频技术,将单片机总线频率由原来的8M提高到现在的80M,从而大大提高了单片机的数据分析处理速度;对图像进行处理时,论文采用了不同行使用不同阈值的算法来消除噪声,处理速度块,效果良好,处理后的图像清晰,完全能够满足使用要求。优化后的预测算法可以有效而准确的找到所有行的赛道中线位置,节约时间,大大提高了一场图像的处理速度。

3)在舵机控制方面使用了模糊控制算法,因首次使用,控制效果不甚理想,C程序代码有待改进,但也是一种有意义的尝试。在电机控制方面运用了棒棒—PD算法,通过不断的调试和参数的匹配,最终确定Kp值应控制在10左右,Kd值设定为2。在最后的第七届飞思卡尔大赛西部赛中,智能车实现了自主较好较快行驶,最高速度提高到2.7m/s左右,基本没有出现冲出跑道的现象,行驶稳定性较好。

4) 在智能车调试方面,论文设计了液晶显示屏和按键模块,并在程序中将需调试的相关参数定义为全局变量,利用该模块可以直接调整更改程序中参数,省去了重复下载程序的繁琐,在调试过程中省时省力,方便快捷。

62

长安大学硕士学位论文

5)根据未来智能汽车的发展趋势,设计了电子密码锁和基于LCD显示屏的手动控制模式,并能实现两种模式的实时转换。

2 建议

论文对基于MC9S12XS128单片机的智能车系统进行了一些研究,经过不断地实践,也取得了一些研究成果,但是由于时间仓促,所以本智能车系统还有很多需要得到完善的方面,主要有以下几点:

(1)控制算法方面。在模糊控制中,输入与输出论域的隶属度函数的选定原则没有任何文献参考,缺乏理论支持,采用了简单的三角形函数,虽然利于编程,但控制效果不好。在隶属度函数的选择上还需要深入研究,以使得模糊控制更加平滑稳定。

(2)硬件调试方面。设计的人机信息交互模块对调试提供了很大的方便。在实际调试中,还采用历届师兄研发的串口电路和SD卡存储系统,可以在PC机上进行图像实时观看和回放功能。但是,串口电路不能过长,又与PC机相连,赛道调试不便。而使用SD卡又会造成单片机运算量加大,对智能车的控制效率降低。所以,为更方便的调试,开发一种基于单片机的实时图像无线传输系统是有必要的,在此处还需要深入研究。

63

参考文献

参考文献

[1] 黄珊珊.汽车电子与智能化技术的应用与发展趋势[J].农业装备与车辆工程,2008.5 [2] 陈昊.智能车视觉导航中路径识别技术的研究[D] .武汉理工大学硕士毕业论

文.2010.5

[3] 王慧.刘富.智能车的路径识别与控制策略的研究[D] .吉林:吉林大学通信工程学院,

2009

[4] 刘子龙.无人驾驶城市公共交通系统的车体控制研究[D].上海交通大学博士后学位

论文,2008.6

[5] 乔维高,徐学进.无人驾驶汽车的发展现状及方向[J] . 上海汽车,2007.7 [6] 韩仁辉等.外军军用无人车发展现状[J] . 军车世界,2011.8

[7] 熊和金.智能汽车系统研究的若干问题[J].Journal of Traffic and Transportation

Engineering,2001

[8] 谢飞.未来智能汽车及智能汽车交通系统[J].信息,1997 [9] 陈家瑞.汽车构造(下册)[M] .人民交通出版社,2002.2 [10] 王望予.汽车设计(第三版)[M].机械工业出版社,2004.4 [11] 李增刚.ADAMS入门详解与实例[M].2010.3

[12] 贾长治,殷军辉,薛文星等.MD ADAMS虚拟样机从入门到精通[M].2011.1 [13] 余志生.汽车理论(第4版)[M] .机械工业出版社.2006

[14] 韩黄璞.基于成像规律的CCD镜头畸变的快速校正[D] .西安工业大学硕士毕业论

文.2012.5

[15] 王宜怀,曹金华. 嵌入式系统设计实战[M].2011 [16] 电源滤波电容大小的计算方法. [17] CodeWarrior使用指南

[18] LM2940中文数据手册Datasheet.

[19] 方长青,王根茂等.第六届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告[J].

东南大学,2011.9

[20] LM1117-3.3 电压转换芯片 数据手册 说明书

[21] BTS 7970 High Current PN Half Bridge[J]. Data Sheet,Rev.2.0,May 2006. [22] SN74LS240 SN74LS244 Octal Buffer/Line Driver with 3-State Outputs[J].

64

长安大学硕士学位论文

Semiconductor Components Industries,LLC,1999.

[23] 如何确定直流电机驱动的PWM频率.www.embedream.com [24] 舵机原理与控制.

[25] 诺基亚5110液晶屏资料驱动芯片PCD8544中文数据手册 [26] 刘旭阳.诺基亚5110液晶显示器应用[D]. 电气工程学院课程设计 [27] 24C02_DataSheet

[28] The I2C BUS SPECIFICATION VERSION 2.1 JANUARY 2000

[29] 侯晓攀,韩蕾亚,张琳.基于S12单片机的机器视觉系统设计与实现[J].中国科技论

文在线.

[30] 刘建刚,程磊,黄剑,章政.基于CCD图像识别的HCS12单片机智能车控制系统

[J] . 光电技术应用,2007.12

[31] 葛亚明,刘涛,王宗义.视频同步分离芯片LM1881及其应用[J] .应用科技.2004.9 [32] LM1881 Video Sync Separator[J] . National Semiconductor.1995

[33] 华文,俞斌,翁华.基于CCD摄像头黑线提取算法[J].电子产品世界,2009.01 [34] 吴冰,秦志远.自动确定图像二值化最佳阈值的新方法[J].测绘学院学报,2001.12 [35] 徐利文.智能车电机控制和图像采集系统设计与研究[D] .长安大学硕士学位论文,

2012.6

[36] 第七届飞思卡尔大赛规则 2012

[37] 解同信. 最小二乘法求作拟合直线[J],北京工业职业技术学院学报,2006.6 [38] 李国柱. 智能车起跑线识别算法及停车策略[J].价值工程, [39] 罗兵,甘俊英,张建民.智能控制技术[M]. 2011.3

[40] 诸静等.模糊控制原理与应用[M].北京:机械工业出版社,2005.1 [41] 楚炎芳,张瑞华.模糊控制理论综述[J].科技信息

[42] 程柏林.基于模糊PID控制的智能小车控制器的研制[D] .合肥工业大学硕士毕业论

文,2007.12

[43] 许寰.智能小车的运动控制系统研究[D] .中南大学硕士毕业论文,2009.5 [44] 王祥好.模糊PID控制算法[D].合肥工业大学硕士学位论文,2009.

[45] 石幸民,郝整清等.模糊控制及其MATLAB仿真[M] .清华大学出版社,2008.2 [46] Xiu Wang.Fuzzy-PID Control in Electro-Hydraulic Proportional Valve

System[J].www.doc88.com

65

附 录

附 录

/////////////24C02///引脚定义及读取数据代码///////////////////// #define #define

SDA PORTB_PB6 SCL

PORTB_PB7

#define SDADDR DDRB_DDRB6 #define SCLDDR DDRB_DDRB7 void Start() {

SCL=0;//低电平改变DA线 SDA=1; SCL=1; Delay4Us(); SDA=0; Delay4Us(); SCL=0; }

void Stop() { SCL=0; SDA=0; SCL=1; Delay4Us(); SDA=1; Delay4Us(); SCL=0; }

void init_24c02()

66

长安大学硕士学位论文

{

SDADDR=1; SCLDDR=1; }

////写EEPROM

void WrEEPROM(uchar address,uchar y) {

Start();//开始

WrOperation(0xa0);//写器件地址 WrOperation(address);//写EEPROM地址 WrOperation(y);//写数据 Stop();//停止

delayms(10);//延时,EEPROM内部操作 //while(0); }

////读EEPROM

uchar RdEEPROM(uchar address) { uchar x; Start();

WrOperation(0xa0);//写器件地址 WrOperation(address); Start();

WrOperation(0xa1);//写EEPROM地址(读) x=RdOperation(); Stop(); return x; }

////////////// 图像处理预测算法C代码 检验版 /////////////////// #define MAX_VIDEO_LINE 115

67

附 录

#define NUMBER 8 #include void main() {

signed int aa=0,bb=0; double NextPoint=0;

long mX=0,mY=0,mXY=0,mYY=0; unsigned char sample_cn=NUMBER;

double g_BlackPositionCenter[NUMBER]={66,63,60,57,54,51,48,67}; for(int n=0;nmX+=(g_BlackPositionCenter[n]); mY+=(MAX_VIDEO_LINE-1-n);

mXY+=(MAX_VIDEO_LINE-1-n)*(g_BlackPositionCenter[n]); mYY+=(MAX_VIDEO_LINE-1-n)*(MAX_VIDEO_LINE-1-n);}

aa=(sample_cn*mXY-mX*mY)*10/(sample_cn*mYY-mY*mY);

bb=(10*mX-aa*mY)/sample_cn; }

//////模糊控制C源代码/////////// #include #include\"math.h\" #define PMAX 65 #define PMIN -65 #define DMAX 50 #define DMIN -50

#define FMAX 100 ///经试验此参数对最终结果无影响 为扩大倍数方便计算

int PFF[4]={0,20,40,60};/////P的特征值 采用三角形函数为隶属度函数 int DFF[4]={0,15,30,45};////D的特征值 还有负半轴的数值

NextPoint =(aa*(MAX_VIDEO_LINE-1-n)+bb)/10; printf(\"%f\

68

长安大学硕士学位论文

int UFF[7]={0,100,200,300,400,500,600};/////输出 还有负半轴的数值 表示舵机的极限舵角为600,此参数可以改

int rule[7][7]={ /////模糊规则表 输出U分为13级,49条模糊规则 ///误差变化率-3,-2,-1,0,-1,-2,-3 };

int Fuzzy(int P,int D) ///模糊运算引擎 采用查表法 { int U;

{-6,-6,-6,-5,-5,-5,-4}, /////纵标 误差 -3, {-5,-4,-4,-3,-2,-2,-1}, // -2 {-4,-3,-2,-1, 0, 1, 2}, // -1 {-4,-3,-1, 0, 1, 3, 4}, // 0 {-2,-1, 0, 1, 2, 3, 4}, // 1 { 1, 2, 2, 3, 4, 4, 5}, // 2 { 4, 5, 5, 5, 6, 6, 6} // 3

unsigned int PF[2],DF[2],UF[4];

int Pn,Dn,Un[4]; long temp1,temp2; ////////确定隶属度////////

if(P>-PFF[3]&&Pif(P<=-PFF[2]) ////PFF[2]=24; {

Pn=-2; ////记录P的后一个隶属的模糊集合

PF[0]=FMAX*((float)(-PFF[2]-P)/(PFF[3]-PFF[2]));//////隶属于前一模糊

集合的隶属度

}

else if(P<=-PFF[1]) ///PFF[1]=12; {

Pn=-1;

69

附 录

}

PF[0]=FMAX*((float)(-PFF[1]-P)/(PFF[2]-PFF[1]));

else if(P<=PFF[0]) //PFF[0]=0; }

else if(P<=-PFF[3]) ////P不在最大范围内 { }

else if(P>=PFF[3]) {

Pn=3;PF[0]=0;

70

{ }

else if(P<=PFF[1]) { }

else if(P<=PFF[2]) { }

else if(P<=PFF[3]) { }

Pn=3;

PF[0]=FMAX*((float)(PFF[3]-P)/(PFF[3]-PFF[2])); Pn=2;

PF[0]=FMAX*((float)(PFF[2]-P)/(PFF[2]-PFF[1])); Pn=1;

PF[0]=FMAX*((float)(PFF[1]-P)/(PFF[1]-PFF[0])); Pn=0;

PF[0]=FMAX*((float)(-PFF[0]-P)/(PFF[1]-PFF[0]));

Pn=-2;PF[0]=FMAX; ///隶属于后一个模糊集的隶属度为1

长安大学硕士学位论文

}

PF[1]=FMAX-PF[0]; ///隶属于前一个模糊集的隶属度 if(D>-DFF[3]&&Dif(D<=-DFF[2]) {

Dn=-2;DF[0]=FMAX*((float)(-DFF[2]-D)/(DFF[3]-DFF[2]));

}

else if(D<=-DFF[1]) {

Dn=-1;

DF[0]=FMAX*((float)(-DFF[1]-D)/(DFF[2]-DFF[1]));

}

else if(D<=DFF[0]) {

Dn=0;

DF[0]=FMAX*((float)(-DFF[0]-D)/(DFF[1]-DFF[0]));

}

else if(D<=DFF[1]) {

Dn=1;

DF[0]=FMAX*((float)(DFF[1]-D)/(DFF[1]-DFF[0]));

}

else if(D<=DFF[2]) {

Dn=2;

DF[0]=FMAX*((float)(DFF[2]-D)/(DFF[2]-DFF[1]));

}

else if(D<=DFF[3]) {

71

附 录

Dn=3;

DF[0]=FMAX*((float)(DFF[3]-D)/(DFF[3]-DFF[2]));

}

}

else if(D<=-DFF[3]) { }

else if(D>=DFF[3]) { }

Dn=3; DF[0]=0; Dn=-2; DF[0]=FMAX;

DF[1]=FMAX-DF[0];printf(\"DF[1]=%d DF[0]=%d\\n\ // printf(\"////////////////%d %d/////////////////\\n\ ///////输出值使用13个隶属函数,中心值由UFF[7]指定///////

/////激活四条模糊规则

Un[0]=rule[Pn-1+3][Dn-1+3];printf(\"Un[0]=%d\\n\ Un[1]=rule[Pn+3][Dn-1+3];printf(\"Un[1]=%d\\n\ Un[2]=rule[Pn-1+3][Dn+3];printf(\"Un[2]=%d\\n\ Un[3]=rule[Pn+3][Dn+3];printf(\"Un[3]=%d\\n\ ///////比较四条模糊规则的权重////////

if(PF[0]<=DF[0]) ////输出值的隶属度为P和D 的隶属度的小值;

UF[0]=PF[0];

else

UF[0]=DF[0];

if(PF[1]<=DF[0])

UF[1]=PF[1];

else

72

长安大学硕士学位论文

UF[1]=DF[0];

if(PF[0]<=DF[1])

UF[2]=PF[0];

else

UF[2]=DF[1];

if(PF[1]<=DF[1])

UF[3]=PF[1];

else

UF[3]=DF[1];

////同隶属度函数输出语言值求大/////////

if(Un[0]==Un[1]) /////当其中任意两条规则对应的输出U为同一集合时,选取隶属度大,舍去隶属度小=0

{

if(UF[0]>UF[1])

UF[1]=0;

else

UF[0]=0;

}

if(Un[0]==Un[2]) {

if(UF[0]>UF[2])

UF[2]=0;

else

UF[0]=0;

}

if(Un[0]==Un[3]) {

if(UF[0]>UF[3])

UF[3]=0;

else

73

附 录

UF[0]=0;

}

if(Un[1]==Un[2]) {

if(UF[1]>UF[2])

UF[2]=0;

else

UF[1]=0;

}

if(Un[1]==Un[3]) {

if(UF[1]>UF[3])

UF[3]=0;

else

UF[1]=0;

}

if(Un[2]==Un[3]) {

if(UF[2]>UF[3])

UF[3]=0;

else

UF[2]=0;

}

/////重心法反模糊///////输出集合是有限的离散点////重心是三条中线的交点// if(Un[0]>=0)

Un[0]=UFF[Un[0]]; /////输出值的对应模糊集合的特征值

else

Un[0]=-UFF[-Un[0]]; /////小于0取负半轴

if(Un[1]>=0)

74

长安大学硕士学位论文

Un[1]=UFF[Un[1]];

else

Un[1]=-UFF[-Un[1]];

if(Un[2]>=0)

Un[2]=UFF[Un[2]];

else

Un[2]=-UFF[-Un[2]];

if(Un[3]>=0)

Un[3]=UFF[Un[3]];

else

Un[3]=-UFF[-Un[3]];

temp1=UF[0]*Un[0]+UF[1]*Un[1]+UF[2]*Un[2]+UF[3]*Un[3]; ////已经将同

一隶属集合中隶属度小的为0

temp2=UF[0]+UF[1]+UF[2]+UF[3]; U=temp1/temp2;

return U; }

///////////////////////////////////摄像头图像显示到液晶板////////////////////////////// for(;;) {

if(g_SampleFlag==0xff) { g_SampleFlag=0xfe;

//disply_number(0,0,hold_min,3); // disply_number(42,0,hold_max,3); //setxy(0,0);

for(j=15;j<99;j++)

for(i=0;i<6;i++)

75

附 录

{ yd=-10;

if(g_VideoImageDate[j+yd][8*i+0]>MIDDLE[j]) p=0 ;else p=1; if(g_VideoImageDate[j+yd][8*i+1]>MIDDLE[j]) p=p+0 ;else p=p+2; if(g_VideoImageDate[j+yd][8*i+2]>MIDDLE[j]) p=p+0 ;else p=p+4; if(g_VideoImageDate[j+yd][8*i+3]>MIDDLE[j]) p=p+0 ;else p=p+8; if(g_VideoImageDate[j+yd][8*i+4]>MIDDLE[j]) p=p+0 ;else p=p+16; if(g_VideoImageDate[j+yd][8*i+5]>MIDDLE[j]) p=p+0 ;else p=p+32; if(g_VideoImageDate[j+yd][8*i+6]>MIDDLE[j]) p=p+0 ;else p=p+64; if(g_VideoImageDate[j+yd][8*i+7]>MIDDLE[j]) p=p+0 ;else p=p+128; disply_xiangsu(j,i,p); ////把像素值赋给RAM,并显示。 }

g_SampleFlag=0; } }

//////////////////////////////////摄像头图像显示到液晶板//////////////////////////////

///////////////////////////////////////////////////SPI总线写入程序///////////////////////////////////////////// void write_byte(uchar byte,uchar cd_choice)//写数据是1 写命令是0 {

unsigned char byte_cnt; sce=0; //芯片使能 if(cd_choice==1)dc=1; //选择数据 else dc=0; ////////ZGY选择命令

for(byte_cnt=0;byte_cnt<8;byte_cnt++) ///////连续输出8位 {

sclk=0; /////////ZGY/空闲时高电平,上升压传送 if(byte&(0x80>>byte_cnt))//高位先送

sdin=1; /////确定数据线发送的数据 else sdin=0;

sclk=1; ////////ZGY 时钟信号拉高,上升沿发送 }

76

长安大学硕士学位论文

sce=1; //////ZGY 片选否 }

////////////////////////////////////////////////SPI写入程序///////////////////////////////////////////// ///////////////////////////////////////////////插入电子密码锁程序//////////////////////////////////////// for(;;){

disply_listchar(0,0,\"=================\ disply_listchar(0,1,\" Please put Key \ disply_listchar(0,2,\"=================\ disply_number(30-5,4,KEY[0],5); disply_number(36-5,4,KEY[1],5); disply_number(42-5,4,KEY[2],5); disply_number(48-5,4,KEY[3],5); disply_number(54-5,4,KEY[4],5); disply_number(60-5,4,KEY[5],5);

disply_number(30-5+key*6,5,1,5); //////密码选择位指示标 //////////////从24c02提取密码///////////////////////////

Jkey[0]=setnum[9]/100;Jkey[1]=(setnum[9]%100)/10;Jkey[2]=(setnum[9]%10)/1; Jkey[3]=setnum[10]/100;Jkey[4]=(setnum[10]%100)/10;Jkey[5]=(setnum[10]%10)/1; ///////////////从24c02提取密码/////////////////////////////// if(btn_change()) {key++;if(key>5)key=0; clr_all();

disply_listchar(0,0,\"=================\ disply_listchar(0,1,\" Please put Key \ disply_listchar(0,2,\"=================\ disply_number(30-5,4,KEY[0],5); disply_number(36-5,4,KEY[1],5); disply_number(42-5,4,KEY[2],5); disply_number(48-5,4,KEY[3],5); disply_number(54-5,4,KEY[4],5);

77

附 录

disply_number(60-5,4,KEY[5],5); disply_number(30-5+key*6,4,1,5);} if(btn_sub()) {

KEY[key]--; if(KEY[key]<0){ KEY[key]=9; }disply_number(30-5+key*6,4,KEY[key],5); } if(btn_add()) {

KEY[key]++; if(KEY[key]>9){ KEY[key]=0; }disply_number(30-5+key*6,4,KEY[key],5); }

if(btn_sav()) //////判断密码是否一致

{ if(KEY[0]==Jkey[0]&&KEY[1]==Jkey[1]&&KEY[2]==Jkey[2]&&KEY[3]==Jkey[3]&&KEY[4]==Jkey[4]&&KEY[5]==Jkey[5])

{

disply_listchar(0,2,\" key is correct \ for(i=0;i<200;i++){delay(1000);} break; } else{ \

disply_listchar(0,2,\" key is uncorrect\ for(i=0;i<200;i++){delay(1000);} } } }

////////////////////////////////////////////////////插入电子密钥程序////////////////////////////////////////

cishu++;if(cishu>3){disply_listchar(0,2,\"

key

is

locked

78

长安大学硕士学位论文

攻读学位期间取得的研究成果

[1] 赵耕云,周东玉. 基于有限元的某轿车左前门外门板的强度分析[J].汽车实用技

术,2012年

79

攻读学位期间取得的研究成果

致 谢

在论文完成之际,首先要感谢我的导师刘晶郁教授,这篇论文是在她的悉心指导和热情关怀下完成的。在两年的研究生学习和生活中,恩师渊博的学识、严谨的工作作风和执着的科研探索精神使我受益匪浅。在论文选题和内容安排方面,刘老师给予了我大力支持和悉心教导;同时,导师为我创造了良好的学习、科研环境和宽松的研究氛围,使我能在一个良好的学术环境中不断地充实和提高自己。在此,谨对导师的辛勤培养和关心致以衷心的感谢,祝愿刘老师身体健康,工作顺利!

另外,在学习和科研期间得到了韩毅副教授的认真细致的指导,韩老师求实创新的工作作风、真诚宽厚的待人品德使我深受鼓舞;在论文的研究和写作中,也得到了韩毅老师的大力支持。在此向韩老师表示深深地谢意。

同时,也感谢所有同门师兄弟,在平时的生活和学习中得到了他们的很多帮助。

80

因篇幅问题不能全部显示,请点此查看更多更全内容