齐次变换矩阵、欧拉角

news2025/1/14 18:03:03

目录

  • 齐次变换矩阵
    • 旋转矩阵如何计算
    • 平移矩阵如何计算
    • 实例
  • 欧拉角和齐次变换矩阵互相转换

齐次变换矩阵

因为老是忘记齐次变换矩阵的含义以及方向,每次推导公式都很费劲,写下这篇文章用于快速回顾齐次变换矩阵。

在这里插入图片描述

表示的是:坐标系A到坐标系B的齐次变换矩阵,也是坐标系B在坐标系A下的位姿。

对于这个矩阵,有三个物理意义:

(1)坐标变换:通过变换矩阵可以获得{B}坐标系下的向量(坐标)在{A}坐标系下的描述(坐标)。

(2)坐标系的描述:描述了坐标系{B}在{A}下的位姿(位置和姿态)

(3)可以作为算子,将{B}中的矢量或物体变换到{A}中,描述了某个刚体的运动情况。

将B坐标系下的点或者向量左乘这个齐次变换矩阵,能够得到坐标系A下的坐标描述

后续的讲解均以这个齐次变换矩阵进行描述。

旋转矩阵如何计算

常用右手系。首先要确定旋转的正反方向,用右手的大拇指指向旋转轴的正方向,弯曲手指手指。手指方向即是轴的正旋转方向。

那么绕各个坐标轴的旋转θ角可以用如下的旋转矩阵R(注意是左乘)表示:

在这里插入图片描述

平移矩阵如何计算

坐标系A是固定坐标系,坐标系B进行移动。

其实就是坐标系原点的偏移,平移部分其实就是坐标系B的原点在坐标系A下的坐标

实例

一开始坐标系B和坐标系A重合,首先**B相对于A的Z轴逆时针(视线沿着z轴正方向)旋转90°(此时旋转方向为负,应该取-90°),然后沿着A的x轴移动-3.75个单位,沿着A的y轴移动26.25个方向,**那么最终的齐次变换矩阵为

在这里插入图片描述

欧拉角和齐次变换矩阵互相转换

欧拉角以ZYX顺序,输入为弧度

Eigen::Matrix3d rpy2R(const Eigen::Vector3d& rpy) // 单位为弧度
{
	double roll = rpy[0]; // A - Roll (绕X轴旋转)
	double pitch = rpy[1];// B - Pitch (绕Y轴旋转)
	double yaw = rpy[2];// C - Yaw (绕Z轴旋转)

	Eigen::Matrix3d rotation_matrix; // 按照ZYX 即yaw pitch roll顺序计算得到
	rotation_matrix = Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ())
		* Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY())
		* Eigen::AngleAxisd(roll, Eigen::Vector3d::UnitX());

	return rotation_matrix; // 输出单位为mm

}
Eigen::Vector3d R2ypr(const Eigen::Matrix3d& rotation_matrix) // 旋转矩阵必须严格按照ZYX顺序得到的,且单位为mm
{
	double roll, pitch, yaw;

	if (rotation_matrix(2, 0) < 1) {
		if (rotation_matrix(2, 0) > -1) {
			pitch = asin(-rotation_matrix(2, 0));
			yaw = atan2(rotation_matrix(1, 0), rotation_matrix(0, 0));
			roll = atan2(rotation_matrix(2, 1), rotation_matrix(2, 2));
		}
		else { // 仰角为 -90 度
			pitch = -M_PI / 2.0;
			yaw = -atan2(-rotation_matrix(1, 2), rotation_matrix(1, 1));
			roll = 0;
		}
	}
	else { // 俯角为 90 度
		pitch = M_PI / 2.0;
		yaw = atan2(-rotation_matrix(1, 2), rotation_matrix(1, 1));
		roll = 0;
	}

	// 将弧度转换为度数
	roll = roll * 180.0 / M_PI;
	pitch = pitch * 180.0 / M_PI;
	yaw = yaw * 180.0 / M_PI;

	Eigen::Vector3d rpy;
	rpy[0] = roll, rpy[1] = pitch, rpy[2] = yaw;
	return rpy; // 输出单位为度数
}

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

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

相关文章

电脑问题快速判断

电脑开机没有任何反应 检查电源 检查电源是否有问题或损坏&#xff0c;可以短接方法检测 板电源卡口对自己接第四或第五根线&#xff0c;若风扇匀速转动&#xff0c;电源无问题&#xff0c;若不转动或转一下停一下&#xff0c;电源有问题 检查内部连线 确保主板上的线插的…

【C语言】手撕二叉树

标题&#xff1a;【C语言】手撕二叉树 水墨不写bug 正文开始&#xff1a; 二叉树是一种基本的树形数据结构&#xff0c;对于初学者学习树形结构而言较容易接受。二叉树作为一种数据结构&#xff0c;在单纯存储数据方面没有 顺序表&#xff0c;链表&#xff0c;队列等线性结构…

软件项目经理需要具备这 11 个能力

当前软件开发技术更新换代越来越快&#xff0c;各种项目实施管理思想也日新月异&#xff0c;作为一个软件项目经理&#xff0c;需要具备这 11 种能力&#xff1a; 1. 项目管理能力 了解项目管理的基本原则和方法&#xff0c;包括制定项目计划、资源分配、风险管理、问题解决和…

婚恋相亲红娘牵线系统源码支持微信小程序+微信公众号+H5+APP社交交友系统搭建,扩展你的社交影响力与人脉资源

当代年轻人晚婚晚育甚至不愿意结婚不愿意相亲等问题愈来愈严重了&#xff0c;但是如果抛开表现去追求本质的话&#xff0c;其实不难发现年轻人们还是会喜欢去找一些志同道合或者聊得来的异性朋友交流&#xff0c;从线上发展到线下的一个流程。 核心系统核心体系是恋爱小贴士、…

概率图模型在机器学习中的应用:贝叶斯网络与马尔可夫随机场

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

嵌入式s5p5818核心板介绍

底板寻址空间介绍 s5p6818 寻址空间采用统一编址方式进行管理 寻址空间映射图&#xff1a; 独立寻址&#xff1a;片内片外存储器只能选择其中一个 统一寻址&#xff1a;片内片外存储器都能使用&#xff0c;且使用的是同一片连续的寻址空间 reserved保留&#xff0c;Normaol …

【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

代码主体是GPT帮我写的&#xff0c;我觉得这个功能非常实用。 解决自动旋转问题参考&#xff1a;一行代码解决PIL/OpenCV读取图片出现自动旋转的问题&#xff0c;增加一行代码image ImageOps.exif_transpose(image) 即可恢复正常角度。 from PIL import Image, ImageOpsdef …

vue 表格获取当前行索引,加颜色

vue 表格获取当前行索引&#xff0c;加颜色 <span styledisplay:inline-block;width:10px;height:10px;border-radius:50% :style"{background:color[scope.$index]}" />//定义颜色color: [#5387F7, #A794E0, #F3543C, #999999, #77D3F8, #FFA1B4, #26CEBA, #…

【Cookie和Session的区别(面试重点)】

Cookie和Session的区别 1. Cookie1.1 认识Cookie1.2 Cookie的引出1.3 Cookie工作原理1.4 Cookie重要结论 2. Session2.1 认识Session2.2 Session的引出2.3 Session的工作原理 3. Cookie和Session的区别 1. Cookie 1.1 认识Cookie Cookie&#xff1a;是小型文本文件&#xff0…

python自动生成SQL语句自动化

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python自动生成SQL语句自动化 在数据处理和管理中&#xff0c;SQL&#xff08;Structured …

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

概述 OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力&#xff0c;包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口&#xff0c;实现对GPIO控制&#xff0c;达到LED闪烁的效果。其他的IOT外设控制&#xff0…

【python】python新闻文本数据统计和聚类 (源码+文本)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【UE5.1 C++】VS2022下载安装

目录 步骤 一、Visual Studio下载安装 二、Visual Studio Integration Tool插件安装 先看一下UE和VS的兼容性 &#xff08;虚幻5&#xff1a;为虚幻引擎C项目设置Visual Studio开发环境&#xff09; &#xff08;虚幻4&#xff1a;设置虚幻引擎的Visual Studio&#xff0…

生产数据采集系统

在数字化浪潮的推动下&#xff0c;生产数据采集系统已经成为企业提升生产效率、优化运营管理的关键工具。那么&#xff0c;什么是生产数据采集系统呢&#xff1f;简单来说&#xff0c;生产数据采集系统是指通过一系列技术手段&#xff0c;实时收集、处理和分析生产线上的各类数…

[负债学习]支线Python4.21

三的东西&#xff0c;一个是环境&#xff0c;一个是基础语法&#xff0c;第3个是代码的案例。 我们先从头开始讲一下计算机&#xff0c;它主要由4个部分组成cpu的中央处理器和一个储存和一个输出和出。而储存的话主要是由内存和外存而cpu&#xff0c;中央处理器全称叫做通用计…

vuex和pinia转态管理工具介绍

文章目录 一、介绍二、使用1、pinia使用2、Vuex使用 一、介绍 相同点&#xff1a; 都是Vue.js的状态管理工具 不同点&#xff1a; 区别PiniaVuex支持Vue2和Vue3都支持Vue3写法需要额外配置Mutation只有 state, getter 和 action&#xff0c;无Mutationaction异步、Mutation …

【学习】服务器解决:重新分配同样端口号后,连不上VScode

原来服务器分配的环境有问题&#xff0c;重新分配了一下。还是同样的端口号&#xff0c;Xshell和xftp能够连接上&#xff0c;但是VScode连接不上。 问题解决: 清除本地 SSH 缓存中与远程主机相关的条目可以通过编辑 known_hosts 文件来实现。这个文件包含了您曾经连接过的远程主…

1分钟带你学会Series显式索引和隐式索引

1.Series的索引 Series是Pandas库中的一种一维数据结构对象&#xff0c;与常规的一维数组相比&#xff0c;其最显著的特点在于拥有显式的索引结构。这种显式索引使得Series在数据处理和分析中更具灵活性和便利性。 显式索引指的是Series中每个元素除了值之外&#xff0c;还关…

sketchup{su}安装错误1402

错误如图 解决方法如下 打开autoremove&#xff0c;点击扩展&#xff0c;输入1402&#xff0c;点击搜索 等待修复成功既可尝试重新安装su 软件每周六选择其他方式登录免费使用

Python 高质量类编写指南

原文&#xff1a;https://www.youtube.com/watch?vlX9UQp2NwTk 代码&#xff1a;https://github.com/ArjanCodes/examples/tree/main/2023/classguide Python 高质量类编写指南 我们将通过一些方法增加类的可读性和易用性。 通过&#xff08;按照属性或行为&#xff09;拆分类…