视觉SLAM——三位空间刚体运动复习(二)

由于旋转矩阵/变换矩阵存在冗余,我们希望以更紧凑的方式表达;又由于其自身又带有约束(必须正交,行列式为1),使得优化和表达变得困难。所以引入以下几种方式:

旋转向量

  • 任意旋转都可以通过旋转轴和一个旋转角来刻画;于是我们使用一个向量,方向与旋转轴一致,长度等于旋转角。这种向量成为旋转向量或轴角(Axis-Angle)。只需3维就可以表达旋转,6维即可表达变换。事实上,旋转向量就是李代数?
  • 可根据罗德里格斯公式对旋转矩阵和旋转向量进行转换。

欧拉角

  • 欧拉角相比于旋转矩阵和旋转向量更直观,但会遇到万向锁问题(奇异性),所以不适合迭代和插值,往往用于人机交互中。

四元数性质

  • 由于三个量表达三维空间不免带有奇异性,旋转向量和欧拉角都带有奇异性,所以想要无奇异表达三个量是不足够的,引入四元数,其性质类似于复数。由一个实部和三个虚部组成,形式如 q = q 0 + q 1 i + q 2 j + q 3 k \bf q = q_0 + q_1i + q_2j + q_3k q=q0+q1i+q2j+q3k 其中 i , j , k i , j, k i,j,k为四元数的三个对应的虚部。三个虚部满足以下关系:
    { i 2 = j 2 = k 2 = − 1 , i j = k , j i = − k j k = i , k j = − i k i = j , i l = − j \begin{cases} i^2 = j^2 = k^2 = -1, \\ ij = k, ji = -k \\jk =i, kj = -i \\ki = j, il = -j \end{cases} i2=j2=k2=1,ij=k,ji=kjk=i,kj=iki=j,il=j
    也有另一种表达方式用一个向量和一个标量的i形式 q = [ s , v ] q = [s, v] q=[s,v], 这里s是四元数的实部,v是四元数的虚部,若s为0 称为虚四元数。考虑到三维空间需要三个轴,四元数也有三个虚部。我们能用单位四元数表达三维空间中任意一个旋转。但不像复数乘以 i i i 意味旋转90 ,四元数乘以 i i i 意味旋转180,这样才能保证 i j = k ij = k ij=k 的性质,而 i 2 = − 1 i^2 = -1 i2=1 意味绕 i i i 轴旋转360得到一个完全相反的东西,720才回到原来状态。
  • 假设某个旋转是绕单位向量 n = [ n x , n y , n z ] T n = [n_x, n_y, n_z]^T n=[nx,ny,nz]T 进行了角度 θ \theta θ 的旋转,那么这个旋转的四元数形式是
    q = [ c o s θ 2 , n x s i n θ 2 , n y s i n θ 2 , n z s i n θ 2 ] T q= [cos \frac{\theta}{2}, n_xsin\frac{\theta}{2}, n_ysin\frac{\theta}{2},n_zsin\frac{\theta}{2}]^T q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T
    我推测这;里之所以取 θ 2 \frac {\theta}{2} 2θ ,是因为要满足加 2 π 2\pi 2π 的时候实现反转, 4 π 4\pi 4π 的时候返回原来位置。而大家同时除以2并没有什么影响。如果理解的不对,请指正哈!
  • 四元数中任意旋转都可以由两个互为相反数的四元数表示。当 θ \theta θ 为0时,则得到一个没有任何旋转的实四元数 [ ± 1 , 0 , 0 , 0 ] T [\pm 1,0, 0, 0]^T [±1,0,0,0]T

四元数运算

  • 加减法:就按对应项相加就好;
  • 乘法:则主要是内外积运算,然而由于涉及到外积,所以四元数乘法不可交换,除非共线,此时外积项为0;
  • 共轭:则是虚部取成相反数,实部不变,共轭与本身想乘会得到一个实四元数,即模长的平方;
  • 模长:各项平方和的平方根
  • : 四元数逆为 q − 1 = q ∗ / ∣ ∣ q ∣ ∣ 2 q^{-1} = q^{*}/||q||^2 q1=q/q2 所以四元数和自己逆的乘积为实四元数1,如果 q q q 为单位四元数,其逆和共轭就是同一个量,乘积的逆有和矩阵相似的性质:
    ( q a q b ) − 1 = q b − 1 q a − 1 (q_aq_b)^{-1} = q_b^{-1}q_a^{-1} (qaqb)1=qb1qa1
  • 数乘和点乘:数乘和向量相似,点乘对应位置相乘。

四元数表示旋转

  • 设空间三维点 p = [ x , y , z ] p = [x, y, z] p=[x,y,z] , 以及由轴角 n , θ n, \theta n,θ 指定的旋转,三维点 p p p 经过旋转之后变为 p ′ p^{'} p, 则三维空间点用四元数描述为:
    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{\theta}{2}, nsin\frac{\theta}{2}] q=[cos2θ,nsin2θ]
    则旋转后的点可以表示为:
    p ′ = q p q ′ p^{'} = qpq^{'} p=qpq

四元数到旋转矩阵转换

  • 四元数转换为旋转矩阵的较直观方法:把四元数 q q q 转换为轴角 n n n θ \theta θ ,然后根据罗德里格斯公式转换为矩阵。
  • 事实上 R R R 对应的四元数表示并不唯一,例如 q q q − q -q q 表示同一个旋转。

相似、仿射、射影变换

  • 相似变换:通过加上尺度因子 s s s 允许物体进行均匀缩放;
  • 仿射变换:要求原来的旋转矩阵 R R R 是一个可逆矩阵就好,而不必正交,所以经过变换后只能保证平行四边形;
  • 射影变换:左上角可逆矩阵 A A A,,右上角平移 t t t, 左下角为缩放 a T a^T aT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值