机器人如何'看见'动作?
当我们训练机器人执行任务,比如'拿起桌上的杯子',不能只给模糊指令。我们需要一串精确的、机器可读的数据。这个核心概念就是位姿 (Pose)。
在机器人学和 3D 视觉中,位姿描述了物体在空间中的完整状态。本文将深入探讨描述'朝向'的五种主流方法,理解这些数学表示,你就能明白为什么现代机器人(尤其是由机器学习驱动的)会使用一些看起来非常'奇怪'的数值。
1. 基础:位姿 = 位置 + 姿态
一个完整的位姿包含两部分:
- 位置 (Position):物体在世界坐标系中的坐标点。
- 姿态 (Orientation/Rotation):物体的朝向。
位置:简单明了
这部分通常用一个 3D 向量 (x, y, z) 表示,即我们熟悉的笛卡尔坐标。它回答了'物体在哪里?'
姿态:真正的挑战
这部分复杂得多,它回答了'物体朝向何方?'
想象一个杯子固定在桌面的 (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…)。
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, 45, 60], degrees=True)
# 转换为旋转矩阵
()
(r_euler.as_matrix())


