Skip to content

Rotation Representations in Robotics

介绍了四种姿态表示方式:旋转矩阵欧拉角轴角四元数,以及它们之间相互转换关系的推导

旋转矩阵 Rotation Matrix

对于物体坐标系 {O} 下三个主轴的单位矢量 X^OY^OZ^O 在世界坐标系 {W} 上的投影 WX^OWY^OWZ^O,可以利用旋转矩阵 OWR 来表示物体坐标系的姿态

OWR=(WX^OWY^OWZ^O)=(X^OX^WY^OX^WZ^OX^WX^OY^WY^OY^WZ^OY^WX^OZ^WY^OZ^WZ^OZ^W)=(OX^WTOY^WTOZ^WT)

显然,这是一个正交矩阵

OWRT OWR=(WX^OTWY^OTWZ^OT)(WX^OWY^OWZ^O)=I3

进一步,由于旋转矩阵的所有行向量的模长均为 1,且行向量之间两两正交,有 det(R)=1

更普遍地,我们用 R=(r11r12r13r21r22r23r31r32r33) 来表示一个旋转矩阵

接下来我们推导绕任一轴旋转的旋转矩阵的表达形式

记三维空间中一任意向量 v 绕旋转轴 n=(nxnynz) 旋转 θ 得到新向量 vrot,其中 n 为单位向量,nx2+ny2+nz2=1

v 可以根据平行和正交于 n 分为两部分 vv,满足 v=v+v

其中

{v=(vn)nv=v(vn)n=n×(n×v)

vrot=vrot+vrot=v+cosθv+sinθn×v=(vn)n+cosθv+sinθn×v=cosθv+(1cosθ)(nv)n+sinθn×v

上式就是 罗德里格斯旋转公式 Rodrigues' Rotation Formula,进一步我们令 v 分别为 (100)T(010)T(001)T

解得

vrot=cosθ(100)+(1cosθ)nx(nxnynz)+sinθ(0nzny)=((1cosθ)nx2+cosθ(1cosθ)nxny+sinθnz(1cosθ)nxnzsinθny)vrot=((1cosθ)nynxsinθnz(1cosθ)ny2+cosθ(1cosθ)nynz+sinθnx)vrot=((1cosθ)nznx+sinθny(1cosθ)nznysinθnx(1cosθ)nz2+cosθ)

综上得到绕任意轴的旋转矩阵

R=(nx2(1cosθ)+cosθnxny(1cosθ)nzsinθnxnz(1cosθ)+nysinθnynx(1cosθ)+nzsinθny2(1cosθ)+cosθnynz(1cosθ)nxsinθnznx(1cosθ)nysinθnzny(1cosθ)+nxsinθnz2(1cosθ)+cosθ)

欧拉角 Euler Angles

定义

  • 顺规:合法的欧拉角组中,任何两个连续的旋转,必须绕着不同的转动轴旋转,因此一共有 12 种顺规,被划分为两大类:
    • 经典欧拉角 Proper Euler Angles: zxz, xyx, yzy, zyz, xzx, yxy
    • 泰特-布莱恩角 Tait-Bryan Angles: xyz, yzx, zxy, xzy, zyx, yxz 其中按zyx顺序旋转的情况又被称为 RPY 角或 XYZ 固定角
  • 内外旋:根据绕旋转后的新轴旋转还是绕世界坐标系中固定不动的轴旋转,欧拉角被分为内旋和外旋:
    • 内旋 Intrisic Rotation, 又称为动态旋转,绕物体坐标系旋转
    • 外旋 Extrinsic Rotation, 又称为静态旋转,绕世界坐标系旋转
    • 内旋与外旋具有等价性

欧拉角 2 旋转矩阵

R=RZ(γ)RY(β)RX(α)=(cosγsinγ0sinγcosγ0001)(cosβ0sinβ010sinβ0cosβ)(1000cosαsinα0sinαcosα)=RX1(γ)RY1(β)RZ1(α)=(1000cosαsinα0sinαcosα)(cosβ0sinβ010sinβ0cosβ)(cosγsinγ0sinγcosγ0001)

旋转矩阵 2 欧拉角

以旋转顺序为 zyx 的内旋欧拉角为例

R=RZ(γ)RY(β)RX(α)=(cosγsinγ0sinγcosγ0001)(cosβ0sinβ010sinβ0cosβ)(1000cosαsinα0sinαcosα)=(cosγcosβsinγcosα+cosγsinβsinαsinγsinα+cosγsinβcosαsinγcosβcosγcosα+sinγsinβsinαcosγsinα+sinγsinβcosαsinβcosβsinαcosβcosα)

由此

{α=arctan(r32r33)β=arcsin(r31)γ=arctan(r21r11)

但当 β=π2 时,R=(0sin(γα)cos(γα)0cos(γα)sin(γα)100),旋转矩阵退化,无法解出唯一 γα,这种情况被称为 奇异性 Singularity万向节死锁 Glimbal Lock,可以被视为三维空间的物体姿态无法通过三个实数进行完全表达。在实践中,可以预分析机械最难出现的姿态,并通过有意地设计欧拉角顺规,尽可能避免出现万向节死锁的情况。

轴角 Axis Angle

轴角通过两个参数描述一个旋转:一条轴和描述绕这个轴的旋转量的角度,记为 <axis,angle>=([axayaz]T,θ)

轴角 2 旋转矩阵

由罗德里格斯旋转公式可推出绕任意轴旋转的旋转矩阵,具体推导见 旋转矩阵 Rotation Matrix

R=(ax2(1cosθ)+cosθaxay(1cosθ)azsinθaxaz(1cosθ)+aysinθayax(1cosθ)+azsinθay2(1cosθ)+cosθayaz(1cosθ)axsinθazax(1cosθ)aysinθazay(1cosθ)+axsinθaz2(1cosθ)+cosθ)

旋转矩阵 2 轴角

观察上式,对给定旋转矩阵,有

{θ=arccos(12(r11+r22+r331))ax=r32r23(r32r23)2+(r13r31)2+(r21r12)2ay=r13r31(r32r23)2+(r13r31)2+(r21r12)2az=r21r12(r32r23)2+(r13r31)2+(r21r12)2

欧拉角 2 轴角

愉快地,我们可以利用 欧拉角 --> 四元数 --> 轴角 的方式得到

{θ=2arccos(cosγcosβcosαsinγsinβsinα)ax=sinγsinβcosα+cosγcosβsinαay=sinγcosβcosα+cosγsinβsinαaz=cosγsinβcosαsinγcosβsinα

轴角 2 欧拉角

直接从轴角转为欧拉角比较困难,我们可以利用 轴角 --> 旋转矩阵 --> 欧拉角 的间接转化方式减少计算难度

{α=arctan(ayaz(1cosθ)axsinθaz2(1cosθ)+cosθ)β=arcsin(aysinθaxaz(1cosθ))γ=arctan(axay(1cosθ)azsinθax2(1cosθ)+cosθ)

使用欧拉角进行表示时,某些情况会出现万向节锁和奇异的现象,需要特殊处理

四元数 Quaterions

不妨记四元数为 q=w+xi+yj+zk,其中 i2=j2=k2=ijk=1,而单位四元数满足 w2+x2+y2+z2=1

绕任意轴 n 旋转 θ 的四元数,表示为 q=[w,x,y,z]=[cosθ2,sinθ2nx,sinθ2ny,sinθ2nz]

轴角 2 四元数

{w=cosθ2x=axsinθ2y=aysinθ2z=azsinθ2

四元数 2 轴角

{θ=2arccos(w)ax=x1w2ay=y1w2az=z1w2

四元数 2 旋转矩阵

由罗德里格斯旋转公式可推出绕任意轴旋转的旋转矩阵,具体推导见 旋转矩阵 Rotation Matrix

R=(nx2(1cosθ)+cosθnxny(1cosθ)nzsinθnxnz(1cosθ)+nysinθnynx(1cosθ)+nzsinθny2(1cosθ)+cosθnynz(1cosθ)nxsinθnznx(1cosθ)nysinθnzny(1cosθ)+nxsinθnz2(1cosθ)+cosθ)

nx,ny,nz,cosθ,sinθw,x,y,z 表示

{cosθ=12cos2θ2sinθ=2sinθ2cosθ2

可以推出以下表达

Rq=(12y22z22xy2wz2xz+2wy2xy+2wz12x22z22yz2wx2xz2wy2yz+2wx12x22y2)

旋转矩阵 2 四元数

当给定旋转矩阵后,观察得到

r32r23=(2yz+2wx)(2yz2wx)=4wxr13r31=(2xz+2wy)(2xz2wy)=4wyr21r12=(2xy+2wz)(2xy2wz)=4wz

又有

r11+r22+r33=34x24y24z2=4w21

进一步,可得

{w=121+r11+r22+r33x=r32r234wy=r13r314wz=r21r124w

欧拉角 2 四元数

对于欧拉角转四元数,我们可以根据四元数的定义写出以下表达

q(γ,β,α)=qz(γ) qy(β) qx(α)=(cosγ200sinγ2)(cosβ20sinβ20)(cosα2sinα200)=(cosγ2cosβ2cosα2sinγ2sinβ2sinα2sinγ2sinβ2cosα2+cosγ2cosβ2sinα2cosγ2sinβ2cosα2sinγ2cosβ2sinα2sinγ2cosβ2cosα2+cosγ2sinβ2sinα2)

四元数 2 欧拉角

直接从四元数转为欧拉角比较困难,我们可以利用 四元数 --> 旋转矩阵 --> 欧拉角 的间接转化方式减少计算难度

{α=arctan(2yz+2wx12x22y2)β=arcsin(2wy2xz)γ=arctan(2xy+2wz12y22z2)

同样地,使用欧拉角进行表示,某些情况会出现万向节锁和奇异的现象,需要特殊处理

表示方法对比

旋转矩阵 Rotation Matrix欧拉角 Euler Angles轴角 Axis Angle四元数 Quarternions
可以表示三维空间任一姿态,并推广到 n 维空间符合直觉解决了万向锁可以平滑插值,无万向节锁现象(本质是从四维空间描述三维姿态)
三维空间的姿态却用了九个量进行表示,存储冗余奇异和万向节锁现象无法克服,无法平滑插值无法平滑插值(本质是三维的)只对三维空间有效

参考资料

影响来源
https://en.wikipedia.org/wiki/Rodrigues'_rotation_formula#/media/File:Orthogonal_decomposition_unit_vector_rodrigues_rotation_formula.svg