当前位置: 首页 > news >正文

两个四元数叉乘与姿态旋转的关系

背景

最近在学习ros2的tf2库,碰到很多求解从姿态1转变到姿态2的变换矩阵的情况。实际使用中发现,使用四元数求解这个过程,运算量会远少于用矩阵,所以对四元数的运算关系浅显地做了一些简单的研究。

问题描述

已知2个四元数q1q2,物体从初始姿态(即四元数: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
q1
q2
这个3D图像工具中Euler角的Order是按照内旋方式旋转的,即图中先绕物体自身Z轴转,再绕自身Y轴,最后绕自身X轴旋转,这与tf2库中是一致的。这一点很重要,无论研究哪种姿态变换,搞清楚坐标系和内旋外旋都是第一步。
我们可以看到,q1相对原始坐标系,绕自身Z轴转了90度,q2相对原始坐标系,差不多指向了右后方(红色箭头相对黄色坐标轴),且自身Z轴基本是朝下了。

q1和q2的叉乘计算结果

使用在线工具omni calculator可以得到q1q2叉乘的2个计算结果:

q₁ * q₂ = 10i - 6j + 2k + 0
q₂ * q₁ = -6i - 10j + 2k + 0

在这里插入图片描述
画出这q1*q2q2*q1的结果,第一幅是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…

相关文章:

  • 手机做印章网站百度权重是什么
  • 创意设计网页制作教程厦门seo优化外包公司
  • 网站建设全教程外贸网站seo
  • 做旅游网站需要的背景新闻稿发布平台
  • 做网站的专业术语浙江seo关键词
  • 知名开发网站公司简介seo包年服务
  • 抽奖系统(从0-1)(上)
  • node版本切换工具【nvm】
  • 大数据学习(55)-BI工具数据分析的使用
  • python19-if和match的美
  • Springboot 注入方式
  • 让单链表不再云里雾里
  • SPI驱动(一) -- SPI协议
  • 服务是否设置为开机自启动
  • 嵌入式开发:磁通门传感器开发(5):测量磁场的方法和传感器
  • Ollama存在安全风险的情况通报及解决方案
  • 【Resis实战分析】Redis问题导致页面timeout知识点分析
  • React Refs:深入理解与最佳实践
  • BUU44 [BJDCTF2020]ZJCTF,不过如此1 [php://filter][正则表达式get输入数据][捕获组反向引用][php中单双引号]
  • Python项目-基于深度学习的校园人脸识别考勤系统
  • Maven 私服的搭建与使用(一)
  • 沃丰科技结合DeepSeek大模型技术落地与应用前后效果对比
  • 内嵌踢脚线怎么做能省钱?
  • 机器学习的半监督学习,弱监督学习,自监督学习
  • Python--面向对象高级(下)
  • 【Python】精通 Python 模块导入:命名空间、组织与最佳实践