视觉SLAM十四讲学习笔记——三维空间刚体运动(ch3~四元数)

一、四元数的定义

旋转矩阵用九个量描述三自由度的旋转,具有冗余性
欧拉角和旋转向量是紧凑的,但具有奇异性
事实上,我们找不到不带奇异性的三维向量描述方式。三维旋转是一个三维流形,想要无奇异性地表达它,用三个量是不够的。

回忆我们以前学习过的复数。我们用复数集 C : \mathbb{C}: C: 表示复平面上的向量,而复数的乘法则能表示复平面上的旋转: 例如,乘上复数 相当于逆时针把一个复向量旋转 90 度。类似的,在表达三维空间旋转时,也有一种类似于复数的代数:四元数 (Quaternion)。四元数是 Hamilton 找到的一种扩展的复数它既是紧凑的,也没有奇异性。如果说缺点的话四元数不够直观,其运算稍为复杂一些

个四元数q拥有一个实部和三个虚部。像这样:
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,
其中 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 k = − j \begin{aligned} &\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. \end{aligned} i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j
由于它的这种特殊表示形式,有时人们也用一个标量和一个向量来表达四元数:
q = [ s , v ] , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 , q=[s,\boldsymbol{v}],\quad s=q_0\in\mathbb{R},v=[q_1,q_2,q_3]^T\in\mathbb{R}^3, q=[s,v],s=q0R,v=[q1,q2,q3]TR3,
这里, s s s 称为四元数的实部,而 v \boldsymbol{v} v称为它的虚部。如果一个四元数虚部为0,称之为实四元数。反之,若它的实部为 0,称之为虚四元数

我们能用单位四元数表示三维空间中任意一个旋转,不过这种表达方式和复数有着微妙的不同。
这种表达方式和旋转矩阵、旋转向量有什么关系呢?
先看旋转向量。
假设某个旋转是绕单位向量 n = [ n x , n y , n z ] T \boldsymbol{n}=\left[n_x,n_y,n_z\right]^T n=[nx,ny,nz]T进行了角度为 θ θ θ的旋转,那么这个旋转的四元数形式为:
q = [ cos ⁡ θ 2 , n x sin ⁡ θ 2 , n y sin ⁡ θ 2 , n z sin ⁡ θ 2 ] T . \boldsymbol{q}=\left[\cos\frac{\theta}{2},n_x\sin\frac{\theta}{2},n_y\sin\frac{\theta}{2},n_z\sin\frac{\theta}{2}\right]^T. q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T.
反之,亦可从单位四元数中计算出对应旋转轴与夹角:
{ θ = 2 arccos ⁡ q 0 [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] T / sin ⁡ θ 2 \begin{cases}\theta=2\arccos q_0\\ \left[n_x,n_y,n_z\right]^T=\left[q_1,q_2,q_3\right]^T/\sin\frac\theta2\end{cases} {θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sin2θ
这式子给我们一种微妙的“转了一半”的感觉。同样,对式 q = [ cos ⁡ θ 2 , n x sin ⁡ θ 2 , n y sin ⁡ θ 2 , n z sin ⁡ θ 2 ] T \boldsymbol{q}=\left[\cos\frac{\theta}{2},n_x\sin\frac{\theta}{2},n_y\sin\frac{\theta}{2},n_z\sin\frac{\theta}{2}\right]^T q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T θ θ θ加上 2 π 2\pi 2π,我们得到一个相同的旋转,但此时对应的四元数变成了 − q \boldsymbol{-q} q。因此,在四元数中,任意的旋转都可以由两个互为相反数的四元数表示。同理,取 θ θ θ为0,则得到一个没有任何旋转的实四元数:
q 0 = [ ± 1 , 0 , 0 , 0 ] T ⋅ q_0=[\pm1,0,0,0]^T\cdot q0=[±1,0,0,0]T

二、四元数的运算

四元数和通常复数一样,可以进行一系列的运算。常见的有四则运算、数乘、求逆、共钜等等。
现有两个四元数 q a q_a qa, q b q_b qb,它们的向量表示为 [ s a , v a ] [s_a,v_a] [sa,va], [ s b , v b ] [s_b,v_b] [sb,vb],或者原始四元数表示为:
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 . \boldsymbol{q}_a=s_a+x_ai+y_aj+z_ak,\quad\boldsymbol{q}_b=s_b+x_bi+y_bj+z_bk. qa=sa+xai+yaj+zak,qb=sb+xbi+ybj+zbk.
那么,运算如下:

2.1 加减法

q a ± q b = [ s a ± s b , v a ± v b ] . \boldsymbol{q}_a\pm\boldsymbol{q}_b=[s_a\pm s_b,\boldsymbol{v}_a\pm\boldsymbol{v}_b]. qa±qb=[sa±sb,va±vb].

2.2 乘法

乘法是把 q a q_a qa的每一项与 q b q_b qb每项相乘,最后相加.
q a q b = s a s b − x a x b − y a y b − z a z b + ( s a x b + x a s b + y a z b − z a y b ) i + ( s a y b − x a z b + y a s b + z a b b ) j + ( s a z b + x a y b − x b y a + z a s b ) k . \begin{aligned} \boldsymbol{q_{a}\boldsymbol{q_{b}}} = & s_as_b-x_ax_b-y_ay_b-z_az_b \\ &+(s_ax_b+x_as_b+y_az_b-z_ay_b)i \\ &+(s_ay_b-x_az_b+y_as_b+z_ab_b)j \\ &+\left(s_az_b+x_ay_b-x_by_a+z_as_b\right)k. \end{aligned} qaqb=sasbxaxbyaybzazb+(saxb+xasb+yazbzayb)i+(saybxazb+yasb+zabb)j+(sazb+xaybxbya+zasb)k.
简洁表达:
q a q b = [ s a s b − v a T v b , s a v b + s b v a + v a × v b ] . \boldsymbol{q}_a\boldsymbol{q}_b=\begin{bmatrix}s_a s_b-\boldsymbol{v}_a^T\boldsymbol{v}_b,s_a\boldsymbol{v}_b+s_b\boldsymbol{v}_a+\boldsymbol{v}_a\times\boldsymbol{v}_b\end{bmatrix}. qaqb=[sasbvaTvb,savb+sbva+va×vb].

2.3 共轭

2.4 模长

2.5 逆

2.6 数乘与点乘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值