接上篇《旋转矩阵的作用:世界坐标变换;求解局部坐标系下的局部坐标》,理解欧拉角:内旋;外旋;万向节死锁

news2025/7/9 17:18:16

目录

    • 1、什么是欧拉角、静态欧拉角、动态欧拉角
    • 2、内旋、外旋及计算方式
    • 3、万向节死锁

接上篇《旋转矩阵的作用:世界坐标变换;求解局部坐标系下的局部坐标》,理解欧拉角:内旋;外旋;万向节死锁

1、什么是欧拉角、静态欧拉角、动态欧拉角

用一句话说,欧拉角就是物体绕坐标系三个坐标轴(x,y,z轴)的旋转角度。
在这里,坐标系可以是世界坐标系,也可以是物体坐标系,旋转顺序也是任意的,可以是xyz,xzy,yxz,zxy,yzx,zyx中的任何一种,甚至可以是xyx,xyy,xzz,zxz等等等等。。。。。。
这里的物体坐标系也可以称之为模型坐标系、局部坐标系
所以说欧拉角多种多样。欧拉角可分为两种情况:
1)静态欧拉角:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态欧拉角。
2)动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态欧拉角。
(版权声明:本文为CSDN博主「caimouse」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/caimouse/article/details/55259669)

2、内旋、外旋及计算方式

1)外旋:以静态欧拉角进行旋转称之为外旋
计算方式:
比如世界一点P,沿着X-Y-Z顺序,旋转角度为θ,按照外旋方式,求旋转后P’点新的世界坐标,那么就有:
假设世界坐标系为E,则:
P w o r d E ′ P'_{wordE} PwordE= R z ( θ ) R_z(θ) Rz(θ)x R y ( θ ) R_y(θ) Ry(θ)x R x ( θ ) R_x(θ) Rx(θ)x P w o r d E P_{wordE} PwordE
2)内旋:以动态欧拉角进行旋转称之为内旋
计算方式:
首先给出一个结论:内旋和外旋,旋转方向和角度相同,旋转顺序相反的情况下,内旋和外旋结果相同,以下是证明:
计算世界一点P,沿着Z-Y-X顺序,旋转角度为θ,按照内旋方式,求旋转后P’点的新的世界坐标。
思路是:利用物体内旋后的物体坐标系下的坐标反向计算其世界坐标即可证明上述结论。
a、首先我们明确一点,无论怎么旋转,按着哪个坐标系的哪个轴来旋转,物体在物体坐标系下的坐标不会发生变化;

b、假设初始状态下物体坐标系(同时也是世界坐标系,即初始状态下物体坐标系和世界坐标系重合)为E,坐标系E沿E的Z轴旋转后的物体坐标系为F,坐标系F沿着F的Y轴旋转的物体坐标系为G,坐标系G沿着G的X轴旋转的物体坐标系为H,以上每次旋转都是按照物体坐标系进行旋转,即内旋;

c、P’点在H坐标系下的与P点的世界坐标(即P点在初始物体坐标系下的坐标相同,因为a),即 P p a r t H ′ P'_{partH} PpartH= P w o r l d E , P_{worldE}, PworldE那么根据《旋转矩阵的作用:世界坐标变换;求解局部坐标系下的局部坐标》中的结论有:
P p a r t H ′ P'_{partH} PpartH= R x − 1 ( θ ) R_x^{-1}(θ) Rx1(θ)x P p a r t G ′ P'_{partG} PpartG,其中 P p a r t H ′ P'_{partH} PpartH是P’点在H坐标系下的坐标, P p a r t G ′ P'_{partG} PpartG是P‘点在G坐标系下的坐标;
则有:
P p a r t G ′ P'_{partG} PpartG= R x ( θ ) R_x(θ) Rx(θ)x P p a r t H ′ P'_{partH} PpartH                 (1)

同理,P’点在F坐标系下的坐标表示为:
P p a r t G ′ P'_{partG} PpartG= R y − 1 ( θ ) R_y^{-1}(θ) Ry1(θ)x P p a r t F ′ P'_{partF} PpartF
P p a r t F ′ P'_{partF} PpartF= R y ( θ ) R_y(θ) Ry(θ)x P p a r t G ′ P'_{partG} PpartG     把(1)带入有
P p a r t F ′ P'_{partF} PpartF= R y ( θ ) R_y(θ) Ry(θ)x R x ( θ ) R_x(θ) Rx(θ)x P p a r t H ′ P'_{partH} PpartH           (2),其中 P p a r t F ′ P'_{partF} PpartF是P’点在F坐标系下的坐标;

同理,P’点在E坐标系下的坐标表示为
P p a r t F ′ P'_{partF} PpartF= R z − 1 ( θ ) R_z^{-1}(θ) Rz1(θ)x P p a r t E ′ P'_{partE} PpartE
P p a r t E ′ P'_{partE} PpartE= R z ( θ ) R_z(θ) Rz(θ)x P p a r t F ′ P'_{partF} PpartF     把(2)带入有
P p a r t E ′ P'_{partE} PpartE= R z ( θ ) R_z(θ) Rz(θ)x R y ( θ ) R_y(θ) Ry(θ)x R x ( θ ) R_x(θ) Rx(θ)x P p a r t H ′ P'_{partH} PpartH           (3)
其中 P p a r t E ′ P'_{partE} PpartE是P’点在E坐标系下的坐标,这意味着 P p a r t E ′ P'_{partE} PpartE P w o r d E ′ P'_{wordE} PwordE是相等的,只是一个是P’在物体坐标系的表示方法,一个是在世界坐标系中的表示方法,但是此时物体坐标系=世界坐标系,因此 P p a r t E ′ P'_{partE} PpartE P w o r l d E ′ P'_{worldE} PworldE是相等!
那么(3)式可以改写为:
P w o r l d E ′ P'_{worldE} PworldE= R z ( θ ) R_z(θ) Rz(θ)x R y ( θ ) R_y(θ) Ry(θ)x R x ( θ ) R_x(θ) Rx(θ)x P p a r t H ′ P'_{partH} PpartH           (4)
P p a r t H ′ P'_{partH} PpartH=$P_{worldE}(上文中有提到),代入(4)式则有:

P w o r l d E ′ P'_{worldE} PworldE= R z ( θ ) R_z(θ) Rz(θ)x R y ( θ ) R_y(θ) Ry(θ)x R x ( θ ) R_x(θ) Rx(θ)x P w o r l d E P_{worldE} PworldE
这个公式正好是上文按X-Y-Z顺序,按外旋旋转角度为θ的公式,由此证毕。(这里有点不严谨,无论内旋外旋,都应该按三个轴旋转不同的角度θ,γ,α,但是我懒得打字了,三个轴旋转角度都设置为θ了,但是结论肯定是一样的)。

3、万向节死锁

万向节死锁通常都被解释为失去了一个自由度,这样解释当然是没有问题的,但是个人觉得不便于理解,至少不便于我理解。
首先我们还是来给出定义:
无论是内旋还是外旋,都要经历三次旋转变换,每次旋转时所使用的旋转轴,对于外旋来说这三个旋转轴肯定是不同的(外旋是绕着世界坐标轴旋转,世界坐标轴是不变且三个轴不同的);但是内旋就不一定了,当三个旋转轴中出现相同的轴时,将这种情况称为万向节死锁。
示例:
在这里插入图片描述
(图片引用自https://blog.csdn.net/tiao_god/article/details/112534095)
当我们绕x轴旋转90°后,此时的物体坐标系的z轴和第一次的旋转轴重合,这时第三次旋转和第一次旋转的轴是相同的,也就是说想要得到上面的最终结果只需要旋转两个轴就够了,一共三个旋转轴,但是少了一个(有两个一样),这就是网上所说的失去了一个自由度(因为实际只有两个轴了,第三个轴没了)。
所以,判别是否发生了万向节死锁直接判断三次旋转的是否使用了三个不同的旋转轴;同理,避免万向节死锁发生的办法就是避免三次旋转所用的旋转轴发生重合即可。

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

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

相关文章

抢跑数字中国建设,青岛市统计系统考察团赴实在智能调研统计数字员工

当前,数据要素价值不断显现,数字经济正引领着政企业加快数字技术的应用,融通创新工作机制,推进高质量转型。近日,中共中央、国务院印发了《数字中国建设整体布局规划》。《规划》指出,到2025年,…

Rust 开发系列PyO3:Rust与Python的联动编程(上)

前言 Rust语言经常被人误认为是R语言,或者Ruby语言……但是做为近十年来tiobe最出人意料的编程语言,从冷门逐渐变成了明星,不过这次我们不讲Rust入门的内容,我们先来看看它一个很实用的功能——与Python的联动编程。 在正式开始之…

易优cms searchform 搜索标签使用方法

searchform 搜索标签 【基础用法】 标签&#xff1a;searchform 描述&#xff1a;文档标题搜索&#xff0c;默认搜索整站 用法&#xff1a; {eyou:searchform typesonself} <form method"get" action"{$field.action}"> <input …

僵尸(Zombie)进程

文章目录1.僵尸进程2.产生僵尸进程的原因3.利用 wait 函数销毁僵尸进程4.使用 waitpid 函数销毁僵尸进程1.僵尸进程 进程完成工作后&#xff08;执行完 main 函数中的程序后&#xff09;应被销毁&#xff0c;但有时这些进程将变成僵尸进程&#xff0c;占用系统中的重要资源。这…

vue 监测数据改变的原理,添加属性

vue 监测数据改变的原理&#xff0c;添加属性 概况就是vue帮我们处理了&#xff0c;data的数据&#xff0c;加了get和set在生成虚拟dom模板之前&#xff0c; 开始做data数据的生成&#xff0c;get&#xff0c;set vue 提供的api : Vue.set(vm._data.student,‘key’,‘val’)…

C++复习笔记16

非类型的模板参数 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之后的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使用。 注意&#xff1a; 1. 浮点数…

分享一个可以早点下班的开发小技巧

这次来跟大家分享一下让大家早下班的工具。首先要声明一下&#xff0c;分享的工作&#xff0c;是为了大部分人&#xff0c;而不是“某一个人”&#xff0c;不喜勿喷哈&#xff01; 介绍的就是这两年很火的低代码平台&#xff0c;网上两种观点&#xff1a; 第一种人是很不屑&am…

等保2.0与1.0 测评要求的变化

No.1标准内容增加了 标准内容上最大的变化就是将安全要求分为了安全通用要求和扩展要求。首先&#xff0c;安全通用要求部分已对1.0标准的内容进行了优化&#xff0c;删除或修订了过时的要求项&#xff0c;新增了对新型网络攻击行为防护和个人信息保护等方面的新要求。其次&am…

SAP 更改物料基本计量单位

前言部分 在SAP中物料创建后&#xff0c;一旦发生业务&#xff0c;其基本计量单位便很难修改。由于单位无法满足业务要求&#xff0c;往往会要求新建一个物料替代旧物料。这时候除了要将旧物料上所有的未清业务删除外&#xff0c;还需要替换工艺与BOM中的旧物料。特别是当出现旧…

一文带你看懂:亿级大表垂直拆分的工程实践

伴随着不断扩张的业务量&#xff0c;在数据库层面一般会经历数据拆分。解决问题的第一步&#xff0c;就是重新评估DB表结构设计的合理性。我们开发者会对表结构和业务代码进行重构&#xff0c;在之前的文章《业务系统重构》我有提到过。大表问题我实际遇到的是怎么样的情况呢&a…

CAD指令框找不到了怎么调出来?CAD指令框调出方法

CAD制图过程中&#xff0c;为了提高设计师的绘图效率&#xff0c;经常会用到各种CAD命令快捷键&#xff0c;可是CAD指令框突然不见了&#xff0c;这就让人很头疼了。CAD指令框找不到了怎么调出来呢&#xff1f;本节内容小编以浩辰CAD软件为例来给大家分享一下CAD指令框调出方法…

网络协议(十二):HTTPS(SSL/TLS、TLS1.2的连接)

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…

mysql 数据库 tinyint 类型字段取数变成 true/false 的解决方案

mysql 数据库 tinyint 类型字段取数变成 true/false 的解决方案 灌水 问题描述&#xff1a; 在 mysql 数据库设定上&#xff0c;有个字段类型是 tinyint 类型&#xff0c;长度为 1&#xff0c; 设定如下所示&#xff1a; 常规 sql 取数&#xff0c; 取到润乾报表内的时候&…

女神节告白代码

今天是女神节&#xff0c;送给所有女神们一句话&#xff1a; 爱自己是终生浪漫的开始&#xff0c;无论何时都要好好爱自己 目录 1. 请求动画帧填充 2.点类 3.粒子类 ​编辑 4.ParticlePool 池类 5.创建和填充 6.处理循环队列 7.更新活动粒子 8.移除非活性粒子 9.绘制有…

MQTT协议-CONNECT报文介绍

MQTT协议-CONNECT报文介绍 参考MQTT协议中文笔记&#xff1a;https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html Connect报文主要用于客户端连接服务器的&#xff0c;未涉及具体数据的传输&#xff0c;可以使用网络调试助手来连接阿里云平台&#xff…

什么是档案级光盘?它的寿命是多少年?

我们经常会听到有人在说&#xff1a;CD、DVD光盘的寿命多少多少年&#xff0c;蓝光光盘的寿命多少多少年。实际上这个说法是不对的&#xff0c;至少是不准确的&#xff0c;因为同样是CD、DVD光盘或者蓝光光盘&#xff0c;也分等级&#xff0c;而不同等级的光盘的寿命是不一样的…

ENVI_Classic:快速入门_菜单栏常见功能的基本介绍

说明&#xff1a;由于实验要求&#xff0c;所以并没有对各个功能进行详尽的解释&#xff0c;大多点到为止&#xff0c;少部分实验内容是实验要求所以步骤详尽。当然由于经验不足&#xff0c;有一些可能存在错误恳请指正.1. 实验目的通过ENVI Classic对自行下载的遥感图像进行一…

JavaScript Math 算数对象实例集合

文章目录JavaScript Math 算数对象实例集合使用 round() 对数字进行舍入使用 random() 来返回 0 到 1 之间的随机数使用 max() 来返回两个给定的数中的较大的数使用 min() 来返回两个给定的数中的较小的数摄氏度与华氏转换JavaScript Math 算数对象实例集合 注意&#xff1a; 了…

MySQL基础篇2

第一章 SQL语句之DQL 语法&#xff1a;查询不会对数据库中的数据进行修改&#xff0c;根据指定的方式来呈现数据。 语法格式&#xff1a; select * | 列名,列名 from 表名 [where 条件表达式] select 是查询指令&#xff0c;可以读 1 ~ n 行数据&#xff1b; 列名换成 * 号&a…

网络:TCP与UDP相关知识(详细)

目录&#xff1a;1、UDP 和 TCP 的特点与区别2、UDP 、TCP 首部格式3、TCP 的三次握手和四次挥手4、TCP 的三次握手&#xff08;为什么三次&#xff1f;&#xff09;5、TCP 的四次挥手&#xff08;为什么四次&#xff1f;&#xff09;6、TCP 长连接和短连接的区别7、TCP粘包、拆…