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

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

3天内不再提示

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

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2024-10-22 10:02 次阅读

概述

MLC 是“机器学习核心”(Machine Learning Core)的缩写。在 LSM6DSV16X 传感器 中,MLC 是一种嵌入式功能,它使传感器能够直接运行基于决策树的机器学习算法。通过这种功能,传感器可以独立完成诸如活动识别、运动强度检测和误报过滤等任务,而无需将数据处理转交给外部的微控制器。MLC 通过处理来自加速度计、陀螺仪或外部传感器的数据,计算统计参数、应用滤波器,并将分类结果输出到专用寄存器中(AN5804)。

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

视频教学

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

样品申请

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

源码下载

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

输出速率

在 AN5804 文档的 Table 1. Machine learning core output data rates 中,表格列出了机器学习核心(MLC)的输出数据速率(ODR),用于配置 MLC 数据生成的频率。

具体来说,MLC 的输出数据速率决定了机器学习核心处理传感器数据并输出结果的频率。不同的应用场景可能需要不同的速率来平衡功耗和性能。这个表格的目的是让用户根据应用需求选择合适的输出数据速率。

执行流程

根据 AN5804 第三页的描述,LSM6DSV16X 传感器的 机器学习核心(MLC) 的流程可以分为以下几个步骤:

  1. 收集传感器数据:
    1. ○ MLC 从内置的加速度计、陀螺仪以及通过 I²C 接口连接的外部传感器(如磁力计)中收集三轴传感器数据。这些数据包括 X、Y、Z 轴的加速度和角速度。
  2. 处理传感器数据(计算块):
    1. ○ 在这一阶段,传感器数据经过预处理。MLC 会应用一些滤波器(如高通、低通或带通滤波器),并计算出用户配置的统计特征(例如均值、方差、能量、峰值等)。这些特征基于用户定义的时间窗口(window length)进行计算,时间窗口的长度决定了统计数据的覆盖范围。
  3. 构建决策树:
    1. ○ 处理后的特征作为输入被传递到决策树。决策树是一个二叉树结构,在每个节点中,特征值被与某个阈值进行比较,以决定继续走向下一节点的哪一条路径。这个过程会在决策树的各个节点中重复,直到生成最终的分类结果(例如:静止、行走、跑步等)。
  4. 输出分类结果:
    1. ○ 当决策树到达叶节点时,它会输出一个分类结果,这个结果表示所检测的动作或状态。结果会被存储在 MLC 的专用输出寄存器中,供外部微处理器读取。
  5. 可选的元分类器过滤:
    1. ○ 输出的分类结果还可以通过一种称为 meta-classifier(元分类器) 的过滤器进行处理。元分类器会根据多个分类结果的统计情况,减少短时的错误分类或不稳定的输出。例如,如果短时间内结果频繁变化,元分类器会稳定输出。

速率设置

设置了加速度计和陀螺仪的输出数据速率(ODR)为480Hz,这将使传感器以较高的速率采样数据。这种设置适用于需要高动态精度的应用场景,比如需要精确跟踪快速运动的应用。

lsm6dsv16x_xl_data_rate_set(&dev_ctx, LSM6DSV16X_ODR_AT_480Hz);
  lsm6dsv16x_gy_data_rate_set(&dev_ctx, LSM6DSV16X_ODR_AT_480Hz);

量程设置

量程和分辨率的平衡:较大的量程适合高速动态的应用,但会降低测量的分辨率。如果你需要检测较小的变化或在低动态场景下使用,建议选择较小的量程,以获得更高的精度。

与MLC配合使用:如果你使用这些数据进行机器学习核心(MLC)的处理,确保量程设置适当,以便捕捉到足够的动态数据,同时保持数据的分辨率。

lsm6dsv16x_xl_full_scale_set(&dev_ctx, LSM6DSV16X_2g);
  lsm6dsv16x_gy_full_scale_set(&dev_ctx, LSM6DSV16X_125dps);

检测状态

铅笔运动检测应用的构建,检测的四种不同场景(类别)。

  1. 静止(Steady):笔在桌子上,不在手中。
  2. 闲置(Idle):笔在手中但未书写。
  3. 书写(Writing):笔在手中并在书写。
  4. 其他(other):未被其他类别覆盖的情况。

数据单位

加速度计 的数据单位为 mg。

陀螺仪 的数据单位为 dps。

陀螺仪数据也可以导入mdps。

采集数据

轮询获取数据,使用串口打印传感器的数据,依次是ACC_X、ACC_Y 、ACC_Z、GYR_X、GYR_Y、GYR_Z。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    lsm6dsv16x_data_ready_t drdy;
    /* Read output only if new xl value is available */
    lsm6dsv16x_flag_data_ready_get(&dev_ctx, &drdy);
    if (drdy.drdy_xl & drdy.drdy_gy) 
        {
            memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
            memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));

            lsm6dsv16x_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
            lsm6dsv16x_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);

            acceleration_mg[0] = lsm6dsv16x_from_fs2_to_mg(data_raw_acceleration[0]);
            acceleration_mg[1] = lsm6dsv16x_from_fs2_to_mg(data_raw_acceleration[1]);
            acceleration_mg[2] = lsm6dsv16x_from_fs2_to_mg(data_raw_acceleration[2]);

            angular_rate_mdps[0] = lsm6dsv16x_from_fs125_to_mdps(data_raw_angular_rate[0]);
            angular_rate_mdps[1] = lsm6dsv16x_from_fs125_to_mdps(data_raw_angular_rate[1]);
            angular_rate_mdps[2] = lsm6dsv16x_from_fs125_to_mdps(data_raw_angular_rate[2]);

            printf("%4.2ft%4.2ft%4.2ft%4.2ft%4.2ft%4.2ftrn",
                    acceleration_mg[0], acceleration_mg[1], acceleration_mg[2],
                    angular_rate_mdps[0], angular_rate_mdps[1], angular_rate_mdps[2]);
        }
    /* USER CODE END WHILE */

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

将采集到的数据保存。

静止(Steady)

器件放置在桌子上。

最好多几个方向。

这里采集4组数据。

闲置(Idle)

器件在手中不动。

采集多几个方位数据。

这里采集4组数据。

书写(Writing)

笔在手中并在书写。

这里采集4组数据。

其他(other)

未被其他类别覆盖的情况。

可以采集例如逆时针数据。

这里采集4组数据。

审核编辑 黄宇

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

    关注

    39

    文章

    6245

    浏览量

    114003
  • 机器学习
    +关注

    关注

    66

    文章

    8438

    浏览量

    133034
  • MLC
    MLC
    +关注

    关注

    0

    文章

    41

    浏览量

    17331
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

    MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入式AI功能、评估嵌入式库、分析数据,以及为整个MEMS传感器产品组合设计无代码算法而设计。这款独特的软件解决方案提供了多功能的开发环境
    的头像 发表于 11-25 11:28 677次阅读
    <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>(3)----MEMS Studio训练<b class='flag-5'>数据</b>

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

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

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

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

    LSM6DSO32X每次收到中断后读取MLC结果寄存器数值为00,怎么解决?

    惯性模块是LSM6DSO32X,使用官方开发板在Unioc-GUI上可以看到MLC结果寄存器是有数值的(无论是官方例程还是自己的程序),在自己设计的板子上使用了LSM6DSO32XMLC
    发表于 03-20 07:55

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

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

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

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

    如何识别slc和mlc芯片及slc mlc区别

    如何识别slc和mlc芯片及slc mlc区别 slc mlc区别:     MLC(Mu
    发表于 07-17 10:01 6853次阅读

    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 LSM6DSV16X iNEMO惯性模块相关的使用信息和应用提示

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

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

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据
    的头像 发表于 10-16 10:38 481次阅读
    <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 268次阅读
    <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>状态