首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Matlab 六自由度机器人】关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题(附MATLAB代码辅助理解)

【Matlab 六自由度机器人】关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题(附MATLAB代码辅助理解)

作者头像
用户9613193
发布2026-06-16 20:25:55
发布2026-06-16 20:25:55
80
举报
【Matlab 六自由度机器人】关于旋转的参数化的相关问题

  • 往期回顾
  • 前言
  • 正文
    • 一、欧拉角(Euler-angle)表示法
      • 1. 定义
      • 2. 代码解析(含实例)
    • 二、姿态角(RPY)表示法
      • 1. 定义
      • 2. 代码解析(含实例)
    • 三、四元数(axis/angle)表示法(未完待续)
      • 1. 定义
      • 2. 代码解析(含实例)
  • 总结
  • 参考文献

往期回顾

【主线】

  1. 建立机器人模型
  2. 运动学正解
  3. 基于蒙特卡洛法(Monte Carlo Method)构建工作空间

【补充说明】

  1. 关于灵活工作空间与可达工作空间的理解
  2. 关于改进型D-H参数(modified Denavit-Hartenberg)的详细建立步骤

前言

在本文中,将推导三种方式来表达任意旋转,其中每种方式仅需三个独立变量:欧拉角表示法、姿态角表示法(滚动-俯仰-偏航)及四元数表示法(转轴/角度)。


以下是本篇文章正文内容,包含对欧拉角表示法、滚动-俯仰-偏航表示法及转轴/角度表示法定义的理解和相关代码的分步解析。

正文

一、欧拉角(Euler-angle)表示法

1. 定义

表示旋转矩阵的一种常用方法是使用欧拉角,其中有三个独立变量。考虑固定坐标系

o_0x_0y_0z_0

,以及旋转后的坐标系

o_1x_1y_1z_1

。 我们可以使用三个欧拉角(

\phi,\theta,\psi

)来表示坐标系

o_1x_1y_1z_1

相对于坐标系

o_0x_0y_0z_0

的姿态,它们通过下列三个连续旋转得到。首先,绕当前

z

轴旋转角度

\phi

。然后,绕当前

y

轴旋转角度

\theta

。最后,绕当前

z

轴旋转角度

\psi

注意!这里的旋转均是绕旋转后的坐标系来进行旋转 根据上述描述的旋转,列出以下旋转的对应矩阵。

R_{z,\phi}= \left[ \begin{matrix} cos\phi& -sin\phi & 0 \\ sin\phi & cos\phi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\
R_{y,\theta}= \left[ \begin{matrix} cos\theta & 0 & sin\theta \\ 0 & 1& 0\\ -sin\theta & 0& cos\theta \\ \end{matrix} \right] \\
R_{z,\psi}= \left[ \begin{matrix} cos\psi& -sin\psi & 0 \\ sin\psi & cos\psi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\

通过上述的矩阵按右乘的顺序来进行乘积,得到旋转变换后的旋转矩阵为:

R_{ZYZ}=R_{z,\phi}R_{y,\theta}R_{z,\psi}= \left[ \begin{matrix} cos\phi*cos\psi*cos\theta - sin\phi*sin\psi& - cos\psi*sin\phi - cos\phi*cos\theta*sin\psi& cos\phi*sin\theta \\ cos\phi*sin\psi + cos\psi*cos\theta*sin\phi& cos\phi*cos\psi - cos\theta*sin\phi*sin\psi& sin\phi*sin\theta \\ -cos\psi*sin\theta&sin\psi*sin\theta&cos\theta \\ \end{matrix} \right] \\

方程中的矩阵

R_{ZYZ}

被称为

ZYZ

欧拉角变换

2. 代码解析(含实例)

代码如下:

代码语言:javascript
复制
syms phi theta psi
R1 = rotz(phi)*roty(theta)*rotz(psi);

由于需要使用

trplot

函数来将旋转可视化,因此在这里设欧拉角

\phi\theta\psi

的角度均为

pi/6

R_0

为参考系矩阵,

R_1

R_0

为参考系矩阵,做

R_{z,\pi/6}R_{y,\pi/6}R_{z,\pi/6}

的旋转。

代码语言:javascript
复制
syms phi theta psi
R0 = rotz(0);
R1 = rotz(pi/6)*roty(pi/6)*rotz(pi/6);
trplot(R0,'color','r','frame','0')
hold on
trplot(R1,'color','b','frame','1')

得到结果如下:

Alt
Alt

二、姿态角(RPY)表示法

滚动(roll)-俯仰(pitch)-偏航(yaw)表示法

1. 定义

旋转矩阵

R

也可以被描述为按特定次序进行的一系列关于主坐标轴

x_0、y_0和z_0

轴旋转的产物。这些旋转决定了滚动(roll)、俯仰(pitch)、偏航(yaw) 角度,在这里我们将定义以下规则。

z_0

轴旋转的

\phi

角度的动作称为滚动(roll)

y_0

轴旋转的

\theta

角度的动作称为俯仰(pitch)

x_0

轴旋转的

\psi

角度的动作称为偏航(yaw))

我们指定旋转按照

x-y-z

的顺序进行,换言之,首先绕

x_0

轴旋转角度

\psi

,然后绕

y_0

轴旋转角度

\theta

。最后,绕

z_0

轴旋转角度

\phi

注意!这里的旋转均是绕固定坐标系

o_0x_0y_0z_0

来进行旋转 根据上述描述的旋转,列出以下旋转的对应矩阵。

R_{z,\phi}= \left[ \begin{matrix} cos\phi& -sin\phi & 0 \\ sin\phi & cos\phi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\
R_{y,\theta}= \left[ \begin{matrix} cos\theta & 0 & sin\theta \\ 0 & 1& 0\\ -sin\theta & 0& cos\theta \\ \end{matrix} \right] \\
R_{x,\psi}= \left[ \begin{matrix} 1& 0 & 0 \\ 0 & cos\psi & -sin\psi\\ 0 & sin\psi& cos\psi\\ \end{matrix} \right] \\

通过上述的矩阵按左乘的顺序来进行乘积,得到旋转变换后的旋转矩阵为:

R=R_{z,\phi}R_{y,\theta}R_{x,\psi}= \left[ \begin{matrix} cos\phi*cos\theta& cos\phi*sin\psi*sin\theta - cos\psi*sin\phi& sin\phi*sin\psi + cos\phi*cos\psi*sin\theta \\ cos\theta*sin\phi& cos\phi*cos\psi + sin\phi*sin\psi*sin\theta& cos\psi*sin\phi*sin\theta - cos\phi*sin\psi \\ -sin\theta&cos\theta*sin\psi&cos\psi*cos\theta \\ \end{matrix} \right] \\
2. 代码解析(含实例)

代码如下:

代码语言:javascript
复制
syms phi theta psi
R2 = rotz(phi)*roty(theta)*rotx(psi);

三、四元数(axis/angle)表示法(未完待续)

转轴/角度(axis/angle)表示法

1. 定义

旋转并不总是关于主坐标轴而进行的。我们通常感兴趣的是关于空间中某任意轴线的旋转,这不仅提供了一种描述旋转的简便方法,并且提供了对于旋转矩阵的另一种参数化方法。 令

k=[k_x,k_y,k_z]^{T}

表示坐标系

o_0x_0y_0z_0

内的一个单位向量,它定义了一个转轴,在此推导旋转矩阵

R_{k,\theta}

来表示关于次轴线的转角为

\theta

的旋转。

2. 代码解析(含实例)

在MATLAB中使用

quaternion

函数来实现坐标系绕任意轴线旋转。 代码如下: 参考Quaternion


总结

以上就是关于旋转的参数化(欧拉角、姿态角、四元数)的内容,本文详细介绍了如何理解欧拉角、姿态角、四元数,提供了代码辅助理解旋转的参数化的特性。

参考文献

  1. 旋转矩阵、欧拉角、四元数理论及其转换关系
  2. Rodrigues’ Rotation Formula
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【Matlab 六自由度机器人】关于旋转的参数化的相关问题
  • 往期回顾
  • 前言
  • 正文
    • 一、欧拉角(Euler-angle)表示法
      • 1. 定义
      • 2. 代码解析(含实例)
    • 二、姿态角(RPY)表示法
      • 1. 定义
      • 2. 代码解析(含实例)
    • 三、四元数(axis/angle)表示法(未完待续)
      • 1. 定义
      • 2. 代码解析(含实例)
  • 总结
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档