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:

  1. Mede ou estima o estado atual.
  2. Resolve um problema de otimização ao longo de um horizonte futuro para encontrar uma sequência ótima de ações de controle.
  3. Aplica apenas a primeira ação de controle.
  4. 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.

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.