Deterministic Execution of ROS~2 Applications via Lingua Franca
Questo articolo presenta un framework che converte applicazioni ROS 2 non modificate in programmi Lingua Franca per imporre l'esecuzione deterministica e la prevedibilità temporale, eliminando così il nondeterminismo intrinseco dell'ordinamento delle callback e dell'interleaving dei messaggi di ROS 2.
Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
Immagina di gestire la cucina di un ristorante molto affollato. In una cucina standard (che è come ROS 2, il software usato per costruire i robot), lo chef capo urla gli ordini e i cuochi (le diverse parti del robot) li prendono non appena li sentono.
Il problema? Se due ordini arrivano esattamente nello stesso momento, il cuoco potrebbe prendere l'ordine dell' "insalata" prima di quello della "bistecca", o viceversa, a seconda di chi era più vicino alla finestra degli ordini o di chi era stato più veloce quel giorno. A volte la bistecca arriva prima dell'insalata, altre volte dopo. Questo è nondeterministico. Per un robot che guida un'auto, questo è pericoloso: se il robot riceve un segnale di "stop" e un segnale di "vai" contemporaneamente, deve sapere esattamente quale processare per primo, ogni singola volta. Se sbaglia l'ordine, l'auto potrebbe scontrarsi.
Gli autori di questo articolo hanno costruito un controllore di traffico (chiamato Lingua Franca, o LF) che può sedersi sopra la tua esistente cucina robotica e costringerla a seguire uno schema rigido e immutabile senza dover riscrivere le ricette (il codice).
Ecco come l'hanno fatto, suddiviso semplicemente:
1. Il Problema: La "Cucina Caotica"
Nel sistema ROS 2 standard, l'ordine in cui avvengono le attività dipende da fattori fisici come:
- Quanto è veloce il computer in quel preciso secondo.
- Quanto tempo impiega un messaggio per viaggiare attraverso la rete (come un cameriere che corre in cucina).
- Quale thread del computer raccoglie il messaggio per primo.
A causa di ciò, se esegui lo stesso programma robotico due volte con gli stessi input, potrebbe eseguire le attività in un ordine diverso la seconda volta. Questo rende impossibile dimostrare che il robot sia sicuro, perché non puoi prevedere esattamente cosa farà dopo.
2. La Soluzione: L' "Orologio Logico"
Gli autori hanno introdotto un concetto chiamato Tempo Logico. Immagina che la cucina abbia un orologio magico che non ticchetta in base ai secondi sul muro, ma in base ai "passaggi" della ricetta.
- Passaggio 1: Il timer suona.
- ** passaggio 2:** L'insalata viene preparata.
- Passaggio 3: La bistecca viene cotta.
In questo sistema, il tempo che serve per cucinare la bistecca non importa. Se la ricetta dice "Prepara l'insalata, poi cuoci la bistecca", il sistema aspetta che l'insalata sia finita prima ancora di pensare alla bistecca. Ignora la velocità del mondo reale del cuoco. Questo assicura che il Passaggio 2 avvenga sempre prima del Passaggio 3, indipendentemente da quanto sia veloce o lento l'hardware.
3. Il Trucco Magico: "Nessuna Riscrittura Richiesta"
Di solito, per ottenere questo tipo di ordine perfetto, dovresti buttare via le tue vecchie ricette e scriverne di nuove da zero in un linguaggio diverso. Questo è difficile e costoso.
Gli autori hanno creato uno strumento di traduzione.
- Gli dai il tuo codice robotico ROS 2 esistente (le "vecchie ricette").
- Lo strumento analizza il codice, capisce come le parti sono collegate (chi parla con chi) e costruisce automaticamente un "wrapper" (un involucro) attorno ad esso.
- Questo wrapper forza il robot a lavorare sotto le rigide regole del "Tempo Logico".
- Fondamentalmente: Il codice originale all'interno del robot non viene mai toccato. Viene eseguito esattamente come era stato scritto, ma l'ordine in cui viene eseguito è ora perfettamente controllato dal nuovo wrapper.
4. Cosa hanno scoperto (I Risultati)
Hanno testato questo sistema su due cose:
- Un semplice robot simulato con alcune parti.
- Un sistema di guida autonoma reale (chiamato Autoware) che ha 24 parti diverse che lavorano insieme.
I Risultati:
- ROS 2 Standard: L'ordine delle attività cambiava ogni volta che eseguivano il test. A volte il robot elaborava i dati in un ordine, altre volte in un altro. Il tempo necessario per completare un compito variava enormemente (a volte 5 millisecondi, altre volte 900 millisecondi).
- Il loro nuovo sistema (controllato da LF): L'ordine delle attività era identico ogni singola volta. Anche il tempo impiegato per completare un compito era identico ogni volta.
Hanno anche dimostrato che è possibile usare questo sistema per "tarare" il robot. Puoi dire al sistema: "Voglio che il robot sia super consistente (faccia sempre A prima di B), anche se questo significa aspettare un pochino di più", oppure "Voglio che sia super veloce, anche se l'ordine varia leggermente". Puoi regolare questa "manopola" senza cambiare il codice del robot.
Riassunto
Pensa a questo articolo come all'invenzione di un direttore d'orchestra per un'orchestra caotica. I musicisti (il codice del robot) continuano a suonare i propri strumenti esattamente come hanno sempre fatto, ma ora il direttore (il nuovo framework) dice loro esattamente quando suonare le loro note. Questo assicura che ogni esecuzione suoni esattamente allo stesso modo, rendendo il robot sicuro, prevedibile e affidabile, senza dover insegnare ai musicisti come leggere un nuovo spartito.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.