跳到主要内容

3. LQR

PID 只看误差、误差积分和误差变化率。对单关节来说,这已经很有用;但对倒立摆、机械臂、四足质心或移动机器人,多个状态量会互相耦合,只看一个误差往往不够。

状态空间方法把系统写成“状态如何随控制输入变化”的形式。LQR 则在这个表示上,自动求一个兼顾稳定性和控制代价的反馈增益。

3.1 状态变量

状态是描述系统当前情况所需的一组最小变量。

对单关节,可以选:

其中 是关节角, 是关节速度。

对移动机器人,可以选:

对倒立摆,可以选:

控制器不再只看“位置差多少”,而是同时看位置、速度、姿态和角速度。

3.2 线性系统

离散时间线性系统写成:

描述系统自己如何演化, 描述控制输入如何影响状态。

例如一个非常简化的双积分系统:

这里 可以理解为加速度命令。即使真实机器人不是线性的,很多控制器也会在当前工作点附近做线性化,然后用线性控制器处理局部稳定。

3.3 二次代价

LQR 的目标是让状态回到目标,同时不要用太大的控制输入。它定义一个二次代价:

惩罚状态偏差, 惩罚控制输入。

直觉上:

  • 越大,系统越在意状态误差。
  • 越大,系统越舍不得用力。
  • 某个状态维度权重越大,控制器越优先修正它。

LQR 会求出一个反馈矩阵:

这个 不是手动试出来的,而是由 计算出来的。

3.4 PD 关系

对单自由度位置控制,如果状态是:

LQR 得到的反馈可能长得像:

这和 PD 控制非常像。区别在于:

  • PD 的 多靠经验调。
  • LQR 根据系统模型和代价权重求反馈增益。
  • LQR 更自然地处理多状态、多输入耦合。

所以 LQR 不是完全陌生的新东西,它可以看作“模型化、优化化的多变量 PD”。

3.5 Q R 调参

LQR 调参不是直接调增益,而是调权重。

常见策略:

  1. 先把状态量归一化,避免角度、位置、速度量纲差异太大。
  2. 对最重要的状态给更高 ,比如倒立摆角度、移动机器人横向误差。
  3. 如果动作太猛,增大
  4. 如果回目标太慢,增大关键状态的 或减小
  5. 在仿真里看状态曲线和控制输入曲线,而不是只看最后是否成功。

一个常见误区是:想让系统更快,就把所有 都加大。这样可能导致控制输入过猛,甚至在真实执行器限幅下表现更差。

3.6 适用边界

适合:

  • 工作点附近的小范围稳定。
  • 倒立摆、姿态稳定、质心局部控制。
  • 能获得相对准确线性模型的系统。
  • 需要同时考虑多个状态量的反馈控制。

不适合:

  • 强非线性、大范围运动且不做重新线性化。
  • 有复杂约束,比如力矩上限、避障、接触切换。
  • 模型误差很大且没有反馈校正。
  • 需要显式考虑未来障碍物或轨迹约束的任务。

这些不适合的场景,正是 MPC 更常出现的地方。但在进入 MPC 前,我们先补一块非常重要的工程内容:轨迹跟踪与前馈控制。