【SLAM】01_三维空间刚体运动

摘要:介绍如何描述刚体在三维空间中的运动

1. 旋转矩阵

1.1 点、向量和坐标系

向量 a a a 在三维空间的坐标表示为:
a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 a=[e_{1},e_{2},e_{3}]\begin{bmatrix}a_{1}\\a_{2}\\a_{3}\end{bmatrix}=a_1e_1+a_2e_2+a_3e_3 a=[e1,e2,e3] a1a2a3 =a1e1+a2e2+a3e3
该空间的 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3),这里的 ( a 1 , a 2 , a 3 ) T (a_1,a_2,a_3)^T (a1,a2,a3)T为向量 a a a在此基下的坐标。

坐标的运算方式为:

  • 加减法:各自坐标相加
  • 内积(点乘):
    a ⋅ b = a T b = ∑ i = 1 3 a i × b i = ∣ a ∣ ∣ b ∣ cos ⁡ < a , b > a\cdot b=a^{T}b=\sum_{i=1}^{3}a_{i}\times b_{i}=|a||b|\cos<a,b> ab=aTb=i=13ai×bi=a∣∣bcos<a,b>, 且 a ⋅ b = b ⋅ a a\cdot b=b\cdot a ab=ba
  • 外积(叉乘):
    外积公式推导

a × b = ∣ a ∣ ∣ b ∣ sin ⁡ < a , b > a\times b=|a||b|\sin<a,b> a×b=a∣∣bsin<a,b>,方向垂直于向量 a a a b b b组成的平面,遵循右手定则。
性质: a × b = − b × a a\times b=-b\times a a×b=b×a,记为下列公式,这是一个反对称矩阵,满足 A T = − A A^T=-A AT=A ∧ \wedge 记作反对称符号。
a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] a^{\wedge}= \begin{bmatrix}0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{bmatrix} a= 0a3a2a30a1a2a10

1.2 坐标系间的欧氏变换

(1)
刚体运动:两个坐标系之间的运动由一个旋转加上一个平移组成
对于同一个向量 p p p,它在世界坐标系下的坐标 p w p_w pw和在相机坐标系下的坐标 p c p_c pc是不同的。这个变换关系由变换矩阵 T T T来描述
刚体运动

(2)
对于坐标系旋转变换,假设原坐标系和现坐标系单位正交基底分别为 [ e 1 , e 2 , e 3 ] [e_1,e_2,e_3] [e1,e2,e3] [ e 1 ′ , e 2 ′ , e 3 ′ ] [e_1^{\prime},e_2^{\prime},e_3^{\prime}] [e1,e2,e3] , 坐标分别为 [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T [ a 1 ′ , a 2 ′ , a 3 ′ ] T [a_1^{\prime},a_2^{\prime},a_3^{\prime}]^T [a1,a2,a3]T , 由于向量本身的绝对位置没有改变,则
[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] \left.[\boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{e}_3]\left[\begin{array}{c}a_1\\a_2\\a_3\end{array}\right.\right]=[\boldsymbol{e}_1^{\prime},\boldsymbol{e}_2^{\prime},\boldsymbol{e}_3^{\prime}]\left[\begin{array}{c}a_1^{\prime}\\a_2^{\prime}\\a_3^{\prime}\end{array}\right] [e1,e2,e3] a1a2a3 =[e1,e2,e3] a1a2a3
将上式两端分别左乘 [ e 1 T e 2 T e 3 T ] \begin{bmatrix}e^T_1\\e^T_2\\e^T_3\end{bmatrix} e1Te2Te3T 得到,
[ a 1 a 2 a 3 ] = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] = ⁡ d e f R a ′ \left.\left[\begin{array}{c}a_1\\a_2\\a_3\end{array}\right.\right]=\left[\begin{array}{ccc}\boldsymbol{e}_1^T\boldsymbol{e}_1^{\prime}&\boldsymbol{e}_1^T\boldsymbol{e}_2^{\prime}&\boldsymbol{e}_1^T\boldsymbol{e}_3^{\prime}\\\boldsymbol{e}_2^T\boldsymbol{e}_1^{\prime}&\boldsymbol{e}_2^T\boldsymbol{e}_2^{\prime}&\boldsymbol{e}_2^T\boldsymbol{e}_3^{\prime}\\\boldsymbol{e}_3^T\boldsymbol{e}_1^{\prime}&\boldsymbol{e}_3^T\boldsymbol{e}_2^{\prime}&\boldsymbol{e}_3^T\boldsymbol{e}_3^{\prime}\end{array}\right]\left[\begin{array}{c}a_1^{\prime}\\a_2^{\prime}\\a_3^{\prime}\end{array}\right]\overset{\mathrm{def}}{\operatorname{=}}\boldsymbol{R}\boldsymbol{a}^{\prime} a1a2a3 = e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3 a1a2a3 =defRa
矩阵 R \boldsymbol{R} R即为旋转矩阵 (Rotation Matrix)
性质:
旋转矩阵性质

将满足此性质的矩阵集合定义为特殊正交群
S O ( n ) = { R ∈ R n × n ∣ R R T = I , det ⁡ ( R ) = 1 } \mathrm{SO}(n)=\left\{\boldsymbol{R}\in\mathbb{R}^{n\times n}\mid\boldsymbol{R}\boldsymbol{R}^\mathrm{T}=\boldsymbol{I},\det(\boldsymbol{R})=1\right\} SO(n)={RRn×nRRT=I,det(R)=1}

(3)旋转加平移

可以将三维空间的刚体运动分解为平移(平移向量 t t t)以及旋转运动, a 1 = R 12 a 2 + t 12 a_1=\boldsymbol{R}_{12}\boldsymbol{a}_2+\boldsymbol{t}_{12} a1=R12a2+t12

这里的 R 12 \boldsymbol{R}_{12} R12 是指“把坐标系 2 的向量变换到坐标系 1” 中,下标从右往左读。

1.3 变换矩阵与齐次坐标

多次变换之后,引用齐次坐标和变换矩阵
a a a c c c的变换为:
a ′ = R a + t → [ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] = ⁡ d e f T [ a 1 ] a^{\prime}=Ra+t \to \begin{bmatrix}a^{\prime}\\\\1\end{bmatrix}=\begin{bmatrix}R&t\\\\\mathbf{0}^\mathrm{T}&1\end{bmatrix}\begin{bmatrix}a\\\\1\end{bmatrix}\overset{\mathrm{def}}{\operatorname*{=}}T\begin{bmatrix}a\\\\1\end{bmatrix} a=Ra+t a1 = R0Tt1 a1 =defT a1
三维向量尾部添加1,称为齐次坐标。
T \boldsymbol{T} T变换矩阵(Transform Matrix),旋转与平移都在这个矩阵中,左上角为旋转矩阵,右侧为平移向量,左下角为 0 0 0 向量,右下角为 1 1 1。这种矩阵又称为特殊欧氏群(Special Euclidean Group):
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } \left.\mathrm{SE}(3)=\left\{\boldsymbol{T}=\begin{bmatrix}\boldsymbol{R}&\boldsymbol{t}\\\boldsymbol{0}^\mathrm{T}&1\end{bmatrix}\right.\in\mathbb{R}^{4\times4}|\boldsymbol{R}\in\mathrm{SO}(3),\boldsymbol{t}\in\mathbb{R}^3\right\} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3}
其逆方向变换为:
T − 1 = [ R T − R T t 0 T 1 ] \boldsymbol{T}^{-1}=\begin{bmatrix}\boldsymbol{R}^\mathrm{T}&-\boldsymbol{R}^\mathrm{T}\boldsymbol{t}\\\mathbf{0}^\mathrm{T}&1\end{bmatrix} T1=[RT0TRTt1]

齐次坐标简介:
齐次坐标介绍

2. 旋转向量与欧拉角

2.1 旋转向量

三维空间中刚体运动有六个自由度 (旋转和平移各三个)。显然无论是上述的旋转矩阵 (9个量)还是变换矩阵 (16个量),都有很大的冗余;并且,矩阵中的元素相互关联,这不利于后续的非线性优化计算。因此我们希望找到一种更为紧凑的表达方式。

任意旋转都可以同一个旋转轴和一个旋转角来刻画,
则使用旋转向量来表达:即向量方向为旋转轴,其模长为旋转角

罗德里格斯公式描述了旋转矩阵和旋转向量之间的关系:
R = cos ⁡ ( θ I ) + ( 1 − cos ⁡ θ ) n n T + sin ⁡ ( θ n ∧ ) \boldsymbol{R}=\cos(\theta\boldsymbol{I})+(1-\cos\theta)\boldsymbol{n}\boldsymbol{n}^T+\sin(\theta\boldsymbol{n}^\wedge) R=cos(θI)+(1cosθ)nnT+sin(θn)
反之:
θ = arccos ⁡ t r ( R ) − 1 2 \theta=\arccos\frac{\mathfrak{tr}(\boldsymbol{R})-1}2 θ=arccos2tr(R)1
其中, t r ( R ) tr(\boldsymbol{R}) tr(R)表示求迹,即矩阵主对角线元素之和。

由于旋转轴在旋转过程中是不动的,则有
R n = n \boldsymbol{Rn}=\boldsymbol{n} Rn=n
这说明转轴 n \boldsymbol{n} n是矩阵 R \boldsymbol{R} R特征值为 1 对应的特征向量,由此可以求出向量 n \boldsymbol{n} n的值。

2.2 欧拉角

欧拉角直观的将旋转分解为X\Y\Z三个轴上的转动,常用和顺序为ZYX旋转,等价于“偏航-俯仰-滚转”(yaw-pitch-roll):

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

此时可以使用向量 [ y , p , r ] T [y,p,r]^T [y,p,r]T描述任意旋转
欧拉角
万向锁问题:即当俯仰角为 ± 90 ° ±90° ±90°时,第三次旋转轴和第一次旋转轴重合,使系统丢失了一个自由度,这被称为奇异性问题。因此欧拉角在SLAM较少使用。

旋转向量也存在奇异性,当0超过2π时会产生周期性,这时将其限定在2π范围内便可以避免。
欧拉角的旋转示意图

3. 四元数

3.1 四元数定义

紧凑又没有奇异性的三维空间旋转表达方式,但是不够直观运算稍微复杂些。

与复数类比,四元数是一种扩展的复数。

二维空间下,在复数平面空间,结合欧拉公式 e i θ = cos ⁡ θ + i sin ⁡ θ e^{i\theta}=\cos\theta+i\sin\theta eiθ=cosθ+isinθ,如下图,向量 z z z旋转 9 0 ∘ 90^{\circ} 90,相当于乘上 i i i
二维四元数

三维空间中,采用四元数描述旋转。
四元数具有一个实部,三个虚部(分别对应z,y,z轴):
q = q 0 + q 1 i + q 2 j + q 3 k \boldsymbol{q}=q_0+q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k
写成向量形式:
q = [ s , v ] , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q=[s,\boldsymbol{v}],s=q_0\in\mathbb{R},\boldsymbol{v}=[q_1,q_2,q_3]^T\in\mathbb{R}^3 q=[s,v],s=q0R,v=[q1,q2,q3]TR3

并且,虚部之间满足:
{ i 2 = j 2 = k 2 = − 1 i j = k , j i = − k j k = i , k j = − i k i = j , i k = − j \left.\left\{\begin{array}{c}i^2=j^2=k^2=-1\\ij=k,ji=-k\\jk=i,kj=-i\\ki=j,ik=-j\end{array}\right.\right. i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j

当四元数的实部为0时,称为虚四元数(分别对应三维坐标),此时,可以用来表示三维空间中的点。

3.2 四元数的计算

现有两个四元数 q a , q b q_a,q_b qa,qb,它们的向量表示为 [ s a , v a ] T , [ s b , v b ] T [s_a,\boldsymbol{v}_a]^{\mathrm{T}},[s_b,\boldsymbol{v}_b]^{\mathrm{T}} [sa,va]T,[sb,vb]T, 或者原始四元数表示为:
q a = s a + x a i + y a j + z a k , q b = s b + x b i + y b j + z b k q_a=s_a+x_ai+y_aj+z_ak,\quad q_b=s_b+x_bi+y_bj+z_bk qa=sa+xai+yaj+zak,qb=sb+xbi+ybj+zbk

  1. 加法:对应部分相加乘法:每一项相乘,最后相加
  2. 模长:各项系数平方和再开方;并且两个四元数乘积的模等于各自模的乘积,即 ∥ q 1 q 2 ∥ = ∥ q 1 ∥ ⋅ ∥ q 2 ∥ \|q_1q_2\|=\|q_1\|\cdot\|q_2\| q1q2=q1q2 ,模长为1的四元数称为单位四元数
  3. 共轭:实部相等,虚部互为相反数: q a ∗ = [ s a , − v a ] T q_a^*=[s_a,-v_a]^T qa=[sa,va]T。并且, q ∗ q = q q ∗ = [ s 2 + v T v q^*q=qq^*=[s^2+\boldsymbol{v}^T\boldsymbol{v} qq=qq=[s2+vTv, 0 ] T \mathbf{0}]^T 0]T
  4. 逆: q − 1 = q ∗ / ∣ ∣ q ∣ ∣ 2 q^{-1}=q^*/||q||^2 q1=q/∣∣q2,则 q − 1 q = q q − 1 = 1 q^{-1}q=qq^{-1}=1 q1q=qq1=1,同时, ( q a q b ) − 1 = q a − 1 q b − 1 (q_aq_b)^{-1}=q_a^{-1}q_b^{-1} (qaqb)1=qa1qb1
  5. 数乘: k q = [ k s , k v ] T k\boldsymbol{q}=[ks,k\boldsymbol{v}]^T kq=[ks,kv]T

3.3 四元数表示旋转

三维空间任意一点均可用一个纯虚四元数来表示 p = [ 0 , v ] T p=[0,v]^T p=[0,v]T
单位四元数 q q q表示三维空间中任意一个旋转,旋转以后得到 p ′ p^{\prime} p,则:
p ′ = q p q − 1 p^{\prime}=qpq^{-1} p=qpq1
p ′ p^\prime p的虚部为旋转后的点的坐标。

3.4 四元数与其他旋转表示法的转换

角轴(旋转向量)到四元数:
q = [ c o s θ 2 , n x s i n θ 2 , n y s i n θ 2 , n z s i n θ 2 ] \boldsymbol{q}=[cos\frac\theta2,n_xsin\frac\theta2,n_ysin\frac\theta2,n_zsin\frac\theta2] q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]

四元数到角轴(旋转向量):
{ θ = 2 a r c c o s q 0 [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] T / s i n θ 2 \begin{cases} \theta=2arccosq_0 \\ [n_x,n_y,n_z]^T=[q_1,q_2,q_3]^T/sin\frac\theta2 \end{cases} {θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sin2θ

四元数到旋转矩阵:
{ R = v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 θ = 2 arccos ⁡ s \begin{cases} \boldsymbol{R}=\boldsymbol{v}\boldsymbol{v}^\mathrm{T}+s^2\boldsymbol{I}+2s\boldsymbol{v}^\wedge+\left(\boldsymbol{v}^\wedge\right)^2 \\ \theta=2\arccos s \end{cases} {R=vvT+s2I+2sv+(v)2θ=2arccoss

3.5 相似、仿射、射影变换

相似、仿射、射影变换

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值