Imu_PreIntegrate_01 预积分

2024-02-13 10:20
文章标签 01 积分 imu preintegrate

本文主要是介绍Imu_PreIntegrate_01 预积分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/** 对一笔IMU数据进行积分*/
void Preintegrated::IntegrateNewMeasurement(const Eigen::Vector3f &acceleration, const Eigen::Vector3f &angVel, const float &dt)
{mvMeasurements.push_back(integrable(acceleration,angVel,dt));//记录原始数据// Position is updated firstly, as it depends on previously computed velocity and rotation.// Velocity is updated secondly, as it depends on previously computed rotation.// Rotation is the last to be updated.// 先更新Position再velocity再Rotation//Matrices to compute covarianceEigen::Matrix<float,9,9> A;//噪声的递推矩阵AA.setIdentity();Eigen::Matrix<float,9,6> B;//噪声的递推矩阵BB.setZero();Eigen::Vector3f acc, accW;acc << acceleration(0)-b.bax, acceleration(1)-b.bay, acceleration(2)-b.baz;// 这里的acc = 公式里的 w-bias。 后面的 Wacc = exp((w-b)*delta_t)accW << angVel(0)-b.bwx, angVel(1)-b.bwy, angVel(2)-b.bwz;//更新平均值 初始化的时候,如果需要有一定的速度才能初始化mFastInit,就要参考avgA = (dT*avgA + dR*acc*dt)/(dT+dt);avgW = (dT*avgW + accW*dt)/(dT+dt);// Update delta position dP and velocity dV (rely on no-updated delta rotation)dP = dP + dV*dt + 0.5f*dR*acc*dt*dt;//公式 15-43 这里的acc已经扣除biasdV = dV + dR*acc*dt; //公式 15-40 这里的acc已经扣除bias// Compute velocity and position parts of matrices A and B (rely on non-updated delta rotation)Eigen::Matrix<float,3,3> Wacc = Sophus::SO3f::hat(acc);//Wacc = exp((w-b)*delta_t)// 开始更新噪声A.block<3,3>(3,0) = -dR*dt*Wacc;//公式 15-48 A row2 col1A.block<3,3>(6,0) = -0.5f*dR*dt*dt*Wacc;//公式 15-48 A row3 col1A.block<3,3>(6,3) = Eigen::DiagonalMatrix<float,3>(dt, dt, dt);//公式 15-48 A row3 col2B.block<3,3>(3,3) = dR*dt;//公式 15-48 B row2 col2B.block<3,3>(6,3) = 0.5f*dR*dt*dt;//公式 15-48 B row3 col2// Update position and velocity jacobians wrt bias correctionJPa = JPa + JVa*dt -0.5f*dR*dt*dt;//零偏更新 公式 15-67JPg = JPg + JVg*dt -0.5f*dR*dt*dt*Wacc*JRg;//零偏更新 公式 15-66JVa = JVa - dR*dt;//零偏更新 公式 15-62JVg = JVg - dR*dt*Wacc*JRg;//零偏更新 公式 15-63// Update delta rotationIntegratedRotation dRi(angVel,b,dt);//公式 15-29dR = NormalizeRotation(dR*dRi.deltaR);//归一化// Compute rotation parts of matrices A and BA.block<3,3>(0,0) = dRi.deltaR.transpose();//公式 15-48 A row1 col1B.block<3,3>(0,0) = dRi.rightJ*dt;//公式 15-48 B row1 col1// Update covariance// 更新协方差矩阵,矩阵位位9*6矩阵 Nga为6*6矩阵 todoC.block<9,9>(0,0) = A * C.block<9,9>(0,0) * A.transpose() + B*Nga*B.transpose();C.block<6,6>(9,9) += NgaWalk;// Update rotation jacobian wrt bias correctionJRg = dRi.deltaR.transpose()*JRg - dRi.rightJ*dt;//零偏更新 公式 15-60// Total integrated timedT += dt;
}

这篇关于Imu_PreIntegrate_01 预积分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705267

相关文章

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

微积分-积分应用5.4(功)

术语“功”在日常语言中用来表示完成一项任务所需的总努力量。在物理学中,它有一个依赖于“力”概念的技术含义。直观上,你可以将力理解为对物体的推或拉——例如,一个书本在桌面上的水平推动,或者地球对球的向下拉力。一般来说,如果一个物体沿着一条直线运动,位置函数为 s ( t ) s(t) s(t),那么物体上的力 F F F(与运动方向相同)由牛顿第二运动定律给出,等于物体的质量 m m m 与其

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

滚雪球学MyBatis(01):教程导读

MyBatis简介 前言 欢迎回到我们的MyBatis系列教程。在上期的内容中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架(如Hibernate)的对比。我们还探讨了MyBatis在数据访问层中的优势,并解释了为什么选择MyBatis作为我们的持久化框架。在阅读了上期的内容后,相信大家对MyBatis有了初步的了解。 在本期内容中,我们将深入探讨MyBatis的基本配

python+selenium2轻量级框架设计-01框架结构

接下来会介绍一个比较简单的框架结构,先看一下分类 config文件夹里放的是配置文件 framework文件夹里面放的是公共类,常用类,还有读配置文件类、日志类、截图类、发送邮件、生成测试报告、操作读取数据库、读取Excel等,后面几篇会一一介绍 logs文件夹存放生成的日志文件 pageobject存放页面类包括元素的定位等 screenshots文件放的是生成的截图 test_

python+selenium2学习笔记POM设计模式-01模式简介

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。 当页面元素id变化时,只需要更改测试页Class中页面的属性即可。 Page Object模式是

数据库学习01——mysql怎么创建数据库和表

第一步:创建数据库 使用 create database 语句,后跟要创建的数据库名称: CREATE DATABASE dbname; 例如,要创建名为 my_db 的数据库,请输入: CREATE DATABASE my_db ; 使用 show databases; 语句检查数据库是否已创建: 第二步:创建表 使用 create table 语句,后跟要创建的表名和列定

【DL--01】深度学习 揭开DL的神秘面纱

什么是深度学习 深度学习=深度神经网络+机器学习 人工智能 > 机器学习 > 表示学习 > 深度学习 神经元模型 输入信号、加权求和、加偏置、激活函数、输出 全连接层 输入信号、输入层、隐层(多个神经元)、输出层(多个输出,每个对应一个分类)、目标函数(交叉熵) 待求的参数:连接矩阵W、偏置b 训练方法:随机梯度下降,BP算法(后向传播) Python中深度学习实现:Ke

三文带你轻松上手鸿蒙的AI语音01-实时语音识别

三文带你轻松上手鸿蒙的AI语音01-实时语音识别 前言 HarmonyOSNext中集成了强大的AI功能。Core Speech Kit(基础语音服务)是它提供的众多AI功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能 力,便于用户与设备进行互动,实现将实时输入