跳到主要内容

6. 阻抗与力控

很多机器人任务不是“移动到某个点”就结束,而是要和环境接触。机械臂插孔、擦桌子、开门,四足落脚,双足支撑,都会遇到接触力。如果只做刚性位置控制,轻微位置误差可能变成很大的冲击力。

阻抗控制和力控的核心问题是:机器人遇到外界时,应该表现得多硬、多软、多顺从。

6.1 位置控制局限

纯位置控制追求:

但接触任务里,环境位置往往不完全准确。例如桌面高度误差 5mm,如果机械臂末端仍然强行到达原目标位置,就会压向桌面。

结果可能是:

  • 末端力过大。
  • 物体被推开。
  • 机械结构受冲击。
  • 控制器振荡。
  • 驱动器触发保护。

所以接触任务不能只问“位置对不对”,还要问“力是否合理”。

6.2 阻抗控制

阻抗控制把机器人末端设计成虚拟的弹簧阻尼系统:

是刚度, 是阻尼。

直觉:

  • 刚度高:更像硬机械结构,位置误差小,但接触冲击大。
  • 刚度低:更像柔软弹簧,接触安全,但位置误差大。
  • 阻尼高:运动更稳,但响应变慢。
  • 阻尼低:响应更快,但容易振荡。

阻抗控制不是“不控制位置”,而是在位置和接触力之间建立可调的关系。

6.3 力控关系

力控直接追踪期望接触力:

阻抗控制控制的是力和位移之间的关系:

简单说:

  • 力控:我希望接触力是多少。
  • 阻抗控制:如果受到外力,我希望机器人像多硬的弹簧。

真实任务里二者经常组合。例如擦桌子时,法向方向控制接触力,切向方向控制轨迹位置。

6.4 任务空间阻抗控制

机械臂末端的任务空间阻抗控制通常先计算末端期望力:

再通过雅可比矩阵转成关节力矩:

这条公式非常重要:

  • 是末端空间的虚拟力。
  • 把末端力映射成关节力矩。
  • 控制器可以直接调末端方向上的刚度和阻尼。

例如插孔任务里,水平方向可以稍软,让末端自动顺着孔边修正;竖直方向可以控制下压力,避免硬压。

6.5 导纳控制

阻抗控制通常是“给位移误差,输出力”。导纳控制则反过来:

外力输入 -> 虚拟质量弹簧阻尼系统 -> 位置 / 速度修正

如果机器人底层接口只能接受位置命令,而不能直接接受力矩命令,导纳控制更常用。它根据测得的外力修改目标位置,让位置控制器表现出柔顺性。

粗略区分:

控制方式输入输出适合接口
阻抗控制位置误差力 / 力矩可力矩控制的机械臂
导纳控制外力位置 / 速度目标位置控制型机械臂

6.6 足式接触

足式机器人每一步都在处理接触。足端落地时,如果腿太硬,会产生冲击;如果太软,支撑不足。

常见策略:

  • 摆动腿:位置控制,让脚按轨迹落到目标点。
  • 支撑腿:阻抗或力控,让脚和地面稳定交换力。
  • 质心控制:用 MPC 或全身控制分配足端接触力。

这也是为什么 legged locomotion 里经常出现“关节 PD + 足端阻抗 + 质心 MPC”的组合。

6.7 安全边界

接触控制必须保守。至少要考虑:

  • 最大接触力限制。
  • 最大关节力矩限制。
  • 速度限制。
  • 力传感器异常值过滤。
  • 接触丢失时切回安全模式。
  • 急停和软限位。

接触任务里,调得“很硬很准”不一定是好控制器。能在不确定环境里稳定、柔顺、可恢复,才是更接近真机要求的控制器。