Regulador Linear-Quadrático (LQR)
Visão geral
O Regulador Linear Quadrático (Linear Quadratic Regulator, LQR) é um controlador clássico de realimentação ótimo (optimal feedback controller) para sistemas dinâmicos lineares quando o objetivo de controle pode ser expresso como um custo quadrático (quadratic cost) sobre o desvio de estado e o esforço de controle. O LQR é amplamente usado em robótica porque é:
- Com base em princípios: resolve exatamente um problema de otimização bem definido (para o modelo assumido).
- Eficiente: o cálculo do ganho de realimentação se reduz à solução de uma equação de Riccati (Riccati equation).
- Estabilizante: sob condições padrão, o sistema resultante em malha fechada (closed-loop) é estável.
- Prático: a sintonia é intuitiva por meio das matrizes de peso (Q) e (R).
- Componível: combina naturalmente com estimação de estado (state estimation) (veja Filtro de Kalman (Kalman Filter) e Gaussiano Linear Quadrático (LQG) (Linear Quadratic Gaussian, LQG)) e com otimização de trajetórias (trajectory optimization) (veja Controle Ótimo (Optimal Control) e Controle Preditivo Baseado em Modelo (MPC) (Model Predictive Control, MPC)).
Em robótica, o LQR é comumente usado para estabilização em torno de equilíbrios (por exemplo, manter um robô balanceado) e para rastreamento de trajetória (trajectory tracking) via LQR variante no tempo (time-varying LQR, TVLQR) em torno de uma trajetória nominal.
Configuração do problema
Dinâmica linear
O LQR assume dinâmica linear invariante no tempo (linear time-invariant, LTI) da forma:
Tempo contínuo [ \dot{x}(t) = A x(t) + B u(t) ]
Tempo discreto [ x_{k+1} = A x_k + B u_k ]
onde:
- (x \in \mathbb{R}^n) é o estado,
- (u \in \mathbb{R}^m) é a entrada de controle,
- (A) e (B) são matrizes conhecidas (frequentemente obtidas por modelagem ou linearização local).
Custo quadrático
O custo padrão de horizonte infinito (infinite-horizon) do LQR é:
Tempo contínuo [ J = \int_{0}^{\infty} \left(x(t)^\top Q x(t) + u(t)^\top R u(t)\right),dt ]
Tempo discreto [ J = \sum_{k=0}^{\infty} \left(x_k^\top Q x_k + u_k^\top R u_k\right) ]
onde:
- (Q \succeq 0) penaliza o desvio de estado,
- (R \succ 0) penaliza o esforço de controle.
Opcionalmente, você pode incluir termos cruzados (x^\top N u), mas muitas aplicações em robótica usam a forma mais simples acima.
O controlador LQR ótimo
A solução do problema de LQR é uma lei linear de realimentação de estado (linear state-feedback law):
[ u = -Kx ]
onde (K) é escolhido para minimizar o custo (J). O ganho (K) é calculado a partir da solução de uma equação de Riccati.
Equação Algébrica de Riccati em tempo contínuo (Continuous-time Algebraic Riccati Equation, CARE)
Para LQR de horizonte infinito em tempo contínuo, calcule (P) como a solução simétrica semidefinida positiva de:
[ A^\top P + P A - P B R^{-1} B^\top P + Q = 0 ]
Então o ganho ótimo é:
[ K = R^{-1} B^\top P ]
A dinâmica em malha fechada passa a ser:
[ \dot{x} = (A - BK)x ]
Equação Algébrica de Riccati em tempo discreto (Discrete-time Algebraic Riccati Equation, DARE)
Para LQR de horizonte infinito em tempo discreto, (P) satisfaz:
[ P = A^\top P A - A^\top P B (R + B^\top P B)^{-1} B^\top P A + Q ]
e o ganho ótimo de realimentação é:
[ K = (R + B^\top P B)^{-1} B^\top P A ]
Dinâmica em malha fechada:
[ x_{k+1} = (A - BK) x_k ]
Hipóteses e condições de existência
O LQR é “ótimo” com respeito ao seu modelo e ao seu custo, mas depende de hipóteses-chave:
Linearidade (ou linearidade local)
A derivação assume dinâmica linear. Para robôs não lineares, o LQR é tipicamente aplicado a uma linearização (linearization) em torno de um equilíbrio ou de uma trajetória.Objetivo quadrático
O custo quadrático é importante: ele torna a função valor quadrática e resulta em uma política ótima linear.Sem restrições rígidas
O LQR padrão não impõe limites de atuadores nem restrições de estado. Se restrições forem relevantes, considere Controle Preditivo Baseado em Modelo (MPC).Estabilizabilidade e detectabilidade (técnico, mas importante)
Para LQR de horizonte infinito em tempo contínuo:- ((A,B)) deve ser estabilizável (stabilizable) (modos instáveis devem ser controláveis).
- ((A,Q^{1/2})) deve ser detectável (detectable) (modos não observáveis devem ser estáveis).
Sob essas condições, a equação de Riccati tem uma solução estabilizante (P), e o (K) resultante torna (A-BK) estável.
Por que a equação de Riccati aparece (intuição)
O LQR pode ser derivado via programação dinâmica (dynamic programming). A ideia central é que o custo futuro ótimo a partir do estado (x) (a função valor (value function)) tem a forma quadrática:
[ V(x) = x^\top P x ]
Substituir isso na condição de otimalidade de Bellman (Bellman optimality condition) (ou na equação de Hamilton–Jacobi–Bellman (Hamilton–Jacobi–Bellman equation) em tempo contínuo) produz uma equação que (P) deve satisfazer — a equação de Riccati — e o controle minimizante acaba sendo linear: (u = -Kx).
Este é um dos exemplos fundamentais de um problema em que controle ótimo produz uma estrutura simples de realimentação em forma fechada (closed-form feedback structure).
Sintonia do LQR: escolhendo \(Q\) e \(R\)
As matrizes (Q) e (R) codificam o compromisso entre:
- manter o estado pequeno (precisão de rastreamento/estabilização),
- usar menos esforço de controle (energia, suavidade, estresse nos atuadores).
Diretrizes práticas de sintonia
Comece com pesos diagonais Muitos sistemas robóticos começam com: [ Q = \mathrm{diag}(q_1,\dots,q_n), \quad R = \mathrm{diag}(r_1,\dots,r_m) ] e depois adicionam termos fora da diagonal, se necessário.
Interpretação do escalonamento
- (Q) maior → correção mais agressiva dos erros de estado.
- (R) maior → controle mais conservador (entradas menores, resposta mais lenta).
Regra de Bryson (heurística comum) Se você conhece máximos aceitáveis (x_{i,\max}) e (u_{j,\max}), escolha: [ Q_{ii} = \frac{1}{x_{i,\max}^2}, \quad R_{jj} = \frac{1}{u_{j,\max}^2} ] Isso aproximadamente equaliza a contribuição normalizada de cada termo no custo.
Unidades importam Estados podem misturar metros, radianos, m/s, rad/s. Normalize ou escolha (Q) de modo que os custos sejam comparáveis entre unidades. Escalonamento ruim pode causar problemas numéricos e comportamento pouco intuitivo.
Penalize taxas para reduzir oscilação Para sistemas mecânicos, adicionar custo em termos de velocidade frequentemente melhora o amortecimento.
Atenção à saturação de atuadores Se o LQR exigir (u) além dos limites do atuador, o sistema real pode saturar, invalidando as hipóteses de otimalidade e potencialmente desestabilizando o comportamento. Se a saturação for frequente, considere:
- aumentar (R),
- adicionar limites de entrada via MPC,
- usar escalonamento de ganhos (gain scheduling) ou estratégias de controle não linear.
Propriedades de estabilidade
Uma razão importante para a popularidade do LQR é que ele tipicamente fornece fortes garantias de estabilidade (para o modelo idealizado):
Com a solução estabilizante (P), a matriz em malha fechada ((A - BK)) é estável:
- Tempo contínuo: todos os autovalores têm parte real negativa (Hurwitz).
- Tempo discreto: todos os autovalores estão dentro do círculo unitário (Schur estável).
A função valor do LQR (V(x) = x^\top P x) serve como uma função de Lyapunov (Lyapunov function) para o sistema em malha fechada, fornecendo um certificado construtivo de estabilidade.
Na prática, para robôs não lineares, essa garantia de estabilidade é local quando o LQR é projetado sobre uma linearização (isto é, vale perto do ponto de operação ou da trajetória nominal).
LQR de horizonte finito e ganhos variantes no tempo
Muitas tarefas de robótica envolvem manobras em tempo finito em vez de regulação de horizonte infinito. Nesse caso, você resolve um problema de LQR de horizonte finito (finite-horizon LQR) e obtém um ganho de realimentação variante no tempo (time-varying) (K(t)) (ou (K_k) em tempo discreto).
Horizonte finito em tempo contínuo (equação diferencial de Riccati)
Dado o custo terminal (x(T)^\top Q_f x(T)), a matriz (P(t)) evolui de trás para frente no tempo:
[ -\dot{P}(t) = A^\top P + P A - PBR^{-1}B^\top P + Q,\quad P(T)=Q_f ]
e: [ K(t) = R^{-1}B^\top P(t) ]
Horizonte finito em tempo discreto (recursão retroativa de Riccati)
Com terminal (P_N = Q_f), itere de trás para frente:
[ K_k = (R + B^\top P_{k+1} B)^{-1} B^\top P_{k+1} A ] [ P_k = Q + A^\top P_{k+1} A - A^\top P_{k+1} B K_k ]
O LQR de horizonte finito é um bloco básico para rastreamento de trajetória e para muitos métodos de controle ótimo.
LQR Variante no Tempo (TVLQR) para rastreamento de trajetória
Robôs são não lineares, e muitas tarefas exigem rastrear uma trajetória nominal não linear ({x^*(t), u^*(t)}) (por exemplo, um padrão de caminhada, um flip de quadrotor, um movimento de braço). O TVLQR estabiliza desvios em torno dessa trajetória.
Configuração
Dinâmica não linear: [ \dot{x} = f(x,u) ]
Trajetória nominal: [ \dot{x}^*(t) = f(x^*(t), u^*(t)) ]
Defina os desvios: [ \delta x = x - x^*(t),\quad \delta u = u - u^*(t) ]
Linearize ao longo da trajetória: [ \delta\dot{x} \approx A(t)\delta x + B(t)\delta u ] onde: [ A(t) = \left.\frac{\partial f}{\partial x}\right|{x^*(t),u^*(t)},\quad B(t) = \left.\frac{\partial f}{\partial u}\right|{x^*(t),u^*(t)} ]
Resolva a equação diferencial de Riccati variante no tempo (time-varying Riccati differential equation) de trás para frente para obter (P(t)), e então compute: [ \delta u(t) = -K(t)\delta x(t), \quad K(t)=R^{-1}B(t)^\top P(t) ]
Lei de controle final: [ u(t) = u^*(t) - K(t),(x(t) - x^*(t)) ]
Onde o TVLQR é usado em robótica
- Estabilizar movimentos dinamicamente instáveis (locomoção com pernas, voo agressivo).
- Rastrear trajetórias produzidas por planejadores de movimento (motion planners) ou otimizadores de trajetória.
- Servir como estabilizador local dentro de sistemas maiores (por exemplo, planejamento baseado em amostragem (sampling-based planning) + funis de TVLQR).
Exemplos práticos
Exemplo 1: Estabilizando um pêndulo invertido (conceitual)
Para um pêndulo invertido clássico linearizado em torno do equilíbrio na posição vertical, obtém-se um modelo LTI: [ \dot{x} = Ax + Bu,\quad x = \begin{bmatrix}\theta \ \dot{\theta}\end{bmatrix} ] Escolha:
- (Q = \mathrm{diag}(q_\theta, q_{\dot{\theta}})) para penalizar fortemente o erro de ângulo,
- (R = r) para controlar o esforço do atuador.
Se você aumentar (q_\theta), o controlador reage mais fortemente para manter (\theta \approx 0). Se você aumentar (R), ele usa entradas menores e o pêndulo corrigirá mais lentamente.
Esse mesmo padrão aparece em muitos robôs: balanceamento, pairar, ou manter postura em torno de um equilíbrio.
Exemplo 2: LQR em tempo discreto em Python (computando \(K\))
Abaixo está um padrão típico usando SciPy para LQR em tempo discreto. Isto não é um simulador — apenas o cálculo do ganho.
import numpy as np
from scipy.linalg import solve_discrete_are
def dlqr(A, B, Q, R):
# Solve the discrete-time Algebraic Riccati equation (DARE)
P = solve_discrete_are(A, B, Q, R)
# Compute the LQR gain
K = np.linalg.inv(R + B.T @ P @ B) @ (B.T @ P @ A)
return K, P
# Example system
A = np.array([[1.0, 0.01],
[0.0, 1.0]])
B = np.array([[0.0],
[0.01]])
Q = np.diag([10.0, 1.0])
R = np.array([[0.1]])
K, P = dlqr(A, B, Q, R)
print("K =", K)
Para usar em regulação até a origem:
u = -K @ x
Para rastrear um estado de referência (x_{\text{ref}}), use o desvio:
u = -K @ (x - x_ref)
Observação: rastreamento de referência frequentemente também precisa de ação de avanço (feedforward) e/ou ação integral (integral action) para eliminar erro em regime permanente (discutido abaixo).
Exemplo 3: TVLQR para uma trajetória de braço robótico (fluxo de trabalho)
Um fluxo de trabalho comum em robótica:
- Gere uma trajetória nominal ({x^*(t), u^*(t)}) usando planejamento ou otimização de trajetória (Controle Ótimo).
- Linearize a dinâmica do robô ao longo da trajetória para obter (A(t), B(t)).
- Resolva a equação de Riccati variante no tempo de trás para frente para obter (K(t)).
- Execute o controlador online: [ u(t) = u^*(t) - K(t)(x(t)-x^*(t)) ]
Isso fornece um controlador local de rastreamento forte mesmo quando a trajetória em malha aberta é sensível a perturbações.
Usos comuns em robótica
Estabilização em torno de um equilíbrio (“balancear em torno de um ponto”)
Exemplos:
- Pairar com quadrotor (linearizar em torno do hover).
- Postura ereta de robô autoequilibrante.
- Braço robótico mantendo uma pose.
O LQR é frequentemente preferido em relação à sintonia manual de PID porque lida naturalmente com dinâmica multivariável acoplada (coupled multivariable dynamics) e oferece um mecanismo sistemático de sintonia via (Q, R).
Rastreamento de trajetória e primitivas de movimento (TVLQR)
Exemplos:
- Marchas de locomoção com pernas: estabilizar uma trajetória periódica de caminhada.
- Manobras agressivas de quadrotor: rastrear uma trajetória planejada sob dinâmica exigente.
- Manipulação: rastrear movimentos do efetuador final parametrizados no tempo.
Bloco de construção em sistemas maiores
- LQG: combinar LQR com um filtro de Kalman para controle por realimentação de saída sob ruído Gaussiano (veja Gaussiano Linear Quadrático (LQG)).
- Como controlador local dentro de planejamento baseado em amostragem (direcionamento por LQR / estabilização local).
- Como inicialização quente (warm start) ou custo terminal/controlador terminal em MPC (comum em projetos de MPC para robótica).
Limitações e armadilhas práticas
Incompatibilidade de modelo Robôs reais têm atrito não modelado, complacência, atrasos e saturações. O desempenho do LQR depende de quão precisos são (A,B) (ou de quão válida é a linearização).
Restrições são ignoradas O LQR pode comandar torques/empuxos inviáveis. Saturação frequente pode causar rastreamento ruim ou instabilidade.
Rastreamento de referência não é “gratuito” O LQR padrão regula para zero. Rastrear um setpoint não nulo tipicamente requer:
- aplicar LQR aos desvios (x-x_{\text{ref}}),
- adicionar um termo de ação de avanço (u_{\text{ff}}),
- possivelmente adicionar ação integral para remover viés em regime permanente.
Observabilidade parcial O LQR assume realimentação completa do estado. Se você só tem medições ruidosas de sensores, precisa de estimação de estado (frequentemente um Filtro de Kalman).
Extensões que você verá na prática
LQR integral (LQI)
Para eliminar erro em regime permanente devido a perturbações constantes ou viés de modelo, aumente o estado com um integrador do erro de rastreamento e execute LQR no sistema aumentado (frequentemente chamado LQI na literatura de controle).
Escalonamento de ganhos
Para sistemas que variam com condições de operação (por exemplo, diferentes velocidades ou cargas), calcule ganhos de LQR em múltiplos pontos de operação e interpole.
Alternativas de controle robusto
Se a incerteza for grande, métodos de controle robusto (por exemplo, (H_\infty)) podem oferecer melhores garantias no pior caso, embora possam ser mais complexos de sintonizar.
Resumo
O LQR é um pilar do controle ótimo e um “cavalo de batalha” em robótica:
- Ele fornece um controlador ótimo de realimentação linear de estado (optimal linear state-feedback) (u=-Kx) para sistemas lineares com custos quadráticos.
- O ganho de realimentação (K) é calculado via a equação de Riccati (CARE/DARE para horizonte infinito, formas diferencial/recursiva para horizonte finito).
- A sintonia é feita por meio de (Q) (penalização de estado) e (R) (penalização de controle), oferecendo um compromisso limpo entre precisão e esforço.
- Sob condições padrão, o LQR produz comportamento estável em malha fechada, e a função valor quadrática serve como certificado de Lyapunov.
- Para tarefas robóticas não lineares, o TVLQR estende o LQR ao rastreamento de trajetória ao linearizar ao longo de uma trajetória nominal e produzir ganhos variantes no tempo.
Para sensoriamento ruidoso e implementações com realimentação de saída (output-feedback), o LQR é comumente combinado com um filtro de Kalman para formar Gaussiano Linear Quadrático (LQG). Para restrições e controle por horizonte deslizante (receding-horizon), considere Controle Preditivo Baseado em Modelo (MPC).