欧拉角和旋转矩阵相互转换
目录
1.参考资料
2.变换矩阵/F/H的svd分解或者旋转矩阵、平移矩阵求解
3. 欧拉角和旋转矩阵可同样表示刚体在三维空间的旋转,下面分享这两者互相转换的方法和核心代码
1.参考资料
2.变换矩阵/F/H的svd分解或者旋转矩阵、平移矩阵求解
- 欧拉角转旋转矩阵
欧拉角通过将刚体绕过原点的轴(i,j,k)旋转θ,分解成三步,如下图(蓝色是起始坐标系,而红色的是旋转之后的坐标系) ,12种方法的其中一种分解示意图!
如果将每一个角度用旋转矩阵表示如下:
所以,容易得到,欧拉角转旋转矩阵如下:
- 旋转矩阵转欧拉角
将旋转矩阵表示如下: -
则可以如下表示欧拉角:
3. 欧拉角和旋转矩阵可同样表示刚体在三维空间的旋转,下面分享这两者互相转换的方法和核心代码
- 欧拉角转旋转矩阵
/**
欧拉角计算对应的旋转矩阵
**/
Mat eulerAnglesToRotationMatrix(Vec3f &theta)
{// 计算旋转矩阵的X分量Mat R_x = (Mat_<double>(3,3) <<1, 0, 0,0, cos(theta[0]), -sin(theta[0]),0, sin(theta[0]), cos(theta[0]));// 计算旋转矩阵的Y分量Mat R_y = (Mat_<double>(3,3) <<cos(theta[1]), 0, sin(theta[1]),0, 1, 0,-sin(theta[1]), 0, cos(theta[1]));// 计算旋转矩阵的Z分量Mat R_z = (Mat_<double>(3,3) <<cos(theta[2]), -sin(theta[2]), 0,sin(theta[2]), cos(theta[2]), 0,0, 0, 1);// 合并 Mat R = R_z * R_y * R_x;return R;
}
- 旋转矩阵转欧拉角
/*** 功能: 检查是否是旋转矩阵**/
bool isRotationMatrix(Mat &R)
{Mat Rt;transpose(R, Rt);Mat shouldBeIdentity = Rt * R;Mat I = Mat::eye(3,3, shouldBeIdentity.type());return norm(I, shouldBeIdentity) < 1e-6;
}/*** 功能: 通过给定的旋转矩阵计算对应的欧拉角**/
Vec3f rotationMatrixToEulerAngles(Mat &R)
{assert(isRotationMatrix(R));float sy = sqrt(R.at<double>(0,0) * R.at<double>(0,0) + R.at<double>(1,0) * R.at<double>(1,0) );bool singular = sy < 1e-6; // Iffloat x, y, z;if (!singular) {x = atan2(R.at<double>(2,1) , R.at<double>(2,2));y = atan2(-R.at<double>(2,0), sy);z = atan2(R.at<double>(1,0), R.at<double>(0,0));} else {x = atan2(-R.at<double>(1,2), R.at<double>(1,1));y = atan2(-R.at<double>(2,0), sy);z = 0;}return Vec3f(x, y, z);
}
程序运行结果展示:
参考
1. 欧拉角详解
2. 欧拉角
暂做记录,后续补充
欧拉角和旋转矩阵相互转换相关推荐
- 四元数,欧拉角,旋转矩阵相互转换
#include <TransForms3d/TransForms.h>/*---------------------------------------角度弧度转换----------- ...
- 卫星轨道推演计算相关知识点总结(含欧拉角、旋转矩阵、及各坐标系转化等)
来源:轨道机动算法的C++实现_shirro123的专栏-CSDN博客 卫星轨道推演计算相关基础知识点总结 一.卫星的运动特性 二.卫星的空间坐标系 ...
- 一文详解四元数、欧拉角、旋转矩阵、轴角如何相互转换
一文详解四元数.欧拉角.旋转矩阵.轴角如何相互转换 简介 欧拉角与旋转矩阵 欧拉角---->旋转矩阵 旋转矩阵---->欧拉角 四元数与旋转矩阵 四元数---->旋转矩阵 旋转矩阵- ...
- 【自动驾驶】欧拉角和旋转矩阵之间的转换
欧拉角和旋转矩阵之间的转换 在使用Eigen时,经常会遇到旋转矩阵,旋转向量,四元数,欧拉角之间的两两相互转换.这里最常见.最容易出错的是欧拉角和旋转矩阵之间的相互转换.下面就欧拉角和旋转矩阵之间的转 ...
- eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...
点击上方蓝字,关注本公众号,获得更多资源上一篇文章介绍了四元数.欧拉角.旋转矩阵.轴角如何相互转换,本篇文章介绍如何用eigen来实现. 旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x ...
- 欧拉角和旋转矩阵的学习心得
1)欧拉角正负: 如果是右手系,旋转轴正方向面对观察者时,逆时针方向的旋转是正.顺时针方向的旋转是负. 即使用右手的大拇指指向旋转轴正方向,其他4个手指在握拳过程中的指向便是正方向. 在使用时,要注意 ...
- 在matlab和python if中的旋转变换(四元数、欧拉角、旋转矩阵)等
在matlab和python tf中的旋转变换(四元数.欧拉角.旋转矩阵等) 目录 1. 基本的认识 2. 变换矩阵 3. 欧拉角 4. 四元数 5. matlab中相互转换 6. python tf ...
- 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)
矩阵的使用可参考系列博客:点击此处 原文链接:基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换. 也可以参考另一篇博客:eigen 中四元数.欧拉角.旋转矩阵.旋转向量. ...
- 欧拉角与旋转矩阵的转换关系
欧拉角因为其奇异性,虽然在优化和插值的不会使用,但是当我们对别人描述一个旋转的过程是怎么样的时候,欧拉角还是很有用的,比如,做无人机姿态控制的时候使用的就是欧拉角,但是搞明白欧拉角与旋转矩阵的转换确实 ...
最新文章
- 配置Haproxy增加日志记录功能
- Mac上安装hadoop
- 1249. 移除无效的括号
- GraphQL第一个例子
- 前端学习(2607):vue指令
- linux中创建目录树,如何在C++/Linux中创建目录树?
- Pandas数据排序——【按索引排序sort_index()方法、按值排序sort_value()方法】
- netty java开发文档_Netty简明教学文档
- pytorch以特征图的输入方式训练LSTM模型
- 新中大银色快车数据恢复
- java jvm dump文件_各种获取JVM DUMP的方法
- 换掉7z-zip默认的ico图标,自定义压缩文件图标更美观。
- 计算机断网后显示配置0%,电脑断网后自动报警提醒怎么设置
- Python爬取必应图片2
- 给移动硬盘装上LINUX全攻略,给移动硬盘装上LINUX全攻略
- Mininet-wifi安装和简单使用
- 利用连按 5 下 Shift 漏洞破解 win7 开机密码(原理以及实现)
- obs 推流编码在哪设置_直播软件OBS推流的设置方法
- 杰里混响调MIC增益和深度【篇】
- 打开SQL2000安装包没有弹出安装界面
热门文章
- linux vscode vim,VSCode Vim进阶操作
- 数据存储方式_寻找要操作数据的存储地址的过程称为寻址,几种寻址的方式分享...
- 卡片使用_APP必备的设计元素!卡片
- mysql查询重复名字的数据都查出来_mysql查出重复的所有数据
- jq 直接调用php文件_PHP的函数类别和变量命名
- linux firefox xvfb,自动化测试之linux+xvfb+selenium+firefox+python测试环境搭建与测试
- java中数组的含义_数组
- win2008怎么配置php,Win2008 PHP 配置环境搭建 教程
- 不停刷朋友圈的人_刷爆朋友圈的推拉门安装方式 90%的人从没见过
- Flume基础及Flume高质量博客合集