OpEn (Optimization Engine)
Solutore embedded di ottimizzazione non convessa in Rust per MPC in tempo reale sui robot
Licenza
MIT, Apache 2.0
Panoramica
OpEn (Optimization Engine) è un framework per un'ottimizzazione non convessa veloce e sicura in memoria su sistemi embedded, costruito attorno all'algoritmo PANOC di tipo Newton con media prossimale, con metodi a Lagrangiana aumentata e di penalità per i vincoli. I problemi si descrivono in Python o MATLAB con la simbolica di CasADi; OpEn genera un solutore Rust senza dipendenze per il target (il computer di bordo di un robot, una scheda di classe MCU o un nodo ROS), consentendo il controllo predittivo basato su modello (MPC) in tempo reale e l'ottimizzazione di traiettorie senza collisioni.
Il flusso di lavoro è la generazione di codice: si definiscono le variabili decisionali, un costo (eventualmente non convesso) e i vincoli in opengen, il front-end Python/MATLAB di OpEn; questo produce un crate Rust autonomo che implementa PANOC, un metodo con ricerca lineare che combina gradienti prossimali e direzioni L-BFGS e converge rapidamente senza Hessiane, avvolto da cicli esterni ALM/di penalità per i vincoli generali. Il solutore generato non ha sorprese di allocazione sullo heap, nessuna libreria esterna e una memoria limitata in modo dimostrabile: esattamente ciò di cui ha bisogno il controllo embedded orientato alla certificazione. Le interfacce includono Rust diretto, binding C/C++, una modalità server TCP, binding Python e un generatore di pacchetti ROS. Gli usi tipici in robotica sono il controllo predittivo basato su modello (MPC) non lineare a centinaia di hertz per l'evitamento degli ostacoli (i suoi esempi di navigazione sono diventati un riferimento per l'MPC senza collisioni di AGV e droni), l'ottimizzazione della traiettoria e la stima a orizzonte mobile su piattaforme con risorse limitate. OpEn è sviluppato in ambito accademico (Sopasakis et al., articolo IFAC 2020) e ha doppia licenza MIT/Apache-2.0.
Perché è importante
OpEn ha reso praticabile l'MPC non convesso in tempo reale sui piccoli robot: un solutore con le garanzie di memoria di Rust, senza dipendenze e con memoria limitata, che gira su schede embedded. È il componente che serve quando un robot deve risolvere di nuovo a bordo un problema di evitamento degli ostacoli ogni pochi millisecondi.
Il problema che risolve
I solutori NLP generici (della classe di IPOPT) sono troppo lenti e pesanti per l'MPC di bordo ad alta frequenza, e i solutori scritti a mano sono soggetti a errori. OpEn genera un solutore veloce, senza dipendenze e sicuro in memoria per il proprio problema specifico a partire da poche righe di CasADi.
Punti chiave
- Algoritmo PANOC: gradiente prossimale + L-BFGS per risolvere rapidamente problemi non convessi senza Hessiane
- Genera solutori Rust autonomi, senza dipendenze e con memoria limitata
- Front-end Python (opengen) e MATLAB con la simbolica di CasADi
- Uso diretto da Rust/C/C++, modalità server TCP e generazione di pacchetti ROS
- Scelta di riferimento per l'MPC embedded senza collisioni su AGV e droni; doppia licenza MIT/Apache-2.0
A chi si rivolge
- Ingegneri del controllo che mettono in campo MPC di bordo
- Ricercatori di robotica nell'ottimizzazione della traiettoria
- Sviluppatori embedded che hanno bisogno di solutori adatti alla certificazione
- Team di autonomia per AGV e droni
Limiti
- PANOC, basato sul primo ordine, può restare indietro rispetto ai metodi a punto interno su problemi mal condizionati
- La non convessità comporta soluzioni locali (non globali): l'inizializzazione conta
- La gestione dei vincoli tramite ALM/penalità richiede di regolare le tolleranze per i vincoli di uguaglianza rigidi