一、系统方案
(一)系统结构
本组使用arduino作为主控板,采用openmv4 plus进行图像采集和数字识别,通过二者双向通信控制舵机旋转角度、小车行进方向、小车暂停时刻等;同时本组小车搭载了灰度传感器,用于实现小车循迹;通过光敏电阻搭载出的电路识别药品的放入与取出。
(二)方案比较与分析
- 实现小车寻径的方案选择:
方案①为使用颜色传感器 TCS34725。该传感器对于颜色的识别更加精准,但要实现小车循迹至少需要两块颜色传感器,此时需要解决两块传感器与arduino 串口通信的问题,较为复杂,而且本次题目无需进行如此精准的颜色识别,因此弃用本方案。
方案②为使用三块灰度传感器 HY-S126。灰度传感器可以识别出红色与白色,并且多块灰度传感器与 arduino 之间的串口通信简洁易写,可以很好地实现寻径功能。因此选择使用本方案。
- 摄像头模块的方案选择:
方案①为使用树莓派安装 opencv 进行数字识别。此方案需要进行树莓派的配置,较为复杂,本题目仅需实现印刷体数字的识别,无需如此高的精度。因此弃用此方案。
方案②为使用 openmv4 plus 模块进行数字识别。Openmv 的编写较为简单,openmv4 plus 模块可以通过数据集的采集和训练得到较为精确(精确度一般为 90%以上)的识别结果。因此选择使用此方案。
- 控制摄像头转动的方案选择:
方案①为使用 LD-20MG 单轴数字舵机。该舵机转速稳定,但体积较大,质量较重,对小车重心影响较大。
方案②为使用 SG90 舵机。SG90 体积小,质量轻,既能带动摄像头旋转,又对重心影响不大。此方案固定几个数字识别角度,减少数据集采集量,增大数字识别正确率。因此选用此方案。
二、理论分析与计算
(一)数字识别方法
我们选择采用 Openmv4 plus 进行图像的采集,使用机器学习来完成数字的识别。
首先我们使用 Openmv4 plus 对 1 至 8 这八个数字和无数字的空白区域进行采样,分成九个类,每个类采集图像的张数大概在 1500 张至 2000 张的范围内。然后将采集好的图片上传至 EDGE IMPULSE 的在线网站,该网站将自行训练神经网络的模型来完成机器学习的功能,十分地易用而且训练速度快。在该网站模型训练结束后会自动生成 python 文件、.tflite 文件、labels.txt 文件,下载并运行其中的 python 文件即可得到每次获取的数字图像中与每个类匹配的概率,在图像采集角度符合采样图像时,识别到正确数字的概率几乎为 1。
(二)自动寻径方法
本题我们采用三块灰度传感器 HY-S126 来实现寻径功能。将三块传感器并排放置在小车前端的底盘下部正中央,arduino 通过判断接收到的传感器返回值来判断目前各个传感器正下端的颜色,左中右三个传感器识别到的颜色排序及其对应的处理方式如下表所示:
(三)药品放置与拿开控制小车运动方法
在小车中部利用 3D 打印制作一个长方形的小药箱,在药箱中部钻孔放置光敏电阻,利用光敏电阻的性质配合电阻、LED 灯制作一个电路,将电路中某点的电压值返回到 arduino 中,实现放入药品后小车即开始运动,到达病房后人工取出药品,此时小车返回。
三、电路与程序设计
(一)电路设计
(二)程序设计
四、测试方案与测试结果
(一)自动寻径——传感器调试:
1、测试方案:
使用 arduino 开发板接入灰度传感器或红外光电循迹传感器,因受光照影响较大,故需寻找光照充足且均匀的平整场地,通过使用传感器分别测量白色和红色区域,设定合适的阈值。巡线时便可根据传感器传回的值与阈值比较判断。另外,传感器的安装位置也需要通过测试来进行微调从而确定最佳位置。
2、测试条件:
a.光照充足均匀的平整场地
b.灰度传感器与红外光电循迹传感器各两个
c.arduino 巡线小车一辆
3、测试结果:
a.使用红外光电循迹传感器测试,测得白色区域与红色区域返回值的差值过小,阈值设定范围小,效果差;
b.使用灰度传感器测试,在无遮光处理情况下,受场地灯光干扰过大,即使测得白色区域与红色区域返回值差值较大,阈值设定范围大,行进过程中受其他光线影响依然较大且不稳定。
4、测试结果分析:
a.红外光与红色区域反射光波长接近,难以清晰分开,本方案原理上可行性较低,故舍去;
b.对于灰度传感器,针对外部光线干扰的情况,使用黑色胶布对传感器进行遮光处理,再在传感器内部对光敏电阻进行部分遮光,测试得出反馈效果较好。
(二)数字识别——openmv 调试
1、测试方案:
openmv 对一定量的数字图片采集数据进行学习后可对画面中的单一数字进行识别,但对拍摄的高度和角度有一定的要求。本次测试主要任务为确定小车识别数字时停止的位置以及摄像头移动方式的确定。初步方案为先降低小车行进速度,通过 openmv 反馈的图像进行测量比对。使用小型 pwm 舵机控制摄像头移动,对偏转角度进行测试,寻找最佳视野。
2、测试条件:
赛题规定场地
巡线小车一辆
openmv 及小型 pwm 舵机各一个
3、测试结果:
确定停车位点及舵机旋转角度
五、总结
本次电赛题目时间紧急,期间淘汰掉的方案耗费时间较长,在后期我们了解到了更好的图像识别模块,但目前我们使用的 OpenMV 也可以很好地完成图像识别的任务。
六、参考文献
[1]李成勇,谭寒钟,王莎,胡晶晶.基于 OpenMV 的智能“寻的”小车控制系统[J].液晶与显示,2020,35(8):870-876.
[2]刘轩宇,李浩阳,胡子琨.基于 OpenMV 的自动巡线无人机研究[J].电子测试,2021(12):18-19.
[3]潘宇,唐万洪,刘斌,陈俊成.基于 OpenMV 开发的数字图像处理技术[J].电子技术与软件工程,2021(9):130-131.
[4]普邑,杨哲,王新勇.基于 OpenMV 的捡球机器人系统设计[J].山西电子技术,2020(1):70-73.
[5]夏胜杰,杨昊,艾伟清.基于 Arduino 单片机和 OpenMV 的颜色目标定位与跟踪小车的设计与实现[J].常熟理工学院学报,2021,35(5):59-64.