Open Source Robotics

Uma coleção selecionada de projetos, ferramentas e software de robótica de código aberto de alta qualidade.

OpEn (Optimization Engine)

Solver embarcado de otimização não convexa em Rust para MPC em tempo real em robôs

Licença

MIT, Apache 2.0

Visão geral

OpEn (Optimization Engine) é um framework para otimização não convexa rápida e segura em memória em sistemas embarcados, construído em torno do algoritmo PANOC (proximal-averaged Newton-type) com métodos de lagrangiano aumentado e de penalidade para restrições. Os problemas são descritos em Python ou MATLAB usando os simbólicos do CasADi; o OpEn gera um solver em Rust livre de dependências para o alvo — o computador de bordo de um robô, uma placa classe MCU ou um nó ROS — habilitando controle preditivo por modelo (MPC) em tempo real e otimização de trajetórias livres de colisão.

O fluxo de trabalho é geração de código: você define variáveis de decisão, um custo (possivelmente não convexo) e restrições no opengen, o front-end Python/MATLAB do OpEn; ele emite um crate Rust independente que implementa o PANOC — um método de busca em linha que combina gradientes proximais com direções L-BFGS e converge rápido sem Hessianas — envolvido em loops externos de ALM/penalidade para restrições gerais. O solver gerado não tem surpresas de alocação de heap, não tem bibliotecas externas e tem memória comprovadamente limitada: exatamente o que o controle embarcado com mentalidade de certificação precisa. As interfaces incluem Rust direto, bindings C/C++, um modo servidor TCP, bindings Python e um gerador de pacotes ROS. Usos típicos em robótica são MPC não linear a centenas de hertz para desvio de obstáculos (seus exemplos de navegação viraram referência para MPC livre de colisões em AGVs/UAVs), otimização de trajetórias e estimação de horizonte móvel em plataformas com recursos restritos. O OpEn é desenvolvido academicamente (Sopasakis et al., artigo do IFAC 2020) e tem licença dupla MIT/Apache-2.0.

Por que importa

O OpEn tornou prático o MPC não convexo em tempo real em robôs pequenos: um solver com as garantias de memória do Rust, sem dependências e com memória limitada, que roda em placas embarcadas — a peça de que você precisa quando um robô deve re-resolver um problema de desvio de obstáculos a cada poucos milissegundos a bordo.

Problema que resolve

Solvers gerais de NLP (classe IPOPT) são lentos e pesados demais para MPC de bordo em alta taxa, e solvers codificados à mão são propensos a erros. O OpEn gera um solver rápido, livre de dependências e seguro em memória para o seu problema específico a partir de poucas linhas de CasADi.

Pontos principais

  • Algoritmo PANOC: gradiente proximal + L-BFGS para solves não convexos rápidos sem Hessianas
  • Gera solvers Rust independentes, livres de dependências e com memória limitada
  • Front-ends Python (opengen) e MATLAB com os simbólicos do CasADi
  • Uso direto em Rust/C/C++, modo servidor TCP e geração de pacotes ROS
  • Escolha de referência para MPC embarcado livre de colisões em AGVs e UAVs; licença dupla MIT/Apache-2.0

Para quem é

  • Engenheiros de controle implantando MPC de bordo
  • Pesquisadores de robótica em otimização de trajetórias
  • Desenvolvedores embarcados que precisam de solvers amigáveis à certificação
  • Equipes de autonomia de AGVs/UAVs

Limitações

  • O PANOC, baseado em primeira ordem, pode ficar atrás de métodos de pontos interiores em problemas mal condicionados
  • Não convexidade significa soluções locais (não globais) — a inicialização importa
  • O tratamento de restrições via ALM/penalidade exige ajuste de tolerâncias para restrições de igualdade rígidas

Este site requer JavaScript. Por favor, habilite o JavaScript para explorar nossos projetos de robótica.