在SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)领域中,四元数是一种用于表示旋转的有效方法。四元数 ( q ) 和它的负数 ( -q ) 实际上代表相同的物理旋转,但它们在数学表达上有细微的不同。

四元数 ( q ) 与 ( -q )

  • 等效性:四元数 ( q ) 和 ( -q ) 表示相同的旋转。这是因为四元数的实部和虚部都取相反数时,相当于将旋转轴反向,同时旋转角度也变为相反方向,这两个变化相互抵消,因此最终的旋转效果是相同的。

  • 数值差异:尽管 ( q ) 和 ( -q ) 在几何意义上等价,但在数值计算和存储时,它们是不同的。例如,在SLAM算法中,当使用四元数进行状态估计或数据关联时,如果不对四元数进行适当的归一化处理,可能会导致数值上的不一致,进而影响到算法的性能。

  • 选择问题:在实际应用中,有时需要选择一个标准形式来避免这种二义性。例如,可以选择使四元数的实部 ( w ) 非负,或者选择使得四元数的模最大的元素非负,以此来标准化四元数,确保唯一性。

结论

总的来说,在SLAM中,虽然四元数 ( q ) 和 ( -q ) 表示相同的旋转,但是为了保证数值稳定性和算法的一致性,通常会采取措施来消除这种二义性。这可以通过标准化四元数来实现,确保所有使用的四元数都遵循同一套规则。

四元数的基本性质

一个单位四元数 qqq 可以表示为:
q=cos⁡(θ2)+sin⁡(θ2)nq = \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n}q=cos(2θ)+sin(2θ)n
其中:

  • cos⁡(θ2)\cos\left(\frac{\theta}{2}\right)cos(2θ) 是四元数的实部。
  • sin⁡(θ2)n\sin\left(\frac{\theta}{2}\right) \mathbf{n}sin(2θ)n 是四元数的虚部。
  • n\mathbf{n}n是单位向量,表示旋转轴。
  • θ\thetaθ 是旋转角度。

四元数 −q-qq

四元数 −q-qq可以表示为:
−q=−cos⁡(θ2)−sin⁡(θ2)n-q = -\cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n}q=cos(2θ)sin(2θ)n

旋转的几何意义

  1. 四元数 qqq 的旋转

    • 实部:cos⁡(θ2)\cos\left(\frac{\theta}{2}\right)cos(2θ)
    • 虚部:sin⁡(θ2)n\sin\left(\frac{\theta}{2}\right) \mathbf{n}sin(2θ)n
    • 表示绕 n\mathbf{n}n 旋转 θ\thetaθ
  2. 四元数 −q-qq 的旋转

    • 实部:−cos⁡(θ2)-\cos\left(\frac{\theta}{2}\right)cos(2θ)
    • 虚部:−sin⁡(θ2)n-\sin\left(\frac{\theta}{2}\right) \mathbf{n}sin(2θ)n
    • 表示绕 −n\mathbf{-n}n 旋转 −θ-\thetaθ

考虑四元数的旋转公式:

我们可以用四元数表达对一个点的旋转。假设有—个空间三维点 p=[x,y,z]∈R3p = [x, y, z] \in \mathbb{R}^3p=[x,y,z]R3,以及一个由单位四元数qqq 指定的旋转。三维点 ppp 经过旋转之后变为p′p'p 。如果使用矩阵描述,那么有p′=Rpp' = R pp=Rp 。而如果用四元数描述旋转,它们的关系又如何表达呢?

首先,把三维空间点用一个虚四元数来描述:

p=[0,x,y,z]T=[0,v]Tp = [0, x, y, z]^T = [0, v]^Tp=[0,x,y,z]T=[0,v]T

相当于把四元数的 3 个虚部与空间中的 3 个轴相对应。那么,旋转后的点 p′p'p可表示为这样的乘积:

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

其中 q−1q^{-1}q1qqq的逆四元数,对于单位四元数qqq,其逆四元数就是其共轭四元数q∗q^*q
q∗=[w,−x,−y,−z]q^* = [w, -x, -y, -z]q=[w,x,y,z],这里的乘法均为四元数乘法,结果也是四元数。最后把p′p'p的虚部取出,即得旋转之后点的坐标。

旋转公式的推导

  1. 四元数qqq 的旋转
    v′=qvq−1\mathbf{v}' = q \mathbf{v} q^{-1}v=qvq1
    其中 q−1q^{-1}q1qqq 的逆,对于单位四元数qqq,有 q−1=q∗q^{-1} = q^*q1=q(共轭):
    q−1=cos⁡(θ2)−sin⁡(θ2)nq^{-1} = \cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n}q1=cos(2θ)sin(2θ)n

  2. 四元数 −q-qq 的旋转
    v′′=(−q)v(−q)−1\mathbf{v}'' = (-q) \mathbf{v} (-q)^{-1}v′′=(q)v(q)1
    其中 (−q)−1(-q)^{-1}(q)1−q-qq 的逆,对于单位四元数 −q-qq,有(−q)−1=−q∗(-q)^{-1} = -q^*(q)1=q
    (−q)−1=−(cos⁡(θ2)−sin⁡(θ2)n)(-q)^{-1} = -\left( \cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right)(q)1=(cos(2θ)sin(2θ)n)
    (−q)−1=−cos⁡(θ2)+sin⁡(θ2)n(-q)^{-1} = -\cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n}(q)1=cos(2θ)+sin(2θ)n

旋转等价性的证明

  1. 四元数 ( q ) 的旋转
    v′=(cos⁡(θ2)+sin⁡(θ2)n)v(cos⁡(θ2)−sin⁡(θ2)n)\mathbf{v}' = \left( \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right) \mathbf{v} \left( \cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right)v=(cos(2θ)+sin(2θ)n)v(cos(2θ)sin(2θ)n)

  2. 四元数 ( -q ) 的旋转
    v′′=(−cos⁡(θ2)−sin⁡(θ2)n)v(−cos⁡(θ2)+sin⁡(θ2)n)\mathbf{v}'' = \left( -\cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right) \mathbf{v} \left( -\cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right)v′′=(cos(2θ)sin(2θ)n)v(cos(2θ)+sin(2θ)n)

    由于乘法的性质,我们可以提取负号:
    v′′=(−1)(cos⁡(θ2)+sin⁡(θ2)n)v(−1)(cos⁡(θ2)−sin⁡(θ2)n)\mathbf{v}'' = \left( -1 \right) \left( \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right) \mathbf{v} \left( -1 \right) \left( \cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right)v′′=(1)(cos(2θ)+sin(2θ)n)v(1)(cos(2θ)sin(2θ)n)
    v′′=(cos⁡(θ2)+sin⁡(θ2)n)v(cos⁡(θ2)−sin⁡(θ2)n)\mathbf{v}'' = \left( \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right) \mathbf{v} \left( \cos\left(\frac{\theta}{2}\right) - \sin\left(\frac{\theta}{2}\right) \mathbf{n} \right)v′′=(cos(2θ)+sin(2θ)n)v(cos(2θ)sin(2θ)n)
    v′′=v′\mathbf{v}'' = \mathbf{v}'v′′=v

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐