无人机 四元数
2025-12-01
论文阅读
00

目录

四元数基本定义
四元数的几何意义
如何用四元数表示旋转
四元数的模长
四元数乘法(旋转复合)
为什么用四元数而不是旋转矩阵

四元数基本定义

四元数是一个4维数,可以写成: q=w+xi+yj+zkq = w + xi + yj + zk

或者用向量形式: q=[w,x,y,z]Tq = [w, x, y, z]^T

其中:

  • ww 是实部(标量部分)
  • x,y,zx, y, z 是虚部(向量部分)
  • i,j,ki, j, k 是虚数单位,满足:i2=j2=k2=ijk=1i^2 = j^2 = k^2 = ijk = -1

可以把它看作: 一个标量 ww(实部)+一个3维向量 [x,y,z][x, y, z](虚部)

  • 第1维(ww):旋转的"量"(标量部分)
  • 第2-4维(x,y,zx, y, z):旋转的"方向"(向量部分)

四元数的几何意义

想象一个4维空间:

  • 第1维:ww(实部,标量)
  • 第2-4维:x,y,zx, y, z(虚部,向量)

单位四元数:

  • 所有满足 w2+x2+y2+z2=1w^2 + x^2 + y^2 + z^2 = 1 的四元数
  • 构成4维空间中的单位球面(3维球面)
  • 类比:
    • 2D单位圆:x2+y2=1x^2 + y^2 = 1
    • 3D单位球:x2+y2+z2=1x^2 + y^2 + z^2 = 1
    • 4D单位超球:w2+x2+y2+z2=1w^2 + x^2 + y^2 + z^2 = 1

只有单位四元数才能表示旋转

如何用四元数表示旋转

给定: 旋转轴:n=[nx,ny,nz]\mathbf{n} = [n_x, n_y, n_z](单位向量); 旋转角度:θ\theta

对应的单位四元数:

q=[cos(θ/2),sin(θ/2)nx,sin(θ/2)ny,sin(θ/2)nz]q = [\cos(\theta/2), \sin(\theta/2) \cdot n_x, \sin(\theta/2) \cdot n_y, \sin(\theta/2) \cdot n_z],四元数用"半角"表示旋转

或者:

q=[cos(θ/2),sin(θ/2)n]q = [\cos(\theta/2), \sin(\theta/2) \cdot \mathbf{n}]

例:

  • 旋转180度:θ=180°\theta = 180°,所以 θ/2=90°\theta/2 = 90° 四元数:q=[cos(90°),sin(90°)n]=[0,n]q = [\cos(90°), \sin(90°) \cdot \mathbf{n}] = [0, \mathbf{n}]
  • 绕Z轴旋转90度
    • 旋转轴:n=[0,0,1]\mathbf{n} = [0, 0, 1](Z轴方向)
    • 旋转角度:θ=90°\theta = 90°
    • 计算:cos(45°)0.707\cos(45°) \approx 0.707sin(45°)0.707\sin(45°) \approx 0.707
    • 四元数:q=[0.707,0,0,0.707]q = [0.707, 0, 0, 0.707]
    • 0.7072+02+02+0.7072=0.5+0.5=10.707^2 + 0^2 + 0^2 + 0.707^2 = 0.5 + 0.5 = 1
  • 绕X轴旋转180度
    • 旋转轴:n=[1,0,0]\mathbf{n} = [1, 0, 0](X轴方向)
    • 旋转角度:θ=180°\theta = 180°
    • 计算:cos(90°)=0\cos(90°) = 0sin(90°)=1\sin(90°) = 1
    • 四元数:q=[0,1,0,0]q = [0, 1, 0, 0]

四元数的模长

定义:q=w2+x2+y2+z2||q|| = \sqrt{w^2 + x^2 + y^2 + z^2}

  • 单位四元数: q=1||q|| = 1

几何意义:

  • 四元数到原点的距离
  • 单位四元数在单位球面上
  • 每个点对应一个旋转

四元数乘法(旋转复合)

  • 符号: \otimes
  • 含义: 先应用旋转 q1q_1,再应用旋转 q2q_2
  • 公式: q1q2=[w1,v1][w2,v2]q_1 \otimes q_2 = [w_1, \mathbf{v}1] \otimes [w_2, \mathbf{v}_2] =[w1w2v1v2,w1v2+w2v1+v1×v2]= [w_1w_2 - \mathbf{v}1 \cdot \mathbf{v}_2, w_1\mathbf{v}_2 + w_2\mathbf{v}_1 + \mathbf{v}_1 \times \mathbf{v}_2]

实部:w1w2w_1w_2 减去向量点积

虚部:w1v2+w2v1w_1\mathbf{v}2 + w_2\mathbf{v}_1 加上向量叉积

例子:

q1=[0.707,0.707,0,0]q_1 = [0.707, 0.707, 0, 0](绕Z轴转90度)

q2=[0.707,0,0.707,0]q_2 = [0.707, 0, 0.707, 0](绕Y轴转90度)

计算 q1q2q_1 \otimes q_2

  • 实部:0.707×0.707(0.707,0,0)(0,0.707,0)=0.50=0.50.707 \times 0.707 - (0.707, 0, 0) \cdot (0, 0.707, 0) = 0.5 - 0 = 0.5
  • 虚部:0.707×(0,0.707,0)+0.707×(0.707,0,0)+(0.707,0,0)×(0,0.707,0)=(0,0.5,0)+(0.5,0,0)+(0,0,0.5)=(0.5,0.5,0.5)0.707 \times (0, 0.707, 0) + 0.707 \times (0.707, 0, 0) + (0.707, 0, 0) \times (0, 0.707, 0)= (0, 0.5, 0) + (0.5, 0, 0) + (0, 0, 0.5) = (0.5, 0.5, 0.5)
  • 结果:q1q2=[0.5,0.5,0.5,0.5]q_1 \otimes q_2 = [0.5, 0.5, 0.5, 0.5]

为什么用四元数而不是旋转矩阵

  • 旋转矩阵的问题:
    • 冗余:9个数字表示3个自由度
    • 约束多:必须是正交矩阵,行列式为1
    • 插值困难
  • 四元数的优势:
    • 紧凑:4个数字表示3个自由度
    • 插值简单
    • 计算效率高

本文作者:cc

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!