SLAM基础——部分预备知识

本文详细介绍了四元数的概念,包括四元数的构成、与旋转矩阵的相互转换以及时间导数。此外,还探讨了旋转矩阵的扰动求导,以及欧拉角与旋转矩阵之间的转换关系。重点阐述了在微小旋转和近似计算中的应用,如扰动模型和指数与对数映射。最后,讨论了旋转矩阵的导数以及欧拉角的求解方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 📖 四元数

1-1 🔖 ​四元数介绍

四元数 q 有一个实部和三个虚部。我们把实部写在前:
q=[q0,q1,q2,q3]T 或 q=[w,x,y,z]T \mathbf{q}=\left[q_{0}, q_{1}, q_{2}, q_{3}\right]^{T} \text { 或 } \mathbf{q}=[w, x, y, z]^{T} q=[q0,q1,q2,q3]T  q=[w,x,y,z]T

其中 q0q_0q0 为实部,[q1,q2,q3]T\left[q_{1}, q_{2}, q_{3}\right]^{T}[q1,q2,q3]T 为虚部。

因为实部为标量,虚部为矢量,所以也可记为:
q=[s,v]T \mathbf{q}=[s, \mathbf{v}]^{T} q=[s,v]T

四元数和角轴的转换关系:设角轴为 ω 角度大小为θ ,那么它对应的四元数为:
q=[cos⁡θ2,ωsin⁡θ2]T \mathbf{q}=\left[\cos \frac{\theta}{2}, \boldsymbol{\omega} \sin \frac{\theta}{2}\right]^{\mathrm{T}} q=[cos2θ,ωsin2θ]T

扩充

单位向量(x,y,z)旋转θ角度后的四元数

(cos⁡θ2,x∗sin⁡θ2,y∗sin⁡θ2,z∗sin⁡θ2)\left(\cos \frac{\theta}{2}, x * \sin \frac{\theta}{2}, y * \sin \frac{\theta}{2}, z * \sin \frac{\theta}{2}\right)(cos2θ,xsin2θ,ysin2θ,zsin2θ)

1-3 🔖 四元数与旋转矩阵的相互转化

设四元数q=q0+q1i+q2j+q3k\boldsymbol{q}=q_{0}+q_{1} i+q_{2} j+q_{3} kq=q0+q1i+q2j+q3k,对应的旋转矩阵 R 为:
R=[1−2q22−2q322q1q2+2q0q32q1q3−2q0q22q1q2−2q0q31−2q12−2q322q2q3+2q0q12q1q3+2q0q22q2q3−2q0q11−2q12−2q22] \boldsymbol{R}=\left[\begin{array}{ccc} 1-2 q_{2}^{2}-2 q_{3}^{2} & 2 q_{1} q_{2}+2 q_{0} q_{3} & 2 q_{1} q_{3}-2 q_{0} q_{2} \\ 2 q_{1} q_{2}-2 q_{0} q_{3} & 1-2 q_{1}^{2}-2 q_{3}^{2} & 2 q_{2} q_{3}+2 q_{0} q_{1} \\ 2 q_{1} q_{3}+2 q_{0} q_{2} & 2 q_{2} q_{3}-2 q_{0} q_{1} & 1-2 q_{1}^{2}-2 q_{2}^{2} \end{array}\right] R=12q222q322q1q22q0q32q1q3+2q0q22q1q2+2q0q312q122q322q2q32q0q12q1q32q0q22q2q3+2q0q112q122q22
由旋转矩阵到四元数的转换如下:
R=[r11r12r13r21r22r23r31r32r33] R=\left[\begin{array}{lll} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{array}\right] R=r11r21r31r12r22r32r13r23r33
则:
q0=tr⁡(R)+12,q1=r23−r324q0,q2=r31−r134q0,q3=r12−r214q0 q_{0}=\frac{\sqrt{\operatorname{tr}(R)+1}}{2}, q_{1}=\frac{r_{23}-r_{32}}{4 q_{0}}, q_{2}=\frac{r_{31}-r_{13}}{4 q_{0}}, q_{3}=\frac{r_{12}-r_{21}}{4 q_{0}} q0=2tr(R)+1,q1=4q0r23r32,q2=4q0r31r13,q3=4q0r12r21

由于 q 和 − q 表示同一个旋转,事实上一个 R 对应的四元数表示并不是惟一的。同时,除了上面给出的转换方式之外,还存在其他几种计算方法

1-2 🔖 四元数时间导数

• 世界坐标系 W ;
• IMU 坐标系 I ;
• 相机坐标系 C ;

四元数时间导数:
设初始旋转为 q = [s, v] ,然后,发生了角轴为 ω, θ 的旋转(右乘,对应四元数记作 ∆q ),那么 q 相对该旋转的导数为:(7)
lim⁡θ→0q⊗Δq−qθ=lim⁡θ→0[scos⁡θ2−vTωsin⁡θ2,sωsin⁡θ2+cos⁡θ2v+v×ωsin⁡θ2]T−qθ=lim⁡θ→0[s(cos⁡θ2−1)−vTωsin⁡θ2,sωsin⁡θ2+(cos⁡θ2−1)v+v×ωsin⁡θ2]Tθ=[−12vTω,12sω+12v×ω]T=q⊗[0,12ω]T \begin{aligned} \lim _{\theta \rightarrow 0} \frac{\mathbf{q} \otimes \Delta \mathbf{q}-\mathbf{q}}{\theta} &=\lim _{\theta \rightarrow 0} \frac{\left[s \cos \frac{\theta}{2}-\mathbf{v}^{T} \omega \sin \frac{\theta}{2}, s \omega \sin \frac{\theta}{2}+\cos \frac{\theta}{2} \mathbf{v}+\mathbf{v} \times \omega \sin \frac{\theta}{2}\right]^{\mathrm{T}}-\mathbf{q}}{\theta} \\ &=\lim _{\theta \rightarrow 0} \frac{\left[s\left(\cos \frac{\theta}{2}-1\right)-\mathbf{v}^{T} \omega \sin \frac{\theta}{2}, s \omega \sin \frac{\theta}{2}+\left(\cos \frac{\theta}{2}-1\right) \mathbf{v}+\mathbf{v} \times \omega \sin \frac{\theta}{2}\right]^{\mathrm{T}}}{\theta} \\ &=\left[-\frac{1}{2} \mathbf{v}^{T} \boldsymbol{\omega}, \frac{1}{2} s \boldsymbol{\omega}+\frac{1}{2} \mathbf{v} \times \boldsymbol{\omega}\right]^{\mathrm{T}} \\ &=\mathbf{q} \otimes\left[0, \frac{1}{2} \boldsymbol{\omega}\right]^{\mathrm{T}} \end{aligned} θ0limθqΔqq=θ0limθ[scos2θvTωsin2θ,sωsin2θ+cos2θv+v×ωsin2θ]Tq=θ0limθ[s(cos2θ1)vTωsin2θ,sωsin2θ+(cos2θ1)v+v×ωsin2θ]T=[21vTω,21sω+21v×ω]T=q[0,21ω]T

因此,若角速度为 ω ,那么旋转的时间导数即为:(8)

q˙=q⊗[0,12ω]T \dot{\mathbf{q}}=\mathbf{q} \otimes\left[0, \frac{1}{2} \omega\right]^{\mathrm{T}} q˙=q[0,21ω]T

2 📖 一些求导函数

2-1 🔖 扰动模型

注意:θ\thetaθ表示旋转量,aaa表示旋转轴
ϕ=θa \phi=\theta \boldsymbol{a} ϕ=θa

ln⁡(exp⁡(ϕ1∧)exp⁡(ϕ2∧))∨≈{Jl(ϕ2)−1ϕ1+ϕ2 if ϕ1 is small Jr(ϕ1)−1ϕ2+ϕ1 if ϕ2 is small.  \ln \left(\exp \left(\phi_{1}^{\wedge}\right) \exp \left(\phi_{2}^{\wedge}\right)\right)^{\vee} \approx\left\{\begin{array}{ll} \boldsymbol{J}_{l}\left(\phi_{2}\right)^{-1} \phi_{1}+\phi_{2} & \text { if } \phi_{1} \text { is small } \\ J_{r}\left(\phi_{1}\right)^{-1} \phi_{2}+\phi_{1} & \text { if } \phi_{2} \text { is small. } \end{array}\right. ln(exp(ϕ1)exp(ϕ2)){Jl(ϕ2)1ϕ1+ϕ2Jr(ϕ1)1ϕ2+ϕ1 if ϕ1 is small  if ϕ2 is small. 

当对一个旋转矩阵R2R_2R2 (李代数为 ϕ2{\phi}_2ϕ2 )左乘一个微小旋转矩阵R1R_1R1 (李代数为 ϕ1\phi_{1}ϕ1)时,可以近似地看作,在原有的李代数 ϕ2{\phi}_2ϕ2 上,加上了一项Jl(ϕ2)−1ϕ1\boldsymbol{J}_{l}\left(\boldsymbol{\phi}_{2}\right)^{-1} \boldsymbol{\phi}_{1}Jl(ϕ2)1ϕ1 。同理,第二个近似描述了右乘一个微小位移的情况。

其中左乘雅可比
Jl=J=sin⁡θθI+(1−sin⁡θθ)aaT+1−cos⁡θθa∧ \boldsymbol{J}_{l}=\boldsymbol{J}=\frac{\sin \theta}{\theta} \boldsymbol{I}+\left(1-\frac{\sin \theta}{\theta}\right) \boldsymbol{a} \boldsymbol{a}^{T}+\frac{1-\cos \theta}{\theta} \boldsymbol{a}^{\wedge} Jl=J=θsinθI+(1θsinθ)aaT+θ1cosθa
逆为:
Jl−1=θ2cot⁡θ2I+(1−θ2cot⁡θ2)aaT−θ2a∧ \boldsymbol{J}_{l}^{-1}=\frac{\theta}{2} \cot \frac{\theta}{2} \boldsymbol{I}+\left(1-\frac{\theta}{2} \cot \frac{\theta}{2}\right) \boldsymbol{a} \boldsymbol{a}^{T}-\frac{\theta}{2} \boldsymbol{a}^{\wedge} Jl1=2θcot2θI+(12θcot2θ)aaT2θa

一般直接用下面形式的多:
Jr(ϕ⃗)=I−1−cos⁡(∥ϕ⃗∥)∥ϕ⃗∥2ϕ⃗∧+∥ϕ⃗∥−sin⁡(∥ϕ⃗∥)∥ϕ⃗∥3(ϕ⃗∧)2 \mathbf{J}_{r}(\vec{\phi})=\mathbf{I}-\frac{1-\cos (\|\vec{\phi}\|)}{\|\vec{\phi}\|^{2}} \vec{\phi}^{\wedge}+\frac{\|\vec{\phi}\|-\sin (\|\vec{\phi}\|)}{\|\vec{\phi}\|^{3}}\left(\vec{\phi}^{\wedge}\right)^{2} Jr(ϕ)=Iϕ21cos(ϕ)ϕ+ϕ3ϕsin(ϕ)(ϕ)2

Jr−1(ϕ⃗)=I+12ϕ⃗∧+(1∥ϕ⃗∥2−1+cos⁡(∥ϕ⃗∥)2⋅∥ϕ⃗∥⋅sin⁡(∥ϕ⃗∥))(ϕ⃗∧)2 \mathbf{J}_{r}^{-1}(\vec{\phi})=\mathbf{I}+\frac{1}{2} \vec{\phi}^{\wedge}+\left(\frac{1}{\|\vec{\phi}\|^{2}}-\frac{1+\cos (\|\vec{\phi}\|)}{2 \cdot\|\vec{\phi}\| \cdot \sin (\|\vec{\phi}\|)}\right)\left(\vec{\phi}^{\wedge}\right)^{2} Jr1(ϕ)=I+21ϕ+(ϕ212ϕsin(ϕ)1+cos(ϕ))(ϕ)2

这种形式的写法,更贴近代码,容易对比

右乘雅可比
Jr(ϕ)=Jl(−ϕ) \boldsymbol{J}_{r}(\boldsymbol{\phi})=\boldsymbol{J}_{l}(-\boldsymbol{\phi}) Jr(ϕ)=Jl(ϕ)

2-1 🔖 旋转矩阵R的左右扰动求导

旋转点的左扰动雅可比:
∂(Rp)∂φ=lim⁡φ→0exp⁡(φ∧)exp⁡(ϕ∧)p−exp⁡(ϕ∧)pφ=lim⁡φ→0(I+φ∧)exp⁡(ϕ∧)p−exp⁡(ϕ∧)pφ=lim⁡φ→0φ∧Rpφ=lim⁡φ→0−(Rp)∧φφ=−(Rp)∧. \begin{aligned} \frac{\partial(\mathbf{R} \mathbf{p})}{\partial \boldsymbol{\varphi}} &=\lim _{\varphi \rightarrow 0} \frac{\exp \left(\boldsymbol{\varphi}^{\wedge}\right) \exp \left(\boldsymbol{\phi}^{\wedge}\right) \mathbf{p}-\exp \left(\boldsymbol{\phi}^{\wedge}\right) \mathbf{p}}{\boldsymbol{\varphi}} \\ &=\lim _{\varphi \rightarrow 0} \frac{\left(\mathbf{I}+\boldsymbol{\varphi}^{\wedge}\right) \exp \left(\boldsymbol{\phi}^{\wedge}\right) \mathbf{p}-\exp \left(\boldsymbol{\phi}^{\wedge}\right) \mathbf{p}}{\boldsymbol{\varphi}} \\ &=\lim _{\varphi \rightarrow 0} \frac{\boldsymbol{\varphi}^{\wedge} \mathbf{R} \mathbf{p}}{\boldsymbol{\varphi}}=\lim _{\varphi \rightarrow 0} \frac{-(\mathbf{R} \mathbf{p})^{\wedge} \boldsymbol{\varphi}}{\boldsymbol{\varphi}}=-(\mathbf{R} \mathbf{p})^{\wedge} . \end{aligned} φ(Rp)=φ0limφexp(φ)exp(ϕ)pexp(ϕ)p=φ0limφ(I+φ)exp(ϕ)pexp(ϕ)p=φ0limφφRp=φ0limφ(Rp)φ=(Rp).
旋转点的右扰动雅可比:
∂(Rp)∂φ=lim⁡φ→0Rexp⁡(φ∧)p−Rpφ=lim⁡φ→0R(I+φ∧)p−Rpφ=lim⁡φ→0Rφ∧pφ=lim⁡φ→0−Rp∧φφ=−Rp∧ \begin{aligned} \frac{\partial(\mathbf{R} \mathbf{p})}{\partial \varphi} &=\lim _{\varphi \rightarrow 0} \frac{\mathbf{R} \exp \left(\boldsymbol{\varphi}^{\wedge}\right) \mathbf{p}-\mathbf{R} \mathbf{p}}{\varphi} \\ &=\lim _{\varphi \rightarrow 0} \frac{\mathbf{R}\left(\mathbf{I}+\boldsymbol{\varphi}^{\wedge}\right) \mathbf{p}-\mathbf{R} \mathbf{p}}{\varphi} \\ &=\lim _{\varphi \rightarrow 0} \frac{\mathbf{R} \boldsymbol{\varphi}^{\wedge} \mathbf{p}}{\varphi}=\lim _{\varphi \rightarrow 0} \frac{-\mathbf{R} \mathbf{p}^{\wedge} \boldsymbol{\varphi}}{\varphi}=-\mathbf{R} \mathbf{p}^{\wedge} \end{aligned} φ(Rp)=φ0limφRexp(φ)pRp=φ0limφR(I+φ)pRp=φ0limφRφp=φ0limφRpφ=Rp

2-2 🔖 R1∗R2R_{1}*R_{2}R1R2R2R_{2}R2求导

下面用到了有扰动雅克比矩阵的近似等式
∂R1R2∂R2=lim⁡ϕ→0ln⁡(R1R2exp⁡(ϕ∧))−ln⁡(R1R2)ϕ=lim⁡ϕ→0ln⁡(R1R2)+Jr−1(ln⁡(R1R2))ϕ−ln⁡(R1R2)ϕ=Jr−1(ln⁡(R1R2))      (1) \begin{aligned} \frac{\partial \mathbf{R}_{1} \mathbf{R}_{2}}{\partial \mathbf{R}_{2}} &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2} \exp \left(\phi^{\wedge}\right)\right)-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)}{\phi} \\ &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)+\mathrm{J}_{r}^{-1}\left(\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)\right) \phi-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)}{\phi} \\ &=\mathrm{J}_{r}^{-1}\left(\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)\right) \end{aligned} \space\space\space\space\space\space(1) R2R1R2=ϕ0limϕln(R1R2exp(ϕ))ln(R1R2)=ϕ0limϕln(R1R2)+Jr1(ln(R1R2))ϕln(R1R2)=Jr1(ln(R1R2))      (1)

ln⁡(R1R2)∨\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}ln(R1R2) :将矩阵R1R2\bf R_{1}R_{2}R1R2变成向量形式(上面整个过程都是在向量形式下进行的求导)

Jr−1(ln⁡(RR2)∨)\mathbf{J}_{r}^{-1}\left(\ln \left(\mathbf{R} \mathbf{R}_{2}\right)^{\vee}\right)Jr1(ln(RR2)): 以ln⁡(R1R2)∨\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}ln(R1R2) 为自变量的右雅可比(上面是求逆了)

2-3 🔖 R1∗R2R_{1}*R_{2}R1R2R1R_{1}R1求导

下面利用到了伴随矩阵的一个变式
exp⁡(ϕ∧)R=Rexp⁡((RTϕ)∧) \exp \left(\phi^{\wedge}\right) \mathbf{R} = \mathbf{R} \exp \left(\left(\mathbf{R}^{T} \phi\right)^{\wedge}\right) exp(ϕ)R=Rexp((RTϕ))

∂R1R2∂R1=lim⁡ϕ→0ln⁡(R1exp⁡(ϕ∧)R2)−ln⁡(R1R2)ϕ=lim⁡ϕ→0ln⁡(R1R2exp⁡((R2Tϕ)∧))−ln⁡(R1R2)ϕ=Jr−1(ln⁡(R1R2))R2T      (2) \begin{aligned} \frac{\partial \mathbf{R}_{1} \mathbf{R}_{2}}{\partial \mathbf{R}_{1}} &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \exp \left(\phi^{\wedge}\right) \mathbf{R}_{2}\right)-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)}{\phi} \\ &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2} \exp \left(\left(\mathbf{R}_{2}^{T} \phi\right)^{\wedge}\right)\right)-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)}{\phi} \\ &=J_{r}^{-1}\left(\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)\right) \mathbf{R}_{2}^{T} \end{aligned}\space\space\space\space\space\space(2) R1R1R2=ϕ0limϕln(R1exp(ϕ)R2)ln(R1R2)=ϕ0limϕln(R1R2exp((R2Tϕ)))ln(R1R2)=Jr1(ln(R1R2))R2T      (2)

ln⁡(R1R2)∨\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}ln(R1R2) :将矩阵R1R2\bf R_{1}R_{2}R1R2变成向量形式(上面整个过程都是在向量形式下进行的求导)

Jr−1(ln⁡(RR2)∨)\mathbf{J}_{r}^{-1}\left(\ln \left(\mathbf{R} \mathbf{R}_{2}\right)^{\vee}\right)Jr1(ln(RR2)): 以ln⁡(R1R2)∨\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}ln(R1R2) 为自变量的右雅可比(上面是求逆了)

3 📖 vee(∨\vee)和hat(∧\wedge

3-1 🔖 vee和hat介绍

hat运算符∧\wedge: (反对称算子)把 3 维实向量映射为 3×3 反对称阵;

vee 运算符∨\vee:把 3×3 反对称映射为 3 维实向量;

ω∧=[ω1ω2ω3]∧=[0−ω3ω2ω30−ω1−ω2ω10]=W \boldsymbol{\omega}^{\wedge}=\left[\begin{array}{l} \omega_{1} \\ \omega_{2} \\ \omega_{3} \end{array}\right]^{\wedge}=\left[\begin{array}{ccc} 0 & -\omega_{3} & \omega_{2} \\ \omega_{3} & 0 & -\omega_{1} \\ -\omega_{2} & \omega_{1} & 0 \end{array}\right]=\mathbf{W} ω=ω1ω2ω3=0ω3ω2ω30ω1ω2ω10=W

W∨=[0−ω3ω2ω30−ω1−ω2ω10]∨=[ω1ω2ω3]=ω \mathbf{W}^{\vee}=\left[\begin{array}{ccc} 0 & -\omega_{3} & \omega_{2} \\ \omega_{3} & 0 & -\omega_{1} \\ -\omega_{2} & \omega_{1} & 0 \end{array}\right]^{\vee}=\left[\begin{array}{c} \omega_{1} \\ \omega_{2} \\ \omega_{3} \end{array}\right]=\boldsymbol{\omega} W=0ω3ω2ω30ω1ω2ω10=ω1ω2ω3=ω

关于 hat 运算符的一个性质
a∧⋅b=−b∧⋅a,∀a,b∈R3 \mathbf{a}^{\wedge} \cdot \mathbf{b}=-\mathbf{b}^{\wedge} \cdot \mathbf{a}, \quad \forall \mathbf{a}, \mathbf{b} \in R^{3} ab=ba,a,bR3

3-2 🔖 exp()和log()操作

指数映射exp⁡(∙)\exp (\bullet)exp()R3×1R^{3 \times 1}R3×1映射到R3×3R^{3 \times 3}R3×3
exp⁡(ϕ⃗∧)=I+sin⁡(∥ϕ⃗∥)∥ϕ⃗∥ϕ⃗∧+1−cos⁡(∥ϕ⃗∥)∥ϕ⃗∥2(ϕ⃗∧)2 \exp \left(\vec{\phi}^{\wedge}\right)=\mathbf{I}+\frac{\sin (\|\vec{\phi}\|)}{\|\vec{\phi}\|} \vec{\phi}^{\wedge}+\frac{1-\cos (\|\vec{\phi}\|)}{\|\vec{\phi}\|^{2}}\left(\vec{\phi}^{\wedge}\right)^{2} exp(ϕ)=I+ϕsin(ϕ)ϕ+ϕ21cos(ϕ)(ϕ)2

ϕ⃗\vec{\phi}ϕ是小量时,有一阶近似如下:
exp⁡(ϕ⃗∧)≈I+ϕ⃗∧ \exp \left(\vec{\phi}^{\wedge}\right) \approx \mathbf{I}+\vec{\phi}^{\wedge} exp(ϕ)I+ϕ

对数映射log⁡(∙)\log (\bullet)log()R3×3R^{3 \times 3}R3×3映射到R3×1R^{3 \times 1}R3×1
log⁡(R)=φ⋅(R−RT)2sin⁡(φ) \log (\mathbf{R})=\frac{\varphi \cdot\left(\mathbf{R}-\mathbf{R}^{T}\right)}{2 \sin (\varphi)} log(R)=2sin(φ)φ(RRT)

其中φ=cos⁡−1(tr⁡(R)−12)\varphi=\cos ^{-1}\left(\frac{\operatorname{tr}(R)-1}{2}\right)φ=cos1(2tr(R)1)

其他
log⁡(R)∨=φ⋅a \log (\mathbf{R})^{\vee}=\varphi \cdot \mathbf{a} log(R)=φa

φ\varphiφ:旋转角

a\mathbf aa:旋转轴单位矢量,有a=(R−RT2sin⁡(φ))∨\mathbf{a}=\left(\frac{\mathbf{R}-\mathbf{R}^{T}}{2 \sin (\varphi)}\right)^{\vee}a=(2sin(φ)RRT)

小量下的近似表达

对于 3 维实向量ϕ⃗\vec{\phi}ϕ和一个小量δϕ⃗\delta \vec{\phi}δϕ,有如下性质:
Exp⁡(ϕ⃗+δϕ⃗)≈Exp⁡(ϕ⃗)⋅Exp⁡(Jr(ϕ⃗)⋅δϕ⃗)Log⁡(Exp⁡(ϕ⃗)⋅Exp⁡(δϕ⃗))=ϕ⃗+Jr−1(ϕ⃗)⋅δϕ⃗ \operatorname{Exp}(\vec{\phi}+\delta \vec{\phi}) \approx \operatorname{Exp}(\vec{\phi}) \cdot \operatorname{Exp}\left(\mathbf{J}_{r}(\vec{\phi}) \cdot \delta \vec{\phi}\right) \\ \\ \operatorname{Log} (\operatorname{Exp}(\vec{\phi}) \cdot \operatorname{Exp}(\delta \vec{\phi}))=\vec{\phi}+\mathbf{J}_{r}^{-1}(\vec{\phi}) \cdot \delta \vec{\phi} Exp(ϕ+δϕ)Exp(ϕ)Exp(Jr(ϕ)δϕ)Log(Exp(ϕ)Exp(δϕ))=ϕ+Jr1(ϕ)δϕ

注意
Exp(ϕ)⁡=exp⁡(ϕ∧) \operatorname{Exp(\phi)}=\exp \left({\phi}^{\wedge}\right) Exp(ϕ)=exp(ϕ)
在等号后面的exp内部还需要取反对称运算,同理 Log(R)⁡=log(R)⁡\operatorname{Log(R)}=\operatorname{log(R)}Log(R)=log(R)

其中:
Jr(ϕ⃗)=I−1−cos⁡(∥ϕ⃗∥)∥ϕ⃗∥2ϕ⃗∧+∥ϕ⃗∥−sin⁡(∥ϕ⃗∥)∥ϕ⃗∥3(ϕ⃗∧)2 \mathbf{J}_{r}(\vec{\phi})=\mathbf{I}-\frac{1-\cos (\|\vec{\phi}\|)}{\|\vec{\phi}\|^{2}} \vec{\phi}^{\wedge}+\frac{\|\vec{\phi}\|-\sin (\|\vec{\phi}\|)}{\|\vec{\phi}\|^{3}}\left(\vec{\phi}^{\wedge}\right)^{2} Jr(ϕ)=Iϕ21cos(ϕ)ϕ+ϕ3ϕsin(ϕ)(ϕ)2

Jr−1(ϕ⃗)=I+12ϕ⃗∧+(1∥ϕ⃗∥2−1+cos⁡(∥ϕ⃗∥)2⋅∥ϕ⃗∥⋅sin⁡(∥ϕ⃗∥))(ϕ⃗∧)2 \mathbf{J}_{r}^{-1}(\vec{\phi})=\mathbf{I}+\frac{1}{2} \vec{\phi}^{\wedge}+\left(\frac{1}{\|\vec{\phi}\|^{2}}-\frac{1+\cos (\|\vec{\phi}\|)}{2 \cdot\|\vec{\phi}\| \cdot \sin (\|\vec{\phi}\|)}\right)\left(\vec{\phi}^{\wedge}\right)^{2} Jr1(ϕ)=I+21ϕ+(ϕ212ϕsin(ϕ)1+cos(ϕ))(ϕ)2

3-3 🔖 一些关于旋转矩阵的性质(⭐️)

R对时间的导数
R˙=Rω∧ \dot{\mathbf{R}}=\mathbf{R} \omega^{\wedge} R˙=Rω
指数映射的 Adjoint 性质
R⋅Exp⁡(ϕ⃗)⋅RT=exp⁡(Rϕ⃗∧RT)=Exp⁡(Rϕ⃗)⇔Exp⁡(ϕ⃗)⋅R=R⋅Exp⁡(RTϕ⃗) \begin{array}{l} \mathbf{R} \cdot \operatorname{Exp}(\vec{\phi}) \cdot \mathbf{R}^{T}=\exp \left(\mathbf{R} \vec{\phi}^{\wedge} \mathbf{R}^{T}\right)=\operatorname{Exp}(\mathbf{R} \vec{\phi}) \\ \Leftrightarrow \operatorname{Exp}(\vec{\phi}) \cdot \mathbf{R}=\mathbf{R} \cdot \operatorname{Exp}\left(\mathbf{R}^{T} \vec{\phi}\right) \end{array} RExp(ϕ)RT=exp(RϕRT)=Exp(Rϕ)Exp(ϕ)R=RExp(RTϕ)
其他
(Rϕ⃗)∧=Rϕ⃗∧RT (\mathbf{R} \vec{\phi})^{\wedge}=\mathbf{R} \vec{\phi}^{\wedge} \mathbf{R}^{T} (Rϕ)=RϕRT

4 📖欧拉角与旋转矩阵的转换关系

4-1 🔖 基础概念

内在旋转(intrinsic rotations)和外在旋转(extrinsic rotations)

  • 内在旋转每次旋转围绕的轴是上次旋转之后坐标系的某个轴。
  • 外在旋转每次旋转的轴是固定坐标系中的轴。

内在旋转与外在旋转的转换关系:互换第一次和第三次旋转的位置则两者结果相同。例如Z-Y-X旋转的内部旋转和X-Y-Z旋转的外部旋转的旋转矩阵相同

下图是z-x-z的内在旋转和外在旋转示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owcwHSbF-1626793670146)(picture/20190927174150276.png)]

旋转角度是左手系还是右手系

使用右手的大拇指指向旋转轴,其他4个手指在握拳过程中的指向便是正的角度

  • 右手系是逆时针
  • 左手系是顺时针

Roll(翻滚角)、Pitch(俯仰角)、Yaw(偏航角)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQjJOeI5-1626793670149)(picture/20210422145553709.png)]
在这里插入图片描述

  • 绕x轴旋转角度ψ\psiψ: Roll(翻滚角)
  • 绕y轴旋转角度θ\thetaθ:Pitch(俯仰角)
  • 绕z轴旋转角度ϕ\phiϕ:Yaw(偏航角)

4-2 🔖 不同轴的欧拉角转换成旋转矩阵

在这里插入图片描述

蓝色是起始坐标系,而红色的是旋转之后的坐标系

注意:上面的角度符号与下面完全没关系,不要搞混

右手系下,逆时针旋转的角度为正,绕不同轴的旋转结果:
Rx(α)=[1000cos⁡θ−sin⁡θ0sin⁡θcos⁡θ]Ry(θ)=[cos⁡θ0sin⁡θ010−sin⁡θ0cos⁡θ]Rz(θ)=[cos⁡θ−sin⁡θ0sin⁡θcos⁡θ0001] \begin{aligned} &R_{x}(\alpha)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\ 0 & \sin \theta & \cos \theta \end{array}\right] \\ &R_{y}(\theta)=\left[\begin{array}{ccc} \cos \theta & 0 & \sin \theta \\ 0 & 1 & 0 \\ -\sin \theta & 0 & \cos \theta \end{array}\right] \\ &R_{z}(\theta)=\left[\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right] \end{aligned} Rx(α)=1000cosθsinθ0sinθcosθRy(θ)=cosθ0sinθ010sinθ0cosθRz(θ)=cosθsinθ0sinθcosθ0001

这里也写上左手系:
Rx(θ)=[1000cos⁡θsin⁡θ0−sin⁡θcos⁡θ]Ry(θ)=[cos⁡θ0−sin⁡θ010sin⁡θ0cos⁡θ]Rz(θ)=[cos⁡θsin⁡θ0−sin⁡θcos⁡θ0001] \begin{aligned} &R_{x}(\theta)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & \sin \theta \\ 0 & -\sin \theta & \cos \theta \end{array}\right] \\ &R_{y}(\theta)=\left[\begin{array}{ccc} \cos \theta & 0 & -\sin \theta \\ 0 & 1 & 0 \\ \sin \theta & 0 & \cos \theta \end{array}\right] \\ &R_{z}(\theta)=\left[\begin{array}{ccc} \cos \theta & \sin \theta & 0 \\ -\sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right] \end{aligned} Rx(θ)=1000cosθsinθ0sinθcosθRy(θ)=cosθ0sinθ010sinθ0cosθRz(θ)=cosθsinθ0sinθcosθ0001
即:所有的sinθ\bf sin{\theta}sinθ都变号

所以,容易得到,欧拉角转旋转矩阵如下:
R=Rz(γ)Ry(β)Rx(α)=[cos⁡βcos⁡γsin⁡αsin⁡βcos⁡γ−cos⁡αsin⁡γcos⁡αsin⁡βcos⁡γ+sin⁡αsin⁡γcos⁡βsin⁡γsin⁡αsin⁡βsin⁡γ+cos⁡αcos⁡γcos⁡αsin⁡βsin⁡γ−sin⁡αcos⁡γ−sin⁡βsin⁡αcos⁡βcos⁡αcos⁡β] \begin{aligned} R &=R_{z}(\gamma) R_{y}(\beta) R_{x}(\alpha) \\ &=\left[\begin{array}{ccc} \cos \beta \cos \gamma & \sin \alpha \sin \beta \cos \gamma-\cos \alpha \sin \gamma & \cos \alpha \sin \beta \cos \gamma+\sin \alpha \sin \gamma \\ \cos \beta \sin \gamma & \sin \alpha \sin \beta \sin \gamma+\cos \alpha \cos \gamma & \cos \alpha \sin \beta \sin \gamma-\sin \alpha \cos \gamma \\ -\sin \beta & \sin \alpha \cos \beta & \cos \alpha \cos \beta \end{array}\right] \end{aligned} R=Rz(γ)Ry(β)Rx(α)=cosβcosγcosβsinγsinβsinαsinβcosγcosαsinγsinαsinβsinγ+cosαcosγsinαcosβcosαsinβcosγ+sinαsinγcosαsinβsinγsinαcosγcosαcosβ

即:先绕x轴旋转α\alphaα,再绕y轴旋转β\betaβ,最后绕z轴旋转γ\gammaγ

线性近似

θ≈0\theta \approx 0θ0时有sin⁡θ≈θ,cos⁡θ≈1\sin \theta \approx \theta, \cos \theta \approx 1sinθθ,cosθ1因此当α,β,γ≈0\alpha, \beta, \gamma \approx 0α,β,γ0时:
R(α,β,γ)≈(1αβ−γαγ+β0γαβγ+1βγ−α0−βα100001)≈(1−γβ0γ1−α0−βα100001)=R^(α,β,γ). \begin{aligned} \mathbf{R}(\alpha, \beta, \gamma) & \approx\left(\begin{array}{cccc} 1 & \alpha \beta-\gamma & \alpha \gamma+\beta & 0 \\ \gamma & \alpha \beta \gamma+1 & \beta \gamma-\alpha & 0 \\ -\beta & \alpha & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \\ & \approx\left(\begin{array}{cccc} 1 & -\gamma & \beta & 0 \\ \gamma & 1 & -\alpha & 0 \\ -\beta & \alpha & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right)=\hat{\mathbf{R}}(\alpha, \beta, \gamma) . \end{aligned} R(α,β,γ)1γβ0αβγαβγ+1α0αγ+ββγα1000011γβ0γ1α0βα100001=R^(α,β,γ).

4-3 🔖 旋转矩阵求解欧拉角

R=[r11r12r13r21r22r23r31r32r33] R=\left[\begin{array}{lll} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{array}\right] R=r11r21r31r12r22r32r13r23r33

对比上一节的旋转矩阵求解得到:
θx=atan⁡2(r32,r33)θy=atan⁡2(−r31,r322+r332)θz=atan⁡2(r21,r11) \begin{gathered} \theta_{x}=\operatorname{atan} 2\left(r_{32}, r_{33}\right) \\ \theta_{y}=\operatorname{atan} 2\left(-r_{31}, \sqrt{r_{32}^{2}+r_{33}^{2}}\right) \\ \theta_{z}=\operatorname{atan} 2\left(r_{21}, r_{11}\right) \end{gathered} θx=atan2(r32,r33)θy=atan2(r31,r322+r332)θz=atan2(r21,r11)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值