背景
最近在学习ros2的tf2库,碰到很多求解从姿态1
转变到姿态2
的变换矩阵的情况。实际使用中发现,使用四元数求解这个过程,运算量会远少于用矩阵,所以对四元数的运算关系浅显地做了一些简单的研究。
问题描述
已知2个四元数
q1
和q2
,物体从初始姿态(即四元数:0i+0j+0k+1
)先旋转到q1
,再旋转到q2
。求证物体最终的姿态,是q1*q2
还是q2*q1
?
验证过程(无任何推导,纯举例验证)
通过查资料很容易得到一个先导结论:
四元数叉乘不满足交换律,即
q1*q2
不一定等于q2*q1
直接举例:
q1 = 0i+0j+1k+1
q2 = 2i-8j+1k+1
q1和q2的图像
借助一个在线工具3D Rotation Converter,我们能看到对应的姿态图像如下,第一幅是q1
,第二幅是q2
:
这个3D图像工具中Euler角的Order是按照内旋方式旋转的,即图中先绕物体自身Z轴转,再绕自身Y轴,最后绕自身X轴旋转,这与tf2库中是一致的。这一点很重要,无论研究哪种姿态变换,搞清楚坐标系和内旋外旋都是第一步。
我们可以看到,q1
相对原始坐标系,绕自身Z轴转了90度,q2
相对原始坐标系,差不多指向了右后方(红色箭头相对黄色坐标轴),且自身Z轴基本是朝下了。
q1和q2的叉乘计算结果
使用在线工具omni calculator可以得到q1
和q2
叉乘的2个计算结果:
q₁ * q₂ = 10i - 6j + 2k + 0
q₂ * q₁ = -6i - 10j + 2k + 0
画出这q1*q2
和q2*q1
的结果,第一幅是q1*q2
,第二幅是q2*q1
:
图像对比
通过q1和q2的图像,我们可以大致推断,先旋转q1再旋转q2,相当于把红色箭头先从黄色坐标轴绕自身Z轴转90度到绿色坐标轴,然后以不知道什么方式转到绿色坐标轴的右后方,同时把Z轴指向下方。
对比两个叉乘结果的图像,很明显第一幅是接近的。实际如果去观察Euler角度,也会发现数字上是一致的。
(有意思的是,两个叉乘图像的红色箭头方向好像差了180度,我觉得这应该不是巧合,但还没确认。。。)
结论
物体从初始姿态(即四元数:
0i+0j+0k+1
)先旋转到q1
,再旋转到q2
,物体最终的姿态是q1*q2
。
即四元数的姿态变换顺序是左前右后,应该采用右乘
方式
整个过程纯粹使用举例方式感性直观验证,结论正确性仅供参考
数学推导
To be continue…