目录
0. 前言
毕业设计已经完成了,前前后后花了有将近两个月时间,期间主要受到了两位学弟的帮助,一位帮忙做动力控制,另一位负责设计机械和动力方案,非常感谢。
该项目主要目的是设计一款“基于双指标检测的自助智能台球柜”,主要实现以下功能:
- 用户可以使用小程序进行自助取球和自助还球;
- 还台球时会对台球数量进行检测,进行视觉(YOLOv5)和重量(重力传感器)的双指标检测。
感兴趣的话可以看看视频展示:视频展示:基于双指标检测的自助智能台球柜。
首先看看成品的大致外观:
1. 整体技术方案
首先看下项目整体的技术方案,项目主要可以分为机械、动力、数量检测、通信和用户交互五大功能模块,如下图:
各功能模块联系和整体流程可以看下面的图片
1.1 机械结构
机械结构主要是用2020铝型材做框架,黑色环氧板做外壳,其实从上面的图片就明白机械结构是怎么设计的了。
1.2 动力系统
动力系统使用了三根滑轨,每根滑轨控制一维的运动,三根滑轨就可以保证台球盒在整个空间内的运动,滑轨长这个样子:
三根滑轨组装在一起长这样:
控制方面用STM32发送控制信号,采用Microstep driver DM542步进电机驱动器提供驱动电压。
1.3 台球数量检测
1.3.1 YOLOv5视觉检测
视觉方面使用YOLOv5对做数量检测,效果很不错的,因为台球是放在检测平台上的,场景相对单一,效果如下图:
YOLOv5部署在Jetson Nano上,实测未加速情况下稳定在15fps左右(加有散热风扇),可以满足需求,因此我也没有做模型加速。
1.3.2 重力检测
另一方面采用重力检测来通过重量确定台球的数量,主要用到的就是下面的高精度重力传感器。
该传感器能将重量大小转换为毫伏级别的电压高低,然后再经过电压放大器和模数转换模块,在STM32上经过模数转化就可以得到台球重力,实测误差在1g左右。
然而实际情况是重力检测并没什么用,原因在于不同的台球重量相差挺大的,我们买的台球一个在160-170g左右,而学校的台球一个在180-200g左右。。。无法很好的进行重量检测。后来就改成了重量只要不是小的离谱就算检测成功(大于1200g),主要还是依赖视觉做数量检测。
1.4 通信方案
用户手机需要与台球柜进行通信:比如手机给台球柜发送取球和还球信号,取球或还球成功后给手机返回成功信号等,使用的是一个低功耗蓝牙模块:
但其实后来发现这种通信方案并不理想,弊端太多了,比如不能多用户同时连接蓝牙,手机和蓝牙的连接需要2秒左右的额外时间等等,实在是不够合理。
1.5 小程序交互模块
采用微信小程序完成设备和用户间的交互,没有自己搭建服务器,采用的是云数据库。大体效果如下:
2. 存在问题
虽然能完成大体功能,但项目整体还是存在不少问题,鲁棒性也不算很高:
- 机械系统鲁棒性不高:台球存放平台不够稳固,空间利用率较低等;
- 动力系统速度慢:从视频中可以看到还球和取球的速度还是挺慢的,用户需要等好几十秒;
- 蓝牙通信方案不合理:蓝牙通信方案在该项目中显然不是最优选择,存在诸多弊端;
- 小程序功能较为简陋:小程序的功能还是比较简单的,而且鲁棒性有待进一步提升,目前还是比较toy的。
以上就是关于我本科毕设的分享,也算是简单做一个总结和回顾了吧。马上毕业了,准备在读研之前找个CV方向的线上实习,希望有公司要我哈哈哈。:)