四元数与旋转——学习笔记(三)

来源:互联网 发布:手机免费视频软件 编辑:程序博客网 时间:2024/06/09 22:39

联系方式:860122112@qq.com

四元数与旋转——学习笔记(一)
四元数与旋转——学习笔记(二)
四元数与旋转——学习笔记(三)

五、四元数的微分和积分

假设前面公式(1)给出的四元数是时间 t 的函数。则对 q(t) 求导有:

q=q0˙+q˙=q0˙+q1˙i^+q2˙j^+q3˙k^

p(t) 是另一个四元数,则对前面公式(3)关于时间 t 求导:
ddt(pq)=p˙q+pq˙

四元数函数 q(t) 描述的是某移动物体方向的变化,具体一点就是物体的自身坐标系相对于固定的世界坐标系的变化(是坐标系旋转!)。令 ω(t) 是物体坐标系相对于世界坐标系变化的角速度。角速度可以由牛顿动力学方程确定。

定理3
q(t) 是一个单位四元数函数,ω(t) 是由 q(t) 确定的角速度。则 q(t) 的导数为:
(14)

q˙=12ωq

证明
t+Δt 时刻,旋转可以描述为 q(t+Δt)。在 Δt 过程中,物体坐标系在经过了 q(t) 旋转的前提下,又经过了额外的微小旋转。这个额外的微小旋转的瞬时旋转轴为 ω^=ω/ω,旋转角度为 Δθ=ωΔt,可以用一个单位四元数描述:
Δq==cosΔθ2+ω^sinΔθ2cosωΔt2+ω^sinωΔt2

t+Δt 时刻的旋转可以描述成四元数序列 q(t),Δq,由第四节的内容有:
q(t+Δt)=Δqq(t)

(注意先旋转的四元数在右边。有童鞋可能会疑惑这是坐标系旋转,为什么不是左边?因为这里的坐标系旋转其实就是将物体坐标系各个基向量进行旋转,与前面提到的指定向量不动坐标系旋转不同)
接下来推导 q˙,首先求差值:
q(t+Δt)q(t)==(cosωΔt2+ω^sinωΔt2)q(t)q(t)2sin2ωΔt2q(t)+ω^sinωΔt2q(t)

等式右边第一项是高阶项趋近于0,可省略。因此
q˙(t)=====limΔt0q(t+Δt)q(t)Δtω^limΔt0sin(ωΔt/2)Δtq(t)ω^ddtsin(ωt2)|t=0q(t)ω^ω2q(t)12ω(t)q(t)

在实际中,能得到的角速度其实是相对于物体坐标系下的角速度 ω(例如通过IMU获得)。世界坐标系下的角速度 ω 不动,物体坐标系旋转,则角速度 ω 在物体坐标系下的表示为 ω=qωq。将 ω=qωq 代入(14),得到:
q˙=12qω

q˙ 已知,(14)两边同时右乘 q,可以求得角速度:
ω=2q˙q

根据(14),四元数的二阶导为:
q¨===12(ω˙q+ωq˙)12ω˙q+14ωωq(14ω2+12ω˙)q

q 的一阶导和二阶导都是已知时,由上式两边同时右乘 q 可以求出角加速度:

ω˙===2q¨qωq˙q2q¨q2q˙qq˙q2(q¨q(q˙q)2)

微分方程(14)可以用数值积分求解。令 h 为时间步长, qkωkkh 时刻的四元数和角速度。则在下一时刻的四元数近似为:
qk+1=qk+12hωkqk

由于增量计算,qk+1不一定是单位四元数,所以需要规范化为单位四元数:
qk+1qk+1qk+1

六、四元数插值

四元数插值意思就是给定物体起始方位和终点方位,需要生成从起始到终点的平滑旋转运动(图形和动画经常用到)。令起始和最终的旋转表示为以下两个单位四元数:

r1=cosθ12+u^1sinθ12
r2=cosθ22+u^2sinθ22

要使插值有意义,r1r2 必须成立。

1、旋转轴和角度的恒定变化率
旋转角的线性插值为
(15)

θ(τ)=(1τ)θ1+τθ2
τ[0,1]。但是旋转轴的线性插值 v=(1τ)u^1+τu^2 得到的 v 不是单位四元数,规范化后得 w=v/vw(τ) 的曲线不是以恒定的速率变化,这会造成由u^1u^2旋转时不平稳。

由于 u^1u^2 可看做都处于一个单位球面上,则可以在它们球面的最短路径(即最短的弧)上做插值。如下图:
这里写图片描述
令一个点 u^(τ) 以恒定速率在最短的弧上从 \boldsymbol{\hat{u}}_1u^1\boldsymbol{\hat{u}}_2u^2,即 τ01 增长。本质上, u^(τ) 是弧在[0,1]上恒定速率的参数化。要推导 u^(τ),首先构造 u^1u^2 所在平面的法向量:

n^=u^1×u^2u^1×u^2

n^ 确定后,关于 n^u^1 旋转到 u^2 的角度为ϕ(0,π],且
ϕ=arccos(u^1u^2)

因此 u^(τ)u^1 绕轴 n^ 旋转角度 τϕ 后确定,该四元数运算为:
u^(τ)=(cosτϕ2+n^sinτϕ2)u^1(cosτϕ2n^sinτϕ2)

事实上,u^ 有不包含四元数乘法的更简洁形式:
(16)
u^(τ)=sin((1τ)ϕ)sinϕu^1+sin(τϕ)ϕu^2

证明上式成立,首先考虑 u^1u^2xy 平面上,且 n^ 沿 z 轴方向。令 u^1=(cosθ1,sinθ1)u^2=(cos(θ1+ϕ),sin(θ1+ϕ)),则:
====sin((1τ)ϕ)sinϕu^1+sin(τϕ)ϕu^2(sin((1τ)ϕ)cosθ1+sin(τϕ)cos(θ1+ϕ)sinϕ,sin((1τ)ϕ)sinθ1+sin(τϕ)sin(θ1+ϕ)sinϕ)(sinϕ(cos(τϕ)cosθ1sin(τϕ)sinθ1)sinϕ,sinϕ(cos(τϕ)sinθ1+sin(τϕ)cosθ1)sinϕ)(cos(θ1+τϕ),sin(θ1+τϕ)u^(τ)

\boldsymbol{\hat{u}}_1u^1\boldsymbol{\hat{u}}_2u^2 不在 xy 平面上,先通过旋转让 n^z 轴方向一致。令 R 为对应的旋转矩阵,则有:
u^(τ)===R1(Ru^)R1(sin((1τ)ϕ)sinϕ(Ru^1)+sin(τϕ)ϕ(Ru^2))sin((1τ)ϕ)sinϕu^1+sin(τϕ)ϕu^2

最后,由(15)(16)得到起始和最终单位四元数 r1,r2 的插值公式:
r(τ)==cosθ(τ)2+u^1(τ)sinθ(τ)2cos(1τ)θ1+τθ22+(sin((1τ)ϕ)sinϕu^1+sin(τϕ)ϕu^2)sin(1τ)θ1+τθ22

此插值公式满足旋转角和旋转轴变化速率恒定。

2、球面线性插值
球面线性插值Slerp(spherical linear interpolation)的形式:

r(τ)=r1(r1r2)τ

τ[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)^Tu=(u1,u2,u3)T ,记向量叉乘 \boldsymbol{u}\timesu×3\times33×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}

u×=0u3u2u30u1u2u10

此外,有:
\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}
(u×v)v=(u×v)u==u×(v×u)uv×

给定两个四元数 p=p0+pq=q0+q ,列向量形式分别是 (p0,p1,p2,p3)T(q0,q1,q2,q3)T ,则以下的求微分得到 4×4 矩阵:
(pq)p==p[p0q0pqp0q+q0p+p×q][q0qqTq0I3×3q×]

(pq)p=[q0qqTq0I3×3+q×]

(pq)q=[p0ppTp0I3×3+p×]

(pq)q=[p0ppTp0I3×3p×]

v 是纯四元数,则有:

(qv)q=[0vvTv×]

(vq)q=[0vvTv×]

(qv)v=[qTq0I3×3+q×]

(vq)v=[qTq0I3×3q×]

前面的公式(10)关于 v 的微分为:

(qvq)v=(q20q2)I3×3+2qqT+2q0q×

因为

(q2v)q==(vqTq)q2vqT

((qv)q)q==((vTq)q)qvTqI3×3+qvT

所以公式(10)关于四元数 q 的微分为:

(qvq)q=2(q0v+q×v,vqT+(vq)I3×3+qvTq0v×)

参考文献
Yan-Bin Jia. Quaternion and Rotation


阅读全文
0 0