【slam】位姿变化
坐标与坐标系
这里所考虑的3维坐标系由原点、3个相互垂直、尺度一致的坐标轴的单位向量确定。
存在唯一不变的世界坐标系
(
o
x
w
,
o
y
w
,
o
z
w
)
、
(
e
x
w
,
e
y
w
,
e
z
w
)
(ox_w,oy_w,oz_w)、(ex_w,ey_w,ez_w)
(oxw,oyw,ozw)、(exw,eyw,ezw)。点的位置由世界坐标系下的坐标
(
x
w
,
y
w
,
z
w
)
(x_w,y_w,z_w)
(xw,yw,zw)确定,位置为
(
x
w
∗
e
x
w
,
y
w
∗
e
y
w
,
z
w
∗
e
z
w
)
(x_w*ex_w,y_w*ey_w,z_w*ez_w)
(xw∗exw,yw∗eyw,zw∗ezw)。
其他坐标系由世界坐标系进行平移、旋转得到。
平移容易理解,即
(
o
x
l
−
o
x
w
,
o
y
l
−
o
y
w
,
o
z
l
−
o
z
w
)
(ox_l-ox_w,oy_l-oy_w,oz_l-oz_w)
(oxl−oxw,oyl−oyw,ozl−ozw)。
旋转的表达就比较多了。
点的旋转

v
v
v绕着一个方向
u
u
u旋转
θ
\theta
θ角度,变成了
v
θ
v_{\theta}
vθ。
v
θ
=
v
cos
θ
+
(
u
×
v
)
sin
θ
+
u
(
u
⋅
v
)
(
1
−
cos
θ
)
\boldsymbol{v}_{\theta}=\boldsymbol{v} \cos \theta+(\boldsymbol{u} \times \boldsymbol{v}) \sin \theta+\boldsymbol{u}(\boldsymbol{u} \cdot \boldsymbol{v})(1-\cos \theta)
vθ=vcosθ+(u×v)sinθ+u(u⋅v)(1−cosθ)
有没有一个坐标系 o x y z i oxyz_i oxyzi,旋转后的点坐标就是 v v v?是存在这样的坐标系的。这样就存在点旋转与坐标系旋转(当前坐标系旋转到 o x y z r oxyz_r oxyzr)的“对偶”分析。
寻找与点旋转“对偶”的坐标系旋转
e
x
w
、
e
y
w
、
e
z
w
ex_w、ey_w、ez_w
exw、eyw、ezw旋转后的向量为
e
x
r
、
e
y
r
、
e
z
r
ex_r、ey_r、ez_r
exr、eyr、ezr,则在以
e
x
r
、
e
y
r
、
e
z
r
ex_r、ey_r、ez_r
exr、eyr、ezr为基向量的坐标系中,旋转后的点坐标是
v
v
v。
两组坐标基向量存在如下关系,
R
R
R的旋转矩阵:
(
e
x
r
,
e
y
r
,
e
z
r
)
=
(
e
x
w
,
e
y
w
,
e
z
w
)
R
(ex_r,ey_r,ez_r)=(ex_w,ey_w,ez_w)R
(exr,eyr,ezr)=(exw,eyw,ezw)R
根据上式,基向量的特征,易证
R
R
R是正交矩阵,行列式为+1。
记一个点在两个坐标系下的坐标分别是
(
x
w
,
y
w
,
z
w
)
T
、
(
x
r
,
y
r
,
z
r
)
T
(x_w,y_w,z_w)^T、(x_r,y_r,z_r)^T
(xw,yw,zw)T、(xr,yr,zr)T,则
(
e
x
w
,
e
y
w
,
e
z
w
)
∗
(
x
w
,
y
w
,
z
w
)
T
=
(
e
x
r
,
e
y
r
,
e
z
r
)
∗
(
x
r
,
y
r
,
z
r
)
T
=
(
e
x
w
,
e
y
w
,
e
z
w
)
∗
R
(
x
r
,
y
r
,
z
r
)
T
(ex_w,ey_w,ez_w)*(x_w,y_w,z_w)^T=(ex_r,ey_r,ez_r)*(x_r,y_r,z_r)^T\\ =(ex_w,ey_w,ez_w)*R(x_r,y_r,z_r)^T
(exw,eyw,ezw)∗(xw,yw,zw)T=(exr,eyr,ezr)∗(xr,yr,zr)T=(exw,eyw,ezw)∗R(xr,yr,zr)T
所以,
(
x
w
,
y
w
,
z
w
)
T
=
R
(
x
r
,
y
r
,
z
r
)
T
(x_w,y_w,z_w)^T=R(x_r,y_r,z_r)^T
(xw,yw,zw)T=R(xr,yr,zr)T
v
θ
=
R
v
v_\theta=Rv
vθ=Rv
旋转矩阵的欧拉角表示

用 z-y’-x’'的欧拉角表示,其中三个旋转角度也叫作yaw(航向角),pitch(俯仰角)和roll(横滚角)。
- 绕
z轴旋转,使得y'轴在另一个坐标的zy平面; - 绕
y'轴旋转,使得z''轴在另一个坐标的zy平面。且x''与另一个坐标系的x轴重合; - 绕
x''轴旋转,使得y''、z''与另一个坐标系重合

R ( ψ , θ , ϕ ) = R z ( ψ ) R y ( θ ) R x ( ϕ ) \mathbf{R}(\psi, \theta, \phi)=\mathbf{R}_{z}(\psi) \mathbf{R}_{y}(\theta) \mathbf{R}_{x}(\phi) R(ψ,θ,ϕ)=Rz(ψ)Ry(θ)Rx(ϕ)
点旋转与旋转矩阵的转换
点旋转的表达是
(
u
,
θ
)
(u,\theta)
(u,θ),旋转矩阵的表达是
R
R
R,表征了两个坐标系的转换。
根据点旋转的描述,来构造
R
R
R:
需要一个中间的坐标系
o
x
y
z
′
oxyz'
oxyz′来过渡,
z
′
z'
z′与旋转轴重合。这样,就是绕z'轴旋转
θ
\theta
θ,坐标变换关系易得;
o
x
y
z
oxyz
oxyz和
o
x
y
z
′
oxyz'
oxyz′的左边变化关系,也易得。
根据
R
R
R来构造
(
u
,
θ
)
(u,\theta)
(u,θ):o-x-x'、o-y-y'、o-z-z'的中垂面的交线就是旋转轴。旋转角度易得。
旋转的李代数表示
知识1:点旋转,也叫罗戈里格斯旋转
知识2:矩阵的指数运算
exp
(
ϕ
∧
)
=
∑
n
=
0
∞
1
n
!
(
ϕ
∧
)
n
\exp(\mathbf{\phi}^\wedge) = \sum\limits_{n = 0}^\infty {\frac{1}{{n!}}{ (\mathbf{\phi}^{\wedge})^n}}
exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n
知识3:反对称矩阵的性质
ϕ
ϕ
T
=
ϕ
∧
ϕ
∧
+
∥
ϕ
∥
2
I
3
×
3
ϕ
∧
ϕ
∧
ϕ
∧
=
−
ϕ
∧
ϕ
×
v
=
ϕ
∧
v
\mathbf{\phi} \mathbf{\phi}^T = \mathbf{\phi}^{\wedge} \mathbf{\phi}^{\wedge} + \| \mathbf{\phi} \|^2 \mathbf{I}_{3 \times 3}\\ \mathbf{\phi}^{\wedge} \mathbf{\phi}^{\wedge} \mathbf{\phi}^{\wedge} = - \mathbf{\phi}^{\wedge}\\ \mathbf{\phi}×v = \mathbf{\phi}^{\wedge}v
ϕϕT=ϕ∧ϕ∧+∥ϕ∥2I3×3ϕ∧ϕ∧ϕ∧=−ϕ∧ϕ×v=ϕ∧v
点旋转
(
u
,
θ
)
(u, \theta)
(u,θ)
exp
(
ϕ
∧
)
=
exp
(
θ
u
∧
)
=
∑
n
=
0
∞
1
n
!
(
θ
u
∧
)
n
=
I
+
θ
u
∧
+
1
2
!
θ
2
u
∧
u
∧
+
1
3
!
θ
3
u
∧
u
∧
u
∧
+
1
4
!
θ
4
(
u
∧
)
4
+
.
.
.
=
u
u
T
−
u
∧
u
∧
+
θ
u
∧
+
1
2
!
θ
u
∧
u
∧
−
1
3
!
θ
3
u
∧
+
1
4
!
θ
4
(
u
∧
)
4
+
.
.
.
=
u
u
T
+
(
θ
−
1
3
!
θ
3
+
1
5
!
θ
5
−
.
.
.
)
u
∧
−
(
1
−
1
2
!
θ
2
+
1
4
!
θ
4
−
.
.
.
)
u
∧
u
∧
=
u
∧
u
∧
+
I
+
sin
θ
u
∧
−
cos
θ
u
∧
u
∧
=
(
1
−
cos
θ
)
u
∧
u
∧
+
I
+
sin
θ
u
∧
=
cos
θ
I
+
(
1
−
cos
θ
)
u
u
T
+
sin
θ
u
∧
\begin{align*} \exp \left( {{\mathbf{\phi} ^ \wedge }} \right) &= \exp \left( {\theta {\mathbf{u}^ \wedge }} \right) = \sum\limits_{n = 0}^\infty {\frac{1}{{n!}}{{\left( {\theta {\mathbf{u}^ \wedge }} \right)}^n}} \\ &= \mathbf{I} + \theta {\mathbf{u}^ \wedge } + \frac{1}{{2!}}{\theta ^2}{\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } + \frac{1}{{3!}}{\theta ^3}{\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } + \frac{1}{{4!}}{\theta ^4}{\left( {{\mathbf{u}^ \wedge }} \right)^4} + ...\\ &= \mathbf{u} {\mathbf{u}^T} - {\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } + \theta {\mathbf{u}^ \wedge } + \frac{1}{{2!}}\theta {\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } - \frac{1}{{3!}}{\theta ^3}{\mathbf{u}^ \wedge } + \frac{1}{{4!}}{\theta ^4}{\left( {{\mathbf{u}^ \wedge }} \right)^4} + ...\\ &= \mathbf{u}{\mathbf{u}^T} + \left( {\theta - \frac{1}{{3!}}{\theta ^3} + \frac{1}{{5!}}{\theta ^5} - ...} \right){\mathbf{u}^ \wedge } - \left( {1 - \frac{1}{{2!}}{\theta ^2} + \frac{1}{{4!}}{\theta ^4} - ...} \right){\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge }\\ &= {\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } + \mathbf{I} + \sin \theta {\mathbf{u}^ \wedge } - \cos \theta {\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge }\\ &= (1 - \cos \theta ){\mathbf{u}^ \wedge }{\mathbf{u}^ \wedge } + I + \sin \theta {\mathbf{u}^ \wedge }\\ &= \cos \theta \mathbf{I} + (1 - \cos \theta )\mathbf{u}{\mathbf{u}^T} + \sin \theta {\mathbf{u}^ \wedge } \\ \end{align*}
exp(ϕ∧)=exp(θu∧)=n=0∑∞n!1(θu∧)n=I+θu∧+2!1θ2u∧u∧+3!1θ3u∧u∧u∧+4!1θ4(u∧)4+...=uuT−u∧u∧+θu∧+2!1θu∧u∧−3!1θ3u∧+4!1θ4(u∧)4+...=uuT+(θ−3!1θ3+5!1θ5−...)u∧−(1−2!1θ2+4!1θ4−...)u∧u∧=u∧u∧+I+sinθu∧−cosθu∧u∧=(1−cosθ)u∧u∧+I+sinθu∧=cosθI+(1−cosθ)uuT+sinθu∧
v θ = v cos θ + ( u × v ) sin θ + u ( u ⋅ v ) ( 1 − cos θ ) = exp ( θ u ∧ ) ∗ v = R v \boldsymbol{v}_{\theta}=\boldsymbol{v} \cos \theta+(\boldsymbol{u} \times \boldsymbol{v}) \sin \theta+\boldsymbol{u}(\boldsymbol{u} \cdot \boldsymbol{v})(1-\cos \theta)=\exp (\theta{\mathbf{u}^ \wedge })*v=Rv vθ=vcosθ+(u×v)sinθ+u(u⋅v)(1−cosθ)=exp(θu∧)∗v=Rv
李代数表示的优势在于求导优化。可以通过指数展开,舍弃高次方项,推导出简洁的线性公式。
核心是用李代数形式的旋转来表示这次迭代优化要得到的微量旋转,
R
∗
e
x
p
(
θ
u
∧
)
R*exp(\theta u^{\wedge})
R∗exp(θu∧)、
e
x
p
(
θ
u
∧
)
∗
R
exp(\theta u^{\wedge})*R
exp(θu∧)∗R
旋转描述
旋转矩阵
每个旋转有唯一的旋转矩阵。
默认,x->y、y->z、z->x的旋转为正角度。逆时针旋转为正、右手螺旋

这里,第2个是z->x旋转,但是x坐标在z坐标前面,所以,旋转矩阵要调整下。


欧拉角
每个旋转可以有无数个欧拉角。因为旋转
2
π
2\pi
2π就会回到原来的位置。
把旋转分解成沿三个轴转动的量:滚转角-俯仰角-偏航角(roll-pitch-yaw)。它的好处是十分的直观,且只有三个参数描述。缺点是会碰到著名的万向锁问题:在俯仰为±90∘时,表达某个姿态的形式不唯一。此外,它也不易于插值和迭代。

万向锁,表达某个姿态的形式不唯一。因为第二次旋转90°后,第一次旋转、和第三次旋转是旋转轴一样的。丢失了一个维度的自由度。我觉得迭代优化时,这个问题也可以接受呀。

欧拉角计算复杂,所以不易于插值和迭代。记录这样一个变换,至少需要三个角的sine和cosine值,也就是一共存储6个单位数据。

罗格里格斯旋转
求一个向量绕任意轴旋转 [公式] 后的向量是多少。我们可以使用罗德里格公式解得。


公式–>旋转矩阵

四元数
李代数




上面模型是 R ∗ θ R*\theta R∗θ。还有一种建模是 θ ∗ R \theta * R θ∗R。
更多推荐







所有评论(0)