羽毛球训练监测器 作者:Justd0
最初立项时,看到官方提供的资料和例程,了解到LSM6DSOX具有6轴运动感知的同时,还有状态机和机器学习的功能,那么将对运动感知的相关应用将会有很好的支持作用,比如活动识别、运动,震动强度检测、携带位置、姿态识别等。正巧,报名的那段时间,天气回暖,时不时下楼打打羽毛球,就想到这个传感器能不能跟羽毛球运动建立起一定的联系?经过前期一段时间的学习和使用,对LSM6DSOX有了较为充分的认识,也对本项目的思路更加清晰和明确。
“羽毛球练习器”项目我最初的想法是感知挥动球拍的动作的形式、力度,是否击中羽毛球和击中的位置等,记录一场比赛下来,所有挥动的质量,结合上位机做个羽毛球击打练习分析系统。LSM6DSOX中的MLC和FSM模块可以对动作进行分析识别,极大的减少了MCU的数据处理要求,可以节省出资源完成提示或者记录的功能。
三、项目研发架构 前期,我对LSM6DSOX的FSM和MLC进行了基本的学习,较为充分的了解了LSM6DSOX的所有特色功能,然后根据最初的立项目标构建了如下的思维导图,这个导图基本贯穿了后期开发的全部内容。
上图中可以很清晰的看出我的研发思路。在最开始分析了羽毛球挥拍动作感知功能需求,并详细列出了各种实现方案与思路。之后根据功能目标,开始了实际研发。研发过程分成两步,第一步是在开发板上研究羽毛球挥拍动作识别,之后设计了一个独立模块,来部署羽毛球挥拍动作时别的功能。 详细羽毛球挥拍动作识别目标在【羽毛球训练监测器项目】--项目简介及研发计划帖子中详细阐述了。 动作识别部分我主要是依靠LSM6DSOX的MLC功能模块来实现,具体在【羽毛球训练监测器项目】--主功能实现帖子中详细阐述了。 然后实现了对基本动作的识别后,我是想时间允许的话,就设计一个独立的小模块,真实测试下识别记录功能。后来我还是利用了几天的时间,设计并打样了这个小模块。 四、各部分功能说明 主要的羽毛球挥拍动作识别功能开发的详细过程介绍,在这个【羽毛球训练监测器项目】--主功能实现中详细阐述了,这里就不赘述了。 后面所设计的羽毛球训练监测器模块主要的架构如下图所示:
整体的架构较为简单,整个模块采用锂电池供电,选用ETA6002作为锂电池充放电管理,主控采用手头现有的STM32F103C8,TF-card和LSM6DSOX分别通过SPI与主控进行通讯,并放置有7个RGBled来显示所有状态,通过USB-Type-C接口来进行供电和虚拟串口通讯功能。 整个设计过程已经压缩到三分多钟的视频中,链接如下【羽毛球训练监测器项目】-- 羽毛球训练监测器之硬件部分。功能上 锂电池可以做到模块无线化,也更符合“物联网小模块”的应用风格,主控选用STM32F1主要是这段时间疫情在家,家里最多的就是f103的芯片,真正低功耗问题需要考虑的问题太多,所以就直接使用了。 RGB led灯的设计可以使用很多的颜色来显示各种不同的状态。TF卡既可以作为记录使用,也可以用来加载各种配置文件,后期也可以进行升级使用(后期增加BootLoader)。 五、作品源码和案例中处理的传感器数据 小模块使用CUBE生成的工程,主要的配置界面如下:
代码上涉及到LSM6DSOX的有两个部分,第一部分是初始化参数,这部分结合TF卡和FATFS文件系统,实现了通过拷贝参数文件的方式来实现加载配置。具体的实现代码如下所示:
第二部分就是读取传感器各种状态的操作,这部分也就是目前测试小模块的主逻辑部分:
代码上其实都很简单,这也正说明了LSM6DSOX的强大之处,把一切数据处理问题都拦到了自己的内部,让主控只需要读取相应的数据寄存器即可完成功能,同时官方的github仓库中也提供了大量的例程可以参考,本代码中加载参数结构体的方式就是参考STMems_Standard_C_drivers中的lsm6dsox_mlc.c示例代码。 针对羽毛球拍运动检测相关动作训练内容,我放在下方仓库的datatest中了,其实这三个月我针对挥拍动作检测进行了不下15次完整周期的数据采集工作,其中通过录屏记录测试过程的内容就有如下这么多段,还有很多训练文件在自己不满意的时候就删掉了的。尽管我通过大量的测试,最后效果实现了,但是识别的准确率其实不是很高。这里我觉得是个不足的地方,不过这个不足,我觉得可能是两方面原因造成,其一是我的方法使用还是不当(这里想起了nmg大大说的第二次st的官方交流会呢?),其二就是mlc方法用于羽毛球拍挥动识别这种瞬时动作上不是那么的合适。
所以由于本项目中的羽毛球挥拍动作识别功能只用到了MLC的功能,为了测试本模块的兼容性和未来的可扩展性,我也使用官方的Freefall detection和6D position recognition的配置头文件对小模块的FSM和MLC进行了额外的测试,可以说功能实现的比价完美吧,测试视频放在了【羽毛球训练监测器项目】-- 羽毛球训练监测模块之额外功能测试中。 作品相关的所有开源资料和案例处理中的传感器数据均已经上传到了我的仓库里,相关链接如下: https://github.com/leazer/LSM6DSOX_Ctrl 六、视频演示 本段介绍了本项目主功能的实现过程和最后的测试视频结果。 下面这个视频介绍了本项目后期硬件小模块的设计、焊机过程和实物结果。 这个视频中介绍了本项目中小模块针对既有的FSM和MLC功能的实现测试,同时创新型的增加了TF卡加载模型的方式,使得在需要调整模型参数的时候,无需重新烧录固件,即可完成参数更新操作。 最后这个视频,便是本设计的模块搭载前面在开发板上针对羽毛球挥拍动作识别的测试视频:
七、项目总结 从四月份开始比赛到如今,已经经过了三个月左右的时间。在这段时间中,我可以说是非常认真地对ST这款传感器进行了学习和使用,体会到了其功能强大的同时,也在过程中遇到诸多问题,不过大部分还是依靠自己揣测、查阅、造轮子等方式解决掉了。期间感谢nmg对本项目传感器样片申请的支持,不然我可能就要把开发板上的传感器焊下来使用了。在项目的进展过程中,我也是时刻分享自己的学习和成果分享,共有如下帖子内容(均为帖子链接):
关于本项目中识别准确率的问题,我认为跟动作本身的性质有一定的关系,在跌落测试过程视频中可以看到,也是存在一定的识别失误率的,这其实比价难避免,fsm中的时间周期设置短的话,灵敏度就会升高,但同时误触发也会增加,时间参数设置短的话,误触发可能减少,但灵敏度也相应会降低,因此需要找打个平衡点。所以落在羽毛球拍挥拍识别上来说,也是一样,可能参数上还需要多多细致的调整下。 由于这个芯片资料仅在官方和咱论坛中存在有限的资源,所以自学还是存在一定难度的,尤其是面对mlc这种依靠丰富经验和测试的模块,所以还是希望自己的这些分享能够对他人有所价值,也希望大家能相互更多更积极的交流。最后不得不说,这个传感器还是挺强的。 八、其他 感谢主办方提供的开发板和传感器芯片,让我免费的接触到了一款低功耗、高性能的运动传感器,同时借着比赛,我也学习了一波adobe全家桶的使用方法,目前对制作视频也是小有见解,对检测器模块硬件开发的视频更是得到了b站上接近8k的观看量(头一回~),项目作品虽然提交,值得撒花。但是目前仍然具有不尽人意的地方需要改进,后面我将会利用工作之余的时间继续完善好这个模块,希望多次调参之后,能够更好地发挥出LSM6DSOX的性能。
项目提交报告如下链接啦:
增加了部分描述,不过项目更加详细的学习和开发过程都在各个帖子中描述了,所以在项目提交报告中就没有重复赘述呢。 开源资料部分,在本文中只简单的介绍了相关于lsm6dsox的部分,其他部分各位感兴趣的话也可以一起交流。 |
期待 |