温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
大连大学
电光
大连
大学
第十届“飞思卡尔”杯全国大学生
智能汽车竞赛
技 术 报 告
学 校:大连大学
队伍名称:电光
参赛队员:曹丰、高宇飞、付金宇
带队教师:杜秀丽
关于技术报告和研究论文使用授权的说明
本人完全了解第十届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日 期:
摘要
本文以第十届“飞思卡尔”杯全国大学生智能汽车竞赛为背景,介绍了大连大学电光队的整体设计方案,及开发流程。
本文详细介绍了车模机械结构的设计、传感器的选择与安装、各模块电路、控制算法及策略优化等。赛车采用Freescale 公司的MK60DN512ZVLQ10单片机作为系统的控制核心,SONY CCD摄像头完成图像采集,通过AD转换为数字图像,再经过赛道提取算法提取赛道位置,用PD方式对舵机进行控制。同时通过编码器获取车轮速度,采用PID控制实现速度闭环。在赛车调试方面,通过使用了无线蓝牙模块、SD卡、MATLAB仿真、虚拟示波器等,很大程度提高了调试效率,经过测试及比赛,赛车能够在规定的赛道上稳定快速的形式。
关键词:智能车、图像采集、赛道提取、PID、SD卡
目录
摘要 II
第一章 引言 1
1.1大赛介绍 1
第二章 智能车整体设计 2
2.1系统结构框图 2
2.2 车模整体布局 3
第三章 机械结构调整 4
3.1智能车参数要求 4
3.2机械结构调整说明 4
3.3舵机安装 4
3.4前轮调整 5
3.5摄像头支架 6
3.6编码器安装 7
第四章 硬件系统设计 8
4.1单片机最小系统 8
4.2电源模块 9
4.2.1最小系统供电 10
4.2.2编码器供电 10
4.2.3图像AD转换供电 10
4.2.4摄像头供电 11
4.2.5舵机供电 11
4.3图像采集模块 12
4.3.1视频同步分离电路 12
4.3.2 A/D转换电路 13
4.4 电机驱动模块 14
4.5 调试电路 15
第五章 软件系统设计 17
5.1总体控制流程 17
5.2系统初始化 17
5.3黑线提取 18
5.4控制策略 20
5.4.1PID算法简介 20
5.4.2舵机控制 23
5.4.3速度控制 23
第六章 系统调试 24
6.1开发环境 24
6.2 SD卡+MATLAB 24
6.3硬件调试 25
第七章 车模技术参数 26
结论 27
参 考 文 献 28
附录 程序代码 29
III
第一章 引言
1.1大赛介绍
面向大学生的智能汽车竞赛最早始于韩国,在国内,全国大学生“飞思卡尔”杯智能汽车竞赛从2006年开始已经举办了十届,得到了各级领导及各高校师生的高度评价。大赛为智能车领域培养了大量后备人才,为大学生提供了一个充分展示想象力和创造力的舞台,吸引着越来越多来自不同专业的大学生参与其中。
在准备比赛的过程中,小组成员需要掌握多学科的知识,其中涵盖了机械、电子、自动化、计算机等。经过半年的学习制作,我们学习到了电路设计、编程、软件仿真、系统调试等多方面的知识,通过比赛也锻炼了我们系统设计、团队合作、解决问题的能力,对今后的学习与工作都有重大意义。
该竞赛以飞思卡尔半导体公司为协办方,得到了教育部相关领导、飞思卡尔公司领导与各高校师生的高度评价,已发展成全国 30 个省市自治区近 300 所高校广泛参与的全国大学生智能汽车竞赛。2008 年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一(教高函[2007]30 号文)。全国大学生智能汽车竞赛原则上由全国有自动化专业的高等学校(包括港、澳地区的高校)参赛。竞赛首先在各个分赛区进行报名、预赛,各分赛区的优胜队将参加全国总决赛。每届比赛根据参赛队伍和队员情况,分别设立光电组、摄像头组、电磁组等多个赛题组别。每个学校可以根据竞赛规则选报不同组别的参赛队伍。全国大学生智能汽车竞赛组织运行模式贯彻“政府倡导、专家主办、学生主体、社会参与”的 16 字方针,充分调动各方面参与的积极性。全国大学生智能汽车竞赛一般在每年的 10 月份公布次年竞赛的题目和组织方式,并开始接受报名,次年的 3 月份进行相关技术培训,7 月份进行分赛区竞赛,8 月份进行全国总决赛。
第十届飞思卡尔杯大学生智能车竞赛共有摄像头、光电、电磁三个组别,摄像头与光电组由三人一队参加比赛,尔电磁组由四人一队参见比赛。参赛选手须使用竞赛秘书处统一指定的竞赛车模套件,采用飞思卡尔半导体公司的 8位、16位、32位微控制器作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等。制作一个能够自主识别路线的智能车,在专门设计的跑道上自动识别道路行驶,以用时的多少来决定比赛的成绩。
第二章 智能车整体设计
2.1系统结构框图
本队所设计的智能车是以飞思卡尔公司提供的32位微处理器Kinetis60为核心控制单元,通过SONY CCD 摄像头获取PAL制式信号,LM1881进行视频同步分离TLC5510进行AD转换,同时输入到单片机得到图像,通过算法提取赛道黑边线,再进一步得出赛道的中心,根据小车自身的姿态与赛道中心之间的偏差通过PD控制舵机进行转向。通过编码器实时反馈电机转速,并对小车进行速度控制。同时,我们也设计了一些调试模块以便对小车进行更加方便的调试。系统框图如图 2.1所示:
图2.1智能车系统框
2.2 车模整体布局
本届比赛摄像头组采用的是东莞市博思电子数码科技有限公司生产的C车模,有关赛车整体结构布局,我们的主要思路是:
1. 车模重量尽量轻,车模底盘尽量低;
2. 车模重心靠近车模中心稍靠后的位置,重心尽量低;
3. 电路板按功能模块化处理,主电路板在功能完备前提下尽量小;
4. 摄像头支架位于车模中间偏后位置,减少赛车前方盲区;
5. 架高舵机,加长舵机连杆,提高舵机响应速度。
图2.2车模整体布局图
第三章 机械结构调整
3.1智能车参数要求
1. 车模宽度小于等于250mm,车模长度小于等于400mm,高度没有限制;
2. 伺服电机数量不超过 3 个。除了原车模配置的转向舵机之外,新增加的舵 机的型号必须是由广东博思公司提供的舵机 FUTABA3010 或者由北京科 宇通博科技有限公司提供的 S-D5 舵机;
3. 传感器数量不超过 16 个。
3.2机械结构调整说明
智能车的机械结构对其行驶性能有很重要的影响,尤其体现在高速下,机械结构的细微变化都会带来很大的变化。为了让智能车在所有赛道上都能稳定的行驶,我们对其机械结构进行了调整,其中包括:舵机安装、前轮调整、摄像头支架、编码器安装。
3.3舵机安装
原车模舵机为卧式安装,由于本次比赛禁止改动舵机模块本身,但对于舵机的安装方式,输出轴的连接件没有任何限制,为了得到更快的响应速度,只能增加舵机工作电压或增加舵机输出力矩,而过大的增加舵机工作电压可能导致舵机在高负载运行下烧毁。最终决定将舵机竖放并且架高,增加了一定的力矩。
图3.3舵机安装
第三章:机械结构调整
3.4前轮调整
车模前轮对车模转向有着很大的影响,尤其在高速状况下,细微的调整可能会带来很大的改变。
经过阅读大量技术报告结合实践检验我们最终将前轮调整为:
1. 前束角:3°;
2. 前轮外倾角:-3°
3. 主销后倾角:通过垫片调整。
图3.4前轮调整图
3.5摄像头支架
摄像头支架是否稳定直接影响到采集信号的稳定性,我们选用质量轻强度高的碳素杆。并且在车后方加斜拉杆用来稳定支架。
摄像头连接架用铝与尼龙制成,方便调节,但其带来的缺点是重量较重,有待改进。
图3.51摄像头支架底座
图3.52摄像头连接架
第三章:机械结构调整
3.6编码器安装
为了获取可靠地速度返回值,要求编码器安装一定要稳固,因此,我们设计了编码器支架,可以使编码器齿轮与电机齿轮很好的啮合。
图3.6编码器支架
7
第四章:硬件系统设计
第四章 硬件系统设计
对智能车来说,一个稳定可靠的硬件系统是顺利完成比赛的基础。为此,我们小组成员花费大量时间用于设计与改进硬件系统。最终,我们确定了一套稳定可靠的硬件系统。
4.1单片机最小系统
单片机最小系统是整车的核心,我们使用的是飞思卡尔公司的MK60DN512ZVLQ10单片机,144引脚封装,对比了我们买到的最小系统板,我们决定自己设计最小系统板,这样的好处在于可以将一些不常用的引脚不引出来,可大大缩小最小系统板的体积,同时可以将一些常用的模块集成到最小系统板上,我们将蓝牙与OLED显示模块集成在了其上。
图4.1.1最小系统板原理图
图4.1.2最小系统板PCB图
4.2电源模块
各个电路模扩稳定工作的基础是稳定的供电,我们使用的总电源为组委会提供的7.2V镍镉电池,实际上充满电时其电压可达到8.0V-8.4V,这就要求了我们的供电模块在输入电压有浮动时输出电压要保持恒定。同时我们为了避免各个模块工作时对其他模块造成干扰,我们对每个主要模扩进行单独供电。
图4.2电源管理系统框图
11
4.2.1最小系统供电
3.3V最小系统供电由ASM1117稳压芯片提供,纹波满足我们的要求,对负载变化也能迅速做出反应。我们选用它单独为K60最小系统供电。
图4.2.1 ASM11173.3V
4.2.2编码器供电
5.0V编码器供电由ASM1117提供。
图4.2.2 ASM11175.0V
4.2.3图像AD转换供电
图像AD转换部分由LM1881、TLC5510、12MHZ晶振组成,在整个主板上属于高频部分,要求供电稳定切纹波较小。我们选用了低纹波的TPS7350稳压芯片用于此处。
图4.2.3 TPS7350
15
4.2.4摄像头供电
SONY CCD要求12V供电,经过测试,我们发现供电纹波直接影响到图像采集质量,纹波大时,椒盐噪点较多,这就要求升压芯片输出电压一定要稳定且纹波较小。我们有两种芯片可用于升压,一是MC34063,二是LM2577。经过对比发现,MC34063的输出电压在输入电压恒定时恒为12V,但是输入电压不稳定时,其输出电压也会大幅波动,而LM2577可以带来恒定电压输出,即使输入电压有大幅度波动,我们选用了LM2577作为摄像头供电芯片。而纹波问题我们通过输出端加大容量滤波电容并联小容量电容得以有效解决。
图4.2.4 LM2577
4.2.5舵机供电
本次使用的C车模用的是S3010舵机。我们要求舵机要有较快的响应速度,而提高舵机响应速度就是增加舵机内部电机转速。常见舵机电机一般都为永磁直流电动机,如直流有刷空心杯电机。舵机电机控制实行的是电压控制模式,即转速与所施加电压成正比,驱动是由四个功率开关组成H桥电路的双极性驱动方式,运用脉冲宽度调制(PWM)技术调节供给直流电动机的电压大小和极性,实现对电动机的速度和旋转方向(正/反转)的控制。电机的速度取决于施加到在电机平均电压大小,即取决于PWM驱动波形占空比(占空比为脉宽/周期的百分比)的大小,加大占空比,电机加速,减少占空比电机减速。所以要加快电机转速:1、加大电机工作电压;2、降低电机主回路阻值,加大电流;
组委会要求不可改动舵机内部结构,我们在尝试增大电压驱动舵机时发现舵机容易出现烧毁,为此出于稳定性考虑,我们使用了6.0V给舵机供电。而LM2941可调稳压芯片很好的满足了我们的需求。
图4.2.5 LM2941
4.3图像采集模块
目前市场的模拟摄像头有两大种:CCD和CMOS。CCD摄像头的优点是动态性能好,即使车在高速行驶时也可得到较为清晰的图像,其缺点主要有两点:耗电量大、重量大、电路复杂。CMOS摄像头恰好相反,动态性能较差,高速时容易出现图像模糊的现象,但体积小,耗电小、使用方便。
综合利弊,我们最终选择SONY CCD摄像头,其主要参数如下:
清晰度: 380 线
制式: PAL 制式标准视频信号
分辨率: 352 (水平) *288 (垂直)
标配镜头: 3.6mm
尺寸规格: 32mm*32mm
感光面积: 4.9mm*3.7mm
最低照度: 0.1lux/F1.2
电子快门: 1/100000
功耗: DC12V 70mA
CCD输出信号为PAL制式信号,我们需要对其进行视频分离,同时用A/D转换视频信号,K60通过视频分离信号来采集A/D结果。
4.3.1视频同步分离电路
我们使用黑白信号格式CCD摄像头采集赛道信息。摄像头视频信号中除了
包含图像信号之外,还包括了行同步信号、行消隐信号、场同步信号、场消隐信号以及槽脉冲信号、前均衡脉冲、后均衡脉冲等。因此,若要对视频信号进行采集,就必须通过视频同步分离电路准确地把握各种信号间的逻辑关系。我们使用了LM1881芯片对黑白全电视信号进行视频同步分离,得到行同步、场同步信号,具体原理不再赘述。
图4.3.1 LM1881视频分离电路
4.3.2 A/D转换电路
摄像头输出的视频信号为模拟信号,而单片机可以处理的是数字信号,所以需要把模拟视频信号离散成数字信号,这就要用到模数转换技术。一般而言单片机都有A/D转换模块。而K60内部A/D模块速度无法满足我们的要求,为此我们设计了A/D转换电路,我们选用了德州仪器的8位A/D转换芯片TLC5510。
图4.3.2 TLC5510 A/D转换电路
15
4.4 电机驱动模块
本届C车模使用的电机为260电机。驱动电流相较B车模的540电机小了不少,在对比BTS7960与MOSFET驱动的效果后,我们发现MOSFET优势不明显,BTS7960完全可以满足要求,并且驱动电路简单了许多,为此我们选用了BTS7960作为电机驱动芯片。我们将全桥驱动模块化,直接以直插方式连接在主板上。方便维修与更换。
图4.4.1 电机驱动底座
图4.4.2 电机驱动模块
4.5 调试电路
调试是智能车最重要的一环,为了调试方便,我们使用了按键、液晶、SD卡、拨码开关的模式。原理图如下:
图4.5.1 拨码开关及按键
图4.5.2 SD卡
15
第五章:软件系统设计
第五章 软件系统设计
5.1总体控制流程
程序中主要用到单片机的I/O、FTM、PIT、正交解码等模块。FTM中的PWM主要控制电机转速与舵机打角,正交解码主要用于编码器测速,I/O口中断用来读取图像信息,I/O用来读取按键与拨码开关等信息。
初始化
图像采完
图像处理,求中线
加权平均,控舵
是
否
20ms到
是
控速
否
图5.1 总体控制流程图
5.2系统初始化
系统要正常工作,首先要完成初始化,初始化主要包括以下几个主要有以下几部分:
总线时钟初始化:利用PLL锁相环将单片机的主频倍频到150M,提高单片机的执行速率;
PWM模块初始化:主要包括电机和舵机控制的初始化,电机控制频率选择
21
20K;根据数字舵机20ms一个响应周期的特点,以及索尼CCD一个控制周期为20ms,所以整个程序的控制周期最短在20ms,对应50HZ频率。
PIT模块初始化:作为一个5ms的周期性中断,定时采集编码器返回的小车实时速度,实现对智能车速度的闭环,然后通过PID控制小车的速度;
I/O口初始化:包括摄像头AD芯片的输入IO口、调试用的led输出IO口以及拨码开关输入IO口;
此外还有,串口用SCI模块初始化以及摄像头行场中断的初始化,具体程序详见附录。
5.3黑线提取
开始
搜索最底部的三个有效行
是否搜索到
根据前一个边沿的数据搜索下一行满足条件的边沿
记录上升沿和下降沿
是否搜索完
完
求所有有效行两侧赛道边沿点
是
否
是
否
图5.3.1 黑线提取流程图
以上提取算法经过MATLAB验证有较好的效果,对于一些特殊元素的处理,我们也使用了SD卡存图+MATLAB仿真验证的方法。效果如下:
图5.3.2 十字
图5.3.3 直角标志线
19
5.4控制策略
5.4.1PID算法简介
目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。智能控制的典型实例是模糊全自动洗衣机等。自动控制系统可分为开环控制系统和闭环控制系统。目前,PID控制及其控制器或智能PID控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了具有PID参数自整定功能的智能调节器(intelligent regulator),其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用PID控制实现的压力、温度、流量、液位控制器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。这里,我们利用PID控制实现智能小车的快速平稳运行。
要使智能小车能够平稳快速地运行,需要有高效稳定的控制算法对小车速度进行闭环反馈控制,于是我们使用了鲁棒性很好的经典PID控制算法,配合使用理论计算和实际参数补偿的办法即可消除外界各种因素的影响,使得小车运行的更稳定。
PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例(P)、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称PID控制器,原理框图如图所示。
图5.4.1 PID控制器原理框图
在计算机控制系统中,使用的是数字PID控制器,控制规律为:
(公式4.1)
(公式4.2)
式中
——采样序号,= 0,1,2…; ——第次给定值;
——第次实际输出值; —— 第次输出控制量;
—— 第次偏差; —— 第次偏差;
——比例系数; ——积分时间常数;
——微分时间常数; ——采样周期。
简单说来,PID控制器各校正环节的作用如下:
比例环节:及时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差。
积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强。
微分环节:能反映偏差信号的变化趋势(变化速率),并能在该偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。
数字PID控制算法通常分为位置式PID控制算法和增量式PID控制算法。
1)位置式PID
位置式PID中,由于计算机输出的u (k) 直接去控制执行机构(如阀门),u(k)的值和执行机构的位置(如阀门开度)是一一对应的,所以通常称公式(4.2)为位置式PID控制算法。
位置式PID控制算法的缺点是:由于全量输出,所以每次输出均与过去的状态有关,计算时要对过去e(k)进行累加,计算机工作量大;而且因为计算机输出的u(k)对应的是执行机构的实际位置,如计算机出现故障,u(k)的大幅度变化,会引起执行机构位置的大幅度变化,这种情况往往是生产实践中不允许的,在某些场合,还可能造成严重的生产事故。因而产生了增量式PID 控制的控制算法,所谓增量式PID 是指数字控制器的输出只是控制量的增量△u(k)。
2)增量式PID
当执行机构需要的是控制量的增量(例如:驱动步进电机)时,可由式(4.2)推导出提供增量的PID控制算式。由式(4.2)可以推出式(4.3),式(4.2)减去式(4.3)可得式(4.4)。
(公式4.3)
(公式4.4)
式中
公式(4.4)称为增量式PID控制算法,可以看出由于一般计算机控制系统采用恒定的采样周期T,一旦确定了KP、TI 、TD,只要使用前后三次测量值的偏差,即可由式(4.4)求出控制增量。
增量式PID具有以下优点:
(1) 由于计算机输出增量,所以误动作时影响小,必要时可用逻辑判断的方法关掉。
(2) 手动/自动切换时冲击小,便于实现无扰动切换。此外,当计算机发生故障时,由于输出通道或执行装置具有信号的锁存作用,故能保持原值。
(3) 算式中不需要累加。控制增量△u(k)的确定仅与最近k次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。
但增量式PID也有其不足之处:积分截断效应大,有静态误差;溢出的影响大。使用时,常选择带死区、积分分离等改进PID控制算法。
3) PID参数整定
PID控制器的参数整定是控制系统设计的核心内容。它是根据被 控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主
要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需 要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。
利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡, 记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。
5.4.2舵机控制
舵机控制赛车前进的方向,对赛车行驶的路径起决定性的作用,经过反复的调试我们发现,利用多行赛道中心值偏离图像中心的偏差值求加权平均值的方法配合增量式PD控制可以很好地找到比较优良的路径。加权平均的权值排布需要调试发现,改进。
5.4.3速度控制
电机控制采用 PID 控制,可以减小动态误差并且跟随性能较好。
第六章:系统调试
第六章 系统调试
6.1开发环境
本次比赛,对于K60单片机,使用了IAR Embedded Workbench IDE+J-Link
在调试过程中如果出现错误,我们的做法是:排除硬件原因与外界干扰,然后在线仿真调试,判断数据错误可能发生的代码段,通过数据根据程序流程一步步的找到错误的根源。
图6.1 IAR集成开发环境
6.2 SD卡+MATLAB
通过SD卡将采集到的图像保存,再通过电脑将多幅图像读取出来,用MATLAB将算法实现,根据仿真结果改进算法,再将改进后的算法移植到单片机内,验证是否可行。我们发现这样的调试效率相比以前大大提高。
图6.2 MATLAB仿真界面
6.3硬件调试
对于电路部分调试,电源主要观测电压与纹波,摄像头图像是否清晰,摄像头采集范围,椒盐噪点是否可以接受。机械部分,舵机的调整很重要,首先找到能让小车笔直前行的舵机PWM波占空比,这个值作为中值。左右极限的寻找方法我们是首先找到机械上舵机可以达到的极限范围,再通过比对左右转弯半径进行微调,使得转弯半径相同,这样就确定了中值与左右极限值。
第七章 车模技术参数
赛车基本参数
长
27cm
宽
18cm
高
34cm
车重
1120g
功耗
空载
8W
带载
大于10W
电容总容量
1800uF
传感器
编码器
2个
CCD摄像头
1个
除了车模原有的驱动电机、舵机之外伺服电机个数
0
赛道
信息检测
视野范围(近瞻/远瞻)
5/180cm
精度(近/远)
4/25mm
频率
50Hz
结论
参加飞思卡尔的一年时间内,小组成员从机械结构,电路设计,程序编写,到最后调试,一步一步的走过来,完成了智能车比赛,实现了本方案。
在制作过程中,我们遇到的问题很多,从最初的机械结构设计到算法设计,我们用努力和毅力将一个个问题化解,在这过程中,我们发现,自己成长了很多,思想不断成熟,技术不断进步。而这些都离不开指导老师的指导和学校的大力支持。
首先,我们感谢学校为我们比赛提供了场地和资金,这是我们完成甚至参加比赛的基础。
其次我要感谢我们的指导老师胡玲艳和杜秀丽老师,我们的成功离不开两位老师的支持与指导。
最后,我要感谢我的队友,是你们让我坚持下来,让我在一个良好的环境中制作智能车。
参 考 文 献
(1) 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京.清华大学出版社.2004.
(2) 张军.AVR单片机应用系统开发典型实例.北京:中国电力出版社,2005.
(3) 王晓明.电动机的单片机控制 [M] .北京:北京航空航天大学出版社. 2002.
(4) 臧杰,阎岩.汽车构造[M] .北京.机械工业出版社.2005.
(5) 安鹏,马伟.S12单片机模块应用及程序调试[J] .电子产品世界.2006.第211期. 162-163.
(6) 张文春.汽车理论[M].北京.机械工业出版社.2005.
(7) 童诗白,华成英.模拟电子技术基础 [M] .北京: 高等教育出版社,2001.
(8) 阎石.数字电子技术基础 [M] .北京: 高等教育出版社,2000.
(9) 谭浩强著.C程序设计.北京:清华大学出版社,2003.
(10) 尹勇.Protel DXP电路设计入门与进阶 [M] .北京: 科学出版社,2004.
(11) 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.
(12) 殷剑宏,吴开亚.图论及其算法 [M] .中国科学技术大学出版社,2003.
(13) 夏克俭.数据结构及算法 [M] .北京:国防工业出版社, 2001.
(14) 尹怡欣,陶永华.新型PID控制及其应用.北京:机械工业出版社,1998年.
(15) 李太福.基于在线参数自整定的模糊PID伺服控制系统[J] .交流伺服系统,2005,4:203~215.
(16) 仲志丹,张洛平,张青霞.PID 调节器参数自寻优控制在运动伺服中的应用[J] .洛阳工学院学报,2000,21(1):57~60.
(17) 卓晴,黄开胜,邵贝贝.学做智能车:挑战“飞思卡尔”杯.北京:北京航空航天大学出版社,2007年.
(18) 阂革勇,冯玉才,宋恩民,刘宏,梁鸯.地图自动识别系统中识别提取虚线的算法及实现.
(19) 张男, 张迪洲, 李永科.智能车路径识别系统对虚线的预测拟合处理.
附录 程序代码
uint8 find_edge(uint8 temp_start_row,uint8 temp_end_row,uint8 thr,uint8 array[Image_ROW][Image_COL])
{
int i=0,j=0;
int temp_start_dot = 0;
uint8 end_row_op = 0;
uint8 last_start_dot = 0;
temp_start_dot=find_start(temp_start_row,thr,array,100);//找起点
last_start_dot = temp_start_dot;
if(temp_start_dot==0)
temp_start_dot = 100;
if(end_row>80)
end_row = find_end_row(thr,60,array);
for(i=temp_start_row;i>temp_end_row;i--)
{
if(i>temp_start_row-3)//从起始行开始的三行
{
if(edge_l_r[i+1].kind==3)
{
if(edge_l_r[i+1].left_edge>165)
edge_l_r[i+1].left_edge = 165;
temp_start_dot = find_start(temp_start_row,thr,array,edge_l_r[i+1].left_edge+25);
}
else if(edge_l_r[i+1].kind==2)
{
if(edge_l_r[i+1].right_edge<35)
edge_l_r[i+1].right_edge = 35;
temp_start_dot = find_start(temp_start_row,thr,array,edge_l_r[i+1].right_edge-25);
}
else if(edge_l_r[i+1].kind==1)
temp_start_dot = find_start(temp_start_row,thr,array,100);
else if(edge_l_r[i+1].kind==4)
temp_start_dot = (uint8)round((edge_l_r[i+1].left_edge+edge_l_r[i+1].right_edge)/2);
if(abs(last_start_dot-temp_start_dot)>100)
temp_start_dot = last_start_dot;
for(j=temp_start_dot;j<Image_COL;j++)//向右寻找
{
if(j>=(Image_COL-4))
{
edge_l_r[i].right_edge=(Image_COL-1); //200
break;
}
if((array[i][j-1]>thr)&&(array[i][j]>thr)&&(array[i][j+2]<thr)&&(array[i][j+4]<thr))
{
edge_l_r[i].right_edge=j;
edge_l_r[i+1].kind = 2;
break;
}
}
for(j=temp_start_dot;j>1;j--)//向左寻找
{
if(j<=4)
{
edge_l_r[i].left_edge=1;
if(edge_l_r[i].kind==2)
edge_l_r[i].kind=2;//只有右边
else
edge_l_r[i].kind=1;//左右全无
break;
}
if((array[i][j+1]>thr)&&(array[i][j]>thr)&&(array[i][j-2]<thr)&&(array[i][j-4]<thr))
{
edge_l_r[i].left_edge=j;
if(edge_l_r[i].kind==2) //200
edge_l_r[i].kind=4;//左右全有
else
edge_l_r[i].kind=3;//只有左边
break;
}
}
} //前三行结束
/***********************************************/
// edge_l_r[i].kind //
// 1 2 3 4 //
// 左右全无 只有右边 只有左边 左右全有 //
/***********************************************/
else //第三行以外
{
//判断上一行边沿类型
if(edge_l_r[i+1].kind==1) //左右全无
temp_start_dot = find_start(i,thr,array,100);
else if(edge_l_r[i+1].kind==2) //只有右边
{