一、动作表征基础

什么是动作表征

动作表征,说白了就是——怎么用数学语言描述机器人的动作

我刚开始接触这个领域时,觉得这问题太简单了。不就是记录关节角度吗?后来真上手做项目才发现,事情远没那么简单。你想想看,一个机械臂抓杯子,光记录六个关节的角度,能描述清楚「抓」这个动作吗?显然不能。

动作表征要解决的核心问题是:如何用一组数字,完整、紧凑、可泛化地表示一个动作。这里的「完整」意味着不丢失关键信息,「紧凑」意味着不冗余,「可泛化」意味着相似动作在表征空间里距离相近。

核心观点:动作表征是连接「感知」和「控制」的桥梁。没有好的表征,再强的算法也白搭。

动作表征在机器人学中的重要性

为什么我这么看重动作表征?因为我在实际项目中吃过亏。

几年前做机器人模仿学习,我们直接用关节角度作为动作表征。结果呢?同样的抓取动作,换个初始位置就完全学不会了。后来换成末端位姿加相对位移,效果立竿见影。嗯,这就是表征的力量。

具体来说,动作表征的重要性体现在三个方面:

  • 控制精度:好的表征能让控制器更精准地跟踪目标轨迹
  • 学习效率:合适的表征能大幅减少训练所需的数据量
  • 泛化能力:抽象的表征能让学到的技能迁移到新场景

我个人习惯把动作表征分为三个层次:

  1. 底层表征:关节空间、任务空间的位置/速度/力
  2. 中层表征:轨迹基元、运动基元(如DMP)
  3. 高层表征:语义化的动作描述(如「抓取」「放置」)

这节课我们先啃底层表征的数学基础。这是后面所有内容的地基,必须打牢。

动作表征的数学基础

位姿(Pose)

位姿 = 位置 + 姿态。位置好理解,就是三维空间中的坐标 (x, y, z)。姿态就有点绕了——它描述的是物体「朝哪个方向」以及「怎么旋转」。

我建议你把位姿想象成这样一个问题:我想把一个坐标系,和另一个坐标系对齐,需要做哪些操作?

答案很明确:先平移,再旋转。平移用向量,旋转用矩阵或四元数。

小技巧:在实际工程中,我习惯用齐次变换矩阵 T 来统一表示位姿。一个 4x4 矩阵,左上角 3x3 是旋转,右上角 3x1 是平移,最后一行是 [0 0 0 1]。干净利落。

旋转矩阵

旋转矩阵是描述姿态最直观的方式。它是一个 3x3 的正交矩阵,行列式为 +1。

为什么用矩阵?因为方便计算。两个旋转叠加,就是矩阵相乘。一个向量旋转后是多少,就是矩阵乘向量。

但旋转矩阵有个致命问题——冗余。9个参数描述3个自由度,而且还得时刻保证正交性。我在做优化时最烦这个,每次迭代完都得重新正交化,麻烦得很。

// 旋转矩阵示例:绕Z轴旋转θ角
R_z(θ) = [
  [cosθ, -sinθ, 0],
  [sinθ,  cosθ, 0],
  [0,      0,    1]
]

避坑指南:我曾经在代码里直接用旋转矩阵做插值,结果轨迹出现了诡异的「抖动」。后来才发现,旋转矩阵线性插值得到的矩阵根本不是旋转矩阵。记住:旋转矩阵的线性组合不一定是旋转矩阵!

四元数

四元数是我个人最喜欢的姿态表征方式。它用4个参数表示3个自由度,没有冗余,也没有奇点。

四元数长这样:q = w + xi + yj + zk,或者写成 (w, x, y, z)。其中 w 是实部,(x, y, z) 是虚部。

直观理解:四元数描述的是「绕某个轴转某个角度」。轴是单位向量 (x, y, z),角度 θ 满足 w = cos(θ/2)。

为什么用半角?因为这样两个四元数相乘就能表示旋转的复合。这个性质太优雅了。

// 四元数乘法(表示旋转复合)
q1 * q2 = (w1*w2 - x1*x2 - y1*y2 - z1*z2,
           w1*x2 + x1*w2 + y1*z2 - z1*y2,
           w1*y2 - x1*z2 + y1*w2 + z1*x2,
           w1*z2 + x1*y2 - y1*x2 + z1*w2)

重要提醒:四元数有「双重覆盖」问题——q 和 -q 表示同一个旋转。做优化时如果不加约束,可能会在两个等价解之间来回跳。我一般会强制 w ≥ 0 来避免这个问题。

三种表征方式的对比

表征方式 参数数量 优点 缺点
旋转矩阵 9 直观,计算方便 冗余,需正交化
欧拉角 3 参数最少,易理解 有万向锁,插值困难
四元数 4 无奇点,可平滑插值 不够直观,有双重覆盖

我个人在实际项目中的选择原则:做控制用四元数,做可视化用欧拉角,做理论推导用旋转矩阵。各取所长,别死磕一种。

知识体系总览

下面这张图概括了本章的核心逻辑。我画它的时候特意把「动作表征」放在中心,因为它确实是整个课程的基石。

动作表征 位置 (x, y, z) 姿态 (旋转) 应用场景 旋转矩阵 欧拉角 四元数 轨迹优化 模仿学习 运动规划 图:动作表征知识体系 位置 + 姿态 = 完整位姿描述

从这张图可以看得很清楚:动作表征的核心就是「位置」和「姿态」的组合。位置相对简单,姿态才是真正的难点。而姿态的三种数学工具——旋转矩阵、欧拉角、四元数——各有适用场景。

我建议初学者先从旋转矩阵入手,理解旋转的代数结构。然后过渡到四元数,体会它的优雅和高效。至于欧拉角,了解即可,实际项目中我很少用它做核心计算——万向锁太坑了。

我的学习建议:别光看书。打开Python,用numpy和scipy.spatial.transform库,把旋转矩阵、四元数、欧拉角之间的转换亲手写一遍。代码跑通了,才算真懂了。


公众号:蓝海资料掘金营,微信deep3321