SLAM LECTURE 3:三维空间刚体运动

L3 三维空间刚体运动

§3.1 旋转矩阵

§3.1.1 内外积Recap

  1. 内积:对于 a,bR3 ,
(3.1)ab=aTb=i=13aibi=|a||b|cosa,b.
  1. 外积:
(3.2)a×b=e1e2e3a1a2a3b1b2b3=[a2b3a3b2a3b1a2b3a1b2a2b1]=[0a3a2a30a1a2a10]b=defab.

其中 符号将 a 一一映射成一个反对称矩阵 a ,后文将经常用到

§3.1.2 坐标系间的欧式变换

旋转中,设某个单位正交基 (e1,e2,e3) 经过一次旋转变成了 (e1,e2,e3) ,根据坐标的定义有,

(3.3)[e1,e2,e3][a1a2a3]=[e1,e2,e3][a1a2a3].

两边同时左乘 [e1,e2,e3] ,得到,

(3.4)[a1a2a3]=[e1Te1e1Te2e1Te3e2Te1e2Te2e2Te3e3Te1e3Te2e3Te3][a1a2a3]=defRa.

其中 R 成为旋转矩阵(Rotation Matix),且是一个行列式为1的正交矩阵。

n为旋转矩阵的集合定义如下:

(3.5)SO(n)={RRn×n|RTR=I,det(R)=1}

其中SO(n)是特殊正交群(Special Orthogonal Group)的意思。


平移中,直接相加即可,记作 t ,称为平移向量。


因此,把旋转和平移合到一起,有

(3.6)a=Ra+t

完整地描述了一个欧氏空间的坐标变换关系。

实际上,对于坐标系1、坐标系2,你们向量 a 在两个坐标系下的坐标为 a1 a2 ,它们之间的关系应该是:

(3.7)a1=R12a2+t12

其中, R12 是指“把坐标系2的向量变换到坐标系1”中, t12 对应的是坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标,下标需尤其注意。

§3.1.3 变换矩阵与齐次坐标

考虑到变换关系非线性,多次变换后数学式会很复杂,因此引入齐次坐标和变换矩阵,重写式(3.6):

(3.8)[a1]=[Rt0T1][a1]=defT[a1].

在三维向量的末尾添加1,变成了四维向量,成为齐次坐标,从而将变换变成线性关系,矩阵 T 称为变换矩阵(Transform Matrix),后续在不引起歧义的情况下,写成 b=Ta 时,默认进行了齐次坐标的变换。

关于变换矩阵 T ,左上角为旋转矩阵,右上角为平移向量,左下角为 0 ,右下角为1,这种矩阵又称为特殊欧式群(Special Euclidean Group):

(3.9)SE(3)={T=[Rt0T1]R4×4|RSO(3),tR3}.

该矩阵的逆表示一个反向的变换:

(3.10)T1=[RTRTt0T1].

同样,我们用 T12 来表示从2到1的变换。

§3.3 旋转向量和欧拉角

§3.3.1 旋转向量

旋转矩阵用9个参数和一些限制条件来表示仅有3个自由度的旋转,不够紧凑,因而提出使用一个三维向量来表示旋转,其方向与旋转轴一致,而长度等于旋转角,这种向量被成为旋转向量(Axis-Angle)

考虑某个旋转对应的旋转矩阵为 R ,其旋转轴为一个单位长度的向量 n ,旋转角为 θ ,那么向量 θn 即是描述这个旋转的旋转向量,下面给出两种表达方式之间的转换关系。

从旋转向量到旋转矩阵的转换过程由罗德里格斯公式(Rodrigues’s Formula)表明,公式如下:

(3.11)R=cosθI+(1cosθ)nnT+sinθn.

从一个旋转矩阵到旋转向量的计算过程分两步走。对于转角 θ ,取两边的trace,得到:

(3.12)tr(R)=cosθtr(I)+(1cosθ)tr(nnT)+sinθtr(n)=3cosθ+(1cosθ)=1+2cosθ

因此:

(3.13)θ=arccostr(R)12.

关于转轴 n ,旋转轴上的向量在旋转后不发生变化,说明:

(3.14)Rn=n.

因此, n 是矩阵 R 特征值1对应的特征向量,求解后再归一化得到转轴。

tip:旋转向量具有奇异性, θ=90 时旋转轴不唯一,丢失自由度

§3.3.2 欧拉角

以ZYX为例,将任意旋转分解成以下3个轴的转角:

  1. 绕物体Z轴旋转,得到偏航角yaw
  2. 绕旋转之后的Y轴旋转,得到俯仰角pitch
  3. 绕旋转之后的X轴旋转,得到滚转角roll

此时可以使用 [r,p,y]T 来描述仍以旋转。

但是存在一个重大缺点,会出现万向锁问题(Gimbal Lock),即当俯仰角pitch = ±90°时第一次旋转与第三次旋转将使用同一个轴,从而丢失了一个自由度,这被称为奇异性问题。

§3.4 四元数

§3.4.1 定义

一个四元数 q 拥有一个实部和三个虚部,

(3.15)q=q0+q1i+q2j+q3k

其中 i , j , k 为三个虚部,且满足关系式:

(3.16){i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j

有时,四元数也可以用一个标量和一个向量来表示,

(3.17)q=[s,v]T,s=q0R,v=[q1,q2,q3]TR3.

其中, s 成为四元数的实部,而 v 称为虚部。可以用单位四元数来表示三维空间中任意一个旋转。

§3.4.2 运算

现有两个四元数 qa qb ,它们的向量表示为 [sa,va]T [sb,vb]T ,运算可表示如下。

  1. 加减法(数乘类似)
(3.18)qa±qb=[sa±sb,va±vb]T.
  1. 乘法:每项相乘相加,整理可得
(3.19)qaqb=[sasbvaTvb,savb+sbva+va×vb]T.

需注意,不满足交换律

  1. 模长
(3.20)qa=sa2+xa2+ya2+za2.

且满足

(3.21)qaqb=qaqb.
  1. 共轭
(3.22)qa=[sa,va]T.

四元数共轭与自身相乘,会得到一个实四元数,其实部为模长的平方:

(3.23)qq=qq=[sa2+vTv,0]T.
q1=q/q2.

因此,四元数和自己的逆的成绩为实四元数 1

(3.24)q1q=qq1=1.

对于单位四元数,其逆和共轭是一个量。

同时,乘积的逆具有和矩阵的相似性质:

(3.25)(qaqb)1=qb1qa1.

§3.4.3 用四元数表示旋转

我们可以用四元数表达对一个点的旋转。假设有一个空间三维点 p=[x,y,z]R3 ,以及一个单位四元数 q 来指定将 p 旋转至 p

首先,把三维空间点用一个虚四元数来描述:

(3.26)p=[0,x,y,z]T=[0,v]T.

则旋转后的 p 可以表示为:

(3.27)p=qpq1.

§3.4.4 四元数到其他旋转表示的转换

q=[s,v]T ,定义如下符号:

(3.28)q+=[svTvsI+v],q=[svTvsIv].

可证明

(3.29)q1q2=q1+q2=q2q1.

于是可以得到

(3.30)p=qpq1=q+p+q1=q+q1p..

代入矩阵可得

(3.31)q+(q1)=[100TvvT+s2I+2sv+(v)2].

矩阵的右下角即给出了从四元数到旋转矩阵的关系:

(3.32)R=vvT+s2I+2sv+(v)2.

要求四元数到旋转向量的转换公式,类似地可求得:

(3.33){θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sinθ2

§3.5 相似、仿射、射影变换

欧式变换保持了向量的长度和夹角,而下面几种变换会改变外形。

§3.5.1 相似变换

比欧式变换多了一个自由度,允许物体进行缩放,其矩阵表示为

(3.34)TS=[sRt0T1].

旋转部分多了一个缩放因子 s ,三维相似变换的集合叫做相似变换群,记作 Sim(3)

§3.5.2 仿射变换

(3.34)TA=[At0T1].

仿射变换只要求 A 是一个可逆矩阵,而不必是正交矩阵。仿射变换也叫正交投影,经过仿射变换,直线仍为直线,保持平行关系。

三维的仿射变换有12个自由度: 3 个平移, 3×3=9 个线性变换

§3.5.3 射影变换

(3.35)TP=[AtaTv].

左上角 A 是一个可逆矩阵,左下角为缩放 aT ,是最一般的变换。由于采用了齐次坐标,矩阵乘以任何非零常数,代表的变换是完全一样的,因此二维的射影变换自由度为8,三维的自由度为15。


SLAM LECTURE 3:三维空间刚体运动
http://example.com/2026/01/25/SLAM-LECTURE-3/
作者
William Lu/Linkun Lu
发布于
2026年1月25日
许可协议