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

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

3天内不再提示

CW32L012对MPU6050的数据进行卡尔曼滤波

CW32生态社区 来源:CW32生态社区 2026-01-05 16:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

卡尔曼滤波(最优估计)

一、什么是卡尔曼滤波

通俗理解卡尔曼滤波:一个「会自动调权重的裁判」

卡尔曼滤波解决的核心问题是:你有两个途径(测量和预估得到)知道同一个东西的状态,但这两个途径都不准,卡尔曼帮你算出最准的结果

最优估计公式:

wKgZO2lVGVaAZunKAAAFXuE3yBo715.jpg

wKgZPGlVGVeAHmvVAAAH-Pt_cAw085.jpg

wKgZO2lbeZeALD6iAABAm1T1aNY834.jpg

二、为什么这里要用卡尔曼

下面是MPU6050加速度计和陀螺仪的优缺点:

wKgZPGlbeZeAShkAAAB-areXonM418.jpg

图片

总的来说:

陀螺仪动态的时候输出的值精准,但是静止的时候会有漂移

而加速度计就反过来了,加速度计静态的时候输出的值准,但是动态特性差

MPU6050 的陀螺仪和加速度计是 “天生的互补搭档”,但单靠其中一个或简单滤波,要么漂移、要么动态失真;而卡尔曼滤波的核心是 “动态加权的最优估计” —— 它能根据 MPU6050 的工作状态(静态 / 动态),自动判断两个传感器的可靠性,把陀螺仪的 “动态精准” 和加速度计的 “静态稳定” 结合起来,最终输出既无漂移、又能快速响应的 roll/pitch 角度,这是其他滤波方式无法实现的。

三、卡尔曼滤波实现

一、思路

根据之前的内容,我们已经得到了加速度计解算的roll和pitch,以及角速度计解算的roll、pitch、yaw,因为加速度计无法解算yaw,所以这里只对roll和pitch做数据融合

卡尔曼最优估计的核心目标是融合 “加速度计解算的角度” 和 “陀螺仪角速度积分的角度”,最终输出最优的角度估计。整体逻辑分为两大阶段:

预测阶段:基于陀螺仪角速度(扣除偏置后)积分,预测当前角度;同时更新状态误差协方差矩阵 P(反映估计的不确定性)。

更新阶段:用加速度计的角度作为观测值修正预测值,得到最优角度;同时修正陀螺仪偏置(补偿零漂),并更新协方差矩阵 P。

二、具体实现

2.1预测阶段(先验估计)

状态预测:用陀螺仪积分预测角度

wKgZPGlVGViASHTNAAAguBgIavs169.jpg

对应代码:

// 预测阶段:更新角度预测
    float rate = newRate - *kalmanBias;  // 真实角速度 = 测量角速度 - 偏置
    *kalmanAngle += dt * rate;           //角度预测:θ_k = θ_{k-1}+ dt*(ω - b)

协方差预测:更新估计的不确定性

wKgZO2lVGVmAO5TjAAAFqNBiQRw080.jpg

先计算:

wKgZPGlVGVmAJqgvAAAQ9julZF4275.jpg

再加上Q得到:

图片

对应代码:

 kalmanP[0][0] += dt * (dt * kalmanP[1][1] - kalmanP[0][1] - kalmanP[1][0] + Q_ANGLE);
    kalmanP[0][1] -= dt * kalmanP[1][1];
    kalmanP[1][0] -= dt * kalmanP[1][1];
    kalmanP[1][1] += Q_BIAS * dt;

2.2更新阶段(后验修正)

残差(创新项):观测值与预测值的偏差

wKgZO2lVGVqAS7btAAAMMLGvzbM509.jpg

卡尔曼增益:权衡 “预测” 和 “观测” 的可信度

图片

对应代码:

  // 计算卡尔曼增益K
    float S = kalmanP[0][0] + R_MEASURE;  // 角度方差+测量噪声方差(R)
    float K[2];
    K[0] = kalmanP[0][0] / S;
    K[1] = kalmanP[1][0] / S;

状态更新:修正预测值,得到最优估计

wKgZPGlVGVuAcVJMAAAFDODsOJE204.jpg

对应代码:

  // 更新阶段:利用加速度计测量值修正预测角度
    float y = newAngle - *kalmanAngle;  // 改用传入的角度
    *kalmanAngle += K[0] * y;           // 修正角度
    *kalmanBias += K[1] * y;            // 修正偏置

协方差更新:修正估计的不确定性

wKgZO2lVGVuAew_dAAAJ6k7uIWY440.jpg

对应代码:

  // 更新协方差矩阵P
    float P00_temp = kalmanP[0][0];
    float P01_temp = kalmanP[0][1];
    kalmanP[0][0] -= K[0] * P00_temp;
    kalmanP[0][1] -= K[0] * P01_temp;
    kalmanP[1][0] -= K[1] * P00_temp;
    kalmanP[1][1] -= K[1] * P01_temp;

匿名上位机通信

一、为何用匿名上位机调试

匿名上位机是一款由国内开发者打造、面向嵌入式开发场景的开源 / 低成本 PC 端调试工具,相比普通串口助手只能显示一串冰冷的欧拉角数字,匿名上位机可将 Roll/Pitch/Yaw 以实时曲线、数值仪表盘、3D 模型姿态仿真等形式呈现 —— 当我们晃动搭载 MPU6050 的 CW32L012 开发板时,上位机的 3D 模型会同步倾斜、转向,曲线会实时跟踪欧拉角数值变化,你能快速判断卡尔曼融合后的姿态解算是否准确(如零漂是否被抑制、动态晃动时欧拉角是否无明显跳变),无需逐行核对数字。

二、通信帧格式

wKgZPGlVGVyAWnwMAABk7NhSIRc628.jpg

初始化L012串口,并根据通信格式编写匿名上位机的通信驱动:

程序实际现象

【CW32L012解算MPU6050的姿态数据并进行卡尔曼滤波的方法-哔哩哔哩】

https://b23.tv/2GZqcIg

一、开发板现象:

图片

OLED屏幕实时显示解算的三轴角度

二、匿名上位机现象

【CW32L012使用MPU6050介绍-哔哩哔哩】 https://b23.tv/fi7hCnw

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

    关注

    6

    文章

    823

    浏览量

    48321
  • 卡尔曼滤波
    +关注

    关注

    3

    文章

    167

    浏览量

    25482
  • MPU6050
    +关注

    关注

    39

    文章

    313

    浏览量

    77066
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MPU6050模块自己写 卡尔滤波和姿态解算 难吗?

    MPU6050模块自己写 卡尔滤波和姿态解算 难吗? 大概多久能搞出来?
    发表于 12-22 17:35

    如何去实现一种基于MPU6050卡尔滤波的平衡小车呢

    如何去实现一种基于MPU6050卡尔滤波的平衡小车呢?有哪些资料呢?
    发表于 11-19 06:48

    MPU6050卡尔滤波互补滤波的比较分析

    这是总体的滤波效果这是放大的版的可以看出,卡尔和二阶基本在重合在一起,一阶也还好,也没有差得太远。这里是从一放在桌子上一段时间后再进行测试的,可以看出一阶的跟随性上面要比其他二个都要
    发表于 02-10 07:06

    卡尔滤波简介

    在这里我就不介绍卡尔的数学推算了,网上的数学推导一抓一大把,如果想了解推导过程的小伙伴可以去大佬的博客。如果你是想直接简单运用卡尔滤波
    发表于 02-28 14:24

    基于MPU6050卡尔滤波的角度测量

    MPU6050使用卡尔滤波的方法介绍,使用卡尔滤波
    发表于 06-01 11:29 0次下载

    MPU6050_卡尔滤波

    MPU6050 卡尔滤波器设计
    发表于 06-23 10:51 41次下载

    卡尔滤波(以stm32f103rct6的MPU6050为例测试串口通信数据

    STM32F1的MPU6050相关卡尔滤波
    发表于 11-13 14:51 105次下载

    STM32F1的MPU6050模块软件卡尔滤波资料

    STM32F1的MPU6050模块软件卡尔滤波资料
    发表于 11-13 14:54 25次下载

    一文看懂mpu6050卡尔滤波程序

    本文开始阐述了卡尔滤波的概念,其次阐述了卡尔滤波的性质与
    发表于 03-09 08:57 7.6w次阅读
    一文看懂<b class='flag-5'>mpu6050</b><b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>程序

    使用51单片机实现MPU6050卡尔滤波算法代码免费下载

    本文档的主要内容详细介绍的是使用51单片机实现MPU6050卡尔滤波算法代码免费下载 。
    发表于 08-20 17:31 62次下载
    使用51单片机实现<b class='flag-5'>MPU6050</b>的<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>算法代码免费下载

    串口MPU6050卡尔滤波6轴9轴资料合集免费下载

    本文档的主要内容详细介绍的是串口MPU6050卡尔滤波6轴9轴资料合集免费下载包括了:MPU-6050寄存器映射,
    发表于 05-20 08:00 53次下载
    串口<b class='flag-5'>MPU6050</b><b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>6轴9轴资料合集免费下载

    毕业论文 | 基于MPU6050卡尔滤波的平衡小车设计(源代码与设计文档)

    毕业论文 | 基于MPU6050卡尔滤波的平衡小车设计(源代码与设计文档)
    发表于 11-21 20:06 23次下载
    毕业论文 | 基于<b class='flag-5'>MPU6050</b>及<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>的平衡小车设计(源代码与设计文档)

    毕业论文 | 基于STM32的MPU6050程序设计(源码)——卡尔滤波

    毕业论文 | 基于STM32的MPU6050程序设计(源码)——卡尔滤波
    发表于 12-06 12:06 44次下载
    毕业论文 | 基于STM32的<b class='flag-5'>MPU6050</b>程序设计(源码)——<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>

    C语言 | 基于卡尔滤波器的角度测量仪(MPU6050

    C语言 | 基于卡尔滤波器的角度测量仪(MPU6050
    发表于 12-06 14:06 66次下载
    C语言 | 基于<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>器的角度测量仪(<b class='flag-5'>MPU6050</b>)

    MPU6050使用互补滤波卡尔滤波算法进行姿态解算

    MPU6050使用互补滤波卡尔滤波算法进行姿态解算
    发表于 08-07 15:46 18次下载