三维坐标系之间的转换

news2025/1/13 13:21:48

一、概括

这个完全是抄别人的,给我自己看的主要是想当我要看的时候我直接能找到,而不用再去网上搜索,后期会吧代码更新上去。

彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美_欧拉角判断动作-CSDN博客

在不同的坐标系中物体的位姿是相对的,任何的坐标系都是相对来说的,那么为什么要坐标系做转换呢?其主要的一个原因是为了更好的测量或者更好的识别。

我们常说的世界坐标系(world ) 也是相对的,我们知道地球绕着太阳转  太阳也在绕这(银河)别的坐标系来旋转,而且是在越来越远离坐标系原点的,所以我们物质的真个世界都是相对的。这个在古代的天干地支中就已经有体现了 。

从小的方面来说我们的导航系统 就是我们在驾驶的时候坐标系中各个物体在切换,坐标系在变换。如:

二、旋转矩阵

为什么要坐标系转换?

简单的说就是为了更好的测量与识别,这是一个从局部到全局(也是相对的)的变换。

坐标系转换需要什么东西?

在从一个坐标系到另外一个坐标系的过程中我们需要一个桥梁,那就是世界坐标系,如下:

坐标系转换:

从O1 ->O2 坐标系的转换 ,如图:

我们可以理解为先平移,然后再旋转

 向量分解

我们把一个向量可以分解到三个不同的方向上,其实就是在 X Y Z方向上做投影,

单位向量在坐标系中的投影

那么 同一个点在不同的坐标系下的坐标是:

 P在A 坐标系下的坐标是   {xa ,ya,za}

同理在 B坐标系下的位置 是 {xb ,yb,zb}  

那么 我们可以产生一个旋转矩阵  b->b R(表示在b坐标系的点转换到A坐标下的)旋转矩阵

向量坐标的计算无非就是投影,那么向量坐标从坐标系B转换至坐标系A无非就是两次投影而已:

 

 坐标变换中平移的实质

向量可以在坐标系中任意移动,只要不改变向量的方向和大小,向量的属性不会发生变化。但是我们研究的是坐标系B中一个坐标点在坐标系A中的映射,因此需要考虑坐标系B的原点O2相较于坐标系A原点O1平移的距离。

如何计算坐标系B各坐标轴在坐标系A上的投影?(多坐标变换)

如何实现坐标变换? 

有了上面的解释,我们可以计算出一个矩阵:

三、欧拉角 

左手 和右手 坐标系

左手坐标系

 右手坐标系

对比一下:

 叉乘

 

Maya 和 OPenGL 使用右手坐标系, DirectX, pbrt, PRMan 使用左手坐标系。

欧拉角

有三个自由度: 偏航(yaw - z) pitch(俯仰-Y)  roll (翻滚-x),

一般情况下是按照 Z -Y -X 的顺序来转动的,

 绕Z轴旋转的话,就是XOY面的上点的转动:

 在这个平面上将向量旋转,然后用矩阵的方式来表示:

欧拉角转化为旋转矩阵

 同理,我们可以按照同样的方式得出到X/Y轴旋转的公式:

 

外旋(x->y->z)和内旋(z->y->x),我们一般使用外旋的顺序(halcon 里面使用的好像是内旋)

欧拉角的弊端---万向锁 

就是当任何一个方向转到90 度的时候会和另外两个自由度中的两个重合,导致会失去一个自由度,然后当我们要使用失去按个自由度的时候,用到了其他的自由度,这就构成了万向锁,如下图:

因此为了解决万向锁的问题,在三个自由度的基础上添加了一个自由度,就是4个自由度---即四元数 

四、四元数 

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

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

相关文章

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…

✅技术社区—通过Canal框架实现MySQL与ElasticSearch的数据同步

Canal 是一个由阿里巴巴开源的,基于 Java 的数据库变更日志解析的中间件,其原理是基于Binlog订阅的方式实现,模拟一个MySQL Slave 订阅Binlog日志,从而实现CDC,主要用于实现 MySQL 数据库的增量数据同步。它主要的使用…

Linux:PostGreSQL|PostGIS部署

由于更换了云服务器,需要重新部署PostGreSQL|PostGIS,所以记录一下Linux CentOS 7 x86-64环境下,PostGreSQL|PostGIS的部署过程。 参考文档:PostgreSQL: Linux downloads (Red Hat family)。 yum安装PostGreSQL 通过yum安装PostG…

PC-DARTS: PARTIAL CHANNEL CONNECTIONS FOR MEMORY-EFFICIENT ARCHITECTURE SEARCH

PC-DARTS:用于内存高效架构搜索的部分通道连接 论文链接:https://arxiv.org/abs/1907.05737 项目链接:https://github.com/yuhuixu1993/PC-DARTS ABSTRACT 可微分体系结构搜索(DARTS)在寻找有效的网络体系结构方面提供了一种快速的解决方案…

网络编程-套接字相关基础知识

1.1. Socket简介 套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;凭借这种机制&#xff0c; 客户端<->服务器 模型的通信方式既可以在本地设备上进行&#xff0c;也可以跨网络进行。 Socket英文原意是“孔”或者“插座”的意思&#xff0c;在网络编程…

ROS——ROS安装遇到的问题

1、添加ROS软件源 打开终端&#xff0c;将下面这条命令复制到ubuntu的终端执行 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list2、添加密钥 …

Java面试题总结200道(三)

51、什么是 Spring IOC 容器 Spring 框架的核心是 Spring 容器。容器创建对象&#xff0c;将它们装配在一起&#xff0c;配置它 们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的 组件。容器通过读取提供的配置元数据来接收对象进行实例化&#xff0…

Windows Docker 部署 Solr 搜索引擎

一、简介 Solr 是 Apache 下的一个顶级开源项目&#xff0c;采用 Java 开发&#xff0c;它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 提供了比 Lucene 更为丰富的查询语言&#xff0c;同时实现了可配置、可扩展&#x…

OpenHarmony4.0对RK3566的烧写过程

前面已经编译的过程搞了比较长的时间,因为遇到了不少问题,老是编译出错,后来经过努力还是编译成功了。 我这里主要针对RK3566的Purple Pi OH开发板,如下图: 因为开源鸿蒙里没有针对这个板的特殊配置,需要下载下面这个文件: purple-pi-oh-patch.zip 这个文件里包含了可…

(二)OpenOFDM频偏校正

频偏校正 This paper [1]解释了频率偏移发生的原因以及如何纠正它。简而言之&#xff0c;有两种类型的频率偏移。第一个称为载波频率偏移 (CFO)&#xff0c;是由发射器和接收器的本地振荡器 (LO) 之间的差异引起的。这种偏移的症状是输入 I/Q 样本&#xff08;时域&#xff09…

国际前十正规外汇实时行情走势app软件最新排名(综合版)

外汇交易&#xff0c;作为当今世界金融市场上一个重要的板块&#xff0c;备受关注和热议。随着金融市场的日益发展&#xff0c;外汇交易也发展成为一个新兴的投资交易渠道。为了更好地满足投资者对外汇市场的需求&#xff0c;外汇实时行情走势app软件应运而生&#xff0c;它为投…

R语言聚类分析-K均值聚类与系统聚类法

一、数据集为firm.csv&#xff0c;给出了22家美国公用事业公司的相关数据集&#xff0c;各数据集变量的名称和含义如下&#xff1a;X1为固定费用周转比&#xff08;收入/债务&#xff09;&#xff0c;X2为资本回报率&#xff0c;X3为每千瓦容量成本&#xff0c;X4为年载荷因子&…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中&#xff0c;会损失大量信息&#xff0c;例如图中的马在建模过程中逐渐变得模糊&#xff0c;从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说&#xff0c; PGI包含三个部分&#xff0c;&#xff0…

LeetCode每日一题[C++]-310.最小高度树

题目描述 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树&#xff0c;标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表&#xff08;每一个…

数据过滤的练习

定义一个集合&#xff0c;并添加一些整数1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9&#xff0c;10&#xff0c;过滤奇数&#xff0c;只留下偶数&#xff0c;并将结果保存起来。 package MyStream;import j…

SAP Activate项目管理方法论路线图

SAP Activate 是 SAP 推出的一种基于敏捷方法论的灵活、快速且引导式的实施方法论&#xff0c;专为加速SAP S/4HANA和其他SAP解决方案的部署而设计。这个方法论结合了最佳实践、引导配置和方法论本身的强大能力&#xff0c;以确保项目的快速实施和成功部署。SAP Activate的核心…

MySQL中出现‘max_allowed_packet‘ variable.如何解决

默认情况下&#xff0c;MySQL的max_allowed_packet参数可能设置得相对较小&#xff0c;这对于大多数常规操作来说足够了。但是&#xff0c;当你尝试执行包含大量数据的操作&#xff08;如大批量插入或大型查询&#xff09;时&#xff0c;可能会超过这个限制&#xff0c;从而导致…

Bit的下载及安装和错误解决方案

文章目录 一、Git初识二、Git安装三、使用四、*可能出现的问题及解决方案1、vscode中没有Git Bash 一、Git初识 1、概念&#xff1a;一个免费开源、分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 2、作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#x…

(官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell

前言 查了很多资料都不靠谱&#xff0c;在安装过程中遇到很多的坑&#xff0c;mangoDB 服务重视起不来&#xff1b;出现了很多难以解决的报错&#xff0c;现在把安装过程中遇到的问题&#xff0c;和如何闭坑说一下&#xff0c;很多时候都是准备工作不足导致的&#xff1b;很多方…

【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程

本文作者&#xff1a; slience_me 文章目录 ARIMA 非平稳过程通过差分转化为平稳过程文章原文具体解释详解参照 ARIMA 非平稳过程通过差分转化为平稳过程 文章原文 Many time series forecasting methods start from the classic tools [38, 10]. ARIMA [7, 6] tackles the fo…