4、控制参数整定:PID参数对抖动的影响、陷波滤波器设计与应用、加速度前馈补偿技术

控制参数整定,说白了就是给机器人“调手感”。

我见过太多团队,硬件做得挺扎实,一上电就开始抖。不是高频啸叫,就是低频晃悠。最后查来查去,问题出在参数上。这一章,咱们就把PID、陷波滤波器和前馈补偿这三板斧讲透。

4.1 PID参数对抖动的影响

PID三个字母,每个都跟抖动有关系。我习惯把它们拆开看:

  • P(比例):反应快,但太大会让系统“硬碰硬”,产生高频抖动。
  • I(积分):消除静差,但积分饱和会让响应变慢,甚至出现低频振荡。
  • D(微分):预测未来,但噪声敏感。微分项放太大,电机端子能听到滋滋声。

为什么会这样?

你想想看,P增益高了,相当于弹簧变硬。硬弹簧一推就弹回来,来回几次就抖起来了。D增益高了,相当于阻尼器太敏感,连传感器噪声都被放大,反而引入高频振动。

核心原则:先调P,再调I,最后微调D。P给到系统开始轻微振荡,然后退一半。I给到静差消除即可,别贪多。D能不用就不用,实在要用,先加低通滤波。

我在项目中遇到过一台双足机器人,走路时髋关节一直在15Hz左右抖动。一开始以为是结构共振,后来发现是P增益设到了80,降到45之后,抖动立刻消失。嗯,有时候问题就是这么简单。

4.2 陷波滤波器设计与应用

当机械结构存在固有频率,PID怎么调都压不住的时候,就该陷波滤波器上场了。

陷波滤波器,说白了就是一个“定向消除器”。它只干掉某个特定频率的信号,其他频率不受影响。对于机器人关节控制来说,这是处理结构共振的利器。

我常用的二阶数字陷波滤波器传递函数长这样:

H(z) = (1 - 2*cos(ω0)*z^(-1) + z^(-2)) / (1 - 2*r*cos(ω0)*z^(-1) + r^2*z^(-2))

其中:
ω0 = 2*π*f0/fs    // 陷波中心频率
r  = 0.95~0.99    // 陷波深度控制,越接近1越窄
fs = 采样频率

设计步骤我一般这么走:

  1. 扫频找共振点:给关节扫频信号,看哪个频率振幅最大。
  2. 确定陷波频率:f0 就设在这个共振频率上。
  3. 选择陷波深度:r 从0.98开始试。太深会损失相位裕度,太浅压不住。
  4. 验证效果:再扫一次频,看共振峰是否被削平。

我的经验:陷波滤波器不要串联太多,一般1~2个就够了。超过3个,相位滞后会明显影响系统稳定性。我曾经在一个六轴机器人上串了4个陷波器,结果低频响应变得一塌糊涂,最后拆掉两个才恢复正常。

注意:陷波滤波器会引入相位滞后。如果陷波频率刚好在系统穿越频率附近,可能导致稳定性下降。建议在加入陷波后重新测量一次开环伯德图。

4.3 加速度前馈补偿技术

前馈补偿,是让机器人“提前知道”要干什么。

PID是事后纠偏——等误差出来了才去调整。前馈是事前预测——根据目标轨迹直接给一个补偿量。两者配合,效果最好。

加速度前馈,专门用来补偿惯性力。人形机器人跑步、跳跃时,关节需要克服巨大的惯性力矩。如果只靠PID,误差会很大,抖动也会跟着来。

公式很简单:

τ_ff = J * q_ddot_des

其中:
τ_ff       = 前馈力矩
J          = 关节等效惯量(包含电机转子惯量+负载惯量)
q_ddot_des = 目标角加速度

实际实现时,我习惯把前馈加到电流环的输入端:

// 伪代码示例
float computeTorqueCommand(float q_des, float q_dot_des, float q_ddot_des,
                           float q_cur, float q_dot_cur) {
    // PID反馈项
    float err_pos = q_des - q_cur;
    float err_vel = q_dot_des - q_dot_cur;
    float tau_fb = Kp * err_pos + Kd * err_vel;
    
    // 加速度前馈项
    float tau_ff = J_eff * q_ddot_des;
    
    // 总力矩指令
    return tau_fb + tau_ff;
}

这里有个坑——惯量辨识。J_eff 如果给不准,前馈反而会添乱。我一般用两种方法获取:

方法 原理 精度 适用场景
CAD估算 从三维模型直接读取惯量 中等 静态结构,负载变化小
系统辨识 给激励信号,用最小二乘法拟合 高 变负载、变姿态场景

我曾经在一个人形机器人膝关节上试过,不加前馈时,跑步动作的跟踪误差有5度,加上加速度前馈后,误差降到了0.8度。抖动也明显减轻了。

4.4 三者协同:一个完整的整定流程

PID、陷波滤波器、加速度前馈,不是各自为战,而是协同工作。我总结了一套流程:

  1. 先做机械检查:确保没有松动、间隙过大等硬件问题。
  2. 粗调PID:让系统能稳定运行,不追求极致性能。
  3. 扫频找共振:确定需要抑制的频率点。
  4. 设计陷波滤波器:削掉共振峰。
  5. 精调PID:在陷波基础上,适当提高增益。
  6. 加入加速度前馈:补偿惯性力,减少跟踪误差。
  7. 整体验证:跑典型工况,确认抖动消除。

下面这张图,是我习惯用的整定逻辑框架:

控制参数整定协同流程 ① 机械检查 ② 粗调PID ③ 扫频找共振 ④ 设计陷波滤波器 ⑤ 精调PID ⑥ 加速度前馈 虚线表示加速度前馈可与精调PID并行迭代,最终统一验证

这套流程我用了很多年,基本没出过大问题。当然,每个机器人都有自己的脾气,参数不可能一次到位。多试几次,多记录数据,慢慢就能找到手感。

一个小技巧:每次改参数之前,先把当前参数组保存下来。我习惯用时间戳命名,比如 pid_20241015_1423.yaml。这样改坏了还能退回去,不至于从头再来。

控制参数整定,说到底就是跟机器人“对话”。你给它一个参数,它回你一个动作。抖了,就松一点;慢了,就紧一点。多听、多看、多试,总能找到那个平衡点。