haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 初中教育 > 学科竞赛学科竞赛

第八届飞思卡尔智能车竞赛摄像头组浙工大银江逐梦队技术报告

发布时间:2013-11-19 13:53:10  

第八届"飞思卡尔"杯全国大学生

智能汽车竞赛

技 术 报 告

学 校:浙江工业大学

队伍名称:浙工大银江逐梦队

参赛队员:孟泽民

章志诚

徐晋鸿

带队教师:陈朋、朱威

关于技术报告和研究论文使用授权的说明

本人完全了解第八届"飞思卡尔"杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名: 孟泽民

带队教师签名: 陈朋

日 期: 2013.8.15

摘 要

关键词:MK60N512VMD100,Ov7620,DMA,PID,Labview,SD卡

I

Abstract

In this paper we will design a smart car system based on MK60N512ZVLQ10 as the micro-controller unit. We use a Ov7620 digital image camera to obtain lane image information. The MCU gets the image by its DMA module. Then convert the original image into the binary image by using dynamic threshold algorithm in order to extract black guide line for track identification. An inferred sensor is used to measure the car`s moving speed. We use PID control method to adjust the rotate speed of driving electromotor and direction of steering electromotor, to achieve the closed-loop control for the speed and direction. To increase the speed of the car and make it more reliable, a great number of the hardware and software tests are carried on and the advantages and disadvantages of the different schemes are compared by using the Labview simulation platform designed by ourselves, the SD card module and the wireless module. The results indicate that our design scheme of the smart car system is feasible.

Keywords: MK60N512VMD100,DMA,Ov7620,PID,Labview,SD card

II

目 录

摘 要 ..................................................................................................................................... I Abstract ..................................................................................................................................... II

引 言 .................................................................................................................................... 1

第一章 系统总体设计 ............................................................................................................ 2

1.1系统概述 ........................................................................................................................................... 2

1.2整车布局 ........................................................................................................................................... 2

第二章 机械系统设计及实现 ................................................................................................ 4

2.1车体机械建模 ................................................................................................................................... 4

2.2车模转向轮的定位与调整 ............................................................................................................... 5

2.3底盘高度及其调整 ........................................................................................................................... 6

2.4编码器的安装 ................................................................................................................................... 7

2.5舵机安装位置及结构调整 ............................................................................................................... 7

2.6舵机转角分析 ................................................................................................................................... 8

2.7摄像头的安装 ................................................................................................................................... 8

第三章 硬件系统设计及实现 .............................................................................................. 10

3.1硬件设计方案 ................................................................................................................................. 10

3.2电路设计方案 ................................................................................................................................. 10

3.2.1单片机最小系统板 .............................................................................................................. 10

3.2.2电源稳压电路及检测电路 .................................................................................................. 11

3.2.3图像处理电路 ...................................................................................................................... 12

3.2.4电机驱动电路 ...................................................................................................................... 13

3.2.5舵机接口电路 ...................................................................................................................... 14

3.2.6拨码开关电路 ...................................................................................................................... 14

第四章 软件系统设计及实现 .............................................................................................. 16

4.1赛道双边线提取及优化处理 ......................................................................................................... 16

III

4.1.1原始图像的特点 .................................................................................................................. 16

4.1.2普通赛道提线 ...................................................................................................................... 17

4.1.3特殊赛道提线 ...................................................................................................................... 19

4.1.4偏差量的计算 ...................................................................................................................... 21

4.1.5路径选择 .............................................................................................................................. 21

4.2 PID 控制算法介绍 ........................................................................................................................ 22

4.2.1位置式PID .......................................................................................................................... 23

4.2.2增量式PID .......................................................................................................................... 23

4.2.3各种改进型PID................................................................................................................... 24

4.2.4PID参数整定 ....................................................................................................................... 25

4.3转向舵机的PID控制算法............................................................................................................. 25

4.4驱动电机的PID控制算法............................................................................................................. 26

4.5速度决策算法 ................................................................................................................................. 26

4.6路径识别算法 ................................................................................................................................. 28

第五章 系统开发及调试 ...................................................................................................... 29

5.1开发工具 ......................................................................................................................................... 29

5.2上位机图像显示 ............................................................................................................................. 29

5.2.1Labview 上位机 ................................................................................................................... 29

5.3 SD卡模块 ....................................................................................................................................... 30

5.3.1SD卡介绍 ............................................................................................................................. 30

5.3.2SPI总线介绍 ........................................................................................................................ 31

5.3.3硬件电路实现 ...................................................................................................................... 31

第六章 模型的主要技术参数 .............................................................................................. 32

结 论 ...................................................................................................................................... 33

参 考 文 献 ............................................................................................................................ 34

附录:程序源代码 .................................................................................................................. 35

IV

引 言

引 言

“飞思卡尔”杯智能汽车竞赛是受教育部高等教育司委托,高等学校自动化专业教学指导委员会负责主办全国大学生智能车竞赛。该项比赛已列入教育部主办的全国五大竞赛之一。其最早始于韩国,在国内,全国大学生"飞思卡尔"杯智能汽车竞赛从2006年开始举办,至今得到了各级领导及各高校师生的高度评价。并且有越来越多的队伍加入其中。

大赛包括光电组、摄像头组和电磁组,为保持创新性,在本届比赛中各组别的规则有所改变,其中摄像头组继第七届的寻双线外,改用B型车模,前轮驱动,难度大大提升。

本技术报告主要包括小车的机械设计、硬件系统设计、软件算法设计等,详尽地阐述了我们的设计方案,具体表现在机械结构的多种尝试,硬件电路的创新设计以及人工智能控制算法的应用。

在一年的备赛过程中,我们参看了大量控制方面的书籍,如:《先进PID控制及其MATLAB仿真》、《新型PID控制及其应用》等,智能车制作放面的书籍,如:《学做智能车:挑战“飞思卡尔”杯》、《“飞思卡尔”杯智能汽车竞赛设计与实践-基于S12XS和Kinetis K10》等,及大量K60芯片方面的资料与书籍。不仅如此,在这一年漫长的做车过程培养了我们电路设计、软件编程、系统调试等方面的能力,锻炼了我们心理素质、实践动手的能力、团队合作能力,对今后的学习工作都有着重大的实际意义。

1

第一章 系统总体设计

第一章 系统总体设计

1.1系统概述

全国大学生智能汽车竞赛中,小车的基本结构大致可分为电源模块、传感器模块和控制模块。本智能车系统的总体结构为:Ov7620数字摄像头拍摄赛道图像,输出PCLK、FOOD、HREF信号和8路数字图像信号,输入到MK60N512ZVLQ10微控制器,由K60的DMA模块进行图像采集,通过动态阈值算法对图像二值化,进行进一步处理获得主要的赛道信息,为舵机和电机的控制提供决策;转向舵机采用PD控制;驱动电机采用 PID控制,通过PWM控制经优化的MOS管驱动电路来调整电机的功率;通过编码器来检测车速,并采用MK60N512ZVLQ10的输入捕捉功能进行脉冲计算获得转速,并对应到相应的速度,与速度PID形成闭环;而车速的目标值由优化后的决策层给出,具体的控制策略将在下文中详细介绍。

根据竞赛的规则和智能车系统的基本要求,我们设计了系统结构图,如图1-1所示。在满足比赛要求和小车正常运行的情况下,力求系统简单高效,因而在设计过程中尽量简化硬件结构,减少因硬件而出现的问题。

图1-1 系统结构图

1.2整车布局

车体整体布局的基本要求可简单归纳为一下几点:

(1)车模底盘降低,简化主板使其贴近底盘,以降低重心; (2)改变电池位置,避免重心集中在车体前端;

(3)电机与车身连接尽量保持原状,不采用硬固定,保持车体灵活;

2

第一章 系统总体设计

(4)注意编码器和舵机摆放位置,要方便控制又保持重心低;

(5)用轻便坚固的碳卷管作为摄像头杆的材料;

(4)注意摄像头固定位置,保证该区域振动小,重心分布要和盲区与前瞻匹配。 经过充分考虑与实际方案比较,我们车的整体布局如图1-2所示

图1-2 整车布局图

3

第二章 机械系统设计及实现

第二章 机械系统设计及实现

根据组委会的相关规定,今年摄像头组比赛车模更换为B型车模,而且将驱动轮作为前轮。针对这一新的改动,对B型车本身就陌生的我们在机械上花了很长时间。在组建整个小车系统之前,我们就对该车模进行了详细的系统分析。B型车模相对于去年的A型车而言:轮子大、底盘高、电机响应迟钝,虽然在去年的基础上加了防滑胶套,但整个模型的摩擦力不及A型车模,因此在规则允许范围内尽量改造车模,提高车模整体性能是很必要的。本章将主要介绍我们对B型车模的机械结构认识及调整方案。

2.1车体机械建模

此次竞赛的赛车车模选用由北京科宇通博科技有限公式提供的B型车模。车模示意图如图2-1所示。

图2-1 B型车模示意图

车模具体参数:长28.75cm,宽16.6cm,高7.0cm,轴距20cm,前轮距(主动轮)14cm,后轮距13.8cm,轮胎直径6.4cm,前轮宽2.7cm,后轮宽3.7cm,底盘采用2.5mm厚的黑色玻纤板, 具有较强的弹性和刚性。前轮调整方式简单,全车滚珠轴承,主减传动比36/105。前后轮轴高度可调(离地间隙0.75cm/1.65cm),双滚珠差速。电机采用DC7.2V RS540马达,转速20000r/min,内装散热风扇。舵机采用S-D5数码伺服器,工作电压4.5-5.5V,带堵转保护电路,力矩5.0kg,动作速度≤0.14±0.02sec/60。 4

第二章 机械系统设计及实现

2.2车模转向轮的定位与调整

本届比赛要求B型车模通过四条轮胎与地面接触,主动轮作为前轮,转向轮作为后轮。两个前轮同轴受到限位,无法调整,与模型车的前进方向保持平行,因此要改变模型车与地面的接触方式,调试出利于模型车转向、直线的四轮定位,只能通过调整转向轮来实现。为满足参赛队员对各种机械结构的尝试,组委会同意可以将转向轮的左右轮进行位置调换。因此在对转向轮的定位与调整过程中,不仅需要理论支持,同时需要大量的测试来验证方案的可行性。

理论上,B型模型车可以调整的转向轮参数有主销后倾角、主销内倾角、车轮外倾角、车轮束角四个。

主销后倾角:能在汽车车轮偏转后产生一回正力矩,纠正车轮的偏转。[1]主销后倾示意图如图2-2(a)所示。经分析,通常后倾角值应设定在1。~3。。B型车无法直接调节,只能通过增加垫片实现。

图2-2(a)主销后倾示意图 图2-2(b)主销内倾示意图

图2-2(c)车轮外倾示意图 图2-2(d)车轮束角

主销内倾角:有使车轮自动回正的作用,有利于出弯回正,其示意图如图2-2(b)所示,内倾角不宜过大,过大会增加轮胎与赛道的摩擦阻力,降低车速,降低防滑胶套寿命。

5

第二章 机械系统设计及实现

车轮外倾角:能减小因机械造成的滑动摩擦,减小转向阻力,减小转向轮机械结构负载,保持转珠灵活。车轮外倾示意图如图2-2(c)所示。

车轮束角:分为前束和后束。前束能使车轮向内侧滑移,增大车轮摩擦力;当转向轮在后面后,前束的实质其实是之前的后束,因为这样可以实现过弯时,外轮打角会比内轮小,四个轮子的转弯半径将在一个圆心上,使转弯的状态达到最佳。车轮束角示意图如图2-2(d)。关于后轮转向束角的示意图如图2-3所示。当然最佳束角大小应以实际测试为准。

图2-3 后轮转向束角示意图

根据上述理论和实际的测试,我们将车模的转向轮最终调整为如下图2-4所示。

图 2-4 最终的转向轮机械

2.3底盘高度及其调整

在保证顺利通过坡道的前提下,底盘离地间隙应尽可能小,从整体上降低模型车的重心,以提高行驶稳定性并减小侧滑。因为本次B型车是前轮驱动,B

型车的电机可达

6

第二章 机械系统设计及实现

到的转速比较高,所以在车模高速跑出赛道时,连接车身和电机的轴很容易被撞断,经组委会讨论,同意在底盘固定PCB板材质的板材固定车身和电机,这样整个车身变成了硬固定。经实际测试,这样会降低车的灵动性,所以再能对车模加保护的基础上,车底盘应尽量保持原先的固定方式。

2.4编码器的安装

为了获得更为精确的电机转速返回值,我们在车模上安装的是欧姆龙500线编码器。精确度上去的代价是编码器的质量和体积都较大,给安装带来了一定不便。最终综合考虑了读数精准和重心分布两大因素,用自制固定板和专业的齿轮进行了安装配合,尽量使得传动齿轮轴保持平行,传动部分轻松、流畅,不存在过大噪音和丢数情况。如图2-5所示。

图2-5 编码器安装

2.5舵机安装位置及结构调整

原装车模的舵机安装在车身中间,连接着车模的避震,但考虑到需要通过改变电池的位置来获得比较满意的中心分布,同时为了主板的安装以及车模转向性能,我们对舵机安装结构进行了较大的调整。比赛车模的转向是通过舵机带动左右横拉杆实现。舵机的转动速度和功率是一定,要想加快转向机构的响应速度,唯一的办法就是优化舵机的安装位置及其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。

最终,我们参考了一套舵机的安装方式,保持舵机直立的方案,并改变其位置与车

尾,综合考虑了速度与力矩的关系,再根据模型车底盘的具体结构,简化了安装方式, 7

第二章 机械系统设计及实现

经多次测试,这样的安装方式能实现预期目标。

具体安装方式如图2-6所示。

图2-6 舵机安装

2.6舵机转角分析

车模的转向运动主要是靠舵机带动转向轮来实现的,因此,关于舵机和转向轮转向关系的分析就显得尤为重要。

B车模采用S-D5数字舵机,经分析,其响应频率可以使用10ms以上的控制周期,在摄像头因采图而需较长的控制周期来讲是可以胜任的。但是舵机的打角和转向轮的打角并不是简单得线性关系。舵机转角变化范围即使较小,转弯半径的变化也会很大,因而对多级的控制显得尤为很重要。转向轮打角越小时,随着打角变化,转弯半径变化越明显,即小转角对半径的变化会更加明显,对直道和大半径的弯道有较大的影响,因而从前桥到舵机连片的机械固定需牢靠,尽量减少虚位。

实际上舵机转角与转向轮转角呈的关系是与舵机臂的长度有关。在某一特定高度下是可以实现线性变化的,当然这对机械的要求非常高,在多次尝试后,我们决定在让两者关系尽量线性的基础上,加一定的二次曲线补偿,这样我们就可以在在思路上为通过舵机转角改变从而获得所要前轮转角提供便利。

当然改变之前转向轮的四个参数,也能获得较为满意的舵机打角和转向轮的转弯半径关系,四个参数的调整在前文中已经提到,这里不再赘述。

2.7摄像头的安装

为了降低整车重心,我们摒弃了以往通过铝合金夹持组件来固定摄像头,采用我们 8

第二章 机械系统设计及实现

自行设计的PCB材质的摄像头固定板。采用轻质且刚度大的8mm碳卷管作为安装摄像头的主桅。底部采用定制的铝合金固定件固定碳卷管。这样可以保证摄像头固定的牢固和平稳性,获得最大的刚度质量比,整套装置具有很高的定位精度和刚度,摄像头不易松动,避免了因摄像头松动而反复校准的过程,为顺利完成比赛提供保障力。摄像头的安装如图2-7所示。

图2-7 摄像头安装

9

第三章 硬件系统设计及实现

第三章 硬件系统设计及实现

3.1硬件设计方案

从最初进行硬件电路设计时我们就既定了系统的设计目标:可靠、高效、简洁,在整个系统设计过程中严格按照规范进行。

可靠性是系统设计的第一要求,我们对电路设计的所有环节都进行了电磁兼容性设计,做好各部分的接地、屏蔽、滤波等工作,将高速数字电路与模拟电路分开,使本系统工作的可靠性达到了设计要求。

简洁是指在满足了可靠、高效的要求后,为了尽量减轻整车重量,降低模型车的重心位置,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻,易于安装。我们在对电路进行了详细分析后,对电路进行了简化,合理设计元件排列、电路走线,使本系统硬件电路部分轻量化指标都达到了设计要求。

3.2电路设计方案

智能车控制系统电路由两部分组成:以MK60N512ZVLQ10为核心的包括电源和驱动再内的主板和外围模块。考虑到MK60N512ZVLQ10的最小系统板比较大,会占据较大的主板空间,在电池及其他结构调整时主板的空间有限,所以在设计主板时,直接将MCU设计在主板上,直接形成信号采集、信号处理、电机控制、舵机控制单元。同时为了整量车子的简洁,我们将电机驱动电路也设计到了主板上,为了减小电机驱动电路带来的电磁干扰,我们把控制单元部分和电机驱动部分分开来,排布在主板的两端。驱动部分做了隔离,同时为避免元器件过于密集而引起的信号与地串扰的问题,我们在设计PCB时,将板子设计为四层板,这样主板整体的信号比原先的二层板好很多。

主板上集成了本系统的主要电路,它包括如下部件:MCU系统,电源稳压电路、摄像头接口、舵机接口、电机驱动模块、编码器接口、拨码开关、指示灯、SD卡模块接口等。

3.2.1单片机最小系统板

MK60N512ZVLQ10是K60系列MCU。Kinetis系列微控制器是Cortex-M4系列的内核芯片。K60内存空间可扩展,从32 KB闪存/ 8 KB RAM 到 1 MB 闪存 / 128 KB RAM,可选的16 KB 缓存用于优化总线带宽和闪存执行性能。

10

第三章 硬件系统设计及实现

图3-1 最小系统原理图

最小系统使用K60144 PIN封装,为减少电路板空间,板上仅将本系统所用到的引脚引出,包括 PWM 接口,外部中断接口,若干普通IO接口。其他部分还包括电源滤波电路、时钟电路、复位电路、串行通讯接口、J-Link接口、AD接口和SDHC接口。

用到的接口如下:

电机PWM波输出:PTA10、PTA11

舵机PWM波输出:PTA8

编码器两相信号输入:PTA9、PTA19

PCLK信号输入:PTC19

FOOD信号输入:PTA28

HREF信号输入:PTA29

8路数字信号输入:PTD0~PTD7

拨码开关输入信号;PTB0~PTB7

3.2.2电源稳压电路及检测电路

本系统中电源稳压电路分别需要有+5V,+3.3V,+5.5V,+12V供电。+3.3V给单片机、SD卡模块、拨码开关、液晶等供电;+5V为摄像头、编码器模块、无线模块供电;+5.5V为S-D5数字舵机供电;+12V和+5V共同给电机驱动电路中IR2104供电;而电机则直接由电池供电。

由于整个系统中+5V电路功耗较小,为了降低电源纹波,我们考虑使用线性稳压电路。另外,前轮驱动电机工作时,电池电压压降较大,为提高系统工作稳定性,必须使用低压降电源稳压芯片,选用了LM2940。LM2940

是微功耗低压差线性电源芯片,具 11

第三章 硬件系统设计及实现

有完善的保护电路,包括过流,过压,电压反接保护。使用这个芯片只需要极少的外围元件就能构成高效稳压电路。另外为保证在电机启动的瞬间,电池的巨大压降影响摄像头的正常工作,为摄像头供电的5V稳压先经过了为IR2104供电的12V升压。

为配合摄像头5V的正常供电,12V升压需要有较大的容量,我们考虑使用开关稳压电路。在MC34063、LM2577和LM2587几个方案比较中,我们选择了输出电流最大,开关频率最高的LM2587。实验证明LM2587能胜任整个系统的需要。

图3-2 LM2940 5V稳压原理图

图3-3 LM2587 12V稳压原理图

TLV1117-3.3是超低噪,高电源电压抑制比,高速射频,线性调节的低压稳压芯片。是TI公司自行设计的一款类似LM1117-3.3的LDO稳压芯片。其稳压性能优越,因此我们选用TLV1117-3.3给单片机供电。为排除压差使得供电不正常,我们采用电池电压直接为其供电。

图3-4 TLV1117-3.3稳压原理图

3.2.3图像处理电路

我们的智能模型车自动控制系统中使用Ov7620

数字摄像头采集赛道信息。摄像头 12

第三章 硬件系统设计及实现

视频信号中除了包含图像信号之外,还包括了PCLK信号、行同步信号、行消隐信号、场同步信号、场消隐信号以及槽脉冲信号、前均衡脉冲、后均衡脉冲等。PCLK信号作为DMA的触发信号,但因为其频率过高,会导致采图过快,使得图像数组不得不非常大。实际应用中,太大的图像数组不但会导致信息的浪费,还会延长整个图像的处理时间,得不偿失。因此,若要合理利用摄像头采集的信息,我们需要对PCLK信号进行分频。这里我们采用74AC161超高频计数器,对PCLK信号进行分频。74AC161供电范围可以从-0.5V~6V,可以采用本系统中的电源供电;在正常供电情况下,最高输入时钟可以到达103M,对于对PCLK信号分频完全够用。当然为与MCU系统阻抗匹配,分频信号输入最好加33欧姆电阻进行阻抗匹配。PCLK分频电路如图3-5所示。

图3-5 PCLK分频电路

由于数字摄像头直接输出8路数字信号,在信号传输和处理上相对于模拟摄像头有优势也存在劣势。数字摄像头不需要进行场行分离,无需使用外部AD对模拟信号数字化;但是直接从数字摄像头输出的信号,在传输的过程中会有串扰。为保证最佳的接收效果,我们在选用引脚和设计主板时,采用统一模块的引脚,布线时尽量保证等长,摄像头和主板的连接线尽量短,等长。同时数字摄像头很少采用硬件二值化,所以在处理上我们只能采用动态阈值进行二值化。

3.2.4电机驱动电路

电机驱动板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支N沟道功率MOSFET管组成,额定工作电流可以轻易达到100A以上,大大提高了电动机的工作转矩和转速。该驱动器主要由以下部分组成: PWM号输入接口、IR2104控制电路、电源电路、功率 MOSFET 管栅极驱动电路、桥式功率驱动电路等。其中IR2104自带死区控制,电源电路采用上述的5V稳压、12V升压和电源电压,MOSFET 管的选型也比较重要。

13

第三章 硬件系统设计及实现

图3-6 电机驱动模块原理图

3.2.5舵机接口电路

舵机接口电路包括,供电电路和PWM号输入接口。

其中为达到S-D5数字舵机的最佳性能,我们采用S-D5的上限电压5.5V为其供电,

5.5V电压采用TLV1117-ADJ稳压,其性能与TLV1117-3.3相似,这里不再赘述。

图3-7 舵机接口与供电原理图

3.2.6拨码开关电路

主板上还包括拨码开关电路,和一些外设的接口,如图3-8所示。

14

第三章 硬件系统设计及实现

图3-8 拨码开关、外设接口原理图

15

第四章 软件系统设计及实现

第四章 软件系统设计及实现

高效的软件程序是智能车高速平稳自动寻线的基础。我们设计的智能车系统采用CMOS摄像头进行DMA图像采集,动态二值化,边线提取,赛道识别。在智能车的转向和速度控制方面,我们使用了鲁棒性很好的经典PID控制算法,配合使用理论计算和实际参数补偿的办法,使智能车能够稳定快速寻线。

4.1赛道双边线提取及优化处理

4.1.1原始图像的特点

在单片机采集图像信号后需要对其进行处理以提取主要的赛道信息,同时,由于十字、起点线的存在,光线、赛道远处图像不清楚的干扰,图像效果会大打折扣。因此,在软件上必须排除干扰因素,对赛道进行有效识别,并提供尽可能多的赛道信息供决策使用。

在图像信号处理中我们提取的赛道信息主要包括:赛道两侧边沿点位置,赛道边沿点附近的原始像素值,赛道类型。

由于摄像头自身的特性,图像会产生梯形式变形,以及筒形失真尤其在ov7620的上下左右各个角落处桶形失真和梯形失真叠加,导致图像畸变严重,因此在数据采集时我们只采集半幅图像,也就是中心上下处的图像,这样几乎不存在筒形失真。

在赛道边线提取上我们将赛道分为两大类,一类是普通的弯道,直道,上下坡等,还有一类就是十字和虚线小S。

摄像头采集到几种典型赛道图像如图4-1~图4-3所示。

图4-1 连续弯图像

16

第四章 软件系统设计及实现

图4-2 弯道原始图像

图4-3 十字交叉原始图像

4.1.2普通赛道提线

边沿提取算法的基本思想如下:

(1) 逐行扫描最近处的原始图像,根据设定的阈值提取黑白跳变点;

(2) 利用赛道的连续性,根据上一行黑点的位置来确定本行的边沿点;

(3) 在弯道的时候赛道有回拐的情况,所以提取本行边沿之前还要向前搜索回拐的边沿点;

(4) 求边沿点时,因为近处的图像稳定,远处图像不稳定,所以采用由近及远的办法;

(5) 进出十字的时候,有可能错误的提线,因此要将直角以后的线滤除;

边沿提取算法的程序流程如图4-4所示。

17

第四章 软件系统设计及实现

图4-4 算法流程图

处理后得到的黑线中心如图4-5和图4-6所示。

图4-5 连续弯处理后图像

18

第四章 软件系统设计及实现

图4-6 弯道处理后图像

4.1.3特殊赛道提线

特殊赛道提取算法的基本思想如下:

(1)特殊赛道只是小S或十字,因此在能延伸到较远处。

(2)特殊赛道一般弯曲程度较小,每行的宽度近似等于直道上标定出来的宽度。

(3)由于图像失真以及其他影响,导致单独提取小S边线时会很困难。

(4)在入小S以及出小S时由于普通边线提取程序能提到较远的线导致赛道判断出错,无法进行小S的正常提线,因此要虑线以及锁存状态。

原始边沿提取算法的程序流程如图4-7所示。

19

第四章 软件系统设计及实现

图4-7 原始边沿提取算法流程图

20

第四章 软件系统设计及实现

十字校正和小S校正后的效果如图4-8和4-9所示。

图4-8 十字校正后的效果

图4-9小S校正后的效果

4.1.4偏差量的计算

使用前方一定距离的偏差量来控制小车具有较强的鲁棒性。其思想很简单。

有的队伍加上了斜率,我们测试发现远处斜率较为不稳定,最后还是放弃了斜率算法,使用较为稳定的偏差算法。

在获得偏差前要先标定赛道边沿,我们将车放在直道上,标定出标准的左右边线。之后通过取到的左线和左标准边线作差,取到的右边线和右标准线作差得出前方一定距离处的偏差量,用作后期控制等算法。

在选用多少距离范围的数据用作偏差量也很重要。在直道上由于速度较快,要选取远处的偏差,防止来不及转向,当在弯道内,由于视野有限,应该尽量使用能采集到的最远处的数据段,这样能在连续弯的切换上较为流畅,在回环弯道上较为稳定。

4.1.5路径选择

根据往届比赛的经验,赛车能否以最短的时间完成比赛,与赛车的速度和路径都有着密切的关系,因此,如何使赛车以一个最合理、最高效的路径完成比赛是提高平均速度的关键。

对于赛车路径的优化,不能仅在匀速下调节转弯系数,应该将变速考虑进去。

我们调节路径的方法是在慢速匀速情况下调出一套较为切弯的PD

系数,慢慢的提 21

第四章 软件系统设计及实现

高匀速的速度。由于在弯道内前瞻量有限,在提速的过程中不可避免的会出现反应迟钝,此时就停止调节转向参数。此时获得了这套转向参数的可用速度范围,在此基础上添加变速程序,以起到稳定并且高速的效果。

4.2 PID 控制算法介绍

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。

PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例(P)、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称PID控制器,原理框图如图4-10所示。

图4-10 PID控制器原理框图

在计算机控制系统中,使用的是数字PID控制器,控制规律为:

e(k)?r(k)?c(k) (1)

TDTku(k)?KP{e(k)?e(j)?e(k)?e(k?1)]} (2) ?TIj?0T

式中

k--采样序号,k = 0,1,2?; r(k)--第k次给定值;

c(k)--第k次实际输出值; u(k)-- 第k次输出控制量;

e(k)-- 第k次偏差; e(k-1)-- 第k-1次偏差;

KP--比例系数; TI--积分时间常数;

TD--微分时间常数; T--采样周期。

简单说来,PID控制器各校正环节的作用如下:

22

第四章 软件系统设计及实现

比例环节:及时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差。

积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强。

微分环节:能反映偏差信号的变化趋势(变化速率),并能在该偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。

数字PID控制算法通常分为位置式PID控制算法和增量式PID控制算法。

4.2.1位置式PID

位置式PID中,由于计算机输出的u (k) 直接去控制执行机构(如阀门),u(k)的值和执行机构的位置(如阀门开度)是一一对应的,所以通常称公式(2)为位置式PID控制算法。

位置式PID控制算法的缺点是:由于全量输出,所以每次输出均与过去的状态有关,计算时要对过去e(k)进行累加,计算机工作量大;而且因为计算机输出的u(k)对应的是执行机构的实际位置,如计算机出现故障,u(k)的大幅度变化,会引起执行机构位置的大幅度变化,这种情况往往是生产实践中不允许的,在某些场合,还可能造成严重的生产事故。因而产生了增量式PID 控制的控制算法,所谓增量式PID 是指数字控制器的输出只是控制量的增量△u(k)。

4.2.2增量式PID

当执行机构需要的是控制量的增量(例如:驱动步进电机)时,可由公式(2)推导出提供增量的PID控制算式。由公式(2)可以推出公式(3),公式(2)减去公式(3)可得公式(4)。

Tk?1TDu(k?1)?KP{e(k?1)?e(j)?e(k?1)?e(k?2)]} (3) ?TIj?0T

TDT?u(k)?KP{[e(k)?e(k?1)]?e(k)?[e(k)?2e(k?1)?e(k?2)]}TIT

?KP?e(k)?KIe(k)?KD[?e(k)??e(k?1)]} (4) 式中?e(k)?e(k)?e(k?1) ;KI?KPTTD ;KD?KP TIT

公式(4)称为增量式PID控制算法,可以看出由于一般计算机控制系统采用恒定的采样周期T,一旦确定了KP、TI、TD,只要使用前后三次测量值的偏差,即可由公式(4)求出控制增量。

23

第四章 软件系统设计及实现

增量式PID具有以下优点:

(1) 由于计算机输出增量,所以误动作时影响小,必要时可用逻辑判断的方法关掉。

(2) 手动/自动切换时冲击小,便于实现无扰动切换。此外,当计算机发生故障时,由于输出通道或执行装置具有信号的锁存作用,故能保持原值。

(3) 算式中不需要累加。控制增量△u(k)的确定仅与最近k次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。

但增量式PID也有其不足之处:积分截断效应大,有静态误差;溢出的影响大。使用时,常选择带死区、积分分离等改进PID控制算法。

4.2.3各种改进型PID

(1) 不完全微分PID

将微分环节引入智能车的方向和速度控制,明显地改善了系统的动态性能,但对于误差干扰突变也特别敏感,对系统的稳定性有一定的不良影响。为了克服上述缺点,

将一阶惯性环节直接加到微分环节上,可得到系统的传递函数为:

U(s)?(Kp?KiKd?s?)?Up(s)?Ui(s)?Ud(s) (5) s1?Tf?s

将(5)式的微分项推导并整理,得到方程如下:

(6)

式中,由系统的时间常数和一阶惯性环节时间常数决定的一个常数。为了编程方便,可以将公式(6)写成如下形式:

ud(k)?Kd(1??)e(k)??ud(k?1)?Kd(1??)e(k?1)

?Kd(1??)e(k)?H(k?1) (7)

式中,H(k?1)??ud(k?1)?Kd(1??)e(k?1) 。

分析公式(7)可知,引入不完全微分以后,微分输出在第一个采样周期内被减少了,此后又按照一定比例衰减。实验表明,不完全微分有效克服了智能车的偏差干扰给速度控制带来的不良影响,具有较好的控制效果。

(2) 微分先行PID

由于智能车在跑道上行驶时,经常会遇到转弯的情况,所以智能车的速度设定值和方向设定值都会发生频繁的变化,从而造成系统的振荡。为了解决设定值的频繁变化给 24

第四章 软件系统设计及实现

系统带来的不良影响,

?u(k)?Kp[e(k?)

e?(k?K1i)]?eKd(k)?[c(k?)2?c(k? 1?Kd[c(k)?c(k?1)] (8)

(3) 前馈控制的应用

由于智能车的跑道宽度有限制,所以在经过急转弯的时候,如果速度和方向控制不及时,智能车就可能冲出跑道。由于前馈控制是开环控制,所以前馈控制的响应速度很快。将前馈控制引入到智能车的控制中,能够提高舵机和伺服电机的反应速度,改善智能车系统的动态性能。

4.2.4PID参数整定

运用PID控制的关键是调整KP、KI、KD三个参数,即参数整定。PID参数的整定方法有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。由于智能车系统是机电高耦合的分布式系统,并且要考虑赛道的具体环境,要建立精确的智能车运动控制数学模型有一定难度,而且我们对车身机械结构经常进行修正,模型参数变化较为频繁,理论计算整定法可操作性不强,最终我们采用了工程整定方法。此外,我们先后实验了几种动态改变PID参数的控制方法。

4.3转向舵机的PID控制算法

对于舵机的闭环控制,我们采用了位置式PID控制算法,根据往届的技术资料和实际测试,将每场图像的黑线中心加权平均值与舵机PID参考角度值构成一次线性关系。

在较低速(2m/s以下)试验时,在偏离黑线很少的某个范围,将Kp直接置零,在偏离黑线较少的某个范围,将Kp值减小为原来的一半,在偏离较大的其他情况,则保持Kp原来的大小。取得的实际效果在弯道较多、直道较短的赛道上,车子转弯流畅,直道也能基本保持直线加速,车身左右抖动较小。

在提高车速至高速(2.5m/s以上)时,我们发现车身在直道上特别是长直道上时,车 25

第四章 软件系统设计及实现

身左右震荡比较严重,究其原因,硬件上,我们认为首先是轮轴本身的松动并且转向机构左右转向性能可能存在不对称性,设计有待改进,软件上,则是自身编写的PID舵机控制还不够精细,动态适应能力不够。在从弯道到直道的过程中,由于小车寻赛道本质上是一个随动系统,积分项在弯道累积的偏差错误地加在直道的跟踪上,造成在进入直道时转向不够准确,跑直道时虽然能跟踪黑线,但是转向调整往往超调,导致车身在直道上左右震荡,这种震荡严重影响了车的整体速度。此外,我们对S弯的控制也过于简单,没有特别的处理,导致车在跑S弯的时候,几乎完全沿弯走,没有明显的直冲S弯的效果,原因是在前瞻有限的情况下,在采集的图像中S弯入弯和普通弯道是一样的,导致小车开始转向,由于中间一直检测到弯道,小车会沿S弯道左右震荡,同时相应会减速。对此我们采用的策略是根据远处曲线的变化率对Kp进行修正,使得路径得到优化。

4.4驱动电机的PID控制算法

对于速度控制,我们采用了增量式PID控制算法,基本思想是直道加速,弯道减速。经过反复调试,将每场图像得到的黑线位置与速度PID参考速度值构成二次曲线关系。在实际测试中,我们发现小车直道和弯道相互过渡时加减速比较灵敏,与舵机转向控制配合得较好。

4.5速度决策算法

通过整定系数使小车速度快速收敛,从而达到我们所设定的期望速度,其最终目的是为了更好地进行决策。对于速度决策,我们要解决两个问题:

(1)提前预判加速度点和减速点;

(2)在弯道中寻找直道。

考虑到B车模加减速的滞后性,在决策层上做到提前的预判以及和舵机控制的高耦合度就显得尤为重要了。因此,我们先后尝试了两套不同的速度决策算法。

一、启发于汽车驾驶经验的速度决策算法

首先,我们让小车放在直道上,对小车的车身进行了标定,如图4-11所示。

26

第四章 软件系统设计及实现

图4-11 车身标定线

我们假设车身标定线内,为汽车驾驶者的视野范围,对视野范围内的赛道信息进行积分,所得到的积分值越大,则速度决策量越大。

后来,我们发现用整幅图的积分量会导致速度决策滞后,并且用一个固定的视野范围未免显得过于死板,因此我们对该算法进行了较大的改进。

由于图像中近端20行左右的数据集中在车身30CM到40CM米左右,因此,该段数据的权重过大会导致决策的滞后。最终,我们采用了对图像进行校正之后,对图像35行到最远处的数据进行积分,并且对每一行的积分值进行了归一化处理的方法。图像校正的目的在于还原了远处数据的真实权重。当然仅仅做出如此改动还是不够的,我们采用了动态积分区域的方法,即积分区域的中心即为本幅图像的黑线位置,这样做的好处在于,增加了速度与转角之间的耦合度,使速度决策更为提前。

最终,我们发现这套算法基本上可以满足我们的需求,但是依然存在耦合度不足的缺陷,并且算法较为复杂,运算量大。于是,我们采用了第二套速度决策算法。

图4-12 动态积分区域(a)

图4-12 动态积分区域(b)

27

第四章 软件系统设计及实现

二、以速度与转角耦合度为出发点的速度决策算法

经过浙江赛区的比赛之后,我们发现之前的速度决策并没有顾及到大半径的弧内的加速,而只是简单地在原先的速度决策量的基础上根据左右线终止行进行了二段变速,但是随之带来的副作用就是在连续弯内的过度加速,导致小车的不稳定,于是我们开始寻找一个更好的决策量。

最终,我们采用了黑线位置这个量作为决策函数的输入量。因为它既简单又稳定,并且是唯一一个和转角控制耦合度最高的决策变量。然而,仅仅只用黑线位置作为决策输入量也是有其局限性的,一方面是车在从弯道入直道时加速和从直道入弯道时减速达不到最好的控制效果,弯道入直道加速不够快速,直道入弯道减速的时机不够及时。因此我们做了进一步的改进,根据入弯时远端数据的线性度动态改变二次曲线中最高点(直道的最高速度)和最低点(弯道的最低速度)的大小,结果表明,控制效果更好。另一方面是没有考虑到实际比赛中长直道急速冲刺的情况,赛前在程序中人为设定直线速度不够灵活不够合理,所以我们在程序中根据赛道状态动态提高了直线速度,使车能够在长直道上充分发挥潜能。

4.6路径识别算法

路径识别算法的目的是为了区分不同的路况,使得针对不同的赛道可以采取不同的参数以及决策量。

对于路径识别我们先后采取了两种算法:

一、连接左右线的起始终止点,计算曲线与连接线之间包围的面积。

二、计算曲线上相邻点之间的累计差值。

通过以上计算方法得出路径识别的输入量,然后根据实际测得的赛道情况来区分不同的赛道状态。我们一开始对赛道进行了精确的区别,分为:直道,入弯,弯道,出弯,坡道,十字,虚线等。然而在校赛中发现一方面由于路径识别分的过于精确,一方面控制层过于依赖路径识别,从而使小车的鲁棒性变差。

因此,我们最终对赛道进行了简单的区分并且削弱了控制层与路径识别的联系。

28

第五章 系统开发及调试

第五章 系统开发及调试

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.1Labview 上位机

为了观察摄像头采集图像的直观效果,采用了Labview作为辅助开发调试工具。 我们设计的智能车系统采用CMOS摄像头采集赛道信息,分析处理之后用来编写黑线识别及控制算法。虽然直接将摄像头通过视频接口连接到电视可观察到摄像头所采的图像,但对于图像分析不够方便,且无法实时精确地反馈出一些特定信息。我们在Labview环境下开发了一套基于PC机平台的图像显示与处理程序,可完成赛道显示及相关参数的实时反馈,运行界面如图5-1所示。

图 5-1 软件主界面

29

第五章 系统开发及调试

每次模型车跑完全程之后,通过该上位机程序可得到运动过程中的每一场图像及相关数据及曲线,并可使用原始数据进行相关算法的模拟以及校正效果的显示(上位机主界面见图5-2),并且可以通过波形图观察数据的变化趋势,还可以任意选择图像显示的边线已经标定线数据的颜色,并带有自动播放的功能。

图5-2 SD卡记录的起点图像

图5-3 SD卡记录的弯道图像

图5-4 SD卡记录的弯道图像

5.3 SD卡模块

5.3.1SD卡介绍

SD卡( Secure Digital Memory Card )是一种基于半导体快闪存的新一代记忆设备。由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,其大小犹如一张 30

第五章 系统开发及调试

邮票,重量只有2克,却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD卡的数据存储管理可以类似于硬盘的磁盘管理系统,以FAT格式来存储数据。SD卡的接口支持SD模式和SPI模式,主机系统可以选择其中任一模式。SPI模式允许简单通用的SPI通道接口,这种模式相对于SD模式的不足之处是降低了速度。但SD模式可以支持高速读写,优于SPI模式很多,由于飞思卡尔系列单片机拥有SDHC模块支持SD卡的SD模式,所以我们使用了SD卡的SDHC模式。

5.3.2SPI总线介绍

SDHC模块支持多种类型的卡,包括SD卡、MMC卡和CE-ATA等。需要注意的是,K60的SDHC只支持SD卡的SD模式总线通信,且具有以下特征:

(1) 符合SDHC主机控制器标准规范版本2.0,兼容MMC系统规格4.2/4.3版本、SD存储卡规范2.0版本、SDIO卡规格2.0版本和CE-ATA规范1.0版本。支持CE-ATA、SD、miniSD、SDIO、miniSDIO、SD Combo、MMC、MMC+和MMC RS卡。

(2) 支持的总线频率最高可达52MHz。支持1位/4位SD和SDIO模式,1位/4位/8位MMC模式,1位/4位/8位CE-ATA设备;使用4路数据通道,可使SD/SDIO数据传输速度达到200Mbps;在SDR模式下使用8数据通道,可使MMC卡达到416Mbps的数据传输速度。

(3) 支持单块、多块读写,单块的范围为1~4096字节。

(4) 支持用于写操作的写保护切换。

(5) 支持内部和外部DMA等等。

5.3.3硬件电路实现

SD模块的硬件电路采用江苏大学王宜怀老师在介绍K60 SDHC模块时的电路,如图5-5所示。

图 5-5 SD模块硬件电路

31

第六章 模型的主要技术参数

第六章 模型的主要技术参数

32

总 结

结 论

自从参与"飞思卡尔"杯智能汽车竞赛以来,我们小组成员从查找资料、设计机构、组装车模、编写程序一步一步地进行,最后终于完成了最初目标,定下了现在这个设计方案。

在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械、电路以及最重要的控制算法的创新思想。在机械结构方面,我们尝试了不同的舵机转向系统,前轮束角和主销倾角的调整以及在其他细节方面的优化。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动等模块分别设计,经过不断实验,最后决定了我们最终的电路图。在程序方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用稳定的程序。在这套算法中,我们结合赛道信息调整车速,做到直道加速、弯道减速,保证在最短时间内跑完全程。

在这一年多的备战过程中,场地和经费方面都得到了学校和学院的大力支持,在此特别感谢一直支持和关注智能车比赛的学校和学院领导以及各位指导老师,同时也感谢比赛组委会能组织这样一项有意义的比赛。

33

参考文献

参 考 文 献

[1] 学做智能车: 挑战 "飞思卡尔" 杯[M]. 北京航空航天大学出版社, 2007.

[2] 王宜怀,吴瑾,蒋银珍,嵌入式系统原理与实践-ARM Cortex-M4 Kinetis微控制器. 电子工业出

版社,2012.

[3] 蔡述庭,"飞思卡尔"被智能汽车竞赛设计与实践-基于S12XS和Kinetis K10. 北京航空航天大学

出版社,2012.

[4] 陶永华. 新型 PID 控制及其应用[J]. 工业仪表与自动化装置, 1998 (1): 57-62.

[5] 刘金琨. 先进 PID 控制 MATLAB 仿真[M]. 电子工业出版社, 2004.

[6] 张军.AVR单片机应用系统开发典型实例.北京:中国电力出版社,2005.

[7] 王晓明.电动机的单片机控制 [M] .北京:北京航空航天大学出版社. 2002.

[8] 臧杰,阎岩.汽车构造[M] .北京.机械工业出版社.2005.

[9] 安鹏,马伟.S12单片机模块应用及程序调试[J] .电子产品世界.2006.第211期. 162-163.

[10] 张文春.汽车理论[M].北京.机械工业出版社.2005.

[11] 童诗白,华成英.模拟电子技术基础 [M] .北京: 高等教育出版社,2001.

[12] 阎石.数字电子技术基础 [M] .北京: 高等教育出版社,2000.

[13] 谭浩强著.C程序设计.北京:清华大学出版社,2003.

[14] 尹勇.Protel DXP电路设计入门与进阶 [M] .北京: 科学出版社,2004.

[15] Park K.H ,Bien Z,Hwang D.H. A study on the robustness of a PID - type iterative learning controller

against initial state error [J]. Int. J. Syst. Sci. 1999, 30(1) ,102~135.

[16] 殷剑宏,吴开亚.图论及其算法 [M] .中国科学技术大学出版社,2003.

[17] 夏克俭.数据结构及算法 [M] .北京:国防工业出版社, 2001.

[18] 尹怡欣,陶永华.新型PID控制及其应用.北京:机械工业出版社,1998年.

[19] 李太福.基于在线参数自整定的模糊PID伺服控制系统[J] .交流伺服系统,2005,4:203~215.

[20] 仲志丹,张洛平,张青霞.PID 调节器参数自寻优控制在运动伺服中的应用[J] .洛阳工学院学

报,2000,21(1):57~60.

34

附录:源程序代码

附录:程序源代码

#include "include.h"

volatile unsigned char sendflag;

unsigned int start_delay_count=0;

extern u32 volatile speed_read;

volatile u8 VSYN = 1;

extern volatile u8 PicChoice,pic_right[60],pic_left[60],ImageBuf1[ROW][COL],ImageBuf2[ROW][COL],get_line_center;

extern volatile unsigned char dealflag,dealstart,pic_count;

extern u8 left_len,right_len,LeftEnd,RightEnd,LeftStart,RightStart,StartFind,sp_len_max,EZH_temp[10][240];

extern float straight,right1,turn,k,Lastk;

extern u8 Chioce,ContinuousFlag,flagLine;

extern float straight,tempK,shizi_check;

extern float speed_out;

extern int BlackPointCounter;

extern u8 Controlline,Linechoice;

extern u8 sp_center[60];

extern float Ktemp,k;

extern float TURN_WAN_Highest_K,TURN_WAN_Lowest_K,TURN_RUWAN_Highest_K,TURN_RUWAN_Lowest_K;//1.0//Kp 下限

extern u8 state[8],sp_len_max;

extern u8 shizi_2_left,shizi_2_right;//极差

extern u8 shizi_flag;

extern u16 Speed_Decision_Value;

int Timer=0;

u8 SDpic[198]={0},K_sign=0;

u32 sector1=1024;

u32 SpeedGet=0;

//拨码开关 C6-C13;

//25 行 50cm 10行 100cm 3行 150cm

u8 infraredstate=0;

float straight_temp=0;

u8 Straight_sign=0;

extern float tempStraight;

extern float expectedspeed,EXpectedspeed,Curvity_SpeedControl;

void SDpic_Write()

{

35

附录:源程序代码

u8 i;

float kk=Lastk*1000;

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

SDpic[i]=pic_left[i];

for(;i<120;i++)

SDpic[i]=pic_right[i-60];

for(;i<180;i++)

SDpic[i]=sp_center[i-120];

SDpic[180]=(u8)(turn/10);

SDpic[181]=(u8)(TrackState);

SDpic[182]=(u8)(Controlline);

straight_temp=straight;

if( straight_temp<0)

{

straight_temp=-straight_temp;

Straight_sign=2;

}

else

{

Straight_sign=1;

}

SDpic[183]=(u8)(straight_temp/10);

if(kk<0)K_sign=1;

else K_sign=2;

SDpic[184]=(u8)(K_sign);

if(kk<0)kk=-kk;

SDpic[185]=(u8)(kk);

SDpic[186]=(u8)(flagLine);

SDpic[187]=(u8)(LeftStart);

SDpic[188]=(u8)(LeftEnd);

SDpic[189]=(u8)(RightStart);

SDpic[190]=(u8)(RightEnd);

SDpic[191]=(u8)(left_len);

SDpic[192]=(u8)(right_len);

SDpic[193]=(u8)(Linechoice);

if(sp_len_max==255)sp_len_max=0; SDpic[194]=(u8)(sp_len_max);

if(sp_len_max==0)sp_len_max=255; //SDpic[195]=(u8)(SpeedGet/10);

SDpic[195]=(u8)(Speed_Decision_Value/100); SDpic[196]=(u8)(EXpectedspeed/10);

36

附录:源程序代码

SDpic[197]=(u8)(Straight_sign);

disk_write(0,SDpic,sector1,1);

sector1++;

}

// asm("nop");

void main()

{

u8 i;

DisableInterrupts;

WDOG_UNLOCK = 0xC520; WDOG_UNLOCK = 0xD928;

WDOG_STCTRLH &= ~WDOG_STCTRLH_WDOGEN_MASK;

Init();//全部初始化

toggle_switch();

EnableInterrupts;

while(1)

{

if(sendflag)

{

EnableInterrupts;

sendflag=0;

//pic_send();

//uart_putchar (UART1,0x01);

get_line_main();

//uart_putchar (UART1,0x02);

EZH_next();

//uart_putchar (UART1,0x03);

//center_line_get();//中心线

//filteringLine();

NormalTrackjudgment();

Speed_Decision();

//uart_putchar (UART1,0xfe);

//Differential_ly_cy();

//if(sp_len_max==255)

37

附录:源程序代码

//sp_len_max=0;

//uart_putchar (UART1,sp_len_max); //uart_putchar (UART1,flagLine); //if(LeftEnd>15||RightEnd>15)

//sp_get_line();

if(start_delay_count>30)

{

// FTM_PWM_Duty(FTM2, CH0, 200); //uart_putchar (UART1,0x04);

TURN();

Timer++;

//uart_putchar (UART1,0xfe);

//straight_temp=straight;

// if( straight_temp<0)

//{

// straight_temp=-straight_temp;

// Straight_sign=2;

//}

//else

//{

// Straight_sign=1;

//}

//uart_putchar (UART1,Straight_sign); //if(straight<0)straight=-straight;

//uart_putchar (UART1,(u8)(straight/10)); //uart_putchar (UART1,0x05);

SDpic_Write();

start_delay_count=60;

}

else

start_delay_count++;

//uart_putchar (UART1,(u8)(shizi_check*10));

// uart_putchar (UART1,0xfe);

// if(k<0)

// k=-k;

// if(tempK<0)

// tempK=-tempK;

// if(straight<0)

// straight=-straight;

// uart_putchar (UART1,TrackState);

38

附录:源程序代码

// uart_putchar (UART1,(u8)straight);

// uart_putchar (UART1,(u8)k);

// uart_putchar (UART1,(u8)tempK);

//Differential_ly_cy();

//Differential_ly_cy_State();

//Uart_Expection_TrackState_Straight();

//Uart_Speed_Expection();

uart_putchar (UART1,0xfe);

//uart_putchar (UART1,TrackState);

//if(straight<0)straight=-straight;

//uart_putchar (UART1,(u8)straight/10);

uart_putchar (UART1,(u8)(Speed_Decision_Value/100)); uart_putchar (UART1,(u8)(EXpectedspeed/10)); //uart_putchar (UART1,(u8)(SpeedGet/10));

//uart_putchar (UART1,(u8)straight);

//Differential_ly_cy_State();

//SDpic_Write();

//uart_putchar (UART1,(u8)(Ktemp*10));

}

/*

if(sendflag)

{

sendflag=0;

DisableInterrupts;

// gpio_turn(PORTE,0);

pic_send();

// Track_SP_RL_len();

get_line_main();

//uart_putchar (UART1,0x02);

// uart_putchar (UART1,0x03);

EZH_next();

//filteringLine();

//// NormalTrackjudgment();

39

附录:源程序代码

// center_line_get();

////TURN();

//if(sp_len_max==255)sp_len_max=0; //uart_putchar (UART1,sp_len_max); //Differential_ly_cy();

//Differential_ly_cy_State();

//pic_send();

PORTA_ISFR |= (1 << 29);

PORTA_ISFR |= (1 << 28);

EnableInterrupts;

}

*/

}

}

40

网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com