视觉SLAM第三讲

本讲将介绍视觉 SLAM 的基本问题之一:三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。

点、向量和坐标系

  • 点:空间当中的基本元素,没有长度,没有体积。

  • 向量:可以将向量看作从一个点指向另一个点的箭头,它是空间中的一个实体。向量不同于坐标,只有在指定了三维空间中的某个坐标系后,才能讨论该向量在此坐标系下的坐标,即通过若干个实数来表示这个向量。

向量内积:

a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⁡ ⟨ a , b ⟩ \boldsymbol{a} \cdot \boldsymbol{b}=\boldsymbol{a}^{\mathrm{T}} \boldsymbol{b}=\sum_{i=1}^{3} a_{i} b_{i}=|\boldsymbol{a}||\boldsymbol{b}| \cos \langle\boldsymbol{a}, \boldsymbol{b}\rangle ab=aTb=i=13aibi=a∣∣bcosa,b

向量外积:

在这里插入图片描述

反对称矩阵:

a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \boldsymbol{a}^{\wedge}=\left[\begin{array}{ccc}0 & -a_{3} & a_{2} \\a_{3} & 0 & -a_{1} \\-a_{2} & a_{1} & 0\end{array}\right] a= 0a3a2a30a1a2a10

坐标系间的欧式变换:

通过坐标系欧式变换(旋转+平移)表征刚体运动是一种常见的方法。

在实际场景中,我们通常定义各种坐标系。例如,在机器人学中,每个连杆和关节都有自己的坐标系。如果考虑移动的机器人,通常设定一个固定的世界坐标系,同时相机或机器人自身则是一个移动坐标系。刚体坐标系相对于参考坐标系的变换,即是其局部定位的过程。

旋转矩阵的性质:

  1. 正交性

    旋转矩阵是一个正交矩阵,这意味着它的列向量(或行向量)是正交的,并且都是单位向量。 R T R = R R T = I , R − 1 = R T \mathbf{R}^T \mathbf{R} = \mathbf{R} \mathbf{R}^T = \mathbf{I},\mathbf{R}^{-1} = \mathbf{R}^T RTR=RRT=IR1=RT

  2. 行列式为1

    det ⁡ ( R ) = 1 \det(\mathbf{R}) = 1 det(R)=1,旋转矩阵保持向量的长度(或范数)不变, ∣ ∣ R v ∣ ∣ = ∣ ∣ v ∣ ∣ ||\mathbf{R} \mathbf{v}|| = ||\mathbf{v}|| ∣∣Rv∣∣=∣∣v∣∣(向量的范数等于自身的内积平方根)。

变换矩阵与齐次坐标

a ′ = R a + t \boldsymbol{a}'=\boldsymbol{Ra}+\boldsymbol{t} a=Ra+t

该公式完整地表达了欧氏空间的旋转与平移,不过还存在一个小问题:这里的变换关系不是一个线性关系。假设我们进行了两次变换:

b = R 1 a + t 1 , c = R 2 b + t 2 \boldsymbol{b}=\boldsymbol{R_{1} a}+\boldsymbol{t_{1} },\boldsymbol{c}=\boldsymbol{R_{2} b}+\boldsymbol{t_{2} } b=R1a+t1c=R2b+t2

那么,从 a \boldsymbol{a} a c \boldsymbol{c} c的变换为:

c = R 2 ( R 1 a + t 1 ) + t 2 \boldsymbol{c}=\boldsymbol{R_{2}(\boldsymbol{R_{1} a}+\boldsymbol{t_{1} })}+\boldsymbol{t_{2} } c=R2(R1a+t1)+t2

这样的形式在变换多次之后会显得很啰嗦。因此,我们引入齐次坐标和变换矩阵:

[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] ≜ T [ a 1 ] \left[\begin{array}{l}\boldsymbol{a}^{\prime} \\1\end{array}\right]=\left[\begin{array}{ll}\boldsymbol{R} & \boldsymbol{t} \\\mathbf{0}^{\mathrm{T}} & 1\end{array}\right]\left[\begin{array}{l}\boldsymbol{a} \\1\end{array}\right] \triangleq \boldsymbol{T}\left[\begin{array}{l}\boldsymbol{a} \\1\end{array}\right] [a1]=[R0Tt1][a1]T[a1]

这是一个数学技巧:我们在一个三维向量的末尾添加1,将其变成了四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移写在一个矩阵里面,使得整个关系变成线性关系。该式中,矩阵 T \mathbf{T} T称为变换矩阵(Transform Matrix)。

在不引起歧义的情况下,以后我们就直接把它写成 b = T a \mathbf{b} =\mathbf{Ta} b=Ta的样子,默认其中进行了齐次坐标的转换。

旋转向量和四元数

旋转向量

矩阵表示方式至少有以下几个缺点:

  1. 旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式冗余的。同理,变换矩阵用16个量表达了6自由度的变换。那么,是否有更紧凑的表示呢?
  2. 旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为1。变换矩阵也是如此。当想要估计或优化一个旋转矩阵/变换矩阵时,这些约束会使得求解变得更困难

一种紧凑地描述旋转的方式:任意旋转都可以用一个旋转轴和一个旋转角来刻画。

于是,我们可以使用一个向量,其方向与旋转轴一致,而长度等于旋转角。这种向量称为旋转向量(或轴角/角轴,Axis-Angle),只需一个三维向量即可描述旋转。

假设旋转轴为一个单位长度的向量 n \mathbf{n} n,角度为 θ \mathbf{\theta } θ,那么向量 θ n \mathbf{\theta n} θn也可以描述这个旋转,从旋转向量到旋转矩阵的转换过程由罗德里格斯公式:

R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ \boldsymbol{R}=\cos \theta \boldsymbol{I}+(1-\cos \theta) \boldsymbol{n} \boldsymbol{n}^{\mathrm{T}}+\sin \theta \boldsymbol{n}^{\wedge} R=cosθI+(1cosθ)nnT+sinθn

反之,我们也可以计算从一个旋转矩阵到旋转向量的转换。对于转角 θ \mathbf{\theta } θ,取两边的迹,有:

在这里插入图片描述

因此:

θ = arccos ⁡ ( t r ( R ) − 1 2 ) \theta =\arccos (\frac{\mathbf{tr}(R)-1 }{2} ) θ=arccos(2tr(R)1)

关于转轴 n \mathbf{n} n,由于旋转轴上的向量在旋转后不发生改变,说明:

R n = n Rn=n Rn=n

因此,转轴 n \mathbf{n} n是矩阵 R \mathbf{R} R特征值1对应的特征向量。求解此方程,再归一化,就得到了旋转轴。

四元数

四元数的定义

四元数 q q q通常表示为 q = w + x i + y j + z k q=w+xi+yj+zk q=w+xi+yj+zk,其中 w , x , y , z w,x,y,z w,x,y,z是实数, i , j , k i,j,k i,j,k是虚单位,满足以下乘法规则:

i 2 = j 2 = k 2 = i j k = − 1 i^{2} =j^{2} =k ^{2} =ijk=−1 i2=j2=k2=ijk=1

四元数可以用向量形式表示为:

q = ( w , v ) q=(w,\mathbf{v} ) q=(w,v)

其中 w w w是标量部分, v = ( x , y , z ) v=(x,y,z) v=(x,y,z)是向量部分。

四元数表示旋转

四元数可以有效地表示三维空间中的旋转。给定旋转轴 u \mathbf{u} u和旋转角度 θ θ θ,我们可以构造一个四元数 q q q来表示旋转:

q = c o s ( θ 2 ​ ) + s i n ( θ 2 ) ( u ⋅ i ) q=\mathrm{cos} ( \frac{\theta}{2} ​)+\mathrm{sin} (\frac{\theta}{2})(\mathbf{u} ⋅\mathbf{i} ) q=cos(2θ)+sin(2θ)(ui)

其中 u \mathbf{u} u是单位向量,表示旋转轴, u = ( u x , u y , u z ) \mathbf{u}=(u_{x},u_{y},u_{z} ) u=(ux,uy,uz),且 i = ( i , j , k ) \mathbf{i}=(i,j,k ) i=(i,j,k)

更具体地,四元数 q q q的分量为:

q = ( c o s ( θ 2 ​ ) , u x ​ s i n ( θ 2 ​ ) , u y ​ s i n ( θ 2 ​ ) , u z ​ s i n ( θ 2 ) ) q=(\mathrm{cos} (\frac{\theta}{2}​),u_{x} \mathrm{​sin} (\frac{\theta}{2}​),u_{y} \mathrm{​sin} (\frac{\theta}{2}​),u_{z} \mathrm{​sin} (\frac{\theta}{2})) q=(cos(2θ),uxsin(2θ),uysin(2θ),uzsin(2θ))

四元数旋转向量

如果我们要旋转一个三维向量 p p p,使用四元数的方法如下:

  1. 构造旋转四元数

    q = ( c o s ( θ 2 ​ ) , u x ​ s i n ( θ 2 ​ ) , u y ​ s i n ( θ 2 ​ ) , u z ​ s i n ( θ 2 ) ) q=(\mathrm{cos} (\frac{\theta}{2}​),u_{x} \mathrm{​sin} (\frac{\theta}{2}​),u_{y} \mathrm{​sin} (\frac{\theta}{2}​),u_{z} \mathrm{​sin} (\frac{\theta}{2})) q=(cos(2θ),uxsin(2θ),uysin(2θ),uzsin(2θ))

  2. 构造向量四元数(纯四元数):

    p = ( 0 , p x ​ , p y , p z ​ ) p=(0,p_{x}​,p_{y},p_{z} ​) p=(0,px,py,pz)

  3. 计算旋转后的向量
    使用四元数乘法进行旋转:

    p ′ = q p q − 1 p' =qpq^{-1} p=qpq1

    其中, q − 1 q^{-1} q1等于 q q q的共轭( q − 1 = q ˉ / ∥ q ∥ 2 q^{-1}=\bar{q} / \parallel q \parallel ^{2} q1=qˉ/q2,共轭也就是实部不变,虚数相反​)。

习题p6:

一般线性方程 A x = b Ax=b Ax=b有哪几种做法?

  • 从解析解和数值解分析

    解析解

    解析解(Analytical Solution)指的是通过数学公式或代数操作直接求出精确解。对于线性方程组 A x = b Ax=b Ax=b,常用的方法有:

    1. 高斯消元法
      通过行变换将矩阵 A A A 化为上三角矩阵,然后通过回代求解 x x x

      • 优点:可以得到精确解。
      • 缺点:计算复杂度较高,适用于较小规模的线性方程组。
    2. 矩阵逆
      如果矩阵 A A A是可逆的,则解可以表示为 x = A − 1 b x=A^{-1} b x=A1b

      • 优点:直接使用矩阵运算得到精确解。
      • 缺点:计算矩阵逆的过程复杂度高( O ( n 3 ) O(n^{3}) O(n3)),并且数值不稳定;对于大规模矩阵病态矩阵不适用。
    3. 克拉默法则
      如果 A A A是方阵且行列式不为零,则每个未知数可以用行列式表示。

      • 优点:概念简单。
      • 缺点:仅适用于小规模方程组,计算行列式复杂度高( O ( n ! ) O(n!) O(n!))。

    数值解

    数值解(Numerical Solution)指的是通过数值方法近似求解方程组。常用的数值解方法有:

    1. 迭代法

      • 雅可比迭代法(Jacobi Method):依次更新每个未知数。
      • 高斯-赛德尔迭代法(Gauss-Seidel Method):每次迭代使用最新的解。
      • 超松弛迭代法(SOR Method):对高斯-赛德尔方法进行加速。
      • 优点:适用于大型稀疏矩阵
      • 缺点:收敛性依赖于矩阵的特性,可能需要很多迭代次数。
    2. 直接法

      • LU 分解:将矩阵 A A A分解为下三角矩阵 L L L和上三角矩阵 U U U,然后解两个三角方程组。
      • QR 分解:将矩阵 A A A分解为正交矩阵 Q Q Q和上三角矩阵 R R R,然后解三角方程组。
      • Cholesky 分解:如果矩阵 A A A是正定的,则可以分解为 L L T LL^{T} LLT,其中 L L L是下三角矩阵。
      • 优点:比计算矩阵逆更稳定、更高效,适用于大规模或病态矩阵
      • 缺点:仍然是 O ( n 3 ) O(n^{3}) O(n3)复杂度,对于非常大的矩阵可能不适用。

    比较与选择

    • 解析解

      • 优点:如果可行,能提供精确解。
      • 缺点:仅适用于小规模问题,且计算复杂度高,数值不稳定。
    • 数值解

      • 优点:适用于大规模问题和稀疏矩阵,计算速度快,方法稳定。
      • 缺点:提供的是近似解,可能存在数值误差,收敛性依赖于问题特性。

    在实际应用中,选择解析解还是数值解通常取决于问题的规模矩阵的特性计算资源。对于小规模的线性方程组或特定类型的矩阵(如对称正定矩阵),解析解是一个可行的选择。而对于大规模的线性方程组或稀疏矩阵,数值解通常是更好的选择。

数值解解析解是解决数学方程或问题的两种不同方法。它们各自有其优缺点和适用范围。下面详细介绍它们的定义、区别、优缺点。

定义
  • 解析解

    解析解是通过代数操作解析函数得到的精确解。它通常用数学表达式来表示,并且能提供问题的精确解。

  • 数值解

    数值解是通过数值方法计算机算法近似求得的解。它提供了问题的近似解,通常以数值形式表示。

区别
  1. 形式

    • 解析解:以数学公式或解析表达式的形式给出。
    • 数值解:以数值结果或近似值的形式给出。
  2. 精度

    • 解析解:精确解,假设没有计算误差。
    • 数值解:近似解,精度取决于算法、步长、计算机精度等因素。
  3. 求解过程

    • 解析解:通常通过符号运算、代数技巧或解析函数求得。
    • 数值解:通常通过迭代算法、数值方法或计算机程序求得。
  4. 适用范围

    • 解析解:适用于方程或问题有明确的解析表达式,并且能通过代数操作求解的情况。
    • 数值解:适用于复杂方程或问题解析求解困难或无解析解的情况。
优缺点

解析解

  • 优点:
    • 提供精确解
    • 便于理解问题的内在结构和性质
  • 缺点:
    • 复杂或高阶问题可能难以求得解析解
    • 某些方程或问题根本没有解析解

数值解

  • 优点:
    • 能处理复杂问题无解析解的问题。
    • 利用计算机可以高效地求解大规模问题。
  • 缺点:
    • 解是近似的,精度依赖于算法和计算资源
    • 可能会有数值误差稳定性问题
  • 提供精确解
    • 便于理解问题的内在结构和性质
  • 缺点:
    • 复杂或高阶问题可能难以求得解析解
    • 某些方程或问题根本没有解析解

数值解

  • 优点:
    • 能处理复杂问题无解析解的问题。
    • 利用计算机可以高效地求解大规模问题。
  • 缺点:
    • 解是近似的,精度依赖于算法和计算资源
    • 可能会有数值误差稳定性问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Just-do-it!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值