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


一、欧拉角

对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角(x,y,z)来表现。对于夹角的顺序和标记,夹角的两个轴的指定,并没有任何常规规定。所以每当用到欧拉角时,我们必须明确表示出夹角的顺序,指定其参考轴。
首先绕z轴转动α角,然后是绕X’轴转动β角,最后是绕Z’轴转动γ角,这是zxz顺规(先绕z轴,再绕x轴再绕z‘轴)的欧拉角表示方法。(除了zxz顺规外还有其他的规定方法,如xyx,zyz。)
欧拉角包括3个旋转,根据这3个旋转来指定一个刚体的朝向。这3个旋转分别绕x轴,y轴和z轴,分别称为 Pitch,Yaw 和 Roll。

优点:

  • 由三个角度组成,直观易懂
  • 可以进行大于180度的旋转

缺点:

  • 欧拉角是不可传递的,旋转的顺序影响旋转的结果,不同的应用又可能使用不同的旋转顺序,旋转顺序无法统一
  • 3个旋转的角度可以不受限制,即取值范围是(-inf,inf)
  • 存在万向节死锁问题

二、四元数

既然欧拉角是多次旋转后才能得到,那么能否一步到位,只旋转一次呢?--------> 四元数
对于一个物体的旋转,我们只需要知道四个值:一个旋转的向量 + 一个旋转的角度。而四元数也正是这样的设计:
q=(x,y,z,w)。其中x,y,z 代表的是向量的三维坐标,w代表的是角度。四元数本质上是一个超复数:q=xi+yj+zk+w。
如:
一个向量:v1,要让它绕 v2 旋转θ度(顺时针转动),那么有p = (v1, 0); q = ( v2 * sin(θ/2) , cos(θ/2) ),旋转后的四元数为(得到的四元数实部为0,虚部为新的坐标):在这里插入图片描述优点:

  • 存储空间小,计算效率高
  • 不存在万向节锁问题

缺点:

  • 数字表示不直观
  • 单个四元数不能表示在任何方向上超过180度的旋转

三、旋转矩阵

假设绕XYZ三个轴旋转的角度分别为 α ,β ,γ ,则三次旋转的旋转矩阵计算方法如下:

在这里插入图片描述若按Z-Y-X旋转顺序(指先绕自身轴Z,再绕自身轴Y,最后绕自身轴X),则旋转矩阵为:

在这里插入图片描述

四、Python下欧拉角、四元数和旋转矩阵的相互转换

主要依赖于scipy库下的Rotation包

from scipy.spatial.transform import Rotation as R

具体代码如下:

from scipy.spatial.transform import Rotation as R

def quaternion2euler(quaternion): #四元数转欧拉角
        r = R.from_quat(quaternion)
        euler = r.as_euler('xyz', degrees=True)
        return euler

def euler2quaternion(euler):   #欧拉角转四元数
        r = R.from_euler('xyz', euler, degrees=True)
        quaternion = r.as_quat()
        return quaternion

def euler2rot(euler):   #欧拉角转旋矩阵
        r = R.from_euler('xyz', euler, degrees=True)
        rotation_matrix = r.as_matrix()
       return rotation_matrix

def isRotationMatrix(R):  #判断是否为旋转矩阵
        Rt = np.transpose(R)
        shouldBeIdentity = np.dot(Rt, R)
        I = np.identity(3, dtype=R.dtype)
        n = np.linalg.norm(I - shouldBeIdentity)
        return n < 1e-6

def rot2quaternion(rot):   #旋转矩阵转四元数
        rot = rot[:3,:3]
        quat = R.from_matrix(rot).as_quat()
        return quat

def quaternion2rot(quat):    #四元数转旋转矩阵
        rot  = R.from_quat(quat).as_matrix()
        return rot

总结

概念介绍主要内容摘自欧拉角,轴角,四元数与旋转矩阵详解

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 欧拉角四元数旋转矩阵和轴角都是表示三维旋转的不同方式。 欧拉角是由三个轴角组成,按照顺序分别表示绕x轴旋转的角度、绕y轴旋转的角度、绕z轴旋转的角度。 四元数是由四个实数组成,表示旋转的方向和角度。 旋转矩阵是由3*3的实数组成的矩阵,表示旋转的线性变换。 轴角就是由一个单位向量和一个角度组成,表示绕着该单位向量旋转角度的意思。 它们之间可以相互转换。具体方法需要根据需要选择相应的公式进行转换. ### 回答2: 欧拉角四元数旋转矩阵和轴角是用于表示物体在三维空间中旋转的常见方法。它们可以相互之间进行转换。 首先,欧拉角是使用三个旋转角度来描述物体的旋转。通常使用的欧拉角包括俯仰角(pitch angle)、偏航角(yaw angle)和滚转角(roll angle)。欧拉角的转换通常涉及将欧拉角转换为旋转矩阵四元数,并且转换顺序也很重要。 其次,四元数是一种用于表示旋转的数学工具,可以使用具有四个实数部分的向量进行表示。四元数的转换通常涉及将四元数转换为旋转矩阵欧拉角,或者将旋转矩阵欧拉角转换为四元数旋转矩阵是一个3x3矩阵,用于表示物体的旋转。它是通过将欧拉角四元数转换为矩阵来实现的,也可以将矩阵转换为欧拉角四元数。 轴角是用于表示旋转的方法之一。它由一个向量和一个表示旋转角度的标量组成。轴角可以通过将轴角转换为旋转矩阵来实现,也可以通过将旋转矩阵转换为轴角来实现。使用轴角进行旋转时,常用的转轴包括x轴、y轴和z轴。 总结起来,欧拉角四元数旋转矩阵和轴角可以相互转换来表示物体的旋转。这些转换过程在计算机图形学、机器人学和游戏开发等领域经常被使用。理解它们之间的转换关系可以帮助我们更好地理解和应用旋转的概念。 ### 回答3: 欧拉角四元数旋转矩阵、轴角都是用于描述物体在三维空间中的旋转变换的方法,它们之间可以相互转换。 欧拉角是指通过绕着三个坐标轴的旋转来实现的旋转变换。通常使用三个连续的旋转角度来表示,在航空航天领域经常使用俯仰角、偏航角和滚转角来描述。但欧拉角存在万向锁问题,即在某些情况下会导致旋转变换不唯一。 四元数是一种四维复数,可以用一个实部和三个虚部来表示。它们可以直接表示旋转变换,并且不存在万向锁问题。通过四元数的乘法运算可以实现旋转变换的组合。同时,由于四元数是一个四维向量,所以它们的存储空间比旋转矩阵小。 旋转矩阵是一个3x3的矩阵,用于表示旋转变换。在旋转矩阵中,每一列表示一个旋转后的坐标轴方向。旋转矩阵可以通过将三个坐标轴绕着相应的角度进行旋转得到。但旋转矩阵存在正交性约束,即必须是正交矩阵,并且行列式为1,不满足时需要进行正则化处理。 轴角表示旋转轴和旋转角度的方法。它将旋转变换转化为绕着一个轴旋转一定角度的方式来描述。轴角与旋转矩阵之间的转换比较直观,可以通过旋转矩阵的特征向量和特征值得到旋转轴和旋转角度。但轴角存在方向的不唯一性,即旋转轴可以有两个相反的方向与同一个旋转变换对应。 以上是欧拉角四元数旋转矩阵、轴角之间的转换方法及特点的简介。它们在三维空间中描述旋转变换时各有优劣,可以根据具体需求选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值