# Robot Operating System

El Robot Operating System, sovint abreujat com a ROS, és una estructura de desenvolupament de programari per a robots. És una col·lecció d'eines, llibreries i convencions informàtiques que tenen com a objectiu simplificar la creació i programació de robots.
El software de ROS s'organitza com un conjunt de programes escrits en C++ o Python que fan tasques concretes i que comparteixen dades entre ells. Aquest tipus d'estructura permet que els programes es puguin reutilitzar i fer servir en molts tipus de robots. Això facilita i promou que es comparteixi codi i es col·labori en el desenvolupament de robots. A més a més, també ofereix serveis com abstracció de hardware, controladors de dispositius a baix nivell, implementació de les funcionalitats més comunes, pas de missatges entre processos i gestió de paquets.
D'ençà de la seva presentació oficial, l'any 2009, ROS s'ha popularitzat i disposa d'una important base d'usuaris, col·laboradors i empreses que l'usen. La segona generació del Robot Operating System, ROS 2, es va publicar el 2020 introduint una nova arquitectura i comunicació basada en DDS. Des del llançament de ROS 2 s'ha accelerat el desplegament de robots que el fan servir a més entorns i a escales més grans.

## Arquitectura

Els sistemes basats en ROS estan dividits en tres capes: d'aplicació, d'intermediari i de sistema operatiu. La primera capa consisteix en diferents aplicacions, anomenades nodes, que duen a terme tasques específiques i poden compartir informació entre ells a través de missatges. Això permet aïllar possibles errors, facilita el desenvolupament i permet reutilitzar codi. Aquesta és la capa que els enginyers i programadors desenvolupen i modifiquen per cada robot.
La segona capa és la d'intermediari, que s'encarrega de la comunicació entre els nodes. A ROS 2 el sistema de comunicació està basat en Data Distribution Service, un servei de distribució de dades a temps real, fiable i d'alt rendiment. A ROS 1, per altra banda, es fa servir un sistema Transmission Control Protocol o User Datagram Protocol que interactua amb un node master, encarregat de gestionar els missatges, a la capa d'aplicació.
Finalment, la tercera capa és la del sistema operatiu que conté tota la resta de programari. A ROS 2 es poden fer servir els sistemes operatius més comuns: Linux, Microsoft Windows, MacOS i RTOS. Per altra banda, per desenvolupar robots amb ROS 1 només es pot fer servir Linux.

## Història

Es poden destacar les següents dates:
* 2007 : desenvolupat inicialment pel laboratori d'intel·ligècia artificial de la universitat Stanford.
* 2008-2013 : desenvolupat per la institució Willow Garage.
* 2013 : Willow Garage és absorbida per Suitable Technologies

## Versions

Distribucions del programari ROS:
Distribucions de ROS 1 :
| Distribució | Data de publicació | Data fi de vida |
| Noetic Ninjemys (última distribució de ROS 1) | 23 maig 2020 | La darrera versió estable: Maig 2025 |
| Melodic Morenia | 23 maig 2018 | La darrera versió estable: 30 maig 2023 |
| Lunar Loggerhead | 23 maig 2017 | Una versió antiga, sense suport: 30 maig 2019 |
| Kinetic Kame | 23 maig 2016 | Una versió antiga, sense suport: 30 maig 2021 |
| Jade Turtle | 23 maig 2015 | Una versió antiga, sense suport: 30 maig 2017 |
| Indigo Igloo | 22 juliol 2014 | Una versió antiga, sense suport: 30 abril 2019 |
| Hydro Medusa | 4 setembre 2013 | Una versió antiga, sense suport: 31 maig 2014 |
| Groovy Galapagos | 31 desembre 2012 | Una versió antiga, sense suport: 31 agost 2014 |
| Fuerte Turtle | 23 abril 2012 | Una versió antiga, sense suport: -- |
| Electric Emys | 30 agost 2011 | Una versió antiga, sense suport: -- |
| Diamondback | 2 març 2011 | Una versió antiga, sense suport: -- |
| C Turtle | 2 agost 2010 | Una versió antiga, sense suport: -- |
| Box Turtle | 2 març 2010 | Una versió antiga, sense suport: -- |
| Llegenda:Versió antigaVersió antiga, amb suportDarrera versióDarrera versió preliminarProper llançament |||
* Noetic Ninjemys
* Lunar Loggerhead
* Kinetic Kame
* Jade Turtle
* Indigo Igloo
* Hydro Medusa
* Groovy Galapagos
* Fuerte Turtle
* Electric Emys
* Diamondback
* C Turtle
* Box Turtle

## Robots amb ROS

En destaquem els següents:
| Nom | Fabricant |
| 0x series robots | Nex robotics |
| RMPv3 | Segway |
| Innok Heros | Innok Robotics |
| ABB robotics | ABB |
| Pioneer LX | OMRON |
| pepper | SoftBank |
| Allegro Hand | Wonik Robotics |
| Amigo | Tech U Einhoven |

## Referències

* ↑ Quigley, Gerkey i D. Smart, 2015, p. 3.
* ↑ Quigley, Gerkey i D. Smart, 2015, p. 7.
* ↑ Quigley, Gerkey i D. Smart, 2015, p. 5.
* ↑ Gerkey, Brian. «ROS, the Robot Operating System, Is Growing Faster Than Ever, Celebrates 8 Years». IEEE Spectrum. Erico Guizzo, 09-12-2015. [Consulta: 1r maig 2021].
* ↑ Macenski, 2022, p. 1.
* ↑ Macenski, 2022, p. 12.
* 1 2 3 Maruyama, Yuya; Kato, Shinpei; Azumi, Takuya «Exploring the performance of ROS2». 2016 International Conference on Embedded Software (EMSOFT), 2016, p. 10 [Consulta: 6 març 2024].
* ↑ «ROS.org | History». www.ros.org. Arxivat de l'original el 2016-12-23. [Consulta: 22 desembre 2016].
* ↑ «Willow Garage». www.willowgarage.com. [Consulta: 23 desembre 2016].
* ↑ «Suitable Technologies Beam Smart Presence System». suitabletech.com. [Consulta: 23 desembre 2016].
* ↑ «Distributions - ROS Wiki». wiki.ros.org. [Consulta: 22 desembre 2016].
* ↑ «Robots - ROS Wiki». wiki.ros.org. [Consulta: 22 desembre 2016].
* ↑ Quigley, Gerkey i D. Smart, 2015, p. 91.
* ↑ Ackerman, Evan «TurtleBot 2 Prototype Unveiled at ROSCon». IEEE Spectrum, 21-05-2012 [Consulta: 4 octubre 2020].

## Bibliografia

* Macenski, Steven; Foote, Tully; Gerkey, Brian; Lalancette, Chris; Woodall, William «Robot Operating System 2: Design, architecture, and uses in the wild». Science Robotics, 2022, p. 13. DOI: 10.1126/scirobotics.abm6074 [Consulta: 15 desembre 2023].
* Quigley, Morgan; Gerkey, Brian; D. Smart, William. Programming Robots with ROS. Sebastopol, CA: O'Reilly Media, Inc., 2015, p. 425. ISBN 978-1-449-32389-9 [Consulta: 23 abril 2021].

## Enllaços externs

* Pàgina web oficial de ROS: www.ros.org (anglès)
* Tutorials d'ús de ROS (anglès)
* Repositori de ROS a Github (anglès)