6. 阻抗与力控
很多机器人任务不是“移动到某个点”就结束,而是要和环境接触。机械臂插孔、擦桌子、开门,四足落脚,双足支撑,都会遇到接触力。如果只做刚性位置控制,轻微位置误差可能变成很大的冲击力。
阻抗控制和力控的核心问题是:机器人遇到外界时,应该表现得多硬、多软、多顺从。
6.1 位置控制局限
纯位置控制追求:
但接触任务里,环境位置往往不完全准确。例如桌面高度误差 5mm,如果机械臂末端仍然强行到达原目标位置,就会压向桌面。
结果可能是:
- 末端力过大。
- 物体被推开。
- 机械结构受冲击。
- 控制器振荡。
- 驱动器触发保护。
所以接触任务不能只问“位置对不对”,还要问“力是否合理”。
6.2 阻抗控制
阻抗控制把机器人末端设计成虚拟的弹簧阻尼系统:
直觉:
- 刚度高:更像硬机械结构,位置误差小,但接触冲击大。
- 刚度低:更像柔软弹簧,接触安全,但位置误差大。
- 阻尼高:运动更稳,但响应变慢。
- 阻尼低:响应更快,但容易振荡。
阻抗控制不是“不控制位置”,而是在位置和接触力之间建立可调的关系。
6.3 力控关系
力控直接追踪期望接触力:
阻抗控制控制的是力和位移之间的关系:
简单说:
- 力控:我希望接触力是多少。
- 阻抗控制:如果受到外力,我希望机器人像多硬的弹簧。
真实任务里二者经常组合。例如擦桌子时,法向方向控制接触力,切向方向控制轨迹位置。
6.4 任务空间阻抗控制
机械臂末端的任务空间阻抗控制通常先计算末端期望力:
再通过雅可比矩阵转成关节力矩:
这条公式非常重要:
是末端空间的虚拟力。 把末端力映射成关节力矩。- 控制器可以直接调末端方向上的刚度和阻尼。
例如插孔任务里,水平方向可以稍软,让末端自动顺着孔边修正;竖直方向可以控制下压力,避免硬压。
6.5 导纳控制
阻抗控制通常是“给位移误差,输出力”。导纳控制则反过来:
外力输入 -> 虚拟质量弹簧阻尼系统 -> 位置 / 速度修正
如果机器人底层接口只能接受位置命令,而不能直接接受力矩命令,导纳控制更常用。它根据测得的外力修改目标位置,让位置控制器表现出柔顺性。
粗略区分:
| 控制方式 | 输入 | 输出 | 适合接口 |
|---|---|---|---|
| 阻抗控制 | 位置误差 | 力 / 力矩 | 可力矩控制的机械臂 |
| 导纳控制 | 外力 | 位置 / 速度目标 | 位置控制型机械臂 |
6.6 足式接触
足式机器人每一步都在处理接触。足端落地时,如果腿太硬,会产生冲击;如果太软,支撑不足。
常见策略:
- 摆动腿:位置控制,让脚按轨迹落到目标点。
- 支撑腿:阻抗或力控,让脚和地面稳定交换力。
- 质心控制:用 MPC 或全身控制分配足端接触力。
这也是为什么 legged locomotion 里经常出现“关节 PD + 足端阻抗 + 质心 MPC”的组合。
6.7 安全边界
接触控制必须保守。至少要考虑:
- 最大接触力限制。
- 最大关节力矩限制。
- 速度限制。
- 力传感器异常值过滤。
- 接触丢失时切回安全模式。
- 急停和软限位。
接触任务里,调得“很硬很准”不一定是好控制器。能在不确定环境里稳定、柔顺、可恢复,才是更接近真机要求的控制器。