3、关节空间力矩控制:PD+重力补偿控制、计算力矩法、鲁棒控制基础

各位同学,今天我们来聊聊关节空间的力矩控制。说实话,力矩控制是机器人控制里最「物理」的一种方式——你直接跟电机说「你给我出多大力」,而不是「你转到哪个位置」。这两种思路的差别,就像你让一个人「把杯子拿稳」和「把手臂绷紧」的区别。

我个人习惯把力矩控制分成三个层次:简单补偿型、精确模型型、对抗不确定型。今天我们就按这个顺序来。

3.1 PD+重力补偿控制

先从一个最直观的场景说起。你想想看,一个六轴机械臂悬在半空,如果关节电机不给力矩,它会怎么样?——掉下来。因为重力一直在拉着它。

所以最简单的力矩控制,就是先算出一个「抵消重力」的力矩,然后在这个基础上做PD控制。公式长这样:

τ = G(q) + Kp * (q_d - q) + Kd * (dq_d - dq)

这里 G(q) 就是重力补偿项。Kp和Kd是PD增益,负责把关节拉到目标位置。

核心思想:先把重力「扛住」,剩下的力气用来做位置跟踪。

我在项目中遇到过一个问题:有些同学把Kp调得特别大,觉得这样跟踪快。结果呢?机械臂抖得像筛糠一样。为什么?因为重力补偿项本身就有误差——你算的G(q)是基于模型参数的,但实际连杆质量、质心位置总有偏差。Kp一大,这点误差就被放大了。

我的经验:Kp先从小往大调,调到出现轻微抖动就退回来20%。Kd可以稍微大一点,增加阻尼感。说白了,让机械臂感觉「黏黏的」就对了。

PD+重力补偿的优点是简单、可靠。缺点也很明显——它本质上还是个位置控制,只是加了前馈。如果你想做柔顺控制、力跟踪,它就不够用了。

3.2 计算力矩法

好,接下来我们上一个台阶。计算力矩法(Computed Torque Control)是力矩控制里的「标准答案」之一。它的思路很漂亮:

既然机器人的动力学方程是:

M(q) * ddq + C(q, dq) * dq + G(q) = τ

那我能不能直接「反解」出需要的力矩?比如我想要一个期望的加速度 ddq_des,那我直接算:

τ = M(q) * ddq_des + C(q, dq) * dq + G(q)

这不就完了吗?——嗯,理论上是的。但实际中我们通常把 ddq_des 设计成PD形式:

ddq_des = ddq_d + Kv * (dq_d - dq) + Kp * (q_d - q)

代入后得到完整的控制律:

τ = M(q) * [ddq_d + Kv * e_dot + Kp * e] + C(q, dq) * dq + G(q)

其中 e = q_d - q,e_dot = dq_d - dq。

这个方法的本质:把非线性系统通过反馈线性化,变成一个二阶线性系统。然后你就可以用线性控制理论随便玩了。

我记得第一次在仿真里跑通计算力矩法时,那个跟踪精度让我吃了一惊——位置误差直接收敛到0.001弧度以内。但别高兴太早,这玩意对模型精度要求极高。

避坑指南:我曾经在一个项目里直接用标称参数做计算力矩控制,结果实际机械臂抖得比PD还厉害。后来一查,M矩阵里的惯性参数误差超过了15%。计算力矩法对M矩阵的误差尤其敏感——你想想看,M矩阵是加速度的系数,它错了,你算出来的力矩方向都可能不对。

所以我的建议是:如果你有准确的动力学模型(比如通过参数辨识得到的),计算力矩法效果非常好。但如果模型很粗糙,不如用PD+重力补偿来得稳。

3.3 鲁棒控制基础

说到模型不准确,那就不得不提鲁棒控制了。鲁棒控制说白了就是——「我知道我的模型不准,但我还是想控制好」。

在力矩控制里,最经典的鲁棒方法就是给计算力矩法加一个「补偿项」。比如:

τ = M_hat(q) * [ddq_d + Kv * e_dot + Kp * e] + C_hat * dq + G_hat + τ_robust

这里的 M_hat、C_hat、G_hat 是名义模型(不准确的模型),τ_robust 就是用来对抗模型误差的。

常见的鲁棒项设计有几种:

  • 滑模控制:τ_robust = K * sign(s),其中s是滑模面。简单粗暴,但会有抖振。
  • 自适应边界层:用饱和函数代替符号函数,减少抖振。
  • 扰动观测器:把模型误差和外部扰动一起估计出来,然后补偿掉。

我个人比较喜欢扰动观测器的方法。为什么呢?因为它更「优雅」——你不是硬抗误差,而是先估计它,再消除它。

一个小技巧:如果你用扰动观测器,低通滤波器的截止频率很关键。太高了会把噪声放大,太低了补偿滞后。我一般从10Hz开始试,看实际效果再调。

下面我用一张图来总结这三种方法的关系:

关节空间力矩控制方法对比 PD+重力补偿 τ = G(q) + Kp·e + Kd·ė 优点:简单、可靠 缺点:本质是位置控制 适用:低速、轻载 计算力矩法 τ = M·[ddq_d+Kv·ė+Kp·e] + C·dq + G 优点:精度高、响应快 缺点:依赖精确模型 适用:模型准确时 鲁棒控制 τ = τ_nominal + τ_robust 滑模 / 自适应 / 扰动观测器 优点:抗模型误差 缺点:设计复杂、可能抖振 适用:模型不准确时 增加模型 增加鲁棒项 模型精度越高 → 计算力矩法越优;模型越差 → 鲁棒控制越必要

最后说一句,这三种方法不是互斥的。我在实际项目中经常这样搭配:

  • 用PD+重力补偿做日常的点位运动,简单够用
  • 需要高速高精度轨迹跟踪时切换到计算力矩法
  • 如果发现模型参数变了(比如换了末端工具),就打开鲁棒补偿

嗯,关节空间的力矩控制就讲到这里。记住一个原则:控制器的复杂度,应该和模型的不确定性成反比。模型越准,控制器可以越简单直接;模型越差,越需要鲁棒手段来兜底。

核心要点回顾:

  • PD+重力补偿:扛住重力,再做PD位置跟踪
  • 计算力矩法:反馈线性化,把非线性系统变线性
  • 鲁棒控制:用补偿项对抗模型误差

可可精品资料库