Da Ubuntu22.04 o giugno 2025, la base ufficiale non più aggiornare il supporto ROS1, ha raccomandato l'uso del sistema ROS2, ROS 2 in architettura, in tempo reale, la sicurezza e l'eco-estensibilità significativamente meglio di ROS 1, se lo sviluppo del nuovo progetto è consigliato di utilizzare ROS2 direttamente, ma se avete bisogno di migrare al trade-off tra le risorse esistenti e guadagni a lungo termine. Rapporto dettagliato di supporto alla versione di Ubuntu vedi link [ROS e Ubuntu sono versioni diverse della relazione]. , il seguente confronto tra i due framework da analizzare:
| Versione ROS 2 | Versione Ubuntu | LTS o no | Tempo di rilascio |
| Jazzy | 24.04 (Nobile) | Sì (LTS) | 2024 |
| Trapuntato | 24.04(Nobile) | No | 2025-05 |
Storia e sviluppo
- ROS1: Sviluppato dall'Università di Stanford e da Willow Garage, si concentra sulla ricerca e sulla prototipazione.
- ROS2: Iniziato nel 2014, mira alla robotica di livello industriale con middleware DDS per migliorare la capacità in tempo reale, il supporto multipiattaforma e la sicurezza.
Conclusione: ROS1 è più adatto alla ricerca e alla prototipazione, mentre ROS2 è ideale per l'impiego industriale e commerciale.
2. Architettura del sistema
| Dimensione | ROS1 | ROS2 |
| Architettura di base | Adotta un'architettura centralizzata, affidandosi al nodo master (node manager) per la registrazione e la comunicazione dei nodi. | Architettura distribuita, comunicazione diretta tra i nodi, nessuna necessità di Master, supporto del meccanismo di scoperta dinamica. |
| Modello di comunicazione | Sistema di comunicazione personalizzato basato sul protocollo TCP/UDP, che presenta problemi quali ritardo, perdita di pacchetti e incapacità di crittografia. | Protocollo di comunicazione standardizzato basato su DDS, che supporta l'interazione in tempo reale, la crittografia e la multipiattaforma. |
| Affidabilità | Si affida a TCP per la comunicazione peer-to-peer, soggetto a perdita di pacchetti. | La trasmissione affidabile è garantita da politiche QoS (ad esempio, Reliable). |
| Sistema di compilazione | Utilizza i sistemi di compilazione rosbuild (early) e catkin. | Introdotto un sistema di compilazione per supportare una gestione più flessibile delle dipendenze e una compilazione multilingue. |
3. Esperienza utente
| Dimensione | ROS1 | ROS2 |
| Curva di apprendimento | Ricche risorse della comunità e documentazione matura, adatte per iniziare. | Le nuove funzionalità aumentano i costi di apprendimento (ad esempio, la configurazione DDS, il debug in tempo reale), ma sono più manutenibili nel lungo periodo. |
| Costi di migrazione | I progetti ROS 1 devono rifattorizzare la logica di comunicazione, la gestione dei nodi e il sistema di compilazione per migrare verso ROS 2. | Per l'interoperabilità tra i nodi ROS 1 e ROS 2 sono disponibili strumenti di migrazione (ad esempio ros1_bridge). |
| Debug e toolchain | Affidandosi a strumenti come roslaunch e rviz, il processo di debug è più tradizionale. | Nuovo framework di lancio (che supporta la configurazione Python), sistema di log integrato e migliori strumenti di test. |
| Comunità ed ecologia | L'ecosistema è ampio, ma alcune funzionalità sono difficili da estendere a causa di limitazioni architettoniche. | Le nuove funzionalità sono più facili da integrare (ad esempio, una maggiore integrazione con Gazebo e le tecnologie Web) e l'ecosistema continua ad espandersi. |
4. Confronto tra le tecnologie chiave
| Dimensione | ROS1 | ROS2 |
| Comunicazione tra nodi | La comunicazione peer-to-peer viene stabilita attraverso la registrazione del Master. | I nodi si scoprono automaticamente e comunicano direttamente tra loro tramite DDS. |
| Messaggistica | Utilizza un tipo di messaggio personalizzato (.msg), si basa sull'implementazione di roscpp/rospy. | Generazione di messaggi multilingue basati su IDL (Interface Definition Language) per una migliore compatibilità. |
| Tolleranza ai guasti | Un guasto al master può causare l'arresto dell'intero sistema. | Architettura distribuita per evitare un singolo punto di guasto, i nodi possono unirsi/uscire dinamicamente. |
5. Differenze di sintassi
| Dimensione | ROS1 | ROS2 |
| Sintassi di creazione dei nodi | Usa ros::NodeHandle per gestire i nodi, si affida a roscore per avviare il gestore centralizzato. | Utilizzare rclcpp::Node o rclpy::Node per creare nodi direttamente senza roscore, supporta l'architettura distribuita. |
| Meccanismo di comunicazione | Basato su un protocollo TCP/UDP personalizzato per la comunicazione, deve gestire manualmente la registrazione e la scoperta dei nodi. | Basato sullo standard DDS (Data Distribution Service), i nodi si scoprono e comunicano automaticamente tra loro. |
| Definizione del messaggio | Utilizzare il file .msg per definire il tipo di messaggio, affidandosi all'implementazione di roscpp/rospy. | Utilizzare IDL (Interface Definition Language) per generare messaggi multilingue per una migliore compatibilità. |
| File di lancio | Utilizzare XML per scrivere il file .launch, funzione singola, difficile da configurare dinamicamente. | Utilizzare Python per scrivere file .launch.py, supportare la logica dinamica (come il giudizio condizionale, il passaggio di parametri). |
6. Differenze nell'uso effettivo
| Dimensione | ROS1 | ROS2 |
| Supporto multilingue | Supporta principalmente C++ e Python, altri linguaggi devono essere adattati. | Supporto esteso per altri linguaggi (ad esempio Rust, Java) e compatibilità tra linguaggi tramite il linguaggio di definizione delle interfacce (IDL). |
| Sistema di compilazione | Si affida al sistema di compilazione catkin, che richiede una stretta aderenza alla struttura dello spazio di lavoro. | Utilizzate il sistema di compilazione ament per una gestione più flessibile delle dipendenze e per la compilazione in più lingue. |
| Assistenza in tempo reale | Scarse prestazioni in tempo reale, difficili da soddisfare le esigenze del controllo industriale in tempo reale. | Improve the support for real-time systems (e.g. ROS 2’s rclcpp provides real-time thread scheduling). |
| Sicurezza | Mancanza di meccanismi nativi di crittografia e autenticazione. | Supporta le estensioni di sicurezza DDS (DDS-Security) per fornire autenticazione, crittografia dei dati e controllo degli accessi. |
| Supporto multipiattaforma | Funziona principalmente su sistemi Linux con un supporto limitato a Windows/macOS. | Supporta diverse piattaforme come Linux, Windows, macOS, RTOS, ecc. e divide chiaramente le piattaforme in Tier 1 (supportate attivamente dal governo ufficiale) e Tier 2 (supportate dalla comunità) per rafforzare la compatibilità tra sistemi. |
| Strumenti di debug | Basandosi su strumenti tradizionali come roslaunch e rviz, il sistema di registrazione è relativamente elementare. | Fornire un sistema di log integrato (ad esempio RCLCPP_INFO), il supporto di script Python e migliori strumenti di test. |
| Tolleranza ai guasti | Un guasto al roscore può causare l'interruzione dell'intero sistema. | Architettura distribuita per evitare un singolo punto di guasto, i nodi possono unirsi/uscire dinamicamente. |
7. Scenari applicativi tipici
- ROS 1: Istruzione, progetti di ricerca (ad esempio, navigazione di robot mobili, SLAM), scenari che non richiedono tempo reale e sicurezza elevati. Se il progetto è maturo e non richiede funzioni in tempo reale, di sicurezza o multipiattaforma, e si basa su un gran numero di risorse ecologiche di ROS 1, continuare a usare ROS 1.
- ROS 2: Automazione industriale, guida autonoma, droni e altri scenari che richiedono un elevato supporto in tempo reale, sicurezza e multipiattaforma, nonché la manutenzione a lungo termine di progetti su larga scala (ad es, robot di consegna, Robot industrialerobot medici). I progetti che richiedono stabilità di livello industriale, controllo in tempo reale, crittografia sicura o distribuzione multipiattaforma sono da preferire a ROS 2.
8. Compatibilità hardware e piattaforma
- ROS1: Supporta principalmente Linux (Ubuntu).
- ROS2: Supporta nativamente Linux, Windows, macOS e le piattaforme embedded.
9. Ecosistema e supporto comunitario
- ROS1: Un gran numero di pacchetti e una comunità attiva.
- ROS2: Ecosistema in rapida crescita, ma il numero di pacchetti è ancora in fase di recupero.
Conclusione: ROS1 ha un ecosistema maturo, mentre ROS2 sta recuperando rapidamente.
10. Costo di migrazione e aggiornamento
- Le API sono incompatibili e richiedono la riscrittura del codice.
- I driver potrebbero richiedere un adattamento; ros1_bridge può aiutare nella migrazione graduale.
Conclusione: I costi di migrazione sono significativi, ma i rischi possono essere ridotti con aggiornamenti graduali.
11. Sicurezza e standard industriali
- ROS1: Nessun meccanismo di sicurezza nativo.
- ROS2: È conforme agli standard di sicurezza DDS e può integrare OPC UA e TSN.
Conclusione: ROS2 è più adatto alle applicazioni industriali e critiche per la sicurezza.
Tendenze future e tabella di marcia
- ROS1Noetic è la release finale, mantenuta fino al 2025.
- ROS2segue una strategia di supporto a lungo termine (LTS) con aggiornamenti attivi delle funzionalità.
Conclusione: La tendenza è chiaramente a favore di ROS2.
Conclusioni e raccomandazioni
Per ricercatori o principianti, ROS1 rimane una scelta matura e stabile; per utenti industriali o team commerciali, ROS2’s advantages in distributed systems, real-time performance, and security bring long-term value.
Consigli pratici: Valutare la versione di ROS fin dalle prime fasi della pianificazione del progetto e prendere decisioni in base alla maturità dell'ecosistema e alle capacità del team.
