← 全部文章

阻抗控制:让机器人在接触中保持柔顺

  • 机器人学
  • 阻抗控制
  • 柔顺控制
  • 力控制
  • 导纳控制
目录

上一篇文章里,我们用计算力矩控制把动力学模型放进反馈回路,让机械臂在自由空间中更准确地跟踪轨迹。那时,位置误差主要意味着“还没有走到”。

可一旦末端碰到桌面、墙壁或工件,同一份误差就有了完全不同的后果。

假设视觉认为墙面在 x=500 mmx=500\ \mathrm{mm},真实墙面却在 x=495 mmx=495\ \mathrm{mm}。高增益位置控制器仍会努力消除最后 5 mm5\ \mathrm{mm} 的误差;但墙面已经阻止机器人继续前进,此后增加的电机力矩会直接累积为接触力。

接触发生后,评价控制器的标准随之改变:准确到达目标仍然重要,但机器人怎样承受定位误差、怎样回应外力,也必须被明确设计。

当目标与真实环境不完全一致时,机器人应该以怎样的力学特性回应接触?

人的手臂给出了很自然的答案。拿起杯子时,我们可以保持手腕稳定;插入充电头时,又会允许手指沿侧向轻微退让。人体会主动调节手臂的“软硬”和阻尼,让环境参与完成动作,无需在每个瞬间精确计算接触力。

阻抗控制(Impedance Control)把这种能力交给机器人:控制器主动塑造运动与外力之间的动态关系,使机器人表现得像一套可编程的质量—弹簧—阻尼系统。

刚性位置跟踪与阻抗控制面对提前出现的墙面

1. 接触让“位置误差”变成了力

先看最简单的一维情形。末端沿 xx 方向靠近墙面,位置控制器为:

Fc=Kp(xdx)Dx˙F_c =K_p(x_d-x)-D\dot x

在自由空间中,xdxx_d-x 会产生加速度,把末端拉向目标;当末端已经抵住刚性墙面时,位置几乎不能继续变化,于是比例项近似全部变成接触力:

FcontactKp(xdxw)F_{contact}\approx K_p(x_d-x_w)

xwx_w 是真实墙面位置。若控制器认为目标还在墙后,几毫米的几何误差就会被高刚度放大成可观的力。

例如,目标比墙面深 5 mm5\ \mathrm{mm}

  • 刚度为 2000 N/m2000\ \mathrm{N/m} 时,静态力约为 10 N10\ \mathrm{N}
  • 刚度为 10000 N/m10000\ \mathrm{N/m} 时,静态力约为 50 N50\ \mathrm{N}

位置控制依然是装配、打磨和抓取的基础。它在接触任务中留下的关键缺口是:控制器没有明确规定位置偏差应该对应多大的力。

积分项会让问题更加明显。只要目标位置无法到达,误差就持续累积,控制输出不断增大,直到限幅或保护触发。因此,在接触任务中,通常不能把自由空间里的高增益位置环原封不动地搬过来。

阻抗控制把关注点从“彻底清零误差”移到外力响应上:外界施加某个力时,机器人应该偏移多少、以多快的速度退让?

2. 阻抗控制规定的是一条动力学关系

令末端实际位姿相对期望平衡位姿的误差为:

x~=xxd\tilde x=x-x_d

这里先把 xx 理解为一维位置。我们希望末端面对外力 FextF_{ext} 时,满足:

Mdx~¨+Ddx~˙+Kdx~=FextM_d\ddot{\tilde x} +D_d\dot{\tilde x} +K_d\tilde x =F_{ext}

这就是一条期望机械阻抗。其中:

  • MdM_d 决定末端受到冲击后有多“沉”;
  • DdD_d 决定振动消散得有多快;
  • KdK_d 决定偏离平衡点需要多大的静态外力。

如果没有外力,弹簧与阻尼会让末端回到 xdx_d;如果有人持续推它,末端会偏离一段距离,并在新的力学平衡处停下。静态时速度与加速度都为零,因此:

Kdx~=FextK_d\tilde x=F_{ext}

于是 KdK_d 有了明确的机械含义:每偏移一米,需要多少牛顿的外力。它描述的是可测量的力—位移关系,远比“把误差调小”的经验增益具体。

这个定义也解释了“阻抗”这个名字。电路中的阻抗描述电压与电流之间的关系;机械阻抗描述力与运动之间的关系。机器人无需提前知道环境下一刻会施加多大的力,只需预先决定自己受到这份力后如何运动。

期望机械阻抗是一套可编程的质量弹簧阻尼器

从历史上看,Hogan 在 1985 年系统提出阻抗控制时,出发点正是操作任务中机器人与环境不可避免的动态耦合:仅仅分别指定位置或力,都不足以描述这种相互作用。阻抗控制由此从接口层重新定义机器人行为,并贯穿接触发生前后的整个控制过程。

3. 一维触墙:柔顺也能稳定地产生力

“让机器人变软”很容易被理解成削弱推力。虚拟弹簧仍然可以稳定地产生接触力,同时还给出了接触力与几何偏差之间可解释的关系。

设机器人虚拟弹簧刚度为 KrK_r,墙面或工件的等效刚度为 KeK_e。目标平衡点相对未接触位置一共推进了 δ\delta。接触后,这段位移分别由机器人退让量 δr\delta_r 和环境变形量 δe\delta_e 承担:

δ=δr+δe\delta=\delta_r+\delta_e

两边承受同一接触力:

F=Krδr=KeδeF=K_r\delta_r=K_e\delta_e

消去两段变形,得到:

F=KrKeKr+KeδF =\frac{K_rK_e}{K_r+K_e}\,\delta

机器人与环境像两根串联弹簧,二者的刚度共同决定最终接触力。

当墙面很硬,KeK_e\rightarrow\infty,有 FKrδF\approx K_r\delta。这时降低机器人刚度,确实可以降低同样定位误差造成的力;但若工件本身很软,环境变形也会占据很大一部分,接触力将明显低于刚性墙面的估计。

这个结果揭示了阻抗控制最重要的一点:它控制的是机器人与环境之间的交互规律。 环境属性始终参与决定实际接触力。若任务要求法向力严格保持 20 N20\ \mathrm{N},还需要力反馈、环境估计或混合力/位控制;单纯设定刚度无法在所有环境上得到相同结果。

4. 关节空间阻抗:先让每个关节像弹簧

把上一篇文章的刚性机械臂动力学加上外界作用在关节上的广义力矩:

M(q)q¨+c(q,q˙)+g(q)=τ+τextM(q)\ddot q+c(q,\dot q)+g(q) =\tau+\tau_{ext}

对固定目标 qdq_d,定义:

q~=qqd\tilde q=q-q_d

最直接的关节阻抗控制可以写成:

τ=g(q)Kqq~Dqq˙\tau =g(q) -K_q\tilde q -D_q\dot q

代回动力学后:

M(q)q¨+c(q,q˙)+Dqq˙+Kqq~=τextM(q)\ddot q +c(q,\dot q) +D_q\dot q +K_q\tilde q =\tau_{ext}

从每个关节看,它已经具有弹簧和阻尼的行为。重力补偿负责托住机械臂,KqK_q 决定关节偏离目标所需的力矩,DqD_q 抑制振荡。

计算力矩控制和阻抗控制采用了不同的闭环目标:前者尽可能消除跟踪误差,后者保留一份有意设计的可偏移性,让外力能够改变机器人运动。两者仍可共享模型补偿、前馈轨迹和稳定性分析。

关节阻抗实现简单,也天然尊重执行器接口;但任务通常发生在末端。即使每个关节采用相同刚度,末端在各方向的柔顺也可能明显不同。随着构型改变,关节弹簧通过雅可比映射到末端后,方向和大小都会变化。

因此,擦拭桌面、插接连接器或手持示教时,我们更希望直接说:沿法向硬一些,沿切向软一些;姿态要稳,位置可以退让。这就需要笛卡尔阻抗。

5. 笛卡尔阻抗:直接设计工具端的软硬

对六自由度末端,位置部分可以直接相减;姿态误差需要由相对旋转的对数映射得到,直接相减六个坐标会破坏旋转的几何结构。例如:

x~=[ppdLog(RdTR)]\tilde x = \begin{bmatrix} p-p_d\\ \operatorname{Log}(R_d^TR)^\vee \end{bmatrix}

实际实现中,位置误差、旋转向量、速度旋量与控制 Wrench 必须统一表达在同一个坐标系里。随后定义任务空间的弹簧—阻尼 Wrench:

Fc=Kxx~DxV~\mathcal F_c =-K_x\tilde x-D_x\tilde V

再利用雅可比矩阵的对偶映射,把末端 Wrench 变成关节力矩:

τtask=J(q)TFc\tau_{task}=J(q)^T\mathcal F_c

最后加入重力、科里奥利补偿和冗余机器人的零空间项:

τ=JTFc+c(q,q˙)+g(q)+τnull\tau =J^T\mathcal F_c +c(q,\dot q) +g(q) +\tau_{null}

关节阻抗与笛卡尔阻抗的设计对象不同

这条控制律已经非常接近真实力矩机器人的常见实现。libfranka 的官方笛卡尔阻抗示例同样先计算位姿误差和末端速度,再使用 JT(Kxx~DxJq˙)J^T(-K_x\tilde x-D_xJ\dot q) 得到任务力矩,并叠加科里奥利项。

这类实现主要塑造了刚度与阻尼。末端的表观惯性仍由构型相关的操作空间质量矩阵决定,并不会自动变成任意给定的 MdM_d

Λ(q)=[J(q)M(q)1J(q)T]1\Lambda(q) =\left[J(q)M(q)^{-1}J(q)^T\right]^{-1}

完整惯性整形需要更精确的动力学补偿、更高带宽的力矩接口,某些形式还需要外力估计。工程中常说的“笛卡尔阻抗控制”,很多时候其实是阻抗家族中更实用的刚度控制:保留自然惯性,只认真设计弹簧与阻尼。

6. 刚度、阻尼和惯性分别在塑造什么

质量—弹簧—阻尼公式看起来只有三项,但它们不能互相替代。

刚度 KdK_d 决定静态关系。 外力不变时,最终偏移近似为:

x~=Kd1Fext\tilde x_\infty=K_d^{-1}F_{ext}

刚度越大,定位越稳,接触误差产生的力也越大;刚度越小,越容易被引导,但抗扰和几何保持能力下降。

阻尼 DdD_d 决定能量如何消散。 刚度只负责把末端拉回平衡点,不会主动消除运动能量。阻尼太小,接触后会振荡;阻尼过大,动作会迟钝,还可能因为速度估计噪声产生抖动。

期望惯性 MdM_d 决定瞬态加速度。 同样的冲击力下,较小的 MdM_d 会更快退让,较大的 MdM_d 会显得更沉稳。降低可实现惯性会同步提高控制难度:控制器必须更快、更准确地抵消真实机器人惯性,对采样、模型和力测量提出更高要求。

在一维或已经解耦的轴上,常用阻尼比 ζ\zeta 组织参数:

Dd=2ζMdKdD_d=2\zeta\sqrt{M_dK_d}

ζ=1\zeta=1 对应理想二阶系统的临界阻尼。这个标量公式适用于一维或已经解耦的轴;多自由度、非对角矩阵和构型相关惯性需要结合模态或矩阵结构重新设计。libfranka 示例中的 D=2KD=2\sqrt K 隐含了单位质量、对角解耦等简化,适合作为清晰的演示参数,不能直接当作所有机械臂的通用整定定律。

7. 方向性柔顺:刚度矩阵本身就是几何

真正有用的柔顺需要区分方向。插孔时,希望沿孔轴方向容易推进,横向遇到倒角后能够自动对中,同时又要限制姿态倾斜;擦拭表面时,希望法向保持适当接触,切向则跟随轨迹。

因此,KxK_x 应写成对称正定矩阵,用不同方向的特征值分别描述软硬。它对应的虚拟势能为:

U(x~)=12x~TKxx~U(\tilde x) =\frac{1}{2}\tilde x^TK_x\tilde x

KxK_x 的特征向量给出主刚度方向,特征值给出各主方向有多硬。在二维平移平面内,固定能量边界是一条椭圆:短轴对应高刚度,长轴对应低刚度。换句话说,椭圆不仅告诉我们“总体有多软”,还直接画出了“往哪个方向最容易退让”。

刚度矩阵用椭圆画出方向性柔顺

设计六维刚度时还要注意量纲。平移刚度单位是 N/m\mathrm{N/m},转动刚度单位是 Nm/rad\mathrm{N\,m/rad};位置和姿态不能在没有尺度考虑的情况下随意混成同一数值矩阵。工程上通常先在有物理意义的任务坐标系中分别设计平移与转动块,再根据需要加入耦合项。

对于冗余机械臂,任务空间阻抗只约束末端的六维行为,多余自由度仍要由 τnull\tau_{null} 管理。它可以用来远离关节限位、避开奇异位形或保持舒适姿态,但投影方式必须与主任务相容,否则零空间动作也可能泄漏到末端。

8. 阻抗与导纳:相同方程,两种因果方向

阻抗和导纳经常使用同一条质量—弹簧—阻尼方程,却对应不同的控制接口。

阻抗控制: 以运动误差为输入,计算应该施加的 Wrench 或关节力矩:

(x~,V~)Fcτ(\tilde x,\tilde V) \longrightarrow \mathcal F_c \longrightarrow \tau

它最适合能够直接接受关节力矩、并具有较低摩擦和较高控制带宽的机器人。外界推机器人时,运动由真实机械动力学和控制力矩共同产生。

导纳控制(Admittance Control): 以测得的外力为输入,通过一套虚拟动力学计算位姿或速度参考:

FextMax¨r+Dax˙r+Ka(xrxd)=FextxrF_{ext} \longrightarrow M_a\ddot x_r+D_a\dot x_r+K_a(x_r-x_d)=F_{ext} \longrightarrow x_r

随后把 xrx_r 交给机器人已有的位置或速度内环。它很适合不能开放力矩接口、但装有六维力/力矩传感器的工业机器人。

阻抗与导纳采用相反的输入输出因果方向

ROS 2 Control 的官方导纳控制器就采用后一种结构:读取 TCP 力/力矩,使用所选轴上的质量、刚度与阻尼参数计算运动修正,并输出位置和速度参考,必要时还能串接到轨迹控制器之前。

阻抗与导纳各有适用接口。阻抗的效果依赖力矩环、摩擦和模型;导纳的效果依赖力传感器、滤波、虚拟动力学与位置内环。选择时应直接回答三个问题:机器人底层允许控制什么,传感器能够可靠测量什么,以及期望的交互带宽是多少。

9. 阻抗、力控制与碰撞保护各自解决什么

阻抗控制可以让接触力更可预测;精确力控制还需要处理环境刚度、接触位置、摩擦和模型误差。若必须稳定维持抛光压力,通常要在法向加入力反馈;若切向仍要沿路径运动,则可以采用混合力/位控制,或在阻抗外层慢速调节平衡点。

独立安全机制仍然负责约束系统边界。即使稳态刚度很低,接触瞬间的冲击仍由接近速度、真实惯性、结构柔性和控制延迟共同决定。力矩限幅、速度限制、碰撞检测、急停和安全工作空间都不可缺少。

可以把三个目标分开看:

  • 轨迹跟踪 关心机器人是否沿预定运动前进;
  • 阻抗控制 关心运动偏差与交互力之间呈现怎样的关系;
  • 安全系统 关心无论控制算法发生什么,能量、速度和力是否仍在允许边界内。

三层共同完成接触任务,各自承担不同责任。

10. 无源性:为什么理想弹簧到了数字世界会变坏

理想弹簧储存势能,理想阻尼消耗能量。若 KxK_x 对称正定、DxD_x 半正定,一套连续时间的弹簧—阻尼系统具有清楚的能量解释:外界输入的能量要么暂存在弹簧和惯性中,要么被阻尼消耗。这也是阻抗控制特别适合接触的一项深层原因。

然而,真实控制器运行在离散时间里。传感、网络、滤波和执行都会带来延迟;力矩与速度会饱和;用差分估计速度会放大噪声;接触本身还可能包含高频结构模态。这些因素会让数字控制器在某些频率上不再像被动元件,甚至向环境注入能量。

提高刚度会消耗稳定裕度。采样周期越长、延迟越大、结构越柔,能够稳定呈现的刚度上限通常越低。真实调试应从低刚度、较充分阻尼和低接近速度开始,在记录接触力、位姿误差与力矩饱和的同时逐步提高性能。

如果任务涉及刚性接触、高带宽遥操作或显著通信延迟,还需要进一步使用能量罐、被动性观测器/控制器、散射变换等方法显式管理能量。仅凭连续时间公式看起来稳定,并不能自动保证离散实现安全。

11. 一个控制周期里真正发生什么

把公式放回控制器,每个周期可以按下面的因果顺序理解:

  1. 读取 q,q˙q,\dot q,必要时读取末端六维力/力矩;
  2. 用正运动学计算 p,Rp,R,用雅可比计算末端速度 V=Jq˙V=J\dot q
  3. 在明确的控制坐标系中构造位置与姿态误差 x~\tilde x
  4. 根据任务选择 Kx,DxK_x,D_x,计算虚拟弹簧—阻尼 Wrench;
  5. JTJ^T 映射为任务力矩,并加入动力学补偿与零空间力矩;
  6. 执行力矩、速度和功率限幅,再发送给驱动器;
  7. 记录外力、误差、指令力矩与饱和状态,供下一轮整定判断。

参数调整应沿着物理因果关系逐层进行:

  • 先确认重力补偿、负载参数、坐标系和力传感器零偏;
  • 将刚度设低,确认外力方向、姿态误差符号和 JTJ^T 映射正确;
  • 逐轴提高刚度到任务真正需要的水平;
  • 再增加阻尼,抑制振荡但避免速度噪声主导力矩;
  • 最后才提高接近速度、加入力前馈或尝试惯性整形。

若一开始就把刚度设得很高,机器人可能“看起来更准”,却会掩盖符号、坐标系和模型错误。阻抗控制最有价值的地方,恰恰是每个参数都有可测量的机械意义:用已知外力推末端,测静态位移可以检查刚度;观察释放后的衰减可以检查阻尼;记录碰撞初期加速度可以检查表观惯性。

12. 从触墙到插接:柔顺如何替我们吸收误差

回到一个常见的插接任务。视觉给出孔位,轨迹规划器把插头送到孔口附近,但定位仍有毫米级误差。

如果所有方向都采用高刚度位置控制,插头边缘碰到孔口后,横向误差会迅速变成侧向力和卡滞。降低所有方向的刚度虽然安全,却会让推进方向也失去确定性。

更合理的设计是把控制坐标系对齐孔轴:

  • 沿插入轴保持适中的推进刚度,或直接调节法向力;
  • 横向使用较低刚度,让倒角与接触力把插头引向孔心;
  • 对倾斜姿态设置合适的转动刚度,避免边缘楔紧;
  • 在接触阶段降低速度,并监测轴向力、侧向力矩和位移是否进入异常区域。

这种设计会把精度要求分配给真正需要的方向,并让机械交互吸收不可避免的几何误差。路径规划负责把机器人送到正确区域,阻抗在接触后给环境留下修正空间,状态机则决定何时接近、搜索、插入和退出。

于是,上一篇文章与本篇形成了清楚的分工:

  • 在自由空间里,计算力矩控制努力让真实运动贴近期望轨迹;
  • 在接触任务里,阻抗控制主动规定偏离轨迹后应该产生怎样的力学响应。

经过这样的设计,机器人获得了可编程的质量、阻尼、刚度与方向性,能够在接触中呈现预期的机械行为。接下来若继续深入,还可以讨论混合力/位控制、接触状态估计,以及如何把约束和摩擦锥直接放入优化控制。

参考与延伸阅读

  1. Neville Hogan, Impedance Control: An Approach to Manipulation, Part I—Theory, 1985.
  2. Neville Hogan, Impedance Control: An Approach to Manipulation, Part II—Implementation, 1985.
  3. Neville Hogan, Impedance Control: An Approach to Manipulation, Part III—Applications, 1985.
  4. Russ Tedrake, Robotic Manipulation: Manipulator Control, MIT.
  5. Franka Robotics, Cartesian Impedance Control Example, libfranka.
  6. ROS 2 Control, Admittance Controller.