Controle

Visão geral

Controle (control) em robótica é a arte e a ciência de fazer sistemas físicos se comportarem como desejado apesar de perturbações, incerteza e sensoriamento/atuação imperfeitos. Um controlador (controller) transforma medições (por exemplo, ângulos das juntas, leituras de IMU, estimativas de estado baseadas em câmera) e metas (por exemplo, uma posição ou trajetória desejada) em comandos (torques, velocidades, correntes de motor).

Na robótica moderna, “controle” fica no fim do pipeline (pipeline) descrito em Percepção → Planejamento → Controle. O controle por realimentação (feedback control) clássico fornece propriedades fortes de confiabilidade e segurança, enquanto métodos baseados em aprendizado (por exemplo, de Aprendizado por Reforço ou Aprendizado por Imitação) oferecem flexibilidade, capacidade de lidar com percepção de alta dimensionalidade e desempenho em tarefas complexas ou ricas em contato, como Manipulação. Os sistemas mais bem-sucedidos no mundo real frequentemente combinam políticas aprendidas (learned policies) com controladores clássicos, em vez de substituí-los completamente.

Este artigo cobre:

  • Fundamentos de controle por realimentação (estabilidade, rastreamento, robustez)
  • Controladores clássicos comuns (PID, LQR, MPC, controle de impedância)
  • Como políticas aprendidas interagem com o controle clássico (arquiteturas híbridas (hybrid architectures), aprendizado residual (residual learning), modelos aprendidos para controle preditivo por modelo)
  • Considerações práticas para robôs reais (latência, saturação, estimação de estado, segurança)

Noções básicas de controle por realimentação

Malha aberta vs malha fechada

  • Controle em malha aberta (open-loop control): o comando não depende do resultado medido. Exemplo: “Aplique 1 Nm de torque por 1 segundo.” Funciona apenas se o modelo for perfeito e as perturbações forem desprezíveis.
  • Controle em malha fechada (realimentação) (closed-loop (feedback) control): o comando depende da medição. Exemplo: “Aplique torque proporcional ao erro de posição.” A realimentação corrige perturbações e erros de modelagem.

A realimentação é central em robótica porque sistemas reais têm:

  • atrito e folga mecânica (backlash),
  • cargas variáveis (ao pegar objetos),
  • perturbações externas (empurrões, vento),
  • ruído e deriva em sensores,
  • modelos imperfeitos.

Um modelo matemático mínimo

Uma abstração comum é um sistema dinâmico em tempo discreto:

[ x_{t+1} = f(x_t, u_t) \quad,\quad y_t = h(x_t) ]

  • (x_t): estado (por exemplo, posição/velocidade das juntas)
  • (u_t): entrada de controle (por exemplo, comandos de torque)
  • (y_t): saída medida (possivelmente ruidosa)

Um controlador por realimentação calcula:

[ u_t = \pi(y_t, r_t) ]

onde (r_t) é a referência (setpoint ou trajetória desejada).

Objetivos principais: regulação, rastreamento e rejeição de perturbações

  • Regulação: levar o sistema a um alvo fixo (manter uma junta em 30°).
  • Rastreamento: seguir uma referência variante no tempo (ciclo de caminhada, trajetória).
  • Rejeição de perturbações: permanecer próximo da referência mesmo sob empurrões ou mudanças de carga.

Estabilidade (por que a realimentação pode falhar)

Um controlador que “tenta corrigir erro” ainda pode desestabilizar o sistema se os ganhos forem altos demais, houver atrasos, ou o modelo estiver errado. A análise de estabilidade vai de ferramentas lineares (autovalores, resposta em frequência) a ferramentas não lineares (funções de Lyapunov).

Na prática, engenheiros de robótica frequentemente projetam controladores com:

  • margens (margens de ganho/fase (gain/phase margins)) para tolerar atrasos e incerteza,
  • tratamento de saturação (saturation handling) (motores têm limites),
  • filtragem/observadores (observers) porque raramente se mede o estado completo diretamente.

Controladores clássicos centrais

Controle PID (cavalo de batalha da indústria)

Um controlador PID para um erro escalar (e(t) = r(t) - y(t)):

[ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} ]

Intuição:

  • P reage ao erro atual (correção rápida).
  • I remove viés em regime permanente (por exemplo, gravidade, atrito).
  • D amortece o movimento ao reagir à velocidade/variação do erro.

Exemplo: controle de posição de junta

class PID:
    def __init__(self, kp, ki, kd, dt, umin=None, umax=None):
        self.kp, self.ki, self.kd = kp, ki, kd
        self.dt = dt
        self.integral = 0.0
        self.prev_error = 0.0
        self.umin, self.umax = umin, umax

    def step(self, r, y):
        e = r - y
        self.integral += e * self.dt
        de = (e - self.prev_error) / self.dt
        self.prev_error = e

        u = self.kp * e + self.ki * self.integral + self.kd * de

        # simple saturation
        if self.umin is not None: u = max(self.umin, u)
        if self.umax is not None: u = min(self.umax, u)
        return u

Notas práticas

  • Derivadas amplificam ruído → frequentemente se usam derivadas filtradas ou sensores de velocidade.
  • O termo integral pode sofrer “wind up” quando atuadores saturam → use esquemas de anti-windup (anti-windup).
  • O PID se destaca em malhas de baixo nível (velocidade/corrente de motor, posição de junta) e é comum como uma “malha interna (inner loop)” sob planejadores/políticas de nível mais alto.

Controle em espaço de estados (state-space): LQR (realimentação linear ótima)

Para um sistema linear (x_{t+1} = Ax_t + Bu_t), o regulador linear-quadrático (Linear Quadratic Regulator, LQR) encontra uma política linear (u_t = -Kx_t) que minimiza um custo quadrático:

[ J = \sum_t x_t^\top Q x_t + u_t^\top R u_t ]

  • (Q): penaliza erro de estado
  • (R): penaliza esforço de controle

O LQR fornece:

  • garantias teóricas fortes para modelos lineares,
  • uma forma principiada de ajustar compromissos,
  • um bloco de construção comum em robôs com pernas, drones e manipuladores (frequentemente em torno de uma linearização).

Controle Preditivo por Modelo (Model Predictive Control, MPC): planejamento e controle combinados

O controle preditivo por modelo resolve repetidamente um problema de otimização online (online):

  1. Prediz estados futuros usando um modelo.
  2. Otimiza uma sequência de controles ao longo de um horizonte (H).
  3. Aplica o primeiro controle e, então, replana no próximo passo de tempo.

O controle preditivo por modelo lida naturalmente com:

  • restrições de entrada/estado (limites de torque, limites de junta),
  • acoplamento multivariável,
  • rastreamento de trajetória com antecipação (lookahead).

Em robótica, o controle preditivo por modelo frequentemente fica entre o planejamento de movimento e o controle de baixo nível:

  • um módulo de Planejamento de Movimento fornece uma trajetória grosseira,
  • o controle preditivo por modelo a refina e rastreia sob dinâmicas/restrições,
  • um controlador de torque/posição de baixo nível executa.

Controle de impedância / controle de admitância (admittance control) (interação rica em contato)

Para manipulação e locomoção, muitas vezes você quer que o robô se comporte como um massa-mola-amortecedor (mass-spring-damper) em relação a uma pose-alvo:

[ F = K(x_\text{des} - x) + D(\dot{x}_\text{des} - \dot{x}) ]

Isso é central para:

  • empurrar e inserir com estabilidade,
  • preensão (grasping) complacente,
  • interação humano-robô segura.

O controle de impedância fornece uma forma estruturada de ser robusto a incertezas de contato — altamente relevante em Manipulação.

Estimação de estado (state estimation): o controle depende do que você consegue medir

Muitos controladores assumem acesso ao estado completo (x), mas robôs tipicamente observam medições parciais e ruidosas. Abordagens comuns incluem observadores e filtros como o Filtro de Kalman, ou a fusão de IMU + encoders + Localização e Mapeamento Simultâneos (Simultaneous Localization and Mapping, SLAM) para pose.

Por que isso importa para aprendizado + controle: uma política aprendida treinada com “estado perfeito do simulador” pode falhar em sensores reais, a menos que você trate ruído de observação, latência e deriva (veja Do Simulador para o Real).

Como políticas aprendidas interagem com controladores clássicos

A robótica baseada em aprendizado geralmente tem sucesso quando respeita no que o controle clássico é bom: estabilização rápida, tratamento de restrições, envelopes de segurança e robustez. Abaixo estão os principais padrões de integração.

1) Política aprendida como um *comando de alto nível*; controle clássico como a camada estabilizadora

Uma arquitetura comum:

  • A política aprendida produz pontos de passagem (waypoints), velocidades desejadas, poses do efetuador final (end-effector), ou forças desejadas
  • Um controlador clássico (PID/LQR/impedância) converte isso em atuação estável de baixo nível

Exemplo: quadricóptero (quadrotor)

  • A política produz aceleração ou atitude desejada.
  • Um controlador de atitude em malha interna estabiliza a orientação a 200–1000 Hz.
  • A política em malha externa (outer loop) roda mais devagar (10–50 Hz), potencialmente a partir de visão.

Por que isso funciona

  • A malha interna trata dinâmicas rápidas e restrições de atuadores.
  • A política aprendida foca em decisões no nível da tarefa (navegar, pousar, rastrear um alvo).

Esse padrão é especialmente comum em políticas baseadas em visão, onde a latência de inferência não é desprezível.

2) Aprendizado residual: correção aprendida sobre um controlador clássico

Em vez de substituir um controlador, aprende-se um resíduo:

[ u = u_{\text{classical}}(x) + \Delta u_{\theta}(o) ]

  • (u_{\text{classical}}): baseline seguro e comprovado
  • (\Delta u_\theta): ajuste aprendido para melhorar desempenho sob erros de modelagem

Exemplo: compensação de atrito

  • Um PD baseline controla o rastreamento das juntas.
  • O resíduo aprendido adiciona torque para compensar atrito não modelado ou forças de cabos.

Benefícios:

  • Melhor eficiência amostral do que aprendizado por reforço ponta a ponta (o baseline já funciona).
  • Validação de segurança mais simples (você pode limitar o resíduo).
  • Frequentemente transfere melhor no Do Simulador para o Real porque o baseline impõe dinâmicas sensatas.

3) Aprender um modelo dinâmico para controle preditivo por modelo (aprendizado baseado em modelo)

O controle preditivo por modelo depende de um modelo. Quando a física é imperfeita, aprenda um modelo:

  • Aprenda ( \hat{f}_\theta(x,u) ) a partir de dados (aprendizado supervisionado (supervised learning)).
  • Use controle preditivo por modelo com (\hat{f}_\theta) para planejar controles.

Este é um caminho clássico de aprendizado por reforço baseado em modelo (model-based RL):

  • Ajustar a dinâmica a partir de execuções (rollouts).
  • Planejar online com controle preditivo por modelo.
  • Atualizar o modelo conforme mais dados chegam.

Incerteza importa: modelos aprendidos frequentemente erram fora da distribuição (out-of-distribution). Sistemas práticos usam:

  • conjuntos (ensembles) para estimar incerteza epistêmica (epistemic uncertainty),
  • planejamento conservador (penalizar trajetórias incertas),
  • controladores de fallback se a incerteza for alta.

4) Aprender a ajustar ou escalonar parâmetros do controlador (escalonamento adaptativo de ganhos)

Em vez de produzir ações diretamente, uma política pode produzir parâmetros do controlador:

  • ganhos PID (K_p, K_i, K_d) como função do regime de operação
  • ganhos de impedância (K, D) dependendo da fase de contato
  • ganhos de LQR escalonados por velocidade/carga

Isso preserva a estrutura do controlador e adiciona adaptabilidade.

Exemplo: manipulação com impedância variável

  • Alta rigidez para inserção precisa quando já está alinhado.
  • Baixa rigidez para exploração ou segurança quando a incerteza de contato é alta.

5) Aprendizado por imitação com realimentação: por que clonagem comportamental pura não é suficiente

Em Aprendizado por Imitação, uma política é treinada para imitar ações de um especialista. Em robôs reais, pequenos erros se acumulam (mudança de distribuição (distribution shift)), causando deriva. O controle por realimentação ajuda ao:

  • usar a política aprendida para gerar uma trajetória de referência,
  • usar controle clássico de rastreamento para reduzir erro acumulado,
  • adicionar rejeição de perturbações.

Um template prático:

  • Aprenda uma política que produz a pose desejada do efetuador final.
  • Rastreie com um controlador de impedância.
  • Adicione restrições de segurança (ver abaixo).

6) Filtros de segurança e controle aprendido com restrições

Um grande motivo para manter o controle clássico no loop é segurança. Abordagens incluem:

  • Limitação de ações e limites de taxa (rate limits) (simples, mas efetivo)
  • Funções de barreira de controle (control barrier functions, CBFs) ou outras camadas de imposição de restrições que modificam uma ação aprendida apenas quando ela violaria restrições de segurança
  • Lógica supervisória: se a política aprendida se comporta de forma estranha, trocar para um controlador de fallback seguro (“blindagem (shielding)”)

Isso se conecta fortemente a Segurança em Robótica: exploração segura, satisfação de restrições e comportamentos à prova de falhas.

Aplicações práticas (exemplos ponta a ponta)

Uma pilha comum:

  1. A percepção estima a pose (frequentemente com Localização e Mapeamento Simultâneos).
  2. O planejador calcula um caminho (Planejamento de Movimento).
  3. O controlador rastreia o caminho (por exemplo, perseguição pura (pure pursuit) ou controle preditivo por modelo).
  4. Um módulo aprendido pode:
    • prever trafegabilidade,
    • estimar mapas locais de custo,
    • propor pontos de passagem de horizonte curto.

Mesmo quando o aprendizado é usado para percepção ou decisões locais, o controle por realimentação é o que mantém o robô estável e no caminho.

Alcançar e manipular com braço robótico: controle de impedância com metas aprendidas

Em manipulação:

  • Uma política aprendida (de aprendizado por reforço ou imitação) produz uma pose-alvo do efetuador final/comando da garra.
  • Um controlador de impedância executa o movimento de forma complacente.
  • Opcionalmente, uma política residual de torque compensa efeitos não modelados.

Essa divisão de responsabilidades é particularmente eficaz para tarefas ricas em contato, como inserção, empurrar ou uso de ferramentas (Manipulação).

Locomoção com pernas: malhas internas de controle preditivo por modelo/regulador linear-quadrático com escolha aprendida de apoio (foothold) ou modo

Muitos sistemas com pernas usam:

  • estimação de estado + controle preditivo por modelo para movimento do corpo/forças de reação do solo,
  • controle de torque de baixo nível para as juntas,
  • aprendizado para:
    • classificação de terreno,
    • propostas de apoio (foothold),
    • marcha adaptativa ou comportamentos de recuperação.

O aprendizado melhora o desempenho em terreno complexo, enquanto controle preditivo por modelo/regulador linear-quadrático fornece estabilidade e tratamento de restrições.

Realidades de engenharia: o que quebra controladores (e políticas aprendidas)

Latência (latency) e frequência de controle

  • Malhas internas frequentemente rodam a 200 Hz–2 kHz.
  • Políticas aprendidas de percepção podem rodar a 10–60 Hz.
  • A latência reduz margens de estabilidade; controladores clássicos geralmente são projetados para tolerar atrasos conhecidos, enquanto políticas aprendidas podem precisar de modelagem explícita de atraso durante o treinamento.

Saturação, zonas mortas e atrito

Atuadores saturam; atrito e folga mecânica causam não linearidade. Controladores precisam de:

  • anti-windup,
  • termos de ação de avanço (feedforward) (compensação de gravidade),
  • ajuste robusto.

Políticas aprendidas treinadas em simulação ideal podem explorar dinâmicas irreais, a menos que esses efeitos sejam modelados ou randomizados (Do Simulador para o Real).

Referenciais de coordenadas e interfaces

Muitas falhas são mundanas:

  • referencial errado (mundo vs corpo),
  • unidades inconsistentes,
  • convenções de sinal incompatíveis,
  • esquecer a direção da gravidade.

Interfaces de controle clássico (por exemplo, “posições desejadas das juntas”) podem servir como um contrato estável entre módulos de aprendizado e hardware.

Escolhendo uma abordagem: uma regra prática

Use controle clássico quando:

  • você precisa de alta confiabilidade e interpretabilidade,
  • a dinâmica é razoavelmente modelada ou linearizável localmente,
  • restrições/segurança são críticas,
  • você consegue medir estado bem o suficiente.

Use aprendizado quando:

  • a percepção é de alta dimensionalidade (visão, matrizes táteis),
  • a dinâmica de contato é difícil de modelar,
  • tarefas exigem heurísticas complexas ou decisões de horizonte longo,
  • você precisa de adaptação entre ambientes.

Use híbridos (o mais comum na prática) quando:

  • você quer a flexibilidade do aprendizado sem abrir mão de estabilização e segurança,
  • você consegue definir uma boa estrutura de controle de baixo nível (impedância, PID, controle preditivo por modelo) e deixar o aprendizado preencher as partes difíceis.

Resumo

O controle por realimentação fornece a estabilidade, a robustez e a responsividade em tempo real de que robôs físicos dependem. Métodos clássicos como PID, LQR, controle preditivo por modelo e controle de impedância permanecem fundamentais porque codificam vieses indutivos fortes sobre dinâmica e segurança. Políticas aprendidas complementam esses controladores ao fornecer decisões de alto nível, adaptar parâmetros, aprender correções residuais ou aprender modelos usados em controle baseado em otimização.

Em pilhas modernas de robótica, os sistemas de maior desempenho no mundo real geralmente tratam aprendizado e controle como parceiros: o aprendizado lida com complexidade e incerteza no nível de tarefa/percepção, enquanto o controle clássico por realimentação impõe estabilidade e interação previsível com o mundo físico.