在SLAM(Simultaneous Localization and Mapping)中,使用左扰动还是右扰动主要取决于你如何定义坐标系和你希望扰动影响的姿态表示。这通常与你的坐标系选择和你正在解决的具体问题有关。
左扰动通常用于以下情况:
- 当你使用局部坐标系来表示旋转,并且你的旋转矩阵
R
描述了世界坐标系相对于局部坐标系的旋转(即从世界坐标系到局部坐标系的变换)。在这种情况下,当你想改变局部坐标系的姿态时,你需要在旋转矩阵的左侧应用扰动,因为你想改变的是从世界到局部坐标系的变换。
右扰动通常用于以下情况:
- 当你使用全局坐标系来表示旋转,并且你的旋转矩阵
R
描述了局部坐标系相对于世界坐标系的旋转(即从局部坐标系到世界坐标系的变换)。在这种情况下,当你想改变局部坐标系的姿态时,你需要在旋转矩阵的右侧应用扰动,因为你想改变的是从局部到世界坐标系的变换。
简单来说,如果你的坐标系设置使得你的旋转矩阵代表一个“从…到…”的变换,那么你应当根据这个变换的方向来决定使用左扰动还是右扰动。具体而言:
- 如果你的旋转矩阵
R
表示“从世界到局部”,则使用左扰动。 - 如果你的旋转矩阵
R
表示“从局部到世界”,则使用右扰动。
在SLAM的上下文中,这通常意味着:
- 如果你关心的是机器人坐标系下的世界地图(即机器人视角下的世界),你可能会使用左扰动。
- 如果你关心的是世界坐标系下的机器人位置(即世界视角下的机器人),你可能会使用右扰动。
一般情况下,旋转矩阵R
都是描述局部坐标系相对于世界坐标系的旋转(即从局部坐标系到世界坐标系的变换),这里推导一下右扰动公式:
∂ ( R exp ( ϕ ∧ ) p + t ) ∂ ϕ = lim ϕ → 0 ( R exp ( ϕ ∧ ) p + t ) − ( R p + t ) ϕ ≈ lim ϕ → 0 ( R ( I + ϕ ∧ ) p + t ) − ( R p + t ) ϕ = lim ϕ → 0 R ϕ ∧ p ϕ = − R p ∧ \begin{align*} \frac{\partial (R \exp(\phi^\wedge) p + t)}{\partial \phi} &= \lim_{\phi \to 0} \frac{(R \exp(\phi^\wedge) p + t) - (Rp + t)}{\phi}\\ &\approx \lim_{\phi \to 0} \frac{(R(I+\phi^\wedge)p+t)-(Rp+t)}{\phi}\\ &= \lim_{\phi \to 0} \frac{R\phi^{\wedge}p}{\phi}\\ &= -Rp^{\wedge} \end{align*} ∂ϕ∂(Rexp(ϕ∧)p+t)=ϕ→0limϕ(Rexp(ϕ∧)p+t)−(Rp+t)≈ϕ→0limϕ(R(I+ϕ∧)p+t)−(Rp+t)=ϕ→0limϕRϕ∧p=−Rp∧