Pular para o conteúdo principal

LQR — Regulador Quadrático Linear

O LQR encontra o ganho de realimentação de estados KK que minimiza o custo quadrático:

J=0(xQx+uRu)dtJ = \int_0^\infty \left( x^\top Q x + u^\top R u \right) dt

A solução e u=Kxu = -Kx, onde K=R1BPK = R^{-1} B^\top P e PP e a solução da Equacao Algebrica de Riccati (ARE).

Uso

import numpy as np
from synapsys.algorithms import lqr
from synapsys.api import ss

# Pendulo invertido simplificado
A = np.array([[0, 1], [10, 0]])
B = np.array([[0], [1]])

Q = np.diag([10.0, 1.0]) # penaliza posicao mais que velocidade
R = np.array([[0.1]]) # penaliza esforco de controle

K, P = lqr(A, B, Q, R)
print(f"Ganho K: {K}") # ex: [[-29.14, -7.61]]

# Verificar estabilidade da malha fechada
A_cl = A - B @ K
sys_cl = ss(A_cl, B, np.eye(2), np.zeros((2, 1)))
print(f"Estavel: {sys_cl.is_stable()}") # True

Ajuste de Q e R

ObjetivoAjuste
Resposta mais rápidaAumentar QQ (penalizar erro de estado)
Menor esforco de atuacaoAumentar RR
Priorizar um estado especificoAumentar elemento diagonal de QQ correspondente
Regra de Bryson

Um ponto de partida clássico: Qii=1/xi,max2Q_{ii} = 1 / x_{i,max}^2 e Rjj=1/uj,max2R_{jj} = 1 / u_{j,max}^2

Referência da API

Consulte a referência completa em synapsys.algorithms — lqr.