2021电赛国一智能送药小车(F题)设计报告

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. 采集具有丰富特征的数据集,并进行数据增强来增加数据量,从而实现准确有效的图像检测。
  3. 快速识别数字,在小车不停止的情况下完成数字的识别。

1.2 在主控与机械结构方面主要通过调整结构实现以下目标:

  1. 通过调整灰阶模块与电机实现小车的直线行走、拐弯、回转。
  2. 实现小车在 20 秒内完成送药任务。
  3. 小车运行过程稳定,不触碰边缘线。

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] 单片机实用系统设计与仿真经典实例,电子工业出版社,周润景 刘晓霞著# 系列文章目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

顺序表——“数据结构与算法”

各位CSDN的uu们你们好呀,今天小雅兰的内容是数据结构与算法里面的顺序表啦,在我看来,数据结构总体上是一个抽象的东西,关键还是要多写代码,下面,就让我们进入顺序表的世界吧 线性表 顺序表 线性表 线性表&…

【LeetCode】剑指 Offer(25)

目录 题目:剑指 Offer 49. 丑数 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 49. 丑数 - 力扣&…

【云原生】Linux进程控制(创建、终止、等待)

✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Good judgment comes from experience, and a lot of that comes from bad jud…

MySQL对表操作

目录 CRUD 增加(Create) 查询(Retrieve) 全列查询 指定列查询 查询字段为表达式 别名 去重:DISTINCT 排序:ORDER BY 条件查询:WHERE 逻辑运算符: 修改(Update) 删除&…

「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位

嵌入式系统是指在其他系统中嵌入的计算机系统,通常由微处理器或微控制器、内存和其他支持电路组成。嵌入式系统的应用领域非常广泛,涉及从智能家居设备到汽车控制系统,再到飞机、医疗设备等各种设备。对于嵌入式系统的应用,GPIO是…

我在字节当主管:百次面试结果,总结一个刷掉99%求职者的问题!

我一个在大厂当主管的朋友,跟我说:“现在招性能测试太难了,当然不是说没人干,一开招聘信息就能收到一大把简历,其中不乏学历亮眼、背景出色、简历里各种高并发、大流量的项目经验的人才。问题在于,当你提出…

【C++】模板初阶

文章目录泛型编程函数模板概念格式实例化匹配原则类模板定义格式实例化泛型编程 当我们的一个函数涉及到多个类型的处理时,我们就需要重载函数来实现,但是重载函数是存在一些局限性的。   重载函数仅仅是类型不同,代码的复用率较低&#xf…

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)

目录 写在前面: 题目:94. 递归实现排列型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…

使用new bing简易教程

申请new bing 首先先申请new bing然后等待通过,如下图 申请完,用edge浏览器,若有科学方法,就能在右上角的聊天进行向AI提问 使用插件来进行直接访问New Bing 在edge浏览器中安装一个插件,地址为:Mod…

HTML樱花飘落

樱花效果 FOR YOU GIRL 以梦为马&#xff0c;不负韶华 LOVE YOU FOREVER 实现代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv"…

Windows逆向安全(一)之基础知识(二)

反汇编分析C语言 空函数反汇编 #include "stdafx.h"//空函数 void function(){}int main(int argc, char* argv[]) {//调用空函数function();return 0; }我们通过反汇编来分析这段空函数 函数外部 12: function(); 00401048 call ILT5(func…

一款丧心病狂的API测试工具:Apifox!

你好&#xff0c;我是测试开发工程师——凡哥。欢迎和我交流测试领域相关问题&#xff08;测试入门、技术、python交流都可以&#xff09; 我们平时在做接口测试的时候&#xff0c;对于一些常用的接口测试工具的使用应该都非常熟悉了&#xff1a; 接口文档&#xff1a;Swagge…

2023年网络安全比赛--attack(新)数据包分析中职组(超详细)

一、竞赛时间 180分钟 共计3小时 任务环境说明: 1 分析attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户第一次访问HTTP服务的数据包是第几号,将该号数作为Flag值提交; 2.继续查看数据包文件attack.pcapng,分析出恶意用户扫描了哪些端口,将全部的端口号…

比df更好用的命令!

大家好&#xff0c;我是良许。 对于分析磁盘使用情况&#xff0c;有两个非常好用的命令&#xff1a;du 和 df 。简单来说&#xff0c;这两个命令的作用是这样的&#xff1a; du 命令&#xff1a;它是英文单词 disk usage 的简写&#xff0c;主要用于查看文件与目录占用多少磁…

π-Day快乐:Python可视化π

π-Day快乐&#xff1a;Python可视化π 今天是3.14&#xff0c;正好是圆周率 π\piπ 的前3位&#xff0c;因此数学界将这一天定为π\bold{\pi}π day。 π\piπ 可能是最著名的无理数了&#xff0c;人类对 π\piπ 的研究从未停止。目前人类借助计算机已经计算到 π\piπ 小数…

考研408 王道计算机考研 (初试/复试) 网课笔记总结

计算机初试、复试笔记总结&#xff08;导航栏&#xff09;&#x1f4dd; 408 考研人&#xff0c;人狠话不多&#xff1a;3、2、1&#xff0c;上链接 &#xff01; 408 考研初试 - 备战期&#xff0c;专业课笔记&#xff0c;导航&#x1f6a5;&#x1f6a5;&#x1f6a5; &…

编写Java哪个编译器好

现在能够编写Java代码的工具简直不要太多&#xff0c;各种各样五花八门&#xff0c;但目前效率最高的还是Intellij Idea。但这个工具对于完全零基础的小白来说&#xff0c;第一次用起来是比较复杂的&#xff0c;因为它的功能太多了。这就好比你要学开车&#xff0c;如果上来就给…

量化(1):基础知识

1. Tops的含义 1TOPS代表处理器每秒可进行一万亿次(10^12)操作 2. 定点数 2.1 定点数的含义 大家都知道,数字既包括整数,又包括小数,如果想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示? 计算机科学家们想出一种方法,即约定计算机中小数…

MySQL:JDBC

什么是JDBC&#xff1f; JDBC( Java DataBase Connectivity ) 称为 Java数据库连接 &#xff0c;它是一种用于数据库访问的应用程序 API &#xff0c;由一组用Java语言编写的类和接口组成&#xff0c;有了JDBC就可以 用统一的语法对多种关系数据库进行访问&#xff0c;而不用担…

Docker三剑客之swarm

一、什么是docker swarm Swarm是Docker公司推出的用来管理docker集群的平台&#xff0c;几乎全部用GO语言来完成的开发的&#xff0c;代码开源在https://github.com/docker/swarm&#xff0c; 它是将一群Docker宿主机变成一个单一的虚拟主机&#xff0c;Swarm使用标准的Docker…