龙空技术网

“零前瞻”AI寻迹小车,如何跑出20厘米前瞻效果的

APPLE频道 829

前言:

目前大家对“循迹小车设计原理”都比较关心,同学们都想要学习一些“循迹小车设计原理”的相关知识。那么小编也在网络上收集了一些关于“循迹小车设计原理””的相关知识,希望我们能喜欢,姐妹们一起来了解一下吧!

ACE参赛队伍

2020-09-15 Tuesday

● 摘要

本文详细介绍了山东大学(威海)ACE队在第十五届全国大学生智能汽车竞赛AI电磁组中的系统方案。内容包括AI小车的系统的原理、软硬件方案设计以及神经网络模型的生成过程。

本次比赛采用大赛组委会统一指定的C型车模,AI小车以单片机MIMXRT1064DVL6A为控制核心,用电感采集赛道信息,编码器获取小车的速度。使用 IAR 及keil5集成编译环境编写C语言代码,采用PyCharm作为编译器,使用Python程序语言编写程序,搭建神经网络,实现NRF通信调试,训练车模完成赛道元素的判断,采用赛道记忆算法控制目标速度,实现长直道加速的效果,使用IPS液晶屏和按键作为辅助调试手段。

经过大量的软硬件测试以及数据采集、测试,成功设计出 “零前瞻”AI循迹小车,跑出了长达15至20cm前瞻的效果。

关键词: 赛道记忆,元素判断,神经网络

01引言

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

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。

随着人工智能的兴起,全国大学生智能车竞赛也陆续引入了与其相关的竞赛,AI电磁组与往届电磁组不同,虽然方向都是基于采集电感的电压进行控制,但是由于此次比赛前瞻基本为零,车模速度达到一定值,很难有效的提前做出控制指令,导致赛车冲出赛道。所以本次比赛我们引入了深度学习的相关方案来弥补前瞻不足的缺陷。

正文共分为六章。第一章主要是介绍了比赛系统的整体方案;第二章从车模整体布局出发,介绍了车模各个部分安装及调整方案。第三章重点介绍了系统中所涉及的硬件设计方案和电路原理;第四章主要介绍了车模系统的软件方案包括传统PID原理分析以及着重对AI部分算法、部分核心程序进行介绍;第五章对调试过程中的一些手段进行了讲解。第六章主要介绍了车模的各方面参数。

第一章 系统方案设计概述1.1系统框图

▲ 图1.1 系统结构框图

1.2系统介绍

智能车系统的总体工作模式为:7个电磁传感器采集赛道信息,采用OPA4377运算放大器将信号输入到MIMXRT1064DVL6A微控制器,进行进一步处理获得主要的赛道信息;通过编码器来检测车速,并采用微控制器的输入捕捉功能进行脉冲计算获得速度和路程;转向舵机采用AI融合PID控制;

驱动电机采用 PID 控制,通过PWM控制驱动电路调整电机的功率;而车速的目标值由默认值、运行安全方案和基于AI处理的优化策略进行综合控制。

在训练AI算法时,我们使用NRF2401采集训练数据;赛道元素的识别以及停车使用霍尔传感器实现。根据智能车系统的基本要求,我们设计了系统结构图,如图1所示。在满足比赛要求的情况下,力求系统简单高效,因而在设计过程中尽量简化硬件结构,减少因硬件而出现的问题。

第二章 车模整体结构设计2.1车模布局

第十五届恩智浦智能车竞赛AI组采用的是C车模,其对称性好,舵机安装方便,有较大的改装前景。

C车尺寸为29×18×9.8cm,轮胎尺寸为29×60mm,通过对轮胎适当的填充海绵和进行软化处理,使车模具有极好的减震性和耐磨性。

驱动电机为RS-380,7.2V的电机功率可达19.25W,额定功率达到0.016kW,额定电压7.2V,额定电流0.5A,额定转速16200rpm,额定转矩可达10.9N·m,

外形储存29.2×37.8mm。伺服电机为S3010舵机,6V电压时扭力可达6.5kg·cm,动作速度快。

▲ 图2.1 车模侧视图

本次智能车大赛设计的智能车的外形大致如图2.1侧视图、2.1.1俯视图。

▲ 图2.1.1 车模俯视图

2.2 电池选型与安装

为了减轻车模的重量,本团队选用带保护板的两节18650锂电池进行串联供电,我们绘制了锂电池与保护板的连接PCB,购买动力型锂电池,放电能力强可以轻松带动两个RS380电机,通过合理选择电池位置以调节车体重心,使得整个车非常轻盈,加减速响应快。

2.3 舵机安装

舵机转向是整个控制系统中延迟较大的一个环节,为了减小此时间常数,通过改变舵机的安装位置可以提高舵机的响应速度。通过分析舵机控制转向轮转向的原理可以发现,在相同的舵机转向条件下,转向连杆在舵机一端的连接点离舵机轴心距离越远,转向轮的转向变化越快。这相当于增大力臂长度,提高线速度。

舵机安装方式有立式和卧式两种,比较两种方式发现,立式安装效果更好。 舵机安装时要保证左右对称,这样可以保证舵机左右转向时力臂相等且处于最大范围,提升了舵机的响应速度。经理论分析,功率等于速度与扭矩的乘机,加大转向速度必然减少输出扭矩,扭矩过小会造成迟钝,所以安装时必须考虑到转 向机构的响应速度与舵机扭矩之间的关系,获得最佳转向效果。经过实验,本团队的舵机安装如图2.3舵机安装图所示。

▲ 图2.3 舵机安装图

第三章 硬件电路设计

硬件是AI小车系统的基础,唯有一个良好、稳定、安全的硬件环境才能保证车能平稳快速的行驶。我们在整个系统设计过程中严格按照规范进行。本着可靠、高效的原则,在满足各个要求的情况下,尽量使设计的电路简单,PCB的外观简洁。

3.1 单片机系统设计

单片机最小系统是智能车系统的核心控制部件。由于AI电磁组需要将神经网络部署到单片机中,为了达到更佳的效果我们采用了具有更高性能NXP I.MX RT1064芯片。原理图如图3.1所示:

▲ 图3.1 系统核心板

3.2 电源模块设计

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

全部硬件电路的电源由两节18650锂电池串联提供(额定电压7.4V,满电电压8.4V)。由于电路中的不同电路模块所需要的工作电压和电流容量各不相同,因此电源模块应该包含多个稳压电路,将充电电池电压转换成各个模块所需要的电压。为满足需要,本车模上存在4种供电电压:

(1) 智能车使用锂电池供电,选择带均衡功能的保护板可以同时给两节电池充电,正常使用时电压在7.4~8.4V。可直接用于电机供电。

(2) 使用稳压芯片LD29150DT50R 输出电压5V,用于rt1064、隔离芯片、运放、霍尔元件、编码器等供电。原理图如图3.2.1所示

▲ 图3.2.1 电压转换7.4V-->5V原理图

(3) 使用稳压芯片LD29150DT33R 输出电压3.3V,用于OLED、蜂鸣器、按键、等供电。

▲ 图3.2.2 电压转换电路

(4) 使用稳压芯片MC34063 输出电压12V,用于半桥驱动器IR2104的供电。

▲ 图3.2.3 电压转换电路7.4V→12V

(5) 使用开关稳压芯片AS1015输出5.95V电压给舵机供电,用电池直接供电容易烧毁舵机,AS1015具有防止电流反灌功能有效提高舵机使用寿命。

▲ 图3.2.4 舵机供电稳压电路

(6)使用芯片HY2120芯片控制MOS管的导通,来保护电路,避免反接或者电流过大。

▲ 图3.2.5 电池保护板原理图

3.3 电机驱动电路

在栅极驱动芯片选择方面,我们选择IR2104芯片,IR2104芯片可以驱动高端和低端两个沟道MOSFET,提供较大的驱动电流,并有硬件死区,防止同桥臂导通。使用两片IR2104可以构成一个MOS管全桥驱动电路[2],如图3.3所示。

▲ 图3.3 全桥驱动原理图

3.4 电磁运放电路

采用简单的同向比例放大电路,电位计可用来调节放大倍数,通过对电磁信号进行放大和检波处理和可以直接供单片机的AD口读取。运放芯片使用性价比较高的OPA4377来以满足20kHz的电感采集需求。如图3.4:

▲ 图3.4 电磁信号接驳放大原理图

3.5 霍尔元件电路

由于AI组无法使用摄像头识别停车线,我们选择用霍尔元件来识别磁标停车。

▲ 图3.5 霍尔停车识别电路

3.6 传感器的选择3.6.1电感

比赛所用的电感为精确调频电感,由于今年的AI电磁组前瞻要求不超过5CM,高度不超过10CM,电感靠近舵机放置,会受到舵机工作的影响。由于传感器的信号经过后一级进一步放大,满足后面的信号检测需要,所以传感器的作用重点是在于能够将噪声滤除都多干净,这是由谐振电路决定的,所以谐振电路的带宽越窄,或者品质因素越高,过滤噪声的能力就越强。

3.6.2 编码器

光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器, 这也是目前应用最多的测速传感器之一。其获取信息准确、精度高、应用简单。

采用增量式512线光电编码器,其供电电压为3.3V或5V,输出为小幅值的正弦信号。为了将此信号放大整形,设计了信号调理电路,其基本原理是使用一个运放做成比较器电路,调节参考电压,使输出变为0V-3.3V的方波信号,送入单片机进行运算。

3.7 主控板和驱动一体板

在本系统中我们的电路板的制作主要思想是分立工作、追求简洁,便于电路板的调试和安装等工作。主控由电源稳压电路,OLED屏与按键交互电路,单片机系统以及各个传感器接口等组成。驱动板在除了原有的电机驱动电路外,还增加了编码器接口,主要目的是方便编码器的连线,以减少编码器连线过长导致的接触不良等问题。实物图如图3.7所示。

▲ 图3.7 主驱动板实物图

3.8 运放板

运放板是两块OPA4377电路的八路运放、杜邦线接口、软排线接口组成,软排线相比较杜邦线,连接简单可靠,不易脱漏,最终比赛用软排线连接,运放板的实物图如图3.8。

▲ 图3.8 运放板实物图

3.9 电磁板

将7个电磁接口和软排线,杜邦线接口画在一体,便于调试的时候更多的选择,电磁板的实物图如图3.9电磁板实物图。

▲ 图3.9 电磁板实物图

3.10 霍尔元件板

霍尔元件板是74LS30和八路霍尔元件组成,运放板的实物图如图3.13霍尔元件体板实物图。

▲ 图3.10霍尔元件体板实物图

第四章 软件设计4.1 软件框图

▲ 图4.1 软件框图

4.2 速度环控制

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

▲ 图4.2PID控制器原理框图

【对于速度环的控制在这里进行省略,需要阅读可以参阅论文原文部分】

4.3 方向环控制4.3.1 控制方案

本次方向控制方案采用AI融合PID进行控制,AI神经网络用于赛道元素的识别。智能车在直道、弯道、十字元素处使用不同的PID参数以及不同的横竖斜电感的权值。PID控制的原理与速度环相同,在此不作赘述。

偏差的计算使用6个电感分别为左右横电感(记为LH和RH),左右斜电感(记为LX和RX),左右竖电感(记为L和R)。偏差为各自差比和之和。即

4.3.2 PID参数整定

运用PID控制的关键是调整KP、KI、KD三个参数,即参数整定。PID参数的整定方法有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。

PID参数整定我们采用的是第二种方法,按照先比例后积分再微分的原则进行PID参数整定。 我们尝试了PID、分段PD、模糊PD、二次PD、单PD,发现单PD就可以达到设计要求。因此我们使用单PD方案。

4.4 AI赛道元素判断4.4.1 多分类问题

神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。对于每一个样例,神经网络可以得到的一个n维数组作为输出结果。数组中的每一个维度(也就是每一个输出节点)对应一个类别。在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0。

以赛道判断为例,0~2共三个类别。识别数字1,神经网络的输出结果越接近[0,1,0]越好。交叉熵是最好的评判方法之一。交叉熵刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。

p代表正确答案,q代表的是预测值。交叉熵值越小,两个概率分布越接近。

除此之外,还需要Softmax回归将神经网络前向传播得到的结果变成概率分布。

通过softmax回归和交叉熵对神经网络进行优化就可以解决多分类问题。

▲ 图4.4.1 网络结构

本团队使用BP神经网络对赛道信息进行分类。网络结构简化图如图4.4.1所示。输入层有7个神经元,分别对应了七个电感的数据。标签类别分别为:直道、弯道和十字。隐藏层有多层,每层均有15个以上的神经元。

4.4.2 训练

▲ 图4.4.2 十字处磁标

当车运行到十字磁标位置,霍尔传感器将检测到磁场变化,根据预先设定好的程序,车辆将知道自己处于十字区域。单片机记录电感数据,并将其标签记为“十字”。这些数据被NRF实时传输至电脑端,电脑端将记录数据用于多分类训练。

▲ 图4.4.3 弯道磁标

当车运行到弯道位置,霍尔传感器将检测到磁场变化,根据预先设定好的程序,车辆将知道自己处于弯道区域。单片机记录电感数据,并将其标签记为“弯道”。除了弯道和十字以外的其他区域,电感数据将被标记为“直道”送入电脑端进行训练。

每次回传的训练数据有9个字节,数据结构图下:

4.4.3 预测

电脑端将训练好的模型部署在单片机上,车模将采集到的电感值传入神经网络中,神经网络将预测车模所处的元素类别。车模将根据所处的元素类别使用不同的方向环PD参数和目标速度。

4.5 部分代码介绍4.5.1 传统控制部分代码说明

控制部分主要有两部分组成:1.方向环2.速度环控制,分别放在两个5ms的定时器中执行。代码如图4.5.1

▲ 图4.5.1 方向环和速度环

(1) 方向环控制:

首先,单片机会连续对每个电感采集5次,使用冒泡法将数据从小到大排序后,去掉最大值和最小值,取平均值作为该次采集的数值。经测试,该滤波效果较好,可以滤掉部分高频噪声,获得的电感值稳定。代码如图4.5.2

▲ 图4.5.2 电压软件滤波

获得电感值后,对当前采集到的值进行归一化处理。归一化的基本思想是:取得当前采集值(ADget)相对于当前赛道的最大值(ADMAX)、最小值(ADMIN)的相对大小,具体公式为:

得到归一化的电感值后,通过对多个方向的电感值融合,获得作为PID输入的偏差。在训练的过程中,我们发现在直道情况下,横电感轴向方向在磁场方向的分量大,因此横电感采集到的值大,偏差也大,横电感对于直道有很明显的效果;在弯道情况下,其中一个斜电感轴向方向在磁场方向的分量大,与其对称的斜电感在磁场方向的分量小,它们的偏差也大,因此斜电感对于弯道有明显的效果。因此,我们将横电感与斜电感通过分别赋予不同的权重,融合在一起。最终,小车相较于横电感直接差比和,有较好的直道和弯道表现,在直道和弯道间过度也非常圆滑。这为后来的PID控制打下了良好的基础。

在得到了赛道偏差后,我们便可以将这个偏差(direct_error)作为PID的输入,得到舵机打角。经过反复调试,发现车模在高速运行状态下(3m/s左右),对PD参数非常敏感:在直道上,比例项系数(KP)随着车速的提高,合适的数值区间越来越小,KP过大则会导致直道震荡,速度下降。KP过小,响应会变慢,同样使得车模的运行状态不稳定。高速情况下,小车过弯非常依赖微分项。当微分项系数(KD)很小的时候,弯道会出现转向性能不足,甚至直接冲出赛道;当KD不断增加,小车应对快速弯道的能力越来越强,但是随着KD增大,电感采集时引入的噪声也被放大,增加了小车在小偏差情况下的不稳定性。

最终,经过多次的反复测试,我们分别得到了小车在直道、弯道、环岛、十字的最佳参数。在经过神经网络计算出赛道类型后,对PID控制器里的PD参数进行相应调整,得到小车最终的舵机打角。代码如图4.5.3

▲ 图4.5.3赛道类型获取及PD控制

同时,由于斜电感在十字和环岛的特征明显,直接使用会影响到赛道偏差的正常获取,因此,在识别到十字和环岛元素时,要去除偏差控制中的斜电感的作用。

(2) 速度环控制

在速度环控制上,我们主要运用了差速算法和赛道记忆算法。

假设小车在过弯的过程中没有垂直于车身运行方向上的相对移动,由于后轮的角速度相同,内侧后轮和外侧后轮的转弯半径不同,所以它们的线速度不同。如果赋予它们相同的占空比,必然会降低弯道上的转向性能。通过前轮转角,我们可以通过公式推算出后侧两轮的差速,得到两轮的目标速度,再经过PI运算,使内外两轮达到该转弯半径下对应的线速度。小车转弯差速示意图4.5.4

▲ 图4.5.4 小车转弯差速示意图

在测量多组前轮转角和转弯半径的数据后,使用MATLAB拟合曲线,发现前轮转角和差速近似为线性关系,因此使用线性关系来代替上述差速公式。差速计算代码如图4.5.5

▲ 图4.5.5 差速计算公式

通过赛道记忆算法控制目标速度,可以实现长直道加速的效果。因此,首先让车模在赛道上慢速运行一周,通过记录编码器脉冲数,记录下各个元素的所在位置。当正式发车时,如果当前赛道类型为长直道,则提高车速。赛道记忆代码如图4.5.6

▲ 图4.5.6 赛道记忆算法

4.5.2 AI部分代码说明

在名为“数据分类”的python文件中,我们搭建了一个分类BP神经网络。训练数据保存在data.txt中。网络有7个神经元的输入层,四个隐藏层,一个三个神经元的输出层。7个神经元分别对应7个电感的数据,三个隐藏层神经元数分别为32、64、32,输出层3个神经元分别对应三种元素类别:弯道、直道、环岛。网络结构如图4.5.7:

▲ 图4.5.7 网络结构

使用交叉熵优化器来优化网络参数。训练过程如图4.5.8所示:

▲ 图4.5.8 训练过程

训练结束后,网络模型将被更新,保存为名为model.h5的H5文件。由于网络部署代码闭源而且只有一个神经元输出值,因此我们需要网络重建,将分类得到的三个神经元合并为一个神经元。在名为“网络重建”的python文件中,先搭建和训练网络一样的神经网络,并在最后添加一个单个神经元,手动赋权重。三个权重w11,w21,w31分别为-84,0,84。这样将单神经元-128~+127的输出范围分为了三个区域,分别为-127~-84代表弯道、-83~+83代表直道、+84~+127代表十字。加载训练好的网络模型文件,按网络层名称导入网络参数,即可生成最终的网络。最终网络结构如图4.5.9所示:

将最终的网络保存为car_model.h5文件,并将其部署在之智能车上即可实现对赛道元素的分类

※ 结论

由于AI电磁是一个全新的组别,本组成员没有往届经验、对人工智能领域的知识比较陌生,对python这门语言也属于初入门阶段。小组成员在“一片空白”的情况下,碰触人工智能的大门,逐步摸索、查找资料、设计机构、组装车模、设计整体方案,最终完成比赛。

对于AI电磁组,本团队在比赛最开始,采用逐飞推荐的方案,不断的采集大量数据,尝试各种神经网络,生成模型文件。但是由于数据的质量问题,导致模型出现误判或者舵机反应角度过小等等,为了解决上述问题,我们通过筛选大量的数据,人工给舵机输出乘上相应的倍数等方案来解决。通过这种方案,车模完成了由“摇头”到“丝滑”的转变。但是,采用这种方案团队调试的极限速度在2.7m/s就到达了速度的天花板,所以团队转变了方案,将AI用于训练赛道元素的提前判断,弥补前瞻不足的缺陷,实现分段PID控制,方向控制方面仍然采用传统PID方案,但是对于弯道的判断而言比传统的纯PID算法更加提前。对于硬件方面,由于团队主要一直将心思放在训练数据上,没有对车模的重心位置进行细致考究,导致车尾比车头重很多,所以在速度提升到一定程度后,车模前轮抖动与侧滑的风险大大提升,此类问题可以通过改变前轮机械结构为主销内倾来解决,但是备赛后期车模结构不能大改,团队不得不采取其他优化方案,通过增加轮胎摩擦力以及协调前轮转角与后轮差速的方法加以改善。 在备赛期间,团队也曾尝试过强化学习+监督学习的方法让车模进行自主学习。先利用传统PID作为监督机制先教车模在赛道中运动,用Python编写了 “奖励”与 “惩罚”机制,并且将速度也加入模型中,同时速度也作为一种奖励机制,提高车模的学习进度。实行该方案中遇到的最大困难便是车模进行强化学习时,数据回传周期时间达到100ms。为了解决问题,团队成员利用另一块RT1064作为信息中转站,采用多个NRF模块同时进行通信,最终将回传周期下降到了9ms。为了加快强化学习的收敛速度,团队成员在训练前采用PID监督学习的方法来教车模进行强化学习。但也许是教导的方式不完善导致车模很容易“学坏”,一旦出现冲出赛道的情况,车模会出现很大的摆动。很遗憾的是,由于疫情耽误了太多时间,该方案短时间没有带来好的效果,本团队无法继续研究强化学习的方案。本团队成员一致认为,利用强化学习的方法让小车自主学习,这样才是真正意义的智能车,而且强化学习的方法在小车控制中有很好的前景。希望未来的智能车竞赛中AI方面的组别能有参赛者可以利用强化学习,让小车跑出不错的成绩。

“宝剑锋从磨砺出,梅花香自苦寒来”,一次次的校内比赛见证了ACE智能车队艰难的蜕变。我们非常感谢山威智能车这个像家一样的地方,更要特别感谢一直向队伍提供经费,比赛场地,技术指导的学校、学院领导以及指导老师,同时也感谢比赛组委会能组织这样一项有意义的比赛。最后,希望人工智能在智能车竞赛中逐渐成熟,让智能车更智能。

标签: #循迹小车设计原理 #智能小车摄像头循迹 #智能小车摄像头寻迹 #智能小车摄像头循迹程序