四元数学习总结(2)

导语:相比矩阵,用四元数处理3D旋转的优势是毋庸置疑的,但由于概念复杂,难于理解,一直令我摸不着头脑。最近学习更是发现在机器人、无人机、SLAM等先进领域,四元数被当成实数、整数这样的基础,所以决定努力补一补这块的知识点。全部内容都来自B站/知乎上的大佬们,这只是本人学习有所感悟后,梳理出来的总结。

上接四元数学习总结(1)的内容。

四元数的乘法


1、复数乘法和二维旋转

通过上一篇的内容,我们了解到四元数和复数的某些关联性质,还有两个几何特性:

1、纯四元数(Pure Quaternion)P = 0 + xi + yj + zk = {0, p},其中 x、y、z 是实数,而 i、j、k 是四元数的虚部单位。纯四元数在几何上可以被视为三维空间中的向量,其中 x、y、z 分别代表向量的三个分量。

2、单位四元数(Unit Quaternion)Q = s + xi + yj + zk = {s, q},其模(或称为范数)等于1。单位四元数通常用于表示三维空间中的旋转轴向量,它可以避免万向锁问题,并且能提供平滑的插值方法。

那么如何利用四元数的乘法运算去表示三维的旋转?我们不妨先来回顾复数和二维旋转。复数乘以i可以逆时针(朝+i方向)旋转90°,乘以-i可以顺时针旋转90°。写成矩阵乘法如下所示

其中推导公式中暗含了一个欧拉公式,包含sinθ和cosθ的矩阵就是我们常见的二维旋转矩阵。可以发现二维旋转矩阵其实也对应着一个类似四元数的一个向量表达形式,就是复数。我们对旋转矩阵进行求逆发现其实对应的就是复数的共轭形式。(数学功底差的同学可以看看下面文心一言的数学解析)

也就是说cosθ+i·sinθ是正旋转θ,而cosθ-i·sinθ是逆旋转θ。也就是对应着单位复数的求逆就是等于其共轭(数学差生看下面证明)这些特性用在四元数和三维旋转矩阵中优势就更明显了。

这里有一个问题需要拿出来阐述,为什么二维旋转可以交换?在三维旋转中先绕x旋转,在绕y旋转和先绕y旋转,在绕x旋转肯定是不一样的,具体看下图。那我们在二维旋转中先转90°再转45°肯定和先转45°再转90°是一样的。究其根本,是二维旋转它首先就隐藏了一个非常重要的因素,就是旋转轴永远是垂直于二维平面的,也是固定的,在二维中无论怎么旋转,都是共面的。放到三维空间,旋转之所以存在次序性,之所以不能交换,是旋转轴可以跟向量成任意角度。如果你放到一个二维子空间里面去旋转,你依然可以满足交换性。

 (数学差的同学还是得注意,旋转矩阵的左乘和右乘的区别)

  • 左乘

    • 坐标系(或参考系)不动,点(或向量)动。这可以理解为在原始坐标系(或称为世界坐标系)下,点(或向量)绕原点进行了旋转。左乘的结果是旋转后的点(或向量)相对于原始坐标系的位置。
    • 在二维或三维空间中,如果绕静坐标系(如世界坐标系)旋转,通常采用左乘的方式。这相当于将旋转变换矩阵乘以坐标矩阵。
  • 右乘

    • 点(或向量)不动,坐标系(或参考系)动。这可以理解为点(或向量)保持不变,但坐标系进行了旋转,因此点(或向量)在新坐标系下的坐标发生了变化。右乘的结果是原始点(或向量)相对于新坐标系(或称为旋转后的坐标系)的坐标。
    • 如果绕动坐标系(即自身建立一个坐标系)旋转,通常采用右乘的方式。这相当于将坐标矩阵乘以变换矩阵。

2、三维旋转

首先,我们又扯到上篇文章说的two-sphere,也就是通常意义上的球体。轴角一般表示为旋转轴和角度,单看旋转轴,归一化后的旋转轴其实就是球体上面的一个点。那我们用极坐标来表示(cosα·sinβ,sinα·sinβ,cosβ)。

然后,我们就要去旋转角度了。欧拉角是一种应用很广但其实很有缺陷的旋转表现形式,那为啥有缺陷还应用广泛呢?主要原因就是简单。我们绕着单位轴旋转(譬如绕z轴旋转)比绕任意方向轴要简单许多,那么处理轴角的思路就是把轴旋转到单位轴譬如z,进行旋转后再还原到原来位置(具体轴角公式如下,证明暂时放一放)

先对旋转矩阵 𝑅 进行转置得到 𝑅T,然后再右乘向量 𝑣,即 𝑣·𝑅T,具有特定的几何意义。

  1. 坐标系变换:首先,旋转矩阵 𝑅 表示将一个坐标系内的点或向量旋转到另一个坐标系。当我们对 𝑅 进行转置得到 𝑅T 时,我们实际上是在逆转这个旋转操作,即从目标坐标系变回原始坐标系。

  2. 逆变换:转置的旋转矩阵 𝑅T 可以视为逆变换,它将经过 𝑅 旋转后的坐标变回原始坐标。因此,𝑅T 代表了原始旋转的逆操作。

  3. 右乘:当我们右乘 𝑣·𝑅T 时,我们实际上是在将坐标系逆旋转,而不是旋转向量 𝑣。这相当于将向量 𝑣 从目标坐标系变回原始坐标系。


3、四元数乘法

首先要说说四元数的乘法定义,网络上普遍归纳的是两个纯四元数的乘法通式为 -点乘 +叉乘,即:

p * q = - p · q + p x q

详细的说,p = (x₁i + y₁j + z₁k),q = (x₂i + y₂j + z₂k),执行代数乘法得:

-(x₁x₂+y₁y₂+z₁z₂) + (y₁z₂ - z₁y₂)i + (x₁z₂ - z₁x₂)j + (x₁y₂ - y₁x₂)k

但其实对于一般的四元数而言,其乘法通式应该是如下图所示: 

因为纯四元数的实部为0,也就是p₀ q₀等于0,所以上面2个四元数的乘法通式是一样的意思。

说回正题。单位四元数用作表示旋转,纯四元数表示旋转轴的三维向量,这一点毋庸置疑。那么我们可以用如下的四元数乘法来计算三维旋转:

三维任意向量:q = 0 + x₁i + y₁j + z₁k

旋转角:p = w + x₂i + y₂j + z₂k

四元数乘法计算三维旋转表达式:pqp^-1

(单位复数的求逆就是等于其共轭,推广到单位四元数也成立)

可以稍微试着用第2节的思想去理解这里的左乘p右乘p-1。这里举个很简单的例子,譬如一个表达三维向量的四元数 v = ik,我们给它左乘一个j,右乘一个-j,即:

j · ( i + k) · -j

= ( j·i + j·k ) · -j

= ( -k + i)  · -j

= k·j - i·j

= -i - k

这意思就是说,四元数 v 代表的三维向量,沿着 j 轴旋转了180°  但这里其实还是不对,因为我们原本只想 pq 运算的几何意义只是 沿着 j 轴旋转一次,旋转90°就可以了。但是这个方法左乘一次,右乘一次,实际上是旋转了两次,所以用四元数的数学乘法计算的时候,对应旋转角的四元数一定要取期望角度的一半。


2024.05.23 暂时写到这,有问题在补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抄单 高频下单系统的功能都有什么?

1、多开:同一台电脑同一个账户无限数量登录(登录后可独立新开合约,挂单,买卖等),多开后可使用三种不同切换方式来回切换,第一种为ALTTab切换、第二种为点击搜索条切换、第三种为点击下方任务栏切…

RT-Thread更改msh串口波特率

修改rt-thread文件下components下dirvers下serial.h文件里 #define RT_SERIAL_CONFIG_DEFAULT 里的默认波特率即可

Vue进阶之Vue项目实战(三)

Vue项目实战 图表渲染安装echarts图表渲染器(图表组件)图表举例:创建 ChartsRenderer.vue创建 ChartsDataTransformer.ts 基于 zrender 开发可视化物料安装 zrender画一个矩形画一个柱状图 基于svg开发可视化物料svg小示例使用d3进行图表渲染安装d3基本使用地图绘制…

柏拉图表征假说:AI模型趋同于现实的统一表征

引言 近日,Ilya Sutskever在离开OpenAI后不久点赞了一篇由MIT团队发表的AI论文,这篇题为《The Platonic Representation Hypothesis》的论文引起了广泛关注。这篇论文探讨了AI模型在不同数据和模态上的训练是否趋向于收敛成一个共享的现实世界统计模型。…

怎么识别图片中的文字呢!??

要识别图片中的文字,一般使用OCR软件来实现这一需求,下面以金某识别网页版为例,说说操作步骤: 一、点击“点击添加需转换的图片或PDF”,如还没登录将弹出登录窗口,直接登录即可,如已登录&#x…

基于 Wireshark 分析 UDP 协议

一、UDP 协议 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,常用于传输即时数据,如音频、视频和实时游戏数据等。 UDP 的特点如下: 1. 无连接性:UDP 不需要在发送数…

计算机毕业设计 | SSM汽车租赁系统(附源码)

1, 概述 1.1 课题背景 随着社会的快速发展,计算机的影响是全面且深入的。用户生活水平的不断提高,日常生活中用户对汽车租赁系统方面的要求也在不断提高,需要汽车租赁系统查询的人数更是不断增加,使得汽车租赁系统的…

6-3 求二叉树的深度

作者 DS课程组 单位 临沂大学 本题要求实现一个函数,可返回二叉树的深度。 函数接口定义: int Depth(BiTree T);T是二叉树树根指针,函数Depth返回二叉树的深度,若树为空,返回0。 裁判测试程序样例: #in…

电商API接口:供应商价格与主流电商平台价格做比价

品牌在进行采购工作时,将供应商提供的价格与主流电商平台上的公开价格进行比价是一种非常常见的做法,这样做的目的主要是为了保证自身供应商提供的价格具有竞争力和合理性,从而更好地优化采购工作。 以下是过程中的具体步骤及一些注意事项&a…

基于springboot实现周边游平台个人管理系统项目【项目源码+论文说明】

基于springboot实现周边游平台个人管理系统演示 摘要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以…

2024年上半年信息系统项目管理师下午真题及答案(第一批)

试题一 某项目包含ABCDEFGH共8个活动,各活动的历时、活动逻辑关系如下表所示: 单击下面头像图片领取更多软考独家资料

分布式一致性必备:一文读懂Raft算法

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好!我是小米,一个热爱分享技术的29岁程序员哥哥。今天我们来聊聊分布式系统中的一个重要算法——Raft。这个算法专门用于管理分布式系统中…

DCL(数据控制)

1. 用户管理 1.1 查询用户 select * from mysql.user; 查询结果: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以远程访问的。 User代表的是访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识…

Python爬虫实战:利用代理IP获取电商数据

文章目录 1.电商数据介绍2.爬取目标3.代理IP推荐4.准备工作4.1 模块安装4.2 代理IP获取 5.爬虫代码实战5.1分析网页5.1.1 获取cookie5.1.2 关键词分析5.1.3 翻页分析5.1.4 数据获取分析 5.2 发送请求5.3 提取数据5.4 保存数据5.5 完整源码5.6 数据分析六、总结 1.电商数据介绍 …

解决问题的多样手段:不止律师

在我们日常生活和工作中,总是会遇到各种各样的问题。有时我们会不由自主地想到找律师打官司,认为这是解决问题的唯一途径。然而,解决问题其实有很多手段,律师和法庭只是其中的一种。事实上,只要能够发现问题并及时解决…

Spring Boot中@Value加载配置的替代者:@ConfigurationProperties

Value注解Spring Boot开发者都已经熟悉了,通过该注解,我们可以快速的把配置信息加载到Spring的Bean中。 例如:在application.yml中添加了一个配置如下: 我想在service中获取name,通过value注解方式实现,代…

人力资源管理信息化系统如何支持企业开展管理诊断?

华恒智信人力资源顾问有限公司致力于帮助企业开展人力资源管理方面的各项提升改进工作,在长期的咨询工作中,最常听到企业提到的问题莫过于管理诊断方面的问题,事实上,很多企业在日常工作中,都意识到企业内部存在管理方…

比例溢流阀的放大器找BEUEC

液压比例放大器的使用范围广泛,包括工业生产线、船舶液压系统等多个领域。BEUEC比例放大器是一种重要的液压系统组件,其作用是将微弱的液压信号放大,以实现对液压系统的精确控制。这种设备在多个行业中都有广泛的应用,特别是在需要…

C++ List完全指南:使用方法与自定义实现

文章目录 list的使用几种构造函数 list的实现1.节点类的定义1.1节点类的构造函数 2.正向迭代器实现2.1operator*重载2.2operator->重载2.3operator重载2.4operator--2.5operator和operator! 3.反向迭代器实现3.1operator*重载3.2operator->重载3.3operator重载…

解决Vue3+TS+vite,VSCode 高亮语法错误

一般像这种提示,有可能就是TypeScript语法的识别问题, 一般我们重装一下Vue - Official插件 或者将tcconfig.json中的moduleResolution改为node模式, 基本都是TypeScript无法识别vue文件中的TypeScript语句导致的