联系方式:860122112@qq.com
四元数与旋转——学习笔记(一)
四元数与旋转——学习笔记(二)
四元数与旋转——学习笔记(三)
五、四元数的微分和积分
假设前面公式(1)给出的四元数是时间
t
的函数。则对
设 p(t) 是另一个四元数,则对前面公式(3)关于时间 t 求导:
四元数函数 q(t) 描述的是某移动物体方向的变化,具体一点就是物体的自身坐标系相对于固定的世界坐标系的变化(是坐标系旋转!)。令 ω(t) 是物体坐标系相对于世界坐标系变化的角速度。角速度可以由牛顿动力学方程确定。
定理3
令
q(t)
是一个单位四元数函数,
ω(t)
是由
q(t)
确定的角速度。则
q(t)
的导数为:
(14)
证明
在 t+Δt 时刻,旋转可以描述为 q(t+Δt) 。在 Δt 过程中,物体坐标系在经过了 q(t) 旋转的前提下,又经过了额外的微小旋转。这个额外的微小旋转的瞬时旋转轴为 ω^=ω/∥ω∥ ,旋转角度为 Δθ=∥ω∥Δt ,可以用一个单位四元数描述:
t+Δt 时刻的旋转可以描述成四元数序列 q(t),Δq ,由第四节的内容有:
(注意先旋转的四元数在右边。有童鞋可能会疑惑这是坐标系旋转,为什么不是左边?因为这里的坐标系旋转其实就是将物体坐标系各个基向量进行旋转,与前面提到的指定向量不动坐标系旋转不同)
接下来推导 q˙ ,首先求差值:
等式右边第一项是高阶项趋近于0,可省略。因此
在实际中,能得到的角速度其实是相对于物体坐标系下的角速度 ω′ (例如通过IMU获得)。世界坐标系下的角速度 ω 不动,物体坐标系旋转,则角速度 ω 在物体坐标系下的表示为 ω′=q∗ωq 。将 ω=qω′q∗ 代入(14),得到:
若 q˙ 已知,(14)两边同时右乘 q∗ ,可以求得角速度:
根据(14),四元数的二阶导为:
当
q
的一阶导和二阶导都是已知时,由上式两边同时右乘
微分方程(14)可以用数值积分求解。令 h 为时间步长,
由于增量计算, qk+1 不一定是单位四元数,所以需要规范化为单位四元数:
六、四元数插值
四元数插值意思就是给定物体起始方位和终点方位,需要生成从起始到终点的平滑旋转运动(图形和动画经常用到)。令起始和最终的旋转表示为以下两个单位四元数:
要使插值有意义, r1≠r2 必须成立。
1、旋转轴和角度的恒定变化率
旋转角的线性插值为
(15)
由于
u^1
和
u^2
可看做都处于一个单位球面上,则可以在它们球面的最短路径(即最短的弧)上做插值。如下图:
令一个点
u^(τ)
以恒定速率在最短的弧上从 \boldsymbol{\hat{u}}_1
u^1
到 \boldsymbol{\hat{u}}_2
u^2
,即
τ
由
0
到
n^ 确定后,关于 n^ 由 u^1 旋转到 u^2 的角度为 ϕ∈(0,π] ,且
因此 u^(τ) 由 u^1 绕轴 n^ 旋转角度 τϕ 后确定,该四元数运算为:
事实上, u^ 有不包含四元数乘法的更简洁形式:
(16)
证明上式成立,首先考虑 u^1 和 u^2 在 xy 平面上,且 n^ 沿 z 轴方向。令
若 \boldsymbol{\hat{u}}_1 u^1 和 \boldsymbol{\hat{u}}_2 u^2 不在 xy 平面上,先通过旋转让 n^ 和 z 轴方向一致。令
最后,由(15)(16)得到起始和最终单位四元数 r1,r2 的插值公式:
此插值公式满足旋转角和旋转轴变化速率恒定。
2、球面线性插值
球面线性插值Slerp(spherical linear interpolation)的形式:
τ∈[0,1] ,单位四元数的幂由前面给出的公式(6)得到。
七、关于四元数的微分
对关于四元数
q=q0+q
求微分,其中 \boldsymbol{q}=(q_1,q_2,q_3)
q=(q1,q2,q3)
。可以把四元数看成一个列向量 (q_0,q_1,q_2,q_3)^T
(q0,q1,q2,q3)T
。
给定一个向量 \boldsymbol{u}=(u_1,u_2,u_3)^T
u=(u1,u2,u3)T
,记向量叉乘 \boldsymbol{u}\times
u×
是 3\times3
3×3
的反对称阵:
\begin{equation} \boldsymbol{u}\times=\left[ \begin{matrix} 0&-u_3&u_2\\ u_3&0&-u_1\\ -u_2&u_1&0 \end{matrix} \right] \end{equation}
此外,有:
\begin{equation} \begin{split} \frac{\partial(\boldsymbol{u}\times\boldsymbol{v})}{\partial\boldsymbol{v}}=&\boldsymbol{u}\times\\ \frac{\partial(\boldsymbol{u}\times\boldsymbol{v})}{\partial\boldsymbol{u}}=&-\frac{\partial(\boldsymbol{v}\times\boldsymbol{u})}{\partial\boldsymbol{u}}\\ =&-\boldsymbol{v}\times\\ \end{split} \end{equation}
给定两个四元数 p=p0+p 和 q=q0+q ,列向量形式分别是 (p0,p1,p2,p3)T 和 (q0,q1,q2,q3)T ,则以下的求微分得到 4×4 矩阵:
令
v
是纯四元数,则有:
前面的公式(10)关于
v
的微分为:
因为
所以公式(10)关于四元数
q
的微分为: