技术文档.docx

上传人:b****7 文档编号:9269036 上传时间:2023-02-03 格式:DOCX 页数:104 大小:1.04MB
下载 相关 举报
技术文档.docx_第1页
第1页 / 共104页
技术文档.docx_第2页
第2页 / 共104页
技术文档.docx_第3页
第3页 / 共104页
技术文档.docx_第4页
第4页 / 共104页
技术文档.docx_第5页
第5页 / 共104页
点击查看更多>>
下载资源
资源描述

技术文档.docx

《技术文档.docx》由会员分享,可在线阅读,更多相关《技术文档.docx(104页珍藏版)》请在冰豆网上搜索。

技术文档.docx

技术文档

第一届“飞思卡尔”杯全国大学生

智能汽车邀请赛

技术报告

 

学校:

浙江大学

队伍名称:

捷豹队

参赛队员:

顾弘张进锋裘君

 

带队教师:

颜文俊

 

 

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

本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:

参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名:

日期:

 

目录

第一章引言1

第二章智能车控制系统设计5

2.1控制系统总体框架5

2.2模型的获得5

2.3参数调节器6

2.4模型跟随问题6

第三章智能车硬件设计9

3.1单片机资源分配9

3.2电源管理9

3.3直流电机驱动电路11

3.4霍尔开关电路11

3.5串行LED显示电路12

3.6传感器电路及其排布13

3.7机械结构的安装14

第四章智能车软件设计17

4.1实际的控制系统17

4.2程序流程17

4.3底层驱动程序19

4.4通用的转角,速度计算程序19

4.5黑线信息更新20

4.6赛道识别21

4.7赛道模型的存储与优化22

4.8赛道模型的跟随问题23

4.9偏差及补偿24

4.10各赛段控制算法25

4.10.1直线段25

4.10.2弯道25

4.10.3S型赛道25

4.10.4制动函数26

4.10.5限速函数26

第五章调试过程与主要技术参数29

5.1开发工具与调试方式29

5.2主要技术参数30

第六章不足与发展方向31

6.1震荡问题31

6.2速度控制31

6.3方向测量31

6.4通过传感器的偏移速度对系统进行微调31

6.5在普通的算法上即时的判断道路类型32

6.6误差补偿32

6.7赛道模型的优化问题32

6.8三种控制思路33

参考文献35

附录A程序源码37

Main.c37

Control.c40

State.c60

State.h66

Config.h67

Control.h75

第一章引言

搭建硬件平台的目标是尽量使得硬件平台稳定,简洁,通过软件算法的开发来获得好的效果。

在黑线寻迹的方式上我们采用了标准的红外检测电路,并通过A/D直接将获得的模拟量读入控制器。

在实际判断黑线的过程中,我们设计了一个非常简洁有效的分类器,这个分类器会在启动时确定一个最佳的界限值,并保证小车在实际的运行过程中可以很好的识别出黑线。

为了调试方便,我们在每一个传感器附近放置了一个LED来获得直观的黑线信息,由于直接使用传感器输出的模拟量来获得转角的变化非常困难,因此在软件内部仍旧使用了数字量信息,上述分类器实现了这个转换。

另一个用于调试以及具备显示功能的是一个串行的数码管排列组,它由4个7段数码管组成,可以使用标准的同步串口方式来控制。

电源部分以及电机的驱动部分非常简单。

电源部分提供标准的5V以及舵机使用的6V电压,电机的驱动采用了组委会提供的MC33886芯片。

电机的驱动部分我们提供了正转,反转以及急停等功能,在实际的运行过程中,在大型的弯道以及S型的赛道之前,我们赛车会有一个急停的动作来快速的降低进弯速度,保证运行的稳定。

在本次的设计中我们没有应用高精度的光电编码盘,去而代之的是用于测量后轮转过圈数的霍尔传感器,在后轮的内侧安装4块小型的磁铁。

这里采用了方便的开关霍尔器件,输出的信号经过中断被数字控制器获得。

它的用途并不使用于测量速度,而是位移。

在PCB板制作的初期我们就考虑了安装问题并在相应的位置放置了足够大的孔,整个控制板通过排针被安装在底层的驱动板上,机械固定也非常简洁。

安装好的完整的小车如下图所示。

在调试的初期为了很好的测试传感器排布对于赛车行进的影响,我们专门制作了专门的小板子,通过小板子不同连接来获得不同的排列,在后面的调试过程中我们一直使用倒V型和一字型的排列。

两者各有好处。

最后我们采用了稳定的一字型排列。

图1.1是我们最后用于参加比赛的小车。

在使用光电传感器的情况下,软件的设计通常有两种方案,一种是直接使用PID或者是类似与PID的控制,其中也包括模糊控制。

这类思路通常在不同的跑道上需要调节不同的参数才能达到最佳,而像一些包括特殊跑道的情况下,由于无法预知赛道的类型,除非降低最高速度,否则会有跑出赛道的危险。

它的好处是实现非常简单,并且具有无后效性,即使在某个地方跑出赛道,在那一点回到赛道后仍可以很好的运行。

 

图1.1小车的最终版本

另一种方案需要知道当前赛道的模型,包括长度以及弯道的信息。

在这类控制中通常需要一个知识库来存储所需的模型以及相应的控制方法,它实际是一种有监督的控制算法。

如果具有精确的传感器,比如在赛道上方装有摄像头,可以实时的判别赛道信息,并控制赛车在不同的赛段上调用不同的控制方法,动态的调节控制参数。

可以将赛道本身作为一个控制模型,在小车的控制过程中根据这个模型来调节控制参数。

这是一种自适应的方法。

这种方法的好处非常明显,在稳定性上可以有非常大的提高。

还有一种折中的办法是实时的检测道路,并且动态的转换控制方法。

由于赛车的速度较快并且对于速度的控制具有很大滞后,我们尝试过这样的控制,效果并不理想。

无论采取哪种方案,底层的速度控制以及转角控制都是非常关键的部分。

速度与转角控制可以单独分离进行控制,在这类单变量的控制方式中,经典控制理论是非常实用的。

文献[1]以及文献[2]都对单变量控制的经典问题进行了论述,并提供了非常多的设计控制器的方法,是非常好的参考资料。

文献[3]详细涉及了离散系统下的PID控制方式以及设计方法,其中也涉及到了一些常用的数字滤波技术。

在道路识别以及黑线的信号检测方面,文献[4]是绝佳的参考资料,其中设计的各种分类器的设计以及学习的方式,在这次的控制软件中涉及到了很多与此相关的内容。

文献[5]是有关模型跟随以及自适应控制的经典书籍。

为了获得更好的控制效果,我们分别尝试了第一种以及第二种控制方案,在下面的章节将会详细的介绍各个部分的设计以及实物,包括硬件设计以及控制系统的设计。

在第二章中将会详细的论述控制系统的设计思路及工作方式,我们最后采取了类似于第二种方案,但做了一些简化以及处理的方案。

在第三章中将给出硬件部分的设计框架以及具体的实物。

第四章涉及了所有的软件部分,包括各个分类器以及控制算法的具体实现。

第二章智能车控制系统设计

2.1控制系统总体框架

一个非常健壮,有效的只能车控制系统如图2.1所示,这个框架非常类似于图2.1所示,这个框架非常类似于文献[5]中所提及的MRAS(model-referenceadaptivesystem),在自适应控制中这是一个非常有效的改善控制系统性能的方法。

图2.1控制系统总体框架

三种可行的方案实际上都能用这个图来描述,当控制模型以及参数调节器对控制器的影响退化为零时,那么整个系统就是一个普通的控制过程,相对应于之前的第一种方案。

而第二种方案以及最后提及的那种方案都需要控制模型以及参数调节器的参与。

但是最后的那种方案由于参数调节滞后因此无法有效的提高速度。

2.2模型的获得

在第二种方案中,我们需要一个有指导作用的控制模型,这个模型的基础就是赛道信息。

如果可以使用摄像头来获得精确的俯视图,并且可以知道赛车在运行过程中的坐标位置,那么可以通过图像识别等技术来获得一个非常有效的控制模型。

但是大赛的规程不允许使用外围的摄像头。

为此我们根据赛道的特点设计了另一种描速赛道以及赛车运行位置的方法,原先的位置信息由2维坐标p=(x,y)组成,由于无法获得二维的坐标,我们将位置信息坐标进行简化。

假设赛道是连续的,那么赛车在赛道上运行的位置信息可以由这个点到赛道起点的距离D来描速。

这里的D并不是简单的直线距离而是赛车由起点开始,沿着赛道路径到达这个点所经过的距离。

由于位置信息的简化,赛道的有效信息也被丢失了。

影响赛车参数的最重要信息是弯道信息。

我们用C来表示位置D所处的道路信息,这里C为{l,r,b,s}之一。

其中l,r,b,s分别代表左弯道,右弯道,直线以及S型弯道。

这是根据赛道的特征提取出的有效信息,而如弯道的曲率等等信息则因为难以测定而被省略了。

现在赛道的信息被简化为Point=(D,C),而我们测定的模型实际上就是由上述格式的离散的点组成的线段。

我们获取赛道模型的方法是在第一圈的时候以一个较为稳定的低速运行,并记录下所需的信息。

由于单片机的存储容量有限,赛道信息的获得是实时的。

经过调试以及一些必要的优化,我们可以在1K内存的使用量下非常好的记录下整个赛道的模型。

实际的对获取的数据进行处理并转换为控制模型的过程将在第四章中详细的说明。

这里只对模型的组织作一个概述。

整个赛道被组织成一个环形的链表,每个链表的节点保存了某个赛段的长度以及其特征。

控制模型根据赛车在实际的运行过程中检测的位置信息以及角度输出来获得模型识别的必要特征,影响参数调节器的工作。

2.3参数调节器

参数调节器的设计完全是离线的,根据不同的赛道模型进行不同的控制方式。

我们的软件设计结构允许我们完全的改变控制方式,而不仅仅是调节参数那么简单。

具体的设计细节将在后面给出。

2.4模型跟随问题

在赛道模型确立好之后,赛车将在模型的指导下进行控制,但是由于此时赛车的速度必须提高,可能会出现冲出跑道等等不可知因素,这些干扰会使得赛车无法与精确的模型相对应。

这种算法最为关键,也是最困难的部分就是在于已知模型与实际环境的偏差。

由于在建立模型时将赛道的很多信息忽略,只保留了相对与起跑线的距离以及关键信息,如果赛车过多的偏离赛道,那么实际经过的距离就会比模型中保存的值要长。

这里需要作一点补偿,比如冲出跑道后必须在原模型的基础上加上一个适当的值来消除距离上的偏差。

这个问题非常难以解决,多段赛道之后的累计误差可能会使得模型与实际情况完全对应不上。

在第四章中将详细的论述这个问题,并给出我们的解决方案。

第三章智能车硬件设计

3.1单片机资源分配

我们采用了组委会提供的S12单片机核心板(大板)作为我们的核心控制器,在硬件的设计过程中,我们利用了单片机的一部分I/O口,以及所有的A/D转换通道来获得所需的控制效果。

详细的资源分配情况如下表所示:

表3.1详细资源分配

用途

使用资源

前端10个光电传感器信号

AN00-AN07,AN12,AN13

后端4个光电传感器信号

AN08-AN11

舵机PWM信号

PWM1

直流电机PWM信号

PWM3

直流电机控制信号

PA0,PA1,PA2

直流电机错误信号(中断)

PJ0

LED串行接口控制信号

PS0-PS4

前端10个LED控制信号

PB0-PB7,PT4,PT5

后端4个LED控制信号

PA4-PA7

霍尔信号检测(中断)

PJ1

3.2电源管理

在本次的设计中没有使用诸如CCD或者运放等需要12V电压的电路,因此只需要提供单片机所需要的5V以及舵机使用的6V电压即可。

对于单片机的稳压电路稍微要求严格了一些,使用普通的317或是7805稳压在直流电机转速忽然增大时会造成电压不稳定,即使加上严格的滤波电路也无法消除。

这里我们使用了LM2940低压稳压芯片来获得较为稳定的电压,实际的测量结果是只要电池电压不低于7V,单片机就可以一直正常工作。

而舵机使用的6V稳压电路则使用了LM1117-ADJ的标准电路。

实际使用的电路如下图所示:

 

图3.1LM2940稳压电路

 

图3.2LM1117标准电路

但是由于我们在电子市场没有买到LM1117-ADJ低压可调稳压芯片,我们使用了LM317芯片来代替它,并提供了一个跳线可以选择使用6V电压来给舵机提供动力或是直接使用电池电压。

3.3直流电机驱动电路

我们使用了MC33886作为直流电机的驱动芯片,并采用了推荐的标准电路。

考虑到在赛车的行进过程中需要用到制动功能,通过3个I/O口来控制33886的三跟信号线,实际的电路图与datasheet中推荐的典型电路完全相同。

 

图3.3MC33886的实际驱动电路

在实际的控制过程中,将PA0口置为0是前进方式,将PA1口置为1是制动方式。

3.4霍尔开关电路

考虑到霍尔传感器的实现可以采用线性霍尔元件以及霍尔开关器件,因此为了支持线性霍尔器件,我们在驱动板上包括了一个电压比较器,用于将线性霍尔元件的输出电压转换为数字信号。

电压比较器使用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根电源线以及1根地线来控制。

其具体的原理图可以在附录中查到。

 

图3.64个LED显示基本信息

3.6传感器电路及其排布

我们使用了标准的传感器电路来获得黑线信息,并使用了固定大小的电阻。

传感器的输出电压直接通过A/D转换通道进入数字控制器,为了调试方便以及美观,在每个传感器边上都安装了一个发光二极管,并且由单独的一个I/O口来控制其状态。

单个的光电传感器检测电路非常简单,图3.7显示了一个传感器的电路。

 

图3.7单个的光电传感器检测电路

在硬件的外部我们没有加任何的信号滤波电路,由环境光引起的环境干扰不能通过RC滤波网络简单的滤除,实际上只通过软件就可以基本去除。

在调试的过程中我们曾经采取了多种传感器排布方案,包扩外八,内八以及直线型。

最后选定的是稳定的一字型的排列方式。

图3.8显示了我们的传感器排列的进化过程

实际的测试过程表明,一字型在各种赛道上的平均性能是最好的。

而V型的传感器在赛道识别的过程中非常的实用,但是在实际的运行过程中并没有什么优势。

图3.8传感器排列形式

3.7机械结构的安装

在电路板的安装上,由于预先在PCB板上制作了孔,因此只是简单的用螺丝拧紧即可。

图3.9显示了完全安装好的小车。

在前排的传感器安装上,我们使用了小车原来提供的材料,图3.10显示了前排传感器的安装,这样的设计可以使得前排传感器在一定的范围内前后调整。

在各个部件的安装上,我们都尽量利用的赛车自带的配件。

 

图3.9安装好的小车

 

图3.10前排传感器的安装

第四章智能车软件设计

4.1实际的控制系统

在第二章中给出的控制系统只是一个简要的设计框图,下面给出系统的详细说明。

图4.1是系统的详细框架。

在学习赛道的过程中,没有涉及到具体的速度控制,只是将速度固定到一个固定的值即可。

这里没有涉及到速度的精确控制,对于速度只是一个开环控制。

霍尔传感器被安装到后轮上被用于检测走过的距离,单位是后轮的一周。

图4.1控制系统详细框架

4.2程序流程

实际的程序流程分为学习阶段以及实际的运行阶段。

学习阶段的程序流程如下所示:

图4.2学习阶段程序流程图

在第一次检测到起跑线的之后开始启动学习过程,到下一次检测到起跑线为止结束学习过程。

当学习过程结束后,就开始了实际的运行过程,其流程图如图4.3所示。

在实际的运行过程中,每个不同的赛道类型都将被不同的进行控制,最明显的是直线以及弯道,我们调用了不同的控制方法。

在具体的控制过程中,使用了查表来加速每一个周期的处理过程。

而不同的赛段表格都是不同的。

 

图4.3实际的运行过程

4.3底层驱动程序

底层的驱动程序包括舵机的驱动,直流电机驱动,光电传感器的信号检测,霍尔开关信号检测,以及LED的驱动部分。

这些驱动程序通常很简短,在后面所附的代码中可以很快的找到,这里不再详细论述。

4.4通用的转角,速度计算程序

在任何一种控制情况下,我们都有的一张转角控制表以及速度控制表用于有效地计算最佳的控制输出,这张表通常是一个4*10的二维表,其各个元素分别对应后面的4个传感器以及前面10个传感器的组合。

这个控制表实际上是一个P控制的原型,在实际的运行过程中,可能会有几个传感器同时发亮的情况,此时将由计算程序给出一个均值从而获得一个平滑的效果。

这个简单的计算过程由control_output函数完成。

在我们的程序中没有I,D(积分,微分)环节。

这个函数贯穿了整个控制系统,下面将详细列出其算法。

control_output函数的计算过程如下:

ValidSensorCount:

=0

FrontMotorOutput:

=0

BackMotorAcceleration:

=0

Foreverybacksensor

Ifdetectblackline

Foreveryfrontsensor

Ifdetectblackline

FrontMotorOutput:

=FrontMotorOutput+TH[B][F]

BackMotorAcceleration:

=BackMotorAcceleration+TA[B][F]

ValidSensorCount:

=ValidSensorCount+1

Endif

EndFor

Endif

Endfor

其中TH和TA分别是前轮的转角表格以及加速度表格。

这个函数是底层控制器的最核心算法。

4.5黑线信息更新

调用update_state这个函数是更新黑线信息的唯一方法,除了读入传感器的值并将其转换为数字量之外,还需要判断现在是否已经脱离的黑线,如果脱离了黑线则必须使用上次有效的结果来替代,并将一个代表是否冲出赛道的out值置1。

是否冲出赛道完全由前面的10个传感器决定,而后面的4个传感器只负责在适当的时候快速的消除震荡。

get_sensor_line这个函数在赛车启动时动态的获得一个可以有效区分黑线与白色地面的分类值。

它的工作原理是假设目前的传感器有一定有处于地面,或是黑线上的状态,此时它读入所有的传感器值,并找出最低值以及最高值,分类值被设定在这两个值的算术平均上。

以后当传感器的值小于这个界线时,那么传感器检测到了黑线,否则传感器处于白色地面上。

没有直接使用传感器的模拟量进行加权的原因是调试过程过于困难,并且干扰过大。

在黑线信息更新之后,判别起跑线以及其他判别函数将开始工作,而在这个信息被核心函数control_output获得之前,我们对其进行了一次抗干扰的滤波。

这个滤波的思路非常简单,也非常实用。

假设前排的传感器当前检测到黑线的是第3,4个,那么我们可以确定的认为下次检测到黑线的传感器必定是2,3,4,5之中的一个。

而如果其余的传感器检测到了黑线则被忽略了。

通过位与的技术可以很容易的实现这个算法。

4.6赛道识别

赛道的分类由函数path_classified、path_state、以及中断函_PJ_int共同完成。

其基本的流程如图4.2所示。

其中path_state负责收集并整理初步的信息,_PJ_int在固定的时候调用path_classified来判断当前的赛道类型。

我们使用了控制器输出的转角信息作为判定赛道类型的参数,并假设当低速时,预先设置的控制器可以获得非常好的反馈控制效果,此时得到的转角信息基本上可以用于确定赛道信息。

在分类器中,判定当前是直线、左弯或是右弯的界线值是预先人为确定的,由于无法将所有的数据存储在RAM中进行详细的分析,我们通过人为预先找到这个值来优化程序。

虽然损失了一些精度,但是极大的节省了时间与空间。

其中path_classified函数的算法如下:

左右转之差:

=判为左转次数–判为右转次数

判别值:

=判别总次数/3

-判别值<左右转之差<判别值判为直线

左右转之差>判别值判为左转

否则判为右转

函数path_state的算法如下:

转角输出总值:

=转角输出总值+当前输出转角

如果输入满256次

转角均值:

=转角输出总值/256

-0x100<转角均值<0x100判为直线

转角均值>0x100判为左转

转角均值<0x-100判为右转

4.7赛道模型的存储与优化

最重要的关于赛道模型的数据结构如下所示:

typedefstruct_uvstate{

bytestate;

intlength;

intremains_length;

struct_uvstate*next,*prev;

}uvstate;

整个赛道被组织成由N个此节点组成的循环链表。

在这个结构中state是赛道类型C,length是寻路过程中测得的长度,remains_length被用于实时的控制。

一个经过寻路后组织并优化后的赛道模型看起来会像下面这样:

右弯22r

S赛道18r

左弯37r

直道12r

直道4r

直道20r

图4.3经过优化的赛道模型

赛道模型的组织主要由函数update_path以及state_checkout来完成。

update_path的工作原理是:

如果当前识别出的赛道类型与前一个类型相同,那么长度会被加1,否则则新建一个节点来存储。

初步获得的赛道模型非常凌乱,其中的状态只有左弯,右弯,以及直线。

实时的识别过程无法有效的获得S型弯道的信息,因此需要进行整理以及优化。

statecheckout是在模型的学习过程中最重要的一步。

没有经过优化的原始模型是无法指导的。

优化的过程中有非常多的情况,下面将一一列举我们采用的优化策略。

1.连续的不同短弯道应该被标记成S,包括其中的直道部分。

2.在S道合并完成后,所有的小于一个限定值长度的弯道都应该被忽略长度被加入到其前一个节点上。

3.一个短弯道后跟着一个很长的弯道,那么将短弯道标记为S,长弯道不应该被并入S,这样会提高性能,因为弯道的控制速度总是会比S赛道高。

4.弯道后跟着的直道,如果长度较小,则应该被并入弯道。

5.不要处理第一个节点,起跑的那一段赛道不应该被做任何处理。

6.左弯-直道-左弯,类似于上面这种赛道情况应该被合并为一个大的左弯,除非直道非常长。

在优化完成后,整个赛道模型就可以进行正常的工作了。

注意整理与优化的策略必须与实际的控制策略相吻合。

如果控制策略只区分普通赛道和S赛道两种,那么整个过程就完全不同了。

我们的控制策略是将赛道分为直道,弯道以及S赛道分别进行控制。

4.8赛道模型的跟随问题

最容易出现问题的就是赛道模型的跟随,即使手上有一张精确的电子地图,如果无法知道自己现在处于哪个位置,也不能起到任何的祈祷作用。

解决这个问题的有效方式是通过当前走过的距离D,以及当前识别出的赛道类型来获得当前的位置。

在实际的运

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

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

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