从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
一. 向量的内积与外积
主要针对三维向量,两个三维向量必定共面;
内积 :
a
⋅
b
=
a
1
b
1
+
a
2
b
2
+
a
3
b
3
=
∑
i
=
1
3
a
i
b
i
=
∣
a
∣
∣
b
∣
cos
⟨
a
,
b
⟩
a\cdot b=a_1b_1+a_2b_2+a_3b_3=\sum_{i=1}^3a_ib_i=\vert a\vert\vert b\vert\cos\left\langle a,b\right\rangle
a⋅b=a1b1+a2b2+a3b3=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
为标量
外积/叉乘 :
a
×
b
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
=
a
∧
b
a\times b=\begin{bmatrix}\begin{array}{ccc}0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{array}\end{bmatrix}b=a^{\wedge}\;b
a×b=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=a∧b
外积结果为矢量,此矢量与向量
a
a
a 和向量
b
b
b 都垂直;它的大小为
∣
a
∣
∣
b
∣
sin
⟨
a
,
b
⟩
|a||b|\sin\left\langle a,b\right\rangle
∣a∣∣b∣sin⟨a,b⟩,大小等于向量
a
a
a,
b
b
b 组成的平行四边形面积大小;
a ∧ a^{\wedge} a∧ 为向量 a a a 的反对称矩阵 A A A;(任意向量都对应着唯一的一个反对称矩阵)
a
∧
=
A
a^{\wedge} = A
a∧=A
A
∨
=
a
A^{\vee} = a
A∨=a
二. 旋转与平移
2.1 旋转表示 — 旋转矩阵R
有坐标系 a a a,基为 a = [ a 1 , a 2 , a 3 ] a=\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix} a=[a1,a2,a3] (注:为3 × \times × 3的单位正交矩阵) ,在坐标系 a a a 下,有一个空间点 x x x,坐标为 [ x 1 x 2 x 3 ] \begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix} ⎣⎡x1x2x3⎦⎤ ,坐标系 a a a 经过旋转后为坐标系 b b b,基为 b = [ b 1 , b 2 , b 3 ] b=\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix} b=[b1,b2,b3], x x x点在坐标系 b b b 下的坐标为 [ x 1 ′ x 2 ′ x 3 ′ ] \begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix} ⎣⎡x1′x2′x3′⎦⎤ 。对于 x x x点,它并未发生位置变换,向量关系没有改变,所以有下式成立:
[
a
1
,
a
2
,
a
3
]
[
x
1
x
2
x
3
]
=
[
b
1
,
b
2
,
b
3
]
[
x
1
′
x
2
′
x
3
′
]
\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;=\;\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}
[a1,a2,a3]⎣⎡x1x2x3⎦⎤=[b1,b2,b3]⎣⎡x1′x2′x3′⎦⎤
点
x
x
x在坐标系
b
b
b 下便可以通过如下表示:
[
x
1
′
x
2
′
x
3
′
]
=
(
[
b
1
,
b
2
,
b
3
]
)
−
1
[
a
1
,
a
2
,
a
3
]
[
x
1
x
2
x
3
]
=
(
[
b
1
,
b
2
,
b
3
]
)
T
[
a
1
,
a
2
,
a
3
]
[
x
1
x
2
x
3
]
=
(
[
b
1
b
2
b
3
]
[
a
1
,
a
2
,
a
3
]
)
[
x
1
x
2
x
3
]
=
R
b
a
[
x
1
x
2
x
3
]
\begin{array}{l}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}={(\;\begin{bmatrix}b_1,&b_2,&b_3\end{bmatrix})}^{-1}\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;={(\;\left[\begin{array}{clc}b_1,&b_2,&b_3\end{array}\right])}^T\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\\;\;\;\;\;\;\;\;\;\;=\left(\begin{bmatrix}b_1\\b_2\\b_3\end{bmatrix}\begin{bmatrix}a_1,&a_2,&a_3\end{bmatrix}\right)\;\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;=\;R_{ba}\;\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\;\\\end{array}
⎣⎡x1′x2′x3′⎦⎤=([b1,b2,b3])−1[a1,a2,a3]⎣⎡x1x2x3⎦⎤=([b1,b2,b3])T[a1,a2,a3]⎣⎡x1x2x3⎦⎤=⎝⎛⎣⎡b1b2b3⎦⎤[a1,a2,a3]⎠⎞⎣⎡x1x2x3⎦⎤=Rba⎣⎡x1x2x3⎦⎤
即:
[
x
1
′
x
2
′
x
3
′
]
=
R
b
a
[
x
1
x
2
x
3
]
\begin{array}{l}\begin{bmatrix}x_1'\\x_2'\\x_3'\end{bmatrix}=\;R_{ba}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\\end{array}
⎣⎡x1′x2′x3′⎦⎤=Rba⎣⎡x1x2x3⎦⎤
(注:直角坐标系的基是3
×
\times
× 3的正交矩阵,行列式为1,并相互正交,为单位正交基;
基与基相乘依旧为正交基,有
a
T
a
=
I
a
−
1
=
a
T
\begin{array}{l}a^Ta=I\;\;\;a^{-1}=a^T\\\end{array}
aTa=Ia−1=aT )
旋转矩阵即为 R b a R_{ba} Rba ,称坐标系 a a a 到 b b b 的旋转矩阵
2.2 平移向量
向量
χ
\chi
χ 经过旋转和平移之后为
χ
′
\chi'
χ′ ,其中旋转矩阵为
R
R
R ,平移向量为
t
=
[
t
1
t
2
t
3
]
t=\begin{bmatrix}t_1\\t_2\\t_3\end{bmatrix}
t=⎣⎡t1t2t3⎦⎤
χ
′
=
R
χ
+
t
\chi'=R\chi+t
χ′=Rχ+t
2.3 变换矩阵T与齐次坐标
为了方便进行坐标系变换中的乘法运算,我们引入变换矩阵
T
=
[
R
t
0
T
1
]
T=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}
T=[R0Tt1];为了对其维数,引入齐次坐标
[
X
′
1
]
\begin{bmatrix}X^{'}\\1\end{bmatrix}
[X′1] ,则有:
[
X
′
1
]
=
[
R
t
0
T
1
]
[
X
1
]
=
T
[
X
1
]
\begin{bmatrix}X^{'}\\1\end{bmatrix}\;=\;\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X\\1\end{bmatrix}\;=T\begin{bmatrix}X\\1\end{bmatrix}
[X′1]=[R0Tt1][X1]=T[X1]
2.4 旋转表示 — 旋转向量与欧拉角
旋转向量
任意旋转可以通过一个旋转轴和旋转角表示;即可以通过旋转向量(或角轴,为三维向量)表示,旋转向量的方向与旋转轴方向一至,模长为旋转角度;
假设单位向量
n
=
[
n
1
n
2
n
3
]
n=\begin{bmatrix}n_1\\n_2\\n_3\end{bmatrix}
n=⎣⎡n1n2n3⎦⎤ 与 旋转轴方向一至,旋转角度为
θ
\theta
θ ,则旋转向量为
θ
n
\theta n
θn
旋转向量转换到旋转矩阵R :(罗德里格斯公式)
R
=
cos
(
θ
I
)
+
(
1
−
cos
θ
)
n
n
T
+
sin
θ
n
∧
R\;=\cos\left(\theta I\right)\;+\;(1-\cos\theta)nn^T\;+\;\sin\theta n^{\wedge}
R=cos(θI)+(1−cosθ)nnT+sinθn∧
欧拉角
能直观的表示旋转,但是会出现万向锁问题
- 绕 Z 轴转,偏航角 yaw
- 绕 Y 轴转,俯仰角 pitch
- 绕 X 轴转,翻滚角 roll
2.5 旋转表示 — 四元数
2.5.1 四元数
四元数用 q = [ q 0 q 1 q 2 q 3 ] = [ s v ] q=\begin{bmatrix}q_0\\q_1\\q_2\\q_3\end{bmatrix}=\begin{bmatrix}s\\v\end{bmatrix} q=⎣⎢⎢⎡q0q1q2q3⎦⎥⎥⎤=[sv] 四维向量表示 ; q 0 q_0 q0 , s s s 为实部, [ q 1 , q 2 , q 3 ] T \begin{bmatrix}q_1,&q_2,&q_3\end{bmatrix}^T [q1,q2,q3]T , v v v 为虚部;
旋转向量 变换到 四元数q:
q
=
[
cos
θ
2
,
n
sin
θ
2
]
T
q={\lbrack\cos\frac\theta2,n\sin\frac\theta2\rbrack}^T
q=[cos2θ,nsin2θ]T
四元数
q
q
q 到旋转矩阵
R
R
R 的变换 :
R
=
v
v
T
+
s
2
I
+
2
s
v
∧
+
(
v
∧
)
2
R\;=vv^T \;+s^2I+2sv^{\wedge} + ( v^{\wedge}\;)^2
R=vvT+s2I+2sv∧+(v∧)2
2.5.2 四元数对时间的导数
设初始旋转为
q
=
[
s
,
v
]
q = [s, v]
q=[s,v],然后,发生了角轴为
ω
,
θ
\omega,\theta
ω,θ 的旋转(右乘,对应四元数记作
△
q
\bigtriangleup q
△q),那么
q
q
q 相对该旋转的导数为:
因此,若角速度为
ω
\omega
ω,那么旋转的时间导数即为:
除了利用四元数求导,亦可利用李代数进行旋转求导
使用旋转矩阵
R
R
R 时,角速度为
ω
\omega
ω,那么
R
R
R 相对于时间的导数可写作
在优化带有旋转的函数时,通常计算一个增量
ϕ
∈
s
o
(
3
)
\phi \in so(3)
ϕ∈so(3),然后用它更新当前估计值:(由于这个增量并没有指定方向,所以左乘右乘都可以)
表示旋转可以用 矩阵
R
R
R表示,也可以用 四元数表示,是一样的形式进行更新。
2.6 李群与李代数
2.6.1 李群
群:只有一个合法的运算的集合
旋转矩阵
R
R
R 构成特殊正交群
S
O
(
3
)
SO(3)
SO(3)
S
O
(
3
)
=
{
R
∈
R
3
×
3
∣
R
R
T
=
I
,
d
e
t
(
R
)
=
1
}
SO(3)=\{R\in\mathbb{R}^{3\times3}\;\vert\;RR^T=I\;,det(R)\;=\;1\}
SO(3)={R∈R3×3∣RRT=I,det(R)=1}
变换矩阵
T
T
T 构成特殊欧式群
S
E
(
3
)
SE(3)
SE(3)
S
E
(
3
)
=
{
T
=
[
R
t
0
T
1
]
∈
R
4
×
4
∣
R
∈
S
O
(
3
)
,
t
∈
R
3
}
SE(3)=\{T=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\in \mathbb{R}^{4\times4}\;\vert\;R\in SO(3)\;,t\in \mathbb{R}^3\}
SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}
2.6.1 李代数的引出
相机运动过程时,旋转矩阵可以用
R
(
t
)
R(t)
R(t),
R
R
R 关于时间
t
t
t 的函数表示
对于旋转矩阵
R
R
T
=
I
RR^T = I
RRT=I
于是有
R
(
t
)
R
(
t
)
T
=
I
R(t)R(t)^T = I
R(t)R(t)T=I 等式两边对时间求,得
R
.
(
t
)
R
(
t
)
T
+
R
(
t
)
R
.
(
t
)
T
=
0
\overset.R(t)R{(t)}^T\;+\;R(t)\overset.R{(t)}^T\;=\;0
R.(t)R(t)T+R(t)R.(t)T=0
⇒
R
.
(
t
)
R
(
t
)
T
=
−
R
(
t
)
R
.
(
t
)
T
⇒
R
.
(
t
)
R
(
t
)
T
=
−
(
R
.
(
t
)
R
(
t
)
T
)
T
\Rightarrow\overset.R(t)R{(t)}^T\;=\;-R(t)\overset.R{(t)}^T\\\Rightarrow\overset.R(t)R{(t)}^T\;=\;-\left(\overset.R(t)R{(t)}^T\right)^T\\
⇒R.(t)R(t)T=−R(t)R.(t)T⇒R.(t)R(t)T=−(R.(t)R(t)T)T 说明
R
.
(
t
)
R
(
t
)
T
\overset.R(t)R{(t)}^T
R.(t)R(t)T 为反对称矩阵,存在一个三维向量
ϕ
(
t
)
\phi(t)
ϕ(t) 与之对应,有
R
.
(
t
)
R
(
t
)
T
=
ϕ
(
t
)
∧
\overset.R(t)R{(t)}^T=\phi(t)^\wedge
R.(t)R(t)T=ϕ(t)∧ 等式两边右乘
R
(
t
)
R(t)
R(t),得:
R
.
(
t
)
=
ϕ
(
t
)
∧
R
(
t
)
\overset.R(t)=\phi(t)^\wedge R(t)
R.(t)=ϕ(t)∧R(t)
总结:
1. 说明对旋转矩阵求导,等价于在旋转矩阵左乘一个反对称矩阵
如何求得这个反对称矩阵呢 ?
对于
t
0
t_0
t0时刻,
R
(
0
)
=
I
R(0) = I
R(0)=I ,把
R
(
t
)
R(t)
R(t)在
t
=
0
t=0
t=0附近进行一阶泰勒展开:
R
(
t
)
≈
R
(
t
0
)
+
R
.
(
t
0
)
(
t
−
t
0
)
=
R
(
t
0
)
+
ϕ
(
t
0
)
∧
R
(
t
0
)
(
t
−
t
0
)
=
I
+
ϕ
(
t
0
)
∧
t
R(t)\approx R(t_0)+\overset.R(t_0)(t-t_0)=R(t_0)+{\phi(t_0)}^\wedge R(t_0)(t-t_0)\\=I+{\phi(t_0)}^\wedge t
R(t)≈R(t0)+R.(t0)(t−t0)=R(t0)+ϕ(t0)∧R(t0)(t−t0)=I+ϕ(t0)∧t
此为一个关于
R
R
R 的微分方程,且
R
(
0
)
=
I
R(0) = I
R(0)=I,便可解得:
R
(
t
)
=
e
x
p
(
ϕ
0
∧
t
)
R(t)=exp(\phi_0^\wedge t)
R(t)=exp(ϕ0∧t)
2. 说明在 t = 0 t=0 t=0的附近,旋转矩阵可以由 e x p ( ϕ 0 ∧ t ) exp(\phi_0^\wedge t) exp(ϕ0∧t),解出。
给定某个时刻的
R
R
R,我们可以求出一个
ϕ
\phi
ϕ ,描述了
R
R
R 在局部的导数关系;
ϕ
\phi
ϕ 是
S
O
(
3
)
SO(3)
SO(3)对应的李代数
s
o
(
3
)
so(3)
so(3);
R
=
e
x
p
(
ϕ
∧
)
R= exp(\phi^\wedge)
R=exp(ϕ∧)
2.6.2 李代数 s o ( 3 ) so(3) so(3) 与 s e ( 3 ) se(3) se(3)
→
\rightarrow
→ 给定一个
ϕ
\phi
ϕ 可以通过指数映射
e
x
p
(
ϕ
∧
)
exp(\phi^\wedge )
exp(ϕ∧),求出
R
R
R
→
\rightarrow
→ 给定一个
R
R
R 可以通过对数映射,求出
ϕ
\phi
ϕ
R R R的李代数为 s o ( 3 ) so(3) so(3),变换矩阵 T T T 的李代数为 s e ( 3 ) se(3) se(3)
s
o
(
3
)
so(3)
so(3)中的
ϕ
\phi
ϕ 变换到
S
O
(
3
)
SO(3)
SO(3)中的
R
R
R:
R
=
e
x
p
(
ϕ
∧
)
R= exp(\phi^\wedge)
R=exp(ϕ∧)
S
O
(
3
)
SO(3)
SO(3)中的
R
R
R 变换到
s
o
(
3
)
so(3)
so(3)中的
ϕ
\phi
ϕ:
ϕ
=
ln
(
R
)
∨
\phi= {\ln\left(R\right)}^\vee
ϕ=ln(R)∨
总结:
s
o
(
3
)
so(3)
so(3) 这个李代数集合中的元素为 三维向量
ϕ
\phi
ϕ 或者是三维反对称矩阵
ϕ
∧
\phi^\wedge
ϕ∧
s e ( 3 ) se(3) se(3) 这个李代数集合中的元素为 六维向量 ξ = [ ρ ϕ ] \xi=\begin{bmatrix}\rho\\\phi\end{bmatrix} ξ=[ρϕ] ,其中 ρ \rho ρ 表示平移, ϕ \phi ϕ 则是上面的旋转三维向量;但是 ρ \rho ρ 并不直接等于变换矩阵中的 t t t;对应的四维 反对称矩阵 ξ ∧ = [ ϕ ∧ ρ 0 T 0 ] \xi^\wedge=\begin{bmatrix}\phi^\wedge&\rho\\0^T&0\end{bmatrix} ξ∧=[ϕ∧0Tρ0]
2.6.3 李代数求导
使用李代数表示姿态,根据李代数加法运算对李代数求导
旋转之后的位姿对旋转矩阵求导:
∂
(
R
p
)
∂
R
\frac{\partial(Rp)}{\partial R}
∂R∂(Rp) ,由于
S
O
(
3
)
SO(3)
SO(3)没有加法运算,转而使用李代数加法运算去求导:
∂
(
e
x
p
(
ϕ
∧
)
p
)
∂
ϕ
=
lim
△
ϕ
→
0
e
x
p
(
(
ϕ
+
△
ϕ
)
∧
)
p
−
e
x
p
(
ϕ
∧
)
p
△
ϕ
=
.
.
.
=
(
−
R
p
)
∧
J
l
\frac{\partial(exp(\phi^\wedge)p)}{\partial\phi}=\lim_{\triangle\phi\rightarrow0}\frac{exp({(\phi+\triangle\phi)}^\wedge)p-exp(\phi^\wedge)p}{\triangle\phi}=...={(-Rp)}^\wedge J_l
∂ϕ∂(exp(ϕ∧)p)=△ϕ→0lim△ϕexp((ϕ+△ϕ)∧)p−exp(ϕ∧)p=...=(−Rp)∧Jl
2.6.4 李群左右扰动
左扰动求导:
对
R
R
R 进行一次左扰动
△
R
\triangle R
△R,左乘在
R
R
R左侧,
△
R
\triangle R
△R对应的李代数设为
φ
\varphi
φ ,
R
p
Rp
Rp对
φ
\varphi
φ 求导:
∂
(
R
p
)
∂
φ
=
lim
φ
→
0
△
R
R
p
−
R
p
φ
=
lim
φ
→
0
e
x
p
(
φ
∧
)
e
x
p
(
ϕ
∧
)
p
−
e
x
p
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
(
I
+
φ
∧
)
e
x
p
(
ϕ
∧
)
p
−
e
x
p
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
φ
∧
e
x
p
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
φ
∧
R
p
φ
=
lim
φ
→
0
−
(
R
p
)
∧
φ
φ
=
−
(
R
p
)
∧
\frac{\partial(Rp)}{\partial\varphi}=\lim_{\varphi\rightarrow0}\frac{\bigtriangleup RRp-Rp}\varphi=\lim_{\varphi\rightarrow0}\frac{exp(\varphi^\wedge)exp(\phi^\wedge)p-exp(\phi^\wedge)p}\varphi\\\;\;\;\;\;\;\;\;=\lim_{\varphi\rightarrow0}\frac{(I+\varphi^\wedge)exp(\phi^\wedge)p-exp(\phi^\wedge)p}\varphi=\lim_{\varphi\rightarrow0}\frac{\varphi^\wedge exp(\phi^\wedge)p}\varphi\\=\lim_{\varphi\rightarrow0}\frac{\varphi^\wedge Rp}\varphi=\lim_{\varphi\rightarrow0}\frac{-{(Rp)}^\wedge\varphi}\varphi=-{(Rp)}^\wedge
∂φ∂(Rp)=φ→0limφ△RRp−Rp=φ→0limφexp(φ∧)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφ(I+φ∧)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφφ∧exp(ϕ∧)p=φ→0limφφ∧Rp=φ→0limφ−(Rp)∧φ=−(Rp)∧
此式比上面用李代数求导少了一个雅克比计算,所以扰动模型更实用。
旋转点右扰动求导:
三. 旋转连乘雅克比
四. 作业
4.1 题目一 — VIO 文献阅读
参考文献: “A review of visual inertial odometry from filtering and optimisation perspectives”. Advanced Robotics 29.20 (2015)
4.1.1 视觉与 IMU 进行融合之后有何优势?
4.1.2 有哪些常见的视觉 +IMU 融合方案?有没有工业界应用的例子?
4.1.3 学术界,VIO 研究有哪些新进展?有没有将(深度)学习方法用到 VIO 中的例子?
4.2 题目二 — 四元数和李代数更新
4.1.1 题目:
4.1.2 解答
需要的库:
sophus :李群SO(3),SE(3) --- Sophus::SO3d ; // d表示 double
eigen3 :旋转矩阵R --- Eigen : :Matrix3d; 微小增量ω ---- Vector3d ; 李代数(三维向量) ---- Vector3d ;
四元数--- Quaterniond
引入头文件
#include <iostream>
#include <sophus/se3.hpp>
#include <sophus/so3.hpp>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
旋转向量 θ n \theta n θn (角度+单位三维向量) 转为旋转矩阵 R R R
// Eigen::AngleAxisd(M_PI / 2, Eigen::Vector3d(0, 0, 1)) 旋转向量
Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI / 2, Eigen::Vector3d(0, 0, 1)).toRotationMatrix();
旋转矩阵 R R R 构造四元数 q q q
Quaterniond q(R);
旋转矩阵
R
R
R ,四元数
q
q
q 构造
S
O
(
3
)
SO(3)
SO(3) ; Sophus::SO3d 是一个类 ;
S
O
(
3
)
SO(3)
SO(3)本质是矩阵
R
R
R;
类方法 SO3_R.matrix() 返回其旋转矩阵形式
Sophus::SO3d SO3_R(R); // 从旋转矩阵构造Sophus::SO(3)
Sophus::SO3d SO3_q(q); // 也可以使用四元素构造Sophus::SO(3)
std::cout << "SO3 : " << SO3_R.matrix() << std::endl;
1.使用旋转矩阵更新 R ← R e x p ( ω ∧ ) R\leftarrow R\;exp(\omega^\wedge) R←Rexp(ω∧) , ω \omega ω 微小增量李代数,三维向量
Vector3d update_so3(0.01, 0.02, 0.03); //更新量
Sophus::SO3d SO3_updated = SO3_R * Sophus::SO3d::exp(update_so3); //右乘更新
SO(3) 用矩阵R显示
std::cout << "SO3 R= \n"<< SO3_updated.matrix() <<std::endl;
2.使用四元数更新 q ← q ⊗ [ 1 , 1 2 ω ] T q\leftarrow q\;\otimes\begin{bmatrix}1,&\frac12\omega\end{bmatrix}^T q←q⊗[1,21ω]T
Eigen::Quaterniond update_q(1, update_so3(0) / 2, update_so3(1) / 2, update_so3(2) / 2);
update_q.normalize(); //四元数归一化处理
Eigen::Quaterniond q_updated = q * update_q;
四元数 转为 矩阵R显示
Eigen : : Matrix3d q2R = q_updated.toRotationMatrix()
std::cout << "q2R = \n"<< q2R <<std::endl;
4.3 题目三 — 推导其他导数
4.3.1 题目
4.3.2 解答