091 力控制:阻抗控制与导纳控制
从一次机器人撞坏夹具说起
去年调试一台六轴协作机器人,做精密装配。力控参数调了一周,结果在某个姿态下,机器人突然“发疯”,直接把气动夹具怼变形了。事后复盘,发现是阻抗控制里的刚度矩阵设错了——不是数值大小的问题,是坐标系搞反了。更离谱的是,当时用的开源库默认是导纳控制模式,我当阻抗控制调了三天。
这种坑,踩过的人自然懂。力控制不像位置控制,调个PID就能跑。它涉及两个看似相似、实则天差地别的概念:阻抗控制和导纳控制。今天这篇笔记,就把这两个东西掰开揉碎,结合我调试时踩过的坑,说清楚。
先搞清楚“谁主动谁被动”
很多教材上来就甩公式:F = K*(X_d - X) + B*(V_d - V) + M*(A_d - A)。公式没错,但容易让人误解——以为阻抗和导纳只是数学上的对偶关系,换一下输入输出就行。
实际工程里,这两个东西的物理实现完全不同。
阻抗控制(Impedance Control)的核心思想是:机器人表现出一个“阻抗”特性。你推它,它像弹簧一样弹回来。这里的“你”是环境,机器人是被动的。机器人内部跑的是位置环,外部力信号作为扰动,通过修改位置指令来响应。
导纳控制(Admittance Control)正好反过来:机器人表现出一个“导纳”特性。你推它,它顺着你的力方向走。机器人内部跑的是力环,外部位置信号作为参考,通过修改力指令来响应。
简单粗暴的