使用IMU进行状态估计及进阶

open_vins(三):imu静止初始化 一.静止初始化 初始化是指在系统启动阶段,需要估计重力方向(gravity direction)、加速度计以及陀螺仪biases (accelerometer and gyroscope biases)、初始速度(initial velocity)、初始位置(initial position)等。 OpenVINS系统中,只估计了重力方向、加速度计/陀螺仪biases。 初始化函数位于:ov_msckf/src/core/VioManager.cpp 中 Manager::try_to_initializ. 阅读详情
AI摘要

本文深入探讨了姿态估计的原理,从基础的6轴IMU入门方法到四元数解算,详细阐述了加速度计和陀螺仪在姿态估计中的作用。接着,介绍了姿态估算与滤波的紧密关系,解释了状态方程和观测方程在滤波中的角色,以及滤波如何降低数据误差。重点讲解了贝叶斯滤波的核心思想,通过先验概率和似然概率计算后验概率,降低了不确定性。此外,还讨论了卡尔曼滤波的假设和优势,以及在实际应用中的局限性。

文章目录


前言

本文章将汇总我这么长时间来,使用IMU进行姿态估计的总结,所以会很多内容,并且不能够一次性完成。我会分成很多次,一步步介绍下去。
目前的计划是,从零开始介绍姿态估算,然后进一步介绍姿态估算与滤波的关系,然后介绍各个我知道的进阶算法。

本文将采用状态估计,而不是姿态估计。因为姿态估计的范围比较狭小,是状态估计中的一部分,后续可能会介绍状态估计中的位置,速度等估计。

基本思想

状态估计=计算公式+数据

  1. 首先,我们需要知道的是,给你一些传感器的数据,我们怎么根据这些数据来计算得到姿态?这个就是计算公式的作用。
  2. 有了公式以后,我们需要更好的数据来进行更精准的估计,所以,我们需要滤波。

一 姿态估计

几乎所有姿态估计的资料都是大篇幅的介绍滤波什么的,不讲姿态估计和滤波有什么鬼关系。
原因是因为,对于各种姿态估计的计算方法来说,一旦原理确定了,姿态估计的计算公式是比较固定的,所以重心就变成了怎么去获取更精切的数据。
在实际运用中的开发也是如此,可能姿态估计计算一行代码就完了,剩下的代码都是进行滤波的。

这部分主要是记录一些姿态估计的计算方法的。

1.1 通过6轴IMU来进行姿态估计的入门级方法

下面的方法只需要简单的三角函数以及反三角函数就可以进行姿态估计:
看本文尾部参考资料[1]。
我在geek-workshop看到Malc发了翻译过的文章,见[2]

1.1.1 通过加速度计计算姿态

该公式的原理是通过计算重力在各个方向上的分量,通过反三角函数就可以计算得到姿态:Racc=[Axr,Ayr,Azr]

Axr = arccos(Rx/R)
Ayr = arccos(Ry/R)
Azr = arccos(Rz/R)

1.1.2 引入陀螺仪来得到更好的姿态估计

加速度计已经告诉我们Axr,Ayr,Azr的倾角,为什么还要费事去得到陀螺仪的数据?答案很简单:加速度计的数据不是100%准确的。有几个原因,还记加速度计测量的是惯性力,这个力可以由重力引起(理想情况只受重力影响),当也可能由设备的加速度(运动)引起。因此,就算加速度计处于一个相对比较平稳的状态,它对一般的震动和机械噪声很敏感。这就是为什么大部分的IMU系统都需要陀螺仪来使加速度计的输出更平滑。但是怎么办到这点呢?陀螺仪不受噪声影响吗?
陀螺仪也会有噪声,但由于它检测的是旋转,因此对线性机械运动没那么敏感,不过陀螺仪有另外一种问题,比如漂移(当选择停止的时候电压不会回到零速率电压)。然而,通过计算加速度计和陀螺仪的平均值我们能得到一个相对更准确的当前设备的倾角值,这比单独使用加速度计更好。

You might be asking yourself by this point, if accelerometer model already gave us inclination angles of Axr,Ayr,Azr why would we want to bother with the gyroscope data ? The answer is simple: accelerometer data can’t always be trusted 100%. There are several reason, remember that accelerometer measures inertial force, such a force can be caused by gravitation (and ideally only by gravitation), but it might also be caused by acceleration (movement) of the device. As a result even if accelerometer is in a relatively stable state, it is still very sensitive to vibration and mechanical noise in general. This is the main reason why most IMU systems use a gyroscope to smooth out any accelerometer errors. But how is this done ? And is the gyroscope free from noise ?

The gyroscope is not free from noise however because it measures rotation it is less sensitive to linear mechanical movements, the type of noise that accelerometer suffers from, however gyroscopes have other types of problems like for example drift (not coming back to zero-rate value when rotation stops). Nevertheless by averaging data that comes from accelerometer and gyroscope we can obtain a relatively better estimate of current device inclination than we would obtain by using the accelerometer data alone.

使用陀螺仪的方法:陀螺仪估计姿态=使用估计姿态+陀螺仪测得的角速度*dt
对于陀螺仪来说,它衡量的是角速度,理论上如果我们将角速度进行积分,可以得到姿态,但因为精度,误差以及计算的问题,实际上这样子做得到的结果是十分差的。
但是,我们认为,陀螺仪长时间累积下来的结果,是跟我们估计的姿态接近的,与其进行积分计算,我们用估计的姿态作为陀螺仪累积的结果更好。
因此,我们在预测的姿态基础上,加上角速度乘以时间的变化,从陀螺仪中得到了一个新的姿态:Rgyro=[RxGyro ,RzGyro,RzGyro]

RxGyro = RxEst(n-1)+Rotx*T
RyGyro = RyEst(n-1)+Roty*T
RzGyro = RyEst(n-1)+Rotz*T

这样,我们引入了陀螺仪的测量数据,如果加速度计的数据有巨大误差,通过陀螺仪的数据,可以将估计的误差降低。

上面的公式只是演示,具体的实现涉及从估计的姿态中反算出RxEst等,看[1],[2]

现在我们有了两个姿态,怎么做呢?加权组合得到新姿态

Rest(n) = (Racc * w1 + Rgyro * w2 ) / (w1 + w2)

1.2 四元数解算姿态角解析

可以参考著名的《An efficient orientation filter for inertial and inertial/magnetic sensor arrays》

我的解读文章


二 姿态估算与滤波的关系

2.1 状态方程和观测方程

在这里插入图片描述

2.2 数据和滤波的关系

我们计算姿态的公式是理想的,只要数据足够准确,计算出来的结果就很好。
但是现实是,只要有测量,就会有误差。
误差包括仪器本身自带的偏差,外部环境的影响,计算的精度损失等等。
怎么获取更精确的数据,是个十分难的问题。

获取更精确的数据,这是滤波的目的,滤波的作用是让数据遵循的分布的误差变小

记 x是我们感兴趣的数据,x遵循某种分布f(N,delta),delta是指分布的方差

通过滤波来获得更精准的数据的步骤:

  1. 使用滤波算法对数据的分布f(N,delta)(记住,是数据的分布,不是数据),使其方差越来越小(方差变小,则误差变小)
  1. 方差变小之后,我们就可以根据分布来计算数据的值,比如说像下面的求均值方法:
    在这里插入图片描述
    如果是高斯分布,则可以从分布中获取。

滤波和状态数据的关系:真实的数据的分布是隐藏的,状态方程和观测方程都只是状态数据的来源,我们根据这两种类型的数据,通过滤波,可以计算得到数据的分布,然后通过迭代,让这个分布的方差(即误差)越来越小,从而越来越精准。

在这里插入图片描述

记住,将状态方程和观测方程都看成只是带了信息的数据来源,两者都不是最佳的数据。


三 贝叶斯滤波-核心内容(by忠厚老实的老王)

3.0 贝叶斯公式:核心思想是通过先验概率和似然概率计算得到的后验概率的方差比前两者更小(方差小意味着误差小)

https://www.bilibili.com/video/BV1Yq4y1E7BU/?spm_id_from=333.788.recommend_more_video.6
在这里插入图片描述
在这里插入图片描述
贝叶斯率滤波的思想:新信息出现后的B的概率=B概率 * 新信息带来的调整
至于为什么 A 事件发生后导致的调整为P(A|B)/P(A),这就需要代数了,推导也不复杂.(没有找到推导过程,暂且默认它是对的)

3.1 条件概率

3.1.1 条件概率的定义

在这里插入图片描述
这里跟我们理解的有点不一样,我们一般认为,条件的意思是加上了限制,概率会变得更小。
但经常条件概率下反而经常增大。

原因是,样本空间发生了变化。没有条件时总样本空间是S,有条件时样本空间是A。很好
帮助理解的例子是后面的例子1。

3.1.2 条件概率的图示讲解

图示一
S是样本空间
在这里插入图片描述
在条件概率下,样本空间发生变化了,不能在原来的S上讨论,要在A的基础上进行讨论

3.1.3 条件概率的例子

例子一
1 背景
一个女孩子去参加相亲,有100个男嘉宾供她选择。你也是其中一个。假设每个人被选中的
概率是相同的。而女孩没有任何条件,则你被选中的概率为1/100

2 条件概率的情况
如果女孩加上身高180,有房有车,工作在北上广,则只有5个人符合条件,你是其中之一。
则你被选中的概率是1/5.

加上条件概率以后,需要关注的范围从100,减到5,大大缩小了范围,更有助于做判断.

3.2 全概率公式与贝叶斯公式

3.2.1 全概率公式

在这里插入图片描述

3.2.2 贝叶斯公式

在这里插入图片描述

3.3 贝叶斯公式的简单运用例子

在这里插入图片描述
tips:我做的答案不一定准

因为第一个球是红球,所以条件A限定在第一,二个盒子了。
抽了一个红球出来,,还剩下2红1白,从这三个中抽取一个红球的概率是2/3

P(A) = 1/2
P(AB)=1/5(白红,红白,红红,白白)

P(B|A)=P(AB)/P(A) = (1/5)/(1/2) = 2/5

3.4 贝叶斯滤波的三大概率

在这里插入图片描述

1 主观概率(先验概率):试验之前的概率,可以猜一个概率,并认为它是对的。特点就是没有做试验,就定了一个概率

2 后验概率:猜测了一个值后,然后观测,在观测值的条件下,猜测的值为真实值的概率 P(B|A),A猜测的值,B是观测的的值

3似然概率:源自最大似然估计,表示哪个原因最有可能导致了结果,一般用来表示测量的准确度(传感器)

似然举例:
A班99男1女,B班99女1男
我们随机抽一个班,再随机抽一个人进行观测,结果是女。
此女最像是从B班抽取出来。

我的观测结果是女的,那么是什么原因导致了这个结果?
最大似然的意思就是这个女孩是最有可能从B班抽取的,因为B班的女的太多了。

3.5 离散随机变量的贝叶斯滤波

3.5.1 定义以及公式

A 事件发生后,B发生的概率 P(B|A)=P(BA)/P(A)

A,B用x,y表示,那就变成了如下的形式:
在这里插入图片描述

3.5.2 例子 温度的预测

温度的先验概率:也就是我们主动给的一个概率

在这里插入图片描述

测量温度

在这里插入图片描述

后验概率

在这里插入图片描述

看看公式里面的成分:

先验概率:
在这里插入图片描述

后验概率(测量在后):
在这里插入图片描述
似然概率(测量在前): 在这里插入图片描述

一个常量值:P(Tm=10.3)表示测量值为10.3的概率。
这里会有个疑问,这个值已经是测量出来的了,已经发生了的,那它的概率是1? 答案是:不是的。
随机变量的取值和它的概率不是一个概念。比如说抛硬币,正面朝上,它的概率是0.5,而
不是1.
P(Tm=10.3)是随机试验的一个结果而已,
随机变量的取值是一次随机试验可能的结果。
随机变量的分布律代表对随机变量的不确定的刻画。
即:随机变量的取值和随机变量的分布律没有任何关系
在这里插入图片描述
P(Tm=10.3)的计算方法:
用全概率公式来算:
在这里插入图片描述
先验概率是猜的,在我们给出的时候,它就已经定了。
似然概率是跟仪器相关的,当我们拿出一个温度计时,它的似然概率就已经定了。
因此
P(Tm=10.3)是一个常数。

亚博microros小车-原生ubuntu支持系列:16 机器人状态估计 亚博microros小车,非虚拟机原生ubuntu系列,小车状态估计 阅读详情

相关推荐

机器人状态估计——从IMU运动方程到ESKF误差状态建模(上)

本文深入探讨了机器人状态估计中的IMU运动方程与ESKF误差状态建模技术。通过解析IMU测量模型、推导连续时间运动方程,并详细讲解误差状态分离的优势,帮助开发者有效解决IMU数据噪声和漂移问题。文章结合实战经验,分享了ESKF理论基础和实现注意事项,为机器人精准定位提供可靠方法。

weixin_29054195的博客 430

IMU方向位姿估计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、方法一:IMU方向位姿可以直接从IMU本身提供的专有算法中获得(调包侠拿来就用)二、方法二:使用IMU陀螺仪和加速度计读数估计躯干方向姿态R和角速W(自己写状态估计算法)参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对IMU方向位姿估计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文

qq_35635374的博客 3496

用IMU数据进行位置和姿态估计

用IMU的数据进行机器人位置和姿态的估计,比如acc或者gyro积分每个sample怎么进行坐标变换,怎么由rawdata得到位置和姿态信息的计算细节等。 In recent years, microelectromechanical system (MEMS) inertial sensors (3D accelerometers and 3D gyroscopes) have become widely available due to their small size and low cost. Inertial sensor measurements are obtained at high sampling rates and can be integrated to obtain position and orientation information. These estimates are accurate on a short time scale, but suer from integration drift over longer time scales. To overcome this issue, inertial sensors are typically combined with additional sensors and models. In this tutorial we focus on the signal processing aspects of position and orientation estimation using inertial sensors. We discuss dierent modeling choices and a selected number of important algorithms. The algorithms include optimization-based smoothing and ltering as well as computationally cheaper extended Kalman lter and complementary lter implementations. The quality of their estimates is illustrated using both experimental and simulated data.

crpmatlab代码-crp_outdoor_surfaces:在各种室外表面收集的IMU步态数据的连续相对相位分析

crp matlab代码crp_outdoor_surfaces 用于分析在各种室外表面收集的 IMU 步态数据的连续相对相位分析的 Matlab 代码。 指示: 使用“添加子文件夹...”将 ~/crp_outdoor_surfaces/code 添加到路径 将当前工作目录更改为 ~/crp_outdoor_surfaces 目录的根目录 运行 ~/crp_outdoor_surfaces/code/crp_outdoor_surfaces_process.m 参见 ~/Statistics/eventval.xls 中生成的 Excel 表,了解用于论文统计分析的 MARP 和 DP 值

吃透Chisel语言.02.Chisel+VS Code+Ubuntu/WSL2开发环境搭建与使用

既然是学Chisel语言,那肯定得先把环境配置好,磨刀不误砍柴工嘛。而且有个测试环境的话,在后期的学习过程中自己去试运行代码段可以加深学习效果。这里推荐使用Ubuntu或者基于WSL2(Windows Subsystem Linux 2)的Ubuntu,本人使用的是WSL2上的Ubuntu 20.04.3 LTS,在使用体验上与Ubuntu几乎没有区别,且能同时使用Windows提供的诸多便利。...

github-3rr0r的博客 8448

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2211

AMD 3D V-Cache技术解析:CPU缓存堆叠如何突破性能瓶颈

在半导体领域,缓存(Cache)是提升处理器性能的关键技术,其核心原理是在高速CPU核心与慢速主存之间建立数据中转站,以缓解“内存墙”问题。随着摩尔定律放缓,传统平面扩展缓存面临面积成本高、延迟增加等挑战。3D封装技术应运而生,通过垂直堆叠实现极致的互联密度与带宽,成为突破性能瓶颈的重要工程路径。这项技术的价值在于能以更优的功耗和延迟,显著提升缓存容量,从而改善游戏、科学计算等数据密集型应用的性能。以AMD 3D V-Cache为代表的Hybrid Bonding(混合键合)工艺,正是这一趋势的典型实践,它

weixin_30432579的博客 417

手把手教你学Simulink——基于电机驱动系统的场景实例:轮毂电机在电动汽车中的分布式驱动控制仿真

本文详细介绍了基于MATLAB/Simulink和Simscape Electrical的电动汽车轮毂电机分布式驱动控制系统建模方法。内容包括系统结构设计(轮毂电机、逆变器、控制器等模块)、完整的建模过程(从基础模块导入到车辆动力学建模)、控制器设计与转矩分配策略实现,以及仿真参数设置与结果分析。通过仿真验证了该分布式驱动系统在速度跟踪、转弯性能等方面的优异表现,为电动汽车驱动系统的研究与开发提供了有效的仿真验证平台。文中还提供了相关代码示例和资料推荐,是学习Simulink电机控制系统建模的实用指南。

MHD0815的博客 4914

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1963

ROS从入门到精通1-1:ROS核心架构、常用指令与计算图

本文介绍ROS的核心架构,各个文件、目录的用途、常用命令行工具、动态计算图原理。

FRIGIDWINTER的博客 6369

零基础教你学RDMA驱动开发:从入门到精通--第6章 内存管理与DMA映射​6.2 DMA地址转换:内核dma_map_single()与硬件IOVA(I/O虚拟地址)​

本文深入探讨RDMA驱动中DMA地址转换机制,重点分析内核dma_map_single()函数与硬件IOVA的作用。主要内容包括:1)DMA地址转换的必要性,解决CPU虚拟地址与HCA设备DMA地址的空间割裂问题;2)内核DMA映射机制实现原理,涵盖无IOMMU(直接物理地址映射)和有IOMMU(IOVA转换)两种场景;3)硬件IOVA的工作流程及其与RDMA内存注册的结合;4)RDMA驱动开发中的关键问题,如缓存一致性、映射方向错误、IOVA泄漏等;5)以mlx5驱动为例的实践分析。文章强调DMA地址转换

xiaoheshang_123的博客 239

SCADA|测试KingSCADA4.0信创版采集汇川PLC AC810数据

摘要:雷工分享KingSCADA4.0信创版采集汇川PLC数据的配置过程。由于项目繁忙,笔记更新延迟。信创产业要求采用国产化产品,此次通过ModbusTCP协议连接AC810 PLC。主要步骤包括:新建IOServer应用(需厂家协助从3.8升级至4.0)、安装ModbusTCP驱动、配置设备地址(192.168.1.88:5021)、运行IOServer并通过网页监控变量。尽管信创版操作体验较差,但出于国产化战略需要仍需使用。雷工表示理解产品初期不足,相信未来会逐步优化。2025年4月11日记录于四川绵阳

做有价值的事,积累有价值的笔记! 863

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 很不错的通过IMU来进行姿态估计的入门级资料
下一篇: Mujoco不错的视频教程
Feisy
博客等级 码龄19年 166粉丝 235原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值