三维空间刚体旋转描述

三维空间中通常可以用旋转矩阵、旋转向量、欧拉角和四元数来描述旋转


旋转矩阵

先回顾下向量的内积和外积

{ab=aTb=i=13aibi=|a||b|cos(a,b)a×b=[ijka1a2a3b1b2b3]=[a2b3a3b2a3b1a1b3a1b2a2b1]=[0a3a2a30a1a2a10]b=a^b(1)

其中a^=[0a3a2a30a1a2a10] 是取向量a反对角矩阵

外积只对三维向量存在定义,并且可以表示向量的旋转:
假设两个不平行向量ab ,可以用一个与a,b 所在平面垂直的向量描述ab 的旋转(图1)
                这里写图片描述
        图1. wa×b 方向一致,相当于旋转轴,模值等于角度

对空间中一个向量a ,假设有两组单位正交基O1=(e1,e2,e3)O2=(e1,e2,e3) ,向量在两个座标系下座标为[a1,a2,a3]T[a1,a2,a3]T ,那么有

[e1,e2,e3][a1,a2,a3]T=[e1,e2,e3][a1,a2,a3]T(1)

(1)式两边同左乘[e1T,e2T,e3T]T ,有
[a1a2a3]=[e1Te1e1Te2e1Te3e2Te1e2Te2e2Te3e3Te1e3Te2e3Te3][a1a2a3]=Ra(2)

(2)式的R 称为旋转矩阵,用来描述相机的旋转

旋转矩阵是行列式为1的正交矩阵,反之,行列式为1的正交矩阵也是一个旋转矩阵

SO(n)={RRn×n|RRT=I,det(R)=1}

其中SO(n) 是特殊正交群,特别的SO(3) 就是三维空间的旋转

旋转矩阵的劣势

  • 旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式是冗余的
  • 旋转矩阵有自身约束:必须是正交矩阵,且行列式为1,优化算法比较难应用

旋转向量

旋转向量用一个三维向量来描述旋转:其方向与旋转轴一致,长度等于旋转角

回顾向量外积,图1的w 就是ab 的旋转向量

旋转向量与旋转矩阵转换
假设旋转轴为n ,角度为θ ,使用罗德里格斯公式可以转换到旋转矩阵

R=cosθI+(1cosθ)nnT+sinθn^(3)

同样可以得到由旋转矩阵到旋转向量的公式
{θ=arccos(tr(R)12)n=R1(4)

此外,旋转矩阵实际就是SO(3) 的李群,旋转向量就是对应的李代数so(3) ,两者通过指数映射相联系(与罗德里格斯等价)

R=exp(ϕ^)(5)

其中ϕ^ 就是对旋转向量ϕ 取反对称矩阵

欧拉角

欧拉角是一种最直观的旋转描述方式,也是一个3维向量,分别代表绕某个轴的旋转角度

  • 相同的角度,旋转次序的不同,旋转结果不一样。一般常见的是rpy角(旋转顺序是ZYX)
  • 使用欧拉角一个最大的缺点是万向锁问题:俯仰角为±90 度时,第一次旋转和第三次旋转将使用同一个轴,使得系统丢失了一个自由度
  • 因此欧拉角不适于插值和迭代,往往只用于人机交互中

四元数

旋转矩阵用9个量描述3自由度的旋转,具有冗余性
欧拉角和旋转向量用3个量描述3自由度的旋转,是紧凑的,但具有奇异性
四元数用4个量描述3自由度的旋转,紧凑又没有奇异性

一个四元数q 拥有1个实部和3个虚部

q=q0+q1i+q2j+q3k(6)

满足
{i2+j2+k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j(7)

旋转向量与四元数的转换
对于一个旋转向量:绕单位向量n=[n+x,ny,nz]T 做了θ 度的旋转,那么其四元数为

q=[cosθ2,nxsinθ2,nysinθ2,nzsinθ2]T(8)

同样,也可以由四元数求得旋转向量
{θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]Tsinθ2(9)

旋转矩阵与四元数的转换
设四元数q=q0+q1i+q2j+q3k(6) ,对应的旋转矩阵为

R=[12q222q322q1q2+2q0q32q1q32q0q22q1q22q0q312q122q322q2q3+2q0q12q1q3+2q0q22q2q32q0q112q122q22](10)

反之也可以由R 推得四元数q
q0=tr(R)+12,q1=R23R324q0,q2=R31R134q0,q3=R12R214q0(11)

用四元数表示旋转
对于一个空间三维点p=[x,y,z] ,指定一个绕nθ 角的旋转,旋转后的点为p
1)首先将三维点用一个虚四元数来描述

p=[0,x,y,z]=[0,v]

2)用四元数q 来表达旋转
q=[cosθ2,nsinθ2]

3)旋转后的点为
p=qpq1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章