【Matlab 六自由度机器人】Fixed Angles(固定角度) 和 Euler Angles(欧拉角) 之间的区别
往期回顾
【汇总】
【Matlab 六自由度机器人】系列文章汇总 \fcolorbox{green}{aqua}{【Matlab 六自由度机器人】系列文章汇总 } 【Matlab 六自由度机器人】系列文章汇总
【主线】
【补充说明】
- 关于灵活工作空间与可达工作空间的理解
- 关于改进型D-H参数(modified Denavit-Hartenberg)的详细建立步骤
- 关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题
- 关于双变量函数atan2(x,y)的解释
- 关于机器人运动学反解的有关问题
前言
在机器人学领域,姿态描述是非常重要的概念。姿态表示方式的选择直接影响着机器人控制、运动规划和姿态调整的复杂程度。在这个领域中有许多不同的方法来描述和表示一个机器人的姿态,其中 是常见且广泛使用的两种方式。
固定角度和欧拉角都是通过三个旋转角度来描述一个物体相对于特定坐标系的姿态。然而,它们在旋转顺序和描述方式上有所不同,这些差异对于理解和应用姿态表示方式至关重要。
在本文中,我们将重点讨论固定角度和欧拉角之间的区别,并通过数学公式和MATLAB代码示例来详细解释它们之间的差异。通过本文的阐述,读者将更好地理解固定角度和欧拉角的概念,从而在实际应用中更加灵活和准确地描述机器人的姿态。
正文
Fixed Angles (固定角度)
固定角度(Fixed Angles)是一种简单直观的方法,用来描述物体在三维空间中的姿态。固定角度方法通过固定的三个旋转轴和对应的旋转角度来表示物体的姿态。这种表示方式通常使用三个字母
(如 α , β , γ \alpha, \beta, \gamma α,β,γ ) 来表示每个旋转角度,例如 X Y Z XYZ XYZ、 Z Y X ZYX ZYX、 Y X Z YXZ YXZ等顺序。
基本概念
在固定角度表示中,通常涉及到以下概念:
- 三个旋转轴:固定角度方法使用固定的三个旋转轴(通常是坐标系的 X 、 Y 、 Z X、Y、Z X、Y、Z轴)来描述物体的姿态。每个旋转轴对应一个旋转角度,可以是绕 X X X轴、 Y Y Y轴、 Z Z Z轴的旋转。
- 旋转顺序:固定角度表示方法中,旋转的顺序是固定的。例如, X Y Z XYZ XYZ顺序表示先绕 X X X轴、再绕 Y Y Y轴、最后绕 Z Z Z轴旋转。
数学表示
固定角度姿态可以通过以下数学公式表示:
假设有绕X轴、Y轴和Z轴分别旋转 α 、 β \alpha 、 \beta α、β 、 γ \gamma γ 角度的旋转矩阵 R x ( α ) R_x(\alpha) Rx(α)、 R y ( β ) R_y(\beta) Ry(β) 和 R z ( γ ) R_z(\gamma) Rz(γ) ,则固定角度姿态 R X Y Z R_{X Y Z} RXYZ 可以表示为:
R X Y Z = R x ( α ) ⋅ R y ( β ) ⋅ R z ( γ ) R_{X Y Z}=R_x(\alpha) \cdot R_y(\beta) \cdot R_z(\gamma) RXYZ=Rx(α)⋅Ry(β)⋅Rz(γ)
其中, R x ( α ) 、 R y ( β ) R_x(\alpha) 、 R_y(\beta) Rx(α)、Ry(β) 和 R z ( γ ) R_z(\gamma) Rz(γ) 分别表示绕 X X X轴、 Y Y Y轴和 Z Z Z 轴旋转 α \alpha α、 β \beta β 、 γ \gamma γ 角度的旋转矩阵。
MATLAB代码示例
下面是一个使用MATLAB代码示例来计算固定角度姿态的示例:
% 创建一个新的图形窗口
figure;
hold on;
% 原始坐标轴
plot3([0 1], [0 0], [0 0], 'r', 'LineWidth', 2); % X轴(红色)
plot3([0 0], [0 1], [0 0], 'g', 'LineWidth', 2); % Y轴(绿色)
plot3([0 0], [0 0], [0 1], 'b', 'LineWidth', 2); % Z轴(蓝色)
text(1, 0, 0, 'X', 'FontSize', 12);
text(0, 1, 0, 'Y', 'FontSize', 12);
text(0, 0, 1, 'Z', 'FontSize', 12);
% 设置坐标轴范围
xlim([-1.5, 1.5]);
ylim([-1.5, 1.5]);
zlim([-1.5, 1.5]);
% 绘制固定角度下的旋转
phi = deg2rad(60); % 绕X轴旋转30度
theta = deg2rad(30); % 绕Y轴旋转60度
R = roty(theta) * rotx(phi); % 计算旋转矩阵
x_axis_rotated = R * [1; 0; 0]; % X轴旋转后的方向
y_axis_rotated = R * [0; 1; 0]; % Y轴旋转后的方向
z_axis_rotated = R * [0; 0; 1]; % Z轴旋转后的方向
% 绘制旋转后的坐标轴
plot3([0, x_axis_rotated(1)], [0, x_axis_rotated(2)], [0, x_axis_rotated(3)], 'r--', 'LineWidth', 2); % 旋转后的X轴(红色虚线)
plot3([0, y_axis_rotated(1)], [0, y_axis_rotated(2)], [0, y_axis_rotated(3)], 'g--', 'LineWidth', 2); % 旋转后的Y轴(绿色虚线)
plot3([0, z_axis_rotated(1)], [0, z_axis_rotated(2)], [0, z_axis_rotated(3)], 'b--', 'LineWidth', 2); % 旋转后的Z轴(蓝色虚线)
text(x_axis_rotated(1), x_axis_rotated(2), x_axis_rotated(3), 'X''', 'FontSize', 12);
text(y_axis_rotated(1), y_axis_rotated(2), y_axis_rotated(3), 'Y''', 'FontSize', 12);
text(z_axis_rotated(1), z_axis_rotated(2), z_axis_rotated(3), 'Z''', 'FontSize', 12);
grid on;
view(3);
% 创建一个新的图形窗口
figure;
hold on;
% 原始坐标轴
plot3([0 1], [0 0], [0 0], 'r', 'LineWidth', 2); % X轴(红色)
plot3([0 0], [0 1], [0 0], 'g', 'LineWidth', 2); % Y轴(绿色)
plot3([0 0], [0 0], [0 1], 'b', 'LineWidth', 2); % Z轴(蓝色)
text(1, 0, 0, 'X', 'FontSize', 12);
text(0, 1, 0, 'Y', 'FontSize', 12);
text(0, 0, 1, 'Z', 'FontSize', 12);
% 设置坐标轴范围
xlim([-1.5, 1.5]);
ylim([-1.5, 1.5]);
zlim([-1.5, 1.5]);
% 绘制固定角度下的旋转
theta = deg2rad(30); % 绕Y轴旋转30度
phi = deg2rad(60); % 绕X轴旋转60度
R = rotx(phi) * roty(theta); % 计算旋转矩阵
x_axis_rotated = R * [1; 0; 0]; % X轴旋转后的方向
y_axis_rotated = R * [0; 1; 0]; % Y轴旋转后的方向
z_axis_rotated = R * [0; 0; 1]; % Z轴旋转后的方向
% 绘制旋转后的坐标轴
plot3([0, x_axis_rotated(1)], [0, x_axis_rotated(2)], [0, x_axis_rotated(3)], 'r--', 'LineWidth', 2); % 旋转后的X轴(红色虚线)
plot3([0, y_axis_rotated(1)], [0, y_axis_rotated(2)], [0, y_axis_rotated(3)], 'g--', 'LineWidth', 2); % 旋转后的Y轴(绿色虚线)
plot3([0, z_axis_rotated(1)], [0, z_axis_rotated(2)], [0, z_axis_rotated(3)], 'b--', 'LineWidth', 2); % 旋转后的Z轴(蓝色虚线)
text(x_axis_rotated(1), x_axis_rotated(2), x_axis_rotated(3), 'X''', 'FontSize', 12);
text(y_axis_rotated(1), y_axis_rotated(2), y_axis_rotated(3), 'Y''', 'FontSize', 12);
text(z_axis_rotated(1), z_axis_rotated(2), z_axis_rotated(3), 'Z''', 'FontSize', 12);
grid on;
view(3);
Euler Angles (欧拉角)
欧拉角(Euler Angles)是另一种常用的姿态表示方式,也是通过三个旋转角度来描述物体在二维空间中的姿态。然而,与固定角度不同的是,欧拉角的旋转顺序和旋转轴可以根据需要而灵活选择,使得欧拉角具有更广泛的应用范围和更多的表示方式。
基本概念
在欧拉角表示中,常见的有多种旋转顺序,如ZXZ、ZYX、YZX等。以ZYX顺序为例,姿态的表示方式为:
R Z Y X = R z ( α ) ⋅ R y ( β ) ⋅ R x ( γ ) R_{Z Y X}=R_z(\alpha) \cdot R_y(\beta) \cdot R_x(\gamma) RZYX=Rz(α)⋅Ry(β)⋅Rx(γ)
在这个顺序中,先绕 Z Z Z 轴旋转 α \alpha α 角度,然后绕 Y Y Y 轴旋转 β \beta β 角度,最后绕轴旋转 γ \gamma γ 角度。
数学表示
欧拉角姿态可以通过不同的旋转矩阵表示,例如绕X、Y、Z轴分别旋转 α 、 β 、 γ \alpha 、 \beta 、 \gamma α、β、γ 角度的旋转矩阵 R x ( α ) 、 R y ( β ) R_x(\alpha) 、 R_y(\beta) Rx(α)、Ry(β) 和 R z ( γ ) R_z(\gamma) Rz(γ) 。
MATLAB代码示例
下面是一个使用MATLAB代码示例来计算欧拉角姿态的示例:
% 定义旋转角度
alpha = 45; % 绕X轴旋转45度
beta = 30; % 绕Y轴旋转30度
gamma = 60; % 绕Z轴旋转60度
% 定义绕X、Y、Z轴旋转的函数
Rx = @(theta) [1, 0, 0; 0, cosd(theta), -sind(theta); 0, sind(theta), cosd(theta)];
Ry = @(theta) [cosd(theta), 0, sind(theta); 0, 1, 0; -sind(theta), 0, cosd(theta)];
Rz = @(theta) [cosd(theta), -sind(theta), 0; sind(theta), cosd(theta), 0; 0, 0, 1];
% 计算固定角度姿态
R_fixed = Rx(alpha) * Ry(beta) * Rz(gamma);
MATLAB代码示例
% Fixed Angles示例
alpha = 45; % 绕X轴旋转45度
beta = 30; % 绕Y轴旋转30度
gamma = 60; % 绕Z轴旋转60度
Rx = @(theta) [1, 0, 0; 0, cosd(theta), -sind(theta); 0, sind(theta), cosd(theta)];
Ry = @(theta) [cosd(theta), 0, sind(theta); 0, 1, 0; -sind(theta), 0, cosd(theta)];
Rz = @(theta) [cosd(theta), -sind(theta), 0; sind(theta), cosd(theta), 0; 0, 0, 1];
R_fixed = Rx(alpha) * Ry(beta) * Rz(gamma);
% Euler Angles示例
alpha = -30; % 绕Z轴旋转-30度
beta = 60; % 绕Y轴旋转60度
gamma = 45; % 绕X轴旋转45度
Rx = @(theta) [1, 0, 0; 0, cosd(theta), -sind(theta); 0, sind(theta), cosd(theta)];
Ry = @(theta) [cosd(theta), 0, sind(theta); 0, 1, 0; -sind(theta), 0, cosd(theta)];
Rz = @(theta) [cosd(theta), -sind(theta), 0; sind(theta), cosd(theta), 0; 0, 0, 1];
R_euler = Rz(alpha) * Ry(beta) * Rx(gamma);
总结
在机器人学中,姿态描述是至关重要的概念,而固定角度(Fixed Angles)和欧拉角(Euler Angles)是常用的姿态表示方式之一。固定角度通过固定的旋转顺序和旋转轴来描述物体的姿态,而欧拉角则具有更灵活的旋转顺序和旋转轴选择。以下是对固定角度和欧拉角的总结:
- 固定角度: 采用固定的旋转顺序和旋转轴,如XYZ、ZXZ等,来描述物体的姿态。采用固定角度方法可以简单直观地表示姿态,但旋转顺序固定。
- 欧拉角: 具有灵活的旋转顺序和旋转轴选择,如ZYX、YZX等。欧拉角方法适用性更广,可以根据需要选择不同的旋转顺序和轴,灵活性更高。
无论是固定角度还是欧拉角,它们都通过三个旋转角度来描述物体的姿态,通过相应的旋转矩阵进行计算。在实际应用中,根据具体的需求和场景选择合适的姿态表示方式至关重要,以便准确描述机器人的姿态并进行相应的控制和规划。