LADRC快速上手
最近修改日期:2026-02-07 参与者:Jackrainman 配套代码:07-LADRC代码实战.md
一、LADRC是什么
1.1 核心公式
LADRC(线性自抗扰控制)就记住这一个公式:
u₀:PID算出来的控制量ẑ₃:观测器估计的总扰动b₀:系统控制效率系数
人话:PID只管追踪目标,LADRC额外做一件事——实时估计干扰并把它干掉。
1.2 核心思想(扰动估计+补偿)
LADRC的精髓就一句话:把所有不确定性打包成"总扰动",实时估计并补偿。
- 内环(LESO):快速估计"总扰动"(包括外部干扰+模型误差)
- 外环(LSEF):像PID一样追踪目标
补偿后,复杂系统变成简单的积分器串联型,控制变得超简单。
flowchart LR
subgraph Disturbance["扰动源 Disturbance Sources"]
D1["外部干扰"]
D2["模型误差"]
D3["参数变化"]
end
TD["总扰动"]
LESO["LESO 扩张观测器"]
Controller["控制器"]
Sum1["相加"]
Plant["被控对象 Plant"]
Ideal["理想积分器串联型"]
D1 --> TD
D2 --> TD
D3 --> TD
TD -->|"f(t)"| LESO
LESO -->|"估计总扰动 f^(t)"| Sum1
LESO -->|"估计"| Controller
Controller --> Sum1
Sum1 -->|"u(t)"| Plant
Plant -->|"y(t)"| Ideal
Plant --> LESO
style Disturbance fill:#f9f9f9,stroke:#333
style LESO fill:#e1f5fe,stroke:#01579b,stroke-width:2px
style Controller fill:#fff3e0,stroke:#e65100
style Plant fill:#f3e5f5,stroke:#4a148c
style Ideal fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
style TD fill:#ffebee,stroke:#b71c1c 而 PID 的串联就可以简单理解为带追踪的积分器串联型,有时候会陷入“调参地狱”
物理对象的本质:对很多位置控制对象来说,如果先忽略一部分非理想因素,常常可以先近似看成 “双积分器” 或“积分器串联”模型
- 输入(力/电流) \(\rightarrow\) 产生加速度 \(\ddot{x}\)
- 加速度积分一次 \(\rightarrow\) 产生速度 \(\dot{x}\)
- 速度再积分一次 \(\rightarrow\) 产生位置 \(x\)
这就是所谓的“积分器串联型”受控对象。韩京清教授认为:控制的本质,就是把一个带有扰动的积分器串联型系统,变成一个理想的积分器串联型系统。
二、LADRC vs PID
2.1 原理对比
| 对比项 | PID | LADRC |
|---|---|---|
| 核心机制 | 看到误差再调整 | 主动估计并抵消扰动 |
| 模型依赖 | 最低,主要靠反馈 | 低,但通常需要相对阶和粗略名义增益 |
| 抗干扰 | 靠积分器慢慢压 | 观测器实时估计补偿 |
| 响应速度 | 快,但超调大 | 快,且超调小 |
2.2 结构对比
PID结构:

LADRC结构: 

- TD:把跳变目标平滑化(防冲击)
- LSEF:类似PID,计算虚拟控制量
- LESO:观测器,估计状态和总扰动
- 扰动补偿:把估计的扰动抵消掉
2.3 参数对比(⭐重点)
| 控制器 | 参数 | 物理意义 |
|---|---|---|
| PID | Kp, Ki, Kd | 比例/积分/微分增益 |
| LADRC | ωc, ωo, b₀ | 控制器带宽/观测器带宽/控制效率 |
关键区别: - PID的3个参数耦合严重,调一个影响全局 - LADRC的3个参数物理意义清晰,按顺序调能解决大部分问题 注:这只是理论经验,目前暂没有实战经验
三、LADRC的优势
3.1 抗扰能力强
PID抗干扰主要靠积分器,但积分器有滞后,突变扰动时反应慢。
LADRC通过LESO实时估计扰动,在扰动影响输出前就补偿掉。
图3-1 PID vs LADRC 抗扰动响应对比
3.2 不依赖精确模型
更准确地说,LADRC 不依赖精确模型,但也不是完全不要模型。
PID 对模型依赖最低,很多时候靠经验模型和实验感觉就能调到可用;而 LQR、MPC 这类模型驱动方法更依赖显式模型,但常用的也不一定是“完美精确大模型”,线性化模型和简化模型往往也能工作。
LADRC 通常至少需要知道这些信息:
- 系统相对阶数(输入到输出经过几次积分)
- 输入作用方向
- 名义增益 \(b_0\) 的大概量级
常见例子: - 电机位置控制 → 二阶(电压→速度→位置) - 温度控制 → 一阶(功率→温度) - 电流控制 → 一阶(电压→电流)
其他那些不容易建准的部分,例如惯性变化、摩擦、外部负载、部分未建模动态,通常会被打包成“总扰动”,由 LESO 在线估计并补偿。
3.3 参数整定简单
LADRC把复杂参数整定变成带宽设计:
控制器带宽衡量的是:你希望系统跟踪目标(Setpoint)或者修正误差的速度有多快。 如果你在开车,\(\omega_c\) 就是你打方向盘的果断程度。\(\omega_c\) 越高,你过弯就越激进,车头指向目标的速度就越快。
观测器带宽衡量的是:观测器“感知”系统真实状态和“捕捉”外部扰动的速度。 还是假设你在开车, \(\omega_o\) 就是你的眼睛和大脑处理路况信息的速度。即使你手打方向盘很快(\(\omega_c\) 大),如果你的眼睛反应慢(\(\omega_o\) 小),当你看到障碍物时,车可能已经撞上去了
经验公式:ωo = (3~5) × ωc,调好ωc再按比例调ωo即可。
图3-2 带宽设计类比示意图
什么要这样设计?
因为感知必须领先于行动:控制器(手)是根据观测器(眼)提供的信息来工作的。如果眼睛还没看清扰动到底有多大,手就开始乱动,系统必然震荡。并且,观测器在提取状态时不可避免会产生相位滞后。为了不影响控制环路的稳定性,观测器的滞后必须远小于控制环路的动态时间常数。
四、参数详解(TD + LADRC)
4.1 TD参数
跟踪微分器(TD)用于平滑目标信号和提取微分。
| 参数 | 名称 | 作用 | 怎么调 |
|---|---|---|---|
| r | 速度因子 | 决定跟踪速度 | 目标跳变超调大 → 减小r;响应慢 → 增大r |
| h₀ | 滤波因子 | 决定平滑程度 | 噪声大 → 增大h₀;相位滞后大 → 减小h₀ |
| h | 积分步长 | 采样周期 | 就是控制周期,一般不动 |
口诀: - r越大,跟踪越快,但可能超调 - h₀越大,滤波越强,但滞后越大
图4-1 TD跟踪效果对比图
4.2 LADRC参数
b₀(扰动补偿系数)
物理意义:控制效率,单位控制量能产生多大加速度。
怎么估:

图4-2 阶跃响应法测b₀示意图
调参: - 系统振荡 → b₀设大了,减小10% - 响应迟缓 → b₀设小了,增大10% - 不需要很准,±30%误差都能接受
基于电机参数的精确计算方法
如果有电机的详细参数,可以通过理论计算得到更准确的 b₀ 值。
1. 确定物理参数
首先,你需要明确手头有哪些电机参数。通常需要的参数包括:
- J:转动惯量(Moment of Inertia),单位 kg·m²
- K_t:转矩常数(Torque Constant),单位 N·m/A
- R:电枢电阻(Armature Resistance),单位 Ω(如果是电压控制)
- B:粘性摩擦系数(Viscous Friction Coefficient),通常很小可忽略,单位 N·m·s/rad
2. 根据控制场景计算 b₀
场景 A:电流控制(或力矩控制)
如果你的驱动器工作在力矩模式,即控制器输出 u 直接对应电流 i。
物理方程:根据牛顿第二定律 T = J·α(力矩 = 惯量 × 角加速度),以及电机力矩公式 T = K_t·i。
整理为最高阶导数形式(忽略扰动项,因为它们会被 ESO 观测并抵消):
LADRC 模型形式:ẏ = f + b₀·u
计算公式:对比系数可知:
场景 B:电压控制(PWM 占空比模式)
如果你的驱动器工作在电压模式,即控制器输出 u 对应电机端电压 U。这时需要考虑电压方程。
物理方程: - 电压平衡方程:U = iR + K_e·θ̇ (K_e 为反电动势常数,在国际单位制下数值通常等于 K_t) - 力矩方程:J·θ̈ = K_t·i - B·θ̇
将 i = (U - K_e·θ̇)/R 代入力矩方程:
整理得到:
LADRC 模型形式:在 LADRC 中,我们将与 θ̇ 相关的项视为总扰动的一部分,只关注控制量 U 前的系数。
计算公式:
$$ b_0 = \frac{K_t}{J \cdot R} $$ 注:该场景尚未验证,仅为理论推导
3. 针对不同阶次的 LADRC
b₀ 的物理意义随着控制器阶数的变化而略有不同:
一阶 LADRC(通常用于速度环)
如果你控制的是转速 ω(即 θ̇),系统方程降阶为一阶:
此时 b₀ 的值与上述计算相同: - 电流控制:b₀ = K_t/J - 电压控制:b₀ = K_t/(J·R)
二阶 LADRC(通常用于位置环)
如果你控制的是位置 θ,系统是二阶的:
计算公式依然保持不变,因为 b₀ 始终是控制量 u 到最高阶导数(加速度)的传递增益。
4. 无法获取准确参数时的估算技巧
LADRC 对 b₀ 的精度要求并不极其严苛。b₀ 的偏差在 ±20% 甚至更大范围内,LADRC 通常仍能保持稳定,只是带宽和抗扰能力会受影响。
如果参数未知,可以使用频率响应法或阶跃响应法估测:
阶跃响应法(近似): 1. 给电机施加一个小的阶跃输入 u_step(如 1V 或 1A) 2. 测量电机角加速度的最大值 α_max(即速度曲线在启动瞬间的斜率) 3. 计算:b₀ ≈ α_max / u_step
调节原则: - 如果 b₀ 设得过大:系统会认为控制能力很强,从而输出较小的控制量,导致系统响应变慢 - 如果 b₀ 设得过小:系统会认为控制能力很弱,从而输出很大的控制量,可能导致系统震荡或超调
ωc(控制器带宽)
物理意义:闭环系统响应速度,类似PID的Kp但物理意义更清晰。
初始值:
调参: - 响应慢 → 增大ωc(每次+20%) - 超调/振荡 → 减小ωc(每次-20%)
ωo(观测器带宽)
物理意义:LESO估计扰动的速度,必须快于控制器才能及时补偿。
经验公式:
| 场景 | 推荐比例 | 说明 |
|---|---|---|
| 噪声大 | 3× | 滤波效果好,估计略慢 |
| 通用 | 4× | 平衡性能,推荐 |
| 快速响应 | 5× | 估计快,但对噪声敏感 |
图片占位符:图4-3 带宽参数调节效果对比图
调参: - 估计滞后明显(扰动后很久才补偿)→ 增大ωo - 噪声敏感(输出抖动)→ 减小ωo
4.3 参数调节建议
调节顺序:
步骤1: 估计b₀(阶跃法)
步骤2: 设ωc为期望带宽的50%(保守起步)
步骤3: 设ωo = 4×ωc
步骤4: 测试响应,调ωc到满意
步骤5: 调ωo优化抗扰性能
步骤6: 微调b₀消除振荡或迟缓
flowchart LR
%% 定义六个步骤节点,使用不同形状代表不同图标类型
S1([步骤1: 测量对象参数]):::measure
S2[步骤2: 设置控制器带宽 ωc]:::setting
S3[步骤3: 设置观测器带宽 ωo]:::setting
S4[[步骤4: 调整 b 估计值]]:::adjust
S5[[步骤5: 补偿器参数优化]]:::adjust
S6>步骤6: 噪声抑制优化]:::adjust
%% 定义提示注释节点
N1{"30%误差<br/>可接受"}:::note
N3{"ωo = (3~5)ωc"}:::note
%% 主流程连接
S1 --> S2 --> S3 --> S4 --> S5 --> S6
%% 提示虚线连接
S1 -.-> N1
S3 -.-> N3
%% 样式定义:三个阶段用不同配色
classDef measure fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#0d47a1
classDef setting fill:#fff3e0,stroke:#ef6c00,stroke-width:2px,color:#e65100
classDef adjust fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20
classDef note fill:#fafafa,stroke:#616161,stroke-dasharray: 5 5,font-size:13px,color:#424242
%% 添加图例说明
subgraph 图例
direction TB
L1([测量图标]):::measure
L2[设置图标]:::setting
L3[[调整/优化图标]]:::adjust
end
%% 调整图例位置(可选,某些渲染器支持)
style S1 fill:#e3f2fd
style S6 fill:#e8f5e9 图4-4 LADRC参数调节流程图
五、参数调节原则
四句话:
调试技巧: 1. 先调ωc让响应速度满意 2. 再调ωo优化抗扰性能 3. 最后微调b₀消除初始状态的振荡 4. TD参数(r、h₀)用来优化目标跟踪的平滑性
避坑提醒: - ωo不要超过10×ωc(会噪声爆炸) - b₀不准没关系,LESO在跑起来之后会补偿,但是要小心上电瞬间的大幅震荡
代码参考
完整代码实现、调试技巧、常见问题排查,详见:
最后提醒:LADRC不是万能的,但它把工程中最头疼的"不确定性"和"干扰"问题用统一框架解决了。先跑通代码,再理解原理,最后根据实际系统调参,你会发现它比PID更"省心"。