资讯详情

基于RT-Thread全向赛车控制算法开发

学 校:山东大学(威海) 队伍名称:海韵三队 参赛队员:陈锐、李昕隆、王艺晓 带队教师:王小利

简 介: 本文完成了基于摄像头和麦克纳姆轮的独立搜索,包括控制系统硬件设计、汽车结构调整和软件开发。本文首先介绍了基于摄像头跟踪智能汽车系统的原理,然后介绍了系统的软硬件设计方案,汽车系统设计包括具机械结构调整、模块电路设计、传感器信号处理、控制算法和汽车调试方法,最终完成了汽车的生产。秦恒公司的单片机智能汽车设计CH32V103R8T6.数字摄像头用于控制核心MT9V032采集轨道元素信息,角度编码器获取车速,使用 IPS液晶显示屏 、辅助调试手段是拨码开关和按键。本文移植了软件RT-Thread操作系统,并应用了RT-Thread将信号、邮箱、线程、事件集等功能函数添加到整体软件设计中。为了提高汽车的稳定性,设计中对摄像头数据进行了二次处理,并采用了增量式PID该算法实现了汽车的加减速和转向。在开发系统软件时使用 MounRiver 编写代码集成编译环境。经过大量的软硬件测试实验,本项目设计的麦克纳姆轮跟踪车可以在指定的轨道上实现稳定高速的跟踪运动。

§01


全国大学生智能汽车竞赛由教育部自动化专业教学指导委员会主办。本次比赛以立足培养,注重参与,鼓励探索,追求卓越为基础 为了指导思想,旨在促进高校素质教育,培养大学生的综合知识应用能力、基程实践能力和创新意识。智能汽车竞赛涉及自动控制、模糊识别、传感技术、电子、电气、计算机、机械、汽车等学科,为大学生提供了充分展示想象力和创造力的舞台,吸引了越来越多不同专业的大学生参与,激发了大学生的创新思维,对其实践、创新能力和团队精神具有重要价值。

比赛过程包括理论设计、实际生产、车辆调试、现场比赛等环节,要求学生组成团队,合作,初步体验从设计到实现的工程研发项目的全过程。竞赛融合了科学性、趣味性和观赏性。它是一场快速发展、广阔前景的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械、汽车等多学科专业的创意竞赛。本竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,保证竞赛向健康、普及、持续的方向发展。 RT-Thread由中国公司开发的开源实时操作系统,易于切割,支持各种标准接口,支持各种标准接口MCU而且还有架构AT命令、TCP/IP协议栈、图形用户界面等多种功能组件。RT-Thread移植到操作系统CH32V利用其提供的资源开发103可以大大提高CPU更快地处理轨道信息。

本文是本届海韵三队对最终参赛车模的总体总结,提炼了生产过程中的技术细节。参考文献:《C 语言程序设计教程阐述了C语言语法和程序设计的基本理念,模拟电子技术基础详细讨论了交通电路的设计和分析,嵌入式系统设计实际战斗嵌入式系统开发调试方法简要介绍了智能汽车生产的实际生产。

本文将在后面的文本部分按顺序解释:

  1. 模型车设计生产的主要思路和技术方案的总体说明;
  2. 模型车结构设计;
  3. 电路设计说明;
  4. RT-Thread移植操作系统;
  5. 软件控制设计;
  6. RT-Thread应用于智能车;
  7. 7.RT-搭载

§02 型车设计制作


一、主控芯片

由于智能车大赛全向组是新组,只允许使用WCH单片机系列。我们终于采用了CH32V103芯片。CH32V1系列MCU产品使用RISC-V3A支持处理器和架构RV32IMAC开源指令。最高工作频率80MHz,内置高速存储器,提高指令访问速度。多条总线在系统结构中同步工作,提供丰富的外设功能和增强型I/O端口。内置本系列产品RTC、时钟安全机制12位ADC转换模块、多组定时器、16通道触摸按钮电容检测(TKey)其他功能还包括标准通信接口:2I2C接口、2个SPI接口、3个USART接口、1个USB2.0 全速主机/设备接口(全/低速通信)。

二、稳压电路

电源模块为系统的其他模块提供所需的电源。在设计中,除了电压范围、电流容量等基本参数外,还应优化电源转换效率、降噪、防止干扰和电路简单。可靠的电源方案是整个硬件电路稳定可靠运行的基础。

电源分为开关电源和线性电源。线性电源的电压反馈电路处于线性状态,开关电源是指在饱和截止区域工作的管道。线性电源通常取样输出电压,然后参考电压 输入比较电压放大器,该电压放大器的输出作为电压调节管的输入进行控制 调整管道使其结电压随输入而变化,从而调整其输出电压, 但是开关电源是 通过改变调整管的开关时间,即占空比来改变输出电压。

线性电源技术非常成熟,生产成本低,稳定性高,波纹小,无开关电源干扰和噪声,开关电源效率高,损耗小,可降压或升压,但交流波稍大。

所有硬件电路的电源由两节索尼组成VTC6,18650锂电池(3000mah 30A)大容量、大电流放电池串联提供(额定电压7.4V,满电电压8.4V)直接为主板和驱动板供电。同时,由于四台电机所需的驱动电流较大,选择安装40台大电流成品A电池保护板(图2.1)。

▲ 图2.1 电池和电池保护板

由于电路中不同电路模块所需的工作电压和电流容量不同,电源模块应包含多个稳压电路,将充电电池电压转换为各模块所需的电压。为满足需要,检查故障,检查电路正常运行,安装各输出LED(共5个)车型上有3种电源电路:

(1) 输出电压6V舵机供电:

  • 方案一:使用AS(图2).2)
  • 方案二:使用SY82555FCC芯片;(图2.3)

▲ 图2.2 基于AS1015芯片6V舵机电源模块原理图

▲ 图2.3 基于SY82555FCC芯片6V多级电源模块原理图

(2) 使用LM2940G稳压芯片输出电压5V。

核心板、无线串口、蜂鸣 (图2.4)

▲ 图2.4 基于LM2940G芯片5V电压模块原理图

(3) 使用两路RT9013稳压芯片分别输出电压3.3V

一路单独给摄像头供电。 另一种方式是为编码器、显示屏和陀螺仪供电。.5)

▲ 图2.5 基于RT9013芯片的3V电压模块原理图code

三、驱动电路的选择

H车模由四个电机组成。本车搭载两个双电机驱动板。

使用DRV8701ERGET和MOS桥电路驱动电机,同时为避免电流反冲进芯片造成芯片损坏,我们使用隔离芯片为桥电路提供信号。驱动电路为经典的 H 桥控制电路,该电路为通过控制四个 MOS 管的开通和关断来控制电机的运转,驱动电路主体部分为一个由 4 个 MOS 管组成的 H 桥电路,此 H 桥电路为可逆双极性全桥驱动器,4 个 MOS 管为 N 沟道功率 MOSFET 管,额定工作电流可轻松达到 100A 以上,提高了电动机的工作转矩和转速。同时为了检验轮子转向,驱动板功能正常,每向电机加装两个转向LED。(图2.6)

▲ 图2.6 基于DRV8701ERGET的驱动电路

四、人机交互模块的设置

为了方便调试,本车留有蓝牙模块接口,有效进行运行参数之间的传送,除此之外,还设置了拨码开关,按键,OLED 液晶显示屏,蜂鸣器等以便控制参数的修改,便捷了智能车的调试。

五向按键和拨码开关,可以对这些参数进行更改,避免多次烧写程序:

(原采用五路拨码开关 图2.7,后采用一路拨码开关外加电磁接口 图2.9)

▲ 图2.7 五向按键与拨码开关

▲ 图2.8 五向按键与电磁接口

LED 灯指示作用;蜂鸣器通过改变声调的变化来显示各个特殊元素 图2.9:

▲ 图2.9 蜂鸣器电路

SPI 彩色液晶屏是用来显示小车重要参数的,方便调试更改参数。蓝牙模块则是用来将一些信息实时发送给调试者,便于调试者实时掌握小车的运行情况 图2.10:

▲ 图2.10 显示屏与串口接口

五、传感器

2.5.1 摄像头:

比赛所用的摄像头可以分为两类:一类为CCD摄像头,另一类为CMOS摄像头。

CCD摄像头图像对比度高、动态特性好,但供电电压比较高,需要12V的工作电压。在智能车的实际运行中,电机加减速时会产生很大的冲击电流,会对12V的升压模块造成冲击。同时CCD摄像头的耗电也比较严重,这会使拍摄的图像稳定性不好。

CMOS摄像头,体积小,图像稳定性较高,只需3.3V供电,耗电量低,但动态性能不如CCD摄像头好。智能车高速运行时,摄像头拍摄的图像可能会变得模糊。因此为了保证系统的稳定性,最终决定选用动态性能相对较好的总钻风CMOS摄像头。

对于摄像头的高度和角度进行调节:摄像头 位置越高,采集图像畸变越小,远处道路信息所占比例越大。角度可以调节摄像头的前瞻距离和智能车近处道路的采集盲区的大小,角度越小,前瞻距离越大,同时近处采集盲区越大;由于摄像头高度限制我们安装摄像头在高度限制下尽可获取更多的赛道信息。

▲ 图2.12 摄像头接口

2.5.2 360°角度位置编码器:

主板稳压电路提供3v3电压。处理器通过读取编码器脉冲数来实现小车速度的检测。通过读取编码器 旋转方向脚的高低电平来检测电机的正反转。从而实现智能车动力系统的闭环控制。

▲ 图2.13 编码器接口

2.5.4 陀螺仪

ICM20602六轴传感器用于检测车模的状态,使用陀螺仪可以对这个坡道与环岛两个赛道元素进行区分和处理。陀螺仪在任意三轴方向转动时,电容传感器会感知到振动,经过处理产生与角速度成比例的电压再经过ADC转换成16bit数字信号(量程可选)。每个轴使用单独的标准质量,沿特定轴的加速度会引起与标准质量相关的位移,电容传感器检测位移。假设将设备放在平坦的表面上,它将在X轴和Y轴上测量0g,在Z轴上测量+ 1g。每个传感器都有一个ADC提供数字输出。

在安装时需要保证稳定牢固,否则转弯、上坡和下坡会产生其他方向的分量,会导致左右转弯角速度值不一样变化,从而不便于控制。我们将其安装在车模的正中间的位置。

▲ 图2.14 陀螺仪

 

§03 型车机械安装


智能汽车系统任何功能实现都需要必要的机械结构,因此在设计整个软件架构和算法之前一定要对整个车模的机械结构有一个全面的认识,然后建立相应的数学模型,从而再针对具体的设计方案来调整赛车的机械结构,并在实际的调试过程中不断地改进和提高。机械方面,在保证车子灵活性和稳定性的前提下,一定要尽量降低重心和减轻质量。在车模安装时,为获取最佳的机械性能,还需着重注意细节,比如电机齿轮的啮合、传感器的安装方式。在日常调车中,也要进行有利于车模进行巡线和提速研究和设计,比如摄像头倾角的改变、摄像头的高度车辆整体重心的调整。

3.1摄像头的安装

我们使用的是逐飞科技设计的140度总钻风广角摄像头,镜片中心离地面的高度为30cm ,视角为30°,通过配置摄像头寄存器设置最远有效前瞻为120cm,智能车据此获得了良好且稳定的图像。摄像头高度及角度如图3.2所示。

3.2 摄像头转动舵机的安装

由于本届全向组别在三岔路口需完成转向侧方行进,在赛道采集上需用双摄或者用舵机完成摄像头方向的改变,本队采用的摄像头转向的方案并将舵机安装在摄像头支架杆上,舵机我们选用了体积小,噪声低的国华A0090舵机。安装效果如图3.2所示。

▲ 图3.1 摄像头及其转向舵机

3.3编码器的安装

H车模有四个电机,因此需要四个编码器,在此我们用编码器支架将角度编码器架在电机齿轮上方,安装效果如图3.3所示。

▲ 图3.3 编码器的安装

 

§04 路设计


4.1主板(搭载CH32V103核心板)

主板上主要有CH32V103核心板最小系统、电源多路供电电路、摄像头电路、陀螺仪电路、显示屏电路、警示LED灯与蜂鸣器等。

顺应底板对应孔的位置进行主板的布局设计,采用电源地与数字地分区的原则,通过0R电阻连接分别铺铜。 最初方案采用加高舵机,存在重心过高,车体过重,惯性大,不易操控,易甩尾的缺陷。(图4.1:主板1.0)。

▲ 图4.1 主板布局

此后进行改进,将摄像头杆架在主板上,更换小型轻便舵机,降低车体重量。由于五项开关易于损坏,改进更换为五个按键。(图4.2:主板1.1)

▲ 图4.2 主板布局1.1

最终版为降低主板的位置,再次修正主板尺寸与铜柱架的位置,将四个拨码开关取缔为电磁模块,在车前与车后分别各架一个电磁杆,同时增添LED转向指示灯。将舵机稳压电路进行改善 ,将停产的AS1015替换为SY8255FCC,导致电路较为复杂。(图4.3:主板2.0)

▲ 图4.3 主板布局2.0

4.2双电机驱动板

双路驱动电路需求电流大,电流线要格外粗采用XT60作为供电电路接口,14AWG规格导线作为导电导线。

▲ 图4.4 双电机驱动板

 

§05 RT-Thread移植


RT-Thread主要优点是:实时、小型、可剪裁。他不仅仅是一个实时内核,也是一个功能丰富的软件平台,可以搭建POSIX环境,运行独立的应用程序,这是传统的实时操作系统所不具备的。RT-Thread具有32~256可选优先级间展示调度,线程度不限,相同优先级线程时间片轮转调度,支持动态创建销毁线程,任务等待可按优先级进行排队。 RT-Thread内核大致分为对象管理、实时调度器、线程管理、线程间通信、始终管理、设备驱动6个部分。

  1. 对象管理:定义了对象容器的种类,包括线程、信号量、互斥量、时间、邮箱、消息队列、内存池、设备、定时器、组件。此部分主要完成各模块的创建,系统对象的初始化。

  2. 实时调度器:定义了优先级。该部分完成优先级的创建及调度算法的定义,对线程的初始化、创建、插入、移动进行了描述。

  3. 线程管理:该部分完成了线程的创建、对当前线程操作、超时线程的处理、线程的启动和推出操作。

  4. 线程间通信:完成通信的初始化,线程挂起,通信对象的恢复,消息的获取和删除操作。

  5. 时钟管理:提供线程运行所需要的时钟,包括系统时钟和定时器,有定时器的初始化、开始计时、停止计时、时间的转换。对线程同样有定时的操作。

  6. 设备驱动:对设备的初始化、发现设备、打开设备、关闭设备、读设备、卸设备、对设备的控制、只是设备的运行和完成的操作

5.1移植准备及总体功能需求

5.1.1硬件环境

本文所需的CH32V1系列MCU产品使用RISC-V3A处理器及架构,支持RV32IMAC开源指令。最高工作频率80MHz,内置高速存储器,并采用预取方式提高指令访问速度。系统结构中多条总线同步工作,提供了丰富的外设功能和增强型I/O端口。本系列产品内置RTC、时钟安全机制、1个12位ADC转换模块、多组定时器、16通道触摸按键电容检测(TKey)等功能,还包含标准的通讯接口:2个I2C接口、2个SPI接口、3个USART接口、1个USB2.0 全速主机/设备接口(全/低速通讯)。

5.1.2软件环境

这里采用的RT-Thread源码最新发布版本是Nano3.0.3版本。RT-Thread主要由内核层、驱动层以及组件层组成,内核层是RT-Thread的核心,包括线程、定时器管理、调度器管理等,并且向其他硬件平台移植过程中最重要的工作是完成内核的移植。其源码文件结构以及相关文件移植如表所列

【表5-1 源码结构以及移植说明】
文件夹 功能 移植操作
bsp 板级支持包 只保留riscv encoding.h和rtconfig.h
components RT-Thread组件 只保finsh组件调试用
include 头文件 保留
libcpu 处理器接口文件 保留risc-v
src 内核源码文件 保留

5.1.3 系统功能要求

移植到CH32V103平台的RT-Thread操作系统需要具备任务管理、任务调度、中断及异常管理功能。其中,任务管理功能要求能够动态创建任务并且还可以挂起、阻塞、删除任务。任务调度功能要求不同优先级任务能够根据优先级进行抢占,同一优先级的任务按时间片轮转执行。

5.2 移植系统原理

针对前后台代码结构存在的CPU利用效率低、实时性差等缺点,RT-Thread实时操作系统通过夺取CPU控制权,然后根据系统定时器列表中的当前最高优先级分配给相应的任务,从而增加了CPU的利用率,提升了实时性。围绕着CPU控制权夺取产生了一系列函数完成切换上下文环境、触发中断、保存任务中各种参数等工作。操作系统移植的目的就是讲这些函数加入到相应的开发程序中,使之能够适应该硬件平台并正常运行。显然,只有对该操作系统个函数文件作用和运行机理有足够深入的了解,才能在移植过程中准确添加和修改相关的函数代码。加入系统功能函数的过程将在第七章详细介绍。为此,接下来将就操作系统中重要函数的运行机理进行简要介绍。

5.2.1RISC-V内核寄存器

RISC-V处理器具有32个整数寄存器,其中31个通用寄存器,他们保存了整数数值,寄存器X0是硬件连线的常数0。当实现浮点扩展时具体32个浮点寄存器f0~f31。

其中RISC-V寄存器调用约定如下表。

▲ 图5.2 寄存器调用约定

X2是栈指针即SP指针,它采用双堆栈结构,物理上存在两个指针寄存器,分别存放PSP指针和MSP指针,但是任何时候实际只能使用其中一个。

5.2.2移植过程中栈的作用

栈是单片机RAM中一段连续的存储单元,大小可根据用户需求定义。程序运行过程中发生函数调用时的局部变量、形参、函数返回地址以及中断发生时函数的返回地址等重要信息都是存放在栈中的。RISC-V支持线程栈,线程栈是用 户创建线程时创建的。RT-Thread线程栈的大小有静态定义和动态定义两种方式,静态定义通过定义一个全局数组来实现,而动态定义是在程序运行过程中通过动态内存分配函数malloc()来实现,并且在不需要该线程栈空间时还可以通过free()函数来释放该段空间。

任何时刻,都只能使用其中一种堆栈空间。具体使用哪一种可通过指定CONTROL寄存器中第1位的值确定,也就是确定SP指针是使用PSP寄存器或者MSP寄存器中的地址值,但是当程序进入异常时,都是使用主堆栈来保存里面的局部变量。任务切换就是当前运行任务中的信息胡远出来,继续执行。

5.2.3系统时钟节拍

在移植过程中,匹配时钟是相当关键的一步。CH32V103提供四组时钟源,时钟管理很灵活,因此,移植时理解清楚时钟源和时钟配置方式是十分必要的。SydTick时钟是内核可控制器自带的一个定时器,用于产生SYSTICK异常,可专用于实时操作系统,为系统提供“心跳”节律,也可以当成一个标准的64位递增计数器。以AHB时钟的八分频为基准时钟源。当计数器递增到设置比较值是,产生一个可屏蔽系统中断。系统时钟配置需要在board.c中实现与OS Tick的配置,如下代码所示 :

▲ 图5.2.1 代码片段

▲ 图5.2.2 代码片段

5.2.4RT-Thread启动流程

当CH32V103系统上电时,会先从0x000_0000地址处取得地址并将其赋值给SP指针,接着从0x0000_0004地址处取得地址,赋值给PC,而默认中断系那个量表内容是从0x0000_0004处开始,并且中断向量表在0x0000_0004处存放的是Reset_Handler的入口地址,因而,程序将跳转到Reset_Handler函数执行。Reset_Handler 函数里会调用main函数,完成系统中各变量及堆栈的初始化,之后就跳转到main函数开始执行。启动流程如图所示

▲ 图5.2.3 启动流程

5.3 RT-Thread系统移植过程

向事先准备好的CH32V103裸机工程中移植RT-Thread,需要完成建材RT-Thread源代码、将剪裁好的源代码添加到裸机工程中、修改配置文件、修改系统时钟、创建任务等工作。下面就将这些工作具体细节和注意事项作详细介绍。移植所用的软件编译环境是集成开发环境为MounRiver_Studio,下面是移植所用步骤。

5.3.1准备好裸机工程和操作系统源代码

移植时准备好自己的CH32V103裸机工程,但是要注意,如果工程里有时钟或延时相关代码且使用的是SYSTICK时钟,不要跟之后修改的系统SYSTICK时钟代码冲突。

这里选用的是RT-Thread-Nano版本,我们需要用的是源码里的C文件和一些汇编文件,进行剪裁时,bsp文件夹里是一些板级支持包,保留riscv_encoding.h和rtconfig.h文件。components问价家里主要是一些组件,这里只保留finsh组件,用于调试输出,其余组件可删掉。include文件夹和src文件夹里是CPU接口文件,由于CH32V103采用的是RISC-V内核,所以保留risc-v文件即可。至此完成了源码剪裁的相关工作。

5.3.2 添加源代码到工程

将RT-Thread源码加入到裸机工程Libraries文件夹中,再接着打开工程项目,添加汇编的包含路径和C代码的包含路径,具体文件如图所示

▲ 图5.3.1 添加汇编的包含路径

▲ 图5.3.2 添加C代码的包含路径

5.3.3修改配置文件

由于开发环境有一定的编译问题,我们需要对其启动汇编进行修改,让其能够跳转到RT-Thread的启动函数,修改代码如图所示:

▲ 图5.3.3 修改启动汇编

5.3.4系统时钟配置

需要在 board.c 中实现系统时钟配置(为 MCU、外设提供工作时钟)与OS TICK的配置(为操作系统提供心跳 / 节拍)。

如下代码所示, HAL-Init()初始化 HAL 库, SystemClock_Config() 配置了系统时钟, SystemCoreClockUpdate() 对系统时钟进行更新,_SysTick_Config() 配置了 OS Tick。此处 OS Tick 使用滴答定时器 systick 实现,需要用户在 board.c 中实现 SysTick_Handler() 中断服务例程,调用 RT-Thread 提供的 rt_tick_increase() ,如图5.3.4所示。

▲ 图5.3.4 系统时钟配置代码

▲ 图5.3.5 时钟配置代码

由于 SysTick_Handler() 中断服务例程由用户在 board.c 中重新实现,做了系统 OS Tick,所以还需要删除工程里中断服务例程文件中的 SysTick_Handler() ,避免在编译时产生重复定义。至此,移植过程结束。

 

§06 件控制设计


6.1 图像采集与应用

6.1.1图像的失真与矫正

摄像头直接获取到的是灰度图像,也即每个像素点的取值范围在[0,255],直接利用该信息具有一定的处理难度,也会延长程序的调试周期。目前常用的二值化算法有OSTU和迭代法,经过对比在光线基本均匀的情况下OSTU和迭代法得到的二值化阈值基本一致,但迭代法的所耗费时间比OSTU少很多,因此我们决定使用迭代法对灰度图进行二值化,再对二值图像做后续处理。经过算法时间复杂度优化,在光线均匀时获取一副二值化图像的时间在1.3ms以内。为了应对光线条件不理想的情况(反光、阳光直射、光线不充足等),我们使用在摄像头镜头前使用了偏振镜,并通过配置摄像头的参数(曝光时间、增益等)发现能一定程度上解决光线 问题。偏振镜的安装如图所示,软件上摄像头的配置如图所示

▲ 图6.1 偏振镜与摄像头参数设置

6.1.2赛道原始边界的获取

考虑到当车体位于赛道内时图像相对单调,综合各算法的复杂程度与应用范围,我们决定采用基于边界生长的迭代算法,具体算法执行流程如下 (1)获取图像的最长白列 (2)图像最下方往上搜线,从最长白列分别向左和向右寻找左右边界的有效底行。 (3)从有效底行开始运行边界生长的迭代算法获取左右轮廓 ()搜不到下一行的白黑跳变时停止搜寻,停止搜寻的那一行为边界的有效顶行;

6.1.3赛道边界的修正及中线的获取

由于图像的有效底并不总是在图像的最下面一行的,因此需要根据有效底和有效顶行之间的斜率进行补线,补线效果如图所示(图像外的黑色边界即为补出来的边界)

▲ 图6.1.3 补线效果

在边界信息经过修正后,我们需要获取一条中线,具体的获取方法如下。

有三种情况: 1)当前行已找到左右边界,中线为左右边界的平均位置。 2)当前行只找到左边界,中线为左边界加上赛道宽度。 3)当前行只找到右边界,中线为右边界减去赛道宽度。

▲ 图6.1.4 中线提取

6.1.6环岛的识别及处理

环岛的特征比较明显,一侧为直道,一侧有圆形区域。但是由于在完全进入环岛弯之前图像始终包含直道、弯道双重信息,所以必须在识别为环岛后重新找有效底、有效顶、左右边线,同时对弯道的缺损区域进行补线以实现中线的合理运算

6.1.7三叉的识别及处理

当遇到三个拐点(即左边一个,右边一个,上边一个)时,就识别成三岔路,此时需要通过舵机控制摄像头转向,并切换车模的控制模式为横向运动,并在三叉出口时利用相同的特征将摄像头的方向和车模运动方向切换回来

6.1.8出入库的识别及处理

出库前依据液晶按键设定出库方向,识别库尖角和库顶,据此补线出库。入库方向与出库方向一致,识别斑马线和库尖角,据此补线入库。

6.2 控制方案选择

我们使用增量式PID算法控制电机稳定在稳定速度,PD控制差速转向。

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

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

▲ 图6.1.5 PID控制器原理框图

在计算机控制系统中,使用的是数字PID控制器,控制规律为: e ( k ) = r ( k ) − c ( k ) e\left( k \right) = r\left( k \right) - c\left( k \right) e(k)=r(k)−c(k) u ( k ) = K p { e ( k ) + T T j ∑ j = 0 k e ( j ) + T D T [ e ( k ) − e ( k − 1 ) ] } u\left( k \right) = K_p \left\{ {e\left( k \right) + {T \over {T_j }}\sum\limits_{j = 0}^k {e\left( j \right)} + { {T_D } \over T}\left[ {e\left( k \right) - e\left( {k - 1} \right)} \right]} \right\} u(k)=Kp​{ e(k)+Tj​T​j=0∑k​e(j)+TTD​​[e(k)−e(k−1)]}

公式中:
k:采样序号,k=0,1,2,3 c(k):第k次实际输出值; e(k):第k次偏差; e(k-1):第k-1次偏差 K p K_p Kp​:比例系数 T I T_I TI​:积分时间常数 T D T_D TD​:微分时间常数 T:采样周期 r(k):第k次给定值 u(k):第k次输出控制量

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

  • :及时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差。
  • :主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强。
  • :能反映偏差信号的变化趋势(变化速率),并能在该偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。

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

6.2.1位置式PID

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

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

6.2.2增量式PID

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

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

增量式PID具有以下优点:

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

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

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

6.2.3差速转向的 PID 控制算法

对于转向的闭环控制,我们采用了位置式 PID 控制算法,根据往届的技术资料和实际测试,经过反复测试,我们选择的 PID 调节策略是:

  1. 将积分项系数置零,我们发现相比稳定性和精确性,舵机在这种随动系统中对动态响应性能的要求更高。更重要的是,在 KI 置零的情况下,我们通过合理调节 Kp,发现车能够在直线高速行驶时仍能保持车身非常稳定,没有振荡,基本没有必要使用 KI 参数;

  2. 微分项系数 KD 使用定值,原因是舵机在一般赛道中都需要较好的动态响应能力;

  3. 对Kp,我们使用了在程序中具体代码如下:

K p = ( e − ∣ e r r o r ∣ − 1 e − ∣ e r r o r ∣ + 1 ⋅ 0.5 + 0.5 ) ⋅ b a s k p K_p = \left( { { {e^{ - \left| {error} \right|} - 1} \over {e^{ - \left| {error} \right|} + 1}} \cdot 0.5 + 0.5} \right) \cdot bas_{kp} Kp​=(e−∣error∣+1e−∣error∣−1​⋅0.

标签: v1板电容屏护板一体式电连接器1000td位移传感器3204tj圆形连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台