扰动的意义

在视觉SLAM和机器人学里,“扰动”就是你给当前状态(比如相机位姿)加的一个微小的虚拟“推力”或“拧动”

它不是真实发生的运动,而是你在数学上假想它动了一点点,目的是为了观测“状态动一下,误差会变多少”,从而算出优化的方向。

为了让你透彻理解,我们从三个层面拆解:

1. 为什么非要用“扰动”?(数学上的无奈)

在优化位姿时,我们需要求误差对位姿的导数(雅可比矩阵)

  • 对于平移 t,很简单:t+Δt,直接加个微小位移就行。

  • 但对于旋转矩阵 R,问题来了:R+ΔR 是非法的!因为两个旋转矩阵相加的结果不再是正交矩阵,会破坏旋转的数学结构。

解决办法:我们不在旋转矩阵本身上加,而是跑到它的“切空间”(即李代数 so(3))里加一个微小向量 ϕ,然后再通过指数映射 exp⁡([ϕ]×) 变回合法的旋转。这个在切空间里加的微小向量 ϕ,就是我们说的“扰动”。

2. 物理直觉上,它是什么?(拧动)

假设相机当前姿态是 RR。

  • 左扰动exp⁡([ϕ]×)⋅R:意思是在相机坐标系下,给相机绕 X/Y/Z 轴分别拧动 ϕ1,ϕ2,ϕ3 这么小的角度。

  • 右扰动R⋅exp⁡([ϕ]×):意思是在世界自身坐标系下拧动它。

ORB-SLAM3的MLPnP采用的是左扰动模型。这个 ϕ=(ϕ1,ϕ2,ϕ3) 就是扰动量,它的方向是旋转轴,大小是旋转弧度

3. 在优化(高斯-牛顿)中,它扮演什么角色?(试探工具)

在迭代优化中,扰动是试探步长。整个流程是:

  1. 计算当前误差:算出当前位姿下的重投影误差 e。

  2. 施加虚拟扰动:假想给位姿加了一个微小扰动 ϕ(还有平移扰动 ρ)。

  3. 预测变化:用雅可比矩阵 JJ 算出“如果加了扰动,误差会变成 e+J⋅δ”。

  4. 求最优步长:解方程 HΔx=b,算出一个最优的扰动增量Δx=(ϕ∗,ρ∗)。

  5. 真正“吸收”扰动:把这个最优扰动左乘到当前位姿上(R←exp⁡([ϕ∗]×)R,t←t+ρ∗)。

💎 一句话总结代码中的对应

你之前看到的-skew(R * p_i)(即 −(Rpi)×​),就是在问这样一个问题:

“如果我在相机坐标系下,给相机施加一个微小的旋转扰动 ϕ,那么空间中的3D点 pi​ 在相机坐标系下的位置会变动多少?”

它的数学答案就是:Rpi 这个向量被扰动 ϕ 叉积后的反方向(即 -ϕ×(Rpi) 的线性化形式)。

把这个搞透,你对整个视觉SLAM后端优化的理解就打通了80%