阻抗控制


做机器人时,我们经常会有一个直觉:
让机械臂到某个位置去。

这件事看起来很自然,所以很多人一开始接触控制时,首先想到的是“位置控制”——给机器人一个目标点,它就尽量精准地走过去。

但现实里的机器人,往往不是只和“空气”打交道。

它可能要:

  • 插拔零件
  • 打磨表面
  • 跟人协作
  • 夹取易碎物品
  • 推门、按按钮、拧螺丝
  • 在装配中接触不确定的环境

这时候,如果机器人还是一味地“我必须到这个位置”,问题就来了。
一旦环境和预期不一致,它就会顶、撞、卡、抖,轻则动作生硬,重则损坏工件甚至带来安全风险。

这就是为什么阻抗控制很重要。


一、阻抗控制

最通俗的一句话:

阻抗控制不是单纯规定机器人“到哪去”,而是规定它“在受到外力时,应该表现得像什么”。

这个“像什么”,通常就是像一个:

  • 有质量的物体
  • 连着弹簧
  • 再带点阻尼

也就是经典的质量-弹簧-阻尼模型

你可以把它理解成:

  • 弹簧:偏了会想拉回来
  • 阻尼:动太快会被“刹一刹”
  • 质量:不会一受力就瞬间飞过去,而是有惯性

所以阻抗控制的核心,不是“死命跟踪位置”,而是让机器人在运动和接触中表现出一种柔顺而可控的动态特性


二、为什么阻抗控制这么实用?

因为真实世界不是理想世界。

举几个非常典型的场景:

1. 插装与装配

比如插插头、装轴承、装连接器。
如果完全刚性控制,孔位稍有误差就会卡死。
阻抗控制可以让机器人“边试边让”,接触后稍微退让、修正,再继续插入。

2. 打磨、抛光、擦拭

这类任务的关键不是“某个绝对位置”,而是“保持合适接触力”。
表面可能有高低起伏,阻抗控制能让末端像“有弹性地贴着表面走”。

3. 人机协作

人推一下机械臂,它不是僵硬地抗拒,而是自然地让开一点。
这就是柔顺性,也是协作机器人体验好不好的关键之一。

4. 抓取易碎物体

拿玻璃杯、薄壳件、食品包装,不能硬夹。
需要既能稳定,又不能太大力。
阻抗控制可以让抓取过程更“有手感”。

5. 不确定环境下的操作

门把手位置不一定完全一致,工件公差也不完全一样。
阻抗控制让机器人具备一定“容错性”。


三、类比

可以这样理解:

普通位置控制,像是你在页面里把一个弹窗 position: absolute; left: 100px; top: 50px; 写死。
它必须在那里。

但现实界面不是死的:

  • 内容长度可能变化
  • 浏览器宽度会变
  • 字体会变化
  • 多语言会撑开布局

所以你会做响应式布局,会加弹性盒、约束、过渡。

阻抗控制就有点像:

不是只规定最终位置,而是规定对象在“被外界影响”时该怎么表现。

比如一个可拖动面板:

  • 用户拖一下,它跟着动
  • 松手后慢慢回弹
  • 不会抖得太厉害
  • 不会瞬间跳回去
  • 遇到边界时有缓冲感

这种“交互手感”,本质上就很接近质量-弹簧-阻尼系统。

所以你可以把阻抗控制理解成:

给机器人定义一种“运动手感”和“接触手感”。


四、质量-弹簧-阻尼模型:阻抗控制的核心直觉

这是阻抗控制最重要的基础。

1. 先从生活感觉出发

想象你推三种东西:

第一种:一根很硬的弹簧

你一推,它马上反弹。
这说明“刚度大”。

第二种:一团很黏的东西

你推它时感觉有阻力,动起来也不利索。
这说明“阻尼大”。

第三种:一个很重的箱子

你推它,它不会立刻加速很多。
这说明“质量大”。

阻抗控制就是把这三种特性组合起来,让机器人在外力作用下呈现出你想要的行为。


2. 这三个参数分别代表什么?

质量 M

表示“惯性”大小。
数值大,机器人更稳重,不会轻易被推动。
数值小,机器人更轻快,更容易响应外力。

弹簧 K

表示“想回到目标位置的意愿有多强”。
数值大,偏一点就想强力拉回去。
数值小,偏了也没那么急着回来。

阻尼 B

表示“对速度的抑制”。
数值大,运动更平稳,不容易振荡。
数值小,动作可能更灵活,但容易抖。


3. 它到底在表达什么?

它表达的是一种关系:

当机器人偏离期望位置,并且带有一定速度时,系统会产生相应的力或力矩,把它拉回去、稳下来。

所以阻抗控制最重要的不是“背出公式”,而是理解:

机器人不是简单执行“目标位置命令”,
而是在模拟一个“虚拟机械系统”的动态行为。

你可以把目标位置理解成弹簧的平衡点。
机器人离这个平衡点越远,弹簧“拉回去”的趋势就越强。
机器人动得越快,阻尼“刹住它”的趋势就越强。


五、笛卡尔空间阻抗:从“末端手感”来控制

这是工业和协作机器人里非常常见、也非常实用的一种方式。

1. 什么叫笛卡尔空间?

简单说,就是从机器人末端执行器的角度看世界。
也就是控制:

  • x、y、z 位置
  • 姿态方向

比如你不关心每个关节怎么转,只关心:

  • 机械臂末端要往前推 5 mm
  • 沿法向保持柔顺
  • 姿态不要歪

这就是笛卡尔空间的思路。


2. 为什么它特别适合接触任务?

因为大多数实际任务,都是从“工具”出发来描述的。

比如:

  • 打磨头贴着表面走
  • 吸盘往下压一点
  • 螺丝刀沿孔轴线插入
  • 夹爪末端轻柔接触工件

这些需求都更容易用“末端位置/姿态/力”来表达,而不是用“第 3 个关节转多少度”。

所以笛卡尔空间阻抗的核心思想就是:

让机器人末端在空间中表现得像一个虚拟的质量-弹簧-阻尼系统。


3. 它的直觉是什么?

你可以想象机械臂末端通过一组“看不见的弹簧和阻尼器”连接到目标位姿。

  • 偏离目标位姿 → 有恢复力
  • 运动太快 → 有阻尼抑制
  • 受到外界作用 → 会适度让步,而不是死扛

比如末端朝墙面推进:

  • 如果墙面比预期更近,机器人会先接触到墙
  • 这时它不会拼命往里冲
  • 而是像一个有弹性的系统一样,与墙建立稳定接触

这就是“柔顺接触”。


4. 典型应用场景

表面跟随

如打磨、喷涂、检测、擦拭。
末端在某个方向保持柔顺,可以贴合不平整表面。

精密插装

在插入方向上给合适柔顺性,横向适当退让。
能显著减少卡滞和顶死。

人机引导示教

人手推着末端走,机器人顺着走。
体验上会更自然,像“带着一只手臂移动”。

接触式检测

接触边缘、按压按钮、寻找定位面时非常实用。


5. 前端视角怎么理解?

笛卡尔空间阻抗有点像你在做一个拖拽组件时,不关心内部 DOM 每一层怎么变换,只关心“用户看到的整个组件最终怎么动”。

你不是一个个改内部节点,而是直接对“最终表现对象”建模。
机器人里这个“最终表现对象”就是末端执行器。

所以它很符合产品和应用视角:
任务是围绕工具和接触对象定义的。


六、关节空间阻抗:从“每个关节的手感”来控制

和笛卡尔空间阻抗不同,关节空间阻抗是从机器人每个关节出发。

1. 它控制什么?

它控制的是每个关节角度相对于期望关节角度的动态关系。
也就是说,不直接先管末端 x、y、z,而是管:

  • 关节 1 偏了多少
  • 关节 2 动得快不快
  • 关节 3 要不要更柔一些

本质上就是:

每个关节都像接了一组虚拟的弹簧和阻尼器。


2. 它的优点是什么?

实现更直接

对很多控制器来说,关节层是天然存在的。
你直接在关节层做阻抗,更接近底层执行。

易于做局部调节

某个关节需要更软、更稳、更不容易摆动,可以单独调。

对姿态保持有帮助

有些任务虽然最终看的是末端,但希望某些关节不要太僵硬,或者某些关节更稳,这时关节空间阻抗很有价值。


3. 它的不足是什么?

最大问题是:

任务通常不是按关节描述的,而是按末端描述的。

比如“沿桌面法向柔顺接触”这种需求,用关节语言来想就没那么自然。
因为末端一个简单的直线方向,在不同姿态下会映射成复杂的关节协同运动。

所以关节空间阻抗虽然好实现,但在很多接触任务上,表达能力不如笛卡尔空间阻抗直观。


4. 典型应用场景

自然回位

让机器人偏离某个姿态后,像有弹性一样回到初始姿态。

示教和拖动

让用户拖动某些关节,感受到柔顺性。

关节级安全和顺应

某些关节靠近人,或者某些结构比较脆弱,希望它更“软”。

作为更高层控制的底层执行器

笛卡尔空间阻抗往往最后也要映射到关节力矩,所以关节空间的阻抗思想常常是底层基础。


七、笛卡尔空间阻抗和关节空间阻抗,到底怎么选?

没有绝对谁更好,要看任务。

更适合用笛卡尔空间阻抗的情况

  • 任务按末端工具描述
  • 要与环境接触
  • 要控制接触方向的柔顺性
  • 要做人机协作、表面跟随、插装

更适合用关节空间阻抗的情况

  • 更关注整体姿态或单关节行为
  • 系统底层更容易提供关节控制接口
  • 需要关节级柔顺和回位特性
  • 作为更底层的实现基础

可以粗略理解为:

  • 笛卡尔空间阻抗:更像“任务导向”
  • 关节空间阻抗:更像“执行层导向”

八、阻抗控制不是越软越好,也不是越硬越好

很多人刚接触阻抗控制,会简单地觉得:

  • 软一点更安全
  • 硬一点更精准

这话不能说错,但太粗糙了。

真正的问题是:

在哪个方向软,在哪个方向硬,软硬到什么程度,速度快时要不要更稳。

举个装配例子:

  • 插入方向:可以适当柔顺
  • 横向方向:也许要更柔,以便自动对准
  • 姿态方向:可能要较稳,防止歪斜
  • 离开接触后:又可能希望更刚一些,保证效率

所以实际工程里,阻抗不是一个“总开关”,而是一套要根据任务设计的动态特性。


九、参数整定:最容易让人头大的部分,也是最落地的部分

很多文章讲阻抗控制,前面都讲得很美,到了参数整定就一句带过。
但工程里最关键的,往往就是这里。

参数整定,说白了就是调:

  • 质量 M
  • 刚度 K
  • 阻尼 B

让机器人既稳定,又好用,还能完成任务。


1. 先记住一个总原则

参数整定不是为了“看起来专业”,而是为了让机器人在真实任务里表现合适。

判断标准通常有三个:

稳不稳

会不会抖、振、叫、来回摆

柔不柔

接触时会不会太顶、太硬、太生猛

准不准

该到位时能不能到位,该贴合时能不能贴合

这三个目标经常互相牵制。
所以整定本质上是在做平衡。


2. 刚度 K:决定“回去的决心”

刚度大:

  • 抗偏差能力强
  • 定位更“硬”
  • 更容易保证轨迹
  • 但接触时容易变得生硬
  • 环境稍有误差就可能顶得很厉害

刚度小:

  • 更柔顺
  • 更能适应环境误差
  • 但容易“软塌塌”
  • 定位精度和抗扰能力可能下降

实践建议

  • 自由空间运动:可以适当提高刚度
  • 接触方向:通常不要太高
  • 需要贴合表面时:法向和切向刚度要区分开
  • 易碎工件:优先降低接触相关方向刚度

3. 阻尼 B:决定“会不会抖”

阻尼太小:

  • 动起来很灵
  • 但容易振荡、回弹、发飘

阻尼太大:

  • 很稳
  • 但动作拖沓,响应变慢,手感发闷

阻尼的作用特别像汽车减震器。
没有它,弹簧再好也会来回弹。

实践建议

  • 一旦看到接触后抖动、来回弹、贴不稳,先考虑加阻尼
  • 不是所有问题都靠降刚度解决,很多时候是阻尼不足
  • 高速任务更需要合适阻尼

4. 质量 M:决定“稳重感”和响应速度

质量大:

  • 不容易被外力轻易带跑
  • 感觉更沉稳
  • 但响应慢,拖沓

质量小:

  • 响应灵敏
  • 容易被推动
  • 但也更容易显得轻飘、受扰动影响大

虚拟质量并不一定等于真实物理质量。
它更像你人为设定出来的“动态手感”。

实践建议

  • 人机引导时,适当小一点,便于推动
  • 高速稳定任务,可以适当大一点
  • 接触初期不稳定时,调质量也能改善手感,但通常优先看刚度和阻尼配合

十、一个特别实用的整定思路:不要一上来就三项一起乱调

工程里最怕的就是三个参数一起改,最后根本不知道是谁起作用。

更靠谱的方法是:

第一步:先明确任务目标

不是“我要调一个高级控制器”,而是明确:

  • 是要插装?
  • 是要打磨?
  • 是要人推着走?
  • 是要接触后保持一个柔和压力?

不同任务目标,参数策略完全不一样。


第二步:先定“软硬”

先从刚度入手。
因为刚度最直接决定系统的“态度”。

问自己:

  • 我希望它多大程度坚持目标位置?
  • 我希望它遇到环境时让多少?

先把“硬还是软”定下来。


第三步:再消振

刚度确定大方向后,再调阻尼。
看它是否有:

  • 过冲
  • 回弹
  • 振荡
  • 接触不稳

阻尼的职责是把这些“多余动态”压下去。


第四步:最后调“重量感”

再根据响应速度、可推动性、整体手感调质量。
质量更像是细调动态风格。


十一、按应用场景来给参数整定一些直觉

下面不是绝对值,只是思路。

1. 人机拖动示教

目标:轻推就能动,松手又不会乱晃。

建议思路:

  • 刚度低一些
  • 阻尼中等偏上
  • 虚拟质量不要太大

效果:

  • 人容易推动
  • 机器人不会飘得太厉害
  • 松手后动作比较稳

2. 表面打磨/擦拭

目标:贴住表面,保持平稳接触,不要一颠一颠。

建议思路:

  • 法向方向刚度中低
  • 切向方向根据轨迹要求设置
  • 阻尼适当偏大
  • 姿态方向要保证工具姿态稳定

效果:

  • 遇到表面高低起伏能顺着走
  • 不会忽轻忽重
  • 轨迹相对平稳

3. 插装任务

目标:允许微小误差,避免顶死。

建议思路:

  • 横向方向刚度低一些
  • 插入方向刚度中等
  • 姿态方向根据装配要求调
  • 阻尼不能太小,防止碰撞后抖动

效果:

  • 稍有孔位偏差时能自适应
  • 接触后不容易卡死
  • 插入过程更顺

4. 高精度定位后轻接触

目标:先准确到位,再柔和接触。

建议思路:

  • 自由空间阶段刚度较高
  • 接触阶段切换到较柔顺参数
  • 阻尼在接触阶段适当提高

效果:

  • 空中走位快且准
  • 接触时不生硬
  • 整体效率和稳定性兼顾

这也是工业项目里很常见的方式:
分阶段控制,而不是一套参数打天下。


十二、工程上常见的问题,很多都不是“理论不会”,而是“直觉没建立”

下面这些坑很常见。

1. 一味追求大刚度

觉得越硬越准。
结果一接触就顶、撞、抖。

问题在于:
接触任务里,“环境”本身就是系统的一部分。
你太硬,整个闭环就容易变得激烈。


2. 把阻尼当成可有可无

很多人只盯着刚度。
其实阻尼往往决定“好不好用”。

没有足够阻尼,系统就会像“弹簧床”一样回弹。
用户会觉得机器人不稳、不高级。


3. 没有分方向设计

真实任务经常是各方向要求不同。
比如对桌面法向要柔,对平面内轨迹要稳。
如果所有方向都一个参数,效果通常不会最好。


4. 没有分阶段设计

自由空间和接触空间的需求差别很大。
很多控制问题,不是某个参数“永远不对”,而是场景变了,参数也该变。


十三、如果你是前端开发,为什么也值得理解阻抗控制?

很多前端同学会觉得:
“这些是算法和控制工程师的事,跟我有什么关系?”

其实关系很大。

因为机器人产品不是只有控制器,还有:

  • 示教界面
  • 参数配置面板
  • 状态监控页面
  • 报警提示
  • 日志与诊断
  • 工艺配方编辑
  • 用户操作流程

而阻抗控制最终一定会落到“产品能力”上。

你理解了阻抗控制,做前端时很多东西就不只是“照着字段画表单”。


1. 你会更理解参数配置界面为什么这么设计

比如为什么会有:

  • 笛卡尔刚度
  • 关节阻尼
  • 六维方向分别配置
  • 接触阶段参数
  • 安全阈值

这些不再是抽象字段,而是具体的控制含义。


2. 你会更知道用户真正关心什么

用户不是关心“这个参数名叫什么”,而是关心:

  • 为什么一碰就抖?
  • 为什么推不动?
  • 为什么贴不住表面?
  • 为什么插装老是卡?

前端如果能把参数和行为结果建立关联,产品体验会提升很多。

比如做帮助文案时,不只是写:

阻尼参数

而可以写成:

阻尼越大,动作越平稳,但响应可能变慢。若接触时有回弹或抖动,可适当增大。

这就是非常有价值的产品表达。


3. 你能做出更像“机器人产品”的交互

比如参数调节界面可以:

  • 区分自由空间/接触空间参数
  • 给出按应用场景的预设模板
  • 给出风险提示
  • 配置方向维度的说明图
  • 提供“偏软 / 平衡 / 偏硬”的可视化滑杆
  • 把日志中的抖动、过冲、碰撞等现象和参数联系起来

这些都需要你理解控制背后的含义。


十四、一个真正“讲明白”的总结

阻抗控制最核心的思想,不是记住一堆数学形式,而是理解这句话:

机器人不只是去一个位置,而是要以某种合适的动态方式去接近、接触和响应世界。

而这个“合适的动态方式”,通常就是由质量、弹簧、阻尼来塑造的。


你可以这样记:

质量-弹簧-阻尼模型

定义机器人在受力时的“手感”和动态行为。

笛卡尔空间阻抗

从末端工具出发,适合接触任务、表面跟随、装配、人机协作。

关节空间阻抗

从各个关节出发,适合关节级柔顺、姿态回位和底层实现。

参数整定

本质是在平衡三件事:

  • 稳定性
  • 柔顺性
  • 精度/效率

十五、最后给一个最实用的落地理解

把机器人想成一个“高级交互系统”,而不是一台只会执行坐标的机器。

好的阻抗控制,带来的感觉是:

  • 该准的时候准
  • 该让的时候让
  • 该稳的时候稳
  • 该接触的时候不生硬
  • 该协作的时候不危险

这也是为什么阻抗控制在现代机器人里越来越重要。
它本质上是在回答一个非常现实的问题:

机器人面对真实世界的不确定性,应该如何表现得既聪明,又安全,还好用。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐