[经验分享] 【羽毛球训练监测器项目】--主功能实现

justd0   2020-6-19 22:23 楼主

上周,终于网络答辩结束了,正式的从一名研究生变成一只社畜,开启新的居家隔离生活。。。是的,“炸酱面”村被新冠袭击了,原计划24号返校领证的我们,又只能在家里苟这….

 

正好这几天可以静下心来,完成我的“羽毛球训练监测器”项目。前期其实已经对FSMMLC都有了基本的了解和尝试了,我寻思着用一两天先用开发板将主要功能实现一遍,然后结合起来完结项目,撒花~

       然而,当我按照之前的认知开始项目的数据采集训练测试时,才发现,我并没有理解MLC如何使用….

 

以下是本帖正文。

 

首先,我先放一段今天的一段识别的视频,经过n多次的采集、测试,成功率终于较为稳定了:

从视频中可以看到,本人拿着绑好开发板的羽毛球拍挥拍时,Unicodata界面下的MLC可以正确的识别出我当前的挥拍动作,比如 从上向前挥动会出现12,从下向前挥动会出现4,从左边向前挥动会出现8,说明项目的主要功能已经可以实现了~只是稳定性稍差,但这个稳定性跟MLC的执行原理有关系,我的手已经挥废了。。

 

接下来,我将从采集数据开始分享下以上功能实现的过程,在此过程中,我也是逐步的重新认识了下MLC这个模块。

 

我的项目目的是监测挥动羽毛球拍的动作,在帖子中我简单的介绍了下挥动的分类。

 

在最开始的时候,我用UnicoPolts界面初步分析了挥动羽毛球拍所需要的传感器范围参数。

0.png

也就是在挥动过程中,数据不要出现失真采样频率够用

然后基于上面的指标,我最后确定了一组参数:

  • 加速度计分辨率:8G
  • 加速度计输出频率: 104Hz
  • 角速度计分辨率:1000dps
  • 角速度计输出频率:104Hz

 

于是基于以上参数,我开始收集动作数据。

-----------------------------这部分存在问题,仅仅为分享记录,请不要参考--------------------------------------------------

最开始根据我之前写的帖子中的采集方法收集了一个小时的数据,后来又多次重复收集数据,挥动我手都快断了:

挥拍动作我保留了三个:从下向前挥动,从上向前扣杀,从左向前回击。每种动作我分别采集了25+个数据集,并且用我之前写的小工具,对数据集进行了区域剪切,去掉了数据中动作前后的空闲段。然后依次导入到UnicoMLC界面中,像这样:

1.png

终于,导入完了所有数据之后,开始configuration MLC的参数,一切都是按照之前的方法进行,设置好了前面的参数:(界面中软件版本是9.8.1.0,貌似支持批量导入,但是我没搞能用)

2.png

 

3.png

4.png 在导出训练文件的时候,出现了问题….软件闪退了!!!前面导入的数据记录全没了,于是我又重新尝试了两三遍,软件退回9.7.1.0也测试了几遍,一天就这么过去了….我曾一度怀疑是我参数设置问题,或者新版软件的bug,或者数据集采集的问题。。。

最后,在我即将饿不下去想吃晚上的午饭时,偷了个懒,发现导入少量的数据后,是可以生成训练文件的,这说明….我那接近八十个数据集太多了导致软件崩溃了。。。。额,说好的机器学习训练呢,,,数据集不得多来点么。。。

 

-----------------------------失败测试结果的结束分割线-----------------------------------------------------

在吃过晚饭后,我重新梳理了下思路。在经过对官方教程二度阅读后发现,官方教程中三个动作,一共就仨数据集??

5.png

而且在采集数据的界面下可以看到,基本上就是一个动作重复在做很多次:

6.png

 

这时,想到后面要设置的窗口宽度参数,突然明白了。 

 

之前一直受限于研究生课题的深度网络思维,训练集用损失来训练网络权重…那就需要大量的数据集进行演算。而MLC是机器学习啊,它通过数据统计的方法,总结出动作的特征值特点,从而实现分类操作。。。

 

也就是说,我们采集的数据集中包含大量同一动作的重复数据,并且每个动作的数据量正好在窗口宽度范围左右,那么这样,Unico就可以根据窗口宽度自动分割数据集区间,计算统计特征值了。这也就解释了为啥官方教程中提示的:要注意正确的启动和停止数据日志,必须要start之前动作,动作完成前stop了,这样滑动窗口才不会因此而错位,计算错误的数据。

 

6-5.png

 

那这么来看,我前面做的数据集和写的训练方法都是存在问题得了。

 

于是我重新收集了数据,在一个数据集中多次按照同一动作挥动拍子,这样就收集到了一份新的数据集。(虽然前面写的训练方法是有误的,但是我写的那个小工具还是可以在这个时候,对数据集的前后进行处理的~)

 

可以看到,采集并且通过处理的数据波形如图所示:

7.png

其中包含了25次动作,每个动作占用了70左右的采样次数,那么之后的窗口宽度就可以设置到这个值附近了。

 

收集好多个动作的数据集后,依次导入到Unico的MLC中

8.png

 

上图中为导入后的样子,其中down是从下向前挥拍,left为从左向前挥拍,up是从上向前挥拍,stand是没动作的时候,那么接下来就可以设置参数了。

 

9.png

 

10.png

 

在特征参数这里,他的目的是通过所选的特征值来寻找统计出不同动作间的差异,所以特征值参数可以先把能选的都选了,然后用weka统计一遍,最后生成的决策树中会显示只用到了那些特征值,然后再重新设置一遍configuration,这样的目的主要是传感器内存有限,这里特征值选择多了,会占用内存,所以适量就好~

11.png 然后点下一步,保存arff文件,并设置下results,官方说明中建议是4的倍数,为了后面的元过滤器,但是我试了1234也是可以的,主要是后面的元过滤器没搞懂他的作用是啥。。

  11.png

 

接下来打开刚刚生成arff文件,并按照帖子中的方法来生成决策树即可。

12.png

得到决策树的文件:

 

13.png

 

就可以生成配置文件了

 

14.png

 

保存了配置文件后,在unico中导入ucf文件,MLC模块就启动成功了。

 

15.png

 

然后在data界面中就可以看到执行不同动作时的输出效果了~

 

尽管识别的效率一般,但也是基本实现了MLC识别挥拍动作的功能….

 

至此,我的项目.....哦 不,左手已经出水泡了。。

回复评论 (1)

恭喜进入开始没有寒暑假的生活,哈哈哈。 

加油!在电子行业默默贡献自己的力量!:)
点赞  2020-6-20 10:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复