01 

前 言

大家好,我是张巧龙,今天给大家带来关于21年F题的分享:智能送药小车,出了这个题目之后,咋一看,好像比较简单。

不过大家慢慢做,越往后做越发现,坑越来越多。

第一个问题:数字识别率不高,我对识别率高低的看法:只要不到100%,哪怕出现1%的误识别率,我认为都不行,为什么?

因为,题目明显给出说明,每个项目只测试一次。也就是说,小车一旦出错,就0分,没有再测的机会。

第二个问题:小车巡线的问题,一谈到巡线,大家想到的肯定是,循迹模块(颜色识别传感器),这个没问题,可以用,也可以用摄像头来寻迹。

不知道大家是否有发现过,车运动的轨迹都是直线,转弯都是90度,循迹模块或者摄像头寻迹确实可以用。

但运动过程中,需要一直巡线,对摄像头或者是循迹模块的要求比较高,环境的光线要求比较稳定。

为了提高巡线的稳定性,我认为可以直接采用电机编码器来写闭环,将小车运动的路程直接固定死,每次都是走固定直线距离后再识别数字,拐弯也可以直接固定,毕竟都是90度。

当然,这个过程中,肯定需要颜色识别模块或者摄像头寻迹来做辅助。

来吧,看视频展示,文字内容在后文。

【全国一等奖】F题:智能送药小车

对了,由于是电机直接闭环,所以本视频中小车的运动速度还可以继续提升。

02

系统方案

2.0 摘要

以STM32单片机为核心、结合视觉识别技术,通过速度闭环来控制智能送药小车,并实现双车在预定轨道上送药,取药。

基本模块主要包括主控、摄像头、直流减速电机、驱动模块,无线传输模块,本设计主控选择STM32F103RCT6。

在摄像头识别中,采用双摄像头方案,K210用于识别数字和寻找对应数字并通过串口向主控发送识别信息,从而进入对应的病房,OpenMV用来寻迹,防止小车偏离预定轨道;

小车1,2通过ZiGBee来完成双车通信,实现双车协同运送的效果;通过电机编码器反馈的信息设计小车的速度闭环控制系统,实现运输距离的精准控制。

经过检测发现,本设计具有识别速度快,识别精准度高,运输稳定且效率高等优点。

2.1 方案设计

2.1.1 控制方案设计

根据题目要求,将小车系统分为4个基本模块,包括主控模块、电机驱动模块、视觉检测和识别模块,无线通讯模块,主控选择STM32F103RCT6,通过速度闭环来实现电机驱动的精准控制。

视觉识别中,寻迹采用OpenMv摄像头,数字识别采用K210摄像头。

无线通信选择ZIGBEE实现两车之间的通讯,系统的总体设计框图如图1所示。

图1  系统总体设计框图

2.1.2 机械结构方案

由于题目要求小车的长宽高不能超过25cm*20cm*25cm,再加上赛道的宽度只有30cm,为了保证转向的时候能够避免碰到黑实线,我们采用双驱动置于车身中间,车身前后分别装置牛眼轮便于转向。

根据设计要求和实际情况,两个摄像头安装于车头前端,OpenMv在下,K210在上,以便于识别和检测。

由于识别数字时数字宽度较大,K210无法全部识别到数字,所以搭配舵机,实时调整摄像头的位置来达到扩大视野范围的目的。

2.2 数字识别方法

首先将1-8字模原比例打印出来,然后用K210进行模型训练,模型训练了几千张模型,生成训练样本矩阵,一般样本是以二维矩阵的方式存在文件当中,现在要将它们读出来,进行适当的预处理,然后生成OpenCV能理解的数据结构。

其中包含了分别从不同的视角对图像进行采集入库,在通过NCC模板匹配训练产生数字分类器,训练样本中的数字位置形态各异,因此读入时需要进行规整化。

主要方法是先找到数字的边界框,然后以宽和高中大的一边为基准进行缩放和拉伸,从而使得其可以占满整个表示单个样本的矩阵。

再将其图像二值化,进行腐蚀分割,前面通过学习产生了分类器,但我们输入图像中的数字并不能直接作为测试输入。图像中的数字笔画有时并不规整,还可能相互重叠。

接下来,就可以对图像进行分割了。由于我们的分类器只能对数字一个一个地识别,所以首先要把每个数字分割出来。分割完后就可以应用我们前面训练好的分类器对分割结果进行识别。

2.3 自动寻径方法

首先对图像进行相关预处理,图像采集和传输过程中可能产生噪点,通过图像灰度化和图像滤波减小对图像处理的干扰。

其次摄像头采集跑道上的红线,通过硬件二值化处理,这里用到最大类间方差法(Otsu)来实现图像二值化阈值选取:

Otsu算法的基本思想是用某一假定灰度值t将图像的灰度分成两组,当两组的类间方差最大时,此灰度值t就是图像二值化的最佳阈值。

设图像有L个灰度值,取值范围在0~L-1,在此范围内选取灰度值T,将图像分成两组G0和G1,GO包含的像素的灰度值在0~T,G1的灰度值在T+1~L-1,用N表示图像像素总数,n, 表示灰度值为i的像素的个数。

已知:

每一个灰度值i出现的概率为p=n/ N;假设GO和G1两组像素的个数在整体图像中所占百分比可得:

紧接着,运用计算机视觉的线性回归(Linear Classification)算法进行寻线,线性回归能找到视野中任何的线,但是处理速度就会很慢。

为了能更快的寻到我们想要的轨迹,把颜色调为灰度,不去处理追踪颜色,图像大小设成QQVGA,缩小图像面积,来增加速度。

最后向STM32提供反馈信息,控制电机进行自动寻径。

2.4 小车电机运动闭环控制算法

依靠编码器反馈数值,通过速度闭环解决对小车行驶距离的把控,本小车所采用的PID算法是闭环控制系统中常用的控制算法之一,其全称为比例积分微分控制。

其传递函数如下:

再配合OpenMv二值化处理寻线辅助和K210数字识别并将相关数据通过串口反馈给主控板最终实现小车的精准控制。

通过配置串口的波特率便可以控制串口通讯的速率。

为保证数据接收正常,本设计通过对控制系统中的STM32F103RCT6单片机进行编写通信协议程序,以防止无线接收模块在受到干扰的情况下收到错误指令而使小车失控的情况发生。

03

程序设计

3.1  程序设计思路

3.1.1 小车1的程序设计思路

在识别目标病房号后,判断是否为近端,如果为近端则直接第一个十字路口转对应方向,否则直行至第二路口,判断是否为目标数字。

如果是,则转对应方向,否则直行至T型路口左转,判断判断是否为目标数字,如果否,则转至T型路口对面,识别目标数字方位并转弯。

识别虚线点后停车,发送位置信号给小车2,同时检测小车2回馈信号和药品是否卸载,在卸载药品完成条件下,如果检测到回馈信号则为双车模式,等待小车2,发送到达指定位置信号,则开始启动返回,否则为单车模式,直接按记忆路线返回。

图1  小车1程序设计流程图

3.1.2 小车2的程序设计思路

发送反馈信号给小车1,开始识别目标病房号,检测是否装药,如未装药且接收到小车1位置指令,则取药模式,运行到T型路口处小车1对面支路并识别是否为目标数字,如果否,则转至T型路口对面,识别目标数字方位并转弯,识别虚线点后停车。

如装药且接收到小车1位置指令,则送药模式,小车2运行到指定位置停车且发送反馈信号,当接收到小车1继续运行指令则倒车回十字路口识别目标数字方位并转弯,识别虚线点后停车。

图2  小车2程序设计流程图

04

总结

此方案,可行性较高,关键点有3个,分别是电机编码器位置闭环、K210训练识别数字、OPENMV巡线,其实这些内容我在21年电赛开赛前就说过,不知道大家还有没有印象:

关于21年电赛,这些一定要熟悉!(点击即可跳转阅读)

关于2021年电赛的一些想法,看到就是赚到!(点击即可跳转阅读)

现在回过头来看看,确实有一些参考价值。


由于篇幅有限,过多的细节在此不放了,有需要详细设计报告以及代码的,请加微信:great_xiaolong,加好友记得备注。

对了,近期会陆陆续续开源电赛所有题目的方案,有兴趣的朋友们可以关注下。

当然,想来分享自己电赛心得体会的可以加我微信,进行投稿,一旦录用,有稿费哦~


精彩推荐:点击图片即可跳转阅读

带学生参加电赛,5个国一,2个国二!15个省奖!

【STM32入门】这个项目绝了,用手势来产生波形!

电烙铁焊锡到底有没有毒?

近期会近期会开源电赛所有题目的方案,欢迎大家关注公众号。

做个全国一等奖的小车,其实不难(F题:智能送药小车方案分享)相关推荐

  1. 2021电赛F题智能送药小车方案分析(openMV数字识别,红线循迹,STM32HAL库freeRTOS,串级PID快速学习,小车自动返回)

    2021全国大学生电子设计竞赛F题智能送药小车 前提:本篇文章重在分享自己的心得与感悟,我们把最重要的部分,摄像头循迹,摄像头数字识别问题都解决了,有两种方案一种是openARTmini摄像头进行数字 ...

  2. 2021电赛F题-智能送药小车-国一

    2021电赛F题-智能送药小车-国一 B站视频链接:https://www.bilibili.com/video/BV1u44y1e7qk/ (这大概是b站第一个双车视频吧,嘿嘿

  3. 2021年全国大学生电子设计大赛F题——智能送药小车,全方位解决方案+程序代码(详细注释)山东赛区国奖

    目录 1.赛题及硬件方案分析: 2.用到的主要器件清单: 3.各部分思路及代码实现 (1).小车舵机.马达驱动 (2).蓝牙通信 (3).单片机与OpenMV的串口通信 (4).单片机与OpenMV的 ...

  4. (不眠者①队)国电-F题:智能送药小车,广东赛区一等奖,推国赛,开源(代码+设计方案)

    国电 -- F题: 智能送药小车,所有源码暂时开源 目录 国电 -- F题: 智能送药小车,所有源码暂时开源 前言 一.题目 二.硬件部分 材料清单: 材料实物图: 设计方案: 三.代码部分 数字识别 ...

  5. 全国一等奖,F题:智能送药小车。

    大家好,我是张巧龙,今天给大家继续带来电赛F题的分享:智能送药小车. 今天这个车也获得了全国一等奖,这次获奖队伍和上次获奖队伍,都是我赛前指导的学生做的. 上次的文章链接:做个全国一等奖的小车,其实不 ...

  6. 2021电赛F题(智能送药小车)参赛总结【视觉部分】

    2021电赛F题(智能送药小车)参赛总结[视觉部分] 前言 在2021年全国大学生电子设计竞赛中,我们小组做的是F题(智能送药小车).我在小组中主要负责小车视觉功能的实现,所以在本篇参赛总结中只会涉及 ...

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

    2021电赛国一智能送药小车(F题)设计报告 [写在前面的话] 电赛是一个很奇妙的过程,可能有些人觉得电赛的门槛太高,那便意味着,当你决定要参加电赛的那一刻起,这一段路.这些日子就注定不会太轻松: 我 ...

  8. 智能送药小车(一)——K210巡线

    智能送药小车 K210 颜色识别 K210 找出最大色块 K210 颜色识别 这部分基本就是例程上的内容,添加了一点注释.关于相关的运用到的函数解释,可以参考K210颜色识别. import sens ...

  9. 智能送药小车解说(国二)

    最近很多同学找我要代码 所以我在这写一下,我用的数字识别部分是用的Sipeed的摄像头,我个人觉得烧写代码确实很麻烦,但是他的像素确实很好,我也开源了代码,这个链接(https://download. ...

最新文章

  1. android 监听时钟变化,Android4.4 SystemUI分析之Clock时钟显示
  2. 02 - Unit06:弹出对话框
  3. 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告
  4. Linux chown命令:给资源绑定用户权限
  5. 配置三台服务器组成的ELK集群(二)
  6. labview项目实例_labview操作者框架
  7. 想成领袖?先瞄准老板身边的位置
  8. nginx 升级http请求到websocket
  9. 2010年3月再谈前端工程师的笔试题
  10. STM32工作笔记0099---Pacman常用命令
  11. play framework anorm orm 化构想
  12. 学习React中遇到的问题
  13. 深度学习的未来在单片机身上?
  14. Apache Flink 进阶(六):Flink 作业执行深度解析
  15. R语言实现故障树定量与定性分析——以GJB-Z 768A-1998 故障树分析指南图5.37为例
  16. NVIDIA Maxine 姿势识别极简教程
  17. Centos7 NAT网络连接方式以及NetworkManger进行网络连接管理
  18. 手机“隐藏功能”揭秘
  19. 手机支付商业模式剖析
  20. spring整合hibernate步骤及配置文件

热门文章

  1. 用命令行的方式运行Spark平台的wordcount项目
  2. SAP BOPF BO draft状态的数据激活原理
  3. Request load debugging - ERP side
  4. 在同一session内创建, 修改和删除IBASE component
  5. BP: Useful report to list assigned employees
  6. Eclipse里代码自动完成 auto completion的快捷键设置
  7. Total = 80是这样计算出来的
  8. INTEROP tile cache
  9. python 两点之间的距离_手把手教你HTML5实现根据LBS定位到商家两点之间距离多少...
  10. 软件加入使用时间_有了抢口罩软件,电商也进行了升级,我们又有了新软件