智能车竞赛技术报告 | 智能车视觉 – 青岛工学院 – 青工战斗

▲ 图2.1系统总体框架

2.2车模整体布局

(1)为保证整车质量尽量轻,整车配件都用最小最轻的。
(2)为降低赛车重心,主板电池低位放置。
(3)采用高强度轻质量的碳素杆作摄像头支架。
(4)为保证检测动物和水果,OPEN ART mini放置在车前高度10cm左右,激光笔放置在高度15cm处。
下图为整车的详细布局:

图2.2.3车模侧视图
2.3本章小结
车模的机械结构是车模的基础,在一定程度上影响车模的速度上限,所以一个良好的机械结构是成功的前提,机械安装、重心的位置、传感器位置、这都是成功的一部分。在车模组装的时候,都要把任何有可能影响车模稳定的原因考虑到。使得车模不仅稳定性高,并且看起来也更加漂亮。
第三章 系统机械设计及实现
3.1编码器安装
本组使用的是龙邱512线迷你编码器,因为此款编码器比较小巧轻便,并且兼容正交解码,性价比非常高。安装的原则是不能过紧,也不能过松,在齿轮咬合太紧的情况下,电机转动会有非常大的声音,并且也会增大转动阻力。如果安装过松,则容易损坏齿轮。在安装完成后,先用手转动轮胎,感受是否一边转动阻力大,而另一边转动阻力小,如果存在则重新安装。直到转动非常顺滑,而且噪音非常小的时候,让电机空转,听是否有卡齿轮的情况。在保证这些情况都没有的时候,在齿轮间涂抹润滑油,并且慢慢转动轮胎,使得润滑油均匀涂抹在电机齿轮与编码器齿轮之间。这样,可以使得车模在赛道上跑的时候,声音非常小,并且对速度的测量也会更加准确。安装好的样子如下所示:

图3.1编码器安装
3.2舵机安装
目前舵机安装主要为卧式和立式这两种方式,C型车模舵机默认为立式安装方式,立式安装方式具有负载力矩大,响应区间广,控制精度高的特点。舵机卧式安装,舵机平放于底板上,质心很低,但由于舵盘位置不再底盘中心轴上,所以左右拉杆长度不一样,导致转向力量不对称,后期调试难度较高。所以本组经过讨论,最终确定为立式安装方式。
对舵机摆杆的一系列参数分析计算得出的较精确高效的工作参数,舵
机摆杆是将舵机的旋转运动转换成横摆运动的一种机构。在智能车比赛里,通过它将舵机转矩传递到连接轮子上面的横拉杆,实现轮子的左右转动,从而实现转向。转向在智能车比赛中是至关重要,而摆杆的设计直接关系到智能车转向灵敏度。
设舵机转矩=x,舵机摆杆作用力=f,摆杆长度=l,则:

x=f*l (公式1)

通过公式可以得出:拉杆作用力越大,反应越灵敏,转向速度越快。转矩一定时,摆杆越长,作用力就越小,所以摆杆又不能太长。同时最终的转向机构还应该尽量满足符合阿克曼转向理论,依据阿克曼转向几何设计的车辆,沿着弯道转弯时,利用四连杆的相等曲柄使内侧轮的转向角比外侧轮大约2~4度,使四个轮子路径的圆心大致上交会于后轴的延长线上瞬时转向中心,这样可以使车辆在过弯时转向轮处于纯滚动状态,减少过弯时的阻力,减小轮胎的磨损。

图3.2车模舵机安装
3.3摄像头安装
摄像头是车的“眼睛”,正是靠着摄像头,才能够对赛道精确感知。所有软件上的实现都是基于摄像头采集的图像而来的。可以说图像的好坏决定着一个车速度的上限。所以对摄像头的选取,到安装都十分小心,尽可能的保证摄像头图像达到最优。经过实验发现,大津法动态阈值比传统的硬件二值化的效果更好,于是采用了MT9V034摄像头,并且通过大津法对图像进行二值化。本组发现,不同广角的镜头对图像也有着很大的影响,在分别采集90度,100度、110度、130度、140度、170度广角下的图像之后,发现140度图像可视最远行与可视最近行都非常好。于是最终决定采用140度广角镜头。

图3.3.1摄像头采集图像
由于摄像头放置在高约40cm处,所以导致摄像头在跑起来容易晃动,于是在安装的时候尽可能的把摄像头底座固定牢固。并且为了使摄像头不会受到而改变图像,在把摄像头标定完成后,使用热熔胶把摄像头稳稳的粘牢,使得不受到影响。防止因外部因素导致摄像头位置发生变化进而影响到图像。实验发现,偏振镜会导致图像整体偏暗,其效果和动态阈值效果类似,并且使用软件的方式可操作性更大,因此本组经过讨论,最终决定不使用偏振镜。

图3.3.2摄像头底座固定

图3.3.3摄像头固定
3.4底盘高度调整
实验发现车模底盘低,重心更低,车模跑起来就更稳,特别是对于高速状态下,底盘低更有利于车模的稳定性。所以决定在不影响通过坡道的情况下,尽可能降低车模底盘。同时,把电池放在电机前方,使用轧带与地盘固定在一起,这样使得车模的重心变得更低。使车有更高的极限过弯速度。

图3.5底盘
3.5本章小结
本章介绍了本组在组车时的经验和想法,特别是摄像头这一方面,一定要小心细致。本队伍刚开始没有注意到这一方面,吃了很多的亏。比如车子撞了一下坡道导致摄像头歪了,然后就得重新标定,耗费了很多的精力和时间。在车辆组装的时候还需要多尝试,可能突发奇想的一个想法便可以解决很多的问题。使得车子变更加合理。
第四章 硬件电路系统设计及实现
4.1硬件设计方案
硬件设计是在可靠的基础上使其简单化。电源管理模块需要提供稳定的波纹较小的电压电流,驱动电路需要具备强悍的驱动能力和散热能力。
整个系统由摄像头模块、LPC54606J512最小系统、主板电路、驱动电路。通过查看四轮技术报告发现很多强队驱动电路和主板电路都是分开的。所以本组在开始画板时就把驱动电路和主板电路分开。

图4.1.1驱动PCB

图4.1.2驱动PCB

图4.1.3主板PCB
4.2主板电路
主板电路包括电源模块、摄像头模块、蓝牙插口、按键、播码开关、TFT液晶屏插口。
车模的电路电源是由可充电镍镉电池提供(7.2V、2000mAh)。但是系统中的各个电路模块所需要的工作电压和工作电流有所差别,以至于设计了多种稳压电路,将电池电压转换成各个模块所需要的电压。在设计时使用了5V稳压芯片LM1117-5.0V,3.3V稳压为LM1117-3.3V,舵机稳压芯片AS1015,进而对主板的各个部件进行保护。
使用LM1117芯片的原因主要是LM1117的性能好,电路简单明了,芯片较小巧,而且具有输出电压恒定,压降更低,提高系统工作稳定性的优点。在画板时对其的耐热性能和稳压性能进行了测试,发现两项性能都较稳定。

图4.2.1 LM1117电路图

AS1015芯片的可调式稳压输出的电流较大,发热量较小,更加具有舵机性能进而来调节其输出电压。

图4.2.2 舵机控制电路图

▲ 图2.1系统总体框架

2.2车模整体布局

(1)为保证整车质量尽量轻,整车配件都用最小最轻的。
(2)为降低赛车重心,主板电池低位放置。
(3)采用高强度轻质量的碳素杆作摄像头支架。
(4)为保证检测动物和水果,OPEN ART mini放置在车前高度10cm左右,激光笔放置在高度15cm处。
下图为整车的详细布局:

▲ 图2.2.3车模侧视图

2.3本章小结

车模的机械结构是车模的基础,在一定程度上影响车模的速度上限,所以一个良好的机械结构是成功的前提,机械安装、重心的位置、传感器位置、这都是成功的一部分。在车模组装的时候,都要把任何有可能影响车模稳定的原因考虑到。使得车模不仅稳定性高,并且看起来也更加漂亮。
 

第三章 系统机械设计及实现


3.1编码器安装

本组使用的是龙邱512线迷你编码器,因为此款编码器比较小巧轻便,并且兼容正交解码,性价比非常高。安装的原则是不能过紧,也不能过松,在齿轮咬合太紧的情况下,电机转动会有非常大的声音,并且也会增大转动阻力。如果安装过松,则容易损坏齿轮。在安装完成后,先用手转动轮胎,感受是否一边转动阻力大,而另一边转动阻力小,如果存在则重新安装。直到转动非常顺滑,而且噪音非常小的时候,让电机空转,听是否有卡齿轮的情况。在保证这些情况都没有的时候,在齿轮间涂抹润滑油,并且慢慢转动轮胎,使得润滑油均匀涂抹在电机齿轮与编码器齿轮之间。这样,可以使得车模在赛道上跑的时候,声音非常小,并且对速度的测量也会更加准确。安装好的样子如下所示:

▲ 图3.2车模舵机安装

3.3摄像头安装

摄像头是车的“眼睛”,正是靠着摄像头,才能够对赛道精确感知。所有软件上的实现都是基于摄像头采集的图像而来的。可以说图像的好坏决定着一个车速度的上限。所以对摄像头的选取,到安装都十分小心,尽可能的保证摄像头图像达到最优。经过实验发现,大津法动态阈值比传统的硬件二值化的效果更好,于是采用了MT9V034摄像头,并且通过大津法对图像进行二值化。本组发现,不同广角的镜头对图像也有着很大的影响,在分别采集90度,100度、110度、130度、140度、170度广角下的图像之后,发现140度图像可视最远行与可视最近行都非常好。于是最终决定采用140度广角镜头。

▲ 图3.3.2摄像头底座固定

▲ 图3.5底盘

3.5本章小结

本章介绍了本组在组车时的经验和想法,特别是摄像头这一方面,一定要小心细致。本队伍刚开始没有注意到这一方面,吃了很多的亏。比如车子撞了一下坡道导致摄像头歪了,然后就得重新标定,耗费了很多的精力和时间。在车辆组装的时候还需要多尝试,可能突发奇想的一个想法便可以解决很多的问题。使得车子变更加合理。
第四章 硬件电路系统设计及实现

4.1硬件设计方案

硬件设计是在可靠的基础上使其简单化。电源管理模块需要提供稳定的波纹较小的电压电流,驱动电路需要具备强悍的驱动能力和散热能力。

整个系统由摄像头模块、LPC54606J512最小系统、主板电路、驱动电路。通过查看四轮技术报告发现很多强队驱动电路和主板电路都是分开的。所以本组在开始画板时就把驱动电路和主板电路分开。

▲ 图4.1.2驱动PCB

▲ 图4.2.1 LM1117电路图

AS1015芯片的可调式稳压输出的电流较大,发热量较小,更加具有舵机性能进而来调节其输出电压。

舵机控制电路图

在综合学长的建议和自己的查询之后决定将LM1117-5.0V稳压出5V之后加上LM1117-3.3V进而稳压得到3.3V。这样可以使得输出的电压更加稳定,对电压电流精度要求高的器件的伤害减小。

舵机决定了车模转向的稳定性,舵机自身是一个耗电量大且具有一定干扰的模块。通过互联网了解到舵机和控制器之间需要隔离。通过查询,了解到光耦具有隔离作用,所以在主板上加上了光耦。

在设计主板的时候本组考虑到之后如果遇到难以处理的元素,可能会添加一些别的传感器。所以在设计主板的时候预留了一些口并且加上了一些新的模块。

智能车竞赛技术报告 | 智能车视觉 - 青岛工学院 - 青工战斗

 

▲ 图5.3虚拟示波器

5.4本章小结

本章节介绍了程序上的整体框架,以及电机输出和舵机输出的方法。

 

第六章 循迹元素处理


6.1出库

对于出库,本组一直没有找到好的办法,没能够通过图像处理来解决这一元素。进而直接使用了上电舵机打角的方式来实现出库这一元素。如此就使得出库不太稳定,容易在出库的过程中压到路肩。在出库一元素方面,还需努力,希望能够在不久的将来以图像处理的方式来解决这一元素。

十字路口的处理,分为正十字,斜十字,正在入十字。

6.2十字

6.2.1正十字路口的处理

首先搜索两边丢线数量,在两边丢线满足一定要求后,进而搜索十字路口的两个拐点。在两个条件同时满足的情况下,根据这两个拐点通过斜率向下补线,补出两边赛道边线。

智能车竞赛技术报告 | 智能车视觉 - 青岛工学院 - 青工战斗

6.2.3正在进入十字的处理

正在进入十字之前一定是先经过了左入十字和斜入十字,在这两个情况满足的情况下,一直补线,直到搜不到十字路口的拐点截至补线,此时补线完成后,车模基本上已经经过了十字路口。

▲ 图6.3环岛

6.4三叉

在总结了环岛处理的经验之后,队伍对三叉路口的处理更有信心了,由于三叉路口是今年的一个新的赛道元素,队伍观察了大量的三叉路口的图像。发现,由于赛道图像存在着畸变,即在正常赛道上,每一行图像的赛道宽度是逐渐递减的,但是三叉路虽然存在畸变,但是仍然具有明显的每一行图像变宽的特点。因此,这一特点就可以称为三叉路口的判断条件。当发现赛道宽度慢慢递减,又慢慢递增的时候,此时便判断到达了三岔路口。这个时候,首先会刹车,打开与OPEN ART mini的通信。因为不能够保证刹车一定刹到能够识别三叉路口的数字,于是让车模在打开通信之后一点点往前走,当检测到数字后,根据返回的奇数或偶数拉动赛道中线,使得车模能够顺利进入三叉路口。出三叉路口的图像和入三叉图像类似,根据之前检测到的奇数或偶数,再一次拉动赛道中线,使得车模能够顺利出三岔路口。

▲ 图:7.1 OpenART mini 规格丝印图

7.2 OpenART mini引脚说明

▲ 图 7.3.1 save image.py的代码及其注释

将采集到的图片进行分类安放之后,进行数据集和模型的制作。首先通过自己编写的数据集制作程序将分类好的图片打上标签,转化成numpy数组类型的.npy文件。Grayscale灰度化为1个通道,阈值范围(0255)。RGB565彩色图为3个通道,阈值范围(0255)。反应在.npy文件中的内容,也是不同的。

之后在pycharm中运行由编写的神经网络训练文件,将.npy文件放入神经网络中进行训练,得到.h5 神经网络模型文件。此处.h5文件不可过大,虽然之后会进行nncu模型的转换。但由于OpenART mini采用的MIMXRT1064的闪存只有4MB,所以一旦模型过大,在识别调用模型之时会给予使用者内存溢出的报错。

得到.h5模型文件后,使用NNCU模型转换器将.h5文件转换为三种文件.nncu .c 以及.csv文件。将.nncu后缀的文件放入OpenART mini所使用的内存卡中。

在程序中定义好模型文件,模型标签文本的路径。导入识别所需要的nncu,os,pyb,sensor,image,math库。通过调用OpenART mini的find_rects函数来进行每一帧图像中所找到的矩形框内部图像的保存,并将其保存的图像变为numpy数组通过nncu.classify函数放入.nncu模型文件中进行遍历,并输出与模型中数值相似度最大的结果。即模型文本文件中所输入的内容,也就是一开始制作数据集时给图片分类打上的标签。

▲ 图 7.3.3 寻找矩形函数与识别函数

注意,由于主控MCU的闪存flash较小为4MB,模型在NNCU转换后的大小最好不超过3MB。如果模型的大小接近3MB,通过本组大量的试验。在QQVGA分辨率下,模型可以正常运行。但是如果你想通过提高图像的分辨率来提高识别的精准度而选择了QVGA的分辨率,那么仍然会报内存溢出的错误,模型无法正常运行。

7.4 依据识别结果进行元素处理过程的概述

在得到识别结果之后,根据赛题要求。①根据Apriltag码奇偶性来控制云台舵机的左转右转。②识别结果为水果,驱动激光笔打出频率为125hz的激光,击中靶标中心的灯,保持1s。③识别结果为动物,则使车模在原地停留3s。

针对赛题,本组遇到了以下问题,并做出了以下问题的解决方案:

通过循迹摄像头将赛道元素进行提前识别,通过UART串口将信息发送给OpenART mini,后者通过接收程序获得的结果有选择性的执行数字,Apriltag码识别。OpenART mini得到识别结果后,再通过UART串口将结果发送给单片机,由单片机对车的电机,舵机进行控制,完成循迹上的要求。激光笔频率需要调制,本组没有选择逐飞给出的三极管激光调制电路,使用OpenART mini的PWM来进行激光频率的调制,试验后效果良好。由于本队伍采用的单片机是LPC546,无法在主板上引出第二个舵机口,所以队伍采用的是一个自由度的云台,由主板上的5V为云台上的舵机供电,由OpenART mini输出PWM信号控制云台舵机的旋转,且OpenART mini与舵机共地。可以保证OpenART mini对舵机正常的输出PWM。在OpenART mini上选择了C6、C8分别作为激光笔,舵机的PWM输出引脚,通过将其与激光笔的输入端和舵机的信号输入端相连,实现对其的控制。OpenART mini上需要调用其内置的PWM UART模块,并对对应的通道进行初始化才可使用。

▲ 图 7.4.2内置的UART模块的使用方法

本组认为,识别任务最难的部分就是在对于水果的激光打靶上。因为循迹摄像头需要提前识别到Apritag码并刹车,在刹车的过程中会出现很多很多的问题。对于刹车遇到的问题,本队伍最后的解决方案是,通过多次刹车使车模最后稳稳的停在Apriltag码之上,并进行一段距离的倒车。在倒车后切换电磁循迹来规整车模的运行路径,保证识别的精确度。
OpenART mini需要控制动物水果识别所寻找的矩形框的大小。由于水果需要打靶,所以还需要控制识别到图像中心的x和y的坐标。由于使用的是一个自由度的舵机,所以对x和y的坐标要求非常高,只要有一点点的偏差。就容易打靶打偏。通过对图像ROI感兴趣的选取,以及对find_rects函数所找到的矩形框宽和高的返回值便可以很轻松的清理掉一部分多余的矩形框,保证识别的准确度。

▲ 图 7.4.4 ROI感兴趣的选取方法

7.5识别注意事项

Apriltag码的识别程序有一定的问题,当图像中没有出现Apriltag码时。有时会出现一定程度上的误判,但这种误判识别解决很方便。经过大量的测试,发现这种误判第一次的识别结果和第二次的识别结果是完全不一样的。可以利用两者的不同轻松地解决这个问题。

动物水果和数字的识别程序仅仅只是在调用模型上的区别,在调用时要注意各自对应的路径。

如果内存卡中没有程序中所定义的模型文件,模型文本文件,程序便无法正常运行,会报Oserror0的错误。

7.6本章小结

本章主要介绍了对于识别任务的解决方案。使用OPENART mini模块来作为识别模块。在识别过程中遇到了很多的问题,都在上面一一列举出来了。识别任务需要和循迹任务结合起来,通过串口,实现LPC与OPENART mini的通信,通过相互通信使得循迹任务和识别任务结合起来。识别任务是AI视觉组的一个重要的任务,在解决问题过程中遇到了很多问题,也解决了很多问题,锻炼了成员解决问题的能力,也增加了队伍成员的知识。
 

第八章 系统开发与调试


8.1开发工具

LPC54606程序的编写、编译在IAR上进行:

▲ 图 8.1.2 OpenMV IDE界面

神经网络的训练在PyCharm上进行。

▲ 图 8.2.3 PyCharm界面

8.2调试工具

通过TFT屏幕不仅能够看到摄像头

来源:卓晴

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月5日
下一篇 2021年8月5日

相关推荐