视觉SLAM14讲笔记分享——第三章【三维空间刚体运动】

这一章开始有一些数学公式上的推导和定义的理解,但是还不算太难😀

三维空间刚体运动

旋转矩阵

1.点,向量和坐标系

  • 点是指空间中的基本元素,向量是指某点指向某点的有方向的箭头,而点和向量都只有在坐标系中讨论才有意义。

  • 复习一下线代的知识,关于向量的运算!

    • 基底:不共线的向量e 1 _1 1,e 2 _2 2叫做这一平面内所有向量的一组基底,平面上任何向量(包括零向量)都可以用基底表示。
      空间中也是如此,任意向量a在空间的一组基(e 1 _1 1,e 2 _2 2,e 3 _3 3)有这样一个坐标: 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 = \begin{bmatrix}e_1&e_2&e_3\end{bmatrix} \begin{bmatrix}a_1\\a_2\\a_3\end{bmatrix} = a_1e_1 + a_2e_2 + a_3e_3 a=[e1e2e3]a1a2a3=a1e1+a2e2+a3e3

    • 坐标系:右手系为伸开右手,大拇指是X轴正方向,食指是Y轴正方向,其他三个手指是Z轴正方向,左手系同理。
      坐标系

    • 向量内积:内积可理解为第一个向量投影到第二个向量上(无所谓向量的顺序),可以表示为 a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ c o s < a , b > a , b ∈ R 3 a\cdot b = a^Tb = \sum_{i=1}^3 a_ib_i = |a||b|cos<a,b>\\a,b \in R^3 ab=aTb=i=13aibi=abcos<a,b>a,bR3

    • 向量外积: a a a b b b的外积结果是一个法向量,垂直于 a a a b b b构成的平面。
      还有一个用途是通过两个向量的外积,生成第三个垂直于 a a a b b b的法向量,从而构建X、Y、Z坐标系。
      外积可以表示为 a × b = [ e 1 e 2 e 3 a 1 a 2 a 3 b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = d e f a a\times b = \begin{bmatrix}e_1&e_2&e_3 \\ a_1&a_2&a_3 \\ b_1&b_2&b_3 \end{bmatrix} = \begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1-a_1b_3 \\ a_1b_2 - a_2b_1 \end{bmatrix} = \begin{bmatrix}0&-a_3&a_2 \\ a_3&0&-a_1 \\ -a_2&a_1&0\end{bmatrix}b\stackrel{def}{=} a a×b=e1a1b1e2a2b2e3a3b3=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b=defa^ b b b
      式中^符号,可以理解为反对称符号,将向量a写成一个矩阵,这样两个向量的乘法就变成了矩阵和向量的乘法,把它变成线性运算。

2.坐标系间的欧式变换

  • 欧式变换:由两个坐标系间的旋转和平移运动组成。
  • 描述坐标系间的运动:旋转矩阵和平移矩阵
    • 书中关于旋转矩阵的推导:用一个正交正交基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3)很形象的代表一个三维坐标系,现在这个坐标系动了一下,变成 ( e 1 ′ , e 2 ′ , e 3 ′ ) (e_1',e_2',e_3') (e1,e2,e3),而曾经在坐标系中有一个向量小a,自身在坐标系中的位置也随着坐标系在变化,前后变化是 [ a 1 a 2 a 3 ] T 和 [ a 1 ′ a 2 ′ a 3 ′ ] T \begin{bmatrix} a_1&a_2&a_3\end{bmatrix}^T和\begin{bmatrix} a_1'&a_2'&a_3'\end{bmatrix}^T [a1a2a3]T[a1a2a3]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 ′ ] \begin{bmatrix} e_1&e_2&e_3\end{bmatrix} \begin{bmatrix} a_1\\a_2\\a_3\end{bmatrix} = \begin{bmatrix} e_1'&e_2'&e_3'\end{bmatrix} \begin{bmatrix} a_1'\\a_2'\\a_3'\end{bmatrix} [e1e2e3]a1a2a3=[e1e2e3]a1a2a3
      将等式简化,可以两边同时左乘 [ e 1 e 2 e 3 ] T \begin{bmatrix} e_1&e_2&e_3\end{bmatrix}^T [e1e2e3]T,这样左边的系数就会变为1,整个式子会变成这个样子
      [ 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 ′ \begin{bmatrix} a_1\\a_2\\a_3\end{bmatrix} = \begin{bmatrix} e_1^Te_1'&e_1^Te_2'&e_1^Te_3'\\e_2^Te_1'&e_2^Te_2'&e_2^Te_3'\\e_3^Te_1'&e_3^Te_2'&e_3^Te_3'\end{bmatrix} \begin{bmatrix} a_1'\\a_2'\\a_3'\end{bmatrix}\stackrel{def}{=}Ra' a1a2a3=e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3a1a2a3=defRa
      是的,中间那一大块就是旋转矩阵了。

    看上去比较复杂难懂,但其实旋转矩阵就是绕三个轴的基本旋转的序列复合。

    • 平移矩阵
      同理,平移矩阵也是在三个轴方向不同移动的复合。坐标系1到坐标系2的平移移动中,向量a在两个坐标系下的坐标为 a 1 , a 2 a_1,a_2 a1,a2,它们的关系是:
      a 1 = R 12 a 2 + t 12 a_1 = R_{12}a_2+t_{12} a1=R12a2+t12
      其中 R 12 R_{12} R12指坐标系2的向量变换到坐标系1中, t 12 t_{12} t12指从坐标系1到坐标系2的平移向量。

3.变换矩阵与齐次坐标

  • 变换矩阵:当我们拥有旋转矩阵和平移矩阵后,人们更喜欢用一个统一简单的形式来描述欧式变换,这就诞生了变换矩阵: T = [ R t 0 T 1 ] T =\begin{bmatrix}R&t\\0^T&1 \end{bmatrix} T=[R0Tt1]
  • 齐次坐标:当旋转矩阵和平移矩阵并排放在一起形成一个4X3的矩阵时,一切都显得那么不和谐,所以我们在三维向量底部添加1,使之变为4X4的向量,称为齐次坐标。

旋转向量和欧拉角

用几何的方式来描述旋转

  • 旋转向量:是一个三维向量,其方向与旋转轴一致,长度等于旋转角。相比起旋转矩阵来说可以更紧凑简洁的描述旋转信息。
    旋转向量到旋转矩阵的转换——由罗德里格斯公式完成。
    R = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n ^ R =cos{\theta}I+(1-cos{\theta})nn^T + sin{\theta}n\hat{} R=cosθI+(1cosθ)nnT+sinθn^
    转角 θ = arccos ⁡ t r ( R ) − 1 2 {\theta} = \arccos {tr(R) - 1\over2} θ=arccos2tr(R)1,转轴 R n = n Rn = n Rn=n,因此,转轴n是矩阵R特征值对应的特征向量。
  • 欧拉角:假设一架飞机在天上飞行,飞机正前方为X轴,飞机右侧为Y轴,正上方为Z轴,那么可以把任意的旋转分解为这三个轴上的转角。
  1. 绕飞机的Z轴旋转,得到偏航角yaw;
  2. 旋转后的Y轴旋转,得到俯仰角pitch;
  3. 旋转后的X轴旋转,得到滚转角roll。
    用这样三个分离的转角欧拉角,可以很形象的看到旋转的变化,不像矩阵那样难懂。
  • 万向锁:选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。

对万向锁的理解:在网上有解释比较详细,是以手机为例,长边为X轴,短边为Y轴,屏幕方向为Z轴,假如绕Y轴不是90度,那么手机可以任意旋转;假如绕Y轴旋转了90度,接下来的旋转不管是绕X轴还是绕Z轴,Z轴会永远平行与桌面。

四元数

人们喜欢紧凑,精巧的表达旋转的方式,同时既不像旋转矩阵那样有兀余性,又不像欧拉角那样有奇异性,这就诞生了四元数,其在计算机图形学,物理学上有大量的应用。

  • 什么是四元数:四元数是数学家Hamilton找到的一种扩展的复数,形如 q = q 0 + q 1 i + q 2 j + q 3 k q = q_0+q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k(其中, i 2 = k 2 = j 2 = i j k = − 1 i^2 = k^2 = j^2 = ijk = -1 i2=k2=j2=ijk=1),四元数也可以写成标量和向量的有序对形式,即实部与虚部分开,并用一个三维的向量表示虚部。
    q = [ s , v ]   ( v = [ x y z ] s , x , y , z ∈ R ) q = [s,v] \space (v = \begin{bmatrix} x\\y\\z \end {bmatrix} s,x,y,z \in R) q=[s,v] (v=xyzs,x,y,zR)
  • 四元数的简单理解:复数的运算可以形象的表示在二维中向量的运动,两个复数相乘实际上是旋转与缩放的组合。到三维空间中,也有相应的四元数可以表示向量的旋转。
  • 四元数表示旋转:
    定义点p(x,y,z),点p用虚四元数表示为 p = [ 0 , x , y , z ] T = [ 0 , v ] T p = \begin{bmatrix}0,x,y,z \end {bmatrix}^T = \begin{bmatrix}0,v \end {bmatrix}^T p=[0,x,y,z]T=[0,v]T,这样可以看作四元数三个虚部与空间中的三个轴对应,旋转后的点 p ′ = q p q − 1 p' = qpq^{-1} p=qpq1,最后把 p ′ p' p的虚部取出,即为旋转之后点的坐标。
    • 四元数到旋转矩阵的变换关系:设 q = [ s , v ] T q = [s,v]^T q=[s,v]T
      则有 R = v v T = s 2 I + 2 s v ^ + ( v ^   ) 2 R =vv^T = s^2I+2sv\hat{} + (v\hat{}\space)^2 R=vvT=s2I+2sv^+(v^ )2
    • 四元数到旋转向量的转换公式: { θ = 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\\ \begin{bmatrix} n_x,n_y,n_z \end{bmatrix} ^T = \begin{bmatrix} q_1,q_2,q_3 \end{bmatrix} ^T /sin {\theta\over 2 }\end{cases} {θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sin2θ

相似,仿射,射影变换

  • 相似变换:允许物体均匀缩放。
    T s = [ s R t 0 T 1 ] T_s = \begin{bmatrix} sR&t\\0^T&1 \end{bmatrix} Ts=[sR0Tt1]
  • 仿射变换:对物体平移+线性变换,平行关系,比例关系都不变。
    T A = [ A t 0 T 1 ] T_A = \begin{bmatrix} A&t\\0^T&1 \end{bmatrix} TA=[A0Tt1]
  • 射影变换(透视变换),像油画里的透视关系一样,满足近大远小。
    T P = [ A t a T v ] T_P = \begin{bmatrix} A&t\\a^T&v \end{bmatrix} TP=[AaTtv]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值