【SLAM学习笔记】4-ORB_SLAM3关键源码分析② G2oTypes(一)

news/2025/1/8 19:02:27/

2021SC@SDUSC

目录

  • 1.代码分析
    • 1.1 G2oTypes.h
    • 1.2 G2oTypes.cc
  • 参考文献

1.代码分析

1.1 G2oTypes.h

G2oTypes.h的主要结构如下(对于类的作用已注释):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 G2oTypes.cc

局部地图中imu的局部地图优化(此时已经初始化完毕不需要再优化重力方向与尺度)

EdgeInertial::EdgeInertial(IMU::Preintegrated *pInt):JRg(Converter::toMatrix3d(pInt->JRg)),JVg(Converter::toMatrix3d(pInt->JVg)), JPg(Converter::toMatrix3d(pInt->JPg)), JVa(Converter::toMatrix3d(pInt->JVa)),JPa(Converter::toMatrix3d(pInt->JPa)), mpInt(pInt), dt(pInt->dT)
{// 准备工作,把预积分类里面的值先取出来,包含信息的是两帧之间n多个imu信息预积分来的// This edge links 6 vertices// 6元边resize(6);// 1. 定义重力g << 0, 0, -IMU::GRAVITY_VALUE;// 2. 读取协方差矩阵的前9*9部分的逆矩阵,该部分表示的是预积分测量噪声的协方差矩阵cv::Mat cvInfo = pInt->C.rowRange(0, 9).colRange(0, 9).inv(cv::DECOMP_SVD);// 转成eigen Matrix9dMatrix9d Info;for (int r = 0; r < 9; r++)for (int c = 0; c < 9; c++)Info(r, c) = cvInfo.at<float>(r, c);// 3. 强制让其成为对角矩阵Info = (Info + Info.transpose()) / 2;// 4. 让特征值很小的时候置为0,再重新计算信息矩阵(暂不知这么操作的目的是什么,先搞清楚操作流程吧)Eigen::SelfAdjointEigenSolver<Eigen::Matrix<double, 9, 9>> es(Info);Eigen::Matrix<double, 9, 1> eigs = es.eigenvalues(); // 矩阵特征值for (int i = 0; i < 9; i++)if (eigs[i] < 1e-12)eigs[i] = 0;// asDiagonal 生成对角矩阵Info = es.eigenvectors() * eigs.asDiagonal() * es.eigenvectors().transpose();setInformation(Info);
}

计算误差

void EdgeInertial::computeError()
{// 计算残差// TODO Maybe Reintegrate inertial measurments when difference between linearization point and current estimate is too bigconst VertexPose* VP1 = static_cast<const VertexPose*>(_vertices[0]);const VertexVelocity* VV1= static_cast<const VertexVelocity*>(_vertices[1]);const VertexGyroBias* VG1= static_cast<const VertexGyroBias*>(_vertices[2]);const VertexAccBias* VA1= static_cast<const VertexAccBias*>(_vertices[3]);const VertexPose* VP2 = static_cast<const VertexPose*>(_vertices[4]);const VertexVelocity* VV2 = static_cast<const VertexVelocity*>(_vertices[5]);const IMU::Bias b1(VA1->estimate()[0],VA1->estimate()[1],VA1->estimate()[2],VG1->estimate()[0],VG1->estimate()[1],VG1->estimate()[2]);const Eigen::Matrix3d dR = Converter::toMatrix3d(mpInt->GetDeltaRotation(b1));const Eigen::Vector3d dV = Converter::toVector3d(mpInt->GetDeltaVelocity(b1));const Eigen::Vector3d dP = Converter::toVector3d(mpInt->GetDeltaPosition(b1));const Eigen::Vector3d er = LogSO3(dR.transpose()*VP1->estimate().Rwb.transpose()*VP2->estimate().Rwb);const Eigen::Vector3d ev = VP1->estimate().Rwb.transpose()*(VV2->estimate() - VV1->estimate() - g*dt) - dV;const Eigen::Vector3d ep = VP1->estimate().Rwb.transpose()*(VP2->estimate().twb - VP1->estimate().twb- VV1->estimate()*dt - g*dt*dt/2) - dP;_error << er, ev, ep;
}

参考文献


http://www.ppmy.cn/news/218234.html

相关文章

记一次 H3C ER3260 G2 路由器CPU暴涨 处理过程。

公司路由器CPU突然暴涨&#xff0c;90%以上&#xff0c;已持续有两周左右。 症状是办公网网速下降&#xff0c;点击路由器配置页面反应慢&#xff0c;偶尔会出现拨号失败全公司断网。 网络环境&#xff1a;路由器上划分了3个vlan&#xff0c;分别对应服务器区&#xff0c;办公…

数据分析er看过来,五款工具有你需要的

“我想转行做数据分析&#xff0c;但是我只会用Excel&#xff0c;不会其他的工具&#xff0c;有其他的数据分析工具推荐么&#xff1f;“ “我不会python&#xff0c;那我可以做数据分析吗” 大部分人对数据分析的的第一印象就是Excel&#xff0c;python&#xff0c;其实选择一…

深入学习Arduino u8g2 OLED库,一篇就够(字数过多,需要分篇)

❤️博主介绍❤️ &#x1f62c; 作者&#xff1a;单片机菜鸟哥 &#x1f449;火爆博客&#xff1a;ESP8266 Arduino教程 零基础从入门到熟悉Arduino平台下开发ESP8266&#xff0c;同时会涉及网络编程知识。专栏文章累计超过60篇&#xff0c;分为基础篇、网络篇、应用篇、高级篇…

mysql erparseerror_错误:ER_PARSE_ERROR:SQL语法中有错误;请查看与MySQL server版本相对应的手册...

我正在尝试使用从NPM下载的“MySQL”模块将一些数据从节点JS发送到MySQL。connection.beginTransaction(function(err) {if (err) { throw err } connection.query(sq, function (error, result) {if (error) {//return connection.rollback(function() {throw err //}) } else…

玩转u8g2 OLED库 MAX7219_32X8点阵模块

u8g2 OLED库 MAX7219_32X8点阵模块 理论基础 玩转u8g2 OLED库&#xff0c;一篇就够玩转u8g2 OLED库&#xff0c;一篇就够&#xff08;字数太多 要分篇&#xff09; 实验内容 Full screen buffer mode显示“I❤❤U" 实验器材 Mega2560 MAX7219-32X8点阵模块 引脚连接 4线…

ORBSLAM3 --- 优化(一):g2o优化中的节点与边的定义-G2oTypes.h、G2oTypes.cc解析

目录 1.节点类 1.1 ImuCamPose类 1.1.1 类的定义 1.1.2 ImuCamPose::ImuCamPose 1.1.3 ImuCamPose::SetParam 1.1.4 ImuCamPose::isDepthPositive 1.2 VertexPose类 1.2.1 节点定义 1.2.2 ImuCamPose::Update函数解析 1.3 VertexPose4DoF类 1.3.1 节点定义 1.3.2…

网故障排除思路

网故障排除思路 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 这篇博客主要是来自production environment中的一次经历。刚刚新公司不久,之前在这个公司的2位网络的大牛离职了,他们选择了继续高飞,我来接替他们的工作,一种说不出来的感觉在…

h3c l2tp ***配置

windows L2TP客户端配置(以XP为例) 配置L2TP 拨号连接&#xff1a; 1、选网络连接属性 2、选择“创建一个新的连接” 3、选择“连接到我的工作场所的网络”&#xff0c;单击“下一步” 4、选择“虚拟专用网络连接”&#xff0c;单击“下一步” 5、为连接输入一个名字为“l2tp”…