Controle Preditivo Baseado em Modelo (Model Predictive Control, MPC)
Visão geral
Controle Preditivo por Modelo (Model Predictive Control, MPC) é um método de controle por realimentação (feedback control) que resolve repetidamente um problema de otimização de horizonte finito (finite-horizon optimization problem) usando um modelo explícito (explicit model) do sistema. A cada ciclo de controle (control cycle), o MPC:
- Mede ou estima o estado atual.
- Resolve um problema de otimização ao longo de um horizonte futuro para encontrar uma sequência ótima de ações de controle.
- Aplica apenas a primeira ação de controle.
- Desloca o horizonte para frente e repete (isso é chamado de controle de horizonte deslizante (receding-horizon control)).
O MPC é amplamente usado em robótica porque lida naturalmente com restrições (constraints) (limites de atuadores, limites de juntas, evitação de colisões, restrições de equilíbrio) e se destaca em rastreamento de trajetória (trajectory tracking) quando a dinâmica e as restrições importam. Seus principais desafios práticos são erros de modelagem (modeling errors), perturbações (disturbances) e cumprir prazos de computação em tempo real (real-time computation).
A formulação do problema de MPC
Dinâmica em tempo discreto (discrete-time dynamics)
Robôs são comumente controlados em tempo discreto com período de amostragem (\Delta t). Um modelo geral de dinâmica é:
[ x_{k+1} = f(x_k, u_k) ]
- (x_k): estado no instante (k) (por exemplo, posição, velocidade, orientação)
- (u_k): entrada de controle (por exemplo, torques, acelerações, ângulo de direção)
- (f(\cdot)): função de dinâmica (linear ou não linear)
Controle ótimo de horizonte finito (finite-horizon optimal control)
No instante (t), o MPC escolhe uma sequência de controle (u_{0:N-1}) ao longo de um horizonte de (N) passos resolvendo:
[ \min_{x_{0:N},,u_{0:N-1}} \sum_{k=0}^{N-1} \ell(x_k, u_k) + \ell_f(x_N) ]
sujeito a:
- Restrições de dinâmica: (x_{k+1} = f(x_k, u_k))
- Restrições de estado: (x_k \in \mathcal{X}) (por exemplo, limites de junta, regiões seguras, evitação de obstáculos)
- Restrições de entrada: (u_k \in \mathcal{U}) (por exemplo, limites de torque, direção máxima)
- Condição inicial: (x_0 = \hat{x}(t)) (estado atual medido/estimado)
Escolhas comuns para o custo de estágio (stage cost) (\ell) incluem rastreamento quadrático e penalidades de esforço, por exemplo:
[ \ell(x_k,u_k) = (x_k - x_k^{\text{ref}})^\top Q (x_k - x_k^{\text{ref}}) + u_k^\top R u_k ]
Realimentação de horizonte deslizante (receding horizon feedback)
Embora o MPC otimize ao longo de um horizonte inteiro, ele executa apenas a primeira ação (u_0^*). Isso transforma a otimização em malha aberta (open-loop) em realimentação em malha fechada (closed-loop):
- A realimentação surge porque você replaneja a cada ciclo usando a estimativa de estado mais recente.
- Esse replanejamento é o que torna o MPC robusto a perturbações moderadas e a discrepâncias de modelagem.
Por que o MPC é popular em robótica
1) O tratamento de restrições é nativo
Robôs enfrentam restrições em toda parte:
- Saturação de atuadores: limites de torque/força, limites de corrente do motor
- Limites cinemáticos: ângulos de junta, velocidades, acelerações
- Restrições de segurança: zonas proibidas, forças de contato, cones de atrito
- Viabilidade dinâmica: equilíbrio, limites de inclinação, envelope de voo estável
O MPC trata isso como elementos de primeira classe via as restrições (\mathcal{X}, \mathcal{U}). Esta é uma grande vantagem sobre controladores clássicos (por exemplo, PID) que tipicamente lidam com restrições de forma indireta via recorte/saturação (o que pode causar mau comportamento ou instabilidade).
2) Rastreamento de trajetória com consciência da dinâmica
Para tarefas como:
- seguir um caminho com um robô móvel,
- pousar um quadricóptero (quadrotor),
- balançar uma perna mantendo o equilíbrio,
a “melhor” ação de controle depende do comportamento futuro previsto. O MPC usa explicitamente o modelo para prever o futuro e escolher ações que reduzam o erro futuro respeitando limites.
3) Uma ponte flexível entre planejamento e controle
O MPC fica entre:
- otimização de trajetória (trajectory optimization) (planejamento de longo horizonte, muitas vezes offline), e
- controle por realimentação (curto horizonte, estabilização em tempo real).
Em arquiteturas de robótica, um planejador global pode fornecer uma trajetória de referência, e o MPC atua como um controlador local que rastreia a referência enquanto impõe viabilidade.
MPC linear vs MPC não linear
MPC linear (Linear MPC, LMPC)
Se a dinâmica é linear:
[ x_{k+1} = A x_k + B u_k ]
e os custos/restrições são convexos (frequentemente custo quadrático + restrições lineares), o problema se torna um programa quadrático (Quadratic Program, QP):
- solucionadores rápidos e confiáveis,
- garantias teóricas fortes (convexidade),
- amplamente usado para rastreamento em alta taxa.
Uso típico: rastreamento estabilizado ao redor de um ponto de operação; muitas aplicações em robótica linearizam a dinâmica em torno da trajetória atual.
MPC não linear (Nonlinear MPC, NMPC)
Com dinâmica não linear (f(\cdot)) e restrições não lineares (por exemplo, distâncias a obstáculos, dinâmica completa de corpo rígido), o MPC se torna um programa não linear (Nonlinear Program, NLP):
- mais expressivo e preciso,
- porém mais pesado computacionalmente e potencialmente não convexo,
- exige inicialização cuidadosa e ajuste fino do solucionador.
Uso típico: voo agressivo de quadricópteros, corrida de carros, locomoção de robôs com pernas, manipulação com contatos (embora contatos frequentemente sejam tratados com aproximações).
Um loop prático de MPC (pseudocódigo)
# Receding-horizon MPC loop
while robot_is_running:
x0 = estimate_state() # often via a filter like a Kalman filter
ref = get_reference_trajectory() # desired x_ref[0:N]
# Solve finite-horizon optimization:
# minimize sum l(x_k, u_k) subject to x_{k+1} = f(x_k,u_k), constraints
u_seq, x_seq = solve_mpc(x0, ref)
apply_control(u_seq[0]) # execute only first input
wait(dt)
A qualidade da estimação de estado é crítica na prática; o MPC frequentemente é combinado com um estimador de estado como o Filtro de Kalman (Kalman Filter) (ou suas variantes não lineares).
Exemplo trabalhado: rastreamento de trajetória de robô móvel com restrições
Considere um robô terrestre usando um modelo simples de bicicleta cinemática:
- estado (x = [p_x, p_y, \theta, v])
- entrada (u = [a, \delta]) (aceleração, ângulo de direção)
- restrições: (v_{\min} \le v \le v_{\max}), (|a|\le a_{\max}), (|\delta|\le \delta_{\max})
O robô deve seguir um caminho de referência respeitando limites de direção e aceleração. O MPC pode:
- penalizar o desvio em relação ao caminho e o erro de orientação,
- penalizar o esforço de controle e mudanças rápidas de direção,
- impor restrições para evitar curvas inviáveis ou velocidades inseguras.
Um desenho de custo comum:
- rastreamento: ((p - p^{ref})^\top Q_p (p - p^{ref})), penalidade de erro de orientação
- suavidade: (|\Delta u_k|^2) para reduzir ações bruscas
- custo terminal (terminal cost): incentiva estabilidade perto do fim do horizonte
Em ambientes congestionados, você pode adicionar restrições de evitação de obstáculos, por exemplo:
[ \text{distance}(p_k, \text{obstacle}) \ge r_{\text{safe}} ]
Isso frequentemente torna o problema não linear/não convexo, levando você ao NMPC ou a aproximações convexas (por exemplo, restrições linearizadas).
Fundamentos teóricos (o que faz o MPC “funcionar”)
Conexão com controle ótimo
O MPC é uma aproximação prática e online do controle ótimo de horizonte infinito: em vez de otimizar para sempre, você otimiza ao longo de um horizonte finito móvel. Com um projeto adequado, o MPC pode alcançar desempenho próximo a soluções de horizonte infinito.
Considerações de estabilidade
O MPC “simples” não garante automaticamente estabilidade em malha fechada em todos os cenários. Técnicas comuns para melhorar a estabilidade incluem:
- Custo terminal (\ell_f(x_N)): aproxima o “custo-para-ir (cost-to-go)” além do horizonte (frequentemente derivado de LQR).
- Restrição terminal: força o estado terminal (x_N) a entrar em uma região onde existe um controlador estabilizante conhecido.
- Horizonte suficientemente longo: horizontes maiores melhoram a antecipação, mas aumentam a computação.
Em cenários linear-quadráticos, o MPC com um custo terminal baseado em LQR frequentemente produz fortes propriedades de estabilidade. (Veja também: Regulador Linear Quadrático (Linear Quadratic Regulator), Controle Ótimo (Optimal Control).)
Viabilidade recursiva
Um objetivo prático é que, se o problema de MPC é viável agora, ele permaneça viável no próximo passo (apesar de perturbações). Garantir isso pode exigir:
- aperto conservador de restrições,
- projetos de MPC robusto (ver abaixo),
- modelagem cuidadosa de perturbações.
Considerações práticas em robótica
1) Erros de modelagem e perturbações
Robôs reais nunca correspondem exatamente ao modelo:
- atrito não modelado, folga mecânica, dinâmica de atuadores,
- mudanças de carga útil,
- interações de contato (escorregamento, complacência),
- efeitos aerodinâmicos (para drones),
- latência e discretização.
O MPC mitiga isso via replanejamento por realimentação, mas discrepâncias significativas podem causar:
- violações de restrição (por exemplo, saturações),
- piora no rastreamento,
- falhas do solucionador (se trajetórias previstas como viáveis forem inviáveis na realidade).
Estratégias comuns de mitigação:
- Replanejamento frequente (alta taxa de controle).
- Estimação de estado (um bom (\hat{x}) é essencial).
- Calibração de modelo e identificação.
- Ideias de MPC robusto (abaixo).
- Aperto de restrições: planejar com margens para que a execução real permaneça dentro dos limites.
2) Restrições de computação em tempo real
O MPC em robótica frequentemente precisa rodar a:
- 20–100 Hz para robôs móveis,
- 100–1000 Hz para drones e sistemas dinâmicos (às vezes com modelos simplificados).
Principais truques para fazer o MPC rodar em tempo real:
- Inicialização quente (warm starting): inicializar o solucionador com a solução do ciclo anterior (deslocada em um passo).
- Linearização (linearization): usar LMPC ou MPC linear sequencial em torno da trajetória atual.
- Horizontes curtos: manter (N) pequeno, mas suficiente.
- Solucionadores eficientes:
- solucionadores de QP para LMPC (rápidos, previsíveis)
- solucionadores de NMPC sob medida usando Programação Quadrática Sequencial (Sequential Quadratic Programming, SQP) ou métodos de ponto interior (interior-point methods)
- Bloqueio de movimento (move blocking): reduzir variáveis de decisão mantendo entradas constantes por múltiplos passos.
- Iteração em tempo real (real-time iteration, RTI) para NMPC: fazer uma iteração do solucionador por ciclo de controle, trocando optimalidade por velocidade.
Um padrão de engenharia frequente é rodar um MPC rápido em alta taxa com um modelo simplificado, enquanto um planejador mais lento atualiza referências ou restrições em taxa mais baixa.
3) Escolha de horizonte e passo de tempo
- Horizonte curto: rápido, mas pode ser míope (por exemplo, frear tarde).
- Horizonte longo: melhor antecipação, mas mais computação e potencialmente mais sensibilidade a discrepâncias de modelagem.
Uma regra prática: o horizonte deve cobrir a constante de tempo dominante do sistema e distância/tempo suficientes para “enxergar” restrições próximas (curvas, obstáculos).
4) Ajuste da função de custo
Ajustar (Q, R) (e possivelmente penalidades de (\Delta u)) é uma arte:
- Pesos altos de rastreamento: rastreamento agressivo, mas pode saturar atuadores.
- Pesos altos de controle: entradas mais suaves, porém maior erro de rastreamento.
- Penalizar (\Delta u): reduz oscilações e desgaste dos atuadores.
Em equipes de robótica, o ajuste do custo frequentemente é tão importante quanto a escolha do solucionador.
5) Gestão de restrições e viabilidade
Restrições rígidas podem causar inviabilidade devido a perturbações ou erros de estimação. Sistemas práticos frequentemente usam:
- Restrições suaves (soft constraints): permitem pequena violação com penalidade (variáveis de folga (slack variables)).
- Filtros de segurança (safety filters): sobrescrevem o MPC se ele propuser ações inseguras.
- Controladores de contingência (fallback controllers): por exemplo, trocar para um controlador estabilizante quando a otimização falha.
MPC robusto e estocástico (tratando incerteza explicitamente)
Quando a incerteza é significativa, o MPC “nominal” pode ser insuficiente.
MPC robusto (Robust MPC) (pior caso)
O MPC robusto assume que perturbações pertencem a um conjunto limitado e garante restrições para todas as perturbações permitidas. Uma abordagem popular é o MPC em tubo (tube MPC):
- planejar uma trajetória nominal,
- aplicar uma política de realimentação para manter o estado real dentro de um “tubo” ao redor da nominal,
- apertar restrições para considerar o tamanho do tubo.
Isso melhora a segurança, mas pode ser conservador.
MPC estocástico (Stochastic MPC) (probabilístico)
O MPC estocástico modela a incerteza probabilisticamente e pode impor restrições de chance (chance constraints), por exemplo:
[ \Pr(x_k \in \mathcal{X}) \ge 0.99 ]
Isso é atraente para robótica guiada por percepção, onde a incerteza é naturalmente probabilística, mas aumenta a complexidade computacional e de modelagem.
MPC em aplicações de robótica
Controle de quadricópteros
Quadricópteros têm dinâmica rápida e restrições (limites de empuxo, limites de inclinação). O MPC é usado para:
- rastreamento de trajetória em alta velocidade,
- evitação de obstáculos no planejamento local,
- lidar com saturação de atuadores de forma suave.
Frequentemente usa-se uma arquitetura em cascata (cascaded architecture): o MPC fornece acelerações/atitudes desejadas, e controladores de atitude de baixo nível as rastreiam.
Robôs com pernas e equilíbrio
A locomoção com pernas introduz restrições como:
- cones de atrito,
- limites de centro de pressão (center-of-pressure),
- restrições de posicionamento do pé,
- temporização de contato (às vezes fixa, às vezes otimizada).
Muitos sistemas com pernas usam MPC em modelos simplificados (por exemplo, dinâmica centroidal) para planejar forças e movimento do centro de massa (center of mass, COM) em tempo real.
Manipuladores (braços robóticos)
O MPC pode lidar com:
- limites de junta e limites de torque,
- restrições de evitação de colisão,
- rastreamento suave de trajetória no espaço de tarefa.
Para braços com alto número de graus de liberdade (degree of freedom, DOF), a computação pode ser pesada, então praticantes frequentemente linearizam a dinâmica, reduzem modelos ou usam MPC principalmente para um planejamento em malha externa mais lento, enquanto malhas internas lidam com estabilização rápida.
Relação com aprendizado e métodos modernos de IA
O MPC é um método clássico de controle, mas interage fortemente com métodos modernos de IA/aprendizado de máquina (AI/ML):
- Modelos de dinâmica aprendidos (learned dynamics models): substituir ou complementar (f(\cdot)) com modelos aprendidos a partir de dados (redes neurais (neural networks), processos gaussianos (Gaussian processes)). Isso pode melhorar a precisão, mas levanta preocupações de segurança e generalização. (Relacionado: Redes Neurais (Neural Networks).)
- MPC como planejador em aprendizado por reforço baseado em modelo (model-based RL): muitos métodos de Aprendizado por Reforço (Reinforcement Learning) baseado em modelo usam MPC para seleção de ações ao planejar em um modelo aprendido (por exemplo, métodos de tiro (shooting methods)).
- MPC diferenciável (Differentiable MPC): em alguns pipelines, a otimização do MPC é diferenciada para aprender pesos de custo ou parâmetros do modelo de ponta a ponta (end-to-end). Isso mistura otimização e aprendizado, mas pode ser numericamente delicado.
Uma conclusão prática: o MPC frequentemente fornece estrutura forte e tratamento de restrições, enquanto o aprendizado pode melhorar modelos, entradas de percepção ou a modelagem do custo.
Variantes comuns de MPC que você verá na prática
- MPC de rastreamento (Tracking MPC): seguir uma trajetória de referência fornecida.
- MPC econômico (Economic MPC): otimizar diretamente um objetivo da tarefa (energia, tempo, recompensa), não apenas rastreamento.
- MPC explícito (Explicit MPC): pré-computar a lei de controle offline (funciona melhor para pequenos sistemas lineares).
- MPC hierárquico (Hierarchical MPC): múltiplas camadas de MPC em diferentes taxas (planejador + rastreador).
- MPC baseado em amostragem (sampling-based MPC) / métodos de tiro: amostrar sequências de ação, simular a dinâmica e escolher a melhor (comum em aprendizado por reforço baseado em modelo).
Dicas de implementação e armadilhas
Dicas
- Comece com LMPC em um modelo linearizado; migre para NMPC apenas se necessário.
- Use inicializações quentes e mantenha o estado do solucionador entre passos de tempo.
- Adicione penalidades de taxa da entrada (input-rate penalties) ((\Delta u)) para reduzir oscilações e melhorar o comportamento no mundo real.
- Use restrições suaves para restrições “desejáveis”; mantenha restrições de segurança como rígidas.
- Invista em estimação de estado (frequentemente tão importante quanto o controle).
Armadilhas
- Horizontes excessivamente longos que não cumprem prazos de tempo real.
- Modelos excessivamente confiantes causando violações de restrição no robô real.
- Formulações não convexas de NMPC que ficam presas em mínimos locais ruins.
- Negligenciar a latência: quando você aplica (u_0^*), o estado pode já ter mudado.
Resumo
O Controle Preditivo por Modelo (MPC) é um pilar do controle moderno em robótica porque combina:
- predição (usando um modelo do sistema),
- otimização (escolhendo ações para minimizar um custo),
- realimentação (replanejando a cada passo),
- e restrições (impostas explicitamente).
Na prática, implantações bem-sucedidas de MPC dependem de estimação de estado robusta, modelagem cuidadosa, eficiência do solucionador e tratamento criterioso de inviabilidade e incerteza. Quando essas peças se encaixam, o MPC fornece uma abordagem poderosa e flexível para rastreamento de trajetória e controle seguro, consciente de restrições, em robôs reais.