IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Matlab 六自由度机器人】关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题 -> 正文阅读

[数据结构与算法]【Matlab 六自由度机器人】关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题

往期回顾

【主线】

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

【补充说明】

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

前言

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


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

正文

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

1. 定义

表示旋转矩阵的一种常用方法是使用欧拉角,其中有三个独立变量。考虑固定坐标系 o 0 x 0 y 0 z 0 o_0x_0y_0z_0 o0?x0?y0?z0?,以及旋转后的坐标系 o 1 x 1 y 1 z 1 o_1x_1y_1z_1 o1?x1?y1?z1?
我们可以使用三个欧拉角( ? , θ , ψ \phi,\theta,\psi ?,θ,ψ)来表示坐标系 o 1 x 1 y 1 z 1 o_1x_1y_1z_1 o1?x1?y1?z1?相对于坐标系 o 0 x 0 y 0 z 0 o_0x_0y_0z_0 o0?x0?y0?z0?的姿态,它们通过下列三个连续旋转得到。首先,绕当前 z z z轴旋转角度 ? \phi ?。然后,绕当前 y y y轴旋转角度 θ \theta θ。最后,绕当前 z z z轴旋转角度 ψ \psi ψ
注意!这里的旋转均是绕旋转后的坐标系来进行旋转
根据上述描述的旋转,列出以下旋转的对应矩阵。
R z , ? = [ c o s ? ? s i n ? 0 s i n ? c o s ? 0 0 0 1 ] R_{z,\phi}= \left[ \begin{matrix} cos\phi& -sin\phi & 0 \\ sin\phi & cos\phi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\ Rz,??=???cos?sin?0??sin?cos?0?001???? R y , θ = [ c o s θ 0 s i n θ 0 1 0 ? s i n θ 0 c o s θ ] R_{y,\theta}= \left[ \begin{matrix} cos\theta & 0 & sin\theta \\ 0 & 1& 0\\ -sin\theta & 0& cos\theta \\ \end{matrix} \right] \\ Ry,θ?=???cosθ0?sinθ?010?sinθ0cosθ???? R z , ψ = [ c o s ψ ? s i n ψ 0 s i n ψ c o s ψ 0 0 0 1 ] R_{z,\psi}= \left[ \begin{matrix} cos\psi& -sin\psi & 0 \\ sin\psi & cos\psi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\ Rz,ψ?=???cosψsinψ0??sinψcosψ0?001????通过上述的矩阵按右乘的顺序来进行乘积,得到旋转变换后的旋转矩阵为: R Z Y Z = R z , ? R y , θ R z , ψ = [ c o s ? ? c o s ψ ? c o s θ ? s i n ? ? s i n ψ ? c o s ψ ? s i n ? ? c o s ? ? c o s θ ? s i n ψ c o s ? ? s i n θ c o s ? ? s i n ψ + c o s ψ ? c o s θ ? s i n ? c o s ? ? c o s ψ ? c o s θ ? s i n ? ? s i n ψ s i n ? ? s i n θ ? c o s ψ ? s i n θ s i n ψ ? s i n θ c o s θ ] 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] \\ RZYZ?=Rz,??Ry,θ?Rz,ψ?=???cos??cosψ?cosθ?sin??sinψcos??sinψ+cosψ?cosθ?sin??cosψ?sinθ??cosψ?sin??cos??cosθ?sinψcos??cosψ?cosθ?sin??sinψsinψ?sinθ?cos??sinθsin??sinθcosθ????
方程中的矩阵 R Z Y Z R_{ZYZ} RZYZ?被称为 Z Y Z ZYZ ZYZ欧拉角变换

2. 代码解析(含实例)

代码如下:

syms phi theta psi
R1 = rotz(phi)*roty(theta)*rotz(psi);

由于需要使用 t r p l o t trplot trplot 函数来将旋转可视化,因此在这里设欧拉角 ? θ ψ \phi\theta\psi ?θψ的角度均为 p i / 6 pi/6 pi/6
R 0 R_0 R0?为参考系矩阵, R 1 R_1 R1? R 0 R_0 R0?为参考系矩阵,做 R z , π / 6 R y , π / 6 R z , π / 6 R_{z,\pi/6}R_{y,\pi/6}R_{z,\pi/6} Rz,π/6?Ry,π/6?Rz,π/6?的旋转。

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

二、姿态角(RPY)表示法

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

1. 定义

旋转矩阵 R R R也可以被描述为按特定次序进行的一系列关于主坐标轴 x 0 、 y 0 和 z 0 x_0、y_0和z_0 x0?y0?z0?轴旋转的产物。这些旋转决定了滚动(roll)、俯仰(pitch)、偏航(yaw) 角度,在这里我们将定义以下规则。

  • z 0 z_0 z0? 轴旋转的 ? \phi ?角度的动作称为滚动(roll)
  • y 0 y_0 y0? 轴旋转的 θ \theta θ角度的动作称为俯仰(pitch)
  • x 0 x_0 x0? 轴旋转的 ψ \psi ψ角度的动作称为偏航(yaw))

我们指定旋转按照 x ? y ? z x-y-z x?y?z的顺序进行,换言之,首先绕 x 0 x_0 x0?轴旋转角度 ψ \psi ψ,然后绕 y 0 y_0 y0? 轴旋转角度 θ \theta θ。最后,绕 z 0 z_0 z0? 轴旋转角度 ? \phi ?
注意!这里的旋转均是绕固定坐标系 o 0 x 0 y 0 z 0 o_0x_0y_0z_0 o0?x0?y0?z0?来进行旋转
根据上述描述的旋转,列出以下旋转的对应矩阵。
R z , ? = [ c o s ? ? s i n ? 0 s i n ? c o s ? 0 0 0 1 ] R_{z,\phi}= \left[ \begin{matrix} cos\phi& -sin\phi & 0 \\ sin\phi & cos\phi & 0\\ 0 & 0& 1\\ \end{matrix} \right] \\ Rz,??=???cos?sin?0??sin?cos?0?001???? R y , θ = [ c o s θ 0 s i n θ 0 1 0 ? s i n θ 0 c o s θ ] R_{y,\theta}= \left[ \begin{matrix} cos\theta & 0 & sin\theta \\ 0 & 1& 0\\ -sin\theta & 0& cos\theta \\ \end{matrix} \right] \\ Ry,θ?=???cosθ0?sinθ?010?sinθ0cosθ???? R x , ψ = [ 1 0 0 0 c o s ψ ? s i n ψ 0 s i n ψ c o s ψ ] R_{x,\psi}= \left[ \begin{matrix} 1& 0 & 0 \\ 0 & cos\psi & -sin\psi\\ 0 & sin\psi& cos\psi\\ \end{matrix} \right] \\ Rx,ψ?=???100?0cosψsinψ?0?sinψcosψ????通过上述的矩阵按左乘的顺序来进行乘积,得到旋转变换后的旋转矩阵为: R = R z , ? R y , θ R x , ψ = [ c o s ? ? c o s θ c o s ? ? s i n ψ ? s i n θ ? c o s ψ ? s i n ? s i n ? ? s i n ψ + c o s ? ? c o s ψ ? s i n θ c o s θ ? s i n ? c o s ? ? c o s ψ + s i n ? ? s i n ψ ? s i n θ c o s ψ ? s i n ? ? s i n θ ? c o s ? ? s i n ψ ? s i n θ c o s θ ? s i n ψ c o s ψ ? c o s θ ] 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] \\ R=Rz,??Ry,θ?Rx,ψ?=???cos??cosθcosθ?sin??sinθ?cos??sinψ?sinθ?cosψ?sin?cos??cosψ+sin??sinψ?sinθcosθ?sinψ?sin??sinψ+cos??cosψ?sinθcosψ?sin??sinθ?cos??sinψcosψ?cosθ????

2. 代码解析(含实例)

代码如下:

syms phi theta psi
R2 = rotz(phi)*roty(theta)*rotx(psi);

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

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

1. 定义

旋转并不总是关于主坐标轴而进行的。我们通常感兴趣的是关于空间中某任意轴线的旋转,这不仅提供了一种描述旋转的简便方法,并且提供了对于旋转矩阵的另一种参数化方法。
k = [ k x , k y , k z ] T k=[k_x,k_y,k_z]^{T} k=[kx?ky?kz?]T表示坐标系 o 0 x 0 y 0 z 0 o_0x_0y_0z_0 o0?x0?y0?z0?内的一个单位向量,它定义了一个转轴,在此推导旋转矩阵 R k , θ R_{k,\theta} Rk,θ?来表示关于次轴线的转角为 θ \theta θ的旋转。

2. 代码解析(含实例)

在MATLAB中使用 q u a t e r n i o n quaternion quaternion 函数来实现坐标系绕任意轴线旋转。
代码如下:
参考Quaternion


总结

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

参考文献

  1. 旋转矩阵、欧拉角、四元数理论及其转换关系
  2. Rodrigues’ Rotation Formula
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:36:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:53:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码