Contents — find the section you need
PID(比例-积分-微分)控制通过比较参考值和测量值来改变输入。它被广泛应用于加热器、驱动器、流体回路、机器人关节和飞机等领域,因为它无需完美的被控对象模型也能有效工作。然而,PID控制看似简单,实则不然:一个没有明确单位、输出限制、时序策略、传感器验证或安全停止路径的控制器,根本无法部署。它只是一个随时可能失效的方程。
本文首先给出实际应用结论,然后逐步构建直觉,讲解信号流和方程、齐格勒-尼科尔斯整定、约束和安全性,以及当前的软件示例。关于机器人控制器的节点、时序和硬件边界,请参阅ROS 2入门。关于定位延迟和跳跃为何也是控制问题,请参阅可视化SLAM入门。
PID 控制器的输入是误差 e=r-y,输出是指令 u。P 对当前误差做出响应,I 消除持续存在的偏移,D 则对变化率进行阻尼。
简要结论
-
P 对当前误差做出响应;I 消除持续存在的误差;D 提供对变化率的阻尼。从 P 开始,设计参数限制,仅在存在稳定偏移时才添加 I,并且仅在有明确目的时才添加滤波后的 D。
-
实现必须同时限制指令和指令速率。如果没有抗饱和机制,积分器会存储执行器无法满足的需求。
-
在大多数物理系统中,对滤波后的测量值进行微分,而不是对阶跃式参考误差进行微分。这样可以避免微分冲击,并降低对参考变化的敏感性。
-
对于延迟适中的单回路快速控制,PID 控制器通常是最佳解决方案。更高级的优化并不能取代快速、可观测且安全的内回路。
直觉:三个算子监控一个误差
假设室温低于参考温度。P 算子表示:“现在温度低了 5 度,所以现在要加热。” I 算子表示:“温度已经低了很久,所以初始加热不足。” D 算子表示:“温度已经快速上升;在过冲之前降低加热速度。” 它们的组合可以实现快速响应,抑制持续的热损失,并减少过冲。
这个类比忽略了决定回路安全性的关键因素:加热器功率有限,温度计存在噪声,热量传递需要时间。微分算子可能会将噪声误判为运动;积分器可能会在加热器已经饱和的情况下继续累积。因此,PID 设计应该从测量值和可以安全控制的参数入手,而不是从增益值入手。
信号流:控制器仅包含一个模块
图示:Duskcoil,概念图而非实际测量的接线图。校准、传输延迟、通信和执行器内环属于实际信号路径。
如果被控对象是 G,传感器或估计器是 H,仅增强控制器 C 的功能并不能消除延迟。饱和,或者G和H出现故障。例如,当移动机器人使用SLAM定位进行跟踪时,估计值中的跳跃和延迟对于PID控制器来说会表现为测量噪声和干扰。Visual SLAM Primer中讨论的坐标系、时间同步和重定位是围绕控制器的控制问题的一部分。
基本方程和单位
设r为参考值,y为测量值,e=r-y为前馈指令,u_{ff}为前馈指令。并行连续PID控制器为:
K_P的单位为u/e,K_I的单位为K_I u/(e\cdot s) 和 K_D 的单位为 u\cdot s/e。它们并非本质上无量纲。将角度转换为弧度、反转编码器或将毫秒时间戳与基于秒的增益混合都会改变回路。在调整之前,请记录单位、符号、帧和参考更新策略。
采样周期为 T_s 时,一个基本的离散实现会保存积分状态 I_k 和差分导数 D_k:
然后,控制器计算 u_k=K_Pe_k+K_II_k+K_DD_k。这种形式已经暴露出一些关键的工程问题:T_s 是测量值还是假设值?消息延迟时会发生什么?如何处理过期的样本?控制器是否以确定性速率运行?常用的基于测量值的滤波导数使用
系数\alpha=\tau_f/(\tau_f+T_s) 和
它可以避免参考阶跃引起的微分抖动。它的滤波器还会增加相位延迟,因此滤波无法补偿采样不良或机械松动的系统。
逐一理解 P、I 和 D
增加 P 通常可以改善即时响应和抗扰性,直到延迟和被控对象动态特性导致过冲或振荡。I 可以消除诸如重力、摩擦或热损耗之类的恒定偏移,但过大的 I 会在被控对象响应之前积分需求。D 可以提供阻尼,但会放大编码器量化、振动和估计器抖动。在位置-速度级联中,首先调整快速、稳定的速度环,然后再调整位置环。不要将所有误差都集中到一个慢速 PID 控制器中。
饱和和抗饱和
物理指令遵循 u_{min}\leq u\leq u_{max}。令 u^* 为计算得到的非饱和状态。命令和 u=\operatorname{sat}(u^*) 已发送的命令。如果执行器被限制在某个极限位置时继续累积,则即使误差反转,回路仍可能保持锁定状态。这就是积分器饱和:即使 u 无法跟踪,积分器仍会继续累积 e,并且积分状态 I_k 随后会延迟恢复。
条件积分会在输出饱和时冻结积分器,因为积分会进一步进入饱和状态。反向计算是一种更平滑的替代方案:
这里 I_k 是积分误差状态,因此 K_{aw} 的单位是每个命令的误差。一些实现将 K_I I_k 存储为积分输出,并使用 1/T_t(跟踪时间的倒数)代替;请记录所选单位和公式。饱和度失配被反馈到积分器。K_{aw} 设置该校正的速度。积分器钳位、参考斜坡和无扰手动/自动切换是补充措施。防饱和并非性能增强;它使在不可避免的极限之后恢复成为可预测的。
| 症状 | 可能机制 | 首先检查 | 典型响应 |
|---|---|---|---|
| 响应缓慢或偏移 | P 过低,持续干扰 | 符号、单位、输出限制 | 逐步提高 P;必要时添加少量 I |
| 振荡或过冲 | P/I 过高,延迟 | 循环周期、延迟、传感器轨迹 | 降低 P/I;使用参考斜坡 |
| 无法从极限恢复 | 积分器饱和 | 命令和积分日志 | 条件 I、钳位、反算 |
| 设定点阶跃触发 | 误差导数 | D 输入路径 | 测量导数 |
| 低速抖动 | 摩擦量化、反冲 | 编码器和机械结构 | 内速度环、补偿、滤波器 |
调谐,包括齐格勒-尼科尔斯调谐
闭环齐格勒-尼科尔斯调谐程序将 I 和 D 设置为零,将 P 提升至持续振荡增益 K_u,测量周期 T_u,然后使用经典的 PID 起始点
其中 K_I=K_P/T_i 和 K_D=K_PT_d。在热过程、车辆、压力系统或靠近人员的机器人中,刻意接近持续振荡是不可接受的。这是一种历史经验,并非允许在稳定性边界进行测试。
更安全的工作流程是使用仿真或低振幅阶跃测试来估计静态增益、延迟和时间常数;首先启用限值和停止逻辑;调谐 P;仅在出现观测到的偏移时才添加 I;然后仅在出现观测到的偏移时才添加滤波后的 D。满足已测量的阻尼需求。分别测试参考跟踪和干扰抑制。记录每次变化时的峰值电流、温度、速度、停止距离、饱和时间和积分状态。
约束和安全机制独立于 PID 方程之外
不要将 PID 输出作为安全功能。使用独立的紧急停止、过流/过温/过压保护、行程限制、看门狗以及在数据或通信中断时定义的安全命令。控制器尝试达到参考值;安全功能防止在可能包括控制器故障在内的故障假设下进入不安全状态。
至少验证采样范围、时间戳和新鲜度;限制参考值、加速度、输出和输出转换速率;指定积分器的复位/保持行为;测试无冲击的手动接管;并注入传感器丢失、延迟采样、处理器重启和负载变化等情况。ROS 2 的存在并不证明确定性时序或功能安全性。
当前实现和研究示例
ros2_control 框架将硬件接口、控制器管理和控制器,以及控制器链和 PID 控制器的文档。其官方文档和PID 控制器页面公开了增益、钳位、抗饱和选项、参考值、测量状态和已发布的控制器状态。这使得接口和状态可观察;但它不会自动调整物理机器人。
工业控制器也体现了同样的考量。西门子在其S7-1200 系统手册中记录了 SIMATIC S7-1200/S7-1500 PLC 的 PID 功能。研究人员扩展了 PID 功能,使其具有摩擦和延迟自适应、数据驱动的整定以及学习型高级参考值生成,同时保留了一个小型、可检查的底层回路,在这种架构更安全的情况下,保持底层回路的完整性。
实施清单
-
定义受控变量、命令、单位、正方向、有效范围和回路速率。
-
验证校准,在控制计算之前,检查时间戳、数据陈旧性和异常值。
-
限制 u 及其转换速率;测试独立的急停、看门狗和通信丢失行为。
-
分别调整并记录 P 控制、PI 控制和 PID 控制;分别测试指令和扰动。
-
在同一时钟周期内记录参考值、测量值、实际指令、饱和指令、积分状态和故障标志。
-
故意测试抖动、负载变化、重启、传感器丢失和执行器饱和。
-
使用 ROS 2 Primer 交叉检查 ROS 2 拓扑结构,并使用 Visual SLAM Primer 交叉检查估计器时序。
假设输出饱和时积分仍在继续?
存储的积分作用可能会导致后续过冲。请检查抗饱和行为,而不是仅仅调整积分增益。
评论
请先登录。
暂无数据。