三维旋转、李群与李代数的一些知识点记录
以下内容来源于《视觉SLAM十四讲》以及其他博文内容的汇总,所有出处均会表明。部分内容比较简略,主要是总结一些自己觉得需要注意的地方或者是归纳一下结论之类的,因为写本文的目的是仅做自身学习记录汇总用途,好记性不如烂笔头,方便自己回顾(之前都学过但是现在发现忘得差不多了...所以再重新回顾一下),当然如果对大家有帮助那再好不过。
一、三维刚体旋转
1.1 内积和外积
内积,即点乘操作,设a, b为2个向量,具体公式如下:
外积,即叉乘操作,公式表示如下:
点乘和叉乘的具体含义及区别:向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
注意外积的方向垂直于a、b,大小为 |a| |b| sin<a,b>,并且引入了符号 ^
a ^ b = a × b
该符号把 a 向量表示为了一个反对称矩阵 a^ (反对称矩阵定义为为 A T = − A A^T=-A AT=−A),也就是说带有这个^符号的均表示将一个向量转换为了反对称矩阵,后续在李代数推导过程中会用到,外积只对三维向量存在定义,且可以用外积来表示向量的旋转。如在右手法则下有:
1.2 旋转矩阵、变换矩阵和旋转向量
这部分主要区分旋转矩阵和变换矩阵,以及两者在群中的表示区别。
1.2.1 旋转矩阵
欧式变换基本概念:视觉SLAM基本原理(1)—— 欧氏变换与旋转向量
对于同一个向量 a a a ,它在一个坐标系中的坐标为 a a a ,而在另一个坐标系下坐标为 a ′ a' a′ ,那么可以通过旋转矩阵进行对应的转换
a ′ = R ∗ a a' = R * a a′=R∗a
其中用 R R R来表示旋转矩阵,实际上其为一个行列式为1的正交矩阵( A A T = E AA^T=E AAT=E),集合定义如下:
S
O
(
n
)
SO(n)
SO(n)表示的是特殊正交群,
n
n
n表示的是
n
n
n维空间的意思,一般来说我们都是3。在欧式变换中,如果需要平移,则还需要加上平移矩阵
t
t
t
a
′
=
R
a
+
t
a'=Ra+t
a′=Ra+t
1.2.2 变换矩阵
由于旋转矩阵在多次变换过程中并非线性关系,并会越来越复杂,因此我们将其引入齐次坐标下,吧三维向量重写(末尾+1),由此可以把旋转和平移写入同一个矩阵中,称为变换矩阵
其中
R
R
R表示旋转矩阵,
t
t
t表示平移向量。注意在齐次坐标系下
[
1
,
1
,
1
,
1
]
T
[1,1,1,1]^T
[1,1,1,1]T和
[
2
,
2
,
2
,
2
]
T
[2,2,2,2]^T
[2,2,2,2]T为同一个点,具体表现为
变换矩阵又称特殊欧式群
以后我们都用
T
T
T来表示齐次坐标下的变换矩阵,用
R
R
R来表示非齐次坐标下的旋转矩阵。
1.2.3 旋转向量
旋转向量定义为:任意旋转均可用一个旋转轴和一个旋转角来表示,由此使用一个向量,其方向与旋转轴保持一致,向量长度等于旋转角。
相关内容在李代数中进行详解。这边需要注意的是使用罗德里格斯公式来完成旋转向量到旋转矩阵的转换。关于罗德里格斯公式的推导,详见:三维重建学习(1):基础知识:旋转矩阵与旋转向量。
这里只放结论:
旋转向量转换为旋转矩阵(其中的 ^ 符号定义回看第一章叉乘):
反向推导,从旋转矩阵获得旋转向量:
对于转轴n,由于旋转轴上的向量在旋转之后不发生变化,说明有
1.3 欧拉角和四元数和姿态解算
此处就不做过多介绍了,放些我当初自己学习时的资源链接好了
欧拉角的基础示意:欧拉角说明
想深入理解一下四元数可以看看这个视频:四元数的可视化
四元数表示旋转
需要注意的是用四元数表示旋转的过程:
假设某一个旋转时绕着单位向量
n
=
[
n
x
,
n
y
,
n
z
]
T
n=[nx,ny,nz]^T
n=[nx,ny,nz]T进行了角度
θ
θ
θ的旋转,那么旋转的四元数表示为
相反地可以计算出旋转轴和夹角:
假定三维空间点 p = [ x , y , z ] p=[x,y,z] p=[x,y,z],经旋转之后变为 p ′ p' p′,如果用旋转矩阵 R R R表示,则为 p ′ = R p p'=Rp p′=Rp。如果用四元数表示,首先将三维空间点表示为虚四元数
p = [ 0 , x , y , z ] = [ 0 , v ] p=[0,x,y,z]=[0,v] p=[0,x,y,z]=[0,v]
参照上面的式子,用四元数表示旋转为
q = [ c o s θ 2 , n s i n θ 2 ] q=[cos\frac{θ}{2}, nsin\frac{θ}{2}] q=[cos2θ,nsin2θ]
则旋转之后的点
p
′
p'
p′可以表示为
p
′
=
q
p
q
−
1
p'=qpq^{-1}
p′=qpq−1
四元数与旋转矩阵
四元数表示旋转矩阵:
反向推导:
姿态解算
顺便放一些我个人觉得还不错的姿态解算的学习博文(当然包含欧拉角和四元数的基础,主要还是方便自己以后找起来方便…):
姿态解算(用于飞行器或ROV等)的基本思路和数学原理
四旋翼姿态解算——基础理论及推导
互补滤波算法及理论推导
Mahony姿态解算算法笔记(一)
二、李群与李代数
此处由于内容涉及过多将不会放一些基础或者推导性的东西,仅会把我个人觉得需要记忆的概念或者结论放在此处
2.1 李群
群(Group)是一种集合加上(只有)一种运算的代数结构。
李群是指具有连续(光滑)性质的群。
以上相关定义和特性不再细说,给出一些讲得比较好的博文的链接:
视觉SLAM中的数学基础 第三篇 李群与李代数
视觉SLAM基本原理(1)—— 欧氏变换与旋转向量
如前述内容可知,SO(3)表示由3维旋转矩阵R构成的特殊正交群,SE(3)则是由3维变换矩阵T构成的特殊欧式群。发现这两者对于加法来说并不封闭,也就是说任意2个旋转矩阵或者变换矩阵相加,所得结果将不再是一个旋转矩阵或者变换矩阵。但是它们对于乘法却不是封闭的,因此满足只有一种运算的定义。此外,刚体始终能够在三维空间中满足连续运动,换而言之,SO(3)和SE(3)均能够满足在实数空间连续的定义,因此这两者均为李群。
此处主要关心SO(3)和SE(3)的含义及内容。
2.2 李代数
详细的还是看这边:视觉SLAM中的数学基础 第三篇 李群与李代数
重点关注以下几个概念:
- 李代数。每一个李群均有相对应的李代数,描述了李群的局部性质,由一个集合V,一个数域F和一个二元运算 [ , ] 组成,其中二元运算被称为李括号(此处不在罗列具体性质)。
- “^”符号用作将一个向量转变为反对称矩阵,而相反方向的该符号则表示为将一个反对称矩阵转变为一个向量。
- 下述过程中Φ将表示三维
旋转向量,而Φ^表示为一个反对称矩阵(转换过程看第一章中的叉乘)。 - 指数映射完成从李代数向李群的转换。
- 对数映射完成从李群到李代数的转换。
SO(3)和SE(3)的李代数表示如下:
在不引起歧义的情况下,就说so(3)中的元素为三维向量或者三维反对称矩阵。关于为什么使用^或是为什么用 Φ ,可以去看一下李代数的具体推导过程。
注意到SE(3)的李代数se(3)中的元素被记作 ξ ,其为一个6维向量,前三维为平移向量,记作 ρ ,后三维为旋转向量,记作 Φ ,实际上就是SO(3)李代数中的元素。
其中三维向量 Φ 的可以通过^运算为三维反对称矩阵。
主要分析
SO(3)
如下所示为旋转矩阵中李群和李代数之间的转换关系,分别来分析一下:
- 左边蓝框部分:李群,特殊正交群SO(3),集合内部元素为旋转矩阵R,R属于三维实数空间,下面两行均为正交矩阵性质。
- 右边蓝框部分:李代数,so(3),集合内部元素为三维旋转向量Φ,该三维向量定义在三维实数空间中,这边只需要记住对于这个Φ,我们始终能将其转换为一个反对称矩阵Φ^即可。
- 红色向左箭头:李代数始终能通过指数映射转换为李群,前面已经说过了李群和李代数各自的集合元素,它们之间的关系通过指数映射完成:R = exp(Φ ^) = 箭头上的公式内容,其中 a 为一个长度为1的方向向量。
- 红色向右箭头:李群也能通过对数映射转换为李代数,公式如下。然而一般不按照泰勒展开去计算下式,而是套用罗德里格斯公式进行相应的计算,如箭头下方的公式内容。
SE(3)
-
左边蓝框部分:李群,特殊正交群SE(3),集合内部元素为变换矩阵T,4×4矩阵,T属于三维实数域中的齐次空间,内部由3×3的旋转矩阵R,3×1的平移向量t,元素0和元素1组成。
-
右边蓝框部分:李代数,se(3),集合内部元素为六维向量 ξ ,该向量定义在三维实数空间中,内部由3×1的平移向量ρ和3×1的旋转向量Φ组成。也可以说是由四维反对称矩阵 ξ^ 组成,内部元素同方框内内容。
-
红色向左箭头:李代数通过指数映射转换为李群,前面已经说过了李群和李代数各自的集合元素,它们之间的关系通过指数映射完成:T = exp(ξ ^) = 箭头上的公式内容。
-
红色向右箭头:李群也能通过对数映射转换为李代数,公式如下。然而一般不按照泰勒展开去计算下式,而是套用罗德里格斯公式进行相应的计算,如箭头下方的公式内容,其中 a 为一个长度为1的方向向量。