ROS (Robot Operating System) è obbligatorio?


10

Dobbiamo costruire ROS per la ricerca / applicazione robotica? Qual è il vantaggio principale? Quando o in quali situazioni il ROS è obbligatorio?


7
Avrei scritto una risposta, ma sto scrivendo al telefono. In generale, ROS non è obbligatorio. Secondo la mia opinione personale, dipendere da ROS è addirittura negativo. Qualunque componente tu abbia, creane una libreria portatile e poi scrivi un modulo ROS che lo utilizza. Quando ROS muore o le tue esigenze cambiano, ti piacerebbe averlo fatto.
Shahbaz,

Risposte:


18

Sono tornato a un computer!

Come ho detto in questo commento , ROS non è generalmente obbligatorio. ROS è una delle tante piattaforme, famosa soprattutto per il fatto che Willow Garage offre robot gratuiti a un certo punto nel tempo a chiunque abbia scritto il maggior numero di moduli ROS. Detto questo, non è la migliore piattaforma possibile e non è certamente niente di particolarmente speciale. In particolare, il suddetto concorso ha portato a molti moduli di bassa qualità solo per aumentare i numeri.

Nel tempo, la qualità dei moduli ROS è migliorata e ce ne sono anche molti. Usando ROS quindi, hai il vantaggio di riutilizzare molto di ciò che è già stato fatto. Puoi leggere qui alcuni motivi per cui potresti voler usare ROS.

Con questo in mente, dovresti cercare anche gli effetti collaterali.

Controllo distribuito

Con ROS hai molti nodi che dialogano tra loro attraverso la rete. Questo a volte è buono e facile, ma generalmente provoca un ritardo molto variabile nella ricezione dei messaggi. Di conseguenza, dovresti avere un grande ritardo di controllo per assicurarti che tutti i messaggi arrivino, il che significa che non puoi reagire velocemente agli eventi, il che a sua volta significa che devi spostare il tuo robot a velocità più basse per non perdere quegli eventi.

Che ci crediate o no, le persone eseguono effettivamente il controllo del robot tramite ROS ( MoveIt! È il nome del relativo set di componenti). Lento. Unsafe. Ma facile!

Non in tempo reale

Anche se non distribuito, ROS non è una piattaforma in tempo reale. Ciò significa che sei a completa discrezione del kernel Linux per pianificare le tue attività in qualsiasi momento lo ritenga opportuno. Questo è ok per alcune applicazioni, ma non per altre. Quindi è necessario esaminare le proprie esigenze. Devi avere la garanzia che il tuo compito finisca entro un lasso di tempo noto? In tal caso, è necessario un sistema in tempo reale.

Hosted Runtime Environment

Un altro punto da considerare è che, sebbene ROS sia un protocollo generale di comunicazione, è essenzialmente supportato solo per ambienti ospitati. Hosted significa che il codice gira su un kernel, invece di un indipendente, il che significa che il codice controlla direttamente l'hardware (ad esempio, su un microcontrollore).

Se la tua applicazione di robotica viene eseguita vicino all'hardware, e quindi avresti bisogno di un programma che gira su un microcontrollore, ROS non ti è di aiuto.

Blocco piattaforma

Ultimo ma non meno importante, lo sviluppo di ROS comporta un blocco della piattaforma. Ciò significa che se in futuro, per una ragione o per l'altra, decidessi di basare il tuo lavoro su un'altra piattaforma robotica, come OROCOS, YARP, ecc., Ciò sarebbe atroce.

Saresti anche in qualche modo bloccato su Linux. Linux è il migliore, senza dubbio, ma un giorno potresti finire per dover supportare un altro sistema, come QNX, VxWorks ecc., E avresti problemi anche lì.


Se stai scrivendo per microcontrollori, dimentica ROS. Se stai scrivendo moduli di alto livello, consiglio vivamente di scrivere codice portatile. Ad esempio, supponiamo di aver sviluppato un nuovo sensore e di voler scrivere un modulo che acquisisca i dati da questo sensore, che è collegato al computer tramite il bus CAN.

Quello che potresti fare in questa situazione è scrivere una libreria indipendente, con funzioni in grado di lavorare con il tuo sensore e acquisire dati. Si potrebbe anche pensare di generare un thread nella libreria che acquisisce e accoda periodicamente i dati.

Una volta che hai questa libreria di helper, sei libero di scrivere una CLI, una GUI, un modulo ROS, un modulo OROCOS, un modulo YARP, collegarti a Matlab o qualsiasi altra cosa tu voglia usare per interagire con il tuo sensore.

Nota finale: quello che ho detto qui è generalmente applicabile a tutte le piattaforme di robotica e non solo ai ROS.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Mark Booth

2

"ROS" è un termine relativo, l'APM esegue un codice personalizzato completo appositamente progettato per il controllo dei quadrocopter in cui un ROS personalizzato potrebbe essere desiderabile per evitare arresti anomali, d'altra parte Navio + gira su un kernel Linux ed esegue codice diverso dall'autopilota, e riesce ancora a trattenersi dal crash. La maggior parte dei ROS sono davvero un insieme di funzioni su un sistema operativo esistente invece di scrivere un sistema operativo da zero. Come con qualsiasi cosa, dipende.


Sta parlando del RobotOperatingsystem, non di RealtimeOperatingSystem ...
FooTheBar

2

Disclaimer: questa risposta è in qualche modo una reazione al post di Shahbaz, quindi ha una propensione pro-ROS.

Non credo che ROS sia obbligatorio, ma è un ottimo punto di partenza e vale la pena investire. È iniziato all'interno di Willow Garage, ma questa azienda è svanita e ROS è ancora viva, usata e sviluppata. La maggior parte dei ROS è completamente open source e anche commercialmente utilizzabile, quindi non c'è modo che ROS svanirà se un'azienda non è più interessata. La qualità del codice ovviamente differisce tra i moduli principali e le implementazioni di algoritmi all'avanguardia che alcuni dottorandi hanno pubblicato con il suo articolo.

ROS sta guadagnando sempre più velocità in contesti industriali (sarei sorpreso se ci fosse una porzione significativa di startup di robotica in tutto il mondo che non usano ROS). Alcuni algoritmi saranno ulteriormente mantenuti e sviluppati dal consorzio ros-industrial e se dai un'occhiata ai membri, è una buona scommessa che ROS diventerà uno standard nel settore:

http://rosindustrial.org/ric/current-members/

Il modo distribuito di usare ROS aiuta molto a creare e mantenere nuovi pacchetti, specialmente all'interno dei team. Le definizioni di messaggi e azioni aiutano molto nella definizione delle interfacce in modo che hardware e algoritmi possano essere scambiati rapidamente. Aiuta anche a integrare i nuovi membri del team poiché un nuovo nodo farà cadere altri nodi se si blocca (purché non consuma tutta la RAM ..), quindi è abbastanza sicuro integrare nodi parzialmente funzionanti nel sistema in esecuzione come loro l'effetto è limitato. La comunicazione utilizza TCP che è affidabile e veloce (su un computer locale), quindi il passaggio dei messaggi è molto rapido (sono possibili diverse centinaia di Hz per un circuito di controllo).

Non-Real-Time

ROS non è attualmente in tempo reale poiché la stragrande maggioranza degli algoritmi non ha bisogno di tempo reale. Il rilevamento o la pianificazione non hanno vincoli in tempo reale nella maggior parte dei casi (quante persone stanno costruendo auto ad alta velocità con guida autonoma?). È sufficiente che il circuito di controllo finale funzioni in tempo reale e ciò può in molti casi essere eseguito direttamente sul motore (al quale viene inviata la posizione finale, ad es. Tramite CAN). Real Time tuttavia è uno degli obiettivi principali di ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ), quindi anche se ne avessi bisogno in futuro per l'intero sistema, ROS ti coprirà .

Se vuoi davvero eseguire roba incorporata, c'è ovviamente una connessione ad Arduino, in modo da poter scrivere messaggi ROS direttamente su Arduino che poi vengono inviati tramite connessione seriale.

L'esecuzione di ROS su Windows è attualmente piuttosto una seccatura, ma poiché Windows si sta avvicinando a Linux (anche iniziando ad avere qualcosa di simile a bash), è solo una questione di tempo fino a quando è possibile. (Ma chi vuole far funzionare comunque un robot con Windows?)

Interfacce hardware e algoritmi:

Penso che questo sia davvero un punto di forza per ROS. Molti robot disponibili in commercio sono già dotati di un'interfaccia ROS o qualcuno ha già investito del tempo per implementare l'interfaccia. La maggior parte dei bracci commerciali può essere utilizzata in MoveIt e gran parte del lavoro per far funzionare un'applicazione con un braccio specifico può essere riutilizzato con un altro hardware.

Comunità:

Un altro punto di forza per ROS. I nuovi algoritmi ottengono un'interfaccia ROS molto rapidamente e molte persone hanno avuto gli stessi problemi di te, così troverai qualcuno che ti aiuterà.

http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf


1
L'ultima cosa che vorrei vedere è guardare indietro di 20 anni da dove tutto è costruito intorno a ROS, e realizzare che, oops, abbiamo bisogno di robot per lavorare a una velocità comparabile all'uomo, ma non possiamo perché 20 anni fa pensavamo quante persone costruiscono comunque auto ad alta velocità ?
Shahbaz,

2
Penso di dover schierarmi con @Shahbaz su questo. Non è che ROS non abbia il suo posto, è che non dovresti usare ROS al posto di buone pratiche di codifica. Il protocollo ROS che crei dovrebbe essere derivato da una libreria di interfaccia, non viceversa.
Chuck
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.