旋转矩阵、欧拉角

旋转矩阵、欧拉角

注:下面为学习空间机器人技术系列课程笔记,加上一些自己的整理,方便复习。

一、旋转矩阵的引出

下面坐标系0的基向量 ( x 0 , y 0 ) (x_{0},y_{0}) (x0y0)坐标系1的基向量 ( x 1 , y 1 ) (x_{1},y_{1}) (x1y1)
在这里插入图片描述
拓展到三维空间
在这里插入图片描述
以此类推,绕不同的轴的旋转矩阵如下:
在这里插入图片描述

二、坐标变换

在坐标系1下,向量p表示为:
p = u x 1 + v y 1 + w z 1 p=ux_{1}+vy_{1}+wz_{1} p=ux1+vy1+wz1
将其转换到坐标系0下,为p在坐标系0的基向量 ( x 0 , y 0 , z 0 ) (x_{0},y_{0},z_{0}) (x0y0z0)下的表示: p 0 p^{0} p0
在这里插入图片描述
具体推导过程如下,最终得到p在1坐标系下的表示 p 1 p^{1} p1,经过0到1的旋转矩阵 R 1 0 R_{1}^{0} R10或者称为1到0的坐标变换矩阵),得到p在0坐标下的表示 p 0 p^{0} p0
在这里插入图片描述

三、向量的旋转

同一坐标系下,向量的旋转。
注意下面假设的连体坐标系 o 1 o_{1} o1
在这里插入图片描述

四、旋转的复合

第一类情况:绕当前轴的旋转,也就是始终绕着转动之后的自身轴旋转,也称之为内旋
这种情况,连续右乘即可。
在这里插入图片描述

第二种情况:绕着固定轴的旋转,绕着不动的坐标系的轴旋转,也称之为外旋
这种情况,需要左乘旋转矩阵。推导过程涉及到下面提到的相似变换。
在这里插入图片描述

五、旋转矩阵的相似变换

下面的 ( R i 0 ) 0 (R_{i}^{0})^{0} (Ri0)0 是指, 0 0 0 i i i 的旋转矩阵 R i 0 R_{i}^{0} Ri0 0 0 0 中的表示。
同理, ( R i 0 ) 1 (R_{i}^{0})^{1} (Ri0)1 是指, 0 0 0 i i i 的旋转矩阵 R i 0 R_{i}^{0} Ri0 1 1 1 中的表示。
在这里插入图片描述
推导过程如下:
在这里插入图片描述
在这里插入图片描述
所以上面绕固定轴的旋转,推导过程如下:
在这里插入图片描述
在这里插入图片描述

六、齐次坐标变换

前面考虑的都是只有旋转的情况,当既有旋转,也有平动的情况了。
可以看做先旋转,然后在平动。
在这里插入图片描述
在这里插入图片描述
但是如果有连续平移旋转的情况下,这种带有加号的情况,不太简洁。所有采用齐次变换这种方式,把旋转和平移写到一个矩阵里面。这样连续变换,只需要连乘齐次变换矩阵就好了。
H 1 0 H_{1}^{0} H10为例, R R R是指 R 1 0 R_{1}^{0} R10 d d d是指 d 1 0 d_{1}^{0} d10(1在坐标系0下的向量)
在这里插入图片描述
在这里插入图片描述

七、欧拉角以及rpy

围绕坐标轴旋转的先后次序不同,得到的最终欧拉角姿态就不同,所以根据坐标系绕坐标轴旋转顺序的不同会有12种欧拉角。

  • 常规欧拉角 (Z-X-Z, X-Y-X, Y-Z-Y, Z-Y-Z, X-Z-X, Y-X-Y)
  • 泰特 - 布赖恩角 (X-Y-Z, Y-Z-X, Z-X-Y, X-Z-Y, Z-Y-X, Y-X-Z)

在机器人中常用的 r o l l ( x ) , p i t c h ( y ) , y a w ( z ) roll(x) , pitch(y), yaw(z) roll(x),pitch(y),yaw(z),是指3-2-1转序的欧拉角。
对应内旋,绕自身坐标系,从左到右:
→ R z ψ R y θ R x φ \underset{R_{z\psi }R_{y\theta }R_{x\varphi }}{\rightarrow} RzψRyθRxφ
和下面的外旋等价,绕固定坐标系,从右到左:
← R z ψ R y θ R x φ \underset{R_{z\psi }R_{y\theta }R_{x\varphi }}{\leftarrow} RzψRyθRxφ

关于不同转序的欧拉角(内旋),对应的旋转矩阵为:
在这里插入图片描述

八、欧拉角的万向锁(Gimbal Lock)

欧拉角看起来比较直观,比较适合人机交互。但是也有一些问题:

  1. 需要注意旋转次序,内旋还是外旋。这个不加注意,容易出错。
  2. 三个量的欧拉角,表示三维旋转,比较紧凑,但是会具有奇异性,比如说 p i t c h pitch pitch 角为 ± π / 2 ±π/2 ±π/2 时,出现万向锁。

虽然有万向锁问题,但是一些平面运动,比如车辆,是不会出现 p i t c h pitch pitch 角为 ± π / 2 ±π/2 ±π/2 的情况的,为了方便交互,往往也会采用。

万向锁的几何解释

首先,我们沿着 𝑥 轴旋转任意的度数:
在这里插入图片描述
接下来,我们沿 𝑦 轴旋转 𝜋/2 弧度:
在这里插入图片描述
注意,经过这一次的变换之后,我们将 𝑧 轴变换到原来 𝑥 轴方向,而 𝑥轴变到原来 −𝑧 的方向。
这个变换执行完毕后,我们仅仅只剩下一个 𝑧 轴的旋转矩阵了。
然而,当前的 𝑧 轴与原来的 𝑥 轴重合,也就是说,最后 𝑧 轴的旋转与 𝑥 轴的旋转其实操纵的是同一个轴。
三次旋转变换仅仅覆盖了两个轴的旋转,一个自由度就这样丢失了,这也就导致了 Gimbal Lock 的现象

万向锁的数学解释

这里采用3-2-1转序,内旋的欧拉角来解释。
绕着各个轴旋转的旋转矩阵,分别如下:
在这里插入图片描述
当绕着 y y y轴,旋转 π / 2 π/2 π/2时,组合出矩阵如下:
在这里插入图片描述
将原本绕着三个轴旋转,所组成的变换化,简成了绕两个轴的变化。
即便我们分别对 𝑧-𝑦-𝑥 三轴进行了旋转,实际上这个矩阵仅仅旋转了 𝑥-𝑦 两轴,它并没有对(初始的)𝑧 轴进行变换。也就是无论 𝑥轴与 𝑧 轴的旋转角是多少,变换都会丧失一个自由度。

九、对应的eigen代码

上面数学公式,所对应的eigen代码如下,根据实际使用需要可以方便查询。

#include <Eigen/Core>
#include <Eigen/Geometry>  // Eigen/Geometry 模块提供了各种旋转和平移的表示
using namespace std;
using namespace Eigen;// 1、旋转矩阵相关// 3D 旋转矩阵直接使用 Matrix3d 或 Matrix3f, Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>Matrix3d rotation_matrix = Matrix3d::Identity();// 旋转向量使用轴角 AngleAxis, 它底层不直接是Matrix,但运算可以当作矩阵(因为重载了运算符)AngleAxisd rotation_vector(M_PI / 4, Vector3d(0, 0, 1));     //沿 Z 轴旋转 45 度cout << "rotation matrix =\n" << rotation_vector.matrix() << endl;   //轴角,用matrix()转换成矩阵rotation_matrix = rotation_vector.toRotationMatrix(); // 也可以直接赋值// 2、坐标变换相关// 用 AngleAxis 可以进行坐标变换Vector3d v(1, 0, 0);Vector3d v_rotated = rotation_vector * v;cout << "(1,0,0) after rotation (by angle axis) = " << v_rotated.transpose() << endl;// 或者用旋转矩阵v_rotated = rotation_matrix * v;cout << "(1,0,0) after rotation (by matrix) = " << v_rotated.transpose() << endl;//6、齐次变换(欧氏变换矩阵)使用 Eigen::IsometryIsometry3d T = Isometry3d::Identity();  // 虽然称为3d,实质上是4*4的矩阵T.rotate(rotation_vector);              // 按照rotation_vector进行旋转T.pretranslate(Vector3d(1, 3, 4));      // 把平移向量设成(1,3,4)cout << "Transform matrix = \n" << T.matrix() << endl;// 用变换矩阵进行坐标变换Vector3d v_transformed = T * v;         // 相当于R*v+tcout << "v tranformed = " << v_transformed.transpose() << endl;//7、 欧拉角: 可以将旋转矩阵直接转换成欧拉角Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0); // ZYX顺序,即yaw-pitch-roll顺序cout << "yaw pitch roll = " << euler_angles.transpose() << endl;// 四元数// 可以直接把AngleAxis赋值给四元数,反之亦然Quaterniond q = Quaterniond(rotation_vector);cout << "quaternion from rotation vector = " << q.coeffs().transpose()<< endl;   // 请注意coeffs的顺序是(x,y,z,w),w为实部,前三者为虚部// 也可以把旋转矩阵赋给它q = Quaterniond(rotation_matrix);cout << "quaternion from rotation matrix = " << q.coeffs().transpose() << endl;// 使用四元数旋转一个向量,使用重载的乘法即可v_rotated = q * v; // 注意数学上是qvq^{-1}cout << "(1,0,0) after rotation = " << v_rotated.transpose() << endl;

参考资料

空间机器人技术
Bonus: Gimbal Lock — Krasjet
slam14讲所附代码

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

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

相关文章

对于双欧拉角(正反欧拉角)的一些理解和思考

文章目录 一、正反欧拉角定义二、相关文献阐述三、对正反欧拉角的思考四、参考代码五、参考文献 最近看到有人讨论“双欧拉角”或者“正反欧拉角”的问题&#xff0c;因为自己之前没听说过这个概念&#xff0c;为了避免无知&#xff0c;因此找了一些文献进行学习和理解。不过基…

matlab 欧拉角 方向余弦,旋转矩阵、欧拉角之间转换

学习过程中涉及欧拉角和旋转矩阵的转换,索性整理学习一下欧拉角四元数和旋转矩阵的概念以及matlab中的互相转换 本文摘自各大课本,博客,自己学习整理使用,侵删 MATLAB矩阵乘法从左到右依次相乘 用R表示旋转矩阵。 yaw(偏航) pitch(俯仰) roll(横滚)分别表示Z Y X轴的转…

欧拉角旋转

欧拉角是一种表示三维旋转的描述方法&#xff0c;欧拉角的计算需要借助旋转矩阵&#xff0c;关于旋转矩阵的知识可先参考之前的文章&#xff1a;3维旋转矩阵推导与助记 欧拉角旋转 静态定义 对于在三维空间里的一个参考系&#xff0c;任何坐标系的取向&#xff0c;都可以用三…

欧拉角的理解

1 欧拉角概念 百度百科&#xff1a;欧拉角&#xff0c;用来确定定点转动刚体位置的3个一组独立角参量&#xff0c;欧拉角由章动角θ、旋进角&#xff08;即进动角&#xff09;ψ和自转角Φ组成。欧拉角为欧拉首先提出而得名。维基百科&#xff1a;Euler angles&#xff0c;莱昂…

四元数转欧拉角

四元数转欧拉角_在线测试工具 在线测试C程序工具 #include <stdio.h> #include <cmath>//四元数 struct Quaternion {double w, x, y, z; };//欧拉角 struct EulerAngles {double roll, pitch, yaw; };EulerAngles ToEulerAngles(Quaternion q) {EulerAngles angl…

详解 欧拉角与四元数

一、欧拉角 1.1 静态的定义 对于在三维空间里的一个参考系&#xff0c;任何坐标系的取向&#xff0c;都可以用三个欧拉角来表现。参考系又称为实验室参考系&#xff0c;是静止不动的。而坐标系则固定于刚体&#xff0c;随着刚体的旋转而旋转。 如图所示。设定xyz-轴为参考系…

四元数与欧拉角的转换

前言 一般情况下&#xff0c;每个领域都有自己默认是欧拉角定义。经典力学使用zxz&#xff0c;航空航天使用zyx/zxy。本文以无人机为对象讲解&#xff0c;使用zyx/zxy旋转顺序。为什么不同专业选用的欧拉角不同呢&#xff1f;一个是传统&#xff0c;另一重要的原因是不同的转序…

欧拉角转换四元数

欧拉角绕轴有x、y、z三个轴&#xff0c;旋转有不同的顺序。确定了不同的欧拉角矩阵。 针对绕轴的不同&#xff0c;欧拉角转换为四元数也不同。 绕x轴旋转 ϕ \phi ϕ角 四元数为 [ ( s i n ϕ 2 , 0 , 0 ) , c o s ( ϕ 2 ) ] T [(sin\frac{\phi}{2},0,0),cos(\frac{\phi}{…

欧拉角

欧拉角&#xff08;Euler Angles&#xff09;用来描述坐标轴的旋转。 坐标轴 原始坐标轴记为 x − y − z x-y-z x−y−z&#xff0c;旋转后坐标轴记为 X − Y − Z X-Y-Z X−Y−Z&#xff0c;坐标轴原点记为 O O O。 N ⃗ \vec{N} N 轴为 X Y XY XY与 x y xy xy两平面的交线&…

欧拉角及相关概念

欧拉角定义 欧拉角表示的是刚体的姿态变换。空间中的任意一点都可以用该点到对应坐标轴的垂直距离组成的三维向量描述&#xff0c;同理对某个物体的姿态&#xff0c;也可以用三个角度表示&#xff0c;三个角度分别为围绕对应坐标轴&#xff08;x,y,z&#xff09;旋转的…

欧拉角的概念理解和欧拉角旋转矩阵推导

欧拉角用来计算空间中刚体的旋转位置&#xff0c;目的是改变刚体的朝向. 具体来说,空间中有一个点p和一根轴k&#xff0c;点p绕轴k旋转θ角度到p,求p的坐标.这就是欧拉角要解决的问题. 只不过,欧拉角将1个点绕1根轴旋转1个角"转化为"1个点绕3个轴连续旋转3个角&quo…

欧拉角(Euler angles)

前言&#xff1a;本人也就英语4级水平&#xff0c;由于本篇中存在大量学术词汇&#xff0c;翻译时必然会有不当之处&#xff0c;原文可以在下面的链接中找到&#xff0c;具体意义各位可以自行斟酌 标红的部分是已发现存疑的翻译&#xff0c;也请各位指正。 维基百科-欧拉角 欧…

欧拉角(易理解)

欧拉角是什么 欧拉角是用来 唯一的 确定定点转动刚体位置的 三个一组的 独立角参量。 由章动量θ、旋进角&#xff08;即进动角&#xff09;ψ和自转角φ组成&#xff0c;为欧拉首先提出而得名。 通俗来讲的话有&#xff1a; eg&#xff1a;你去问路得到了两种回答 1 往东经…

欧拉角,轴角,四元数与旋转矩阵详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、欧拉角 1、静态定义 2、欧拉角的表示 3、欧拉角表示的优缺点 4、欧拉角的万向节死锁&#xff08;静态不存在万向锁的问…

三星SAMSUNG CLP-320N 驱动

三星SAMSUNG CLP-320N 驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有需…

三星Samsung ML-3470D 打印机驱动

三星Samsung ML-3470D 打印机驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统…

三星Samsung ML-2950ND 驱动

三星Samsung ML-2950ND 驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有需…

救砖用三星i9300官方4.1.2固件刷机包下载港版和国行版 手机天堂-软件世界 | 手机天堂-软件世界...

说明&#xff1a;这些固件包是官方的4.1.2版本的固件线刷包&#xff0c;都是五件套系列&#xff0c;如果有需要五件套系列的可以下载下来备用了&#xff0c;包内有详细的刷机教程和root教程&#xff0c;下载下来解压出来&#xff0c;然后采用odin工具刷入即可。 一&#xff1a…

三星 linux 电视软件下载中心,三星 SF-565P 多功能一体机驱动下载(ver.1.0.156) 版For Linux...

三星 SF-565P 多功能一体机驱动下载(ver.1.0.156) 版For Linux (2012-07-11 16:09:05) 标签&#xff1a; 12.04 ubuntu 三星 打印机 驱动 it 这是一篇之前收藏的文章&#xff0c;是关于安装三星打印机驱动程序的问题&#xff0c;有使用三星打印机的可以参考一下 安装三星 SF-56…

三星Samsung CLP-325W 驱动

三星Samsung CLP-325W 驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有需…