第二章:进阶力控算法

力控算法,说白了就是让机器人学会「温柔」。

我刚开始做协作机器人那会儿,总觉得力控是个玄学。直到有一次,我让机器人去拧一个精密螺丝,结果直接把螺纹给拧花了。嗯,从那以后我才真正意识到——没有力控的机器人,就是个莽夫。

这一章,我们来聊聊三种最核心的力控算法:阻抗控制、导纳控制、力位混合控制。它们各自解决什么问题?怎么选?我踩过哪些坑?

1. 阻抗控制原理

阻抗控制,名字听着唬人,其实核心就一句话:让机器人表现出弹簧阻尼特性

你想想看,当你用手推一个弹簧,弹簧会给你一个反作用力。推得越深,力越大。阻抗控制就是让机器人末端表现出这种「柔顺感」。

核心公式:

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

其中:

  • M — 惯性矩阵(质量感)
  • B — 阻尼矩阵(刹车感)
  • K — 刚度矩阵(弹簧感)
  • x_d — 期望位置
  • x — 实际位置

我个人习惯把这三个参数叫做「三感」:质量感、刹车感、弹簧感。调参的时候,你就想象自己在调一个虚拟的弹簧阻尼系统。

避坑指南:

我曾经在调阻抗参数时,把K值设得太大,结果机器人末端像块铁板一样硬。拖动示教时,操作员差点把手腕扭伤。记住:阻抗控制不是越硬越好,要根据任务需求来。

2. 导纳控制原理

导纳控制和阻抗控制,其实是「双胞胎」。一个管力到位移,一个管位移到力。

导纳控制的核心思路是:你推我,我就动。操作员施加一个力,机器人末端就按照这个力的大小和方向移动。

导纳控制公式:

ẋ = (1 / (M * s + B)) * F_ext

说白了,就是外力经过一个二阶低通滤波器,变成速度指令。

我在做拖动示教项目时,导纳控制用得最多。为什么?因为操作员直接用手推机器人,机器人要「听话」地跟着走。这时候导纳控制比阻抗控制更直观。

注意:

导纳控制有个致命弱点——惯性感太强。如果你把M值设得太大,操作员推机器人时会感觉像在推一堵墙。反过来,M值太小,机器人又会像「无头苍蝇」一样乱晃。

3. 力位混合控制基础

力位混合控制,是力控里的「高阶玩法」。

你想想看,有时候我们需要在某个方向用力控,在另一个方向用位置控。比如打磨一个曲面:沿着曲面法线方向要用力控(保持恒定压力),沿着切线方向要用位置控(走轨迹)。

力位混合控制的核心思想就是:把任务空间分解成两个子空间

分解逻辑:

  • 力控子空间:需要与环境接触的方向,用力控
  • 位置控子空间:需要自由运动的方向,用位置控

我记得有一次做机器人去毛刺项目,工件表面有凹凸不平。如果用纯位置控,机器人要么压得太深把工件搞坏,要么压得太浅去不掉毛刺。后来我用了力位混合控制,法线方向保持5N的恒定压力,切线方向走轨迹。效果立竿见影。

实现要点:

力位混合控制的关键在于选择矩阵S。S是一个对角矩阵,对角线元素为1表示该方向用位置控,为0表示该方向用力控。

S = diag([1, 1, 0, 1, 1, 1])  // Z方向用力控,其他方向用位置控

三种算法对比

算法 输入 输出 适用场景
阻抗控制 位置偏差 装配、插拔
导纳控制 外力 位置修正 拖动示教、人机协作
力位混合控制 力/位置指令 力/位置输出 打磨、去毛刺、抛光

核心知识体系

下面这张图,是我自己总结的力控算法知识体系。每次做项目前,我都会先看一眼这张图,确认自己选对了方向。

进阶力控算法知识体系 阻抗控制 位置偏差 → 力 弹簧阻尼特性 适用:装配、插拔 导纳控制 外力 → 位置修正 柔顺跟随 适用:拖动示教 力位混合控制 力/位置指令 子空间分解 适用:打磨、去毛刺 共同基础 力传感器标定 | 重力补偿 | 摩擦补偿 | 安全限幅 选型建议 • 高精度装配 → 阻抗控制(调低K值) • 人机协作 → 导纳控制(调低M值) • 复杂曲面加工 → 力位混合控制(选好S矩阵)

说实话,这三种算法没有绝对的优劣之分。关键看你做什么任务。我个人的经验是:先搞清楚你要控制的是力还是位置,再选算法

重要提醒:

不管用哪种算法,安全限幅一定要做。我曾经见过一个同事,导纳控制没做力限幅,操作员不小心推了一下,机器人直接撞到墙上,把末端执行器撞坏了。安全第一,永远不要省这一步。

好了,这一章的内容就到这里。力控算法是个需要反复实践的东西,光看理论是不够的。建议你找个真实的机器人,调一调参数,感受一下「三感」的变化。嗯,动手才是最好的学习方式。

专注资料整理