联系方式:860122112@qq.com
四元数与旋转——学习笔记(一)
四元数与旋转——学习笔记(二)
四元数与旋转——学习笔记(三)
一、引言
三维空间里向量或坐标系之间的旋转关系可以用
3×3
的标准正交矩阵表示,称为旋转矩阵。但是,旋转矩阵中的9个元素只有4个是独立的,因此它是冗余的,而且它的几何解释也不够清楚。此外,在进行两次旋转时,两个旋转矩阵相乘需要进行27次乘法和18次加法操作。
四元数(quaternion),是在1843年W.R.Hamilton与他妻子在都柏林皇家运河边散步时突然想到的,他把四元数乘法的基本公式
i^2=j^2=k^2=i^j^k^=−1
刻在了桥的石头上。四元数用来描述三维空间旋转关系时非常有效,它是一个四元组,仅用4个数就能完成一个旋转矩阵所表示的关系。而且它能很形象的描述旋转时所绕的轴和旋转角度,在进行两次旋转时,四元数只需要进行16次乘法和12次加法操作,比旋转矩阵高效。
二、四元数代数
四元数由一个标量(实数)和一个向量构成。假设三维空间下标准正交基的3个单位向量为
i^=(1,0,0),j^=(0,1,0),k^=(0,0,1)
,一个四元数可以定义为一个标量
q0
和一个向量
q
的和,即:
(1)
q=q0+q=q0+q1i^+q2j^+q3k^
《Robotics,Vision and Control》里面将标量和向量分开,写成:
q=q0<q1,q2,q3>
尖括号外是标量,尖括号内时向量。
加法
设另一个四元数为
(2)
p=p0+p1i^+p2j^+p3k^
则
p+q=(p0+q0)+(p1+q1)i^+(p2+q2)j^+(p3+q3)k^
四元数取负
−p=−p0−p1i^−p2j^−p3k^
乘法
基本规则:
i^2=j^2=k^2=i^j^k^=−1
i^j^=−j^i^=k^
j^k^=−k^j^=i^
k^i^=−i^k^=j^
两四元数
p、q
相乘
(3)
pq====(p0+p1i^+p2j^+p3k^)(q0+q1i^+q2j^+q3k^)p0q0−(p1q1+p2q2+p3q3)+p0(q1i^+q2j^+q3k^)+q0(p1i^+p2j^+p3k^)+(p2q3−p3q2)i^+(p3q1−p1q3)j^+(p1q2−p2q1)k^p0q0−p⋅q+p0q+q0p+p×qp0q0−p⋅q<p0q+q0p+p×q>
用矩阵形式表示:
pq=⎡⎣⎢⎢⎢⎢p0p1p2p3−p1p0p3−p2−p2−p3p0p1−p3p2−p1p0⎤⎦⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢q0q1q2q3⎤⎦⎥⎥⎥⎥
例一:
设
p=3+i^−2j^+k^=3<1,−2,1>q=2−i^+2j^+3k^=2<−1,2,3>
则
p0q0−p⋅q=6−(−2)=8
p0q+q0p+p×q=3(−i^+2j^+3k^)+2(i^−2j^+k^)+(−8i^−4j^)=−9i^−2j^+11k^
所以
pq=8−9i^−2j^+11k^=8<−9,−2,11>
共轭形式
使用上面(1)的四元数
q
,则
q的共轭形式记为
q∗
:
q∗=q0−q=q0−q1i^−q2j^−q3k^=q0<−q1,−q2,−q3>
其实就是向量部分加负号。
由前面介绍的加乘法操作和共轭的定义,可以推导出
(q∗)∗=q+q∗=q∗q=q2q0qq∗
给定两个四元数
p
和
q,有:
(4)
(pq)∗=q∗p∗
范数
四元数
q
的范数记为
|q|,大小为
|q|=q∗q−−−√
。若
|q|=1
则
q
是
单位四元数。两个四元数相乘之后的范数平方是两个四元数各自范数平方后的乘积:
|pq|2=====(pq)(pq)∗pqq∗p∗p|q|2p∗pp∗|q|2|p|2|q|2
逆
四元数的逆定义为:
q−1=q∗|q|2
且
q−1q=qq−1=1
。若
q
是
单位四元数,则
q−1=q∗。
幂
假设有单位四元数
q=q0+q
,则
|q|=q20+∥q∥2=1
,则意味着存在唯一的
θ∈[0,π]
使得
cosθ=q0
且
sinθ=∥q∥
。因此四元数
q
可以写成
q=cosθ+u^sinθ
其中单位向量
u^=q/∥q∥
。
对于一般的四元数
q
可以表示为通过范数
|q|进行缩放的单位四元数,即
(5)
q=|q|(cosθ+u^sinθ)
其中
u^=q/∥q∥
,
θ=arccos(q0/|q|)
。
根据复数的欧拉特性
a+bi=a2+b2−−−−−−√eiϕ
其中
i2=−1
,
ϕ=
atan2
(b,a)
。推广到四元数
q
,根据公式(5)有
q=|q|euθ
因此,可以定义
q
的幂为
(6)
qρ=|q|ρ(euθ)ρ=|q|ρ(cos(ρθ)+u^sin(ρθ))
其中
ρ∈R
(实数)
指数和对数
四元数
q
的指数和对数公式为:
(7)
eq=eq0(cos∥q∥+u^sin∥q∥)
(8)
lnq=ln|q|+u^arccos(q0|q|)
不难证明:
(9)
elnq====eln|q|+u^arccos(q0|q|)|q|eu^arccos(q0|q|)|q|(q0|q|+u^∥q∥|q|)q
参考文献
Yan-Bin Jia. Quaternion and Rotation