Controle Ótimo
O que é controle ótimo?
Controle ótimo é o estudo de como escolher entradas de controle para um sistema dinâmico de modo que a trajetória resultante otimize um objetivo, ao mesmo tempo em que satisfaz a dinâmica e as restrições do sistema.
Ele está no núcleo da robótica e de muitos sistemas de tomada de decisão porque formaliza “agir ao longo do tempo” como um problema de otimização (optimization problem):
- As variáveis de decisão são uma sequência (ou função) de controles (u(t)) e os estados induzidos (x(t)).
- As restrições codificam a física (dinâmica), limites (limites de atuadores) e segurança (evitação de colisões).
- O objetivo codifica metas e preferências da tarefa (alcançar um alvo, minimizar energia, seguir um caminho, etc.).
O controle ótimo está fortemente conectado à otimização de trajetória (trajectory optimization) (resolver por uma trajetória ótima de estados/controles) e fundamenta o Controle Preditivo por Modelo (Model Predictive Control, MPC), em que você resolve repetidamente online um problema de controle ótimo de horizonte finito e aplica apenas a primeira ação de controle (controle por horizonte deslizante). Veja Controle Preditivo por Modelo (MPC).
Formulação do problema
Controle ótimo em tempo contínuo
Uma forma comum em tempo contínuo é:
[ \min_{u(\cdot)} \quad J = \phi(x(T)) + \int_{0}^{T} \ell(x(t),u(t),t),dt ]
sujeito a:
[ \dot{x}(t) = f(x(t),u(t),t), \quad x(0)=x_0 ]
e possivelmente com restrições:
- Limites de entrada: (u(t) \in \mathcal{U})
- Restrições de estado: (x(t) \in \mathcal{X}) (por exemplo, limites de junta)
- Restrições de trajetória: (g(x(t),u(t),t)\le 0)
- Restrições terminais: (x(T)\in \mathcal{X}_T)
Aqui:
- (x(t)) é o estado (posição/velocidade, ângulos/taxas, etc.)
- (u(t)) é o controle (torque, empuxo, ângulo de direção, etc.)
- (\ell) é um custo instantâneo, (\phi) um custo terminal
Controle ótimo em tempo discreto (comum em robótica)
Em tempo discreto (com passo (k=0,\dots,N)):
[ \min_{{u_k}{k=0}^{N-1}} \quad J = \phi(x_N) + \sum{k=0}^{N-1} \ell(x_k,u_k,k) ]
sujeito a:
[ x_{k+1} = f(x_k,u_k,k), \quad x_0 \text{ dado} ]
com restrições como:
- (u_k \in \mathcal{U}) (limites de atuadores)
- (x_k \in \mathcal{X}) (limites de junta/velocidade)
- evitação de colisão (c(x_k)\ge 0)
Formulações discretas são especialmente práticas porque se mapeiam naturalmente para otimização numérica e controle digital.
Objetivos: o que estamos otimizando?
Objetivos de controle ótimo tipicamente codificam uma mistura de:
Alcançar meta / regulação
- Alcançar um estado-alvo (x^*) (por exemplo, pêndulo em pé, pose desejada).
- Uma penalidade quadrática é comum: [ \ell(x,u)= (x-x^*)^\top Q (x-x^*) + u^\top R u ]
Seguimento de trajetória
- Seguir uma trajetória de referência ((x_k^{ref},u_k^{ref})), frequentemente produzida por um planejador.
- Útil em locomoção, manipulação, direção autônoma.
Minimização de energia / esforço
- Penalizar torques grandes ou acelerações altas.
- Ajuda a produzir movimentos suaves e viáveis.
Controle ótimo em tempo
- Minimizar o tempo até a meta (frequentemente leva a controles “bang-bang” sob limites).
- Comum em aeroespacial e robótica agressiva.
Custos conscientes de risco / robustez
- Penalizar incerteza ou desvios, às vezes via restrições de chance ou formulações robustas.
Em termos de ML, o custo (J) exerce o mesmo papel conceitual que uma função de perda (loss function), mas definida sobre trajetórias inteiras em vez de previsões individuais.
Restrições: física, limites e segurança
Restrições frequentemente são a parte mais difícil do controle ótimo prático:
- Limites rígidos de atuadores: saturação de torque do motor, limites de empuxo.
- Restrições de estado: limites de ângulo/velocidade de juntas, manter um UAV acima do solo.
- Restrições de contato: o pé não deve penetrar o chão; limites do cone de atrito.
- Desvio de obstáculos: restrições não convexas; frequentemente tratadas via penalidades, restrições de distância com sinal, ou convexificação sequencial.
- Restrições de dinâmica: a característica definidora—controles não podem ser escolhidos independentemente da evolução do sistema.
Um aprendizado prático fundamental: controle ótimo não é apenas “minimizar custo”, mas “minimizar custo mantendo-se fisicamente e operacionalmente viável”.
Um exemplo concreto: integrador duplo (controle de posição)
Considere uma massa pontual 1D com estado (x_k = [p_k, v_k]^\top) e controle (u_k = a_k) (aceleração):
[ \begin{aligned} p_{k+1} &= p_k + \Delta t , v_k \ v_{k+1} &= v_k + \Delta t , a_k \end{aligned} ]
Meta: alcançar (p=0, v=0) com controle suave:
[ J = \sum_{k=0}^{N-1} \left( x_k^\top Q x_k + u_k^\top R u_k \right) + x_N^\top Q_f x_N ]
Este é um cenário clássico em que o Regulador Linear-Quadrático (Linear Quadratic Regulator, LQR) fornece uma política ótima de realimentação em forma fechada quando a dinâmica é linear e os custos são quadráticos. Veja Regulador Linear-Quadrático (LQR).
Três perspectivas fundamentais de solução
Controle ótimo pode ser abordado a partir de três grandes ângulos teóricos, cada um inspirando algoritmos práticos.
1) Princípio do Máximo de Pontryagin (Pontryagin’s Maximum Principle, PMP) (métodos indiretos)
O Princípio do Máximo de Pontryagin fornece condições necessárias para otimalidade em problemas de tempo contínuo ao introduzir um custoestado (costate) (adjunto) (\lambda(t)), análogo a multiplicadores de Lagrange para restrições de dinâmica.
Defina o Hamiltoniano (Hamiltonian):
[ H(x,u,\lambda,t) = \ell(x,u,t) + \lambda^\top f(x,u,t) ]
O PMP afirma que uma trajetória ótima deve satisfazer:
- Dinâmica do estado: (\dot{x}^*(t)=\frac{\partial H}{\partial \lambda})
- Dinâmica do custoestado: (\dot{\lambda}^*(t)=-\frac{\partial H}{\partial x})
- Condição de controle ótimo: (u^*(t) = \arg\min_{u \in \mathcal{U}} H(x^*,u,\lambda^*,t))
- Condições terminais baseadas em (\phi(x(T)))
Interpretação: o PMP transforma o problema em um problema de valor de contorno (BVP) acoplado em (x(t)) e (\lambda(t)).
Nota prática: métodos indiretos (métodos de tiro) podem ser muito precisos, mas podem ser sensíveis à inicialização e são mais difíceis de aplicar com restrições complexas.
2) Programação Dinâmica (Dynamic Programming, DP) e a equação HJB
Programação dinâmica expressa controle ótimo por meio da função de valor (value function):
[ V(x,t) = \min_{u(\cdot)} \left[ \phi(x(T)) + \int_t^T \ell(x(\tau),u(\tau),\tau),d\tau \right] ]
Em tempo contínuo, (V) satisfaz a equação de Hamilton–Jacobi–Bellman (HJB):
[ -\frac{\partial V}{\partial t} = \min_{u \in \mathcal{U}} \left[ \ell(x,u,t) + \nabla_x V^\top f(x,u,t) \right] ]
Interpretação: a programação dinâmica produz diretamente a política ótima de realimentação (u^*(x,t)).
Realidade prática: programação dinâmica exata escala mal com a dimensão do estado (“maldição da dimensionalidade”). Essa limitação é uma razão pela qual Aprendizado por Reforço e métodos aproximados de programação dinâmica são estudados: eles visam aproximar funções de valor ou políticas em espaços de alta dimensão.
3) LQR: a solução canônica em forma fechada
Quando:
- a dinâmica é linear: (x_{k+1}=Ax_k+Bu_k)
- os custos são quadráticos: (x^\top Q x + u^\top R u)
então a política ótima é uma realimentação linear:
[ u_k^* = -K_k x_k ]
onde (K_k) vem da recursão de Riccati (horizonte finito) ou da equação de Riccati (horizonte infinito). O LQR é amplamente usado porque é:
- computacionalmente eficiente,
- estabilizante sob condições padrão,
- um bloco de construção para métodos não lineares (por exemplo, iLQR/DDP).
Para estimação + controle LQR sob ruído Gaussiano, veja Gaussiano Linear-Quadrático (Linear Quadratic Gaussian, LQG), que combina LQR com um Filtro de Kalman (ou Filtro de Kalman Unscented (Unscented Kalman Filter, UKF) para filtragem não linear).
Da teoria aos algoritmos: como o controle ótimo é resolvido na prática
Sistemas robóticos reais são não lineares e possuem restrições, então tipicamente usamos otimização numérica. Duas famílias amplas dominam:
Métodos indiretos (tiro)
- Usam as condições do PMP e resolvem para custoestados iniciais desconhecidos (ou controles) de modo que as condições terminais sejam satisfeitas.
- Prós: alta precisão para problemas suaves.
- Contras: sensíveis à inicialização; restrições podem ser incômodas.
Métodos diretos (transcrição + PNL)
Métodos diretos discretizam a trajetória e transformam o problema de controle ótimo em um programa não linear (nonlinear program, NLP):
- Variáveis de decisão: ({x_k,u_k}_{k=0}^{N})
- Restrições: (x_{k+1}-f(x_k,u_k)=0), além de limites e restrições de trajetória
- Resolve usando SQP (Sequential Quadratic Programming) ou métodos de ponto interior
Dois estilos populares de transcrição:
- Tiro direto: otimizar controles ({u_k}), simular a dinâmica para frente.
- Colocação direta: otimizar tanto estados quanto controles, impor a dinâmica em pontos de colocação (frequentemente mais estável para dinâmicas rígidas e restrições).
Esses métodos são os carros-chefe por trás de muitas ferramentas de otimização de trajetória em robótica.
iLQR / DDP: métodos de segunda ordem para otimização de trajetória
Para problemas com dinâmica e custos diferenciáveis (restrições tratadas de forma suave ou via variantes especializadas), o LQR iterativo (iterative LQR, iLQR) e a Programação Dinâmica Diferencial (Differential Dynamic Programming, DDP) repetidamente:
- fazem o rollout de uma trajetória,
- aproximam localmente a dinâmica (linearizam) e os custos (quadraticizam),
- resolvem o subproblema LQR resultante (via recursão de Riccati),
- atualizam a sequência de controle.
Isso cria uma conexão estreita entre otimização de trajetória e LQR: iLQR usa LQR como um solucionador local.
Um loop simplificado no estilo iLQR se parece com:
# Pseudocode: iLQR-style trajectory optimization (discrete time)
u = init_controls(N) # e.g., zeros
for it in range(max_iters):
x = rollout_dynamics(x0, u) # forward simulate x_{k+1}=f(x_k,u_k)
cost = total_cost(x, u)
# linearize dynamics: x_{k+1} ≈ A_k x_k + B_k u_k + c_k
A, B, c = linearize_dynamics_along_trajectory(x, u)
# quadraticize cost: l(x,u) ≈ 0.5 [x;u]^T H_k [x;u] + g_k^T [x;u]
H, g = quadraticize_cost_along_trajectory(x, u)
# backward pass: solve local LQR to get gains K_k and feedforward terms d_k
K, d = riccati_backward_pass(A, B, H, g)
# forward pass with line search
alpha = line_search_step()
u = update_controls(u, K, d, alpha)
Em muitas pilhas de robótica, iLQR/DDP é usado para planejamento local rápido e como um loop interno em MPC.
Por que o controle ótimo fundamenta o MPC
MPC é melhor entendido como controle ótimo repetido:
- No tempo (t), medir/estimar o estado atual (\hat{x}_t).
- Resolver um problema de controle ótimo de horizonte finito de (\hat{x}_t) até (t+N).
- Aplicar o primeiro controle (u_t^*).
- Deslocar o horizonte e repetir.
Isso produz comportamento de realimentação mesmo se a otimização subjacente for em malha aberta, porque o replanejamento corrige distúrbios e erros de modelagem.
Principais forças do MPC:
- Lida naturalmente com sistemas multivariáveis.
- Pode incorporar restrições explicitamente (entrada, estado, obstáculo).
- Oferece uma troca (tradeoff) fundamentada entre desempenho e esforço.
Principais desafios:
- Requer um modelo (mesmo que aproximado).
- Precisa de otimização em tempo real (latência importa).
- Restrições não convexas (contatos, obstáculos) podem exigir aproximações.
Para detalhes, veja Controle Preditivo por Modelo (MPC).
Aplicações práticas em robótica e sistemas de IA
Manipulação robótica
- Computar torques de junta para mover um braço evitando limites de junta e obstáculos.
- Custos podem penalizar erro do efetuador final e esforço de controle.
- Restrições podem incluir evitação de colisão e limites de torque.
Locomoção com pernas
- Planejar posicionamentos dos pés e trajetórias do corpo sob restrições de contato e cones de atrito.
- Frequentemente resolvido com colocação direta ou convexificação sequencial.
- Variantes de MPC rodam em dezenas a centenas de Hz para estabilizar a caminhada.
Direção autônoma e drones
- Seguir faixas/pontos de passagem respeitando aceleração, direção e restrições de segurança.
- Drones usam MPC para seguir trajetórias agressivas respeitando limites de empuxo e atitude.
Sistemas de energia e operações
- Controle ótimo aparece em gestão de baterias, controle de HVAC e controle de processos, frequentemente com restrições e objetivos econômicos.
ML e controle ótimo: onde se encontram
- RL pode ser visto como aprender uma política/função de valor de controle ótimo quando o modelo é desconhecido ou caro.
- Controle ótimo pode gerar trajetórias especialistas para aprendizado por imitação, ou fornecer um “escudo” de segurança em torno de políticas aprendidas.
- Otimização de trajetória diferenciável pode ser incorporada em pipelines de aprendizado (por exemplo, aprender funções de custo ou modelos de dinâmica), otimizada com Descida de Gradiente.
Modelagem e estimação: a metade frequentemente ausente
Controle ótimo assume que você tem o estado (x). Sistemas reais usam sensores, então muitas vezes você precisa de um estimador de estado:
- Gaussiano linear: filtragem de Kalman (Filtro de Kalman)
- Não linear: UKF (Filtro de Kalman Unscented (UKF)), EKF, filtros de partículas
Quando você combina um estimador com um controlador ótimo (por exemplo, LQR + filtro de Kalman), você obtém LQG; veja Gaussiano Linear-Quadrático (LQG).
Escolhas de projeto comuns e armadilhas
Escolhendo custos
- Custos quadráticos são populares porque se comportam bem numericamente e se alinham com aproximações locais no estilo LQR.
- (Q) e (R) com escalas ruins podem causar resposta lenta ou saturação de atuadores.
- Custos/restrições terminais importam muito em problemas de horizonte finito (especialmente MPC).
Lidando com restrições
- Restrições rígidas (por exemplo, ponto interior) dão garantias fortes, mas podem ser mais difíceis de resolver rapidamente.
- Restrições suaves (termos de penalidade) melhoram a robustez da otimização, mas podem violar restrições se os pesos forem baixos demais.
- Restrições não convexas (obstáculos, contatos) podem causar mínimos locais; inicialização é crítica.
Descasamento de modelo
- Se a dinâmica (f) for imprecisa, o plano “ótimo” computado pode ser ruim.
- O MPC reduz a sensibilidade via replanejamento, mas apenas se o modelo for “bom o suficiente” ao longo do horizonte.
Cômputo em tempo real
- MPC prático frequentemente depende de warm starts, solucionadores sob medida, dinâmica simplificada e horizontes mais curtos.
Resumo
Controle ótimo formula a tomada de decisão ao longo do tempo como um problema de otimização sobre trajetórias e entradas, restrito por dinâmica e frequentemente por requisitos de segurança/viabilidade. Seus fundamentos teóricos incluem:
- Princípio do Máximo de Pontryagin (condições necessárias via Hamiltonianos/custoestados),
- Programação Dinâmica / HJB (realimentação ótima via funções de valor),
- LQR (controle ótimo em forma fechada para sistemas linear-quadráticos; um bloco de construção chave).
Na prática, controle ótimo é resolvido usando otimização numérica de trajetória (tiro, colocação, SQP, ponto interior) e métodos locais de segunda ordem como iLQR/DDP. Ele motiva diretamente e impulsiona o MPC, uma das estratégias de controle mais usadas na robótica moderna porque combina otimização com realimentação e restrições.
Para aprofundamentos em casos especiais e implementações, veja:
- Regulador Linear-Quadrático (LQR)
- Controle Preditivo por Modelo (MPC)
- Gaussiano Linear-Quadrático (LQG)
- Filtro de Kalman e Filtro de Kalman Unscented (UKF)