第4章 PID控制在轨迹跟踪中的应用:位置式PID、增量式PID、参数整定方法

PID控制,说白了就是三个字:比例、积分、微分。很多刚入行的朋友觉得这东西太老了,都什么年代了还用PID?我刚开始做移动机器人那会儿也这么想,直到在真实硬件上跑现代控制算法时被各种问题折磨得够呛,才老老实实回来把PID吃透。

其实在轨迹跟踪这个领域,PID依然是工业界最广泛使用的算法。为什么?因为它简单、可靠、可解释性强。你想想看,一个现场调试工程师,拿着示波器就能调参,出了问题能快速定位,这比那些黑箱式的神经网络实用太多了。

核心观点:PID控制不是万能的,但不懂PID是万万不能的。在轨迹跟踪中,PID负责的是“当前位置与目标位置的偏差修正”,是整个控制链路中最基础也最关键的一环。

4.1 位置式PID:最直观的偏差修正

位置式PID,也叫全量式PID。它的输出直接就是控制量,比如电机的PWM占空比、舵机的角度值。公式长这样:

u(k) = Kp * e(k) + Ki * Σe(i) + Kd * [e(k) - e(k-1)]

其中:

  • e(k):当前时刻的偏差(目标位置 - 当前位置)
  • Σe(i):从启动到现在的偏差累积和
  • e(k) - e(k-1):偏差的变化率

我在做AGV(自动导引车)项目时,一开始用的就是位置式PID。效果嘛,直线跟踪还行,但一到弯道就出问题——积分项累积得太大,过弯时控制量饱和,车子直接冲出去了。这就是位置式PID的一个典型问题:积分饱和。

避坑指南:位置式PID的积分项是“历史总账”。一旦系统长时间存在偏差(比如被卡住),积分项会累积到非常大的值。当偏差消除后,这个巨大的积分值还会持续输出,导致严重的超调。我曾经在调试一个机械臂时,就因为积分饱和导致末端执行器直接撞上了限位块,差点把传感器干废了。

位置式PID的优点是结构清晰,适合理论分析。但实际工程中,我很少直接用它,除非系统对积分饱和有专门的抗饱和处理。

4.2 增量式PID:工程界的宠儿

增量式PID,顾名思义,它输出的是控制量的增量,而不是全量。公式如下:

Δu(k) = Kp * [e(k) - e(k-1)] + Ki * e(k) + Kd * [e(k) - 2*e(k-1) + e(k-2)]

最终的控制量:

u(k) = u(k-1) + Δu(k)

为什么增量式PID在工程中更受欢迎?我总结了三个原因:

  1. 无积分饱和问题:增量式只计算最近几次偏差的变化,没有历史累积。即使执行器被卡住,恢复后也不会出现巨大的控制量跳变。
  2. 抗扰动能力强:误操作或传感器瞬间跳变,只会影响当前周期的增量,不会污染整个控制历史。
  3. 便于切换控制模式:从手动控制切换到自动控制时,增量式PID只需要从当前输出值开始累加增量,不会产生冲击。

我记得有一次在调试四轮差速底盘时,电机驱动器偶尔会丢脉冲。用位置式PID时,每次丢脉冲都会导致积分项异常,底盘跑着跑着就偏了。换成增量式PID后,问题迎刃而解——因为增量式只关心“最近的变化”,丢脉冲的影响只持续几个周期就消失了。

个人经验:在轨迹跟踪中,我通常对位置环用增量式PID,对速度环用位置式PID。为什么?位置环需要平滑输出,避免积分饱和;速度环需要快速响应,位置式的全量输出更直接。这个搭配我在多个项目中验证过,效果不错。

4.3 位置式 vs 增量式:一张表说清楚

对比维度 位置式PID 增量式PID
输出形式 全量控制值 控制增量
积分饱和 容易发生 不会发生
误操作影响 持续影响 单周期影响
手动/自动切换 需要特殊处理 天然平滑
计算量 较小 稍大(需存储历史值)
适用场景 理论分析、速度环 位置环、工程实践

4.4 参数整定方法:从玄学到科学

调PID参数,是每个做控制的工程师都绕不开的坎。我刚入行时,调参全靠“玄学”——先给个Kp,看响应,再调Ki,再调Kd,来回折腾半天。后来总结出一套系统方法,效率高多了。

4.4.1 经验试凑法(最常用)

这个方法的核心是:先比例,后积分,再微分。

  1. 调Kp:Ki和Kd设为0,逐渐增大Kp直到系统出现等幅振荡。记录此时的Kp(称为临界增益Ku)和振荡周期Tu。
  2. 调Ki:引入积分项,消除稳态误差。Ki从Kp/Tu开始试,观察响应速度。
  3. 调Kd:加入微分项,抑制超调。Kd从Kp*Tu/8开始试,注意微分对噪声的放大作用。

经验公式(Ziegler-Nichols法):

  • P控制器:Kp = 0.5 * Ku
  • PI控制器:Kp = 0.45 * Ku, Ki = 1.2 * Kp / Tu
  • PID控制器:Kp = 0.6 * Ku, Ki = 2 * Kp / Tu, Kd = Kp * Tu / 8

这个方法我用了很多年,但要注意:它只适用于线性系统。如果你的系统有严重的非线性(比如摩擦、间隙),这些公式只能作为初始值,最终还得靠手动微调。

4.4.2 基于响应曲线的整定法

如果系统不允许做等幅振荡实验(比如某些精密设备),可以用阶跃响应法。给系统一个阶跃输入,记录响应曲线,提取两个关键参数:

  • 滞后时间L:从输入变化到输出开始变化的时间
  • 时间常数T:输出从0上升到63.2%稳态值所需的时间

然后查表得到PID参数。这个方法我在调试一个液压伺服系统时用过,效果比纯试凑法好很多,因为液压系统的非线性太强了,试凑法根本找不到稳定的临界点。

4.4.3 自整定与自适应PID

现在很多高端驱动器都支持自整定功能。原理是:控制器自动施加激励信号,采集响应数据,然后通过算法计算出最优参数。我常用的自整定方法有:

  • 继电反馈法:用继电环节代替PID,让系统产生极限环振荡,自动提取Ku和Tu
  • 模糊PID:根据偏差和偏差变化率,在线调整Kp、Ki、Kd
  • 神经网络PID:用神经网络学习最优参数映射关系

注意:自整定不是万能的。我曾经在一个变负载的机械臂上用过继电反馈自整定,结果每次负载变化后参数都不对。后来还是老老实实做了增益调度——根据负载大小切换不同的PID参数组。

4.5 PID参数整定流程(SVG图)

下面这张图是我在实际项目中总结的PID参数整定流程,从系统辨识到最终微调,每一步都有明确的判断标准。

PID参数整定流程图 PID参数整定流程图 系统辨识 选择整定方法 经验试凑法 响应曲线法 自整定法 初始参数计算 在线调试与微调 性能评估与固化 不满足要求 说明:三种整定方法可并行选择,最终都需要通过在线调试验证性能

4.6 轨迹跟踪中的PID应用技巧

在轨迹跟踪这个具体场景下,PID的使用有一些特殊技巧。我踩过不少坑,分享几个实用的:

4.6.1 前馈+反馈复合控制

纯PID是反馈控制,它只能事后修正偏差。对于轨迹跟踪这种有明确期望路径的场景,加入前馈项可以大幅提升跟踪精度。

u(k) = u_ff(k) + u_pid(k)

其中u_ff(k)是根据期望轨迹计算的前馈控制量,u_pid(k)是PID的反馈修正量。前馈项可以抵消大部分已知的动力学影响,PID只需要处理模型误差和扰动。

我在做无人机轨迹跟踪时,前馈项直接用了期望加速度的逆动力学计算,PID只需要补偿风扰和模型误差,跟踪精度从原来的±10cm提升到了±2cm。

4.6.2 变参数PID

轨迹跟踪中,不同阶段的控制需求不同。比如:

  • 启动阶段:需要大Kp快速响应,小Ki防止积分饱和
  • 稳态跟踪阶段:需要小Kp防止超调,大Ki消除稳态误差
  • 急转弯阶段:需要大Kd抑制过冲

我的做法是:根据轨迹曲率或跟踪误差的大小,在线切换PID参数组。这个在嵌入式系统上实现起来也不复杂,查表就行。

小技巧:参数切换时要做无扰切换。具体来说,切换前把旧参数的积分项值赋给新参数的积分项初始值,避免切换瞬间控制量跳变。这个细节我是在一次无人机炸机后才深刻理解的……

4.6.3 微分先行与不完全微分

纯微分项对噪声极其敏感。轨迹跟踪中,位置测量通常带有噪声,直接微分会放大噪声,导致控制量剧烈抖动。

我的解决方案有两个:

  1. 微分先行:只对输出量(当前位置)做微分,不对输入量(目标位置)做微分。这样可以避免目标轨迹突变时产生的微分冲击。
  2. 不完全微分:在微分项后面加一个低通滤波器,滤除高频噪声。公式如下:
D(s) = Kd * s / (Tf * s + 1)

其中Tf是滤波时间常数,一般取微分时间的1/10到1/5。

4.7 本章小结

PID控制看似简单,但真正用好它需要大量的工程经验。位置式和增量式各有优劣,我个人的建议是:位置环用增量式,速度环用位置式。参数整定方面,先学会经验试凑法,再根据系统特性选择更高级的方法。

最后说一句:不要迷信算法。再先进的控制器,如果PID参数没调好,效果还不如一个调好的纯P控制器。先把基础打牢,再谈创新。