三维空间旋转(欧拉角、四元数、旋转矩阵)

  姿态角(欧拉角)  

  姿态角即RPY(roll, pitch,yaw)又叫欧拉角,是由三个角组成的。

  俯仰角(pitch)

  

  翻滚角(roll)

  

  偏航角(yaw)

  

  其中最直观的就是其绕刚体自身的X、Y、Z三个轴分别旋转的角度,这就是欧拉角(Euler Angle)表示方法。

  

  需要注意的是,欧拉角的表示方式里,yaw、pitch、roll的顺序对旋转的结果是有影响的。

  给定一组欧拉角角度值,比如yaw=45度,pitch=30度,roll=60度,按照yaw-pitch-roll的顺序旋转和按照yaw-roll-pitch的顺序旋转,最终刚体的朝向是不同的

  另外需要注意,在欧拉角中,三个旋转轴一般是随着刚体一起运动的。

  

  欧拉角的表示方式比较直观,但是有几个缺点:

  (1) 欧拉角的表示方式不唯一。给定某个起始朝向和目标朝向,即使给定yaw、pitch、roll的顺序,也可以通过不同的yaw/pitch/roll的角度组合来表示所需的旋转。比如,同样的yaw-pitch-roll顺序,(0,90,0)和(90,90,90)会将刚体转到相同的位置。这其实主要是由于万向锁(Gimbal Lock)引起的,关于万向锁的解释,有条件的同学看看Youtube的视频或许会比较直观。

  (2) 欧拉角的插值比较难。

  (3) 计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin, cos,计算量较大。

  方向余弦矩阵(DCM)和旋转矩阵(RM)  

  在计算坐标变换时,旋转更方便的表示形式是旋转矩阵(Rotation Matrix)

  三维空间的旋转矩阵可以表示成3x3的矩阵,将欧拉角转换为旋转矩阵的计算方式如下,

  假设欧拉角yaw、pitch、roll的角度为alpha, beta, gamma,则旋转矩阵可以计算如下:

   

  其中

  

  这里也可以看出,如果yaw、pitch、roll的顺序有改变,矩阵相乘的顺序需要作出相应改变,所得的旋转矩阵结果也会有所改变。

  而最主要的是万向节锁(Gimbal lock)的问题,详情见youtub上有很多演示视频(例如Gimbal Lock Explained in 30 Seconds)。

  这里文字解释一下,一个旋转万向节如下:

    

  最终间的旋转轴代表偏航角,第二层的旋转代表俯仰角,最外面的旋转轴代表翻滚角。

  万向节锁的问题是,当锁死其中一个自由度的时候,其中两个自由度会重叠,例如锁死俯仰和翻滚的轴的时候(即最外面的两层),翻滚和偏航角的旋转轴会重叠(即表示的是同一个自由度)。

  也就是说这个Gimble lock(万向锁)是由旋转顺序中的第二个旋转轴产生的,即XYZ旋转顺序,Y轴会产生万向锁。当我们知道有一个轴经常会旋转到90度时,那就不要让这个轴成为第二个旋转的轴。

  详情见(Gimbal Lock Explained in 30 Seconds,为youtub 需FQ),另一个视频可以详细讲解欧拉角和四元数(https://www.youtube.com/watch?v=Mm8tzzfy1Uw

(未完待续)

  

原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8135446.html

时间: 2024-10-16 13:19:19

三维空间旋转(欧拉角、四元数、旋转矩阵)的相关文章

eigen 中四元数、欧拉角、旋转矩阵、旋转向量

一.旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1.1 旋转向量转旋转矩阵 Eigen::Matrix3d rotation_matrix;rotation_matrix=rotation_vector.matrix(); Eigen::Matrix3d rotation_matrix;rotation_matrix=rotation_vector.

Unity复杂的旋转-欧拉角和四元数

一.欧拉角欧拉角最容易表示,用三个变量X,Y,Z可以直观的表示绕着某个轴的旋转角度. 在Unity里就是Transform组件的Rotation里的X Y Z三个变量代表了欧拉角 二.四元数四元数相比于欧拉角就比较复杂了,由四个变量组成(在Unity中称为X,Y,Z,W),但是这些变量的值不代表旋转角度,所以可能给你一个向量(0.7,0,0,0.7)你并不知道实际旋转的角度,当然四元数的详细解释需要数学方面的深入研究,有兴趣的可以自行查找有关资料 因为在Unity没有可视化界面可以调整四元数(因

定向和旋转向量四元数之间的关系

其实在前面的文章中我觉得应该给大家介绍一下.我们所讨论的姿态问题是几何中的定向问题, 在三维空间中我们如果需要知道一个刚体的具体方位,可以选定一个点这个点相对于刚体本身不会 动,但是这不足以了解运动的全貌,我们还需要一个旋转角度来确定. 以上的内容可以这样想象,在我们研究物理问题中常常采用质点的方法.比如在北京开往武汉的火车这个问题上,我们可以吧火车等效为质点,但是如果研究轮子的话,不仅需要位置的平移还需要角度的变化..额不知道大家理解没. 正是这个问题是惯导技术的基石我个人认为,在之后逐渐就有

[Leetcode] 旋转问题(旋转数组的查找,旋转list,旋转矩阵)

[1] Search in Rotated Sorted Array [2] Search in Rotated Sorted Array II [3] Find Minimum in Rotated Sorted Array [4] Find Minimum in Rotated Sorted Array II [5] Rotate Array [6] Rotate List [7] Rotate Image 一.

刚体在三维空间的旋转(关于旋转矩阵、DCM、旋转向量、四元数、欧拉角)

最近学习了一些关于三维空间旋转相关的知识,借此梳理一下备忘. 三维空间的旋转(3D Rotation)是一个很神奇的东东:如果对某个刚体在三维空间进行任意次的旋转,只要旋转中心保持不变,无论多少次的旋转都可以用绕三维空间中某一个轴的一次旋转来表示.表示三维空间的旋转有多种互相等价的方式,常见的有旋转矩阵.DCM.旋转向量.四元数.欧拉角等.本篇文章主要梳理一下这些表示方式及相互转换的方法. 1. 欧拉角(Euler Angle) 最直观的表示方式是绕刚体自身的X.Y.Z三个轴分别进行旋转某个角度

(转)三维旋转:旋转矩阵,欧拉角,四元数

如何描述三维空间中刚体的旋转,是个有趣的问题.具体地说,就是刚体上的任意一个点P(x, y, z)围绕过原点的轴(i, j, k)旋转θ,求旋转后的点P\'(x\', y\', z\'). 旋转矩阵 旋转矩阵乘以点P的齐次坐标,得到旋转后的点P',因此旋转矩阵可以描述旋转, ?????x′y′z′1?????=R??????xyz1?????[x′y′z′1]=R?[xyz1] 绕x,y,或z轴旋转θ的矩阵为: Rx(θ)=???1000cosθsinθ0?sinθcosθ???Rx(θ)=[1

旋转矩阵、欧拉角、四元数理论及其转换关系

博客转载自:http://blog.csdn.net/lql0716/article/details/72597719 1. 概述 旋转矩阵.欧拉角.四元数主要用于表示坐标系中的旋转关系,它们之间的转换关系可以减小一些算法的复杂度. 本文主要介绍了旋转矩阵.欧拉角.四元数的基本理论及其之间的转换关系. 2.原理 2.1 旋转矩阵 对于两个三维点 p1(x1,y1,z1),p2(x2,y2,z2),由点 p1 经过旋转矩阵 R 旋转到 p2,则有 注:旋转矩阵为正交矩阵RRT=E 任意旋转矩阵: 

欧拉角、四元数和矩阵的对比(转)

三维空间的旋转可以用欧拉角,旋转矩阵,轴-角,四元数,双四元数来表示,本文主要总结这些表示方法的优缺点. 一.  欧拉角(Euler-Angles) 1.1    介绍 欧拉角包括3个旋转,根据这3个旋转来指定一个刚体的朝向.这3个旋转分别绕x轴,y轴和z轴,分别称为Pitch,Yaw和Roll,如下图所示.欧拉角可以表示成z-x-z,x-y-x,z-y-z等形式,旋转的顺序影响结果. Pitch Yaw Roll 图1. 欧拉角的表示 欧拉角很重要的一个优点就是直观,容易理解. 欧拉角主要有下

四元数指数映射旋转参数化的实际应用(Practical Parameterization of Rotations Using the Exponential Map)

欢迎加入Bullet物理讨论QQ群:533030320 ,群内由计算机图形学.流体模拟动力学学术群中坐镇的大神管理组成. 四元数指数映射旋转参数化的实际应用 (Practical Parameterization of Rotations Using the Exponential Map) 哪吒三太子 2016/3/26 于上海卢湾 下面为本文使用术语表,表中所有词条大多直接采用英文术语,请各位读者自行伸缩去取,笔者在此不做所谓"直译". - DOF(degree-of-freedo