三维旋转构成了三维旋转群 SO(3),其对应的李代数为 so\mathfrak{so}so(3);三维变换构成了三维变换群 SE(3),其对应的李代数为 se\mathfrak{se}se(3)。
1.指数映射
李代数元素到李群元素的映射为指数映射,其中 so\mathfrak{so}so(3) 至 SO(3) 的指数映射为:
exp(ϕ∧)=R=Exp(ϕ)\exp(\bm{\phi}^{\wedge}) = \bm{R} = \text{Exp}(\bm{\phi})exp(ϕ∧)=R=Exp(ϕ)
具体计算公式由罗德里格斯公式给出:
R=cosθ⋅I+(1−cosθ)nnT+sinθ⋅n∧=exp(ϕ∧) \bm{R} = \cos\theta \cdot \bm{I} + (1-\cos \theta) \bm{n}\bm{n}^T + \sin\theta\cdot \bm{n}^{\wedge} = \exp(\bm{\phi}^{\wedge}) R=cosθ⋅I+(1−cosθ)nnT+sinθ⋅n∧=exp(ϕ∧)
其中 ϕ∈so(3)\bm{\phi}\in \mathfrak{so}(3)ϕ∈so(3) 可以分解为 ϕ=θn\bm{\phi} =\theta\bm{n}ϕ=θn.
2.对数映射
从李群元素到李代数元素的映射为对数映射,记作
ϕ=log(R)∨=Log(R)\bm{\phi} = \log(\bm{R})^{\vee} = \text{Log}(\bm{R})ϕ=log(R)∨=Log(R)
其中ϕ∈so(3)\bm{\phi}\in \mathfrak{so}(3)ϕ∈so(3) 可以分解为 ϕ=θn\bm{\phi} =\theta\bm{n}ϕ=θn,具体的计算过程由下式给出:
θ=arccos(tr(R)−12)Rn=n\theta = \arccos\left(\frac{tr(\bm{R}) - 1}{2}\right) \\ \bm{R}\bm{n} = \bm{n}θ=arccos(2tr(R)−1)Rn=n
其中 转轴 n\bm{n}n 是矩阵 RRR 特征值1对应的单位特征向量。
3. BCH公式及其线性近似表达
两个李代数指数映射乘积的完整形式,由 Baker-Campbell-Hausdorff 公式(BCH公式)给出,其展开式的前几项为:
ln(exp(A)exp(B))=A+B+12[A,B]+112[A,[A,B]]−112[B,[A,B]]+⋯\ln\left(\exp(A)\exp(B)\right) = A + B + \frac{1}{2}[A, B] + \frac{1}{12}[A,[A,B]] - \frac{1}{12}[B,[A,B]] + \cdotsln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]−121[B,[A,B]]+⋯
其中 [ ] 为李括号。特别地,考虑 SO(3) 上的李代数 ln(exp(ϕ1∧)exp(ϕ2∧))∨\ln\left(\exp(\bm{\phi}^{\wedge}_1)\exp(\bm{\phi}^{\wedge}_2)\right)^{\vee}ln(exp(ϕ1∧)exp(ϕ2∧))∨,当 ϕ1\bm{\phi}_1ϕ1 或 ϕ2\bm{\phi}_2ϕ2 为小量时,小量二次以上的项可以忽略,此时 BCH 具有线性近似表达:
第一个近似公式表明,当对一个旋转矩阵 R2\bm{R}_2R2(李代数为 ϕ2\bm{\phi}_2ϕ2) 左乘一个微小旋转矩阵 R1\bm{R}_1R1(李代数为 ϕ1\bm{\phi}_1ϕ1)时,可以近似看作在原来的李代数 ϕ2\bm{\phi}_2ϕ2 加上了一项 Jl(ϕ2)−1ϕ1\bm{J}_l(\bm{\phi}_2)^{-1}\bm{\phi}_1Jl(ϕ2)−1ϕ1。同理,第二个近似公式描述了右乘一个微小旋转的情况。
因此,李代数在BCH近似下分成了左乘和右乘近似两种,使用时需要注意区分。
4. SO(3)上的BCH近似公式
BCH公式给出了李代数上的小量加法与李群上小量乘法之间的关系(李代数加法 ⇔\Leftrightarrow⇔ 李群乘法),其线性近似公式广泛应用于各种函数的线性化。
在SO(3)中,某个旋转 R\bm{R}R 对应的李代数为 ϕ\bm{\phi}ϕ,左乘一个微小旋转,记作 ΔR\Delta \bm{R}ΔR,对应的李代数为 Δϕ\Delta \bm{\phi}Δϕ,那么在李群上得到的结果就是 ΔRR\Delta \bm{R} \bm{R}ΔRR,而在李代数上,根据BCH近似,为 Jl(ϕ)−1Δϕ+ϕ\bm{J}_l(\bm{\phi})^{-1}\Delta\bm{\phi} + \bm{\phi}Jl(ϕ)−1Δϕ+ϕ,合并后可以简单写成:
ΔRR=exp(Δϕ∧)exp(ϕ∧)=exp((ϕ+Jl(ϕ)−1Δϕ)∧) \Delta \bm{R} \bm{R} = \exp(\Delta \bm{\phi}^{\wedge})\exp(\bm{\phi}^{\wedge}) = \exp \left( (\bm{\phi} + \bm{J}_l(\bm{\phi})^{-1}\Delta\bm{\phi})^{\wedge} \right) ΔRR=exp(Δϕ∧)exp(ϕ∧)=exp((ϕ+Jl(ϕ)−1Δϕ)∧)
反过来,如果在李代数上进行加法,让一个 ϕ\bm{\phi}ϕ 加上小量 Δϕ\Delta \bm{\phi}Δϕ,那么可以近似为李群上带左右雅克比矩阵的乘法:
exp((ϕ+Δϕ)∧)=exp((Jl(ϕ)Δϕ)∧)exp(ϕ∧)=exp(ϕ∧)exp((Jr(ϕ)Δϕ)∧) \exp((\bm{\phi} + \Delta \bm{\phi})^{\wedge}) = \exp((\bm{J}_l(\bm{\phi})\Delta \bm{\phi})^\wedge) \exp(\bm{\phi}^\wedge) = \exp( \bm{\phi}^\wedge) \exp((\bm{J}_r(\bm{\phi})\Delta\bm{\phi})^\wedge) exp((ϕ+Δϕ)∧)=exp((Jl(ϕ)Δϕ)∧)exp(ϕ∧)=exp(ϕ∧)exp((Jr(ϕ)Δϕ)∧)
其中SO(3)的左雅克比矩阵为
Jl(θa)=sinθθI+(1−sinθθ)aaT+(1−cosθθ)a∧Jl−1(θa)=θ2cotθ2I+(1−θ2cotθ2)aaT−θ2a∧\bm{J}_l(\theta\bm{a}) = \frac{\sin\theta}{\theta} \bm{I} + (1-\frac{\sin\theta}{\theta})\bm{a}\bm{a}^T+(\frac{1-\cos\theta}{\theta})\bm{a}^{\wedge} \\ \bm{J}^{-1}_l(\theta\bm{a}) = \frac{\theta}{2}\cot\frac{\theta}{2} \bm{I} + (1-\frac{\theta}{2}\cot\frac{\theta}{2})\bm{a}\bm{a}^T-\frac{\theta}{2}\bm{a}^{\wedge}Jl(θa)=θsinθI+(1−θsinθ)aaT+(θ1−cosθ)a∧Jl−1(θa)=2θcot2θI+(1−2θcot2θ)aaT−2θa∧
而SO(3)的右雅克比矩阵为
Jr(ϕ)=Jl(−ϕ)\bm{J}_r(\bm{\phi}) = \bm{J}_l(-\bm{\phi})Jr(ϕ)=Jl(−ϕ)
值得注意的是,由于李代数 ϕ\bm{\phi}ϕ 可以和旋转矩阵 R\bm{R}R 简单地对应起来,因此有时也把 Jr(ϕ)\bm{J}_r(\bm{\phi})Jr(ϕ) 简单地记作 Jr(R)\bm{J}_r(\bm{R})Jr(R) 而不是 Jr(Log(R))\bm{J}_r(\text{Log}(\bm{R}))Jr(Log(R))。另外,在很多情况下,也会省略 Jr(ϕ)\bm{J}_r(\bm{\phi})Jr(ϕ) 括号里的内容,而直接记为 Jr\bm{J}_rJr 和 Jl\bm{J}_lJl,这都是为了让公式看上去更加简洁。
参考教程
- 自动驾驶与机器人中的SLAM技术:从理论到实践/高翔著. —北京:电子工业出版社,2023.8
- 视觉SLAM十四讲:从理论到实践/高翔等著.— 2版. —北京:电子工业出版社,2019.9