g2o setInformation

在 ORB-SLAM3 的优化代码中,e->setInformation(Info) 这行看似简单,却决定了每条边在优化中的权重,并直接关系到马氏距离计算与卡方离群点检验。下面把它拆开讲透。


1. 它设置的是什么?


2. 代码中的具体赋值

以单目边为例:

cpp

复制代码
const float invSigma2 = pFrame->mvInvLevelSigma2[kpUn.octave];
Eigen::Matrix2d Info = Eigen::Matrix2d::Identity() * invSigma2;
e->setInformation(Info);

3. 为什么这样设计?

ORB-SLAM 在提取特征点时,为每个金字塔层级预设了一个尺度因子 scaleFactor,层级越高,图像被缩得越小,特征点定位的像素误差会相应放大。

这样,高层(粗尺度)的边因为噪声大,信息矩阵的值就小,在优化中的权重自动降低;低层(精细尺度)的边权重更高。这是多尺度特征融合优化的标准做法


4. 在优化中的作用

点------这完全是基于信息矩阵正确设置了噪声水平的前提。

c. 与鲁棒核协作

Huber 核的阈值 δ 也是基于加权误差(马氏距离)设定的。如果信息矩阵不准确,整个鲁棒框架都会失效。


5. 各向同性假设是否合理?

ORB-SLAM 假设像素两个方向的噪声独立且方差相等,这是一个强假设,但在大多数情况下足够好。如果需要处理更复杂的噪声模型(如仿射噪声),信息矩阵将不再是对角矩阵,需要传入完整的协方差。MLPnP 部分就是考虑完整协方差的例子。


一句话总结setInformation(Info) 为边赋予了基于金字塔层级的噪声权重,使优化器能够按传感器精度合理分配各观测的贡献,并使得卡方检验和鲁棒核正常工作。这是 ORB-SLAM 维持高精度与鲁棒性的基础细节之一。

相关推荐
lovod6 个月前
视觉SLAM十四讲合集
计算机视觉·slam·视觉slam·g2o·ba·位姿图
lovod8 个月前
【视觉SLAM十四讲】后端 2
计算机视觉·slam·g2o·ba·位姿图
自然数e9 个月前
视觉Slam14讲笔记第6讲非线性优化
slam·g2o
xiaoyaolangwj2 年前
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架
自动驾驶·slam·g2o
WHAT8162 年前
【视觉SLAM】 G2O库编写步骤介绍
算法·slam·g2o