【Matlab 六自由度机器人】关于旋转的参数化的相关问题
- 往期回顾
- 前言
- 正文
- 一、欧拉角(Euler-angle)表示法
- 二、姿态角(RPY)表示法
- 三、四元数(axis/angle)表示法(未完待续)
- 总结
- 参考文献
往期回顾
【主线】
- 建立机器人模型
- 运动学正解
- 基于蒙特卡洛法(Monte Carlo Method)构建工作空间
【补充说明】
- 关于灵活工作空间与可达工作空间的理解
- 关于改进型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. 代码解析(含实例)
代码如下:
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}的旋转。
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')
得到结果如下:
二、姿态角(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. 代码解析(含实例)
代码如下:
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
总结
以上就是关于旋转的参数化(欧拉角、姿态角、四元数)的内容,本文详细介绍了如何理解欧拉角、姿态角、四元数,提供了代码辅助理解旋转的参数化的特性。
参考文献
- 旋转矩阵、欧拉角、四元数理论及其转换关系
- Rodrigues’ Rotation Formula