【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)

【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)

有限位移旋量理论也称位移旋量,是李群se(3)的元素,有限位移可以描述绕轴的旋转和平移,有限位移的研究可以追溯Chasles的研究,经历了19世纪美国科学院首位外籍院士、爱尔兰天文物理学家、数学家哈密顿的黄金时代,发展至采用Euler-Rordrigues四个参量来表述刚体位移的阶段。接下来,笔者将分篇介绍有限位移旋量理论。

表示三维空间中旋转的方法有很多种,但我们这里关注的是轴角式(Axisangle)的旋转.虽然使用欧拉角的旋转很常用,但是我们知道欧拉角的表示方法不仅会导致Gimbal Lock(万向节死锁)而且依赖于三个坐标轴的选定,使用四元数正是为了解决这个问题.我们这里所要讨论的轴角式旋转是旋转更加普遍的情况。

Rordrigues公式又称轴角公式,顾名思义根据旋转轴和旋转角来描述刚体的旋转。轴角公式和四元数可以相互转换,并且转换过程相当的直观,绕单位轴u旋转\theta的四元数描述为:

q=(cos\frac{\theta}{2},sin\frac{\theta}{2})

下面介绍Rodrigues' rotation formula的推导过程:

假设我们有一个经过原点的(如果旋转轴不经过原点我们可以先将旋转轴
平移到原点,进行旋转,再平移回原处)旋转轴u=(x,y,z)^T,我们希望将
一个向量v,沿着这个旋转轴旋转\theta度,变换到v

【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)_第1张图片

我们可以将v 分解为平行于旋转轴u 以及正交(垂直)于u 的两个分量,v∥和v⊥,即 :

v=v_\parallel +v_ \perp

我们可以分别旋转这两个分向量,再将它们旋转的结果相加获得旋转后的向量

{v}'={v_\parallel}' +{v_ \perp}'

下面是分解的示意图:

【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)_第2张图片

 可以看到,v∥ 其实就是v 在u 上的正交投影(Orthogonal Projection),根据
正交投影的公式,我们可以得出:

v_\parallel =proj_u(v)=\frac{u\cdot v}{u\cdot u}u=(u\cdot v)u

因为v = v∥ + v⊥,我们可以得到:

v_\perp =v-v_\parallel

既然已经知道怎么分解v,接下来我们只需要分别讨论对v∥ 和v⊥ 的旋转就可以了。

v∥ 的旋转

首先,我们来看一下平行于u 的v∥.这种情况其实非常简单,从之前的图示中就可以看到,v∥ 其实根本就没有被旋转,仍然与旋转轴u 重合,所以:

{v_\parallel }'=v_\parallel

v⊥ 的旋转

接下来,我们需要处理正交于u 的v⊥.因为这两个向量是正交的,这个旋转可以看做是平面内的一个旋转.因为旋转不改变v⊥ 的长度,所以路径是一个圆.下面是这个旋转的示意图,右侧的为俯视图:

【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)_第3张图片

 现在,3D 的旋转就被我们转化为了2D 平面上的旋转.由于在这个平面上我们只有一个向量v⊥,用它来表示一个旋转是不够的,我们还需要构造一个同时正交于u 和v⊥ 的向量w,这个可以通过叉乘来获得:

w=u\times v_\perp

注意叉乘的顺序,因为我们使用的是右手坐标系统,按照右手定则可以发现这个新的向量w 指向v⊥ 逆时针旋转/2 后的方向,并且和v⊥ 一样也处于正交于u 的平面内.因为∥u∥ = 1,我们可以发现:

\left \| w \right \|=\left \| u\times v_\perp \right \|=\left \| v_\perp \right \|

也就是说,w 和v⊥ 的模长是相同的,所以,w 也位于圆上.有了这个新的向量w,就相当于我们在平面内有了两个坐标轴.我们现在可以把v′⊥ 投影到w 和v⊥ 上,将其分解为{v_v}' 和{v_w}'.使用一点三角学的知识我们就能得到:

{v_\perp }'={v_v}'+{v_w}'=cos(\theta)v_\perp + sin(\theta)w=cos(\theta)v_\perp + sin(\theta)(u\times v_\perp )

这也就完成了旋转的第二步,我们可以得到这样一个定理:

当v⊥ 正交于旋转轴u 时,旋转θ 角度之后的v′⊥ 为:

{v_\perp' }=cos(\theta)v_\perp + sin(\theta)(u\times v_\perp )

v 的旋转

将上面的两个结果组合就可以获得:

v{}'={v_\parallel }'+{v_\perp }'={v_\parallel } +cos(\theta)v_\perp + sin(\theta)(u\times v_\perp )

因为叉乘遵守分配律,

u\times v_\perp =u\times(v- v_\parallel )=u\times v - u\times v_\parallel=u\times v

最后,代入:

v_\parallel =(u\cdot v)u

v_\perp =v-v_\parallel

得Rodrigues’ Rotation Formula:

v{}'=cos(\theta)v+\left (1-cos(\theta) \right )(u\times v)u+sin(\theta)(u\times v)

你可能感兴趣的:(有限位移旋量,算法,自动驾驶)