3、动作表示方法:关节空间 vs 任务空间、位置/速度/力控制、轨迹表示(DMP, ProMP)

好,咱们进入第三章。这一章我打算聊聊动作表示。说白了,就是机器人怎么「理解」和「记住」一个动作。

你想想看,让机器人学一个动作,首先得有个办法把这个动作描述出来。就像教人跳舞,你得说「左脚向前一步,右手抬起」,而不是说「股四头肌收缩15%,肱二头肌发力30%」。这两种描述方式,对应到机器人领域,就是两种完全不同的空间:关节空间任务空间

3.1 关节空间 vs 任务空间

关节空间,就是直接用每个关节的角度来描述机器人的姿态。比如一个六轴机械臂,它的状态就是六个关节角度组成的向量:q = [q1, q2, q3, q4, q5, q6]。这种方式最直接,因为电机控制的就是关节角度。

任务空间,也叫操作空间,描述的是机器人末端执行器(比如手爪)在三维空间中的位置和姿态。通常用位置(x, y, z)加上姿态(roll, pitch, yaw)或者四元数来表示。

我个人习惯,在做底层控制时用关节空间,在做上层规划时用任务空间。为什么?因为关节空间控制更精确,但人脑很难直观理解;任务空间正好相反,直观但需要做逆运动学转换。

核心区别一句话:

  • 关节空间:控制简单,规划复杂(因为要避免奇异点)
  • 任务空间:规划直观,控制复杂(因为要实时解算逆运动学)

我在项目中遇到过一个问题:用任务空间规划了一条直线轨迹,结果机器人走到一半突然卡住了。查了半天,原来是经过了一个奇异点,逆运动学解算发散。从那以后,我学乖了——任务空间规划一定要加奇异点规避。

3.2 位置/速度/力控制

确定了用什么空间来描述动作,接下来就是怎么控制。这里有三条路:位置控制、速度控制、力控制。

控制方式 输入 输出 适用场景
位置控制 目标位置 关节力矩 点到点运动、轨迹跟踪
速度控制 目标速度 关节力矩 传送带跟踪、恒速运动
力控制 目标力/力矩 关节力矩 装配、打磨、抓取

位置控制是最常用的。你给机器人一个目标位置,它用PID或者其他算法算出力矩,驱动关节过去。简单粗暴,但有个问题——如果遇到障碍物,它会硬顶,可能损坏自己或工件。

速度控制其实更常用在移动机器人上。比如AGV小车,你给它一个线速度和角速度,它自己决定怎么走。机械臂上用得少一些,但在传送带跟踪这种场景下很实用。

力控制,嗯,这个有点意思。我记得有一次做精密装配,轴和孔的间隙只有0.01mm。用位置控制死活装不进去,稍微偏一点就卡死。后来换成力控制,让机器人「感觉」着力来调整位置,一下子就搞定了。

我的建议:

新手先从位置控制入手。等遇到「装不进去」「磨不平」这类问题时,再考虑力控制。别一上来就搞力控,调试起来很头疼。

3.3 轨迹表示:DMP 和 ProMP

好,现在我们知道怎么控制机器人了。但还有一个问题:怎么表示一条完整的轨迹?总不能把每个时间点的关节角度都存下来吧?那样太占内存,而且没法泛化。

这里有两个经典方法:DMP(动态运动基元)ProMP(概率运动基元)

3.3.1 DMP:动态运动基元

DMP 的核心思想,是把一条轨迹分解成两部分:一个「吸引子」和一个「形状项」。

  • 吸引子:保证轨迹最终到达目标点。就像一个弹簧,不管你怎么拉,它最终都会回到平衡位置。
  • 形状项:描述轨迹的具体形状。用一组基函数(比如高斯函数)的加权和来表示。

数学上,DMP 用一个二阶微分方程来描述:

τ² ÿ = α_y (β_y (g - y) - τ ẏ) + f(x)

其中:
- y:当前位置
- g:目标位置
- τ:时间缩放因子
- α_y, β_y:弹簧阻尼系数
- f(x):形状项,由基函数加权和组成

为什么 DMP 好用?因为它天然支持泛化。你只需要改变目标点 g,轨迹就会自动调整形状,适应新的目标。我在做机器人抓取时,经常用 DMP 来泛化示教轨迹——同一个抓取动作,换个位置照样能用。

DMP 的三个优点:

  1. 时间缩放:可以加速或减速执行,不影响轨迹形状
  2. 空间泛化:改变目标点,轨迹自动适配
  3. 鲁棒性强:遇到扰动会自动修正

3.3.2 ProMP:概率运动基元

ProMP 是 DMP 的升级版。它不只用一条轨迹,而是用多条轨迹的分布来表示一个动作。

你想想看,同一个动作,不同人做出来肯定有差异。ProMP 就是捕捉这种差异。它把轨迹表示成一个概率分布:

y(t) = Φ(t)ᵀ w + ε_y

其中:
- Φ(t):基函数矩阵
- w:权重向量(服从高斯分布)
- ε_y:观测噪声

权重 w 服从高斯分布,所以 ProMP 可以给出轨迹的均值方差。方差大的地方,就是动作变化大的地方;方差小的地方,就是动作比较固定的地方。

我曾经用 ProMP 做机器人拧螺丝的实验。示教了10次拧螺丝的轨迹,然后用 ProMP 建模。结果发现,在螺丝对准孔的那个时刻,方差特别小——说明每次都要精确对准;而在拧的过程中,方差逐渐变大——说明拧的路径可以有些差异。这个信息对后续优化很有用。

注意:

ProMP 虽然强大,但计算量比 DMP 大。如果你的机器人算力有限,或者动作比较固定,用 DMP 就够了。别为了炫技而用 ProMP。

3.4 本章知识体系

下面这张图,是我自己画的,把本章的核心逻辑串起来了:

动作表示方法知识体系 动作描述空间 关节空间 任务空间 控制方式 位置控制 速度控制 力控制 轨迹表示方法 DMP(动态运动基元) ProMP(概率运动基元) 图:动作表示方法知识体系

从这张图可以看得很清楚:先选空间(关节还是任务),再选控制方式(位置、速度还是力),最后选轨迹表示(DMP 还是 ProMP)。每一步的选择,都取决于你的具体任务。

好了,这一章就到这里。记住一句话:没有最好的表示方法,只有最合适的。选什么,看你的机器人、你的任务、你的算力。


专注资料整理