




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I 第八届“飞思卡尔”杯全国大学生 智能汽车竞赛 技技 术术 报报 告告 目录目录 第一章第一章 引言引言.- 1 - 1.11.1 大赛介绍大赛介绍 .- 1 - 1.21.2 系统设计框架介绍系统设计框架介绍.- 2 - 第二章第二章 智能车机械结构调整与优化智能车机械结构调整与优化.- 3 - 2.12.1 智能车参数要求智能车参数要求.- 3 - 2.22.2 智能车整体参数调校智能车整体参数调校 .- 3 - 2.32.3 编码器安装编码器安装.- 5 - 2.42.4 陀螺仪与加速度传感器安装陀螺仪与加速度传感器安装.- 5 - 第三章第三章 硬件电路设计说明硬件电路设计说明.- 7 - 3.13.1 单片机最小系统模块单片机最小系统模块 .- 7 - 3.23.2 传感器模块传感器模块.- 7 - 3.33.3 电机模块电机模块.- 9 - II 3.43.4 测速模块测速模块.- 9 - 3.53.5 陀螺仪与加速度计模块陀螺仪与加速度计模块.- 10 - 3.6 人机交互模块人机交互模块 .- 11 - 第四章第四章 智能车控制软件设计说明智能车控制软件设计说明.- 12 - 4.1 MC9S12XS128 片资源简介片资源简介.- 12 - 4.2 MC9S12XS128 所用模块简介所用模块简介.- 13 - 4.2.24.2.2 PWMPWM 模块模块.- 13 - 4.34.3 软件功能与框架软件功能与框架 .- 14 - 4.44.4 控制算法与函数控制算法与函数 .- 16 - 4.54.5 辅助调试工具介绍辅助调试工具介绍.- 23 - 第五章第五章 系统调试系统调试.- 28 - 第六章第六章 车辆主要参数车辆主要参数.- 29 - 第七章第七章 总结总结.- 30 - 参考文献参考文献 .- 31 - 附录附录 1:部分程序源代码:部分程序源代码.- 32 - 第八届全国大学生智能汽车竞赛技术报告 - 1 - 第一章第一章 引言引言 1.11.1 大赛介绍大赛介绍 全国大学生智能汽车竞赛原则上该竞赛由竞赛秘书处为各参赛队提供/购置 规定范围内的标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车 调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性 的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为 一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、 传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规 则透明,评价标准客观,坚持公开、公平、公正的原则,保证竞赛向健康、普 及,持续的方向发展。 本次比赛分为光电、摄像头和电磁三个赛题组,在车模中使用透镜成像进行 道路检测方法属于摄像头赛题组,使用电磁信号巡线属于电磁赛题组,除此之 外则属于光电赛题组。本论文主要介绍光电赛题组的智能车制作。在这份报告 中,我们主要通过对整体方案、机械、硬件、算法等方面的介绍,详细阐述我 队在此次智能汽车竞赛中的思想和创新。具体表现在电路的创新设计、算法以 及辅助调试模块等方面的创新。 第八届全国大学生智能汽车竞赛技术报告 - 2 - 1.21.2 系统设计框架介绍系统设计框架介绍 系统是以检测赛道两边黑线为基础,通过单片机处理信号实现对车体控制, 实现车体能够准确沿着预设路径寻迹。系统电路部分需要包括单片机控制单元、 电机驱动电路、陀螺仪与加速度计电路、线性 CCD 电路等部分,除此之外系 统还需要一些外部设备,例如编码器测速、直流电机驱动车体和控制车体方向。 综上所述,本智能车系统包含了以下几个模块: 1.电源模块 2.单片机最小系统模块 3.传感器模块 4.电机模块 5.陀螺仪与加速度计模块 6.测速模块 7.人机交互模块 系统的整体模块如图1.2.1所示: 图1.2.1 系统框架图 智能车机械结构调整与优化 - 3 - 第二章第二章 智能车机械结构调整与优化智能车机械结构调整与优化 2.12.1 智能车参数要求智能车参数要求 1.传感器数量要求:传感器数量不超过16个:光电传感器接受单元计为1 个传 感器,发射单元不计算;CCD 传感器计为1 个传感器; 2.电机型号:RN260-CN -2875 3.全部电容容量和不得超过 2000 微法;电容最高充电电压不得超过 25 伏。 2.22.2 智能车整体参数调校智能车整体参数调校 智能车的整体参数,包括车体重心、高度、传感器排布方式等,都对整个 智能车系统的稳定运行起着至关重要的作用。因此,对智能车机械系统的调节, 有助于小车更快更稳定的运行。 小车的布局以精简、可靠、稳定为前提,通过对小车的布局,尽量保证小车 左右平衡,以及寻找一个合适的重心,保证小车既能稳定快速前进,又能在转 弯时流畅。光电组车模如图 2.2.1 所示 图 2.2.1 车模示意图 车模运行状态如图 2.2.2 所示 第八届全国大学生智能汽车竞赛技术报告 - 4 - 图 2.2.2 车模示意图 车模整体外观如图 2.2.3 所示 图2.2.3 车模整体外观 智能车机械结构调整与优化 - 5 - 2.32.3 编码器安装编码器安装 选用可以 5V 工作电压的 512 线 MINI 光电编码器进行速度的测量,保证 测量的精度。速度传感器用螺钉通过支架固定在后轮支架上,这样固定好之后, 就有了较高的稳定性。然后调节编码器齿轮,使其与差速齿轮紧密咬合,增大 测速的精确性,但是咬合过紧也增大了摩擦,减小了对电机做功的利用率,影 响小车的快速行驶,因此减小摩擦同时增强齿轮间的咬合是我们主要考虑的因 素。用齿轮润滑油涂抹齿轮有不错效果。编码器安装示意图如图 2.4.1 所示: 图 2.3.1 编码器安装示意图 2.42.4 陀螺仪与加速度传感器安装陀螺仪与加速度传感器安装 本次设计中陀螺仪采用的是村田公司的 ENC-03 系列的陀螺仪。智能车在 行进过程中,车体仅绕两后轮的轴心线做转动。芯片外观是长方形的,安装时, 应注意将长的一边与后轮轴心线平行。此外,还应注意的是,陀螺仪的输出受 温度的影响比较大,为避免环境温度变化对输出的影响,我们将陀螺仪和加速 度计作为一个单独的模块,采用 FFC 线与主板连接,安装在车身的背面。 与陀螺仪一样,加速度传感器的性能与安放位置也有很大的关系。加速度 传感器是根据其 XYZ 轴上的模拟输出电压来确定车身的倾角。由于我们测量的 倾角只有一个,所以可以使用 Z 轴的输出来计算,当小车倾角为 0 时,Z 轴对 应的面应该处于水平。 第八届全国大学生智能汽车竞赛技术报告 - 6 - 图 2.4.1 ENC-03 陀螺仪与加速度计 转直立陀螺仪位置不水平会造成弯加减速。而事实上即便在安装传感器 时非常小心,但陀螺仪芯片和陀螺仪电路板、陀螺仪电路板和主板、主板和车 轮之间都有位置误差,累计起来你的陀螺仪还是可能不平,我们使用了如下测 试陀螺仪倾斜程度的方法。将车身放置在一个推力轴承上,让车体在上面转动, 读取陀螺仪返回的数据。用这种方法矫正陀螺仪方便有效,如图 2.4.2 所示。 图 2.4.2 推力轴承 硬件电路设计说明 - 7 - 第三章 硬件电路设计说明 本智能车硬件系统以稳定为设计的原则,在有限的条件下做到最好。单片 机采用 MC9S12XS128。使用 LM2940-5 为各个模块供电,电机驱动使用芯片 BTS7970。调试过程中,采用 OLED、蓝牙等模块辅助,方便小车的调试。本章 均有详细介绍。 3.13.1 单片机最小系统模块单片机最小系统模块 以 MC9S12XS128 为核心的单片机最小系统是本智能车的核心。 图 3.1.1 主板电路 3.23.2 传感器模块传感器模块 线性 CCD 是光电组小车最重要的模块之一,能够分辨白色的赛道及黑色的边线,对道路 状况的检测起着至关重要的作用。 TSL1401 线性 CCD 传感器包含 128 个线性排列的光电二极管。每个光电二极管都有各自 的积分电路,以下我们将此电路统称为像素。每个像素所采集的图像灰度值与它所感知的 光强和积分时间成正比。 一般来说线性 CCD 模块的焦距是固定的,因此要想得到清晰的图像就需要通过调节镜头 第八届全国大学生智能汽车竞赛技术报告 - 8 - 的进出来解决。如果镜头拧的位置合适,则会得到清晰的图像,CCD 输出的数据在波形上 会表现的比较尖锐,如图 3.2.1 所示。 图 3.2.1 硬件电路设计说明 - 9 - 图 3.2.3 传感器排布方案 3.33.3 电机模块电机模块 电机采用芯片BTS7970,其应用非常简单,只需要向芯片第2 引脚输入 PWM 波就能控制。当系统中只需要单向控制时,只需要让电机一端接地,另 一端接BTS7960 第4 引脚。如果需要电机双向旋转控制,则需要另一片 BTS7960 共同组成全桥。由于小车使用双电机,所以我们使用4片BTS7970构 成两个全桥分别控制两个电机。 图 3.3.1 电机驱动电路 3.43.4 测速模块测速模块 本小车使用 512 线的光电编码器进行小车的测速,以保证测量精度,并且 直接有方向输出,使用方便。LM2940-5 为其提供 5V 工作电压。由于 第八届全国大学生智能汽车竞赛技术报告 - 10 - 只有一个脉冲计数器,我们采用分时复用的方式对左右 两轮计数。 图 3.4.1 多路选择器电路 3.53.5 陀螺仪与加速度计模块陀螺仪与加速度计模块 我们采用 AMS1117 为陀螺仪(ENC-03MB)和加速度计 (MMA7361)提供 3.3V 的工作电压。由于陀螺仪数据手册上的输出有过 冲,不利于积分,我们采用官方提供的电路。 3.5.1 陀螺仪电路 硬件电路设计说明 - 11 - 3.5.2 加速度计电路 3.6 人机交互模块人机交互模块 为了方便调试,本车有蓝牙模块,有效进行运行参数之间的传送,除此之 外,还设置了键盘、液晶显示屏,以方便控制参数的修改和智能车的调试。 第八届全国大学生智能汽车竞赛技术报告 - 12 - 第四章第四章 智能车控制软件设计说明智能车控制软件设计说明 4.1 MC9S12XS128 片资源简介 MC9S12XS128 微控制单元作为MC9S12 系列的16位单片机,由标准片上外围设 备组成,包括16位中央处理器、128KB的Flash 存储器、8KB的RAM、2KB的 EEPROM、两个异步串行通信接口、两个串行外围接口、一组8通道的输入捕捉或输 出捕捉的增强型捕捉定时器、两组8 通道10 路模数转换器、一组8通道脉宽调制 模块、一个字节数据链路控制器、29路独立的数字I/O接口、20路带中断和唤醒功 能的数字I/O 接口、5个增强型CAN总线接口。同时,单片机内的锁相环电路可使 能耗和性能适应具体操作的需要。MC9S12XS128片内资源表如图5.1: 智能车控制软件设计说明智能车控制软件设计说明 - 13 - 图 4.1 MC9S12XS128 片内资源 4.2 MC9S12XS128 所用模块简介 在整个系统设计中,用到了 5 个单片机基本功能模块:时钟模块、PWM 输出模块、 ECT 模块、串口通信模块以及普通 IO 模块。根据系统实际需求,对各个模块进 行了初始化配置,通过对相应数据寄存器或状态寄存器的读写,实现相应的功能。 4.2.14.2.1 时钟模块 XS12 单片机中有四个不同的时钟,即外部晶振时钟、锁相环时钟、总线时钟 和内核时钟。 当前电路板采用的是 16MHz 的有源晶振,因此外部晶振时钟为 16MHz;默认设置下,锁相环时钟为 80MHz,总线时钟为 40MHz,内核时钟为 16MHz。锁相环时钟与外部晶振时钟的倍、分频关系由 SYNR、REFDV 两寄存器 决定。总线时钟用作片上外围设备的同步,而内核时钟则用作 CPU 的同步,它决 定了指令执行的速度。 时钟模块初始化程序如下: void Pll_Init(void) CLKSEL = 0 x00; / disengage PLL to system PLLCTL_PLLON = 1; / turn on PLL SYNR = 0 x53; / 注意 VCOFRQ7:6;SYNDIV5:0;fVCO= 2*fOSC*(SYNDIV + 1) /(REFDIV + 1);fPLL= fVCO/(2 POSTDIV);BUS= fPLL/2 REFDV = 0 x07; / REFFRQ7:6;REFDIV5:0 POSTDIV = 0 x00; _asm(nop); _asm(nop); while(!(CRGFLG_LOCK = 1); /when pll is steady ,then use it; CLKSEL_PLLSEL = 1;/engage PLL to system; 4.2.24.2.2 PWMPWM 模块 脉宽调制模块有 8 路独立的可设置周期和占空比的 8 位 PWM 通道,每个通道配 第八届全国大学生智能汽车竞赛技术报告 - 14 - 有专门的计数器。该模块有 4 个时钟源,能分别控制 8 路信号。通过配置寄存器 可设置 PWM 的使能与否、每个通道的工作脉冲极性、每个通道输出的对齐方式、 时钟源以及使用方式(八个 8 位通道还是四个 16 位通道) 。PWM 模块的初始化 设置过程为: void PWM_Init(void) PWME = 0 x00; /输出通道使能位。1 可对外输出波形;0 不能对外输出波形。设置 之前先禁止 PWM 2 5 6 7 PWMPOL = 0 xff; / 通道对外输出波形先是高电平然后再变为低电平 PWMCLK = 0 xff; /用 clock_A,clock_B PWMCAE = 0 x00; / 0 为左对齐输出;1 为居中对其输出。只有输出通道关闭情况下 才可设置。 PWMCTL = 0 x00; /把 PWM 不级联 /PWMPRCLK = 0 x33;/时钟预分频,时钟 A 和 B 与分频 结果 CLKA=CLKB=E=5M. / PWMPRCLK0-7 PCKA 0 1 2 PCKB 4 5 6 / CLKA= Bus clock / (2 PCKA) CLKB= Bus clock / (2 PCKB) / CLKA=40M / (2 3)=5M CLKB= 5M PWMPRCLK = 0 x00; PWMSCLB=8; PWMSCLA=8; PWMPER0 = 250; PWMPER2 = 250; PWMPER4 = 250; PWMPER7 = 250; PWMDTY0 = 0; /初始时电机占空比为 0,即电机转速为 0. /占空比=PWMDTYx/PWMPERx PWMDTY2 = 0; PWMDTY4 = 0; PWMDTY7 = 0; PWME = 0 xb5; /PWM 使能 4.34.3 软件功能与框架 软件的主要功能包括有: 智能车控制软件设计说明智能车控制软件设计说明 - 15 - (1)各传感器信号的采集、处理; (2)电机 PWM 输出; (3)车模运行控制:直立控制、速度控制、方向控制; (4)车模运行流程控制:程序初始化、车模启动与结束、车模状态监控; (5)车模信息显示与参数设定:状态显示、上位机监控、参数设定等。 图 4.3.1 主程序框架 程序上电运行后,便进行单片机的初始化。初始化的工作包括有两部分,一部分 是对于单片机各个应用到的模块进行初始化。第二部分是应用程序初始化,是对 于车模控制程序中应用到的变量值进行初始化。 初始化完成后,首先进入车模直 立检测子程序。该程序通过读取加速度计的数值判断车模是否处于直立状态。如 果一旦处于直立状态则启动车模直立控制、方向控制以及速度控制。 车模的直立 第八届全国大学生智能汽车竞赛技术报告 - 16 - 控制、速度控制以及方向控制都是在中断程序中完成。通过全局标志变量确定是 否进行这些闭环控制。中断程序框图如图 4.3.2 所示。 图 4.3.2 中断服务程序 图 4.3.2 中,使用定时器,产生一毫秒的周期中断。中断服务程序的任务被均 匀分配在 0-4 的中断片段中。因此每个中断片段中的任务执行的周期为 5 毫秒,频 率为 200Hz。 将任务分配到不同的中断片段中,一方面防止这些任务累积执行时间超过 1 毫秒, 扰乱一毫秒中断的时序,同时也考虑到这些任务之间的时间先后顺序。 这些任务 包括: (1)电机测速脉冲计数器读取与清除。累积电机转动角度。累积电机速 度,为后面车模速度控制提供平均数; (2)启动 AD 转换。进行 20 次模拟量采 集,然后计算各个通道的模拟量的平均值。这个过程是对于模拟信号进行低通滤 波。 (3)车模直立控制过程。包括车模角度计算、直立控制计算、电机 PWM 输出 等。 (4)车模速度控制:在这个时间片段中,又进行 0-19 计数。在其中第 0 片 段中,进行速度 PID 调节。因此,速度调节的周期为 100 毫秒。也就是每秒钟调 节 10 次。 (5)车模方向控制:根据前面读取的电磁场检波数值,计算偏差数值。 然后计算电机差模控制电压数值。 4.44.4 控制算法与函数 4.4.14.4.1 直立控制程序设计 智能车控制软件设计说明智能车控制软件设计说明 - 17 - 平衡控制算法最重要的是滤波算法和控制算法。这里滤波的主要作用是使用加速 度计滤除陀螺仪的漂移,也可以说是将加速度计和陀螺仪的数据融合。其中滤波 算法有卡尔曼滤波,官方的互补滤波,不滤波。控制算法有PID和LQR线性二次型 调节器。卡尔曼滤波因为过于复杂而没有使用,官方互补滤波和卡尔曼滤波效果 相似而且简单,不滤波动态效果最好但是无法消除陀螺仪累积误差。最终我们选 用了官方互补滤波,因为陀螺仪数据必须是最重要的。 将车模角度和角速度乘以各自相应的系数就可以得到直立控制输出量4 图 4.4.1 直立控制算法框图 void AngleCalculate(void) float fDeltaValue; int nGyro_Angle,nGravityAngle; UINT8 Gyro_Angle_H,Gyro_Angle_L,GravityAngle_H,GravityAngle_L; UINT8 Gyro_H,Gyro_L; g_fGravityAngle = g_nCarAcceVal*Rz; g_fGyroscopeAngleSpeed = g_nCarGyroVal*Rgyro;/角速度单位转化 g_fCarAngle=g_fGyroscopeAngleIntegral; g_nCarAngle= (int)(g_fCarAngle/Rz); fDeltaValue=( g_fGravityAngle-g_fCarAngle)/Tz; g_fAngleDeltaValue=fDeltaValue; g_fGyroscopeAngleIntegral += ( g_fGyroscopeAngleSpeed + fDeltaValue ); /nGravityAngle=(int)(g_fGravityAngle*100); /GravityAngle_H=(byte)(nGravityAngle /GravityAngle_L=(byte)(nGravityAngle /send_buf5= GravityAngle_H; /send_buf6= GravityAngle_L; 第八届全国大学生智能汽车竞赛技术报告 - 18 - /GYROSCOPE_ANGLE_SIGMA_FREQUENCY; /nGyro_Angle=(int)(g_fCarAngle*100); /Gyro_Angle_H=(byte)(nGyro_Angle /Gyro_Angle_L=(byte)(nGyro_Angle /send_buf3= Gyro_Angle_H; /send_buf4= Gyro_Angle_L; /Gyro_H=(byte)(g_nCarGyroVal) /Gyro_L=(byte)(g_nCarGyroVal /send_buf7=Gyro_H; /send_buf8=Gyro_L; void AngleControl(void) float fValue; UINT8 AngleControl_H,AngleControl_L; int nAngleControl; g_fCarSpeedSet= g_fSpeedControlOut; fValue=g_fGyroscopeAngleSpeed*AngleDgainTemp*0.1+(g_fCarAngle)*AnglePgainTemp g_fAngleControlOut = fValue; /nAngleControl=(int)(g_fAngleControlOut*100); /AngleControl_H=(byte)(nAngleControl /AngleControl_L=(byte)(nAngleControl /send_buf9=AngleControl_H; /send_buf10=AngleControl_L; 4.4.24.4.2 速度控制程序设计速度控制程序设计 为了使得速度具有一定的物理含义,对于所取得的电机速度值需要进行单位转换。 根据定义单位的物理含义,可以确定速度单位转换的比例值。 智能车控制软件设计说明智能车控制软件设计说明 - 19 - 图 4.4.2 速度控制算法框图 void SpeedControl(void) float fDelta,fCarSpeedReal; float fP,fI; UINT8 fCarSpeed_H,fCarSpeed_L,fCarSpeedReal_H,fCarSpeedReal_L, fSpeedControlIntegral_H,fSpeedControlIntegral_L; int nfCarSpeed,nfCarSpeedReal,nSpeedControlIntegral; fCarSpeed = (g_nSpeedLeftCe+g_nSpeedRightCe)/2; fCarSpeedReal= (g_fSpeedAveRight+g_fSpeedAveLeft)*0.5; fCarSpeed=fCarSpeed_old*0.6+(g_fSpeedAveRight+g_fSpeedAveLeft)*0.2; g_fCarSpeed =fCarSpeed*CAR_SPEED_CONSTANT; fDelta = g_fSpeedGet- g_fCarSpeed; fP = fDelta * SpeedPgain; fI = fDelta * SpeedIgain; if( g_fSpeedControlIntegral =3)/8) ) if( fDelta 0 ) g_fSpeedControlIntegral += fI; else if( g_fSpeedControlIntegral 0 ) g_fSpeedControlIntegral += fI; else g_fSpeedControlIntegral += fI; fCarSpeed_old=fCarSpeed; /nfCarSpeedReal=(int)(fCarSpeedReal); /fCarSpeedReal_H=(byte)(nfCarSpeedReal /fCarSpeedReal_L=(byte)(nfCarSpeedReal /send_buf3=fCarSpeedReal_H; /send_buf4=fCarSpeedReal_L; /nfCarSpeed=(int)(fCarSpeed); /fCarSpeed_H=(byte)(nfCarSpeed / fCarSpeed_L=(byte)(nfCarSpeed / send_buf5=fCarSpeed_H; /send_buf6=fCarSpeed_L; /nSpeedControlIntegral=(int)(g_fSpeedControlIntegral*10); /fSpeedControlIntegral_H=(byte)(nSpeedControlIntegral /fSpeedControlIntegral_L=(byte)(nSpeedControlIntegral /send_buf7=fSpeedControlIntegral_H; /send_buf8=fSpeedControlIntegral_L; /缓冲函数 void SpeedControlOutput(void) 智能车控制软件设计说明智能车控制软件设计说明 - 21 - float fValue; UINT8 SuduControl_H,SuduControl_L; int nSuduControl; fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld; g_fSpeedControlOut=fValue*g_nSpeedControlPeriod/SPEED_CONTROL_PERIOD+g_ fSpeedControlOutOld; / nSuduControl=(int)(g_fSpeedControlOut*100); /SuduControl_H=(byte)(nSuduControl /SuduControl_L=(byte)(nSuduControl /send_buf11=SuduControl_H; /send_buf12=SuduControl_L; 4.4.34.4.3 方向控制程序设计方向控制程序设计 车模方向控制利用线性 CCD 采集到的赛道中心值与车身中心值的偏差值来计算车 模电机差值驱动电压。程序如下: void DirectionControl(void) static float fDelta,fDelta_Old; float fP,fD,Direction_P,Direction_D; UINT8 loss_flag=0; UINT8 fDelta_H,fDelta_L,fcenter_H,fcenter_L; int nfDelta,nfcenter; if(left_loss_flag=0) center = (left_edge+right_edge)/2; else if (left_loss_flag=0) fDelta = left_edge + half_plus -PHOTO_CENTER; center = left_edge + half_plus; else if (right_loss_flag=0) fDelta = right_edge - half_plus-PHOTO_CENTER; center = right_edge - half_plus; else fDelta=fDelta_Old; 第八届全国大学生智能汽车竞赛技术报告 - 22 - fP = fDelta*Direction_P*0.01; fD = fDelta_error*Direction_D*0.01; fDelta_Old = fDelta; g_fDirectionControlOutOld=g_fDirectionControlOutNew; g_fDirectionControlOutNew =fP +fD; /nfDelta=(int)(fDelta*10); /fDelta_H=(byte)(nfDelta /fDelta_L=(byte)(nfDelta /send_buf15=fDelta_H; /send_buf16=fDelta_L; /方向控制缓冲函数 void DirectionControlOutput(void) float fValue ; UINT8 DirectionControl_H,DirectionControl_L; int nDirectionControl; fValue = g_fDirectionControlOutNew-g_fDirectionControlOutOld; g_fDirectionControlOut=fValue*g_nDirectionControlPeriod/DIRECTION_CONTRO L_PERIOD+g_fDirectionControlOutOld; /nDirectionControl=(int)(g_fDirectionControlOut*100); /DirectionControl_H=(byte)(nDirectionControl /DirectionControl_L=(byte)(nDirectionControl /send_buf11=DirectionControl_H; /send_buf12=DirectionControl_L; 4.4.44.4.4 障碍的检测与控制障碍的检测与控制 今年的规则与前几届相比在赛道中设置了高度不超过 5mm 的障碍,这无疑增加 了小车稳定控制的难度,对于直立车难度更为明显。 智能车控制软件设计说明智能车控制软件设计说明 - 23 - 一开始我们采取的方案是不检测,直冲障碍,结果速度在 1.2m/s 左右就到了 瓶颈,即便是我们改变机械或者是调节直立参数,速度的提升也只有 0.2- 0.3m/s。后来我们仔细分析障碍的特征,结合上位机采集到的数据确定了三种过 障碍的方案。 方案一:利用超声波检测装置,此方案需要在车模已有的模块中单独增加一个超 声波模块,一开始检测障碍的效果很明显,但是随着赛道难度和复杂度的增加, 经常出现误检测的情况(例如经常将坡道检测为障碍) ; 方案二:利用车上现有的加速度计模块,检测竖直方向的分量变化,此方案的缺 点在于障碍检测不具有预见性,即只有当车模接触到障碍时才能检测到障碍,而 且路面稍有起伏也会造成对障碍检测的干扰; 方案三:直接用 CCD 检测障碍,由于障碍的颜色为黑色,所以可以利用 CCD 灰度 值的变化检测障碍,并进行减速控制。利用 CCD 还有一个好处是可以任意选择检 测路障的前瞻。 结合三个方案的优劣,我们最终选定方案三。 4.5 辅助调试工具介绍 一个好的调试工具可以加快小车的制作的过程,在实际制作当中我们也尝试过不同的上位 机,主要有一下三种 方案一:直接使用 freescale codewarrior 自带的调试工具 True-Time Simulator UINT8 capture_OK=0 ; UINT8 Capture_Enble=0; UINT8 Mainmenu2016 = Angle_Config, Speed_Config, Dir_Config , Acce_Zero , Gyro_Zero , Start , QiPao_En , SuDu_Set , Send_CCD , Diff , TeShuSaiDao , 附录附录 1:部分程序源代码:部分程序源代码 - 33 - red detect , Stop_Time , Detect_En , Luzhang_En , Biansu_En , XiaPo_En , ; UINT8 send_flag=0; UINT8 test_luzhang=0; UINT8 test = 0; UINT8 go_enable=0;/配置完毕出发 UINT8 send_enable = 0; UINT8 speed_enable=1; UINT8 cross_flag=0; UINT8 Luzhang_flag=0; UINT8 LuzhangDetect_flag=0; UINT8 Luzhang_enable=0; int Luzhang=0; UINT8 Luzhang_count=0; UINT8 Luzhang_Detect=0; UINT8 Luzhang_show=0; UINT8 Count_Delay=0; UINT8 Image_enable=1;/AD 采集中的变量定义 UINT16 Zero_Get_Value; /* */ /姿态控制中的变量的定义 float g_fAngleDeltaValue=0; int g_nCarAcceVal; int g_nCarGyroVal; /AD 读到的加速度和角加速度的电压均值 int g_nCarAngle; int ACCER_OFFSET =1468;/1490; /加速度计零偏值 V /1350 int GYRO_ZERO =1590 ; /陀螺仪零偏 V / 1633 int GYRO_ZERO_Temp=0; float g_fGravityAngle ; /转换后的陀螺仪角度 float g_fGyroscopeAngleSpeed;/转换后的陀螺仪角速度 float g_fCarAngle; /运算后的角度 float g_fGyroscopeAngleIntegral;/角速度积分后的角度 float g_fAngleControlOut=0; float AnglePgain = 0.36;/0.36;/0.4; 第八届全国大学生智能汽车竞赛技术报告 - 34 - float AngleDgain = 0.042;/0.042;/0.05; float AngleDgainTemp=0.0;/0.34; float AnglePgainTemp=0.0;/0.004; UINT8 Zero_Get_enable; /* */ /* */ /速度 PI 控制 int g_nSpeedRightCe; int g_nSpeedLeftCe; UINT8 g_nSpeedControlPeriod=0; float g_fSpeedSet=31.5;/31.5 float g_fSpeedZhidao=34.0; float g_fSpeedZhangai=27.5;/30.0 float g_fSpeedXiapo=27.0; float g_fSpeedQipao=30.0;/30.0 float g_fSpeedGet=0 ; / float SpeedP_Luzhang=0.2; float SpeedPgain =0.4;/0.810; float SpeedIgain =0.008;/0.017; float g_fSpeedControlOut=0.0; float g_fSpeedControlOut_Old=0.0; float g_fSpeedControlIntegral; float g_fSpeedControlOutOld; float g_fSpeedControlOutNew; float fCarSpeed=0; float g_fCarSpeed=0; UINT8 g_nSpeedControlCount; int g_nSpeedRightCount=0; int g_nSpeedLeftCount=0; float g_fSpeedAveRight=0; float g_fSpeedAveLeft=0; float g_fCarSpeedSet=0; UINT8 speed_control=1; float fCarSpeed_old=0.0; UINT8 first_to_speed=0; UINT8 SuDulvbo_Enable=0; UINT8 XianFuQieHuan=0; 附录附录 1:部分程序源代码:部分程序源代码 - 35 - UINT8 Hufuwanbi=0; UINT8 JianSu_flag=0; /* */ /* */ /方向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西会展管理师考试题库及答案
- 青岛网约车人证考试题库及答案
- 安徽省计算机vb考试试题及答案
- 植被恢复生态补偿机制-洞察与解读
- PM心功能评估方法-洞察与解读
- 2025年病历管理制度与病历书写规范考试题(带答案)
- 2025年低碳节能减排知识竞赛题库(含答案)
- 社区农田种植共享协议
- 战略合作协议及业务资源整合
- 2025年事业单位招聘考试综合类职业能力倾向测验真题模拟试卷(考前模拟训练备考)
- DB4201∕T 630.1-2020 中小学生研学旅行 第1部分:服务机构评定与服务规范
- 学生文明上网班会课件
- 叮当快药大健康生态圈战略解析
- 数学评比活动方案
- TCPUMT 034-2025 工业数字孪生 数字模型与数据集成交换要求
- 曹植的故事课件小学生
- 【艾瑞咨询】2024年中国健康管理行业研究报告494mb
- 施工作业安全管理制度
- 2025年房地产经纪人考试题及答案
- 4.3禁止生物武器
- 康复治疗技术专业实训室设计方案
评论
0/150
提交评论