2021电赛国一智能送药小车(F题)设计报告
【写在前面的话】
电赛是一个很奇妙的过程,可能有些人觉得电赛的门槛太高,那便意味着,当你决定要参加电赛的那一刻起,这一段路、这些日子就注定不会太轻松;
我现在回头看真的很感谢电赛,从前期备赛面对自己未曾涉猎的技术不知如何下手的迷茫与怀疑,再到后来四天三夜紧张到不忍睡觉的未知与紧迫,和那挑战着自己脑力与体力的极限的执着,到比赛结束封箱那一刻全部都释然了;
你会学到很多很多,你会看见自己的进步,从一个小白,到打开了一扇大门,慢慢的成长;随之而来的不仅是能力,是一份底气,带来更多的是对自己的相信,那种已经不惧怕一切挑战的信心与勇气。
它就像一个跳板,让你跳到更高。
·【电赛宝藏链接】参加电赛的宝们必看
【电赛宝藏链接】
四天三夜,那布满着未知与紧迫感的气息让荷尔蒙无比兴奋,挑战着脑力与体力的极限!
2021全国大学生电子设计竞赛F题参赛简记
2021年小车题完整代码及教程!
2021电赛F题视觉教程+代码免费开源
参加电赛必看的经验贴!
全国电子设计竞赛指导 (老学长挥泪经验之谈)
【电赛最全备赛资源】电赛历年赛题源码+老学长挥泪经验之谈(文章较长全网最全)+电赛论文写作模板及评分标准
电赛最全备赛资源
文章目录
- 2021电赛国一智能送药小车(F题)设计报告
- `【写在前面的话】`
- ·【电赛宝藏链接】参加电赛的宝们必看
- `【电赛宝藏链接】`
- 摘要
- 一. 系统方案设计
- 1 预期实现目标定位
- 1.1 在视觉识别方面通过合理的模型实现以下目标:
- 1.2 在主控与机械结构方面主要通过调整结构实现以下目标:
- 2 方案论证与选择
- 2.1 图像处理系统设计方案论证与选择
- 2.2 机械机构系统设计方案论证与选择
- 二. 设计实现
- 1 视觉模块
- 1.1 基于 OpenMV 的多模板匹配
- 1.2 基于树莓派的 YOLOv5 移植模型图像检测
- 1.3 基于 K210 的模型移植图像检测
- 2 电控模块
- 2.1 电机控制
- 2,2 药物检测
- 2.3 视觉识别
- 2.4 红外循迹
- 三. 测试
- 四. 结论
- 五. 参考资料及文献
摘要
本智能送药小车系统采用 STM32F103ZET6 作为主控,勘智 K210 作为视觉系统主要元件来实现对摄像头中出现的多组数字进行识别,通过 5 路灰度传感器来实现循迹。STM32 通过串口通信获取 K210 的识别信息,来获取目的地与两侧地址信息。通过 5 路灰度模块识别灰度变化来实现小车的正常运行与转弯,以实现小车的自动寻径。通过数量丰富的训练集来训练模型,使得数字分辨精度与分辨速度达到最佳的平衡。
提示:以下是本篇文章正文内容
一. 系统方案设计
1 预期实现目标定位
1.1 在视觉识别方面通过合理的模型实现以下目标:
- 识别过程在视觉模块完成,并对主控进行通信发送转向信息。
- 采集具有丰富特征的数据集,并进行数据增强来增加数据量,从而实现准确有效的图像检测。
- 快速识别数字,在小车不停止的情况下完成数字的识别。
1.2 在主控与机械结构方面主要通过调整结构实现以下目标:
- 通过调整灰阶模块与电机实现小车的直线行走、拐弯、回转。
- 实现小车在 20 秒内完成送药任务。
- 小车运行过程稳定,不触碰边缘线。
2 方案论证与选择
2.1 图像处理系统设计方案论证与选择
方案一:基于 OpenMV 的多模板匹配方式。
方案二:基于树莓派 4B 的 YOLOv5 图像检测移植。
方案三:基于 K210 的硬件加速神经网络的图像识别方案。
应用 OpenMV 方法的优点是参数易于调整,模板易于获得与初步处理。缺点是模板易受复杂环境与倾角干扰,其基础镜头视角窄,神经网络处理能力差。
树莓派 4B 有较高的处理器主频以及较大的内存,YOLOv5 图像检测方案成熟,速度快且精度高。但是要将两者结合的话,模型部署难度相对较大,需要配置环境较为复杂,且模型从 PC 端移植到树莓派系统的需要考虑两系统间存在较大的性能损失。
K210 能在较高帧率下进行图像识别。该方案应用深度学习方法需要一定数量的数据集来对模型进行反复训练与测试。然而,网上现存的数据集很难实现,因此需要人为的制造一些富有特征的数据并对其进行数据增强与打标签。此外,该方案需要对模型具有较高的内存空间要求,因此需求注意模型的压缩问题。
综上,考虑到环境情况、图像识别精度与帧率的平衡,我们选择使用第三种方案。
2.2 机械机构系统设计方案论证与选择
方案一:四电机双驱动、镜头平置方案。
方案二:双电机单驱动两万向轮、镜头平置方案。
方案三:双电机单驱动两万向轮、镜头倾斜方案。
方案一可以为电机提供充足的动力与畸变较小的画面,但是其同样会造成较大的供电压力与轮组之间存在空程差导致的误差增大。此外,镜头平置虽然可以增加数字识别精度,但同样会减少视野范围。方案二的供电压力较小,但同样存在上述问题。方案三可以改变倾斜角度来获取更大视野范围,但数字会发生不同程度的畸变。根据上述分析,我们选择方案三。
2.3 循迹方式论证与选择
方案一:应用视觉模块识别中心红线与赛道以实现循迹
方案二:应用前后 5 路灰度识别模块识别中心红线来实现循迹
方案一的集成度更高,可以减少系统的复杂性,提高系统的结构稳定性。但是其需求对红线进行识别,需求更多数据集,且需要做更多数据增强。同时,由于机器学习对形状的敏感程度更高。因此容易把边框识别成中心线。
方案二应用额外模块——五路灰度传感器来实现红线位置的检测,通过灰度变化来进行循迹,前后均放置一个 5 路灰度识别模块以保障有效直线运行,该方案复杂性低且更易于实现。
根据上述分析,我们选择方案二。
2.4 主控系统设计方案论证与选择
方案一:采用传统的 STC89C51 系列单片机;
方案二:采用 STM32F103C8T6 单片机;
方案三:采用 STM32F103ZET6 单片机;
传统 STC89C51 主频较低,且中断较少。STM32F103C8T6 主频高,具有更加结构化的,端口较多但是端口复用较为复杂。STM32F103ZET6 则在此基础上简化了复用且端口更多。
因此,选用方案三。
3 系统结构分析
该系统的简化原理框图如图 1 所示,系统的控制部分基本可以由:
光电模块、视觉模块、主控、循迹模块构成。其运行原理可以描述如下:
当光电模块获取输入,表示当前有药物放入,视觉模块 K210 获取初始化数字信息,通过串口与 STM32 进行通信,STM 在中断中调用 OLED 显示,在OLED 上显示当前初始化数字信息(需要前往的病房)。
随后,前后循迹模块获取 5 位输入信息,该信息用于识别当前红线位于车体的相对位置,并通过端口直接输入 STM32 进行判断,若非 5 位灰度传感器的中心有信号,则可以判断当前车体非正向,若处于直行路段则左右轮差速控制车体偏向,使得红线位于中心位置。
此外,当车体需要转向时,则在由视觉模块识别获得转向方向的基础上,当识别到 5 位全有输入时(横向红线),则控制小车转向,并将转向方向入栈。当视觉模块识别到虚线时,则停止运行,等待光电传感器失去信号,则判断药物被取出,因此开始返航操作。返航时遇到十字与丁字路口时,出栈转向方向,则可以实现原路返航。
二. 设计实现
1 视觉模块
我们测试了三个可行的视觉方案,并进行了对应的电脑模拟环境测试与实际环境测试。
1.1 基于 OpenMV 的多模板匹配
该方案主要应用了 NCC 算法,其表达式如(2-1)所示
此外,当我们增大各角度模板数量时,虽然单数字识别精度发生一定程度上的提升,但是可以显而易见地观察到识别帧率发生大幅下降。因此该方案弃用。
1.2 基于树莓派的 YOLOv5 移植模型图像检测
Yolo 算法采用一个单独的 CNN 模型实现 end-to-end 的目标检测,比 R-CNN算法,其是一个统一的框架,速度更快。
Yolo 的 CNN 网络将输入的图片分割成 s*s 网格,每个单元格会预测 B 个边界框以及边界框的置信度,以及给出预测出的 C 个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。Yolo 采用卷积网络来提取特征,然后使用全连接层来得到预测值,采用的均方差作为损失函数,adam方法进行梯度下降,此外为防止一个目标被多次检测的问题,采用 NMS 算法输出多预测框中其中最好的预测框。
我们模拟赛道环境,进行数据采集:小车移动时,车头摄像头进行录像,将各数字可能出现的位置进行多次多角度捕捉,将录有完整数字的视频片段逐帧提取获取数据源,进行人工标记,并且对获得数据集进行数据增强。采用 10 折 10次交叉验证拆分测试集和验证集,基于 SDK 开发,部署 yolo 模型,并使用 nncase进行模型转换。现场测试,识别准确率大致为 75%。但实际模型部署于树莓派时,其算力有限,出现严重降帧的情况,难以满足题目的限时要求。
1.3 基于 K210 的模型移植图像检测
该方案仍采用 YOLO 算法进行图像检测,但使用了具有特殊图像处理加速硬件的 K210。我们通过 MixHub 进行模型的训练,相较于前一次训练,本次训练的原始数据集扩充至每个数字 1000 张,我们对其进行了数据增强以及标记后进行模型训练。将其移植到 K210 后进行现场测试,发现其准确率可以达到 85%以上。因此我们应用该视觉方案。
2 电控模块
2.1 电机控制
通过设置定时器来使端口产生 PWM 控制电机驱动,并通过控制差速来控制转向以及方位修正。通过不断调整参数以及测试使得系统可以快速而直接完成上述操作。测速方面使用霍尔解码器,通过读取单位时间脉冲信号的数量,可以达到测速的效果,通过对脉冲信号的累加和编码器的码盘的周长(转一圈对应距离)便可以达到计算行走距离的效果。
2,2 药物检测
设定一个固定的区域,在区域的两边放置两个红外对管,通过中断函数来定时检测返回值来实现检测指定区域是否有物品放置。
2.3 视觉识别
通过与 K210 视觉模块进行串口通信,获取出现在镜头视野里的数字、是否要转向以及向哪个方向转向。
2.4 红外循迹
通过获取前后 5 路红外循迹模块的输出值,计算两路信号与中心偏差值,从而产生差分信号来对两电机进行驱动。当红外循迹模块遇到十字路口且视觉模块返回需要转向时,能出现多个输出(并不一定全部输出),因此判断需要转向。
三. 测试
测试方法:
3. 初步测试时在 PC 端运行模型,对摆放在桌面上以及赛道上的数字进行稳定定高测试。
4. 测量小车的长宽高。
5. 其后将 K210 装在等高空车上,并进行车载测试,慢速稳定直线运行,观察准确度。
6. 通过蓝牙模块向小车发送信号,测试小车运动的直线性以及转向角度
7. 模拟真实比赛场地,依次进行近端、中端、远端的测试。实验仪器:智能小车、计时器、200g 模拟药物、比赛用场地、打印体数字
四. 结论
经测试,小车完全满足竞赛要求,基本可以实现题目的主要要求。
五. 参考资料及文献
[1] 谭浩强. C 语言程序设计[M]. 北京:清华大学出版社,2012
[2] 算法竞赛入门经典. 清华大学出版社
[3] 数据结构. 清华大学出版社
[4] 单片机实用系统设计与仿真经典实例,电子工业出版社,周润景 刘晓霞著# 系列文章目录