想象你推一扇挂着弹簧的门。门既不会纹丝不动,也不会轰然敞开——你越用力,它开得越大;收手时,它又缓缓回弹。这种“力道与动作之间的默契”,正是机器人模仿人类触觉的关键。揉面、拧瓶盖、扶老人,都靠这种细腻的力觉。机器人的“力控”就是教它知道该使多大劲,“阻抗控制”则是教它像弹簧一样,既配合又节制。本文不从吓人的公式讲起,而是借这扇弹簧门,带你弄懂力控与阻抗控制的原理、算法与应用,让冷冰冰的机械臂学会“温柔”。

岗位关联

掌握力控与阻抗控制,你就读懂了机器人打磨、装配、人机协作背后的触觉智能,是迈向机器人感知与自动化方向的重要基本功。

目录
  1. 可视化演示
  2. 力控基础概念
  3. 阻抗控制原理
  4. 力位混合控制
  5. 力估计与零力控制
  6. 性能指标与整定
  7. 典型应用场景
  8. 智能优化策略
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示机器人阻抗控制原理:弹簧-阻尼系统建模、刚度/阻尼参数调节对力-位响应的影响、以及柔顺接触交互过程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

阻抗控制模型 弹簧-阻尼系统模拟期望的力-位关系 刚度K决定位置刚性,阻尼B决定运动平滑性 外力作用下机器人表现出虚拟柔顺性 F = K(xₐ−x) + B(ẋₐ−ẋ) 阻抗控制实现可调节的力-位交互行为

力控基础概念

你第一次推那扇弹簧门时,手掌会先贴上去感受一下:门是沉沉的重木门,还是轻飘飘的玻璃门?触觉给大脑传递“阻力有多强、表面多硬”的信息。机器人的力控,就是给机械臂装上类似的“手掌感官”——让它不再盲目地按预设轨迹挥动,而是随时感知指尖传来的接触力。

传统机器人只会“位置控制”:说好走到哪就走到哪,哪怕前方是脆弱的工件也照撞不误。力控则把目标从“位置”换成“力”:机械臂悬停在空中时,传感器测到接触力大了,就轻轻后退;力不够,就缓慢推进。这个闭环中,力传感器相当于门的“触觉神经”,控制器相当于门轴的“肌肉反应”,二者配合才构成完整的力觉系统。

力控的第一个技术细节是传感器标定。六维力/力矩传感器输出的原始电压值必须经过零偏去除和矩阵标定,才能换算成真实的牛顿力。其线性模型可写成测量值等于标定系数乘电压偏移。在此基础上,工程师还需要区分“自由空间接触力”与“重力/惯性力”,否则机械臂自身的重量会被误判为外部负载。

回到弹簧门:门框上那根弹簧的松紧,决定了你推门时的“手感”。力控中,刚度与柔顺是一对孪生概念——刚度描述抵抗变形的能力,柔顺描述顺从外力而变形的能力。有了这两种能力,机械臂才能像老练的管家帮你扶门一样:既挡得住风雨,又不会夹到客人的手。

阻抗控制原理

弹簧门的秘密藏在铰链里:一根弹簧加一个阻尼器。你推得快,阻尼器就会“拖后腿”让门开得平稳;你推得重,弹簧压缩量大,门就开得大;松手后,弹簧又把门拉回原位。这种“力与运动之间的关系”,就是阻抗控制的思想源头——机器人不再是僵硬的位置跟随者,而是一个动态的“质量-弹簧-阻尼”系统。

阻抗控制的精髓,在于不直接控制力或位置,而是刻意设定一个“力-位置动态关系”:当外界环境推机器人时,机器人表现出预设的柔顺特性;当机器人主动推环境时,接触力又按期望的规律增长。控制目标如弹簧门的手感一样,由三个参数决定:质量 M、阻尼 B、刚度 K。

Fe=Md(x¨d−x¨)+Bd(x˙d−x˙)+Kd(xd−x)\displaystyle F_e = M_d(\ddot{x}_d-\ddot{x}) + B_d(\dot{x}_d-\dot{x}) + K_d(x_d-x)

1. 偏差的定义:期望轨迹与实际轨迹的差,是所有力反应的起点

e=xd−xe = x_d - x

2. 刚度项:位置偏差乘刚度系数,相当于弹簧被压缩的距离越大力越大

KdeK_d e

3. 阻尼项:速度偏差乘阻尼系数,像阻尼器一样阻止快速变化

Bde˙B_d \dot{e}

4. 惯性项:加速度偏差乘质量,体现机器人抵抗状态突变的“惯性脾气”

Mde¨M_d \ddot{e}

5. 合成:三股力量叠加,恰好等于机器人感受到的接触力

Fe=Mde¨+Bde˙+KdeF_e = M_d \ddot{e} + B_d \dot{e} + K_d e

回到弹簧门。你推门时感受到的回弹力,正是弹簧的刚度项;你猛地一推,门却不会弹伤你,靠的是阻尼项缓冲;门本身的沉重感,则是质量项。阻抗控制让机械臂拥有了同一套“生活方式”——面对外力时先柔顺地让开,再按参数设定的性格把力回馈给环境。

力位混合控制

有时推弹簧门不止一个动作:你想让门开到某个角度,又不想让门扇撞到身后的小朋友。这时候一只手推门板控制角度,另一只手轻轻扶着门框控制力度——两个动作同时进行,互不干扰。力位混合控制干的就是这件事:让机器人在某些方向严格跟踪位置,在另一些方向严格遵守力的大小。

为什么不能全程都用阻抗控制?因为有些任务(如插孔装配)要求水平方向精确到位、垂直方向只许用恒定压力。阻抗控制把力与位置耦合在一起,难以分别满足两个方向截然不同的要求。于是工程师引入了“选择矩阵”:把任务空间拆成两个正交子空间,一个归力控管,一个归位控管。

τ=S JTFcmd+(I−S) Kp (xd−x)\displaystyle \tau = S\, J^T F_{\text{cmd}} + (I-S)\, K_p\, (x_d - x)

1. 选择矩阵:对角线元素为 0 或 1,指明每个自由度归谁管

S=diag(s1,s2,…,sn),si∈{0,1}S = \mathrm{diag}(s_1, s_2, \ldots, s_n), \quad s_i \in \{0,1\}

2. 力控通道:选中方向上的期望力经过雅可比变换,折算成关节力矩

τforce=S JTFcmd\tau_{\text{force}} = S\, J^T F_{\text{cmd}}

3. 位控通道:未选中方向用位置偏差比例控制,保证轨迹精度

τpos=(I−S) Kp (xd−x)\tau_{\text{pos}} = (I-S)\, K_p\, (x_d - x)

4. 合成:两个通道的力矩相加,实现同一条机械臂上的“左手扶门、右手推门”

τ=τforce+τpos\tau = \tau_{\text{force}} + \tau_{\text{pos}}

力位混合看似简单,难点在切换策略:装配任务中,机械臂先快速接近(位控),接触后立刻切到力控;而打磨任务则始终在法线方向用力控、切向方向用位控。这就像你先用力推开门,再稳稳扶住门让它慢慢回弹——每个时刻都要选择最合适的那只手。

力估计与零力控制

如果门铰链上没有弹簧,你还能感觉到门的阻力吗?当然能——手会从门扇的移动速度和门缝的挤压力判断出来。同样,机器人的关节电流里就藏着力信息:电机出力越大,电流越大;位置偏差越大,说明外部推力越大。这就是“无传感器力估计”的朴素逻辑。

直接使用昂贵的六维力传感器会增加成本和故障点,工业界常用“电流+动力学模型”估算法:通过机器人动力学方程算出期望力矩,再与实际驱动电流换算的力矩比较,差值就近似为外部接触力矩。这种估计就像你看门轴转动的滞涩感,判断有人在推门——不需要装额外的“推力计”。

零力控制是力估计的重要应用:机械臂处于失重般的悬浮状态,人手轻轻一推,它就顺着你的力道运动,这叫“拖动示教”。原理上,控制器不断估计外部接触力,再生成与之相反的补偿力矩,抵消重力和摩擦力,让机械臂“漂浮”起来。工程师还需要处理奇异构型——某些关节角度下雅可比矩阵退化,力估计会失效或爆炸,必须提前规避或切换算法。

门的比喻依然有效:零力控制相当于给门上了“失重弹簧”,你一根手指就能拨动沉重的铁门;奇异构型则像门轴卡死时不能硬掰,得换个角度再推。有了这些技术,机器人才能被工人当成“同事”而不是“铁疙瘩”。

性能指标与整定

一扇好弹簧门的手感怎么评价?有人喜欢回弹干脆,有人喜欢缓慢柔和,但所有人都讨厌门在风中疯狂摆动。机器人的阻抗控制手感,同样需要用性能指标来量化:动态刚度、跟踪精度、稳定裕度、阻尼比,缺一不可。

动态刚度描述“接触力变化时位移如何响应”,等价于阻抗方程中刚度 K 与环境刚度 Ke 的串联效果;跟踪精度则是实际力与期望力的偏差均值,偏差越小手感越“听话”;稳定裕度则关乎安全——参数选得不合适,机械臂会像失控的门一样振荡甚至弹飞。整定参数时,工程师常借助两个核心指标:

C=ΔxΔF=1Kd+Ke,ζ=Bd2MdKd\displaystyle C = \frac{\Delta x}{\Delta F} = \frac{1}{K_d + K_e}, \qquad \zeta = \frac{B_d}{2\sqrt{M_d K_d}}

1. 柔顺性:位移变化量与力变化量之比,直观反映“推得动、沉得住”

C=ΔxΔFC = \frac{\Delta x}{\Delta F}

2. 串联刚度:控制器刚度和环境刚度像两个串联弹簧,总刚度取更弱的那一方

C=1Kd+KeC = \frac{1}{K_d + K_e}

3. 阻尼比:用阻尼、质量、刚度三个参数合成一个无量纲数,判断振荡倾向

ζ=Bd2MdKd\zeta = \frac{B_d}{2\sqrt{M_d K_d}}

调参时有个反直觉规律:为了追求“柔顺”,有人把 K 设得极小,结果机械臂轻飘飘地压不住工件;有人把 B 设得很大,结果动作缓慢如蜗牛。好手感来自平衡——就像调弹簧门的液压杆:太紧推不动,太松会回弹砸人,必须根据门重和用途反复试配。

典型应用场景

弹簧门在不同场合有不同使命:商场的门要轻快,医院的防辐射门要沉稳,家里的门要防夹手。机器人的力控与阻抗控制,也因场景差异演化出多种形态。

精密装配是力位混合控制的主场。传统位置控制将销钉插入孔中,稍微错位就会卡死甚至崩断;引入力控后,机械臂在插入方向监测接触力,一旦超过阈值就轻微调整姿态,像人手摸索着戴手套一样“边感觉边插”。汽车变速箱齿轮装配、手机摄像头模组压合,都靠这一招把成功率从“碰运气”提升到99%以上。

表面打磨与抛光要求恒力接触。工件形状有误差,机器人若死守轨迹就会一会儿压太紧一会儿压太松。阻抗控制让磨头像贴在墙上的抹布——墙面高低起伏,磨头顺势起伏,法向压力始终稳定,表面光洁度大幅提升。康复外骨骼则是变阻抗的经典:患者肌肉有力时,外骨骼减小阻尼让患者自主发力;患者疲劳时,外骨骼增加辅助力,像一位懂得“放手与托举”的康复师。

人机协作场景最考验柔顺性。协作机械臂在搬运重物时,人类轻轻一推,它立刻顺从让位;检测到撞击时,它能在几毫秒内退缩停止——这正是阻抗控制“力-位置动态关系”带来的安全本能。弹簧门教会我们的道理,在这里变成了保护血肉之躯的防线。

智能优化策略

普通的弹簧门在出厂时就固定了阻尼,但聪明的门会学习:白天风力大时自动调紧,老人通过时自动调松。传统阻抗控制参数固定,面对复杂多变的工况常常力不从心——于是工程师开始让机器人“自己调弹簧”。

变阻抗控制是第一步:刚度与阻尼不再一成不变,而是根据任务阶段实时调整。例如装配开始时提高阻尼防止碰撞振荡,插入过程中降低刚度让机械臂顺从孔壁引导,插入到底再加大刚度稳定保持。这种像“智能门”一样的参数切换,显著提升了复杂任务的鲁棒性。

更进一步的学习柔顺,则是用强化学习或示教学习,从多次尝试中自动寻找最优阻抗参数组合。机器人每次失败,就像人推门时被夹了手,下次会调整推门的角度和速度。算法将“接触力超限”作为负回报、“装配成功”作为正回报,逐步逼近最优的 K 和 B。力位关联策略则让两个方向的控制互相配合——法线的刚度影响切线的摩擦阻力,切线的位置误差又反过来影响法线的接触深度,形成多维感知闭环。

回到门的故事:从固定弹簧门到液压自动门,再到能识别行人步伐的智能门——阻抗控制的进化路径,正是让机器人在“刚”与“柔”之间找到最优平衡点的过程。这门手艺,将来会铺满每一间需要与人类触摸的工厂车间。

---

AI 应用场景

精密装配:变速箱齿轮压装

阶段:机器人智能与学习 → 力位混合控制

解决的问题:传统位置控制装配时,齿轮与轴的微小位姿误差会导致卡死或划伤。力控实时感知接触力,在误差超限时主动调整姿态,像人手戴手套时“试探着推进”,避免硬压损坏工件。

具体案例:某汽车工厂的六轴机械臂安装变速箱齿轮,使用六维力传感器与力位混合控制:水平方向严格跟踪轨迹,垂直方向限制最大压入力为 120 N。装配成功率从 87% 提升至 99.6%,换型时间缩短 30%。

表面打磨:恒力抛光工作站

阶段:机器人智能与学习 → 阻抗控制

解决的问题:铸件表面不平整,位置控制下磨头压力忽大忽小,导致过磨和漏磨。阻抗控制把磨头变成“有弹性的抹布”,法向压力恒定,适应工件起伏。

具体案例:卫浴五金抛光线上,机器人以 15 N 恒力打磨水龙头壳体,使用阻抗控制参数 K=800 N/m、B=120 N·s/m。打磨后表面粗糙度 Ra 从 3.2 μm 降到 0.4 μm,良率提升 25%。

康复外骨骼:自适应步态训练

阶段:机器人智能与学习 → 变阻抗控制

解决的问题:每个患者的肌力恢复程度不同,固定助力的外骨骼会“过度代偿”或“帮助不足”。变阻抗控制根据患者步态相位实时调节阻尼,让患者尽量主动发力。

具体案例:下肢康复外骨骼在足跟着地期使用高阻尼支撑体重,在摆动期切换为低阻尼让患者自由迈步,膝关节屈曲角度误差 < 3°。经过 8 周训练,患者独立行走能力评分平均提升 41%。

Python 演示

python55 行
import math class SpringDamper:    """阻抗控制的机械模型:质量-弹簧-阻尼二阶系统"""    def __init__(self, mass, stiffness, damping):        self.mass = mass        self.stiffness = stiffness        self.damping = damping        self.pos = 0.0        self.vel = 0.0     def step(self, external_force, dt):        acceleration = (external_force - self.damping * self.vel                        - self.stiffness * self.pos) / self.mass        self.vel += acceleration * dt        self.pos += self.vel * dt        return self.pos  class ForceController:    """PI 力控制器:把力误差转换为期望力指令"""    def __init__(self, kp, ki):        self.kp = kp        self.ki = ki        self.integral = 0.0     def update(self, target_force, measured_force, dt):        error = target_force - measured_force        self.integral += error * dt        return self.kp * error + self.ki * self.integral  def simulate(env_stiffness=300.0, kp=0.02, ki=0.06,             duration=4.0, dt=0.001):    robot = SpringDamper(mass=5.0, stiffness=20.0, damping=15.0)    controller = ForceController(kp, ki)    target = 5.0    t, times, forces = 0.0, [], []    while t < duration:        contact_force = max(0.0, env_stiffness * robot.pos)        command = controller.update(target, contact_force, dt)        robot.step(command, dt)        t += dt        if int(t * 1000) % 50 == 0:            times.append(t)            forces.append(contact_force)    return times, forces  if __name__ == "__main__":    times, forces = simulate()    print("time(s)  force(N)")    for t, f in zip(times[::10], forces[::10]):        print(f"{t:.2f}     {f:.2f}")    print(f"稳态平均力: {sum(forces[-50:]) / 50:.2f} N (目标 5.00 N)")
目的:用 Python 模拟一台“力觉机器人”——阻抗模型受 PI 力控制器驱动,与刚度为 300 N/m 的环境接触,最终把接触力收敛到目标值 5 N。
  1. class SpringDamper:定义阻抗模型,相当于给机器人装上“弹簧门性格”:位置受外力、阻尼、刚度共同影响
  2. acceleration = (external_force - self.damping * self.vel ...正是阻抗方程的核心:净力除以质量得到加速度
  3. class ForceController:PI 力控制器,负责把“当前力与目标力的差距”换算成下一步推门的力度
  4. contact_force = max(0.0, env_stiffness * robot.pos)接触力 = 环境刚度 × 压入深度,模拟手指按在门上的反作用力
  5. command = controller.update(target, contact_force, dt)力控制器发出期望力指令,形成闭环
  6. print(f"稳态平均力: ...")输出验证:力控最终稳定在目标值附近

常见误区

误区很多初学者以为阻抗控制就是调低刚度让机械臂“软趴趴”,越软就越柔顺越安全。

正解阻抗控制并不等同于“软”。它定义的是力与位移的动态关系:刚度 K 决定稳态位移,阻尼 B 决定过渡过程,质量 M 决定惯性响应。合适的阻抗参数可能很“硬”但依然柔顺——比如装配插入阶段,高刚度能保证对中性,同时依靠阻尼避免碰撞振荡。柔顺的本质是“能感知力并及时让步”,而不是一味退让。

为何常见:因为“柔顺”这个词让人直觉联想到柔软、松垮,而忽略了阻抗控制中刚度和阻尼本身就是主动设定的参数。

误区没有六维力传感器的机器人就做不了力控,力觉全靠硬件感知。

正解传感器的确是直接手段,但工程中常用“无传感器力估计”:从关节电流、位置误差和动力学模型反推接触力矩。就像你看门轴滞涩就知道有人推门——不需要专门的推力计。这种方式成本低、可靠性高,很多协作机器人拖动示教就是靠电流环估算实现零力控制。当然,精度要求极高的精密装配仍需要力传感器。

为何常见:初学者接触的多是“力传感器→力控”的经典框图,忽略了现代控制中基于模型的观察器方法。

误区为了人机协作安全,把阻抗控制的刚度 K 调到很小,觉得机器人“一推就退”绝对安全。

正解刚度太低会导致两个问题:一是稳态误差巨大,机器人没法完成精确任务,像弹簧门关不严;二是与环境构成的闭环系统可能失稳——低刚度配合高阻尼不足时,机械臂会缓慢漂移甚至振荡。安全不是单靠“软”实现的,而是靠合理的阻尼、快速响应和位置-力协同约束共同保证。

为何常见:人被硬物撞到会疼,直觉认为“越软越安全”,忽略了机器人动态行为与稳定性之间的耦合。

误区把力位混合控制理解为按时间先后切换——先用力控接触,再切换到位控运行。

正解真正的力位混合是同时在正交子空间上并行控制:选择矩阵 S 划定的方向用力控,其余方向用位控,两者互不干扰。例如打磨时法线方向恒力、切线方向跟踪轨迹,同一个瞬间两种控制都在运行。时间上的先后切换叫“力/位切换控制”,是另一种策略,不可混淆。

为何常见:人理解“混合”时容易类比开关切换,而忽略了矩阵正交分解的同步并行思想。

面试题

Q1. 力控与位控最根本的区别是什么?

单选题 · easy

  • A.力控直接控制接触力,位控跟踪轨迹位置← 正确答案
  • B.力控需要更多传感器,位控不需要任何传感器
  • C.力控只适合打磨,位控只适合搬运
  • D.力控速度更快,位控精度更高

答案:A。力控以接触力为目标,位控以位置轨迹为目标。就像推弹簧门:位控只关心门开多大,力控关心推门的力度。B 错在无传感器也能力估,C 把两种控制的应用场景绝对化了,D 混淆了控制目标与性能指标。

Q2. 阻抗控制中“阻尼”参数的主要作用是什么?

单选题 · easy

  • A.决定稳态接触力的大小
  • B.抑制振荡、提高稳定性← 正确答案
  • C.增大机器人的整体刚度
  • D.提高位置跟踪的精度

答案:B。阻尼消耗能量,让门不至于来回弹晃。稳态力由刚度 K 决定,A 错;阻尼不改变刚度,C 错;阻尼主要影响过渡过程而非稳态精度,D 不准确。

Q3. 保持期望力不变,增大阻抗刚度 K,稳态位移将如何变化?

单选题 · mid

  • A.增大
  • B.不变
  • C.减小← 正确答案
  • D.先增大后减小

答案:C。阻抗方程中稳态时有 F = K·Δx,K 增大则同样的力产生的位移减小。就像弹簧门调得更紧时,同样推力门只能开更小的缝。A、B、D 不符合串联刚度的基本关系。

Q4. 力位混合控制中“选择矩阵”的作用是什么?

单选题 · mid

  • A.消除位置控制误差
  • B.将力任务与位任务正交分解← 正确答案
  • C.提高传感器的采样频率
  • D.完全替代力传感器的功能

答案:B。选择矩阵 S 用 0/1 对角元把任务空间分成力子空间和位子空间,两个方向同时控制。它不直接消除误差(A 错)、不涉及采样频率(C 错)、也不替代传感器(D 错),就像交通指挥只为车流分流。

Q5. 无传感器力估计可以依据哪些信号?(多选)

多选题 · mid

  • A.关节驱动电流← 正确答案
  • B.位置误差与动力学模型← 正确答案
  • C.相机拍摄的彩色图像
  • D.环境温湿度传感器

答案:AB。电流反映电机出力,位置误差结合动力学模型可反推外部力矩,都是现代力估计的主要依据。视觉图像属于感知层但与关节力估计无直接数学模型联系,温湿度更无关。

Q6. 零力控制最主要的工程应用场景是什么?

单选题 · hard

  • A.提高电机额定功率
  • B.实现人工拖动示教← 正确答案
  • C.降低减速机速比
  • D.增强视觉识别精度

答案:B。零力控制通过补偿重力与摩擦力,让机械臂像失重一样被轻推即动,工人可握住末端直接示教轨迹。它不改变电机功率(A)、减速比(C)或视觉精度(D),而是控制层面的“悬浮感”。

Q7. 阻抗控制方程式中 e = x_d − x 表示什么?

单选题 · mid

  • A.期望位置与实际位置的偏差← 正确答案
  • B.期望力与实际力的偏差
  • C.期望速度与实际速度的偏差
  • D.控制刚度与环境刚度的比

答案:A。x_d 是期望位置,x 是实际位置,两者之差是位置偏差。该偏差经刚度放大后作为弹簧力项。B 是力控制器的误差,C 是其导数项,D 是概念混淆。

Q8. 以下哪些因素可能导致阻抗控制系统失稳?(多选)

多选题 · hard

  • A.阻尼设置过小← 正确答案
  • B.环境刚度过高← 正确答案
  • C.控制周期过长← 正确答案
  • D.期望位置恒等于初始位置

答案:ABC。阻尼过小会持续振荡,环境刚度过高使系统特征根右移,控制周期过长相当于引入大延迟——三者都是失稳的典型原因。期望位置等于初始位置只是静态设定,不会直接引发失稳。

Q9. 环境刚度为 K_e、控制器刚度为 K_d 时,系统的整体柔顺性 C 是多少?

单选题 · extreme

  • A.C = K_d + K_e
  • B.C = 1 / (K_d + K_e)← 正确答案
  • C.C = K_d × K_e
  • D.C = 1 / (K_d × K_e)

答案:B。柔顺性是刚度的倒数,两个刚度串联时总刚度为 K_d + K_e,因此 C = 1/(K_d + K_e)。A 是总刚度而非柔顺性;C 是刚度并联的乘积项无物理含义;D 把串联刚度写成乘积形式。

Q10. 变阻抗控制可以应用于哪些机器人场景?(多选)

多选题 · easy

  • A.康复训练中根据患者肌力调节阻力← 正确答案
  • B.打磨时实时调整接触刚度← 正确答案
  • C.语音助手唤醒词识别
  • D.图像分类数据增强

答案:AB。变阻抗控制实时改变刚度与阻尼,康复外骨骼按肌力调阻尼、打磨机器人按工件曲率调刚度都是典型应用。语音识别和图像分类属于感知算法,与力控无关。