4. 导纳控制原理:定义、对偶性与典型结构

好,咱们接着聊柔顺控制。上一章我们把阻抗控制讲透了,这一章来聊聊它的“另一半”——导纳控制。

说实话,我刚入行那会儿,总觉得导纳控制和阻抗控制就是一回事,无非是名字换着叫。直到有一次调试一个精密装配的机器人,怎么调都调不好,后来才发现是我把两者的角色搞反了。嗯,从那以后,我就再也不敢小看这个“对偶性”了。

4.1 导纳控制的定义

导纳控制,说白了就是“你推我,我就动”。

它的核心思想是:机器人测量外部施加的力,然后根据这个力来调整自己的位置或速度

你想想看,如果你用手推一个导纳控制的机器人,它会顺着你的力方向移动。你推得轻,它动得慢;你推得重,它动得快。就像推一个装了弹簧的滑块,但比弹簧更“聪明”。

从数学上讲,导纳控制描述的是这样一个关系:

力(输入) → 导纳控制器 → 运动(输出)

这里的“导纳”二字,借用了电路理论中的概念。在电路里,导纳是阻抗的倒数,描述的是“电压驱动电流”的关系。在机器人里,导纳描述的是“力驱动运动”的关系。

导纳控制的本质: 力传感器检测到外力 → 控制器计算期望运动 → 位置/速度内环跟踪这个期望运动。

我个人习惯把导纳控制叫做“力-运动”型控制。因为它把力当作原因,运动当作结果。这个因果关系很重要,后面讲对偶性的时候你就明白了。

4.2 与阻抗控制的对比:对偶性

阻抗控制和导纳控制,就像一枚硬币的两面。它们解决的是同一个问题——柔顺交互,但走的是完全相反的路。

我画了一张对比表,你看完就清楚了:

对比维度 阻抗控制 导纳控制
输入 位置偏差(运动) 外力(力)
输出 力/力矩 位置/速度
因果关系 运动 → 力 力 → 运动
典型应用 高刚度环境、冲击吸收 低刚度环境、精密装配
传感器需求 位置传感器(编码器) 力/力矩传感器
控制内环 力控制内环 位置/速度控制内环

你看,这两者刚好是反过来的。阻抗控制是“你动我,我就推你”,导纳控制是“你推我,我就动”。

为什么会这样?其实很好理解。在物理世界里,阻抗和导纳本来就是一对对偶概念。阻抗描述的是“阻碍运动”的能力,导纳描述的是“允许运动”的能力。

我记得有一次在项目评审会上,一个年轻工程师问我:“那我该用阻抗控制还是导纳控制?”

我的回答是:看你的机器人硬件更擅长什么

  • 如果你的机器人有高精度的力传感器,但位置控制精度一般——用导纳控制。因为你能测准力,然后让位置环去跟踪。
  • 如果你的机器人有高精度的位置控制,但力传感器噪声大——用阻抗控制。因为你能测准位置偏差,然后用力环去响应。

说白了,就是“扬长避短”。

4.3 导纳控制器的典型结构

好,理论讲完了,咱们来看看导纳控制器到底长什么样。

下面这张图是我用SVG画的导纳控制典型结构,你一看就明白:

导纳控制典型结构框图 外力 F_ext 力传感器 导纳控制器 M_d, B_d, K_d 位置/速度内环 机器人 实际位置/速度反馈 期望位置 x_d 输入:力 输出:运动

这个结构图里,关键点有三个:

  1. 力传感器:测量外部施加的力。精度很关键,我见过太多项目因为力传感器噪声大,导纳控制抖得像筛糠。
  2. 导纳控制器:核心计算单元。它接收力信号,输出期望的位置或速度。这里需要设定三个参数——虚拟质量 M_d、虚拟阻尼 B_d、虚拟刚度 K_d。
  3. 位置/速度内环:执行层。它负责让机器人实际运动跟上导纳控制器算出来的期望运动。

导纳控制器的数学模型长这样:

M_d * (ẍ_d - ẍ_0) + B_d * (ẋ_d - ẋ_0) + K_d * (x_d - x_0) = F_ext

其中:

  • x_d 是期望位置
  • x_0 是平衡位置(没有外力时的位置)
  • F_ext 是测量的外力
  • M_d, B_d, K_d 是导纳参数

这个方程说白了就是:外力被虚拟的弹簧-阻尼-质量系统消化掉了。你推它,它就像在粘稠的液体里移动一样,有惯性、有阻尼、有弹性。

调试小技巧: 我建议你刚开始调试时,先把 K_d 设大一点(比如 1000 N/m),B_d 设中等(比如 50 N·s/m),M_d 设小(比如 1 kg)。这样机器人会表现得像一块“硬海绵”——有弹性但不晃。等系统稳定了,再慢慢调软。

4.4 导纳参数怎么调?

参数调优这块,我踩过不少坑。给你几个实战经验:

  • K_d(刚度):决定机器人“多硬”。K_d 越大,机器人越不愿意偏离平衡位置。做精密装配时,K_d 要小一点,让机器人“顺从”。
  • B_d(阻尼):决定机器人“多粘”。B_d 越大,运动越平滑,但响应也越慢。我一般从 30 N·s/m 开始试。
  • M_d(质量):决定机器人“多重”。M_d 越大,启动和停止越慢。这个参数我通常设得比较小,除非需要模拟重物。

警告: 千万不要把 B_d 设成 0!我曾经在一次演示中犯了这错误,结果机器人一碰就剧烈震荡,差点把旁边的示教器撞飞。阻尼是导纳控制的“安全带”,没有它,系统就是欠阻尼的,会振荡。

4.5 什么时候用导纳控制?

根据我的经验,以下场景特别适合导纳控制:

  • 精密装配:比如轴孔装配,需要机器人顺着外力微调位置。
  • 人机协作:比如拖动示教,人推机器人,机器人跟着走。
  • 打磨抛光:需要保持恒定的接触力,同时适应工件表面的起伏。

反过来,如果环境刚度很高(比如机器人顶着一堵墙),导纳控制就容易出问题。因为力传感器测到的力会瞬间变大,控制器会命令机器人快速后退,容易失稳。这时候阻抗控制反而更合适。

好了,导纳控制的核心内容就这些。记住一句话:导纳控制是“力驱动运动”,阻抗控制是“运动驱动力”。搞清楚了这一点,你就掌握了柔顺控制的半壁江山。