【传感器】一种鲁棒的imu比例系数与偏移的校准算法

news2025/1/17 3:39:55

简介

最近在学习传感器相关的知识,在国外的一篇论文学习过程中,觉得这篇论文的校准方法是个不错的参考。

这种校准简单且比较鲁棒的算法,操作简单,且除了偏移与比例系数,还可以估计出传感器 xyz 轴相对于标准正交三轴的偏移(因为传感器的物理 xyz 轴可能不是标准正交的),不过相比六面校准,其算法的计算过程要复杂许多

校准过程也并不复杂:

1)初始静止一段时间

2)旋转 IMU 到另一个角度之后静止

3)等待一段采样时间

4)继续旋转,重复 2)3)步骤,达到预定的采样次数

5)估计参数

思路

理想的 IMU,x,y,z 三轴是独立正交的,理想的三轴坐标系,加速度计的理想坐标系可以记作 AOF,实际中的 IMU 的坐标轴并不是标准正交的,其与标准正交坐标系有一定的偏移,将各轴的偏移记作 β,之后建立误差模型,建立代价函数,进而求解估计参数。

加速度计部分

坐标轴定义

假设现有一个标准正交坐标系,记作 s(B),当前坐标轴记作 s(S) ,当前轴可能是非正交的,从 y 轴到 z 轴的偏移记作 β(yz),其他的以此类推,那么 从 s(S) 转换到正交坐标系 s(B) 的表达式就可以写作如下形式:

T 是其中的旋转矩阵,为:

以此为基础,将加速度计的标准正交轴记作 a(B),加速度计当前坐标轴记作 a(S) ,但上面的旋转矩阵 T 有点复杂,需要对其进行简化,现给出两个坐标轴选取时的条件:

1)定义加速度计的标准正交轴为 AOF,加速度计实际的坐标轴记作 AF(AF不一定正交),将 AOF 的 x 轴与 AF 的 x 轴重合

2)AOF 的 y 轴定义在 AF 的x 与 y 轴组成的平面上

按照上述的两个原则建立坐标轴,那么在上述旋转矩阵的 β(xz),β(xy) 就消除为 0,因为AOF 与 AF 的 x 轴已经重合了,因此 x 轴相对 y,z 轴的偏移就消除掉了。

同事,因为 AOF 的 y 轴在 AF 的 x,y 轴组成的平面上,因此 y 相对于 x 的偏移也消除掉了,即 β(yx) = 0。

那么针对加速度计,上述坐标轴的表达式就可以写作:

加速度计模型

在加速度计的零偏与比例系数的基础上,加上上述的坐标轴偏移,就可以得到加速度计的模型。

加速度计的比例系数矩阵记作 K(a):

加速度计的零偏向量记作 b(a):

加速度计整体的误差模型就可以写作:

v 表示测量噪声,a(O) 表示标准轴的加速度值,a(S) 表示真实轴上的加速度计测量值。

此方程中,含有 9 个未知量,三轴的轴偏移,三轴的比例系数,三轴的零偏。将代估变量记作 θ:

将测量噪声忽略掉,误差模型就可以写作:

代价函数建立

对于此方程,不用六面校准,而是任意角度的加速度计数据的话,采样一定量的数据之后,可以利用这个原理来列出其代价函数:

静止状态下,加速度计三轴的数据的平方和等于重力加速度 g

其代价函数就可以写作:

以上的代价函数是有加法的,运用最小二乘法来估计参数比较困难,因此使用 LM 算法来进行非线性估计,具体 LM 算法的原理与实现,参考主页中的上一篇文章《LM迭代估计法》

陀螺仪部分

陀螺仪的校准需要依赖于加速度计的校准。总体思路为:

1.在进行完上一步的加速度计估计参数的计算之后,利用加速度计已经校准过的参数矩阵对之前采样的数据进行校正

2.在采样时的每一次静止时的加速度计数据进行校正后,可以得到一个较为准确的重力加速度向量值

3.当前静止时的重力加速度向量记作初始重力加速度向量,然后在旋转IMU时,使用陀螺仪的数据对重力向量进行积分,可以得到一个旋转后(到下一次静止采集数据)的重力向量预测值

4.再次使用加速度计的数据得到一个重力加速度向量值

5.利用加速度计得到的重力加速度向量与陀螺仪积分得到的重力加速度向量做差,平方的方式,建立代价函数

6.求解代价函数,得到陀螺仪的估计参数

误差模型建立

陀螺仪与加速度计的坐标轴应该选择相同的参考坐标轴,也就是 AOF ,但对于陀螺仪来说,因为选取的加速度计的标准正交轴,一些坐标轴的偏移量就不能消除了,还是需要加上,即:

其中,T 为旋转矩阵,W(O) 表示陀螺仪的正交标准轴,与 AOF 重合,W(S) 是当前的陀螺仪轴

比例系数与偏移系数矩阵都与加速度计的形式是相同的:

误差模型的形式也是相同的:

在后续的计算中,测量误差 v 可以忽略。

代价函数建立

按照上述的步骤说明,代价函数使用加速度计校准后得到的准确的重力加速度向量与陀螺仪积分得到的重力加速度向量的各项差的平方和来建立:

同样,使用 LM 算法来进行参数的估计

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Python自动化测试九章经》

Python是当前非常流行的一门编程语言,它除了在人工智能、数据处理、Web开发、网络爬虫等领域得到广泛使用之外,他也非常适合软件测试人员使用,但是,对于刚入行的测试小白来说,并不知道学习Python语言可以用来完成哪些测…

chatgpt赋能python:Python用于炒股

Python用于炒股 随着互联网和数据科学的发展,越来越多的投资者开始依靠计算机和数据科学来进行更高效的投资。Python是一种广泛使用的编程语言,可以帮助投资者更好地处理数据和自动化交易。本文将简要介绍Python如何用于炒股,并分享一些有用…

canvas详解02-样式和颜色控制

在绘制图形的章节里,我只用到默认的线条和填充样式。而在这一章里,我们将会探讨 canvas 全部的可选项,来绘制出更加吸引人的内容。 #色彩 Colors 到目前为止,我们只看到过绘制内容的方法。如果我们想要给图形上色,有两…

捕捉信号/信号的处理步骤

一、信号会在合适的时候被处理 先摆出一个结论:信号会在合适的时候被处理。 当然,这里说的信号默认排除了实时信号,那个是已接收到信号就立马处理信号。 上面说的合适的时候其实就是进程从内核态切换到用户态的时候。 二、何为内核态和用户…

Golang -> Golang 变量

Golang 变量 Golang 变量使用的三种方式变量的声明,初始化和赋值程序中 号的使用数据类型的基本介绍int 的无符号的类型:int 的其它类型的说明:整型的使用细节 小数类型/浮点型小数类型分类浮点型使用细节 字符类型字符类型使用细节字符类型本质探讨 布…

java面向对象部分

在学校时学的比较乱,趁暑假再系统的学一遍 访问权限控制 private:私有,只能被本身类访问 什么都不写:默认,只能被类本身和同包中的其他类访问 protected:受保护的,只能被类本身和同包中的其…

计算物理专题:实对称矩阵特征值的求解问题

我们需要求出一个实对称阵的全部特征值与特征向量实对称矩阵特征值的求解是计算量子力学的基础之一(算符是厄米的)同时,实对称矩阵的求解也是使用有限差分法解本征方程的重要方法之一 雅克比方法 我知道这个推导过程非常的复杂,所…

计算物理专题:双向打靶法解决本征值问题

计算物理专题:双向打靶法解决本征值问题 双向打靶法全部代码 EigenMethods.py import numpy as np import matplotlib.pyplot as plt from SchrodingerTools import *#type-ode1: ## y(x)f(x)y(x) g(x) ##tips: ##lambda eigen,x:f(eigen,x)def replace_eigen(ei…

365天深度学习训练营-第T3周:天气识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:TensorFlow入门实战|第3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 我的环境: 语言环境&#xff1a…

Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型(flex box) 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流(标准流) 浮动 定义 浮动的原理 清除浮动 …

Java开发 - 负载均衡你了解多少?

前言 前面很多篇博客都有涉及到负载均衡,而负载均衡也并不是某一个框架的专利,从博主接触Java以来,使用的很多框架都自带了负载均衡的特点。今天,我们就来一探究竟,了解下负载均衡是什么,该怎么在项目中使…

Python 函数:理解并使用 return 语句

你好,我是悦创。 函数在 Python 编程中起着至关重要的作用。他们封装了一段代码,并给它一个名字,这样我们可以在程序的任何地方,通过这个名字来调用这段代码。return 是函数的一个重要组成部分,它可以使函数输出一个值…

差分方程转化为Z变换方程

差分方程是描述离散时间系统动态行为的数学工具,而Z变换则是将离散时间信号从时间域转换到复频域的工具。因此,将差分方程转换为Z变换方程可以方便我们在复频域分析离散时间系统的动态行为。 假设我们有一个差分方程: a n x [ n ] a n − 1 x [ n − 1…

rabbitmq第二课-RabbitMQ核心编程模型以及消息应用场景详解

一、回顾RabbitMQ基础概念 二、RabbitMQ基础编程模型 使用RabbitMQ提供的原生客户端API进行交互。这是使用RabbitMQ的基础。 1.1、maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

C语言:使用指针使字符串逆序

题目&#xff1a; 链接&#xff1a;字符逆序__牛客网 来源&#xff1a;牛客网 将一个字符串str的内容颠倒过来&#xff0c;并输出。 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts a ma I …

VUE 2X 生命周期 ⑩①

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs初见生面周期分析生命周期生命周期总结总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄…

《算法设计与分析》学习笔记

目录 算法基本概念 算法的定义 算法复杂度分析 渐近记号 ①渐近上界记号O ②渐近下界记号Ω ③渐近紧确界记号 Θ ④非渐近紧确上界记号o ⑤非渐近紧确下界记号ω 渐进记号极限定义 分治 分治步骤 递归树 ​编辑代入法 主方法 改变变量 二叉树 堆 建堆 堆排…

【promptulate专栏】使用GPT和XMind快速构建思维导图

本文节选自笔者博客&#xff1a;https://www.blog.zeeland.cn/archives/ao302950h3j &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#…

【Java】缓存常见问题及解决方式

文章目录 一、缓存常见问题二、数据不一致2.1、一致性问题2.2、解决方案 三、缓存穿透3.1、问题3.2、解决方案布隆过滤器使用布隆过滤器解决缓存穿透 四、缓存击穿4.1、问题4.2、解决方案 五、缓存雪崩5.1、问题5.2、解决方案 六、大key及热点key6.1、问题6.2、解决方案大key热…

【Leetcode刷题】字符串匹配

本篇文章为LeetCode 字符串匹配模块的刷题笔记&#xff0c;仅供参考。 目录 Leetcode28.找出字符串中第一个匹配项的下标Leetcode214.最短回文串Leetcode459.重复的子字符串Leetcode686.重复叠加字符串匹配Leetcode1023.驼峰式匹配Leetcode1392.最长快乐前缀Leetcode1668.最大重…