欧拉角及其旋转矩阵,旋转顺序与内旋/外旋及其代码

目录

欧拉角介绍

旋转矩阵公式推导

旋转顺序

内旋/外旋


欧拉角介绍

欧拉角:

横滚:roll(绕X轴旋转);

俯仰:pitch(绕Y轴旋转);

偏航(也称航向角):yaw或者heading(绕Z轴旋转)。

注意:一般xyz坐标轴为前左上(KITTI数据集),或者右前上(华测惯导),或者前右下(常见于国外教材)等等,可以随意定义,(这是惯性坐标系,i系)。而当右前上时,xyz对应的旋转分别是pitch,roll, yaw,且pitch头向上为正,和前左上时正方向相反。前右下的yaw和前左上正方向相反

 (总结:注意坐标轴方向的定义及正方向问题)

注意2:yaw是全局角度,一般以正北为0,逆时针为正(国产惯导);也可以定义为正东为0,逆时针为正(KITTI数据集);也可以是其他任意定义。

(总结:注意yaw的方向和旋转正方向


注意3:rollpitch一般范围为±90°yaw的角度范围为0~360°-180~180°,需要根据实际需要进行变换。

(总结:注意yaw的范围

可视化说明参照:pitch、yaw、roll三个角的区别-CSDN博客

旋转矩阵公式推导

旋转符合右手定则。假设旋转轴顺序为zyx,分别对应yaw(γ)、pitch(β)、roll(α),则旋转矩阵表示为:

 旋转矩阵的推导资料很多了,此处不加赘述。

本文章主要针对旋转顺序内旋/外旋做明确的解释。

旋转顺序

旋转顺序可以是任意设置的。但常见的默认顺序是zyx,对应yaw,pitch,roll。尤其是在做INS/GPS全局局部数据互相转化时。

注意:旋转顺序不同结果也不同,不能随意改变。比如zyx对应yaw,pitch,roll,与xyz对应roll,pitch,yaw的旋转矩阵都是不同的,对应的点或向量的变换结果也不同。随意改变旋转顺序结果就是错的。

默认按照zyx对应yaw,pitch,roll进行旋转!!!

内旋/外旋

内旋:每个基本旋转都是在先前操作旋转的坐标系上执行的。

也就是说,比如绕z旋转之后再绕y轴旋转,这个y轴就是旋转之后的新y轴

外旋:每次旋转都是围绕世界坐标系的轴进行的,世界坐标系不移动。

也就是说,比如绕z旋转之后再绕y轴旋转,这个y轴还是变换之前的那个y轴

import numpy as np
from scipy.spatial.transform import Rotation as Rotpoint = np.array([1,0,0])
rpy = np.array([0, np.pi/4, np.pi/2])#####################        内旋
# 内旋@need_trans_point = 对n坐标系中的点进行活动坐标旋转后(将n系中的点转到b系中后)(也就是b坐标系中的点)在n坐标系下的位置,用ZYX,ypr,此中need_trans_point表示在n系下的初始位置。和下面一个意思。
# 内旋@need_trans_point =   b坐标系中的点在n坐标系下的位置,用ZYX,ypr,此中need_trans_point表示在b系下的初始位置
# 内旋.T@need_trans_point = n坐标系中的点在b坐标系下的位置,用ZYX,ypr,此中need_trans_point表示在n系下的初始位置
nx=Rot.from_euler('ZYX', rpy[::-1], degrees=False).as_matrix()   ##  注意:zyx需要对应yaw,pitch,roll。
nx1=Rot.from_euler('xyz', rpy, degrees=False).as_matrix()        ##  每种特定顺序的外旋等价于其相反顺序的内旋。结果和上面等价#####################        外旋
# 外旋@need_trans_point = 对原坐标系中的点进行固定坐标旋转后在原坐标系下的位置,用zyx,ypr,此中need_trans_point表示在n系下的初始位置
# 外旋.T@need_trans_point = 原坐标系中的点在经固定坐标旋转后的新坐标系下的位置,用zyx,ypr
wx=Rot.from_euler('zyx', rpy[::-1], degrees=False).as_matrix()
wx1=Rot.from_euler('XYZ', rpy, degrees=False).as_matrix()print(wx@point, wx1@point, nx@point, nx1@point, )
print(wx.T@point, wx1.T@point, nx.T@point, nx1.T@point,)

内旋与外旋详细区别参考代码及其注释。

解释:以上代码以scipy,rotation为工具。其中,'ZYX'大写为内旋'zyx'小写时为外旋(具体参照下面官方说明)。

可查看scipy文档有关rotation说明:

https://www.osgeo.cn/scipy/reference/generated/scipy.spatial.transform.Rotation.from_euler.htmlicon-default.png?t=N7T8https://www.osgeo.cn/scipy/reference/generated/scipy.spatial.transform.Rotation.from_euler.html

可借助在线工具计算内旋的旋转矩阵(旋转顺序yaw,pitch,roll,对应zyx):Rotation Tool

欢迎交流! 

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

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

相关文章

小组分享内容第一部分:总览+HttpClients

目录 1.网络爬虫的作用(人话): 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

【linux】重定向|缓冲区

read函数 将文件标识符为fd的文件内容读到buf中去,读count个,read的返回值是实际读到的个数,有可能文件中没有count个,但是read返回的还是实际读到的个数 stat函数 调用这个函数可以查到对应文件的属性,比方说文件大小…

Ceph分布式存储系统以及高可用原理

Ceph分布式存储系统以及高可用原理 1. Ceph原理和架构1.1 分布式存储系统抽象1.2 Ceph基本组件 2 Ceph中的策略层2.1 CRUSH进行数据分发和定位2.2 PG(Placement Group): 集群管理的基本单元2.3 PG的代理primary OSD2.4 轻量级的集群元数据ClusterMap2.5 对PG的罗辑分组&#xf…

谷粒商城——通过接口幂等性防止重复提交订单

如果用户向后端服务提交多次相同订单的提交服务,那么后端应该只生成一条订单记录。 有一些操作天然是幂等的,如查询操作和删除操作等。 幂等性实现 1.token机制(仅这个方法适用于订单的重复提交) 后端先生成1个令牌将其记录在R…

通用开发技能系列:SQL基础学习

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase:数据库 程序员只负责怎么维护存取数据,不管数据库是什么 DBA…

Django之关系模型的序列化

一、关系模型的序列化-多查1 1.1、模型准备 from django.db import models# Create your models here. class Classes(models.Model):name = models.CharField(max_length=20, verbose_name=班级)class Student(models.Model):SEX_CHOICES = ((1,男)), (2, 女)name = models.C…

【HTML】制作一个简单的三角形动态图形

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML和CSS代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的文件名…

【Python的第三方库】flask

1. Flask是什么? 基于python的web后端开发轻量级框架; 基于MVT设计模式即Models,Views,Templates(html模板语言) 2.中文文档: https://dormousehole.readthedocs.io/en/2.1.2/index.html 3.依赖3个库: Jinja2 模版&#xff1…

【Unity灶台】食品加工系统模型搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

pwn学习笔记(7)--堆相关源码

相关源码: 1. chunk 相关源码: ​ 对于用户来说,只需要确保malloc()函数返回的内存不会发生溢出,并且在不用的时候使用free() 函数将其释放,以后也不再做任何操作即可。而对于glibc来说’它要在用户第一次调用malloc…

4.4总结

这两天学习了线段树和树状数组,今晚上学长还在进行JDBC和MYSQL的教学,也收获到了一些东西 树状数组与完全二叉数结构上大致相同,但是完全二叉树每个节点只能存储单个数,而树状数组存储的是数组的范围。 从头结点开始为一整个数组…

Linux之实现Apache服务器监控、数据库定时备份及通过使用Shell脚本发送邮件

目录 一、Apache服务器监控 为什么要用到服务监控? 实现Apache服务器监控 二、数据库备份 为什么要用到数据库备份? 实现数据库备份 三、Shell脚本发送邮件 为什么要用使用Shell脚本发送邮件? 实现Shell脚本发送邮件 一、Apache服务器…

Spring声明式事务以及事务传播行为

Spring声明式事务以及事务传播行为 Spring声明式事务1.编程式事务2.使用AOP改造编程式事务3.Spring声明式事务 事务传播行为 如果对数据库事务不太熟悉,可以阅读上一篇博客简单回顾一下:MySQL事务以及并发访问隔离级别 Spring声明式事务 事务一般添加到…

VSCODE使用VSIX安装扩展

VSCode安装扩展特别慢,使用命令行安装告别龟速: code --install-extension当然,我这个是在WSL 的linux上安装的,Windows一样的。 VSCode扩展商店网页链接:https://marketplace.visualstudio.com/vscode

号卡极团分销管理系统 index.php SQL注入漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…

数字信号处理实验---FFT分析

一、题目: 二、实验要求: 1、绘制图形时,尽量选用已经提供的函数。 2、所有的图形,需要加上横坐标、纵坐标以及标题的说明。 3、将设计的程序保存为脚本文件,在实验报告中,需写出程序语句。 4、Matlab程…

ECC升级S/4HANA“沙箱模拟方案包“:更适用于升级环境复杂、体量大的客户

“作为一家业务体量大的公司,分支机构众多、数据复杂,想从ECC升级会有什么风险?”面对技术更新换代、公司业务不断扩展、网络安全问题的日益突出,将ECC升级到S/4HANA是企业的当务之急。为解决客户的顾虑,无论是对于历史…

51单片机入门_江协科技_19~20_OB记录的笔记

19. 串口通讯 19.1. 串口介绍: •串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 •单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的…

设计模式总结-建造者模式

建造者模式 模式动机模式定义模式结构模式分析建造者模式实例与解析实例:KFC套餐 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种…

使用labelImg标注yolov5数据集并在kaggle中使用yolov5

使用labelImg标注yolov5数据集并在kaggle中使用yolov5 文章目录 前言一、labelImg标注1.1. 下载exe文件1.2. labelImg 下载(源码)1.3. 环境配置1.4. 使用1.4.1. 设置1.4.2. 导入图片并标注 二、在kaggle中使用2.1. 下载源码2.2. 编辑配置文件2.3. 将压缩…