导纳控制 vs 阻抗控制:两种范式的区别与联系

说实话,我刚入行那会儿,也被这两个概念绕晕过。阻抗控制?导纳控制?听起来像是一对双胞胎,但实际用起来却天差地别。今天我就把这块硬骨头啃碎了讲给你听。

先搞清楚一个核心问题:谁在主动,谁在被动?

我个人习惯用一个比喻来理解:阻抗控制是「弹簧人」,导纳控制是「海绵人」

  • 阻抗控制:机器人主动表现出「阻抗」特性。你推它,它像弹簧一样弹回来。机器人是主动方,它决定自己的刚度、阻尼。
  • 导纳控制:机器人被动接受外力,然后调整位置。你推它,它顺着你的力走。机器人是被动方,它感知外力再响应。

说白了,一个控制力,一个控制位置。但实际工程中,界限没那么清晰。

核心区别一句话总结:

阻抗控制:给定位置偏差 → 输出力(机器人主动发力)

导纳控制:给定外力 → 输出位置修正(机器人被动跟随)

数学上怎么区分?

我们来看最经典的二阶系统模型:

阻抗控制:F = M * (ẍ_d - ẍ) + B * (ẋ_d - ẋ) + K * (x_d - x)
导纳控制:ẍ = F_ext / M_d + (B_d / M_d) * ẋ + (K_d / M_d) * x

嗯,这里要注意:阻抗控制是「力 = 函数(位置)」,导纳控制是「位置 = 函数(力)」。互为逆关系。

我在项目中遇到过一位同事,死活搞混这两个公式。他问我:「为什么我写的阻抗控制代码,机器人一碰就飞?」我一看,他把外力当成了输入,位置当成了输出——这不就是导纳控制嘛!

什么时候用阻抗控制?

你想想看,阻抗控制最适合的场景是:机器人需要主动保持刚性,或者需要精确控制接触力

  • 装配任务:比如轴孔装配,机器人需要主动施加一个力,同时允许微小位置偏差。我做过一个轴承压装项目,用阻抗控制,刚度设到2000N/m,效果很稳。
  • 打磨抛光:需要恒力接触表面。阻抗控制可以直接控制接触力大小。
  • 人机协作中的主动避让:机器人主动降低刚度,让人能推动它。

我的经验:阻抗控制对机器人动力学模型要求高。如果你用的机器人关节摩擦力大、减速器背隙明显,阻抗控制效果会打折扣。我曾经在一台旧机器人上试过,调了三天参数,最后还是换成了导纳控制。

什么时候用导纳控制?

导纳控制更适合:机器人需要精确跟踪位置,同时对外力做出柔顺响应

  • 医疗手术机器人:医生推着机器人末端,机器人需要精确跟随医生的手部动作。导纳控制天生适合这种「力引导位置」的场景。
  • 遥操作主从控制:操作者施加力,从端机器人复现位置。我做过一个遥操作拆弹项目,导纳控制让操作手感非常自然。
  • 人机物理交互:比如康复机器人,需要根据患者施加的力来辅助运动。

避坑指南:我曾经在一个力传感器噪声很大的项目里用导纳控制,结果机器人一直在抖。后来发现,导纳控制对力信号质量极其敏感。如果你用的力传感器精度不够,建议先做低通滤波,或者干脆换阻抗控制。

一张图看懂两种范式

下面这张SVG图,是我自己画的核心逻辑对比。你看完应该就全明白了。

阻抗控制 vs 导纳控制:核心逻辑对比 阻抗控制 导纳控制 输入:期望位置 x_d 计算位置偏差 Δx = x_d - x 输出力 F = K·Δx + B·Δẋ 机器人主动发力 特点:主动控制力,被动响应位置 输入:外力 F_ext 计算期望加速度 ẍ = F_ext / M_d 输出位置修正 Δx 机器人被动跟随 特点:被动响应力,主动控制位置 ✅ 适合:恒力控制、装配、打磨 ✅ 适合:力引导、遥操作、康复

实际调参中的选择策略

我个人的经验是:先看你的硬件条件,再选控制范式

条件 推荐范式 原因
有力传感器,且精度高 导纳控制 可以直接利用外力信号,响应更自然
无力传感器,只有关节力矩 阻抗控制 不需要外力测量,靠位置偏差计算力
机器人动力学模型准确 阻抗控制 可以精确补偿惯性、科里奥利力
需要高精度位置跟踪 导纳控制 位置环在内部,精度更高
环境刚度很大(如金属接触) 阻抗控制 导纳控制容易因力噪声导致震荡
人机交互,需要自然手感 导纳控制 力到位置的映射更符合人的直觉

一个实用技巧:很多工业机器人控制器内部其实同时实现了两种范式。你可以把阻抗控制看作「外环力控+内环位置控」,导纳控制看作「外环位置控+内环力控」。实际项目中,我经常在同一个任务里切换使用——粗调阶段用阻抗控制保证安全,精调阶段用导纳控制保证精度。

最后说点实在的

你可能会问:「那我到底该学哪个?」我的建议是:两个都要会,但先精通一个

如果你做的是工业机器人应用,比如焊接、搬运、装配,先从阻抗控制入手。因为工业机器人本身位置控制精度高,阻抗控制更容易实现。

如果你做人机交互、医疗、服务机器人,先从导纳控制入手。因为这些场景需要机器人「听话」,导纳控制的手感更自然。

我记得有一次调试一个协作机器人,客户要求机器人既能主动施力(拧螺丝),又能被动跟随(人工示教)。最后我用了阻抗控制做拧螺丝,导纳控制做示教,两个范式在同一个控制器里切换。效果出奇的好。

嗯,这就是我对这两种范式的理解。说白了,没有绝对的好坏,只有合不合适的场景。


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