第3章:试凑法调参:手动调整Q和R的实战步骤
说实话,很多新手一上来就问我:「有没有一套万能参数,直接套用就能让系统稳定?」
我的回答很直接——没有。每个系统都有自己的脾气。
但别灰心。我今天要讲的试凑法,就是一套从零开始、步步为营的手动调参流程。我做了十几年嵌入式控制,最复杂的四旋翼飞控、最基础的直流电机,都是用这套方法调出来的。
3.1 试凑法的核心思想
试凑法说白了就是:先让系统动起来,再一点点优化。
你想想看,一个完全没调过的LQR控制器,Q和R都是零,系统根本没法跑。但如果你一上来就给Q赋个1000,R赋个0.001,系统大概率直接炸掉。
所以我的习惯是:从保守开始,逐步激进。
核心原则:
- 先保证稳定,再追求性能
- 一次只调一个参数
- 每次调整后观察系统响应
3.2 实战五步法
我总结了一套五步调参流程,这些年带团队一直用这个框架。你照着做,基本不会跑偏。
第一步:初始化参数
先把所有参数归零。Q矩阵设为单位阵,R矩阵设为单位阵。
Q = diag([1, 1, 1, 1]); % 状态权重
R = diag([1, 1]); % 控制权重
嗯,这里要注意:如果你的系统状态量有不同量纲(比如角度和角速度),最好先做归一化处理。我在做倒立摆项目时吃过这个亏——角度0.1弧度看起来很小,但角速度100度/秒已经很大了,权重完全不在一个量级上。
第二步:增大Q,让系统响应变快
保持R不变,逐步增大Q的对角元素。我一般先调第一个状态(通常是位置或角度)的权重。
% 第一次尝试
Q = diag([10, 1, 1, 1]);
R = diag([1, 1]);
% 观察响应,如果不够快
Q = diag([100, 1, 1, 1]);
为什么会这样?因为Q越大,系统越「在意」这个状态的误差,控制力自然更强。
我的经验:每次增大Q的倍数控制在3-10倍之间。太小的步长浪费时间,太大的步长容易跳过最优值。
第三步:减小R,让控制更「大胆」
如果增大Q后响应还是不够快,那就该减小R了。R越小,控制器越敢用大力气。
% 保持Q不变,减小R
Q = diag([100, 1, 1, 1]);
R = diag([0.1, 1]); % 第一个控制量权重减小
我曾经在一个伺服电机项目上,R从1降到0.01,响应速度直接提升了3倍。但代价是控制信号开始出现高频抖动——这就是典型的「过调」。
第四步:平衡各状态权重
当系统基本稳定后,开始微调各状态之间的权重比例。比如你想让位置误差收敛更快,就增大位置对应的Q值;想让速度更平滑,就减小速度对应的Q值。
| 状态 | Q值偏大 | Q值偏小 |
|---|---|---|
| 位置/角度 | 响应快,可能有超调 | 响应慢,稳态误差大 |
| 速度/角速度 | 运动平滑,但响应慢 | 响应快,但容易抖动 |
| 控制量 | 控制力强,能耗高 | 控制力弱,能耗低 |
第五步:验证鲁棒性
参数调好了?别急着收工。我习惯在系统上施加一些扰动,看看控制器能不能扛得住。
% 模拟扰动
disturbance = 0.1 * sin(2*pi*5*t); % 5Hz的正弦扰动
system_output = system_output + disturbance;
如果系统在扰动下还能保持稳定,那这组参数基本就合格了。
避坑指南:我曾经在一个无人机项目上,实验室里调得好好的参数,一到户外就炸机。后来发现是风扰动的频率刚好激发了系统的谐振点。所以一定要在真实工况下验证。
3.3 一个完整的调参案例
拿一个简单的二阶系统举例:
% 系统模型:质量-弹簧-阻尼系统
m = 1; % 质量
k = 10; % 弹簧刚度
b = 2; % 阻尼系数
% 状态空间
A = [0, 1; -k/m, -b/m];
B = [0; 1/m];
C = [1, 0];
D = 0;
% 初始参数
Q = eye(2);
R = 1;
% 计算LQR增益
K = lqr(A, B, Q, R);
% 仿真
sys_cl = ss(A - B*K, B, C, D);
step(sys_cl);
第一次仿真,系统响应慢得像蜗牛。我逐步把Q(1,1)从1调到100,响应快了,但出现了10%的超调。接着我把R从1降到0.1,超调消失了,但控制信号开始有轻微振荡。
最后我折中了一下:Q(1,1)=50,R=0.5。系统在0.8秒内稳定,超调小于3%,控制信号平滑——这就是我要的效果。
3.4 试凑法的局限性
说实话,试凑法不是万能的。当系统状态超过4个时,手动调参就像大海捞针。我见过有人调一个8状态的LQR,调了整整两周还没搞定。
这时候就该上优化算法了——比如遗传算法、粒子群优化。但那是后面章节的内容了。
对于初学者来说,试凑法是最好的入门方式。它能让你直观感受每个参数对系统的影响,建立起「参数-响应」的直觉。这种直觉,是任何自动化工具都给不了你的。
本章小结:
- 试凑法的核心:先稳定,再优化
- 五步流程:初始化 → 增大Q → 减小R → 平衡权重 → 验证鲁棒性
- 每次调整倍数控制在3-10倍
- 一定要在真实工况下验证参数
这张图就是我每次调参时脑子里过的流程。你照着走,至少不会把系统调崩。