JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

温柔触碰:阻抗、导纳与力控制

当机器人遇到墙、人或孔轴配合时,只控制位置很危险——改为控制它施加多大的力。

为什么纯位置控制一接触就出问题

大多数机械臂都被训练得很擅长一件事:移动到指定位置并僵硬地保持在那里。一个好的 PID 控制器 盯着关节编码器,会用力对抗任何偏差——你推它,它就推回到被命令的位置。在空中运动时,这种刚性正是你想要的:动作干脆而精确。但机器人一碰到坚硬物体,麻烦就来了。

想象你命令夹爪移动到钢制工作台*内部*一毫米处。控制器看到一个它永远无法消除的一毫米误差,于是不断加大力矩,试图到达一个永远到不了的地方。由于钢材几乎不变形,哪怕这一点点过冲也会变成巨大的接触力——机械臂吃力、桌面凹陷,或者触发安全保护。机器人没有出故障;它正是在严格执行位置控制的要求,完全没有「力正在累积」这个概念。

解决办法是不再死守精确位置,而是让机器人的接触行为变得可编程。我们希望能调节机械臂在被推时的软硬程度——有时像夹具一样刚硬,有时像一根可以用手压动的弹簧一样柔顺。这种可编程的柔软度,正是柔顺控制的核心。

阻抗与导纳:互为镜像的两种思路

让机器人产生「弹性」感最干净的办法是 阻抗控制。你不再命令一个位置,而是让机械臂*表现得像一根连到目标点上、可调的弹簧加阻尼器*。你设定一个刚度(被推开时抵抗多大)、一个阻尼(对速度抵抗多大),还可以选配一个虚拟质量。控制器测量机械臂被推离目标多远,然后命令出这段位移所对应的弹簧—阻尼力。用 200 N/m 的刚度把它推开 5 毫米,它就回推 1 牛——温柔而可预测。

impedance:  F_cmd = K (x_target - x) + D (v_target - v)
            in : measured position/velocity   out: a force/torque to apply

admittance: x_target = x_ref + (1/K) * F_measured   (then a stiff position loop tracks x_target)
            in : measured contact force        out: a motion to follow
阻抗:输入位置误差,输出力;导纳:输入测得的力,输出运动。同一条弹簧定律,因果方向相反。

导纳控制 正好是它的镜像。这里你用 力/力矩传感器 *测量*接触力,并把它转换成*运动*:感到一股推力,就像虚拟弹簧那样顺势让开。机器人最终仍表现得像同一根弹簧—阻尼器,但内部的走线方向相反——输入力、输出位置,由一个普通的刚性位置环来完成实际跟踪。

为什么同一根弹簧要有两种做法?因为真实硬件各不相同。阻抗控制在可反驱的机械臂上表现最好——你能推动关节、电机会轻易让步——这类机械臂常用低减速比齿轮、串联弹性执行器(在电机与负载之间故意加一根弹簧),或带有关节级 感测的 谐波减速器。这样的机器人能命令出真实的力。导纳控制则适合刚硬、高减速比、*推不动*的工业机械臂:它们无法伪造柔软的力,于是改为读取腕部力传感器并据此运动。这个选择往往归结到一个特性:可反驱性

力控制与混合控制的妙招

有时你根本不想要弹簧——你想保持一个*特定*的推力。去毛刺工具应当以比如恰好 10 牛的力压住工件,无论表面如何起伏。这就是纯粹的 力控制:设定值是一个力,反馈来自力传感器,控制器让机械臂前进或后退,直到测得的力与目标相符。位置变成了自由变量;力才是你要守住的量。

但大多数真实任务会同时混合这两种需求。擦窗户时,你必须精确地贴着玻璃平面(这是位置任务),*同时*以稳定的力压向它(这是力任务)——而这两个方向彼此垂直。混合位置/力控制 的处理办法是把工作空间按方向拆分:在你必须描画的轴上刚硬并做位置控制,在你产生接触的轴上柔顺并做力控制。两者永不打架,因为每个方向只由其中之一掌管。

  1. 确定任务坐标系——对一个表面来说,就是沿表面的两个方向和一个垂直于表面的方向。
  2. 为每个方向分配角色:路径重要的方向做位置控制,发生接触的方向做力控制。
  3. 在第一组轴上跑位置环,在第二组轴上跑力环,用一个选择矩阵让每个轴只听从其中一个环。
  4. 在任务坐标系中合并这两个指令,再映射回关节力矩去驱动机械臂。

一套可用的心智模型:插装、抛光、手动牵引

想象经典的孔轴配合(插销入孔)。要求销子精确到微米地对准孔位,是很脆弱的——哪怕最小的对不齐都会卡死。而在横向上设置柔软阻抗,销子就能稍微*让一让*,沿着倒角滑动,一边下插一边自动对中。工程师甚至为这种宽容做了一个机械版本,叫做 远程柔顺中心。插装正是柔顺、富接触操作 的教科书案例:向下保持刚硬把销子压到位,横向保持柔软去吸收误差。

抛光和打磨是力控制任务。沿曲面零件的精确路径反而没那么重要,重要的是工具压向它的*压力*;你希望保持恒定的法向力,让表面处理均匀,至于进退位置则交给表面本身决定。手动牵引 协作机器人 是其中最亲切的例子:工人抓住机械臂、带着它走一遍动作,运行阻抗或导纳控制的机器人,只是顺着人的推力流动,而不是与之对抗——正是这种柔顺让它即便被撞到也很安全。

那么该如何选择方案?先问关于硬件的两个问题。第一,机械臂能被推动吗? 带关节力矩感测的可反驱机械臂偏向阻抗控制,可以做到快速、柔软、反应灵敏。刚硬的减速机械臂则偏向带腕部 力/力矩传感器 的导纳控制。第二,任务要守住的是什么——是路径还是力? 描画一个形状:位置控制。保持一个压力:力控制。触碰一个人或不确定的表面:柔软阻抗。大多数任务想要的是一种有意为之的混合,而这正是混合控制被发明出来要表达的东西。