赞
踩
简 介: 本文详细介绍了上海工程技术大学“萌鸡小队”在第十六届全国大学生智能汽车竞赛智能视觉组的机械、硬件及软件系统方案。本次比赛以官方指定的智能车 C1型车模为平台,以 RT1064为核心控制器,运用 IAR EmbeddedWorkbench软件作为嵌入式开发工具,采用 OPENMV IDE、PyCharm等作为人工智能神经网络训练工具。在大赛规则限定范围内,通过前轮前束等方式优化车模机械结构。通过分析赛道信息提取原理,合理选择了适合赛道检测的摄像头并自制了各模块 PCB电路板。通过经典导航+随机干扰的方式获取赛道信息数据并通过中位值平均法[13]进行软件滤波,将图片通过 PC端拟合类似图片,建立神经网络训练模型,经反复训练后将模型部署到 OPENARTmini上。采用 pid算法并结合差速控制等方法实现车模按照期望速度和路线平稳运行。
关键词
: RT1064神经网络人工智能,OPENART,mini中位值平均滤波
全国大学生智能汽车竞赛是一项以"立足培养、重在参与、鼓励探索、追求卓越"为指导思想,面向全国大学生开展的具有探索性的工程实践活动。它以设计制作在特定赛道上能自主行驶且具有优越性能的智能模型汽车这类复杂工程问题为任务,鼓励大学生组成团队,综合运用多学科知识,提出、分析、设计、开发并研究智能汽车的机械结构、电子线路、运动控制和开发与调试工具等问题,激发大学生从事工程技术开发和科学研究探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。[1]
竞赛涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识,鼓励全国有自动化及上述相关专业的高等学校(包括港、澳地区的高校)参赛。
本届竞赛中,竞速组根据所使用的车模、传感器以及比赛任务不同分为五个不同的竞速组别。参赛队伍使用指定微控制器系列作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应软件,制作一部能够自主识别道路或者目标的模型汽车,按照规定路线或者任务行进,以完成综合时间最短者为优胜。
车模使用 C型车模。车模作品尺寸不限。
车模中微控制器使用 NXP系列单片机,推荐使用 i.MX RT系列的任意一款单片机。允许使用摄像头、电感、红外光电、激光传感器等。
比赛赛道使用室内 PVC塑料底盘材料赛道。赛道具有边界黑色引导线和中心电磁引导线。赛道元素包括在 3.1.6中所描述的所有赛道元素。竞赛车模从车库出发沿着赛道运行两周,然后返回车模。车模需要分别通过三岔路口两条岔路。比赛时间从车模驶出车库都快重新回到车库为止。在车模行进过程中,需要完成以下两种任务:
在三岔路口中心前方放置一个靶标牌,上面有 0 ~9单个数字。在车模出发后,由现场裁判员随机确定靶标牌上的数字。车模行进到三岔路口时,需要根据数字的奇偶特性判断左边路口还是右边路口。
当车模离开三岔路口之后,再由裁判员将数字撤离,或者覆盖掉。用于三岔路口指明选择路口方向的数字,采用黑色宋体,加粗。数字
打印在白色打印纸上,数字的高度为 10厘米±1厘米。
在赛道某一区域(直线或者弯道)中心放置 AprilTag 25h9二维码图片。根据二维码对应数字,分别在赛道左侧,或者右侧,二维码前后 50厘米范围内放置靶标牌。
靶标牌距离赛道边缘 10 ~15厘米。下图显示了赛道上的 AprilTag以及目标靶的位置。
▲赛道上的 AprilTag和路边的目标靶位
靶标上张贴有两类物品的图案:动物图案和水果图案。每类图案又分别有五种子类别:
动物类:包括狗、猫、马、猪、牛等,动物图案包含有动物全身照片;
水果类:包括苹果、橘子、葡萄、香蕉、榴莲等;水果图案包括有水果整体照片;
◎关心动物:如果路边目标牌上的图案属于动物类,则车模需要在二维码所在的区域(前后 50厘米)内不少于 3秒钟,方能驶出车模停止区域。在 AprilTag标志前后 50厘米处会设置车模位置光电检测器,检测车模车轮是否通过该位置。以车模的车轮是否全部位于停车区域来判定车模是否位于停车区域。停车三秒是以车模后轮进入停车区域开始,到车模前轮驶出停车区域为止进行计算。
◎摘取水果:如果路边目标牌上的图案属于水果类,则车模需要使用车载小型激光发射器对准靶点中心发送一束激光,激发目标靶响应。靶心检测激光束的范围是直径为 5厘米的圆形区域。激光点落在靶心便可以触发目标靶位的响应。目标靶响应是供裁判员可以觉察的 LED灯、声音等形式给出。
在比赛中,对于没有按照要求车模完成相应的任务,每一次失误都将会在最终比赛时间加罚 15秒钟。比赛过程中,车模应该自主完成所有的任务,不允许接收场外发送的任何信息。
目标牌中中心距离地面 15厘米,其中图案的有效占据面积大小为 10×10厘米,目标牌中检测激光点区域在靶标中心直径为 5厘米的区域。如果射击水果的激光束信号落在目标靶心直径 5厘米范围外,则判断此次任务没有未完成。
关于对车载激光器发射相关参数(激光频率、发射光功率、调制频率,光斑形状)等将会连同目标靶参照制作方案另外发布。
(2)AprilTag
赛道上的 AprilTag使用的是 25h9系列。使用黑白激光打印机打印在白色打印纸上,尺寸为 15×15厘米左右。
智能车作为一个整体系统,主要分为机械设计、硬件设计、软件算法三个部分,这三部分关联紧密,相互影响。其中机械部分决定了智能车能力的运行速度极限,硬件电路为智能车的运行提供必需的电源、检测设备等,软件算法是智能控制的核心,它控制机械和电路部分,是使智能车智能化运行的关键保障。
智能车机械部分的整体设计原则是车身对称、连接牢固、重心稳定、性能优良、车体美观等五个方面。我们根据机械构造原理,在大赛规则允许的范围内对车模进行了设计调整,以改善车模的机械性能;同时对电感支架进行了加宽,充分的保护了电感,以提高传感器的稳定性。车模整体如图 2.2及图 2.3所示。
硬件电路是智能车系统运行的基础。硬件电路的设计原则是精简、稳定、高性能、集成化。[2]电路过于复杂会增加故障的概率,所以需要对布线、器件摆放科学考虑。在运行过程中,硬件部分必须稳定,尤其是电源模块供电的稳定,保障智能车运行的动力。而且还要集成化,模块化,这样可以方便检测、修改,且利于电路板的制作与使用,使得电路更加简洁可靠。智能车电路主要包括:微处理器最小系统、传感器电路、驱动电路、电源模块等其他周边电路。各模块设计详见第四章内容。
软件部分主要是针对微处理器 RT1064的程序编写及神经网络训练,通过电磁提取赛道信号并通过控制算法处理,最终实现竞赛目标。软件设计的主要原则是:高效率、规范化、易读写、结构化。程序编译环境选用 IAR,模型训练的编译环境为 MATLAB及 PyCharm,主要程序编写语言为 C语言及 Python语言。软件设计及模型训练方法的具体思路将在第五章做详细介绍。编译环境及调试方法将在第六章详细介绍。具体代码详见附录 B。
机械结构是智能车的基础,决定了小车的性能,特别是车模整体重心、转向、加速性能、车轮的抓地力、牢固度等。本章主要通过对车模转向的分析以及对汽车理论知识的学习和应用,针对小车转向、重心、抓地力等进行了改进,使得小车的灵敏度与稳定性得到提高、在加速减速时与赛道的贴合力更强,同时舵机效率也得到很大的提高。
此次竞赛的四轮车模选用由东莞市博思电子数码科技有限公司提供的新C型车模。车模基本信息如图3.1所示。
▲ 图3.1车模基本信息
重心的高度是影响智能车稳定性的因素之一。当重心高度偏高时,智能车在高速转弯过程中会发生轮胎脱离赛道的情况,严重时甚至会翻车。同时在速度控制时受轮胎的摩擦力影响较大,在后期提速时会具有较大影响,重心的水平位置同样会对车模转向具有非常大的影响。重心过前,转向阻力增加,引起转向迟滞。重心过后,则会使小车前轮抓地力不足,造成转向时不稳定。实际调整以重心车模中心处为准,保持各部分重量均衡。因此,从小车稳定性考虑,我们尽量降低重心高度,适当调整重心的水平位置,从而保证小车可靠稳定。
为了使小车具有较好的稳定性及转向性能,我们尽可能降低 PCB主板,采用四个 M3*25铜柱与 3D打印件连接,从而降低重心,提高小车的稳定性。
由于电池质量大、惯性大,对车模的动态性能影响较大。因此电池的固定必须牢固,以防在车模运行过程中电池发生移动甚至甩出车外。AI电磁组对电池的安装位置无硬性要求,所以我们结合重心对稳定性的影响的考虑,将电池用扎带牢牢固定在车模底板上使前后重心平衡的位置。
由于智能视觉组不限制摄像头高度,我们总钻风摄像头距离地面的高度为45cm,根据智能识别的要求我们把 openart mini放在总钻风的前方,并且由一个舵机控制其转向。
我们采用 512线 mini编码器作为速度传感器。在编码器的安装时,要考虑到齿轮啮合的问题,不能过松或过紧且尽量安装在靠近车中心的位置。避免因轴松动而导致速度反馈不准确,同时也防止因碰撞导致编码器的位置发生变化。
为了使智能车在直线行驶时保持稳定,转向轻便,转向后能自动回正,减少轮胎和转向系零件之间的磨损等,在转向轮、转向节和前轴之间须形成一定的相对安装位置,称为车轮定位,其主要的参数有:主销后倾、主销内倾、车轮外倾和前束[4]。智能车竞赛中模型车的四项参数都可以调整,但是由于车模加工和制造精度的问题,在通用的规律中存在着一些偶然性。
前轮前束是指前轮两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角。[5]其作用是减少轮胎的磨损,保证车模的行驶性能。前轮在滚动时,其惯性力自然将轮胎向内偏斜,若前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。前端小后端大的称为“前束”,反之则称为“后束”或“负前束”。在智能车车模中,前轮前束是通过调整由舵机带动的左右横向拉杆实现的。主销在垂直方向的位置确定后,改变左右横向拉杆的长度即可以改变前轮前束的大小。在实际的调整过程中发现前束 4mm可以减小转向阻力,使模型车转向更为轻便,更容易通过弯道。
据观察,新购买的轮胎普遍偏硬,表面较光滑,车模在转向时经常会出现打滑的现象。因此在遵守竞赛规则要求的前提下,对轮胎进行了适当处理。
首先用砂纸对轮胎进行了打磨。经打磨后的轮胎,表面粘性变强,抓地力会提升,但随着时间推移,胎面逐渐硬化,抓地力会下降。因此需要定期对轮胎进行打磨,以保持良好的性能。
其次对轮胎进行软化处理。在轮胎表面均匀涂抹适量轮胎软化剂,再用保鲜膜将轮胎包裹,重复此步骤一周左右即可达到软化轮胎的效果。轮胎经软化后可增加与赛道之间的摩擦力,有效防止了车轮打滑,转向性能得到提升。
最后在轮胎周围涂胶。因轮胎变软,当车模运行速度达到 2.5m/s左右,轮胎会因为转向时离心力过大而发生轮胎与轮毂脱离。为防止上述现象,在轮胎与轮毂连接部分涂抹适量 704白色硅橡胶,粘合轮胎与轮毂。硅橡胶在一周左右后会出现开裂的情况,开裂后则重新涂抹即可,采用白色硅橡胶目的是便于观察开裂情况。
据观察,车模中间图像数值会出现大幅度不稳定的跳动。经实验发现,舵机通电时,其数值均会出现大幅度不稳定跳动的现象。因此在舵机外侧包覆了四层锡箔纸以屏蔽舵机的磁场信号。同理,为防止电机磁场信号对编码器的影响,在两个电机外侧也包覆了锡箔纸。舵机外侧锡箔纸如图 3.7所示。
▲ 图 3.7舵机外侧锡箔纸
为提高车模整体性能,我们对车模进行了定期的保养。首先清理车轴与轴承之间杂物;其次在前后轮车轴与轴承之间涂抹轴承润滑油,以减小二者之间的摩擦力;最后在电机齿轮、车轴齿轮及编码器齿轮之间涂抹润滑脂,以增强车模的动态性能。
硬件电路在整个智能车系统中占据非常重要的地位,是整个系统能够稳定运行的基础。硬件电路的设计不仅需要考虑功能性,而且需要对其稳定性及可靠性进行准确的设计,需要不断的测试与改进。鉴于多方面考虑与不断改进,本着安全、稳定的原则。我们组使用 AltiumDesigner设计了一款模块化、稳定性强、集成度高的主板。主板的设计原理图详见附录 A。主板的 PCB如图 4.1所示。
▲ 图 4.1主板 PCB图
在单片机的选型方面,因为 AI模型的加入,导致整个程序大小将近 1MB左右。一般的 M4单片机容量都不是太大,而且自己后期再加入一些其他复杂的程序,代码会更大,所以我们选用了 NXP的跨界 MCU RT1064来运算 AI程序以及车模控制相关的程序,它具有 600M的主频,内置 4MB的 flash,内置 1M RAM,使用起来不会那么局限。
车模使用原装的 380电机、舵机使用车模原装的 S3010。由于车模采用的是闭环控制系统,最重要的一个反馈量便是车模的行驶速度。使用龙邱 512线mini编码器来测量车模运行速度,该编码器为增量式测速且兼容正交解码,转速高达 10000rpm,与高速电机匹配不会丢步。编码器体积小,重量轻,抗扰能力强。
电源模块是硬件系统稳定运行的关键保障,是能源供给的核心。整个硬件系统的工作完全由电源供电的可靠性决定,电源供电不稳会导致电池损耗、单片机复位、电感采集数据不稳定等问题。因此电源设计是硬件电路的重要一环。在 PCB布局中电容的去耦作用尤为重要。本次竞赛的电源需求包括 3.3V、5V、6V、7.2V等。
3.3V供电我们使用 AMS1117芯片作为稳压芯片,它是一款低压差的线性稳压器,提供完善的过流保护和过热保护功能,它可以确保输出电压和参考源精度在 ±1%的精度范围内。其原理图如图 4.2所示。
▲ 图 4.2 3.3V稳压电路原理图
5V供电我们采用的是 LM2596S芯片作为稳压芯片,该芯片内部集成频率补偿和固定频率发生器,在特定的输入电压和输出负载的条件下,输出电压的误差可以保证在 ±4%的范围内,同时具有自我保护电路。其原理图如图 4.3所示。
▲ 图 4.3 5V稳压电路原理图
6V供电我们采用 LM2941芯片作为稳压芯片,其具有短路保护、热过载保护等功能,经 LM2941稳压后,电源输出很稳定,变化不超过 2%。该电源电路设计简单、功能完善且可靠性好。电路原理图如图 4.4所示。
▲ 图 4.4 6V稳压电路原理图
由于电池直接输出的 7.2V电压不是特别稳定,如果直接给其他模块供电可能会引起模块不能正常工作。所以并联一个 680 的电解电容和 0.1 的贴片电容,滤掉杂波,使得输出的电压尽可能稳定。电路原理图如图 4.5所示。
▲ 图 4.5 7.2V稳压模块
驱动电路是智能车对电机驱动及控制的保障。电机驱动的基本原理是 H桥驱动原理,如图 4.6。本组采用的 H桥驱动电路为 MOS管搭建的 H桥电路,采用 IR2104专用栅极驱动芯片。该驱动芯片能够提供较大的栅极驱动电流,并具有硬件死区、硬件防同臂导通等功能。驱动电路原理图如图 4.7所示。
▲ 图 4.6 H桥原理图
▲ 图 4.7驱动电路原理
霍尔元件和干簧管作为两种不同的磁控开关,在智能车竞赛中常用于检测赛道起跑线,由于干簧管可能出现误判的情况,故选用霍尔元件检测赛道起跑线处磁铁。霍尔元件的工作原理[7]为:磁场中有一个霍尔半导体片,恒定电流I从 A到 B通过该片。在洛仑兹力的作用下,I的电子流在通过霍尔半导体时向一侧偏移,使该片在 CD方向上产生电位差,这就是所谓的霍尔电压。霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低,霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号[10]。停车检测模块原理图如图 4.9所示。
▲ 图 4.9停车检测模块原理图
人机交互模块由 TFT屏幕、按键、蜂鸣器、发光二极管等组成。主要用于调整车模运行方式、告知车模使用者车模状态及显示相关工作参数。其部分电路原理图如图 4.11所示。
▲ 图 4.11人机交互设计
全国大学生智能汽车竞赛至今已成功举办了十六届,每年都有新的比赛项目出现,智能视觉组是今年新增的项目。智能视觉组与往届的普通四轮组相比,不限制任何摄像头传感器、激光传感器等,但是任务复杂,这就考验到神经网络是否能够“预判”赛道信息。经过多种方案的对比测试,最终选择使用逐飞的方案,将模型放入 openart mini中运行,通过串口发送指令,完成比赛任务。
神经网络的选取是 AI视觉组的核心问题。目前所使用的 AI算法大多属于机器学习的范畴,都需要对收集到的数据进行训练,获得良好的模型参数。我们把官方给的的数据收集起来作为模型训练的数据集。但是在训练过程中,我们发现训练出的模型由于层太少,导致准确率太低。于是,我们对数据集进行处理,筛选,使得准确率变高。其次,理想的训练环境和小车实际环境存在着差异。训练后量化技术可以理解成一种有损压缩,会损失一点精度,但是,会显著降低模型尺寸,同时提高运行效率。量化的原理其实很简单。模型在训练时一般是使用 float32类型来存储的,每一个权重数据需要占用 4个字节,这样才能精确地降 loss。但是,模型的推理却没有这个要求了,那么是否可以换种方式来存储呢?比如改用 int8,这样,每存储一个权重,将只消耗 1个字节,模型的尺寸会缩小为之前的 1/4,何乐而不为?幸运的是,这样对精度的影响通常极小,只要是在可接受的范围内,我们就降低了模型的存储尺寸。而且,目前神经网络加速器或是神经网络加速库,一般只支持 int8类型的数据输入,对 float类型无能为力。最终,综合考虑比赛场地的差异、、神经网络的鲁棒性以及自身能力等多方面因素,最终我们决定采用最简单也是最可靠的 nncu模型,再结合传统 PID的控制方式。
神经网络运算时间决定了 OPEN artmini识别的准确率,对小车来说至关重要。在确定了整体方案后,我们首先对神经网络的运算时间进行了测量。经测量发现:经过量化的神经网络计算需要将近 450us,浮点运算的神经网络需要 1100us左右,加上其他所有程序所需要的时间也只有 2200us左右,而小车的控制周期是 5ms。因此得出结论,浮点运算的神经网络可以满足我们当前的要求。神经网络结构如图 5.2及图 5.3所示。
在经过神经网络运算时间测评后,我们在逐飞教程上搭建神经网络。在搭
建过程中,我们使用 nncu函数,通过设置网络参数,可以修改隐层数量、神经元个数、激活函数、训练次数、学习率、训练算法等。神经网络参数设置参数如图 5.4所示,网络结构示意图如图 5.5所示。
在本次神经网络训练中,为了能够准确反映当前的赛道信息,神经网络的输出是电感前瞻的位置偏差,输入则是由五个前瞻电感值和左、右轮的速度构成。
隐层的激活函数分别为非线性激活函数“logsig”、“tansig”和线性激活函数“purelin”。不同的组合训练出来的效果有差异,且训练时间也不同。
在 nncu底层使用的 CMSIS-NN老式库中,量化系数给出了是由多少个位来表达 tensor中的整数部分和分数部分,并且整数都是有符号整数。
比如,对于 8位量化,如果由 3个位表示分数,那么就有 1个符号位,4个整数位,和 3个分数位,表达范围是[-128/8,127/8],分辨率为 1/8;如果是 4个位表达分数,则表达范围就是[-128/16,127/16],分辨率为 1/16。下图就演示了手工指定全局(所有层)的量化都使用 3个位来表达分数部分:
在 nncu中量化模型,既可以由用户指定一个全局的数值来配置表达分数的位数,就像是在电磁 AI中的做法;又可以像 tflite那样提供一个代表性的数据集来估算各 tensor的取值范围。
Keras支持的两种训练方式,其一就是我们在 “智能车大赛 AI视觉组参考答案”推文中所用到的方法 ——集中式数据加载,这种方式( model.fit(xx))的好处是实现简单,可以实现发射后不管,用户需要关心的仅仅是数据集的准备以及 epoch和 batch_size参数的设置。其缺点也是显而易见,这种方式, Keras在进行模型训练的时候,会将数据集一次性装入内存,可是,地主家也有缺粮食的时候啊,如果遇到数据集巨大的情况,我们的内存可能就要哭诉 “臣妾办不
到啊 ”。
model.fit(x_train, y_train, epchs=100, batch_size=32,
validation_data=(x_test,y_test), callbacks=callbacks)
这个时候,我们就要考虑使用另一种方法了 ——分散式数据加载,这种方法( model.fit_generator(xx))的用法几乎与前者相同,但是,此时 data就不能直接传入数据集本身了,需要手动去定义一个 data的 generator,以迭代器
的形式表示数据集,手动控制数据导入,每次仅装入一个 batch,保护弱小的内存。卷积神经网络的本质是特征的提取,如何提取高质量的特征,是重中之重,而不同深度的层对于特征的提取是不同的。其中,浅层网络负责提取基础特征,比如边缘,轮廓等,深层网络提取抽象特征,更像是基础特征的组合。对于分类网络,通常最后一层会跟着一个全连接层,对这些特征进行组合,以评分分类。
针对此,我们在进行模型设计的原则,通俗点讲就是 deeper and deeper wider and wider,深度是针对于网络层而言,而宽度是指针对某一层所对应的模型输出通道数。
一般而言,模型层数越多,所提取的抽象特征所具有的表达能力就会越强,因为他们能够学到更加复杂的表达。想象一下,如果模型只有一层,那就意味着所要学习的变换会非常的复杂,这很难做到。而模型越深,可以缓解每一层的压力,不必要去过度拟合。而如果模型更宽,可以让每一层学习到更加丰富的特征,比如不同方向,不同频率的纹理特征。
当然,网络也不是越深越好,网络太深最容易导致的问题是梯度消失,解决方法是引入残差连接网络,例如 mobilenet v2中的 bottleneck块,引入通道间的高速通道,将梯度信息直接传递到下一层。
而如果网络宽度过大,会大大影响系统的计算效率,因此,需要合理设计,达到最优效果。再补充说明一下,在进行模型构建的时候,可以引入一些经典的网络块,这些网络块本身已经被实践说明是很有帮助的,比如 Inception:引
入更宽的网络,参数更少; Densenet:强调特征的复用,善于检测小物体;还有提到的 mobilenet v2:解决梯度消散问题。
另外一个需要注意的是模型过拟合的存在,过拟合的最典型现象就是,发现模型本身在训练集上的效果很好,几乎能够达到 100%的分类精度,而在测试集上的表现却是差强人意。究其原因,无非是两种,其一数据集体量过小,其
二是模型过于复杂。
针对模型本身存在的问题,可以考虑适当对模型结构进行精简,或是插入一些特殊的层,比如 batchnorm层和 dropout层,对于 dropout层,其在训练期间会自动忽略一些层不参加训练,在不修改模型本体的基础上,间接的缩减模型尺寸。一般设置丢弃率为 0.25-0.3,但是在模型推理中,不受影响,且一般插在 Dense层之后。
闭环控制指作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系,即带有反馈信息的系统控制方式。电机速度闭环能够使得速度稳定在期望值附近,使得小车精准控制速度,小车加速、制动性能得到提升。增量式 PID控制是通过对控制量的增量(本次控制量和上次控制量的差值)进行 PID控制的一种控制算法。我们采用增量式 PID来控制小车的速度,达到良好的速度闭环效果。
在速度控制方式上,我们采用阿克曼电子差速控制的方法。依据阿克曼转向几何设计的车辆在沿着弯道转弯时,利用四连杆的相等曲柄使内侧轮的转向角比外侧轮大约 2~4度,使四个轮子路径的圆心大致上交会于后轴的延长线上瞬时转向中心,让车辆可以顺畅转弯。[8]经过测量可得 pst(转向值)与转向角度 之间的关系。设车辆行驶速度为
中心线提取算法的基本思想如下:
(1)直接逐行扫描原始图像,根据硬件二值化结果直接提取出边界坐标;
(2)图像数据量大,全部扫描一遍会浪费很多时间,利用前面已经求出的中线位置判断出中线的趋势,从而推断出下一行的中线大概位置,确定出扫描范围,避免整行逐点扫描,节省时间。求中线时,因为近处的中线稳定,远处中线不稳定,所以采用由近及远的办法;根据上一行的左右两边的坐标,确定本行的边线扫描范围。在确定的赛道宽度范围内提取有效赛道,这样可以滤除不在宽度范围内的干扰;
(3)根据采集到的赛道宽度,判断是否采集为真正赛道,滤除噪点造成的影响;
(4)图像是远处小近处大,所以赛道宽度范围和前后行赛道中心的位置差别都要动态调整;
IAR Embedded Workbench是一套用于编译和调试嵌入式系统应用程序的开发工具,支持汇编、C和 C++语言。它提供完整的集成开发环境,包括工程管理器、编辑器、编译链接工具和 C-SPY调试器。IAR Systems以其高度优化的编译器而闻名。每个 C/C++编译器不仅包含一般全局性的优化,也包含针对特定芯片的低级优化,以充分利用所选芯片的所有特性,确保较小的代码尺寸。IAREmbedded Workbench能够支持由不同的芯片制造商生产,且种类繁多的 8位、16位或 32位芯片。调试界面如图 6.1所示。
▲ 图 6.1 IAR调试界面
OPENMV IDE中文版由星瞳科技联合美国官方独家发布,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。OPENMV IDE是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。而且 MATLAB内置了丰富的神经网络工具箱。图 6.2为模型训练工具示意图。
▲ 图 6.2模型训练工具示意图
通过 DAP下载器进行程序下载。IAR具有断点调试、调用栈,实时观测等在线调试方法,不仅可以实时观测变量参数的变化,还可以帮助开发者查询程序中的 BUG。
[1]卓晴,黄开胜,邵贝贝.学做智能车 [M].北京:北京航空航天大学出版社.2007.
[2]王益涵孙宪坤史志才.嵌入式原理及应用.北京:清华大学出版社,2016.
[3]王建辉顾树生.自动控制原理.北京:清华大学出版社,2014.
[4]何西海,胡延忠. (1997).汽车主销后倾角内倾角测量原理分析[J].汽车实用技术(4), 15-17.
[5]张文春.汽车理论 [M].北京.机械工业出版社.2005.
[6]童诗白,华成英.模拟电子技术基础 [M].北京:高等教育出版社,2001.
[7]阎石.数字电子电路基础.北京,高等教育出版社, 2005
[8]张厚忠,苏健,张勇.电动汽车低速转向电子差速兼顾辅助转向控制[J].重庆理工大学学报(自然科学),2017,31(08):14-21.
[9]王能才.基于电磁导航的智能车信号检测与控制策略研究[D].兰州理工大学,2014.
[10]王瑞峰,米根锁.霍尔传感器在直流电流检测中的应用[J].仪器仪表学报,2006(S1):312-313+333.
[11]范展源,宋明富.“恩智浦”智能车坡道检测策略[J].信息记录材料,2019,20(08):202-203.
[12]王祎晨.增量式PID和位置式PID算法的整定比较与研究[J].工业控制计算机,2018,31(05):123-124.
[13]陈家益,董梦艺,战荫伟,曹会英,熊刚强.中值检测的迭代中值滤波算法[J].现代电子技术,2020,43(07):70-73+77.
[14]李彦冬,郝宗波,雷航.卷积神经网络研究综述[J].计算机应用,2016,36(09):2508-2515+2565.
[15]刘彩红.BP神经网络学习算法的研究[D].重庆师范大学,2008.
[16]高强.基于 BP神经网络的图像识别方法[J].电子世界, 2017 (17): 59-59.
[17]张德丰等编著.MATLAB神经网络应用设计:机械工业出版社,2009.1
● 相关图表链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。