基于RT-Thread开发智能视觉组智能车-乐山师范学院

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于RT-Thread开发智能视觉组智能车-乐山师范学院相关的知识,希望对你有一定的参考价值。

学 校:乐山师范学院
队伍名称:乐师逐飞四队
参赛队员:陈龙、刘宇林、唐玉琴、
带队教师:杨济豪,李富钢

 

简 介: 本设计以第十六届全国大学生智能汽车竞赛为背景,全向行进组以大赛组委会指定的采用麦克纳姆轮的H型车模为平台,制作一辆以沁恒CH32V103R8T6为核心板和以MOUNRIVER STUDIO为开发环境, 用PWM输出控制舵机转向和电机速度,利用智能车数字摄像头识别赛道,解决十字、坡道、三岔、起始线等特殊元素的智能车,并让其实现转向、速度能够快速的到达想要的速度、能够自主识别路径并按照规定路径以尽可能快的速度行进完成比赛.

关键词 智能车竞赛全向行进H车模RT-Thread

 

§01


1.1第十六届全国大学生智能汽车大赛介绍

  本文以第十六届全国大学生智能汽车竞赛和 2014年11月2日第十届全国大学生智能汽车竞赛组委会扩大会议讨论通过的全国大学生智能汽车竞赛章程为背景,介绍本届全国大学生智能汽车竞赛.

  该竞赛受教育部高等教育司委托,由教育部高等自动化专业教学指导分委员会(以下简称"自动化教指委")主办,负责指导全国范围内的大学生智能汽车竞赛. 为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,该竞赛以"立足培养,重在参与,鼓励探索,追求卓越"为指导思想,以设计制作在特定赛道上自主行使且具有优越性能的智能汽车为研究对象的创意性科技竞赛.是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一.旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件.

  该竞赛由竞赛秘书处为各参赛队设计、规定标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程.该竞赛内容综合性强,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械、通信、汽车工程等多个学科知识.
  经全国大学生智能车竞赛组委会扩大会议决定,第十六届全国大学生智能汽车竞赛分为分赛区选拔赛与全国总决赛两个阶段,比赛在2021年8月份中下旬举行,本届有五个分赛区(东北、华北、华东、华南、西部)和三个省赛区(安徽、山东、浙江),全国总决赛定于哈尔滨工程大学举行.

  该竞赛至今已举办十五届,参与学生超过30万人次,得到了教育部相关领导与各高校师生的高度重视,已发展成全国 30 个省市自治区近 300所高校广泛参与的全国大学生智能汽车竞赛.2008年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一(教高函[2007]30号文).

1.2 第十六届全国大学生智能汽车大赛竞速组比赛规则介绍

  本届大赛竞赛秘书处制定的规则适用于各分/省赛区比赛以及全国总决赛,在实际可操作性基础上保证竞赛的公开、公平与公正,为了兼顾现在比赛规模的要求,同时避免同组别内出现克隆车的情况,能够便于参赛学校在有限的场地内使用兼容的赛道完成比赛准备,竞速比赛由八个组别设置,包括基础四轮组、节能信标组、电磁越野组、双车接力组、全向行进组、单车拉力组、专科基础组、智能视觉组.

  本届大赛要求全向行进组使用H车模,制作完毕后,车模长宽不超过30厘米,高度不超过30厘米.车模微控制器使用WCH系列单片机,允许使用各类电磁、红外光电、摄像头、激光、超声传感器器件进行赛道和环境检测.参赛选手制作的车模完成后从车库触发计时器在PVC赛道上通过赛道两边的黑色边线和电磁导引运行两圈然后再返回车库.车模需分别通过三岔路口两条岔路,每经过三岔路口车模需改变一次行进姿态

1.3章节安排

  技术报告的章节安排如下:

  • 第 1 章 引言,大赛介绍和规则介绍及章节安排;
  • 第 2 章 车模设计方案说明
  • 第 3 章 智能车机械调整,主要介绍对小车的机械结构的改装及一些模块的安装方法;
  • 第 4 章 介绍智能车硬件系统设计,主要介绍智能车硬系统的设计思想、设计过程和设计结果;
  • 第 5 章 智能车软件系统设计,主要介绍智能车软件系统的理论分析、控制器设计过程和调试;
  • 第 6 章 总结;
     

§02 模设计方案


  本章主要介绍我们全向行进组使用的H车模设计及要求及设计思路,后面章节将按机械、硬件以及软件三个部分详细说明.

  本次竞赛,全向行进组使用的H车模带有四个麦克纳姆轮,麦克纳姆轮是一种可全方位移动的全向轮,简称麦轮,由轮毂和围绕轮毂的辊子组成,麦轮辊子轴线和轮毂轴线夹角成45?.在轮毂的轮缘上斜向分布着许多小轮子,即辊子,故轮子可以横向滑移.辊子是一种没有动力的小滚子,小滚子的母线很特殊,当轮子绕着固定的轮心轴转动时,各个小滚子的包络线为圆柱面,所以该轮能够连续的向前滚动.采用该麦轮的H型车模可以全方位移动,任意变形,这是全向行进组的一大特点.

  根据第16届全国大学生智能汽车竞赛相关规定,全向行进组使用H型车模,经过比较,我们选用以下电子元器件:

  1. 微控制器

  WCH限定使用RISC-V架构芯片:CH32V103,32 位 RISC 处理器 RISC-V3A 基于 RISC-V 开源指令集设计,其系统架构实现了硬件平台的低成本、 低功耗及功能应用的最佳平衡。 CH32V1 系列通用微控制器以此处理器为核心,挂载了丰富的外设接口和功能模块,包括时钟安 全机制、多级电源管理、通用 DMA 控制器、多通道 12 位 ADC 转换模块、多通道触摸按键电容检测(TKey)、 高级和通用定时器、USB2.0 主机控制器和设备控制器、多路 I2C/USART/SPI 接口等如图2.1,我们选用该系列性能优越的R8T6型号单片机来做智能车模的微控制器;

▲ 图2.1 CH32V103x产品资源分配

  2.传感器选择:

  ①总钻风MT9V032摄像头:总钻风摄像头是一款基于MT9V032芯片设计的传感器模块,是逐飞科技独家研发的一款高性能,在智能车竞赛市面上性能最优,最适合高速情况下的图像采集的全局快门摄像头.

  ②MPU6050:该陀螺仪是世界上第一个集成的六轴运动处理模块,与多元器件方案相比,mpu-6050消除了组合陀螺仪与加速器时间轴的差异问题,减少了大量的封装空间.

  ③逐飞角度编码器:该传感器的主要优点为无触点、无噪声、高灵敏度、高重复性、接近无限转动寿命以及高频响应特性好;

  3.伺服电机采用S3010舵机控制摄像头转向.

  竞赛智能车中,除单片机最小系统的核心子板、加速度计和陀螺仪集成电路板、摄像头、舵机自身内置电路外,还需自制pcb板,主板和两个驱动板如下图

▲ 图2.2 控制主板

▲ 图2.3 驱动电路板

 

§03 械设计与调整


  智能车机械部分设计主要包括制作和调整两部分内容,制作部分的内容主要是对车模没有的部分进行设计,包括传感器支架、电路板固定、防撞、编码器安装等.调整部分则主要是针对智能车车模本身已经有的机械部分,在规则允许范围内进行调整,改装,提高其运动性能,以适应高速行驶和快速控制,这部分主要包括舵机改装、避震调整、四轮定位等.本章内容主要对传感器支架、电路板固定部分进行介绍.

3.1 机械结构制作部分设计

  由于大赛提供车模本身是运动型模型车通用车模,并没有提供专门为智能车安装电路、传感器等电路部分的部件,因此这部分机械结构需要自行设计制作并安装.制作部分主要原则为:牢固、简单.但由于我们的是H车模,机械结构并不需要改变过大,我们采用热熔枪固定驱动板,通过打孔和螺丝固定主板、舵机以及摄像头支架.

3.2 摄像头的选型和架设

  摄像头分为两种,数字的和模拟的,我们选择了数字摄像头MT9V032,能够将图像灰度值以数组的形式传输给单片机,传输回来的还有行场中断信号.摄像头分为 CMOS 和 CCD 两类,也分数字和模拟的摄像头.

  数字摄像头和模拟摄像头性能差别不大,数字摄像头电路更为简单,只需要直接将信号接入单片机的 IO 口,而模拟摄像头需要使用芯片(LM1881 等)进行视频信号同步分离.对于摄像头的选择,主要考虑以下几个参数:1 芯片大小 2 自动增益 3 分辨率 4 最小照度 5 信噪比 6 标准功率 7 扫描方式

  我们最终选定了使用总钻风摄像头,相比其他摄像头,这款摄像头图像和动态性能不差,由于自己设计电路,可以把摄像头尺寸和重量尽可能的做小做轻. 摄像头选择碳纤维杆,通过热熔胶制作固定.安装好的摄像头最远扫描行 2.1 米.摄像头的假设高度大致为20cm,这样在兼顾远端的同时不丢失近端,同时使近端扫描行宽度足够.便于处理今年新增加的特殊元素.

3.3 摄像头信息参数

  1) 摄像头扫描行的选择 最远端扫描行距离:2.1米左右;最近段扫描行距离:车前 10cm 左右 ;主控制行位置:车前1.2米范围 ;这样选择主要考虑到:首先要能看较远,这样可以对赛道和特殊元素做出预判;不能太远,因为太远之后,远端信息可靠性极差,正确赛道提取并不容易,同时还会受到三岔、坡道等特殊状况的干扰;近处行需要可靠有效,作为远处行信息的基础;控制行40cm足够.
  2) 分辨率MT9V032的分辨率理论可以达到 752x480,但如果所有点都提取出来,将占用巨大的数据空间,处理速度也会减慢.而我们在车辆控制上所需要的分辨率并没有这么高,最终我们有针对性的挑选出部分扫描行和部分像素点.最终分辨率大概近似为 120x65.这样既保证了数据量不要过大又能保证扫描行间距足够采集到赛道左右黑色边界.

3.4编码器的选择和安装

  全向车模均采用360角度编码器来测量车轮的转速.

▲ 图3.4 编码器

3.5 智能车主要技术参数

  智能车主要技术参数包括物理尺寸、电路指标等,具体参数见表 3.5

【表3-5 智能车主要参数】

项目单位参数
车模尺寸(长×宽×高)毫米(mm)249×210×243
车模重量(带电池)克(g)1578
车模轴距毫米(mm)185
摄像头频率HZ50
传感器mpu60501,总钻风摄像头1,逐飞角度编码器*4
核心处理器种类及个数CH32V103R8T6*1
智能车名称-H车

  注①:由于设计报告书写期间智能车仍然在进行改进,因此有些数据未能更新.之后的内容中涉及到的参数、程序、图片也有类似情况,不做逐一说明.

 

§04 路设计


  智能车电路部分主要的模块包括:单片机最小系统、电源模块、传感器模块、驱动模块.各模块的总体设计原则是:紧凑、易于拆换、稳定可靠.但根据各模块的不同,又有不同的设计要求.单片机最小系统采用了沁恒微电子股份有限公司的CH32V103R8T6的核心板.

▲ 图4.1 系统硬件设计框图

4.1 电源模块设计

  电源的首要指标是可靠性,整个硬件系统的工作完全由电源供电的可靠性决定,电源供电不稳定会引起电池损耗、单片机复位、舵机及传感器损毁等严重问题,因此电源的设计是最重要的硬件电路设计部分之一.
  电源设计中主要考虑到需要的电压和电流,另外还增加了电池电压显示,便于观察电池电量.如图 4.1 所示,智能车需要的电源要求包括3.3V,5V,6V,7.2V等.图4.1电源分配示意图

  根据规划,5V 供电我们选择了TPS7350,比起 7805,2940 的优点是低压差稳压,它的稳压压差可以小于 500mV,这样保证电池在低电压的情况下,仍能使单片机和传感器正常工作,设计原理图如图 4.1.1 所示.

  3.3V供电我们使用TPS7333芯片作为稳压芯片.其电路原理是该芯片简单的电路.其原理图如 4.1.2

▲ 图4.1.1 电源原理图

  其中,为了不互相干扰工作,单片机 5V 和传感器的 5V 分开单独供电,单点共地.为了消除纹波,需要在电源输出位置加入电容进行滤波,减少纹波对元件的影响,提高供电稳定性.驱动电机供电选择电池直接供电.最终电源模块电路板尺寸:全向:140mm * 65mm

4.2 传感器电路设计与实现

  本设计中,传感器分为两部分:巡线传感器(摄像头)、速度传感器(编码器)姿态传感器(MPU6050).

4.2.1 巡线感器电路设计

  用MT9V032 摄像头作为主要的巡线传感器,这部分也是硬件电路设计的主要模块,是用来控制程序的基础.在设计时,要充分考虑到赛道情况,包括赛题中的各种特殊赛道类型,要尽可能通过硬件保证检测的有效性和可靠性.另外考虑到摄像头架设偏低,因此要尽可能的制作的轻巧.特别的,本届比赛赛题加入出库入库,这样就需要摄像头的远端图像足够清晰可靠,从而提前识别入库的条件.

4.2.2 速度传感器电路设计

  对于速度传感器,我们采用的是逐飞角度编码器,它是6线设计,通过硬件SPI进行通讯.

4.2.3 姿态传感器电路设计

  姿态传感器我们采用的是MPU6050,并将该传感器放置在车模中央以便于更好的采集车身的当前姿态数据.

4.3 驱动电路设计

  驱动电路为智能车驱动电机提供控制和驱动,这部分电路的设计要求以能够通过大电流为主要指标.驱动电路的基本原理是 H 桥驱动原理,目前流行的H 桥驱动电路有: H 桥集成电路,如 MC33886;集成半桥电路,如 BTS7960 等;MOS 管搭建的 H 桥电路.

  MC33886 的优点是电路简单,外围元件少,但缺点是内阻较大,通过电流有限,可以通过两片 MC33886 并联方式进行改善.MOS 管搭建的 H 桥电路可以通过较大电流,但由于每个 MOS 管体积较大,因此电路板面积较大,另外,MOS 管 H 桥电路可能会发生脉冲上升沿下降沿由于不够陡峭而带来的瞬间短路、功率过高等问题.

  而DRV8701E单双电机MOS管无需升压到12V,大大简化了驱动芯片电源部分,且其驱动信号接口由HIP4082驱动方案的两路PWM控制一个电机正反转的方式,更新为1路PWM信号控制转速,1路高低电平信号即可控制电机正反转,可节约1路PWM引脚资源,用普通IO即可控制电机转动方向且其外形较小为安装车模节省空间,板载电源指示灯及使能指示灯方便观察硬件工作状态.

  由上比较,为节约单片机pwm资源,最终我们选择了具有免升压设计的简化控制逻辑的DRV8701E单双电机MOS管作为本车模的驱动.

▲ 图4.3 电路板正反面

 

§05 件框架


  本章介绍基于RT-Thread操作系统的软件框架搭建及小车控制算法实现

5.1 基于RT-Thread操作系统的软件框架搭建

  在本次的智能车程序中采用了RT-Thread操作系统来进行一个总体的控制。

  RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年年初发布的 0.1 版本。因为 RTOS 中的任务更类似于通用操作系统中的线程,并且这个系统支持基于优先级的抢占式任务调度算法,调度器的时间复杂度是 O(1),所以把它命名为 RT-Thread,即实时线程。

▲ 图5.1 RT-Thread简介

  经过14年的发展,RT-Thread 被广泛应用于智能家居、智慧城市、安防、工控、穿戴等众多行业领域,累计装机量超过6亿台,GitHub 的 Star 数量超过 5.3k,嵌入式开源社区活跃度行业第一。

  随着 MCU 硬件性能的提升、外设的增加以及软件功能需求的增加,越来越多项目采用 RTOS 的开发方式。一方面裸机开发方式的软件框架不清晰,对后续扩展功能极其不利;另一方面,由于软件复杂性的增加,裸机开发对工程师的要求越来越严苛,过多使用中断等因素,都会增加系统的不可靠性。

  今年的竞赛引入了RT-Thread作为赞助商,鼓励大家采用RTOS的思想来进行嵌入式开发,因此在本次的智能车竞赛中,我们既要使用RT-Thread操作系统来满足竞赛的任务需求,也要使用RT-Thread操作系统进行框架实现和算法实现。

  首先是智能车竞赛的任务需求,根据我们的方案,需要满足以下几个需求:摄像头数据采集、360°角度传感器数据采集、陀螺仪数据采集、电机PID控制、图像数据处理、人机交互等,这些任务在传统的裸机开发中,大体都放在两个地方,一个是周期中断内,一个是主循环内,而且所有任务是串行起来工作的,这样就导致了所有的任务逻辑会相互影响,软件的并发效率变的很差,从而影响了多任务程序执行的实时性。因此我们引入了RT-Thread操作系统,引入RT-Thread操作系统的第一步就是RT-Thread操作系统的移植。

  关于RT-Thread操作系统的移植:
  我们可以直接从逐飞的码云开源库中找到RT-Thread操作系统的NANO版
  的库,下面是移植RT-Thread操作系统的一些注意事项:

  1. 添加RT-Thread操作系统的库,将汇编路径和C文件路径都添加到工程内
  2. 然后就是修改启动汇编,将启动汇编中最后的跳转到MAIN函数运行的代码改成跳转到RT-Thread操作系统的启动函数。
  3. 修改滴答定时器,因为滴答定时器是单片机的最高优先级的定时器,如果不修改定时器的延时函数,那么系统也无法正常运行。
  4. 修改board文件,让用户可以通过finsh软件对RT-Thread操作系统进行实时调试。

  T-Thread有完整版和NANO版,对于资源受限的微控制器(MCU)系统,可通过简单易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO内核版本。在本次的智能车竞赛中,由于CH32V103R8T6芯片的资源有些不足,因此采用的是RT-Thread操作系统的NANO版。

  RTOS的嵌入式开发的优点:
  1. 实时性:RT-Thread本身就是一款实时的操作系统,对各个线程可以设置不同的优先级,重要的线程可以设为高优先级,不重要的线程可以降低优先级,做好全局的统筹规划后,这样整个软件各个任务的实时性都能得到保证。
  2. 可重用性:RT-Thread操作系统提供了统一的抽象接口层,方便可重用组件的积累,提高开发效率。比如:信号量、事件通知、邮箱、环形缓冲区、单向链表/双向链表等等,这些功能拿来即用。
  3. 软件生态:RT-Thread拥有丰富的生态,这种生态给开发者带来的事量变到质变的开发体验,以前的裸机开发是自己玩,现在借助操作系统,变成了大家一起玩。使用操作系统所带来的软件可模块化、重用性的提升,也使得我们自己在做软件开发时,可以封装一套基于操作系统、适合嵌入式的可重用组件,这些组件不仅可以用在自己的项目中,还能开源出来分享给更多有需要的嵌入式开发者,把软件的价值最大化。

  RT-Thread操作系统相对于传统裸机编程的优点:
  1. 多线程处理:在裸机编程中,我们基本上都是从main主函数从头执行到尾,中间加个主循环以达到让程序循环执行的效果,虽然单片机可以通过定时中断的方式去执行其他的程序,但主要的依旧是在执行主函数中的程序,进而导致单片机可能一直执行同样的语句从而浪费单片机的效率,对单片机的利用率也因此下降。在使用了RT-Thread操作系统之后,单片机可以进行多线程的处理,这里的多线程并不是几个主函数同时处理,而是通过线程优先级或者时间片来控制线程的执行时间,当高优先级的线程空闲时则可以让单片机去执行低优先级的线程,而不是一直原地等待,从而提高单片机的资源利用率。
  2. 对各类单片机的兼容性:今年因为使用的单片机型号较多,也有一些从未接触过的单片机型号,如果不使用RT-Thread操作系统,那么将从头开始学习使用一款新的单片机,这肯定会花费我们大量的时间和精力。由于RT-Thread操作系统的易移植性以及小体积,只要将RT-Thread操作系统移植到新的单片机上,我们在RT-Thread操作系统上编写的所有程序几乎不用做任何需要适配当前单片机的修改。
  3. 定时线程:由于CH32V103R8T6芯片的硬件定时器资源不足,只有四个定时器可作为通用定时器使用,因此如果进行裸机编程,这是不可避免的硬伤,甚至需要使用多个芯片才能满足需求。而在使用RT-Thread操作系统后,我们可以直接创建定时线程,它与普通的线程的不同之处就在于会定时运行,相当于芯片的硬件定时器,而且在RT-Thread操作系统中,我们可以创建无数个这样的定时线程,极大的满足了我们的需求。
  4. 传递数据:在传统的裸机编程中,如果我们需要将这个函数处理出来的数据传递到另外一个不相关的函数,那么我们肯定需要通过全局变量或者数组来实现,而声明全局变量会的削弱单片机的RAM空间,导致单片机运行效率下降,尤其是对于CH32V103R8T6这种本身资源就不足的单片机。而在RT-Thread操作系统中,我们可以通过邮件,信号量等方式进行数据传递,这种的数据传递几乎不会占用单片机的RAM空间,传递完成后单片机的RAM空间就会得到释放,从而提高单片机的运行效率。
  5. 上位机调试:单片机是否可以通过上位机或者软件直接进行在线调试是一个极其重要的点,它关乎着我们写程序的效率。CH32V103R8T6这款芯片所使用的软件MounRiver Studio支持调试,但不是在线调试,需要将单片机运行的程序暂停才可观察数据。而在RT-Thread操作系统中,我们可以直接使用上位机软件Finsh来对单片机进行在线调试,甚至直接观察单片机中各个进程在运行时对于单片机的RAM占用量,这对于我们智能车的程序设计有着极大的帮助。

5.2 小车控制算法实现

  整个系统有两部分,速度和方向.这些都是通过控制车模四个车轮驱动电机完成的,转向控制需要电机之间相互协同配合的.控制转向是不仅需要前轮电机差值,还需控制后轮电机的差值,才能更好的转向,为了使电路板紧凑,较少车重,系统板仅对所用到的必要引脚引出,适当留有备用端口,其中包括电机接口、摄像头接口,屏幕接口,编码器接口,无线串口接口等.主要端口作用规划见图5.1

▲ 单片机主要输入输出端口规划图

5.2.1 路径识别部分

  路径识别传感器我们选择的是 MT9V032数字摄像头,高效的软件程序是智能车高速平稳自动寻线的基础,图像采集及校正处理就成了整个软件的核心内容.在智能车的转向和速度控制方面,我们使用了鲁棒性很好的经典 PID 控制算法,配合使用理论计算和实际参数补偿的办法,使智能车能够稳定快速寻线.

5.2.2原始图像的采集

  MT9V034摄像头是一款数字灰度摄像头,在采集图像方面已经能够非常的稳定,对于赛道的图像信息采用了二维数组来存储赛道信息,图像的灰度值是从0-255,颜色偏向于白色,灰度值便会越大,颜色偏向于黑色,灰度值便会越小,我们摄像头的高度为十八厘米,图像所看到的畸变会略大,但由于摄像头的数据能够很好的反映赛道信息,因此我们未对畸变未处理,因为赛场上的光线不均匀问题,摄像头采用了加增偏光镜使图像的对比度更加明显,图5.2为摄像头所采出来的原图

▲ 图5.2 未处理的图像

5.2.3循迹处理

  在基本图像处理完成后,就要从图像中提取出有效的赛道信息,也就是赛道边缘.循迹算法思路如下:
  1) 对图像的每一列的灰度值进行运算,从而能够找出赛道的最合适的列
  2) 对于最合适列的左右对于每一行来收集图像的灰度值差值并且得到赛道的左右边界线
  3) 对于十字,由于双侧赛道边沿的丢失,确定找点的初始位置,选择由中间向两边找的方式找的路径,同时根据矫正图像滤除十字拐角线,从而顺利连线;
  4) 对于圆环,能够找到圆环的一边边界的列数会有较大的差异,从而补线让其进入圆环内
  5) 对于坡道,分成两端来判断,远端的右边线与左边线的差之和大于近端的右边线与左边线的差之和,便会识别坡道,坡道会采用减速,并将中线算出来的小车转角除以一个值
  6) 对于三岔路口,它与坡道相似,但中心会有明显的拐角,因此可以直接区分三岔和坡道的识别。
  7) 出库时,用来判断赛道的长度来控制直行与转向
  8) 入库时,检测到起跑线后直行一定距离后转向入库
  9) 中心引导线,是从视野了两边往中间扫描,判断中心引导线并控制小车方向,让小车小车沿引导线行驶.

5.2.4 速度控制部分

  速度控制并不像方向控制那样精确,只要在短时间内达到目标速度即可,而误差是允许的,因为作为智能车这个惯性系统来说,速度不会徒增骤减(与控制周期比较),因此我们使用了P 控制,经过调试,选择合适的P 系数后,加速可以很快也不会过冲,控制效果很好,如图5.3

▲ 图5.3 速度控制曲线

5.2.5 方向控制的理论分析

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

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

▲ 图5.4 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 I ∑ 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_I^{} }}\\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)+TITj=0ke(j)+TTD[e(k)e(k1)]}

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

  比例环节:及时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差.
  积分环节:主要用于消除静差,提高系统的无差度.积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强.

  微分环节:能反映偏差信号的变化趋势(变化速率),并能在该偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间.

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

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

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

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

  PID参数整定

  运用PID控制的关键是调整KP、KI、KD三个参数,即参数整定.PID参数的整定方法有两大类:一是理论计算整定法.它主要是依据系统的数学模型,经过理论计算确定控制器参数;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用.由于智能车系统是机电高耦合的分布式系统,并且要考虑赛道的具体环境,要建立精确的智能车运动控制数学模型有一定难度,而且我们对车身机械结构经常进行修正,模型参数变化较为频繁,理论计算整定法可操作性不强,最终我们采用了工程整定的方法.

5.3 辅助车模调试程序设计

  辅助调试程序有两个部分,一是基于键盘显示与按键的PID 参数输入程序,二是基于无线串口模块的无线通信数据发送理想速度与实际速度,通过查看不同PID参数来查看理想速度与实际速度的关系,调试到最好的参数.

 

§06


  我们是从大二开始在实验室中学习c语言,嵌入式的,经过了一年多的时间,我们也学习了很多,成长了很多,今年一年的时间为了这次比赛更是卯足了劲,今年这一年也是记忆深刻的一年,我们学习知识的过程,也是渐渐从一个新手转变为老手的过程,知识是一点一点获取的,经验也是一点一点积累的,这一年里,我们获得的不仅是知识的增加,也获得了团队协作的能力,遇到问题解决的能力,在这期间内,我们有过悲伤,有过开心,有过绝望,但什么都没有阻止我们奋斗的心,非常感谢这个比赛,才能让我在学校里面学得很多的知识与经验。

  大三的下学期我们参加了16届大学生智能汽车竞赛,在西部赛区进行比赛,由于我们使用的RT-Thread操作系统,所以整车做出来之后都是一个极简的风格

  我们仅用了一个核心板和一个摄像头就实现了所有的任务需求,比赛之前虽然抱着几分坎坷的心态,但是在预赛中我们的表现还算是比较突出,小车前五分钟表现有点差,一直在调试摄像头参数,还好后面将参数调到了一个比较合适的地步.


  后面我们的车跑起来也让大家都感到震惊,以第二名的成绩完成西部赛的预赛,距离第一名的差距只有0.2秒,也因此我们对第二天的决赛充满了信心,但是很可惜我们在第二天的决赛中一直没有完赛,主要问题出在了图像处理部分,对于当时现场的光线一直都不能调试出一个较为合适的摄像头参数,当然,也有很大原因是因为我们的图像处理有些简单,对于光线不均匀的场地无法达到把边界完全处理出来,决赛的赛道也比较长,所以到最后也没能完赛。最终排名出来之后我们因为决赛没有完赛,即使预赛跑的再好,也依旧被刷下来了,排在了第七。

  这个名次对我来说是不好接受的,对我的车来说也不能接受,所以赛后我们认真的对本次西部赛做了一些反思,首先就是程序方面,侧重点放在了车的姿态控制上,对于图像的处理却草草了事,导致比赛时对于环境的适应能力偏弱,进而导致特殊元素识别经常误判迟判;其次是硬件方面,在绘制主板时,没有合理分配电源,导致主板的稳压电路经常发热发烫,同时由于摄像头数据部分端口走线不够规范,导致图像数据容易受到其他干扰;最后是机械方面,四川省省赛时由于严重的机械问题导致小车最后只能堪堪缓慢完赛,所以后面对于小车的机械方面,个人认为已经做的很好了,也因此把侧重点放在了姿态控制上,在决赛结束后,我们去卓大大那里检查车模,卓大大也说我们的车做的很漂亮,电机比较温和并没有发烫,虽然我们没能完赛,但面对卓大大的夸奖,内心还是有一丝窃喜的。

  最后就是西部赛的闭幕式,闭幕式结束照例都要拿着车模合照,在这之前都挺冷静的,认真分析了自己的不足,以后该这么去提高自己,但是再次看到自己做了那么就才做出来的小车之后,心里总有一些说不出的感受想要释放出来,我认为我的小车不应该止步于西部赛的预赛,它与其他的H车相比,感觉处处都是优点,但是我们确实已经止步于西部赛预赛了,指导老是为我们感到惋惜,我们自己也对本次比赛感到遗憾,但这并不能让我们因此而放弃,我们将对智能车依旧保持热情。

  借书写技术报告的机会向帮助过我们的老师、同学,学校、学院领导以及组委会的老师,表示深深地谢意!更要向队内的队友表示深深地感谢,感谢陪伴在一起的日日夜夜!通过参赛,我们学会了很多!

参考文献

  • 关于举办第十六届全国大学生智能汽车竞赛的通知.
  • 第十六届全国大学智能汽车竞赛竞速比赛规则.
  • 华成英, 童诗白. 模拟电子技术基础. 北京, 高等教育出版社, 2006
  • TPS7350 datasheet
  • TPS7333 datasheet
  • 阎石. 数字电子电路基础. 北京, 高等教育出版社, 2005
  • NXP i.MXRT1064DVL6A datasheet


● 相关图表链接:

以上是关于基于RT-Thread开发智能视觉组智能车-乐山师范学院的主要内容,如果未能解决你的问题,请参考以下文章

基于 RT-Thread智能车控制算法开发-河南科技大学ROCKET

RT-Thread优化智能车设计

基于RT-Thread操作系统的 基础四轮组智能车设计与实践

智能车竞赛技术报告 | 智能车视觉 - 首都师范大学 - 首师智能视觉

第十七届智能汽车竞赛RT-Thread | 逐飞联合直播 --群体挑战赛专题

RT-Thread在16届智能车竞赛双车接力组中的应用