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

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

3天内不再提示

驱动LSM6DS3TR-C实现高效运动检测与数据采集(10)----融合磁力计进行姿态解算

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

概述

MotionFX库包含用于校准陀螺仪、加速度计和磁力计传感器的例程。 将磁力计的数据与加速度计和陀螺仪的数据融合,可以大幅提高姿态估计的精度。三轴加速度计提供设备的倾斜信息,陀螺仪提供角速度信息,而磁力计提供方位信息,三者结合可以提供更加准确和稳定的三维方向和姿态信息。

需要样片的可以加群申请:615061293 。

视频教学

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

样品申请

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

源码下载

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

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CB,陀螺仪为LSM6DS3TR-C,磁力计为LIS2MDL。

DataLogFusion

这里参考ST提供的DataLogFusion程序,DataLogFusion示例应用展示了如何使用STMicroelectronics开发的MotionFX中间件库进行实时运动传感器数据融合。

DataLogFusion的主要执行流程包括初始化硬件和传感器、中间件库(MotionFX)的配置与初始化、传感器数据的采集、实时数据融合以及结果的输出。

磁力计校准过程

MotionFX库的磁力计校准库用于补偿硬铁失真。磁力计校准可以以比传感器融合输出数据速率更慢的频率进行(例如25 Hz)。
● 初始化磁力计校准库:
● 调用 MotionFX_MagCal_init 或 MotionFX_CM0P_MagCal_init 函数。
● 定期调用校准函数:
● 调用 MotionFX_MagCal_run 或 MotionFX_CM0P_MagCal_run 函数,直到校准成功完成。
● 检查校准是否成功:
● 调用 MotionFX_MagCal_getParams 或 MotionFX_CM0P_MagCal_getParams 函数。如果函数返回 mag_data_out.cal_quality = MFX_MAGCALGOOD 或 MFX_CM0P_CALQSTATUSBEST,则校准成功。

初始化磁力计

调用 MotionFX_MagCal_init 或 MotionFX_CM0P_MagCal_init 函数。这里通过调用 MotionFX_MagCal_init,确保磁力计校准模块处于准备就绪状态,能够正确处理和校准磁力计数据。
通过初始化磁力计校准库,并定期调用校准函数,可以确保磁力计数据的准确性,从而提高姿态估计的精度。

频率定义。

#define ALGO_FREQ  100U /* Algorithm frequency 100Hz */
#define ALGO_PERIOD  (1000U / ALGO_FREQ) /* Algorithm period [ms] */

添加到初始化中进行调用。

文档中提到的磁力计数据要除以50,这是因为MotionFX库使用的单位是微特斯拉(µT)/50。

在lsm6ds3tr-c_app.h中添加定义。

#define FROM_MGAUSS_TO_UT50     (0.1f/50.0f)

MFX_Arithmetic_Init

MFX_Arithmetic_Init 的作用是初始化 MotionFX 算法库,并进行相关参数设置和配置。 由于现在是9轴解析,需要新定义用于保存 MotionFX 算法状态的数组。

static uint8_t mfxstate_9x[FX_STATE_SIZE];

函数功能:
● 初始化 MotionFX 算法库。
● 配置传感器的偏置值和方向。
● 设置输出参考模式。
● 启用或禁用 6 轴和 9 轴 MotionFX 引擎。

void MFX_Arithmetic_Init(void)
{
    MFX_knobs_t iKnobs;
    MFX_knobs_t *ipKnobs = &iKnobs;


    /* 初始化 MotionFX 算法库,参考自 AlgoBuilded 生成代码 */
    /* 初始化 MotionFX 引擎 */
    MotionFX_initialize((MFXState_t *)mfxstate_9x);

    /* 获取当前的内部结构参数 */
    MotionFX_getKnobs(mfxstate_9x, ipKnobs);

    /* 设置传感器 */
    ipKnobs- >gbias_acc_th_sc = GBIAS_ACC_TH_SC_9X;
    ipKnobs- >gbias_gyro_th_sc = GBIAS_GYRO_TH_SC_9X;
    ipKnobs- >gbias_mag_th_sc = GBIAS_MAG_TH_SC_9X;

    /* 未知作用操作,数据定向? */
    ipKnobs- >acc_orientation[0] = ACC_ORIENTATION_X;
    ipKnobs- >acc_orientation[1] = ACC_ORIENTATION_Y;
    ipKnobs- >acc_orientation[2] = ACC_ORIENTATION_Z;

    ipKnobs- >gyro_orientation[0] = GYR_ORIENTATION_X;
    ipKnobs- >gyro_orientation[1] = GYR_ORIENTATION_Y;
    ipKnobs- >gyro_orientation[2] = GYR_ORIENTATION_Z;

    ipKnobs- >mag_orientation[0] = MAG_ORIENTATION_X;
    ipKnobs- >mag_orientation[1] = MAG_ORIENTATION_Y;
    ipKnobs- >mag_orientation[2] = MAG_ORIENTATION_Z;  

    /* 设置输出参考模式,数据参考系 */
    ipKnobs- >output_type = MFX_ENGINE_OUTPUT_ENU;
    ipKnobs- >LMode = 1;
    /* modx 代表 MotionFX_update 函数调用频率,
     *    modx = 1,每调用 MotionFX_propagate 函数一次,可调用 MotionFX_update 函数一次,适用于STM32F4系列处理器,
     *    modx = 2,每调用 MotionFX_propagate 函数两次,可调用 MotionFX_update 函数一次,适用于STM32F1系列处理器。
     */
    ipKnobs- >modx = 1;

    /* 设置内部结构参数 */
    MotionFX_setKnobs(mfxstate_9x, ipKnobs);

    /* 使能6轴 MotionFX 引擎*/
    MotionFX_enable_6X(mfxstate_9x, MFX_ENGINE_DISABLE);
    /* 关闭9轴 MotionFX 引擎*/
    MotionFX_enable_9X(mfxstate_9x, MFX_ENGINE_ENABLE);
}

卡尔曼滤波算法

运行卡尔曼滤波传播算法MotionFX_propagate。
根据需要更新卡尔曼滤波器MotionFX_update。
需要注意的是这2各算法非常吃资源,需要注意MCU算力分配。

函数结构如下所示。

演示

和指南针一个方向。

偏移90度。

偏移180度。

偏移270度。

审核编辑 黄宇

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

    关注

    38

    文章

    5445

    浏览量

    113036
  • 运动检测
    +关注

    关注

    0

    文章

    33

    浏览量

    12592
  • 磁力计
    +关注

    关注

    1

    文章

    70

    浏览量

    20733
收藏 人收藏

    评论

    相关推荐

    驱动LSM6DS3TR-C实现高效运动检测数据采集(1)----获取ID

    本文将介绍如何驱动和利用LSM6DS3TR-C传感器,实现精确的运动感应功能。LSM6DS3TR-C是一款先进的
    的头像 发表于 11-13 15:45 1720次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(1)----获取ID

    驱动LSM6DS3TR-C实现高效运动检测数据采集(6)----FIFO数据读取与配置

    LSM6DS3TR-C是STMicroelectronics公司推出的iNEMO惯性模块,集成了三轴加速度和三轴陀螺仪,具备低功耗、强大的运动检测功能。该传感器支持多种操作模式,并内置FIFO
    的头像 发表于 07-18 10:58 727次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(<b class='flag-5'>6</b>)----FIFO<b class='flag-5'>数据</b>读取与配置

    驱动LSM6驱动LSM6DS3TR-C实现高效运动检测数据采集(7)----MotionFX库解析空间坐标DS3TR-C实现高效运动检测数据

    本文将探讨如何使用MotionFX库解析空间坐标。MotionFX库是一种用于传感器融合的强大工具,可以将加速度、陀螺仪和磁力计数据融合
    的头像 发表于 07-18 11:02 771次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6</b><b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(7)----MotionFX库解析空间坐标<b class='flag-5'>DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据</b>采

    陀螺仪LSM6DSV16X与AI集成(11)----融合磁力计进行姿态

    MotionFX库包含用于校准陀螺仪、加速度磁力计传感器的例程。 将磁力计数据与加速度和陀螺仪的
    的头像 发表于 09-06 16:57 940次阅读
    陀螺仪<b class='flag-5'>LSM6</b>DSV16X与AI集成(11)----<b class='flag-5'>融合</b><b class='flag-5'>磁力计</b><b class='flag-5'>进行</b><b class='flag-5'>姿态</b><b class='flag-5'>解</b><b class='flag-5'>算</b>

    lsm6ds3tr-c传感器集合模式无法使用的原因?

    );/*读取外挂磁力计代码*///禁用I2C直通,禁用内部上拉,禁用I2Cbsp_spi_write(LSM6DS3TR_MASTER_CONFIG, 0x00, 2);//关闭加速度
    发表于 03-07 06:26

    请问LSM6DS3TRLSM6DS3TR-C两个型号能否完全兼容?

    LSM6DS3TR停产买不到了,准备切换LSM6DS3TR-C型号使用。 请问两者有什么差别?能否直接替换?有成功替换案例吗?
    发表于 03-14 06:40

    LSM6DS3TR-C数据读取异常是安利的问题?怎么处理?

    我在使用lsm6ds3tr-c 6轴传感器时发现,读取的温度以及角速度值异常,配置为官方lsm6ds3tr_c_read_data_polling.c文件中
    发表于 03-19 08:15

    LSM6DS3TR-C的低功耗模式和高性能模式有什么区别

    如果我只在 12.5Hz 下操作加速度LSM6DS3TR-C 的低功耗模式和高性能模式有什么区别?
    发表于 12-09 06:47

    LSM6DS3的应用笔记

    专门设计,可在硬件上实现大幅运动检测、倾斜度检测、硬件步功能、时间戳,并支持对外部磁力计数据采集
    发表于 09-13 08:23

    驱动LSM6DS3TR-C实现高效运动检测数据采集(2)----配置滤波器

    LSM6DS3TR-C中,加速度和陀螺仪可以独立地开启/关闭,并且可以拥有不同的ODR和功耗模式。 LSM6DS3TR-C有三种可用的操作模式: ● 仅加速度活动,陀螺仪处于
    的头像 发表于 11-14 09:45 734次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(2)----配置滤波器

    驱动LSM6DS3TR-C实现高效运动检测数据采集(3)----获取传感器数据

    一旦传感器被正确初始化,可以通过SPI或I2C接口向传感器发送读取命令,并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度和陀螺仪
    的头像 发表于 11-14 09:59 624次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(<b class='flag-5'>3</b>)----获取传感器<b class='flag-5'>数据</b>

    驱动LSM6DS3TR-C实现高效运动检测数据采集(4)----上报匿名上位机实现可视化

    LSM6DS3TR-C是单芯片“3轴陀螺仪 + 3轴加速度”的惯性 测量单元(IMU), 五种种可选满量程的陀螺仪(125/250/500/1000/2000 dps)和加速度
    的头像 发表于 11-14 10:05 682次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</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>可视化

    驱动LSM6DS3TR-C实现高效运动检测数据采集(5)----姿态

    lsm6ds3trc包含三轴陀螺仪与三轴加速度姿态有多种数学表示方式,常见的是四元数,欧拉角,矩阵和轴角。他们各自有其自身的优点,在不同的领域使用不同的表示方式。在四轴飞行器中使用到了四元数
    的头像 发表于 11-14 10:11 615次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(5)----<b class='flag-5'>姿态</b><b class='flag-5'>解</b><b class='flag-5'>算</b>

    驱动LSM6DS3TR-C实现高效运动检测数据采集(8)----中断获取FIFO数据并应用MotionFX库解析空间坐标

    本文将探讨如何使用中断机制获取FIFO数据并应用MotionFX库解析空间坐标。MotionFX库是一种用于传感器融合的强大工具,可以将加速度、陀螺仪和磁力计
    的头像 发表于 07-21 10:02 375次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(8)----中断获取FIFO<b class='flag-5'>数据</b>并应用MotionFX库解析空间坐标

    驱动LSM6DS3TR-C实现高效运动检测数据采集(11)----磁力计校准

    磁力计校准的基本概念,掌握使用MotionFX库进行校准的步骤和方法,并学会如何在实际项目中实现磁力计的校准,以获得高精度的磁场测量数据
    的头像 发表于 08-23 09:57 121次阅读
    <b class='flag-5'>驱动</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>实现</b><b class='flag-5'>高效</b><b class='flag-5'>运动检测</b>与<b class='flag-5'>数据采集</b>(11)----<b class='flag-5'>磁力计</b>校准