二、力与位置的关系:阻抗控制、导纳控制与力位混合框架
好,咱们今天聊点硬核的。力与位置的关系,说白了就是机器人跟环境打交道时,到底该听谁的?
我刚开始做机器人控制那会儿,总觉得位置控制就是王道——你让它走直线,它就走直线,多干脆。直到有一次,我让一个六轴机械臂去拧螺丝,结果螺丝没拧进去,反倒把工件给顶飞了。嗯,从那天起我才真正明白:纯位置控制在接触任务里,就是个愣头青。
那怎么办呢?我们需要一种更「温柔」的控制方式——让机器人既能保持位置精度,又能对环境力做出响应。这就是柔顺控制要解决的问题。
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 力位混合控制:两手都要抓
前面两种方法,本质上都是在「力」和「位置」之间做权衡。但有些任务,你需要在某些方向严格控位置,在另一些方向严格控力。比如:
- 沿着墙面打磨:垂直于墙面的方向要控力(防止压坏),平行于墙面的方向要控位置(保持移动轨迹)
- 拧螺丝:旋转方向要控力(防止滑丝),轴向要控位置(保持接触)
这就是力位混合控制要解决的问题。
它的核心思想是:把任务空间分解成两个正交的子空间。
- 位置控制子空间:在不需要接触或约束的方向上,用位置控制
- 力控制子空间:在需要与环境接触的方向上,用力控制
我画了一张图,帮你理解这个框架:
这个框架的关键在于选择矩阵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