ImageVerifierCode 换一换
格式:DOCX , 页数:104 ,大小:1.04MB ,
资源ID:9269036      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9269036.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(技术文档.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

技术文档.docx

1、技术文档第一届“飞思卡尔”杯全国大学生智能汽车邀请赛技 术 报 告 学 校:浙江大学队伍名称:捷豹队参赛队员:顾弘 张进锋 裘君带队教师:颜文俊关于技术报告和研究论文使用授权的说明 本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 日 期: 目 录第一章 引言 1第二章 智能车控制系统设计 52.1 控制系统总体框架 52.2 模型

2、的获得 52.3 参数调节器 62.4 模型跟随问题 6第三章 智能车硬件设计 93.1 单片机资源分配 93.2 电源管理 93.3 直流电机驱动电路 113.4 霍尔开关电路 113.5 串行LED显示电路 123.6 传感器电路及其排布 133.7 机械结构的安装 14第四章 智能车软件设计 174.1 实际的控制系统 174.2 程序流程 174.3 底层驱动程序 194.4 通用的转角,速度计算程序 194.5 黑线信息更新 204.6 赛道识别 214.7 赛道模型的存储与优化 224.8 赛道模型的跟随问题 234.9 偏差及补偿 244.10 各赛段控制算法 254.10.1

3、直线段 254.10.2 弯道 254.10.3 S型赛道 254.10.4 制动函数 264.10.5 限速函数 26第五章 调试过程与主要技术参数 295.1 开发工具与调试方式 295.2 主要技术参数 30第六章 不足与发展方向 316.1 震荡问题 316.2 速度控制 316.3 方向测量 316.4 通过传感器的偏移速度对系统进行微调 316.5 在普通的算法上即时的判断道路类型 326.6 误差补偿 326.7 赛道模型的优化问题 326.8 三种控制思路 33参考文献 35附录A 程序源码 37Main.c 37Control.c 40State.c 60State.h 66

4、Config.h 67Control.h 75第一章 引言搭建硬件平台的目标是尽量使得硬件平台稳定,简洁,通过软件算法的开发来获得好的效果。在黑线寻迹的方式上我们采用了标准的红外检测电路,并通过A/D直接将获得的模拟量读入控制器。在实际判断黑线的过程中,我们设计了一个非常简洁有效的分类器,这个分类器会在启动时确定一个最佳的界限值,并保证小车在实际的运行过程中可以很好的识别出黑线。为了调试方便,我们在每一个传感器附近放置了一个LED来获得直观的黑线信息,由于直接使用传感器输出的模拟量来获得转角的变化非常困难,因此在软件内部仍旧使用了数字量信息,上述分类器实现了这个转换。另一个用于调试以及具备显示

5、功能的是一个串行的数码管排列组,它由4个7段数码管组成,可以使用标准的同步串口方式来控制。电源部分以及电机的驱动部分非常简单。电源部分提供标准的5V以及舵机使用的6V电压,电机的驱动采用了组委会提供的MC33886芯片。电机的驱动部分我们提供了正转,反转以及急停等功能,在实际的运行过程中,在大型的弯道以及S型的赛道之前,我们赛车会有一个急停的动作来快速的降低进弯速度,保证运行的稳定。在本次的设计中我们没有应用高精度的光电编码盘,去而代之的是用于测量后轮转过圈数的霍尔传感器,在后轮的内侧安装4块小型的磁铁。这里采用了方便的开关霍尔器件,输出的信号经过中断被数字控制器获得。它的用途并不使用于测量速

6、度,而是位移。在PCB板制作的初期我们就考虑了安装问题并在相应的位置放置了足够大的孔,整个控制板通过排针被安装在底层的驱动板上,机械固定也非常简洁。安装好的完整的小车如下图所示。在调试的初期为了很好的测试传感器排布对于赛车行进的影响,我们专门制作了专门的小板子,通过小板子不同连接来获得不同的排列,在后面的调试过程中我们一直使用倒V型和一字型的排列。两者各有好处。最后我们采用了稳定的一字型排列。图1.1是我们最后用于参加比赛的小车。在使用光电传感器的情况下,软件的设计通常有两种方案,一种是直接使用PID或者是类似与PID的控制,其中也包括模糊控制。这类思路通常在不同的跑道上需要调节不同的参数才能

7、达到最佳,而像一些包括特殊跑道的情况下,由于无法预知赛道的类型,除非降低最高速度,否则会有跑出赛道的危险。它的好处是实现非常简单,并且具有无后效性,即使在某个地方跑出赛道,在那一点回到赛道后仍可以很好的运行。图 1.1 小车的最终版本另一种方案需要知道当前赛道的模型,包括长度以及弯道的信息。在这类控制中通常需要一个知识库来存储所需的模型以及相应的控制方法,它实际是一种有监督的控制算法。如果具有精确的传感器,比如在赛道上方装有摄像头,可以实时的判别赛道信息,并控制赛车在不同的赛段上调用不同的控制方法,动态的调节控制参数。可以将赛道本身作为一个控制模型,在小车的控制过程中根据这个模型来调节控制参数

8、。这是一种自适应的方法。这种方法的好处非常明显,在稳定性上可以有非常大的提高。还有一种折中的办法是实时的检测道路,并且动态的转换控制方法。由于赛车的速度较快并且对于速度的控制具有很大滞后,我们尝试过这样的控制,效果并不理想。无论采取哪种方案,底层的速度控制以及转角控制都是非常关键的部分。速度与转角控制可以单独分离进行控制,在这类单变量的控制方式中,经典控制理论是非常实用的。文献1以及文献2 都对单变量控制的经典问题进行了论述,并提供了非常多的设计控制器的方法,是非常好的参考资料。文献3 详细涉及了离散系统下的PID控制方式以及设计方法,其中也涉及到了一些常用的数字滤波技术。在道路识别以及黑线的

9、信号检测方面,文献4 是绝佳的参考资料,其中设计的各种分类器的设计以及学习的方式,在这次的控制软件中涉及到了很多与此相关的内容。文献5是有关模型跟随以及自适应控制的经典书籍。为了获得更好的控制效果,我们分别尝试了第一种以及第二种控制方案,在下面的章节将会详细的介绍各个部分的设计以及实物,包括硬件设计以及控制系统的设计。在第二章中将会详细的论述控制系统的设计思路及工作方式,我们最后采取了类似于第二种方案,但做了一些简化以及处理的方案。在第三章中将给出硬件部分的设计框架以及具体的实物。第四章涉及了所有的软件部分,包括各个分类器以及控制算法的具体实现。第二章 智能车控制系统设计2.1 控制系统总体框

10、架一个非常健壮,有效的只能车控制系统如图2.1所示, 这个框架非常类似于图2.1所示,这个框架非常类似于文献5中所提及的MRAS(model-reference adaptive system),在自适应控制中这是一个非常有效的改善控制系统性能的方法。图 2.1控制系统总体框架三种可行的方案实际上都能用这个图来描述,当控制模型以及参数调节器对控制器的影响退化为零时,那么整个系统就是一个普通的控制过程,相对应于之前的第一种方案。而第二种方案以及最后提及的那种方案都需要控制模型以及参数调节器的参与。但是最后的那种方案由于参数调节滞后因此无法有效的提高速度。2.2 模型的获得在第二种方案中,我们需要

11、一个有指导作用的控制模型,这个模型的基础就是赛道信息。如果可以使用摄像头来获得精确的俯视图,并且可以知道赛车在运行过程中的坐标位置,那么可以通过图像识别等技术来获得一个非常有效的控制模型。但是大赛的规程不允许使用外围的摄像头。为此我们根据赛道的特点设计了另一种描速赛道以及赛车运行位置的方法,原先的位置信息由2维坐标p = (x,y)组成,由于无法获得二维的坐标,我们将位置信息坐标进行简化。假设赛道是连续的,那么赛车在赛道上运行的位置信息可以由这个点到赛道起点的距离D来描速。这里的D并不是简单的直线距离而是赛车由起点开始,沿着赛道路径到达这个点所经过的距离。由于位置信息的简化,赛道的有效信息也被

12、丢失了。影响赛车参数的最重要信息是弯道信息。我们用C 来表示位置D所处的道路信息,这里C为l,r,b,s之一。其中l,r,b,s分别代表左弯道,右弯道,直线以及S型弯道。这是根据赛道的特征提取出的有效信息,而如弯道的曲率等等信息则因为难以测定而被省略了。现在赛道的信息被简化为Point = (D,C),而我们测定的模型实际上就是由上述格式的离散的点组成的线段。我们获取赛道模型的方法是在第一圈的时候以一个较为稳定的低速运行,并记录下所需的信息。由于单片机的存储容量有限,赛道信息的获得是实时的。经过调试以及一些必要的优化,我们可以在1K内存的使用量下非常好的记录下整个赛道的模型。实际的对获取的数据

13、进行处理并转换为控制模型的过程将在第四章中详细的说明。这里只对模型的组织作一个概述。整个赛道被组织成一个环形的链表,每个链表的节点保存了某个赛段的长度以及其特征。控制模型根据赛车在实际的运行过程中检测的位置信息以及角度输出来获得模型识别的必要特征,影响参数调节器的工作。2.3 参数调节器参数调节器的设计完全是离线的,根据不同的赛道模型进行不同的控制方式。我们的软件设计结构允许我们完全的改变控制方式,而不仅仅是调节参数那么简单。具体的设计细节将在后面给出。2.4 模型跟随问题在赛道模型确立好之后,赛车将在模型的指导下进行控制,但是由于此时赛车的速度必须提高,可能会出现冲出跑道等等不可知因素,这些

14、干扰会使得赛车无法与精确的模型相对应。这种算法最为关键,也是最困难的部分就是在于已知模型与实际环境的偏差。由于在建立模型时将赛道的很多信息忽略,只保留了相对与起跑线的距离以及关键信息,如果赛车过多的偏离赛道,那么实际经过的距离就会比模型中保存的值要长。这里需要作一点补偿,比如冲出跑道后必须在原模型的基础上加上一个适当的值来消除距离上的偏差。这个问题非常难以解决,多段赛道之后的累计误差可能会使得模型与实际情况完全对应不上。在第四章中将详细的论述这个问题,并给出我们的解决方案。第三章 智能车硬件设计3.1 单片机资源分配我们采用了组委会提供的S12单片机核心板(大板)作为我们的核心控制器,在硬件的

15、设计过程中,我们利用了单片机的一部分I/O口,以及所有的A/D转换通道来获得所需的控制效果。详细的资源分配情况如下表所示:表3.1 详细资源分配用途使用资源前端10个光电传感器信号AN00-AN07,AN12,AN13后端4个光电传感器信号AN08-AN11舵机PWM信号PWM1直流电机PWM信号PWM3直流电机控制信号PA0,PA1,PA2直流电机错误信号(中断)PJ0LED串行接口控制信号PS0-PS4前端10个LED控制信号PB0-PB7,PT4,PT5后端4个LED控制信号PA4-PA7霍尔信号检测(中断)PJ13.2 电源管理在本次的设计中没有使用诸如CCD或者运放等需要12V电压的

16、电路,因此只需要提供单片机所需要的5V以及舵机使用的6V 电压即可。对于单片机的稳压电路稍微要求严格了一些,使用普通的317或是7805稳压在直流电机转速忽然增大时会造成电压不稳定,即使加上严格的滤波电路也无法消除。这里我们使用了LM2940低压稳压芯片来获得较为稳定的电压,实际的测量结果是只要电池电压不低于7V,单片机就可以一直正常工作。而舵机使用的6V稳压电路则使用了LM1117-ADJ的标准电路。实际使用的电路如下图所示:图 3.1 LM2940稳压电路图 3.2 LM1117标准电路但是由于我们在电子市场没有买到LM1117-ADJ低压可调稳压芯片,我们使用了LM317芯片来代替它,并

17、提供了一个跳线可以选择使用6V电压来给舵机提供动力或是直接使用电池电压。3.3 直流电机驱动电路我们使用了MC33886作为直流电机的驱动芯片,并采用了推荐的标准电路。考虑到在赛车的行进过程中需要用到制动功能,通过3个I/O口来控制33886的三跟信号线,实际的电路图与datasheet中推荐的典型电路完全相同。 图 3.3 MC33886的实际驱动电路在实际的控制过程中,将PA0口置为0是前进方式,将PA1口置为1是制动方式。3.4 霍尔开关电路考虑到霍尔传感器的实现可以采用线性霍尔元件以及霍尔开关器件,因此为了支持线性霍尔器件,我们在驱动板上包括了一个电压比较器,用于将线性霍尔元件的输出电

18、压转换为数字信号。电压比较器使用LM311来实现。由于最后我们选择了霍尔开关器件,因此这个电路没有被实际使用。图3.4显示了我们的比较器电路。霍尔开关器件内置了一个滞回比较器,非常的简单实用。图3.5是实际的一个霍尔传感器电路原理图。图3.4 电压比较器图 3.5 霍尔开关器件电路3.5 串行LED显示电路为了更好的进行调试以及可以在跑动的过程中可以看见一些即时的信息,我们决定采用4个7段LED作为显示的手段,但是如果直接并行I/O口驱动则需要非常多的I/O口线,最后我们的LED显示电路(由4片7段共阳极LED组成)使用了串行的方式,通过474LS164来锁存数据,总共有4根控制线,1根电源线

19、以及1根地线来控制。其具体的原理图可以在附录中查到。 图3.6 4个LED显示基本信息3.6 传感器电路及其排布我们使用了标准的传感器电路来获得黑线信息,并使用了固定大小的电阻。传感器的输出电压直接通过A/D转换通道进入数字控制器,为了调试方便以及美观,在每个传感器边上都安装了一个发光二极管,并且由单独的一个I/O口来控制其状态。单个的光电传感器检测电路非常简单,图3.7显示了一个传感器的电路。 图 3.7 单个的光电传感器检测电路在硬件的外部我们没有加任何的信号滤波电路,由环境光引起的环境干扰不能通过RC滤波网络简单的滤除,实际上只通过软件就可以基本去除。在调试的过程中我们曾经采取了多种传感

20、器排布方案,包扩外八,内八以及直线型。最后选定的是稳定的一字型的排列方式。图3.8显示了我们的传感器排列的进化过程实际的测试过程表明,一字型在各种赛道上的平均性能是最好的。而V型的传感器在赛道识别的过程中非常的实用,但是在实际的运行过程中并没有什么优势。图 3.8 传感器排列形式3.7 机械结构的安装在电路板的安装上,由于预先在PCB板上制作了孔,因此只是简单的用螺丝拧紧即可。图3.9显示了完全安装好的小车。在前排的传感器安装上,我们使用了小车原来提供的材料,图3.10显示了前排传感器的安装,这样的设计可以使得前排传感器在一定的范围内前后调整。在各个部件的安装上,我们都尽量利用的赛车自带的配件

21、。图3.9 安装好的小车图3.10 前排传感器的安装第四章 智能车软件设计4.1 实际的控制系统在第二章中给出的控制系统只是一个简要的设计框图,下面给出系统的详细说明。图4.1是系统的详细框架。在学习赛道的过程中,没有涉及到具体的速度控制,只是将速度固定到一个固定的值即可。这里没有涉及到速度的精确控制,对于速度只是一个开环控制。霍尔传感器被安装到后轮上被用于检测走过的距离,单位是后轮的一周。图4.1 控制系统详细框架4.2 程序流程实际的程序流程分为学习阶段以及实际的运行阶段。学习阶段的程序流程如下所示:图 4.2 学习阶段程序流程图 在第一次检测到起跑线的之后开始启动学习过程,到下一次检测到

22、起跑线为止结束学习过程。当学习过程结束后,就开始了实际的运行过程,其流程图如图4.3所示。在实际的运行过程中,每个不同的赛道类型都将被不同的进行控制,最明显的是直线以及弯道,我们调用了不同的控制方法。在具体的控制过程中,使用了查表来加速每一个周期的处理过程。而不同的赛段表格都是不同的。图 4.3 实际的运行过程4.3 底层驱动程序底层的驱动程序包括舵机的驱动,直流电机驱动,光电传感器的信号检测,霍尔开关信号检测,以及LED的驱动部分。这些驱动程序通常很简短,在后面所附的代码中可以很快的找到,这里不再详细论述。4.4 通用的转角,速度计算程序在任何一种控制情况下,我们都有的一张转角控制表以及速度

23、控制表用于有效地计算最佳的控制输出,这张表通常是一个4*10的二维表,其各个元素分别对应后面的4个传感器以及前面10个传感器的组合。这个控制表实际上是一个P控制的原型,在实际的运行过程中,可能会有几个传感器同时发亮的情况,此时将由计算程序给出一个均值从而获得一个平滑的效果。这个简单的计算过程由control_output函数完成。在我们的程序中没有I,D(积分,微分)环节。这个函数贯穿了整个控制系统,下面将详细列出其算法。control_output函数的计算过程如下:Valid Sensor Count := 0Front Motor Output := 0Back Motor Accele

24、ration := 0For every back sensor If detect black line For every front sensor If detect black line Front Motor Output := Front Motor Output + THBF Back Motor Acceleration := Back Motor Acceleration + TABF Valid Sensor Count := Valid Sensor Count + 1 End if End For End ifEnd for其中TH和TA分别是前轮的转角表格以及加速度表

25、格。这个函数是底层控制器的最核心算法。4.5 黑线信息更新调用update_state这个函数是更新黑线信息的唯一方法,除了读入传感器的值并将其转换为数字量之外,还需要判断现在是否已经脱离的黑线,如果脱离了黑线则必须使用上次有效的结果来替代,并将一个代表是否冲出赛道的out值置1。是否冲出赛道完全由前面的10个传感器决定,而后面的4个传感器只负责在适当的时候快速的消除震荡。get_sensor_line这个函数在赛车启动时动态的获得一个可以有效区分黑线与白色地面的分类值。它的工作原理是假设目前的传感器有一定有处于地面,或是黑线上的状态,此时它读入所有的传感器值,并找出最低值以及最高值,分类值被

26、设定在这两个值的算术平均上。以后当传感器的值小于这个界线时,那么传感器检测到了黑线,否则传感器处于白色地面上。没有直接使用传感器的模拟量进行加权的原因是调试过程过于困难,并且干扰过大。在黑线信息更新之后,判别起跑线以及其他判别函数将开始工作,而在这个信息被核心函数control_output获得之前,我们对其进行了一次抗干扰的滤波。这个滤波的思路非常简单,也非常实用。假设前排的传感器当前检测到黑线的是第3,4个,那么我们可以确定的认为下次检测到黑线的传感器必定是2,3,4,5之中的一个。而如果其余的传感器检测到了黑线则被忽略了。通过位与的技术可以很容易的实现这个算法。4.6 赛道识别赛道的分类

27、由函数path_classified、path_state、以及中断函_PJ_int共同完成。其基本的流程如图4.2 所示。其中path_state负责收集并整理初步的信息,_PJ_int在固定的时候调用path_classified来判断当前的赛道类型。我们使用了控制器输出的转角信息作为判定赛道类型的参数,并假设当低速时,预先设置的控制器可以获得非常好的反馈控制效果,此时得到的转角信息基本上可以用于确定赛道信息。在分类器中,判定当前是直线、左弯或是右弯的界线值是预先人为确定的,由于无法将所有的数据存储在RAM中进行详细的分析,我们通过人为预先找到这个值来优化程序。虽然损失了一些精度,但是极大

28、的节省了时间与空间。其中path_classified函数的算法如下:左右转之差 := 判为左转次数 判为右转次数判别值 := 判别总次数 / 3- 判别值 左右转之差 判别值 判为左转 否则 判为右转函数path_state的算法如下:转角输出总值 := 转角输出总值 + 当前输出转角如果输入满256次转角均值 := 转角输出总值 / 256-0x100 转角均值 0x100 判为左转转角均值 0x-100 判为右转4.7 赛道模型的存储与优化最重要的关于赛道模型的数据结构如下所示:typedef struct _uvstatebyte state;int length;int remain

29、s_length;struct _uvstate* next,* prev; uvstate;整个赛道被组织成由N个此节点组成的循环链表。在这个结构中state是赛道类型C,length是寻路过程中测得的长度,remains_length被用于实时的控制。一个经过寻路后组织并优化后的赛道模型看起来会像下面这样:右弯 22rS赛道 18r左弯 37r 直道 12 r直道 4r直道 20r 图 4.3 经过优化的赛道模型赛道模型的组织主要由函数update_path以及state_checkout来完成。update_path的工作原理是:如果当前识别出的赛道类型与前一个类型相同,那么长度会被加1

30、,否则则新建一个节点来存储。初步获得的赛道模型非常凌乱,其中的状态只有左弯,右弯,以及直线。实时的识别过程无法有效的获得S型弯道的信息,因此需要进行整理以及优化。state checkout是在模型的学习过程中最重要的一步。没有经过优化的原始模型是无法指导的。优化的过程中有非常多的情况,下面将一一列举我们采用的优化策略。1. 连续的不同短弯道应该被标记成S,包括其中的直道部分。2. 在S道合并完成后,所有的小于一个限定值长度的弯道都应该被忽略长度被加入到其前一个节点上。3. 一个短弯道后跟着一个很长的弯道,那么将短弯道标记为S,长弯道不应该被并入S,这样会提高性能,因为弯道的控制速度总是会比S

31、赛道高。4. 弯道后跟着的直道,如果长度较小,则应该被并入弯道。5. 不要处理第一个节点,起跑的那一段赛道不应该被做任何处理。6. 左弯-直道-左弯,类似于上面这种赛道情况应该被合并为一个大的左弯,除非直道非常长。在优化完成后,整个赛道模型就可以进行正常的工作了。注意整理与优化的策略必须与实际的控制策略相吻合。如果控制策略只区分普通赛道和S赛道两种,那么整个过程就完全不同了。我们的控制策略是将赛道分为直道,弯道以及S赛道分别进行控制。4.8 赛道模型的跟随问题最容易出现问题的就是赛道模型的跟随,即使手上有一张精确的电子地图,如果无法知道自己现在处于哪个位置,也不能起到任何的祈祷作用。解决这个问题的有效方式是通过当前走过的距离D,以及当前识别出的赛道类型来获得当前的位置。在实际的运

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1