4、笛卡尔空间力矩控制:阻抗控制导论、力位混合控制、操作空间控制

各位做机器人控制的朋友,咱们今天聊点硬核的——笛卡尔空间下的力矩控制。说实话,关节空间的控制做多了,你会发现很多任务其实是在末端执行器上完成的。比如打磨、装配、人机交互,这些场景下,你真正关心的是末端的位置和力,而不是每个关节转了多少度。

我个人习惯把笛卡尔空间的控制策略分成三大流派:阻抗控制、力位混合控制、操作空间控制。它们各有各的脾气,也各有各的适用场景。咱们一个一个来拆解。

4.1 阻抗控制导论

阻抗控制,说白了就是让机器人末端表现出「弹簧-阻尼」的特性。你推它,它让一让;你拉它,它跟一跟。不是硬碰硬,而是有弹性的交互。

为什么会这样?因为很多任务不需要精确的力控制,只需要一个柔顺的行为。比如你让机器人扶着杯子,你抽走杯子,它不会死命抓着,而是顺着你的动作移动。

阻抗控制的核心公式其实很简单:

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

其中 M_d、B_d、K_d 是你设定的虚拟惯量、阻尼和刚度。x_d 是期望轨迹,x 是实际轨迹,F_ext 是外部力。

嗯,这里要注意:阻抗控制不是直接控制力,而是通过调整位置偏差来间接控制力。你想想看,如果你把刚度 K_d 设得很大,那一点点位置偏差就会产生很大的力,机器人就变「硬」了。反过来,K_d 设小一点,机器人就「软」了。

我的经验: 调阻抗参数时,我建议先调阻尼比。阻尼比在 0.7~1.0 之间比较稳。阻尼太小,机器人会震荡;阻尼太大,响应太慢。我在做医疗机器人项目时,曾经把阻尼设得太小,结果末端一直在抖,像得了帕金森一样。后来把阻尼比调到 0.8,立马稳了。

4.2 力位混合控制

力位混合控制,这个名字听起来挺唬人,其实思路很直接:在有些方向上控制位置,在另一些方向上控制力。比如你让机器人擦桌子,垂直方向要控制力(别把桌子压坏了),水平方向要控制位置(擦干净)。

它的核心思想是「任务空间分解」。你需要定义一个选择矩阵 S,把笛卡尔空间分成两个子空间:

  • 位置控制子空间:S 矩阵中对应位置控制的方向为 1
  • 力控制子空间:I - S 矩阵中对应力控制的方向为 1

控制律可以写成:

τ = J^T [ S * F_pos + (I - S) * F_force ]

其中 F_pos 是位置控制器的输出,F_force 是力控制器的输出,J^T 是雅可比矩阵的转置,把笛卡尔空间的力映射到关节力矩。

避坑指南: 我曾经在装配任务中吃过亏。当时把 Z 方向设为力控制,X、Y 方向设为位置控制。结果工件一接触,X 方向的位置误差导致侧向力很大,直接把零件挤变形了。后来我加了过渡逻辑:在接触瞬间,所有方向先切到力控制,等稳定了再切回混合模式。

力位混合控制有个天然的问题:切换瞬间容易产生冲击。你想想看,位置控制时关节是刚性的,突然切到力控制,力矩指令会跳变。我建议加一个低通滤波器,或者用平滑过渡函数,比如 sigmoid 函数来过渡。

4.3 操作空间控制

操作空间控制(Operational Space Control),这是 Khatib 老爷子提出的经典方法。它的核心思想是:直接在笛卡尔空间设计控制律,然后通过动力学映射得到关节力矩。

完整的操作空间控制律长这样:

τ = J^T * Λ * [ ẍ_d + K_d * (ẋ_d - ẋ) + K_p * (x_d - x) ] + N^T * τ_null

其中 Λ 是操作空间惯性矩阵,N 是零空间投影矩阵,τ_null 是零空间控制(比如避关节限位、优化关节角度)。

这里有个关键点:Λ 不是常数,它随机器人构型变化。所以你需要实时计算:

Λ = (J * M(q)^(-1) * J^T)^(-1)

M(q) 是关节空间惯性矩阵,J 是雅可比矩阵。

重要提醒: 操作空间控制的计算量比较大,因为要实时求逆。我建议用数值稳定的方法,比如 Cholesky 分解,而不是直接求逆。另外,当机器人接近奇异位形时,Λ 会变得病态,这时候要加阻尼项或者切换到关节空间控制。

我个人习惯在操作空间控制中加一个「零空间优化」模块。比如让机器人在执行末端任务的同时,尽量让关节远离限位。这个在工业机器人上特别有用,因为很多 6 轴机器人的关节 3 和关节 5 容易碰到限位。

4.4 三种方法的对比与选择

方法 核心思想 适用场景 计算量 我的推荐
阻抗控制 通过位置偏差间接控制力 人机交互、柔顺装配 低 新手入门首选
力位混合控制 不同方向分别控制位置和力 打磨、抛光、擦洗 中 需要明确任务分解时
操作空间控制 直接笛卡尔空间动力学控制 高速高精度、零空间优化 高 有实时计算能力时

你可能会问:到底选哪个?我的建议是:

  • 如果你刚开始做力矩控制,从阻抗控制入手。参数少,好理解,不容易出事。
  • 如果你的任务有明确的方向性(比如垂直方向要控力,水平方向要控位),用力位混合控制。
  • 如果你需要同时优化末端运动和关节运动,或者对动态性能要求很高,上操作空间控制。

4.5 知识体系结构图

下面这张图展示了本章的核心逻辑,我画成了 SVG,方便你理解三种方法之间的关系:

笛卡尔空间力矩控制知识体系 笛卡尔空间力矩控制 阻抗控制 M_d, B_d, K_d 参数整定 间接力控制:位置偏差→力 力位混合控制 选择矩阵 S 分解任务空间 方向独立:位置/力分别控制 操作空间控制 Λ = (J M⁻¹ Jᵀ)⁻¹ 实时计算 零空间优化:避限位/关节优化 选择依据:任务需求 → 计算能力 → 控制精度

这张图把三种方法的定位和核心要点都串起来了。你可以看到,阻抗控制偏「软」,力位混合控制偏「灵活」,操作空间控制偏「精确」。没有的好坏,只有合不合适的场景。

一个小技巧: 在实际项目中,我经常把三种方法混着用。比如在操作空间控制的框架下,对某些方向用力位混合的思想,对另一些方向用阻抗的思想。这叫「混合阻抗控制」,效果往往比单一方法好。

好了,这一章的内容就到这里。笛卡尔空间的力矩控制是个大话题,但核心就是这三板斧。你先把阻抗控制跑通,再慢慢往力位混合和操作空间控制上靠。记住,控制算法不是越复杂越好,能稳定完成任务才是王道。

可可精品资料库