ORB-SLAM3 MLPnP ORB-SLAM3采用MLPnP最大似然透视n点算法来解决重定位时的相机位姿估计问题。它取代了ORB-SLAM2中的EPnP算法核心优势在于不依赖特定相机模型且在计算中考虑了观测不确定性从而能兼容鱼眼、全景等更广泛的相机。 为什么是MLPnP—— 超越EPnPEPnP的局限依赖针孔相机模型无法直接用于鱼眼等非标模型。MLPnP的优势直接使用投影光线Bearing Vector而非2D像素点作为输入且融合了图像观测的不确定性噪声使位姿估计更准确鲁棒。⚙️ 核心原理从像素到光线再到最大似然估计输入3D-2D匹配点来自当前帧的2D特征点与候选关键帧中3D地图点的对应关系。构建观测像素 → Bearing Vector利用相机反投影函数将2D像素点(u,v)转换为相机坐标系下的3D方向向量Bearing Vectorbearing_vector unproject(kp.pt)bearing_vector / bearing_vector.z归一化融入不确定性MLPnP将观测噪声从2D图像平面传播到3D的Bearing Vector上利用协方差矩阵为每个观测值分配一个“可靠程度”。最大似然估计通过迭代优化找到最优位姿(R, t)使得所有3D点p_i投影到其观测光线v_i上的总体概率似然最大。公式为λ_i * v_i R * p_i t即观测光线方向乘以深度λ_i等于世界点变换到相机坐标系下的坐标。 ORB-SLAM3中的实现RANSAC框架下的MLPnPORB-SLAM3将MLPnP封装在MLPnPsolver.cc中并在RANSAC框架下运行初始化与准备构造函数接收当前帧和匹配地图点预计算每个点的Bearing Vector、2D点坐标和协方差等信息。RANSAC迭代求解随机采样随机选择最小点集如6对匹配。位姿计算调用computePose()利用MLPnP算法估计位姿。内点计数用估计位姿投影所有3D点检查重投影误差统计内点数量。更新最优解若内点数更多则更新最佳位姿和内点集。迭代重复上述步骤直到达到最大迭代次数或满足终止条件。输出与优化RANSAC结束后利用所有内点再次进行MLPnP计算得到最终位姿并交由位姿优化Pose Optimization步骤做进一步精化。 总结ORB-SLAM3采用MLPnP本质上是用更通用的数学模型3D光线替代了特定的几何模型2D像素并引入了对噪声的统计建模。这使得系统在多变的现实环境中拥有更强的适应性和鲁棒性。如果你想深入了解更底层的数学推导建议阅读MLPnP的原始论文《MLPnP - A Real-Time Maximum Likelihood Solution to the Perspective-n-Point Problem》。