二、力与位置的关系:阻抗控制、导纳控制与力位混合框架

好,咱们今天聊点硬核的。力与位置的关系,说白了就是机器人跟环境打交道时,到底该听谁的?

我刚开始做机器人控制那会儿,总觉得位置控制就是王道——你让它走直线,它就走直线,多干脆。直到有一次,我让一个六轴机械臂去拧螺丝,结果螺丝没拧进去,反倒把工件给顶飞了。嗯,从那天起我才真正明白:纯位置控制在接触任务里,就是个愣头青

那怎么办呢?我们需要一种更「温柔」的控制方式——让机器人既能保持位置精度,又能对环境力做出响应。这就是柔顺控制要解决的问题。

2.1 阻抗控制:让机器人学会「让一让」

阻抗控制这个名字,听起来挺唬人。其实说白了,就是给机器人装一个「虚拟弹簧」。

你想想看,当你用手推一个弹簧时,弹簧会给你一个反作用力。推得越深,力越大。阻抗控制就是模仿这个物理特性——机器人不是死扛着位置不动,而是根据外力来调整自己的位置

数学上,我们用一个二阶系统来描述:

M * (ẍ_d - ẍ) + B * (ẋ_d - ẋ) + K * (x_d - x) = F_ext

这里:

  • M:虚拟质量(惯性)
  • B:虚拟阻尼
  • K:虚拟刚度
  • x_d:期望位置
  • x:实际位置
  • F_ext:外部施加的力

这个公式看着复杂,但核心思想很简单:外力越大,位置偏差就越大。就像你推一个弹簧,推得越用力,弹簧压缩得越多。

关键理解:阻抗控制是「位置源」的控制方式。机器人主动输出位置,被动接受力的作用。你设定好M、B、K这三个参数,机器人就知道该怎么「让」了。

我在做精密装配项目时,遇到过一个问题:零件配合间隙只有0.02mm,纯位置控制根本插不进去。后来我把刚度K调低,阻尼B调大,机器人就像长了「触觉」一样,自己顺着力的方向滑进去了。嗯,这就是阻抗控制的魅力。

2.2 导纳控制:反过来想问题

阻抗控制是「位置源」,那导纳控制就是「力源」。两者其实是一对「孪生兄弟」。

导纳控制的思想是:我检测到外力,然后主动调整位置来响应这个力。听起来跟阻抗控制差不多?别急,区别在于控制逻辑的流向。

打个比方:

  • 阻抗控制:你推我,我就让。让多少?取决于我设定的刚度。
  • 导纳控制:你推我,我感受到力,然后主动计算该让多少。

导纳控制的公式长这样:

F_ext = M * (ẍ_d - ẍ) + B * (ẋ_d - ẋ) + K * (x_d - x)

等等,这公式跟阻抗控制一模一样?对,数学形式是一样的。但区别在于:

特性 阻抗控制 导纳控制
输入 位置偏差 外力
输出 力/力矩 位置修正量
适用场景 高刚度环境(如金属加工) 低刚度环境(如人机协作)
传感器需求 位置传感器即可 需要力/力矩传感器

我的经验:在装配任务中,我更喜欢用导纳控制。因为装配时力信号更直接,你检测到「插不进去」的力,马上就能调整位置。阻抗控制更适合那些你事先知道环境刚度的情况。

2.3 力位混合控制:两手都要抓

前面两种方法,本质上都是在「力」和「位置」之间做权衡。但有些任务,你需要在某些方向严格控位置,在另一些方向严格控力。比如:

  • 沿着墙面打磨:垂直于墙面的方向要控力(防止压坏),平行于墙面的方向要控位置(保持移动轨迹)
  • 拧螺丝:旋转方向要控力(防止滑丝),轴向要控位置(保持接触)

这就是力位混合控制要解决的问题。

它的核心思想是:把任务空间分解成两个正交的子空间

  • 位置控制子空间:在不需要接触或约束的方向上,用位置控制
  • 力控制子空间:在需要与环境接触的方向上,用力控制

我画了一张图,帮你理解这个框架:

力位混合控制框架 期望位置 x_d 期望力 F_d 选择矩阵 S S: 位置控制方向 I-S: 力控制方向 位置控制器 力控制器 S I-S + 控制输出 控制输出 = S * 位置控制量 + (I-S) * 力控制量

这个框架的关键在于选择矩阵S。S是一个对角矩阵,对角线上的元素是0或1:

  • 1表示该方向用位置控制
  • 0表示该方向用力控制

举个例子,如果你在做墙面打磨:

S = [1, 0, 0]  # X方向(平行墙面)用位置控制
    [0, 1, 0]  # Y方向(平行墙面)用位置控制
    [0, 0, 0]  # Z方向(垂直墙面)用力控制

注意:力位混合控制最怕的就是「方向搞混了」。我曾经在一个项目中,把S矩阵写反了——该控力的方向用了位置控制,结果机器人直接怼穿了工件。嗯,那次教训挺深刻的。

2.4 三种方法的对比与选择

说了这么多,到底该用哪种?我个人的经验是:

场景 推荐方法 理由
精密装配(轴孔配合) 导纳控制 力信号直接,调整灵活
打磨、抛光 力位混合控制 需要区分方向控制
人机协作(拖动示教) 导纳控制 人施加力,机器人跟随
高速运动中的接触 阻抗控制 不需要力传感器,响应快
复杂曲面跟踪 力位混合控制 法向控力,切向控位

一句话总结:

  • 阻抗控制:你推我,我就让(被动柔顺)
  • 导纳控制:你推我,我主动让(主动柔顺)
  • 力位混合控制:有些方向不让,有些方向让(选择性柔顺)

好了,这一章的内容就到这里。三种方法各有各的脾气,选对了就是神兵利器,选错了就是灾难现场。我个人建议,刚开始做柔顺控制时,先从导纳控制入手——它最直观,调试也最方便。等你把力传感器玩熟了,再去看阻抗控制和力位混合,会轻松很多。

一个小技巧:调试导纳控制时,先把刚度K设得大一点,阻尼B设得小一点。这样机器人反应快,但不会太「硬」。等系统稳定了,再慢慢调参数。我当年就是这么干的,省了不少时间。


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