四元数,欧拉角,旋转矩阵,旋转向量

四元数,旋转矩阵,旋转向量,欧拉角

一、欧拉角

1、欧拉角是表达旋转的最简单的一种方式,形式上它是一个三维向量,其值分别代表物体绕坐标系三个轴(x,y,z轴)的旋转角度,默认旋转正向为逆坐标轴逆时针方向。

2、在旋转过程中,xyz轴方向并不是固定不变的,而是随着前面的旋转而改变。比如如果绕 x 轴旋转 90 度,那么旋转后的 y 轴正向将指向原始的 z 轴方向,而旋转后的 z 轴正向将指向 y 轴负向。由此可以看出,欧拉角对应的具体旋转与 xyz 轴的旋转顺序是有关的,相同的 xyz 旋转角度,如果按 xyz 的顺序进行旋转使用按 zyx 的顺序进行旋转,得到的结果是不一致的。

3、在具体应用中,xyz 轴朝向不固定,需要具体情况具体分析。

  1. pitch:绕 x 轴旋转,
  2. yaw:绕 y 轴旋转,
  3. roll:绕 z 轴旋转,

4、欧拉角表示最大的问题是存在万向锁问题。万向锁(Gimbal lock)是在使用动态欧拉角表示三维物体的旋转时出现的问题。一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。

二、四元数

四元数通过四个实数描述三维旋转,q=w+ix+jy+kz,其中 w^2+x^2+y^2+z^2=1

三、旋转向量

旋转向量用一个三维向量来表示三维旋转变换,该向量的方向是旋转轴,其模则是旋转角度。

转换方法

一、scipy.spatial.transform.Rotation

官方文档:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.transform.Rotation.html#scipy.spatial.transform.Rotation

from scipy.spatial.transform import Rotation as R

# 从四元数加载
r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])

# 从旋转矩阵加载
r = R.from_matrix([[0, -1, 0],
                   [1, 0, 0],
                   [0, 0, 1]])

# 从旋转向量加载
r = R.from_rotvec(np.pi/2 * np.array([0, 0, 1]))

# 从欧拉角加载
r = R.from_euler('zyx', [
[90, 0, 0],
[0, 45, 0],
[45, 60, 30]], degrees=True)

# 使用四元数表示
r.as_quat()

# 使用旋转矩阵表示
r.as_matrix()

# 使用旋转向量表示
r.as_rotvec()

# 使用欧拉角表示
r.as_euler('zyx', degrees=True)


# 取逆
inv_r = r.inv()

# 对点进行旋转
r.apply(v)

二、pyquaternion.Quaternion

官方文档:https://kieranwynn.github.io/pyquaternion/

r = Quaternion([w, x, y, z]).rotation_matrix

旋转矩阵和平移向量的特殊操作

如果给定 A2B 的旋转矩阵和平移向量,但是需要 B2A 的旋转矩阵和平移向量,可以如此操作:

R_B2A = np.linalg.inv(R_A2B)
T_B2A = -np.dot(R_A2B, T_A2B)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity DOTS中的baking(一) Baker简介

Unity DOTS中的baking(一) Baker简介 baking是DOTS ECS工作流的一环,大概的意思就是将原先Editor下的GameObject数据,全部转换为Entity数据的过程。baking是一个不可逆的过程,原先的GameObject在运行时不复存在&#x…

VSCode如何设置Vue前端的debug调试

vscode在调试vue.代码时,如何进行debug? 1.安装Chrome Debug插件。 2.在launch.json中,将url修改成你前端项目的路径: 1 {2 // Use IntelliSense to learn about possible attributes.3 // Hover to view descriptions of existing att…

腾讯再推互动微短剧,游戏的风吹向了短剧

当你看剧时不再拥有上帝视角,处在女主的位置上,你又会做出什么样的选择? 腾讯最新上线的短剧《摩玉玄奇2》在原版之外还推出了互动版,就给出了这样一个新玩法。 《摩玉玄奇2》原版是普通的后宫职场微短剧,互动版则是…

Linux——缓冲区与实现C库的fopen,fwrite,fclose

目录 一.缓冲区 1缓冲区的概念 2.缓冲区存在的意义 3.缓冲区刷新策略 4.什么是刷新? C语言的缓冲区在哪里? ​编辑 仿写C库里的fopen,fclose,fwrite。 mystdio.h mystdio.c main.c(向文件中写入20次msg) 一.缓冲区 1…

protobuf安装教程v21.11

Linux: 1.安装依赖库 下载ProtoBuf前⼀定要安装依赖库:autoconf automake libtool curl make g unzip如未安装,安装命令如下: Ubuntu用户: sudo apt-get install autoconf automake libtool curl make g unzip -y CentOS用户&…

盘点251个Python源码Python爱好者不容错过

盘点251个Python源码Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 项目名称 链接:https://pan.baidu.com/s/1PikCn61NfHXmEzQiny8kfw?pwd6666 提取码:6666 dailyfreshpython-Dj…

MongoDB中的sort()排序方法、aggregate()聚合方法和索引

本文主要介绍MongoDB中的sort()排序方法、aggregate()聚合方法和索引。 目录 MongoDB的sort()排序方法MongoDB的aggregate()聚合方法MongoDB的索引 MongoDB的sort()排序方法 在MongoDB中,sort()方法是用来对查询结果进行排序的。sort()方法可以用于在查询语句中对指…

[NAND Flash] 1.1 闪存(NAND Flash) 学习指南

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 ​ 回首 漠然回首,从事存储芯片行业已多年,这些年宝贵的青春都献给了闪存。 我刚入行的时候,也是萌新一个,彷佛大学学的都没有和这相…

docker安装部署

1.在线安装Docker 安装Docker依赖库: yum install -y yum-utils device-mapper-persistent-data lvm2添加yum来源: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装Docker: yum install doc…

[香橙派]orange pi zero 3 烧录Ubuntu系统镜像——无需HDMI数据线安装

一、前言 本文我们将介绍如何使用orange pi zero 3 安装Ubuntu系统,本文相关步骤均参考自开发手册。 二、实施准备 根据开发手册中所提到的,我们应该拥有如下配件: 1.orange pi zero 3 开发板 2.TF 卡——最小 8GB 容量的 class10 级或以上的高速闪迪卡。…

@德人合科技 | 数据透明加密防泄密系统\文件文档加密\设计图纸加密|源代码加密防泄密软件系统,——防止内部办公终端核心文件数据/资料外泄!

一款专业的数据防泄密管理系统,它采用了多种加密模式,包括透明加密、半透明加密和落地加密等,可以有效地保护企业的核心数据安全。 PC端访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee …

c++新经典模板与泛型编程:标准库容器中元素类型的萃取

通过容器(数组)类型萃取元素类型 用GetEleType类模板进行常规实现 #include <iostream>#include <vector> #include <list>// 泛化版本 template<typename T> struct GetEleType;// 特化版本 template<typename T> struct GetEleType<std::v…

【rabbitMQ】模拟work queue,实现单个队列绑定多个消费者

上一篇&#xff1a; springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766?spm1001.2014.3001.5502 在这篇文章的基础上进行操作 基本思路&#xff1a; 1.在rabbitMQ控制台创建一个新的队列 2.在publisher服务中定义一个…

基于JAVA+SpringBoot+Vue的前后端分离的医院信息智能化HIS系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着科技的不断发展&a…

2023.12.3 关于 Spring Boot 拦截器 和 过滤器

目录 引言 Spring 拦截器实现 实例理解 Spring 过滤器实现 实例理解 拦截器和过滤器的区别 出身不同 触发时机不同 底层实现不同 支持的项目类型不同 使用场景不同 引言 原生 Spring AOP 实现统一拦截有两个难点难点一&#xff1a;定义拦截规则表达式 难点二&#…

四. 基于环视Camera的BEV感知算法-DETR3D

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Cam…

arm平台编译so文件回顾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、几个点二、回顾过程 1.上来就执行Makefile2.编译第三方开源库.a文件 2.1 build.sh脚本2.2 Makefile3.最终编译三、其它知识点总结 前言 提示&#xff1a;这…

ES6中的继承,String类型方法的拓展

ES6中的继承&#xff1a; 主要是依赖extends关键字来实现继承&#xff0c;使用了extends实现继承不一定要constructor和super&#xff0c;因为没有的话会默认产生并调用它们。 在实现继承时&#xff0c;如果子类中有constructor函数&#xff0c;必须得在constructor中调用一下s…

我对迁移学习的一点理解——领域适应(系列3)

文章目录 1. 领域适应&#xff08;Domain Adaptation&#xff09;的基本概念2.领域适应&#xff08;Domain Adaptation&#xff09;的目标3.领域适应&#xff08;Domain Adaptation&#xff09;的实现方法4.领域适应&#xff08;Domain Adaptation&#xff09;的可以解决的问题…

javaScript(六):DOM操作

文章目录 1、DOM介绍2、DOM&#xff1a;获取Element对象3、DOM&#xff1a;事件监听3.1、事件介绍3.2、常见事件3.3、设置事件的两种方式3.4、事件案例 1、DOM介绍 概念 Document Object Model &#xff0c;文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a…