当我们教一个机器人执行任务时,比如'拿起桌上的杯子',我们到底在教它什么?我们不能只说'去拿杯子'。相反,我们必须给它一串精确的、机器可读的指令。
这个指令的核心,就是**'位姿 (Pose)'**。
在机器人学和 3D 视觉中,位姿是描述一个物体在空间中完整状态的术语。本文深入探讨这个概念,特别是描述'朝向'的五种主流方法。理解这些,你就能明白为什么现代机器人(尤其是那些由机器学习驱动的)会使用一些看起来非常'奇怪'的数学表示。
1. 基础:位姿 (Pose) = 位置 + 姿态
一个完整的'位姿'由两部分组成:
- 位置 (Position):物体在世界坐标系中的哪个点。
- 姿态 (Orientation/Rotation):物体的朝向。
📍 位置 (Position):简单明了
这部分很简单。我们通常用一个 3D 向量 (x, y, z) 来表示,这就是我们都熟悉的笛卡尔 (Cartesian) 坐标。它回答了'物体在哪里?'
🔄 姿态 (Orientation):真正的挑战
这部分复杂得多。它回答了'物体朝向何方?'
想象一个杯子在桌上的 (x, y, z) 位置是固定的,但它可以'正着放'、'倒着放'或'躺着放'——这就是姿态。
描述 3D 旋转有非常多种方式,每种都有其独特的优缺点。下面,我们将详细介绍五种最主要的'姿态'表示法,从最直观的到最适合机器学习的。
2. 🤖 五种主要的'姿态'表示法
1. 欧拉角 (Euler Angles) & RPY
这是最直观、最'人类友好'的一种方式。
- 是什么:用三个角度来描述旋转。
- 如何工作:想象有三个主轴(X, Y, Z)。我们按特定顺序绕这些轴旋转三个角度。例如,'ZYX 顺序'意味着:先绕 Z 轴转 α,再绕 Y 轴转 β,最后绕 X 轴转 γ。
- RPY (Roll, Pitch, Yaw):这是欧拉角的一种常见约定,通常(但不总是)对应于 ZYX 顺序。
- Roll (横滚): 绕 X 轴(前进方向)
- Pitch (俯仰): 绕 Y 轴(侧向)
- Yaw (偏航): 绕 Z 轴(垂直方向)
- 优点:
- 非常直观,容易理解。
- 只用 3 个数字,非常紧凑。
- 缺点:
- 万向锁 (Gimbal Lock):一个致命缺陷。在特定姿态下(例如,Pitch 为 90 度时),Roll 和 Yaw 会'合并'成同一个旋转,导致你失去一个自由度。这在机器人和动画中是灾难性的。
- 歧义性:必须严格定义旋转顺序(如 ZYX, XYZ, ZXZ…)。
Python 代码示例 (使用 scipy)
import numpy as np
from scipy.spatial.transform import Rotation as R
# 创建一个欧拉角:绕 Z 轴 30 度,Y 轴 45 度,X 轴 60 度
# 'zyx' 是旋转顺序,degrees=True 表示单位是度
r_euler = R.from_euler('zyx', [30, , ], degrees=)
()
(r_euler.as_matrix())


