0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2024-11-25 11:28 次阅读

概述

MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入式AI功能、评估嵌入式库、分析数据,以及为整个MEMS传感器产品组合设计无代码算法而设计。这款独特的软件解决方案提供了多功能的开发环境,支持评估和编程所有MEMS传感器,此外还推出了新一代解决方案,以扩展Unico-GUI、Unicleo-GUI和AlgoBuilder等成熟应用程序的功能。

最近在弄ST的课程,需要样片的可以加群申请:615061293 。

MEMS-Studio可简化在STM32微控制器上使用图形界面实现概念验证的过程,无需编写代码。此解决方案支持配置传感器和嵌入式AI(机器学习神经网络),可充分利用机器学习内核 (MLC)、ISPU的神经网络以及有限状态机 (FSM)。它会重复使用嵌入式软件库,将多种功能组合到一个项目中,并使用绘图和显示功能实时可视化数据。
MEMS-Studio提供以下用户体验:
● 针对MEMS产品组合中运动、环境和红外传感器进行评估
● 配置和测试传感器内的各项功能,如有限状态机 (FSM)、机器学习内核 (MLC) 和智能传感器处理单元 (ISPU)
● 实时和离线数据分析
● 无代码图形化算法设计

视频教学

[https://www.bilibili.com/video/BV1624VeAEAG/]

样品申请

[https://www.wjx.top/vm/OhcKxJk.aspx#]

源码下载

[https://download.csdn.net/download/qq_24312945/89843512]

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。

主控为STM32H503CB,陀螺仪为LSM6DSV16X,磁力计为LIS2MDL。

选择MEMS

使用 MEMS Studio 的 MLC(Machine Learning Core)进行训练, "Sensor" 字段选择要配置的传感器 。

导入数据

点击“Browse”选择采集到的数据,给该类数据命名后下载。

将所有采集到的数据都导入进去,下载成功如图所示。

配置窗口长度和量程

MLC ODR(输出数据速率):已设置为 240Hz,这是 MLC 处理数据的速率。
时间窗口长度(Window length):设置的窗口长度为 60,表示 MLC 每 60个样本计算一次统计特征。
加速度计(Accelerometer):
● 量程(Full Scale):设置为 ±2g,表示能够测量的最大加速度为 ±2g。
● ODR(数据速率):设置为 480Hz,表示加速度计的采样频率为 480Hz。
陀螺仪(Gyroscope):
● 量程(Full Scale):设置为 ±125 dps,表示最大旋转速度为 ±125 度/秒。
● ODR(数据速率):设置为 480Hz,表示陀螺仪的采样频率为 480Hz。

配置滤波器

● filter_1:应用于 HP_Acc_XYZ,表示这是一个 高通滤波器(HP,High-Pass Filter),用于对加速度计的 X、Y、Z 轴的三维数据进行滤波。
● HP_Acc_XYZ:此滤波器将过滤掉加速度数据中低频成分,保留高频部分。这可能是为了消除像重力这样的低频信号干扰,保留运动的快速变化部分。
● filter_2:应用于 HP_Gyr_XYZ,这是一个 高通滤波器,用于对陀螺仪的 X、Y、Z 轴数据进行滤波。
● HP_Gyr_XYZ:此滤波器将过滤掉陀螺仪数据中的低频部分,保留高频的旋转变化信息,适合检测快速旋转或角速度的变化。
● filter_3:应用于 HP_Acc_V2,也是一个 高通滤波器,用于处理加速度矢量平方值(即组合了 X、Y 和 Z 轴的加速度数据)。
● HP_Acc_V2:此滤波器将对加速度矢量平方值的低频信号进行过滤,保留高频部分,帮助识别运动的剧烈变化。
● filter_4:应用于 HP_Gyr_V2,是一个 高通滤波器,用于处理陀螺仪矢量平方值(即组合了 X、Y 和 Z 轴的角速度数据)。
● HP_Gyr_V2:此滤波器将对陀螺仪矢量平方值的低频部分进行过滤,保留高频部分,帮助识别旋转运动中的快速变化。

选择特征数据

MLC(Machine Learning Core) 的 特征选择(Features Selection) 区域可以为传感器数据选择要计算的统计特征,并将其作为机器学习的输入。
MEAN:均值,表示在给定的时间窗口内计算的传感器数据的平均值。
VARIANCE:方差,表示数据的分散程度,反映数据在给定时间窗口内的变化。
ENERGY(能量): 计算信号在给定时间窗口内的总能量。它反映了信号强度,通常用于识别较强或较弱的活动。
PEAK_TO_PEAK(峰峰值):峰峰值特征计算的是信号在给定时间窗口内的最大值和最小值之间的差异。这个特征可以帮助检测信号的最大振幅,是评估运动强度和突发变化的有力指标。

设备树生成

生成的设备树文件为 arff 文件。

决策树生成

点击 "Generate Decision Tree" 按钮以生成决策树。这个按钮基于之前通过 ARFF 文件加载的数据和特征生成了一个分类模型(决策树),用于识别不同的动作或状态。

Kappa 统计量 是一种用于衡量分类器在考虑偶然因素时的准确性度量。这里显示为 0.307479,虽然分类准确度高,但 Kappa 值可能表明结果受到数据分布或样本量的影响。
● 0.81 - 1.00:几乎完美的分类一致性。
● 0.61 - 0.80:很好的分类一致性。
● 0.41 - 0.60:中等分类一致性。
● 0.21 - 0.40:较低的分类一致性。
● 0.00 - 0.20:几乎没有一致性(接近随机猜测)。

查看分析信息。

F1_MEAN_on_ACC_X <= 0.0360312
|   F1_MEAN_on_ACC_X <= -0.88916: other (65.0)
|   F1_MEAN_on_ACC_X  > -0.88916: Steady (52.0)
F1_MEAN_on_ACC_X  > 0.0360312
|   F7_ENERGY_on_GY_X <= 0.241577: Idle (62.0)
|   F7_ENERGY_on_GY_X  > 0.241577: Writing (68.0)

Number of Leaves  :     4
Size of the tree :     7


class:
 = > Idle, Writing, other, Steady, 
features:
 = > F1_MEAN_on_ACC_X, F2_MEAN_on_ACC_Y, F3_MEAN_on_ACC_Z, F4_MEAN_on_ACC_V2, F5_VAR_on_ACC_V2, F6_VAR_on_GY_V2, F7_ENERGY_on_GY_X, F8_ENERGY_on_GY_Y, F9_ENERGY_on_GY_Z, F10_ENERGY_on_GY_V2, F11_PeakToPeak_on_ACC_V2, F12_PeakToPeak_on_GY_V2, 


Mean absolute error    1
Root mean squared error    1
 ======= Whole data training with Confidence Factor: 0.9 ========= 


===== Confusion Matrix =====
             Idle         Writing      other        Steady        -- classified as
Idle         62    0    0    0    
Writing      0    68    0    0    
other        0    0    65    0    
Steady       0    0    0    52    

Total Number of Instances        : 247
Correctly Classified Instances   : 247
Incorrectly Classified Instances : 0
Kappa Statistic: 0.252373
Accuracy: 100%

Report  :    precision    recall    support    
Idle         1        1     62
Writing      1        1     68
other        1        1     65
Steady       1        1     52

avg/total    1        1     247

根节点判断条件:
● F1_MEAN_on_ACC_X <= 0.0360312:
○ 如果 X 轴加速度的均值小于或等于 0.0360312:
■ 如果 F1_MEAN_on_ACC_X <= -0.88916,则分类为 other(65 个样本)。
■ 如果 F1_MEAN_on_ACC_X > -0.88916,则分类为 Steady(52 个样本)。
○ 如果 X 轴加速度的均值大于 0.0360312:
■ 如果 F7_ENERGY_on_GY_X <= 0.241577,则分类为 Idle(62 个样本)。
■ 如果 F7_ENERGY_on_GY_X > 0.241577,则分类为 Writing(68 个样本)。

● 混淆矩阵 显示模型在每一类的分类结果:
○ Idle:62 个样本被正确分类。
○ Writing:68 个样本被正确分类。
○ other:65 个样本被正确分类。
○ Steady:52 个样本被正确分类。

● Kappa Statistic:0.252373。尽管分类准确度为 100%,但 Kappa 值较低,表明不同类别之间可能存在某些重叠或类别分布不均衡。
该决策树模型在当前的小型数据集上表现良好,分类准确度为 100%,没有任何错误分类的实例。然而,Kappa 统计量(0.252373) 表明类别之间可能存在数据不平衡,导致模型虽然能够准确分类,但泛化能力可能较差。

参考程序

[https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsv16x]

转换UCF文件

类输出值可以根据自己的需求修改,然后点击“Generate Config File”生成ucf文件。

将得到的UCF文件存放到LSM6DSV16X的程序中。

在初始化中添加MLC检测功能。

for( uint32_t i=0; i< (sizeof(lsm6dsv16x_activity_recognition) /
                    sizeof(ucf_line_t) ); i++ ) 
    {
    lsm6dsv16x_write_reg(&dev_ctx, lsm6dsv16x_activity_recognition[i].address,
                       (uint8_t *)&lsm6dsv16x_activity_recognition[i].data, 1);
  }

在主函数中获取状态值,查询类的输出值,编译程序。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      lsm6dsv16x_mlc_handler();
        if (event_catched != 0) 
        {

            printf("event_catched=%d",event_catched);
             // 握(0) 拍(1) 挥(2) 拍(3) 静(4) 止(5)
      switch(event_catched) 
            {
                    case 2:
                        event_catched = 0;

                        printf("闲置(Idle)rn");
                        break;
                    case 4:
                        event_catched = 0;

                        printf("书写(Writing)rn");
                        break;
                    case 8:
                        event_catched = 0;

                        printf("其他(other)rn");
                        break;
                    case 12:
                        event_catched = 0;

                        printf("静止(Steady)rn");
                        break;                    
                    default:break;
      }
      event_catched = 0;
    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示 静止状态如下。

闲置状态如下,手抓笔静止。

书写状态如下,移动笔进行识别判定。

其他如下,笔倒置。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19117

    浏览量

    304984
  • mems
    +关注

    关注

    129

    文章

    3929

    浏览量

    190602
  • AI
    AI
    +关注

    关注

    87

    文章

    30830

    浏览量

    268993
  • MLC
    MLC
    +关注

    关注

    0

    文章

    41

    浏览量

    17304
  • 智能笔
    +关注

    关注

    1

    文章

    15

    浏览量

    5364
收藏 人收藏

    评论

    相关推荐

    陀螺仪LSM6DSV16X与AI集成(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据
    的头像 发表于 12-18 10:49 1720次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(1)----轮询获取陀螺仪<b class='flag-5'>数据</b>

    陀螺仪LSM6DSV16X与AI集成(2)----姿态解算

    LSM6DSV16X包含三轴陀螺仪与三轴加速度计。
    的头像 发表于 12-18 10:51 2224次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(2)----姿态解算

    陀螺仪LSM6DSV16X与AI集成(3)----读取融合算法输出的四元数

    LSM6DSV16X 特性涉及到的是一种低功耗的传感器融合算法(Sensor Fusion Low Power, SFLP). 低功耗传感器融合(SFLP)算法:
    的头像 发表于 12-18 10:53 1214次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(<b class='flag-5'>3</b>)----读取融合算法输出的四元数

    陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

    LSM6DSV16X是一款高性能、低功耗的6轴IMU传感器,集成了3轴加速度计和3轴陀螺仪。本文将详细介绍如何配置和读取LSM6DSV16X
    的头像 发表于 07-18 10:40 1515次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(7)----FIFO<b class='flag-5'>数据</b>读取与配置

    LSM6DSV16X基于MLC智能动作识别(2)----MLC数据采集

    MLC 是“机器学习核心”(Machine Learning Core)的缩写。在 LSM6DSV16X 传感器 中,MLC 是一种嵌入式功能,它使传感器能够直接运行基于决策树的机器学习算法。通过
    的头像 发表于 10-22 10:02 755次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于<b class='flag-5'>MLC</b><b class='flag-5'>智能</b><b class='flag-5'>笔</b><b class='flag-5'>动作</b><b class='flag-5'>识别</b>(2)----<b class='flag-5'>MLC</b><b class='flag-5'>数据</b>采集

    陀螺仪LSM6DSV16X与AI集成(13)----中断获取SFLP四元数

    本文将介绍如何通过中断机制获取 LSM6DSV16X 传感器的 SFLP(Sensor Fusion Low Power)四元数数据LSM6DSV16X 是一款高性能的 6 轴惯性传
    的头像 发表于 11-25 11:44 571次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(13)----中断获取SFLP四元数

    陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位机

    本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协议上报到上位机。通过获取传感器的四元数数据,并将其转换为欧拉角(Roll、Pitch、Yaw),然后按照协议格式化数据
    的头像 发表于 11-25 11:53 639次阅读
    陀螺仪<b class='flag-5'>LSM6DSV16X</b>与AI集成(14)----上报匿名上位机

    请问lsm6dsv16x可以直接读取触摸手势吗?

    已经读出来了LSM6DSV16x的QVRmv值,也写出了单击的状态机。但是在写触摸滑动手势时没有找到好的计算方式。请问是不是有直接读出这些手势的函数?
    发表于 07-02 08:14

    求助,是否有在LSM6DSV16X中使用传感器融合低功耗算法的示例

    你好我想知道是否有在 LSM6DSV16X 中使用传感器融合低功耗算法的示例。我想检索当前的 Heading、Pitch 和 Roll 信息。或者我也很高兴有一个例子解释如何从 SFLP 中获取四元
    发表于 02-03 09:12

    LSM6DSOX MLC状态识别

    电子发烧友网站提供《LSM6DSOX MLC状态识别.pdf》资料免费下载
    发表于 07-31 15:14 0次下载
    <b class='flag-5'>LSM6</b>DSOX <b class='flag-5'>MLC</b>状态<b class='flag-5'>识别</b>

    基于ST LSM6DSV16BX多功能MEMS Sensor的TWS方案

    ST 适时推出多功能MEMS Sensor LSM6DSV16BX,在2.5 mm x 3.0 mm x 0.71 mm的封装里集成了3
    的头像 发表于 09-06 17:10 1988次阅读
    基于ST <b class='flag-5'>LSM6DSV16</b>BX多功能<b class='flag-5'>MEMS</b> Sensor的TWS方案

    ST LSM6DSV16X iNEMO惯性模块相关的使用信息和应用提示

    AN5763,LSM6DSV16X是一款ST的3 轴加速度计和 3 轴陀螺仪; LSM6DSV16X 是系统级封装的 3 轴数字加速度计和
    发表于 08-31 11:12 0次下载

    意法半导体新款MEMS IMU LSM6DSV32X实现精确姿态识别应用

    凭借3核、6轴传感架构,意法半导体新款MEMS IMU LSM6DSV32X能够进行卓越的边缘计算处理,是智能手机的高精度感测和
    的头像 发表于 08-01 10:15 806次阅读

    LSM6DSV16X基于MLC智能动作识别(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据
    的头像 发表于 10-16 10:38 369次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于<b class='flag-5'>MLC</b><b class='flag-5'>智能</b><b class='flag-5'>笔</b><b class='flag-5'>动作</b><b class='flag-5'>识别</b>(1)----轮询获取陀螺仪<b class='flag-5'>数据</b>

    LSM6DSV16X基于MLC智能动作识别(4)----中断获取智能状态

    LSM6DSV16X 支持通过中断(INT)输出 MLC(机器学习核)识别动作。具体来说,MLC 可以配置为在满足某些条件或机器学习分类结
    的头像 发表于 11-25 11:39 176次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于<b class='flag-5'>MLC</b><b class='flag-5'>智能</b><b class='flag-5'>笔</b><b class='flag-5'>动作</b><b class='flag-5'>识别</b>(4)----中断获取<b class='flag-5'>智能</b><b class='flag-5'>笔</b>状态