调试 Mahony 滤波算法的思考 10

调试 Mahony 滤波算法的思考

    • 1. 说在前面的
    • 2.Mahony滤波算法的核心思想
    • 3. 易懂的理解 Mahony 滤波算法的过程
    • 4. 其他的一些思考
    • 5. 民间 9轴评估板

1. 说在前面的

之前调试基于QMI8658 6轴姿态解算的时候,我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让我对四元数、欧拉角、旋转余弦矩阵有了一定的接触。然而,直到我将地磁传感器加入到我的硬件,进行9轴姿态解算时,我深深地感受到对四元数与姿态阵之间关系的理解是非常重要的。在此之前,我检索了网络文章,并记录了《MEMS_惯性传感器09 - Mahony姿态解算算法详解》、《MEMS_惯性传感器14 - Mahony滤波算法的代码分析》两篇文章。可能对于大佬、资深工程师来说,这些文章的严谨性不够,可能会误导别人。但我必须承认,我仍然没有扎实的数学计算研究背后更深层次的理论。即使如此,我依然希望通过自己的努力在惯性导航算法上学习得更深入一些。同时,我也想多记录一些学到的知识,多记录一些自己的理解和思考。希望这些记录能帮助到一些初学者。如果我的文章有错误的引导,我非常希望大佬们能够指正,因为这对我来说是最大的收获,我非常乐意倾听和学习。

我愿意自我突围,向着理想前进!

这次学习检索时发现了一个博文内容硬核、有理有据的博主1路痴导航员。 她的博文 《AHRS互补滤波(Mahony)算法及开源代码》对我帮助很大。

2.Mahony滤波算法的核心思想

Mahony滤波算法的核心思想是通过将角速度角度的测量值与历史估计值进行加权平均,从而得到更加准确的姿态估计结果。同时,滤波算法还利用加速度计的测量值来纠正姿态角度的漂移。
该算法也存在一些缺点,例如对于快速旋转和加速度变化较大的情况,其姿态估计结果可能会出现较大的误差。

3. 易懂的理解 Mahony 滤波算法的过程

为了更好的理解,表达是先不用矩阵的思想,在算法的实现的过程中,需要将表达是转换成矩阵形式。

① 根据陀螺仪的测量数据计算出角速度的增量,即:
         Δθ = 0.5 * (gyro + bias) * Δt

其中,gyro表示陀螺仪的测量值,bias表示陀螺仪的零偏误差,Δt表示时间间隔。

② 根据加速度计的测量数据计算出重力方向的估计值,即:
         g_est = q * (0, 0, -1) * q^-1

其中,q表示四元数的姿态估计值。

③ 根据加速度计的测量数据和重力方向的估计值,计算出加速度计的误差,即:
         acc_err = acc_meas - g_est

其中,acc_meas表示加速度计的测量值。

④ 根据角速度的增量和加速度计的误差,更新四元数的姿态估计值,即:
         q = q * exp(Δθ - K * acc_err)

其中,K为控制增益。

4. 其他的一些思考

  • 传感器EVB板的测量数据以载体坐标系(b-框架)表示。 欧拉角的直观表示描述了地理坐标系中的角度,其中包括重力的影响。 地理坐标系中的重力矢量为[0,0,1]g,磁传感器将地球磁场中的强度表示为[cos(θ),0,sin(θ)]guess。因此,在算法中,加速度和磁数据被归一化,确保它们的模是一定大小的。

  • 四元数从地理坐标系(东北天)转换到载体坐标系,就得到了旋转矩阵Cnb。
    在这里插入图片描述
    Cnb的最后一列取负,即将其转换为载体坐标系中的值。在理想情况下,如果没有误差,这个矢量应该与测量值相等。然而,由于这两者总会存在差异,因此我们需要利用它们之间的差值来修正陀螺仪更新的不准确性。

  • 在修正的过程中,我们认为加速度计测量的可信度较高,还需要使用地磁传感来修正加速度传感的Z轴。磁力计的模的长度是确定的,但是两个分量的具体大小无法像重力加速度一样确定。因此,我们使用上一次的四元数得到的Cbn(从载体到地理坐标系的旋转矩阵)来计算测量的磁场强度。理论上,此刻的Cbn应该在东向上的分量是零[cos(θ),0,sin(θ)],而北向和地向会有分量。然而,由于此刻的Cbn尚未得到,我们使用的是上一次的Cbn,并加上一些测量误差,导致东向上仍会有分量存在。为了处理这种情况,我们将xy平面的分量合成到一个方向上,使得y轴上的分量为0。这样,处理后的地磁信息的地位就与重力加速度(0,0,-1)相似了。

  • 根据余弦矩阵和欧拉角的定义,我们可以将地理坐标系的重力向量转换到载体坐标系中。具体而言,将四元数转换成方向余弦矩阵后,我们可以得到方向余弦矩阵的第三列的三个元素,即vx、vy和vz。这三个元素实际上表示了当前欧拉角(即四元数)在载体坐标系上换算得到的重力单位向量。

vx = 2*(q1q3 - q0q2);
vy = 2*(q0q1 + q2q3);
vz = q0q0 - q1q1 - q2q2 + q3q3;
  • ax\ay\az是载体坐标参照系上,加速度计测出来的重力向量。vx\vy\vz是陀螺积分后的姿态推算出的重力向量。它们之间的误差向量ex\ey\ez是陀螺积分后的姿态和加计测出来的姿态之间的误差。误差向量可以用向量叉积来表示。叉积向量ex\ey\ez位于载体坐标系上,且其大小与陀螺积分误差成正比,可用于纠正陀螺。由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对载体坐标系的纠正。
exInt = exInt + ex * Ki * halfT;
eyInt = eyInt + ey * Ki * halfT;    
ezInt = ezInt + ez * Ki * halfT;
// 用叉积误差来做PI修正陀螺零偏
gx = gx + Kpex + exInt;gy = gy + Kpey + eyInt;
gz = gz + Kp*ez + ezInt;

矢量之间的叉乘公式为err = A × B = |A| × |B| × sin(β)。当两个矢量重合时,误差为零,表示没有差异。当两个矢量之间夹角为90°时,误差达到最大值,表示差异最大。然而,在夹角为90°附近的区间内,误差的变化是非线性的,这可能导致一些准确性问题。

5. 民间 9轴评估板

QMI8658+QMC5883L 链接

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


  1. 路痴导航员: ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185546.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平凯星辰 TiDB 携手广发银行荣膺第十四届金融科技创新奖

近日,由《金融电子化》杂志社、苏州市金融科技协会共同主办的“第十四届金融科技创新奖颁奖典礼”在苏州隆重举行。 会上,由平凯星辰(北京)科技有限公司(简称: 平凯星辰)和广发银行共同申报的 “…

[unity]深色模式/浅色模式

这里用的是Windows版的unity,具体版本号如下: 选项的路径如下:Edit—Preferences—General—Editor Theme 然后就可以选是dark还是light了:

国产小体积超低成本电动车仪表智能刷卡解锁13.56M非接触式读写芯片CI522兼容替代RC522

Ci522电动车仪表一键启动芯片 Ci522是一个高度集成的,工作在13.56MHz的非接触式读写器芯片,阅读器支持ISO/IEC 14443 A/MIFARE。 无需外围其他电路,Ci522的内部发送器可驱动读写器天线与ISO/IEC 14443 A/MIFARE卡和应答机通信。接收器模块提…

JWT简介 JWT结构 JWT示例 前端添加JWT令牌功能 后端程序

目录 1. JWT简述 1.1 什么是JWT 1.2 为什么使用JWT 1.3 JWT结构 1.4 验证过程 2. JWT示例 2.1 后台程序 2.2 前台加入jwt令牌功能 1. JWT简述 1.1 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7…

通过创建自定义标签来扩展HTML

使用HTML时&#xff0c;例如&#xff0c;使用<b>标记显示粗体文本。 如果需要列表&#xff0c;则对每个列表项使用<ul>标记及其子标记<li> 。 标签由浏览器解释&#xff0c;并与CSS一起确定网页内容的显示方式以及部分内容的行为。 有时&#xff0c;仅使用一…

Power Apps-“编辑“窗体组件

插入一个“编辑”窗体 连接数据源 在该组件的Item函数中编辑筛选符合条件的唯一记录 LookUp(表名,列名值) LookUp参考文档&#xff1a;Filter、Search 和 LookUp 函数&#xff08;包含视频&#xff09; - Power Platform | Microsoft Learn 数据表里的数据就一一对应出现在了组…

【Redis】set常用命令集合间操作内部编码使用场景

文章目录 前置知识常见命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码测试内部编码 使用场景 前置知识 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;在…

每日一题 2258. 逃离火灾(手撕困难!!!)

火会扩散&#xff0c;但是我们可以看作火不会扩散到已经着火的格子&#xff0c;这样我们就可以记录每一个为草地的格子的着火时间在代码中&#xff0c;因为数字 2 已经表示墙了&#xff0c;所以我们把当时间为 0 时着火的格子在 gird 中的值设为 3&#xff0c;时间为 1 时着火的…

公众号标签

公众号标签 本章节&#xff0c;讲解公众号标签的相关内容&#xff0c;支持对标签进行创建、查询、修改、删除等操作&#xff0c;也可以对用户进行打标签、取消标签等操作&#xff0c;对应 《微信公众号官方文档 —— 用户标签管理》 (opens new window)文档。 #1. 表结构 公众…

URI 和 URL 的区别

URI包括URL和URN两个类别&#xff0c;URL是URI的子集&#xff0c;所以URL一定是URI&#xff0c;而URI不一定是URL URI Universal Resource Identifier 统一资源标志符&#xff0c;用来标识抽象或物理资源的一个紧凑字符串。 通过使用位置&#xff0c;名称或两者来标识Interne…

5G毫米波通信中的关键技术

随着5G技术的快速发展&#xff0c;毫米波通信作为其中的一项重要技术&#xff0c;在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术&#xff0c;包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…

pytest + yaml 框架 -58.运行报告总结summary.json

前言 用例运行结束后&#xff0c;在本地生成summary.json 文件&#xff0c;总结运行结果。 v1.5.1版本更新内容&#xff1a; 1.解决参数化&#xff0c;中文在控制台输出问题 2.保存用例结果summary.json 保存用例结果summary.json 命令行执行用例 pytest运行结束&#xff0…

使用OkHttp库爬取百度云视频详细步骤

目录 摘要 一、OkHttp库简介 二、爬虫基本概念 三、使用OkHttp库爬取百度云视频 1、发送HTTP请求 2、处理响应 3、下载文件 四、可能遇到的问题及解决方案 五、注意事项 总结与建议 摘要 本文将详细介绍如何使用OkHttp库爬取百度云视频。文章首先简要介绍OkHttp库和…

一分钟带你了解易货:来龙去脉,古往今来

原始社会&#xff0c;没有货币&#xff0c;人类没有货币&#xff0c;用捕猎来的兽皮换取需要的野果&#xff0c;用一头羊换几只鸡&#xff0c;等等之类&#xff0c;都属于最早的交换。那个时候&#xff0c;人类没有价值的定义&#xff0c;属于最原始的交换。 直到私有制的形成&…

算法秘籍-王一博 | 数据结构与算法

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 数据结构和算法是计算机科学的基石&#xff0c;是计算机的灵魂&…

web3案例中解决交易所中 ETH与token都是0问题 并帮助确认展示是否成功

可能写了这么久 很多人会发现一个问 我们前面的案例 个人在交易所中的 自定义token 和 ETH 一直是放了个0 大家也不太敢确认是否真的有效 那么 很简单 我们操作 存入一些进交易所 不就ok了 我们 来看之前交易所写的代码 我们写了 depositEther 存入 ETH 和 depositToken 存入…

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…

Spring笔记(三)(Spring整合web环境)

01、Spring整合web环境 1.1 Javaweb三大组件及环境特点 在Java语言范畴内&#xff0c;web层框架都是基于Javaweb基础组件完成的&#xff0c;所以有必要复习一下Javaweb组件的特点 组件作用特点Servlet服务端小程序&#xff0c;负责接收客户端请求并作出响应的单例对象&#…

中国第二批,11个大模型备案获批

加上首批的 10 余个大模型&#xff0c;目前已有超过 20 个大模型获得审批。 据钛媒体独家报道&#xff0c;国内第二批通过备案的AI大模型包括11家公司&#xff0c;部分已面向全社会开放服务。加上首批的10余个大模型&#xff0c;目前已有超过20个大模型获得备案。 新一批备案…

JAVASSMmysql面向高校校园体育用品租借管理系统94593-计算机毕业设计项目选题推荐(附源码)

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;微信小程序的面向高校校园体育用品租借管理系统被用户普遍…