智能车竞赛技术 告 | 智能车视觉 – 中国海洋大学 – The Waves

??在车模行进过程中,需要完成以下两个任务。

  • 任务一:根据三叉路口数字标靶上数字的奇偶来选择从哪条支路走,如果是偶数则选择右侧路口,如果是奇数,则选择左侧路口,第二圈选择的支路方向与第一圈不同。
  • 任务二:识别道路中的Apriltag,并且根据路边标靶的图案来执行不同动作。如果是动物,则在该区域停止三秒钟以上。如果是水果,则使用激光击打水果。

??最终根据任务完成情况和运行完赛道的时间,得到最终的完赛时间。

1.3 方案总体介绍

??比赛跑道表面为白色,两边有连续黑线作为赛道边界线,黑线宽度规定为20-30mm。赛道正中央有电磁引导导线。车模通过采集电磁信息进行路径检测。参赛队员的目标是使智能车按照规则在行驶过程中完成视觉组的一些指定任务,并且以最短时间在赛道上运行两周并进入车库。根据竞赛规则相关规定,本智能车系统采用大赛组委会统一提供的 C 型车模,以 NXP 公司生产的 32 位微控制器I.MX RT1064作为核心控制器,使用python进行视觉方面的模型训练,在IAR开发环境中进行软件开发。通过OpenART 摄像头扫描赛道元素,比如Apriltag、动物图片、数字标靶、水果图片。将摄像头识别到的图像分类结果通过五个IO端口并行输送到I.MX RT1064微控制器,微控制器根据得到的分类结果来控制执行器产生相应的动作;通过编码器来检测车速,并通过单片机正交解码进行脉冲计算获得速度和路程;转向舵机和驱动电机分别采用PD, PID控制,并且使用舵机转向+差速的算法来实现转弯。通过 PWM信 来控制驱动电路调整电机的功率,进而控制速度的大小。

 

第二章 机械结构设计及调整


??设计一辆性能优越的智能车,首先需要让车模拥有稳定的机械结构。稳定的机械结构有利于编写智能车的控制算法,尤其是在车模高速运行时,它可以有效地减少车模飘移、抖动带来的干扰,降低控制难度。所以,它不仅是设计控制策略和算法的基础,也是突破智能车速度瓶颈的关键。因此,我们在遵守竞赛规则的前提下对车模进行了多方面的调整以使车模具有更良好的运行性能。

2.1 整体布局

??根据智能视觉组竞赛规制,本次竞赛选用北京博思威龙科技有限公司生产的智能车竞赛专用模型车(C1型模型车),车模的驱动方案为前轮转向,后轮驱动,采用双驱RS380马达,配套伺服器型 为 S3010。该车模采用了车盘一体化以及后轴双轴设计,具有刚性足、重心低、操控性强的特点,但是在实际使用过程中,低底盘机构虽然降低了重心,让车模在运行过程中更稳定,但是不利于车模通过坡道,故设计时未安装影响车模上坡的前泵把,并对整体重心进行调整,防止车模在坡道最高点卡住。组装完毕的智能车如图2.1所示。

2.2.2 摇头舵机

??控制识别摄像头转动的摇头舵机对摄像头的识别能力有着一定的影响,为了能够获得较好的视野,所选摇头舵机拥有300°的转动角度,并将其安装在车模正前方,底部通过热熔胶与转向舵机相连,并用支架固定,确保摇头舵机在车模高速行驶的过程之中不会剧烈晃动。使用轻便坚固的碳纤杆作为摄像头以及激光发射器的支撑材料,并让两者平行地指向同一角度。

2.4 重心调整

??由于重心靠前会造成舵机负担,重心过于靠后又会导致侧滑,所以在保证车模顺利通过坡道的前提下,要尽可能的降低车子的重心并保证重心在整车的中轴线上。待各部件都安装完毕之后,调整电池的位置来调整车模的重心,并通过多次实际测试确定电池的安装位置。为了避免自锁轧带影响车模通过坡道(扎带可能会与坡道最高点刮碰),电池用魔术贴粘在底盘上

??电路根据不同外设供电需要,需要从7.2V镍铬电池设计不同的稳压电路,用来提供6V舵机供电、5V单片机供电、3.3V编码器供电,另外电机的供电直接使用电池输出电压,无需做稳压处理。

3.2.2 6V舵机稳压电路的设计

??AS1015是一款DC-DC降压转换器,可以满足5A的输出电流。利用脉宽调制控制方案,以300千赫的固定频率切换,输入电压的范围为3.6-23V,为客户提供0.8-Vin的可调输出电压。AS1015提供使能功能,可由外部逻辑信 控制,并且由于内部补偿,在线路或负载瞬态期间具有出色的调节能力,输出电压范围广,可以满足不同负载需要。另外还可以满足100%最大占空比输出,用于低压降情况。

??参考芯片手册推荐电路,设计了自己的电路:

??LM2596S管脚定义:

??表3.3 LM2596S管脚功能表

??管脚 管脚名字 管脚功能
??1 VIN 正输入端,该管脚一般提供一个旁路电容减少暂态电压
??2 Output 输出端,输出端一般接一个LC滤波器,滤除高频干扰
??3 Ground 接地端
??4 Feedback 反馈端,这个管脚把输出端的电压反馈到闭环反馈回路
??5 ON(——)/OFF
??这个管脚可以使用逻辑电平把LM2596切断,低电平该芯片工作

??5V稳压原理图电路设计:

3.3 电机驱动电路的设计

??电机驱动芯片选用BTN7971B驱动芯片,它具有逻辑电平输入、电流检测诊断、压摆率调整、死区时间产生以及过温、过压、欠压、过流和短路保护,便于进行控制和电路设计,且驱动能力满足智能车智能视觉组的使用要求。BTN7971B与其他BTN7971B结合使用,可以形成H桥电机驱动。

??电流采集使用BTN的引脚进行负载电流输出,IS引脚与负载电流成比例(比例一般为19.5K,具体见芯片数据手册)的电流源,在该引脚上配置检流电阻,可以通过AD接口采集到电压得到相应的电流值。
??对BTN的使能引脚进行单独控制,配合电流检测可以对BTN的使能状态进行控制,检测到过流时,切断BTN输出,对电机进行过流保护。

??在BTN的电源和地之间接470nf的电容,进行滤波,减少电机造成的地抖动。下面是BTN7971B的封装:

??参考上面H桥设计电路,最终设计了该驱动电路原理图如下:

3.4 六路电磁运放的设计

3.4.1 四路电磁运放的设计

??运算部分采用OPA4377,目前可以通过匹配外接电阻达到147倍的放大倍数,可以通过改变电阻大小来改变放大倍数。OPA4377运算放大器是四路通道的运放,可以采集四路电磁信息,对比二路通道的运放,多通道运放可以简化PCB布局,并且也可以做到对称布线,提高信 质量和对称性。电磁运放的接口设计为下面这种,为可插拔式,方便更换运放。

??六路电磁运放的设计是采用两个四路电磁运放模块,四路电磁运放原理图如下:

3.6 PCB设计

3.6.1 主控板PCB设计

??主控板直接和底座匹配,上面有两个四路电磁运放的插座,还有电机驱动板的插座,这两个模块都可是随时插拔更换。

3.6.3 电机驱动PCB设计

??驱动板采取了双面设计,在上下两面都安置有电子器件,这样可以节省空间,节约主控板的面积,驱动板也设置了插针,可以直接插在主控板上。由于驱动板过电流比较大,电源供电接口采用XT30,最大过电流为30A,完全满足要求。

3.7 传感器的选择

3.7.1 OpenART摄像头

??如下图,比赛所用的摄像头为OpenART摄像头,OpenART不仅可以很轻松的完成机器视觉应用,还可以完成OpenMV不能完成的神经 络模型的部署和训练。采用I.MX RT1064 芯片,其主频达到 600MHz,同时拥有1M片内SRAM、4M片内FLASH以及32M外置SDRAM,图像处理速度极快。支持两种供电方式,一种通过type C供电,可以直接电脑调试。另外一种是5V外部供电,该摄像头还可以有3V3的输出电压端,可以对外部传感器供电。

3.7.2 编码器

??如下图光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换为脉冲或者数字量的传感器,增量式编码器是将位移转换成周期性的电信 ,再把这个电信 转变成计数脉冲,用脉冲的个数表示位移的大小。绝对值编码器为每一个轴的位置提供一个独一无二的编码数字值,单圈绝对值编码器把轴细分成规定数量的测量步,最大的分辨率为13位,这就意味着最大可区分8192个位置,我们使用的是9位的,可以区分512个位置。我们使用的光电编码器是绝对式编码器,这是目前应用最多的测速传感器之一。其获取信息准确,精度高、应用简单。该编码器的供电电压为3.3V-5V,可以满足不同IO口电平的单片机。

3.7.3 线性CCD

??我们使用的线性CCD是一款基于TSL1401CL芯片设计的线阵CCD传感器模块,TSL1401CL 线性传感器阵列由一个 128 x 1 的光电二极管阵列,相关的电荷放大器电路和一个内部的像素数据保持功能组成,它提供了同时集成起始和停止时间的所有像素。我们常说的摄像头CCD模块通常使用的是面阵CCD芯片,一般以OV系列面阵CCD最为常用。而TSL1401属于线性CCD也叫做线阵CCD。与面阵CCD相比,我们用的这一款线性 CCD最明显的特点就是其只能采集一行128个可视像素点,我们使用线性CCD是用来扫描车库前面的斑马线的。

4.1.2 AD采集与滤波

??滤波算法是智能车控制中不可或缺的一部分。它可以从含有干扰的接收信 中提取有用信 ,很大程度上保证了采集到的信 的真实性和稳定性,在智能车采集电磁信 时,它是抑制和防止环境干扰的重要措施。

??常见滤波方案有均值滤波、中值滤波、数值限幅、平滑滤波等,在进行AD采集时我们使用了均值滤波法。在读取ADC数据时,连续采样N次(实际调用时采样次数为5次)作为一组数据,去掉这组数据的最大值和最小值后再求平均。已将该功能封装成函数,如图4.2所示。

??数据归一化后,分别计算前后两个电磁前瞻的电磁信 的差比和,所使用的差比和公式为
??█(error=(√(ele_L )-√(ele_R ))/(√(ele_L )+√(ele_M )+√(ele_R ))#公式3)
式中:
??ele_L——左侧电感值 ele_R——右侧电感值
??ele_M——中间电感值(由前端中间两个电感求平均所得)
??该公式是在传统的差比和公式的基础上,通过实验测试改进得到,可以很大程度上增加电感信 的变化的线性度。代码如图4.4所示。

??虽然较长的电磁前瞻能使智能车“看”得更远,但是会在过弯时会伸出赛道太多,所计算的差比和数值较小,会导致弯道处舵机打角不足而冲出赛道。所以增加了后端电磁前瞻弥补弯道处打角不足的问题。后端2个的电感离车模比较近,在过弯的时候差比和数值比较大,只要在前端电感偏出赛道之后切换到后端电感控制舵机占空比,就可以流畅地驶过弯道。代码如图4.6所示。

??PID控制分为很多种,常用的有增量式和位置式两种算法,对舵机进行控制时,我们先采用增量式算法计算输出增量?u(k),再通过u(k)=u(k-1)+?u(k)转换为位置式输出给舵机。这种算法计算量小,本质上具有抗积分饱和功能的优点,适合用于控制需要快速响应的舵机。

??由于本次竞赛采用了双前瞻循迹方式,且前后两个电磁前瞻应用场景不同,故在计算输出占空比时采用了两套不同的PID参数。代码如图4.8所示。

??车模出库的状态直接决定其接下来的稳定性,因此设计时牺牲了一些出库的速度以保证车子的稳定性,代码如图4.10所示。

??虽然出入库都是使用线性CCD识别斑马线,但是两种情况下斑马线相对位置不同,故识别算法也不同。入库时斑马线的CCD图像如图4.12所示。

??出库时,若线性CCD图像中出现有效白线(黑色点小于10个)到有效黑线(黑色点大于40个)的跳变,则认为识别到一条斑马线。代码如图4.14所示。

4.2.3 三岔路口

??因为在到达三岔路口前先经过环岛,且两者离得较近,为了能够在三叉路口处精准停车识别图片,故在出环岛后智能车减速。当智能车到达三岔路口时,前端的电磁前瞻中间两个电感远离赛道,所采集的电感值小于正常行驶时,两侧电感离三岔路口的两个分岔较近,电感值较大,而后端的电磁前瞻仍处于直道,没有明显变化,根据这一特点可以准确地识别出三岔路口。停车之后,依靠摄像头识别标靶确定方向,接收到摄像头数据后,前轮转向相应方向,继续前进。

??经过实际测量,电机在满电压输入且空转的情况下,其编码器最大读数为330,我们将这一最大值作为满速,将其分为330份,每一份为1单位速度。因为左右两个编码器安装方向不同,故读取的脉冲数存在负数的情况,偏差计算公式也有所不同,相应的偏差计算代码如图4.16所示。

??但需要注意的是,计算出来的输出占空比有可能会超过最大占空比50000,所以需要对计算结果进行限幅。除此之外,当计算结果为负时(反转),硬件无法自动改变转动方向,需要依靠软件改变转动方向,即当计算结果为负时,交换控制该电机的两个PWM端口的输出值(为了便于控制,其中一个PWM端口占空比为0,另一个为期望占空比),输出计算结果的绝对值。

??正常情况下,轮子转动的速度由设定值唯一确定且两边轮子的转速应当相同,但是因为C车车模体积较大,转向较为困难,所以我们还根据电磁信 计算出的前轮舵机转动占空比来进行差速转弯。

??由上公式计算得到PID参数后,再根据实际车辆运行过程中的编码器读数情况,适当调节比例、积分和微分环节的值,其规律大致为增大I则P需要减小,增大D则P需要增大。需要注意的是:增大I可以减小稳态误差,但容易产生积分饱和现象;增大D可以使系统对变化更敏感,即可在误差的产生时起到抑制作用,但在误差的消除阶段会对误差消除产生一定的阻碍;增大P可以让系统输出更容易达到设定值,即对误差更敏感,但也容易产生震荡。

 

第五章 图像识别设计


5.1 AprilTag识别

??AprilTag的识别方法参考了openMV官方中文文档中的例程,其识别函数如下:

??本代码中,参考了部分openMV官方中文文档的办法用来识别数字的紫色外框。
??代码逻辑如下:读取一张摄像头图片,然后在图片中搜索矩形,找到矩形后,提取出矩形内的图片,将该图片输入到数字十分类模型中,如果识别的结果准确率大于百分之75,就存储该结果(奇或者偶,0或者1)到数组中,当得到了三次结果后,将其中至多的结果作为识别结果,通过三个GPIO口的高低电平传送给主板单片机,并通过另一个GPIO口的上升沿触发主板单片机的中断,最后实现数据的交互。其中,为了排除不同颜色光线对识别的影响,在训练模型的时候使用的是灰度图片,输入模型的图片也需要转换为灰度图;为了让结果更准确,所以在此处使用的是三次结果取其最大值。

5.3 动物水果识别

??动物水果识别代码如下:

▲ 图5.3 动物水果识别代码

??本代码中,参考了部分openMV官方中文文档的办法用来识别动物水果的紫色外框。

??代码逻辑如下:读取一张摄像头图片,然后再图片中搜索矩形,找到矩形后,提取出矩形内的图片,将该图片输入到动物水果十分类模型中,如果识别的结果准确率大于百分之75,就存储该结果(动物或者水果,0或者1)到数组中,当得到了三次结果后,将其中至多的结果作为识别结果,通过三个GPIO口的高低电平传送给主板单片机,并通过另一个GPIO口的上升沿触发主板单片机的中断,

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月2日
下一篇 2021年8月3日

相关推荐