【Matlab 六自由度机器人】Fixed Angles(固定角度) 和 Euler Angles(欧拉角) 之间的区别
往期回顾
- 【汇总】系列文章总结
- 【主线】
- 定义标准型及改进型D-H参数,建立机器人模型。
- 运动学正解
- 运动学逆解
- 基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间
- 【补充说明】
- 关于灵活工作空间与可达工作空间的理解
- 关于改进型D-H参数(modified Dena vit-Hartenberg)的详细建立步骤
- 关于旋转的参数化(欧拉角、姿态角、四元数)的相关问题
- 关于双变量函数atan2(x,y)的解释
- 关于机器人运动学反解的有关问题
前言
在机器人学中,如何描述一个刚体在空间中的“朝向”——即姿态描述——是一个绕不开的核心概念。姿态表示的选取方式直接影响到后续的机器人控制、运动规划等环节,甚至决定了整个算法的复杂程度。在众多姿态描述方法中,固定角度(Fixed Angles) 和 欧拉角(Euler Angles) 是两种最常见、也最容易被混淆的表示方法。
直观上看,两者都使用三个旋转角度来描述物体相对于某个坐标系的姿态。但它们的关键区别在于旋转的顺序以及旋转轴是“固定的”还是“动态的”。正是这一差异,决定了它们各自的适用场景与数学特性。
接下来,我们将从数学公式和MATLAB代码两个角度,把这两个概念掰开揉碎讲清楚,帮助大家在实际应用中更准确地描述机器人姿态。
正文
Fixed Angles (固定角度)
固定角度是一种非常直观的方法。它的核心思路很简单:物体绕三个固定的参考坐标轴(比如世界坐标系或基座坐标系的X、Y、Z轴)依次旋转。这里的“固定”二字,指的是旋转轴始终与参考坐标系对齐,不会随物体自身的旋转而改变。
基本概念
用固定角度表示姿态时,需要明确两件事:
- 三个旋转轴: 通常就是参考坐标系的X、Y、Z轴,每个轴对应一个旋转角度(α, β, γ)。
- 固定的旋转顺序: 例如“XYZ”顺序,意味着先绕X轴转α,再绕Y轴转β,最后绕Z轴转γ。顺序一旦确定,就不能随意更改。
数学表示
固定角度的姿态可以由三个基本旋转矩阵的乘积来唯一确定。假设我们采用“XYZ”顺序,那么最终的旋转矩阵 RXYZ 可以表示为:
R_XYZ = R_x(α) · R_y(β) · R_z(γ)
其中,R_x(α)、R_y(β)、R_z(γ) 分别表示绕X、Y、Z轴旋转相应角度的基本旋转矩阵。
MATLAB代码示例
下面这段代码演示了固定角度的计算过程。我们分别测试了两种不同的旋转顺序,观察它们带来的差异。
先绕X轴转60度,再绕Y轴转30度:
% 创建一个新的图形窗口
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轴旋转60度
theta = deg2rad(30); % 绕Y轴旋转30度
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);
plot3([0, y_axis_rotated(1)], [0, y_axis_rotated(2)], [0, y_axis_rotated(3)], 'g--', 'LineWidth', 2);
plot3([0, z_axis_rotated(1)], [0, z_axis_rotated(2)], [0, z_axis_rotated(3)], 'b--', 'LineWidth', 2);
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);
代码运行结果如下:

请添加图片描述
先绕Y轴转30度,再绕X轴转60度:
% 创建一个新的图形窗口
figure; hold on;
% 原始坐标轴(设置同前,略)
% ...
% 绘制固定角度下的旋转
theta = deg2rad(30); % 绕Y轴旋转30度
phi = deg2rad(60); % 绕X轴旋转60度
R = rotx(phi) * roty(theta); % 计算旋转矩阵
% ...(后续绘制代码结构与上例相同)
grid on; view(3);
代码运行结果如下:

请添加图片描述
两个示例清晰地表明,即使旋转的角度值一样,只要改变旋转的顺序,最终得到的姿态完全不同。这正是固定角度方法的特性之一:旋转顺序决定了最终的姿态。
Euler Angles (欧拉角)
欧拉角与固定角度的核心区别在于:它的三次旋转,每一次都是绕当前物体自身的坐标轴进行的。这种“动态”的旋转轴使得欧拉角在描述物体内部旋转时更加直观,同时也带来了更高的灵活性。
基本概念
欧拉角的旋转顺序可以灵活选择,常见的组合包括ZXZ、ZYX、YZX等。以ZYX顺序为例:
R_ZYX = R_z(α) · R_y(β) · R_x(γ)
这里,先绕初始的Z轴转α,然后绕旋转后的Y轴转β,最后绕再次旋转后的X轴转γ。注意,每一次旋转的参考轴都在随着物体转动。
数学表示
尽管物理意义不同,但欧拉角在数学上仍然可以表示为三个基本旋转矩阵的乘积,只是矩阵相乘的顺序对应着“动态轴”的旋转顺序。
MATLAB代码示例
下面的代码演示了采用ZYX顺序的欧拉角计算方法:
% 定义旋转角度
alpha = 45; % 绕Z轴旋转45度
beta = 30; % 绕Y轴旋转30度
gamma = 60; % 绕X轴旋转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];
% 计算欧拉角姿态(ZYX顺序)
R_euler = Rz(alpha) * Ry(beta) * Rx(gamma);
MATLAB代码示例(综合对比)
下面把固定角度和欧拉角放在一起做个对比,能更直观地看到它们计算上的异同:
% Fixed Angles示例(XYZ顺序)
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示例(ZYX顺序)
alpha = -30; % 绕Z轴旋转-30度
beta = 60; % 绕Y轴旋转60度
gamma = 45; % 绕X轴旋转45度
R_euler = Rz(alpha) * Ry(beta) * Rx(gamma);
结合上面两段代码,你会发现一个有趣的事实:从纯粹的矩阵乘法形式上看,采用“XYZ”顺序的固定角度,与采用“ZYX”顺序的欧拉角,在数学表达上是一模一样的。它们之间的真正区别在于物理含义——固定角度的旋转轴始终是固定的,而欧拉角的旋转轴会随着物体逐次旋转。
总结
姿态描述是机器人学中的一个基本功,而固定角度与欧拉角则是其中两种最基础的表示方法,它们各自有着鲜明的特点:
- 固定角度: 采用固定的旋转顺序和固定的旋转轴(如XYZ、ZXZ等)。优点是概念简单直观,容易理解;缺点是旋转顺序是固定的,缺乏灵活性。
- 欧拉角: 旋转顺序和旋转轴可以根据需要自由选择(如ZYX、YZX等)。优点是适用范围更广,灵活性更高;缺点是物理含义不如固定角度直观,也更容易遇到“万向锁”等问题。
无论是固定角度还是欧拉角,最终都通过三个旋转角度和相应的旋转矩阵来描述姿态。在实际应用中,选择哪种方式,取决于具体的场景需求:是追求计算的直观性,还是需要更灵活的自由度?理解了这两者的区别,才能在机器人运动学、控制与规划中做到心中有数、游刃有余。
