当前位置: 首页 > news >正文

【机器人-基础知识】欧拉角、旋转矩阵和四元数

1. 欧拉角

在这里插入图片描述

1.1. 欧拉角的定义

欧拉角是一组三个角度,用于描述一个刚体在三维空间中的定向关系。具体来说,它们表示从一个固定参考坐标系到刚体坐标系的一系列旋转。常见的定义方式是将总体旋转分解为三个连续的简单旋转,每次旋转都绕着当前坐标系的某一固定轴进行。

例如,一种常用的欧拉角序列是 Z–Y–X(或称为航向、俯仰、滚转顺序),其含义如下:

  • Yaw 第一个旋转(航向/偏航):绕固定坐标系的 Z 轴旋转角度 ψ \psi ψ
  • Pitch 第二个旋转(俯仰):绕新坐标系的 Y 轴旋转角度 θ \theta θ
  • Roll 第三个旋转(滚转):绕再次更新后的 X 轴旋转角度 ϕ \phi ϕ

这种分解使得三维旋转问题转化为三个独立旋转角度的叠加。

1.2. 欧拉角的公式

以 Z–Y–X 顺序为例,刚体总旋转矩阵 R R R 可以写成三个旋转矩阵的乘积:

R = R x ( ϕ )    R y ( θ )    R z ( ψ ) R = R_x(\phi) \; R_y(\theta) \; R_z(\psi) R=Rx(ϕ)Ry(θ)Rz(ψ)

其中:

  • 绕 X 轴旋转的矩阵:

    R x ( ϕ ) = [ 1 0 0 0 cos ⁡ ϕ − sin ⁡ ϕ 0 sin ⁡ ϕ cos ⁡ ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)=1000cosϕsinϕ0sinϕcosϕ

  • 绕 Y 轴旋转的矩阵:

    R y ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)=cosθ0sinθ010sinθ0cosθ

  • 绕 Z 轴旋转的矩阵:

    R z ( ψ ) = [ cos ⁡ ψ − sin ⁡ ψ 0 sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)=cosψsinψ0sinψcosψ0001

将上述三个矩阵依次相乘,就可以得到描述刚体最终定向的旋转矩阵 R R R

1.3. 欧拉角的常见问题

在使用欧拉角描述旋转时,需要注意以下问题:

  1. 万向锁(Gimbal Lock)
    以常见的ZYX欧拉角为例,即首先绕全局z轴旋转,然后绕新的y轴旋转,最后绕新的x轴旋转。当第二次旋转(即绕y轴的旋转)旋转角(例如上例中的 θ \theta θ)达到 ± 9 0 ∘ \pm90^\circ ±90 时。
    第一次和第三次旋转将会围绕同一个轴。这意味着,在这些特殊的角度下,系统失去了一个自由度,因为两次旋转现在作用于相同的轴,不能独立地控制物体的方向。

  2. 多值性与奇异性
    欧拉角存在多值性,即不同的角度组合可能表示相同的旋转。此外,某些角度组合可能使反求公式退化,导致奇异性问题,增加了数值计算的复杂性。

2. 旋转矩阵

2.1. 旋转矩阵的定义

旋转矩阵是一种用于描述刚体或坐标系在欧几里得空间中旋转变换的矩阵。其主要特点包括:

  • 正交性:旋转矩阵 R R R 满足 R T R = I R^T R = I RTR=I,其中 R T R^T RT R R R 的转置, I I I 为单位矩阵。这一性质保证了向量的长度和旋转前后向量间的夹角不变。
  • 行列式为1:即 det ⁡ ( R ) = 1 \det(R) = 1 det(R)=1,这一性质表明旋转矩阵不含有镜像或反射分量。
  • 参数冗余性:在三维空间中,尽管旋转矩阵有 9 个元素,但由于正交性和行列式约束,其实际自由度仅为 3 个。

2.2. 常见旋转矩阵的公式

1. 二维旋转矩阵

在二维平面上,绕原点逆时针旋转角度 θ \theta θ 的旋转矩阵为:
R ( θ ) = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} R(θ)=[cosθsinθsinθcosθ]

2. 三维旋转矩阵

在三维空间中,常用的旋转矩阵包括绕各个坐标轴旋转的矩阵:

  • 绕 X 轴旋转角度 ϕ \phi ϕ 的矩阵

    R x ( ϕ ) = [ 1 0 0 0 cos ⁡ ϕ − sin ⁡ ϕ 0 sin ⁡ ϕ cos ⁡ ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)=1000cosϕsinϕ0sinϕcosϕ

  • 绕 Y 轴旋转角度 θ \theta θ 的矩阵

    R y ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)=cosθ0sinθ010sinθ0cosθ

  • 绕 Z 轴旋转角度 ψ \psi ψ 的矩阵

    R z ( ψ ) = [ cos ⁡ ψ − sin ⁡ ψ 0 sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)=cosψsinψ0sinψcosψ0001

2.3. 旋转矩阵的示例

1. 二维示例

设有一个二维向量 v = [ 1 0 ] \mathbf{v} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} v=[10

相关文章:

  • python爬虫碰到IP被封的情况,如何解决?
  • 【Rust并发编程深度解析:内存模型与异步运行时实现原理】
  • JavaScript API与WebRTC技术解析:EasyRTC嵌入式视频通话SDK的实现
  • vue3:密码加密解密实现
  • pdf合并工具
  • OpenGL(4)着色器
  • LearnOpenGL-笔记-其三
  • 文件跨国传输如何加速?UDP改造机制解析
  • vscode出现:No module named ‘requests‘ 问题的解决方法
  • 【AI】单台10卡4090 openEuler服务器离线部署kasm workspace 提供简单的GPU云服务 虚拟化桌面
  • 每天一篇《目标检测》文献(一)
  • Android Compose remember 详解
  • docker jar镜像打包
  • windows平台的ffmpeg编译使用
  • 国产化信创操作系统的电脑,能运行windows程序吗
  • 大三下找C++开发实习的感受分享
  • tomcat应用的作用以及安装,以及tomcat软件的开机自启动。
  • c语言笔记 堆内存管理
  • 【已解决】linux装了jdk,却无法使用java命令
  • 【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信
  • 【社论】人工智能,年轻的事业
  • 在岸、离岸人民币对美元汇率双双升破7.26关口
  • 我国将开展市场准入壁垒清理整治行动
  • 商务部:4月份以来的出口总体延续平稳增长态势
  • 上海质子重离子医院已收治8000例患者,基本覆盖国内常见恶性肿瘤
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀