Difference between revisions of "VT2021 ROS2 fiche"

From air
Jump to navigation Jump to search
(Created page with "= '''Robot Operatin System 2 (ROS2)''' = = ''Auteurs'' = * MALECOT Ethan (ethan.malecot@etu.univ-grenoble-alpes.fr) * CIRSTEA Paul (paul.cirstea@etu.univ-grenoble-alp...")
 
 
(10 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
* CIRSTEA Paul ([[paul.cirstea@etu.univ-grenoble-alpes.fr]])
 
* CIRSTEA Paul ([[paul.cirstea@etu.univ-grenoble-alpes.fr]])
   
= ''Résumé'' =
+
= '''Résumé''' =
   
 
ROS2 est une plateforme Open Source pour le développement en robotique qui vient succéder à ROS1 (Robot Operating System). L’idée de ROS est de fournir une plateforme d’exécution ainsi qu’un ensemble d’outils de développement qui s’adapte à une multitude de projets en robotique. ROS2 est né avec la volonté de venir s’adapter aux nouveaux besoins qui n’était pas présent au moment de la création de ROS1 : la collaboration entre robots, les contraintes temps réel, l’environnement de production plutôt que de développement, … La première distribution de ROS2 est arrivée en 2017 et près de 8 distributions existent à ce jour.
 
ROS2 est une plateforme Open Source pour le développement en robotique qui vient succéder à ROS1 (Robot Operating System). L’idée de ROS est de fournir une plateforme d’exécution ainsi qu’un ensemble d’outils de développement qui s’adapte à une multitude de projets en robotique. ROS2 est né avec la volonté de venir s’adapter aux nouveaux besoins qui n’était pas présent au moment de la création de ROS1 : la collaboration entre robots, les contraintes temps réel, l’environnement de production plutôt que de développement, … La première distribution de ROS2 est arrivée en 2017 et près de 8 distributions existent à ce jour.
   
 
= ''Mots Clés'' =
 
= ''Mots Clés'' =
Système d’exploitation pour robots (ROS) : plateforme offrant des services proche de ceux des systèmes d'exploitation comme l'abstraction du matériel, la gestion de la concurrence, gestion des processus, etc... </br>
+
'''Système d’exploitation pour robots (ROS)''' : plateforme offrant des services proche de ceux des systèmes d'exploitation comme l'abstraction du matériel, la gestion de la concurrence, gestion des processus, etc... </br>
nœuds : c'est l'élément de base des graphes ROS, il correspond à une unité fonctionnelle (ex: contrôle des roues) et il peut envoyer et recevoir des données à d'autres noeuds. </br>
+
'''nœuds''' : c'est l'élément de base des graphes ROS, il correspond à une unité fonctionnelle (ex: contrôle des roues) et il peut envoyer et recevoir des données à d'autres noeuds. </br>
topic : Système de transport de l'information basé sur le concept de publisher et subscriber. </br>
+
'''topic''' : Système de transport de l'information basé sur le concept de publisher et subscriber. </br>
service : Système de transmission de l'information basé sur une structure client/serveur, où le client fait des requêtes au serveur pour obtenir une donné. </br>
+
'''service''' : Système de transmission de l'information basé sur une structure client/serveur, où le client fait des requêtes au serveur pour obtenir une donné. </br>
action : Système de transmission combinant les topics et les services très utlisés pour les tâches de longues durées car il permet d'avoir un feedback régulier de ce qui est fait par le node pendant la tâche.</br>
+
'''action''' : Système de transmission combinant les topics et les services très utlisés pour les tâches de longues durées car il permet d'avoir un feedback régulier de ce qui est fait par le node pendant la tâche.</br>
   
= ''Abstract'' =
+
= '''Abstract''' =
   
 
ROS2 is an open source platform for the development of robots that comes after ROS1 (Robot Operating System). The idea behind ROS is to create a platform that can execute the robot’s code while also bringing development tools for any robot developer. ROS2 was created with the will to adapt to new needs that didn’t exist when ROS1 was created : collaboration between robots, real time constraint, production environment, … The first ROS2 distribution arrived in 2017 and 7 other distributions have been created since then.
 
ROS2 is an open source platform for the development of robots that comes after ROS1 (Robot Operating System). The idea behind ROS is to create a platform that can execute the robot’s code while also bringing development tools for any robot developer. ROS2 was created with the will to adapt to new needs that didn’t exist when ROS1 was created : collaboration between robots, real time constraint, production environment, … The first ROS2 distribution arrived in 2017 and 7 other distributions have been created since then.
Line 22: Line 22:
   
 
= ''Keywords'' =
 
= ''Keywords'' =
Robot Operating System (ROS) : platform offering operating systems services like the abstraction of the material, the control of the process, etc... </br>
+
'''Robot Operating System (ROS)''' : platform offering operating systems services like the abstraction of the material, the control of the process, etc... </br>
node : basic ROS element around one functional unit (example: control of the wheels). It can send and receive data to other nodes. </br>
+
'''node''' : basic ROS element around one functional unit (example: control of the wheels). It can send and receive data to other nodes. </br>
topic : Data transport system based on subscriber/publisher idea. </br>
+
'''topic''' : Data transport system based on subscriber/publisher idea. </br>
service : Data transport system based on client/server idea, where the client needs to call for the ressource to get it from the server. </br>
+
'''service''' : Data transport system based on client/server idea, where the client needs to call for the ressource to get it from the server. </br>
  +
'''action''' : Data transport system based on service and topic that is used for long task to get regular feedback during the task.</br>
action : Système de transmission combinant les topics et les services très utlisés pour les tâches de longues durées car il permet d'avoir un feedback régulier de ce qui est fait par le node pendant la tâche.</br>
 
   
  +
= '''Synthèse''' =
   
  +
== Qu'est ce que c'est ROS ? ==
   
  +
=== Histoire ===
[[File:Approche_gpt.png|Figure2: Approche GPT-1]]
 
   
  +
Willow garage(laboratoire de recherche en informatique de Californie créé en 2006) met au point un robot à taille humanoïde (PR2) en 2010. Pour la création de ce robot, la société décide de mettre en place une pateforme adaptée au besoin de ce robot : ROS (Robot Operating System). Cette plateforme sera ensuite repris par la société Open Robotics (société californienne à but non lucratif) et étendu à plus de 75 robots. Le but était de faire de ROS un standard pour un ensemble de robots.
Figure 2: Approche GPT-1
 
   
  +
[[File:PR2.jpg|720px|600px]]
   
  +
=== Description ===
Le modèle développé est basé sur une architecture Transformer 12 couches avec des mécanismes d’attention ce qui le rend capable de gérer des dépendances sur le long-terme. </br>
 
Le modèle utilise le principe de Transfer Learning ce qui lui permet d’être capable de réaliser 4 types de tâches : l’inférence en langage naturel, la réponse à des questions, l’analyse des similarités et la classification de textes. GPT-1 a réussi à surpasser largement les modèles spécifiques de chacune des tâches citées précédemment. Grâce à ces travaux on constate également que les architectures Transformer obtiennent de meilleurs résultats avec un entraînement non supervisé.
 
   
  +
ROS fonctionne autour de 5 axes majeures : </br>
= ''' Le second modèle, GPT-2''' =
 
  +
- '''Logiciel d'exécution''' </br>
  +
- '''Outils de developpement''' </br>
  +
- '''Bibliothèques logicielles''' </br>
  +
- '''Standard robotique''' </br>
  +
- '''Communauté ROS''' </br>
   
  +
ROS offre une plateforme d'exécution dans laquelle on peut exécuter le code destiné au robot. C'est l'aspect système d'exploitation (Operating System) que l'on retrouve dans ROS.</br>
Ce modèle a été le deuxième dans la série GPT de OpenAI. Lors du développement de ce modèle, des datasets plus grands ont été utilisés pour effectuer l’entraînement, et on a ajouté beaucoup plus de paramètres. En effet, le nombre de paramètres des quatres modèles de GPT-2 varie entre 117 pour le plus petit modèle, et 1.5 pour le plus large [2].
 
  +
On trouve également un ensemble d'outils de plus haut niveau pour le développement allant de la configuration, à la maintenance et aux tests. Le but est donc d'avoir un outil avec lequel programmer. </br>
  +
De plus, l'apect communautaire est très fort dans le developpement de ROS, avec un enrichissement et un partage des bibliothèques logicielles pour faciliter l'expansion de ROS pour de nombreux robots.
  +
</br>
  +
Enfin, ROS se veut comme établissant un standard de règle de bonne pratique, de patterns, etc... </br>
   
  +
[[File:ROS_Description.png|477px|800px]]
=='''Objectifs des entraînements'''==
 
* Le développement de GPT-2 avait pour but la création des systèmes plus généraux qui peuvent exécuter plusieurs tâches sans avoir besoin de créer manuellement des datasets d’entraînement pour chacune des tâches [3].
 
   
  +
== Quels changements apporte ROS2 ? ==
* Task conditioning: pour qu’un système ‘général’ puisse pouvoir exécuter des tâches différentes avec le même input, il faut changer l’expression probabilistique de ce modèle pour tenir en compte non seulement le input et output, mais aussi la tâche. L’expression devient donc: p(output/input) → p(output/input,tâche).
 
   
  +
ROS2 a été créé en décembre 2017 dans le but de répondre à de nouveaux besoins. En effet, lors de la création de ROS1, Willow garage s'est basé sur les besoins qui concernaient leur robot PR2 à l'époque. Cependant avec les années, ROS s'est de plus en plus élargi s'éloignant de ces besoins initiaux. L'idée était aussi que l'API créé datait de 2010 donc passer à ROS2 pouvait aussi permettre de mettre à jour cette API.</br> </br>
* L’une des capacités de GPT-2 est ‘Zero Shot Learning’, cela veut dire que le modèle peut exécuter une tâche sans avoir déjà vu un exemple de cette tâche. Cela est grâce au fait que GPT-2 peut comprendre une tâche en lisant et en analysant les instructions données. Cette faculté est appelée: ‘Zero Shot Task Transfer’.
 
  +
ROS2 a donc pour but de :</br>
  +
- permettre la communication dans une équipe de robots (robot seul dans ROS1) </br>
  +
- permettre d'utiliser des systèmes embarqués de très petite taille </br>
  +
- permettre la transmission de donnée en temps réel </br>
  +
- s'adapter à un environnement de production plutôt que l'environnement académique dans lequel ROS1 avait été créé </br>
  +
- s'adapter au réseau instable car ROS1 s'adapte mal à des variations de connection du réseau.</br> </br>
   
  +
Afin de parvenir à ces buts, ROS2 offre plusieurs nouveautés par rapport à ROS1 : </br>
=='''Dataset'''==
 
  +
- Plus de système d’exploitation sur lesquels développer (Windows par exemple) </br>
* Contrairement à l’ancienne approche en entraînant les modèles sur des datasets spécifiques appartenant à un même domaine textuel, la nouvelle méthode a été de trouver un dataset plus grand et qui contient une variété des textes dans des domaines différents.
 
  +
- Utilise des version plus récentes de C++ et Python </br>
  +
- Possibilité de créer plusieurs noeuds dans un processus </br>
  +
- Utilisation d’un DDS (Data Distribution Service) qui permet d’améliorer la transmission </br>
  +
- Roslaunch permet d’assurer que tous les noeuds ont été instanciés correctement avant l'exécution de leur comportement </br>
  +
- “Une API revue au goût du jour” </br>
   
* En s’inspirant de l’approche des archives comme Common Crawl, ils ont créé un nouveau web scrape avec des données déjà filtrées par des humains pour avoir des données de qualité. Et pour ne pas faire cela manuellement (puisque c’est cher), ils ont choisi de récupérer des posts sur Reddit (ayant au moins 3 karma). Le résultat est donc la création de leur dataset appelé WebText (de taille 40GB, 8 millions documents) [3].
 
   
  +
== Concepts manipulés par ROS2 ==
   
  +
ROS se base sur 4 concepts de base : les noeuds, les topics, les services et les actions.
[[File:Gpt2-1.png|Figure3: manifestations naturelles des textes traduits dans WebText]]
 
   
  +
Architecture d'un graphe ROS: </br>
Figure 3: manifestations naturelles des textes traduits dans WebText
 
   
  +
[[File:ROS_graphe.gif]]
=='''L’architecture du modèle'''==
 
* Le nombre de paramètres: 1.5 milliards de paramètres (10 fois plus que GPT-1).
 
   
  +
</br>
* La taille du vocabulaire: 50257 tokens ont été utilisés dans le vocabulaire.
 
  +
Les '''noeuds''' sont des unités fonctionnelles qui peuvent contenir plusieurs paramètres comme des entiers, des strings, etc... Par exemple, on pourrait avoir un node associé à la roue d'un véhicule. </br>
  +
</br>
  +
Les '''topics''' sont des systèmes de transmission où des noeuds peuvent s'abonner pour recevoir les changements qui sont publiés par les publishers. Les publishers sont des noeuds qui vont se déclarer au topic commme publishers et partager leur données à tous les subscribers de ce topic.</br>
   
  +
[[File:ROS_topic.gif]]
* Word embedding (ou plongement lexical): les vecteurs utilisés étaient de 1600 dimensions.
 
   
  +
</br>
=='''Performance'''==
 
  +
Les '''services''' sont des systèmes de transmission basés sur l'achitecture client/serveur ou un ou plusieurs clients peuvent demander un donnée au serveur. Chaque service ne peut avoir qu'un seul serveur, mais il peut avoir une multitude de clients. De plus, lorsque que le serveur envoie la donnée, il ne l'envoie qu'au client lui ayant demandé cette donnée, pas aux autres.</br>
   
  +
[[File:ROS_service.gif]]
GPT-2 a été évalué sur plusieurs tâches différentes (ex: la compréhension, la génération automatique des résumés, ..).
 
  +
</br>
  +
</br>
  +
Les actions sont des systèmes de transmission basés à la fois sur les topics et les services. Le but est d'avoir des feedbacks réguliers lors d'une action longue. Pour cela, le client va envoyer un but et va demander le résultat au serveur, le but étant le résultat de l'action longue et la demande de résultat va donc prendre un certain temps. Pendant ce temps, la serveur va envoyer des notifications régulières via un topic au client pour lui indiquer l'avancée par rapport au but final (les feedbacks).</br>
   
  +
[[File:ROS_actions.gif]] </br>
[[File:Gpt2-2.PNG | les performances de GPT-2 suivant plusieurs critères]]
 
   
Figure 4: les performances de GPT-2 suivant plusieurs critères
 
   
  +
== Evolution future de ROS2 ==
= '''Le modèle open-source, GPT-J''' =
 
=='''Un mot sur GPT-J'''==
 
C’est un modèle de 6B paramètres utilisant l’approche transformer pour générer du texte. C’est un projet Open Source de Eleuther.ai, publié sur github[4] par Ben Wang and Aran Komatsuzaki. GPT-J a été entraîné avec la dataset pile de Eleuther.ai [5].
 
   
  +
Depuis sa création, ROS2 a été décliné sous 7 distributions : Ardent, Bouncy, Crystal, Dashing, Eloquent, Foxy, Galactic. Les nouvelles distributions sortent entre 6 mois et 1 an après la précédente. La prochaine distribution qui verra le jour sera Humble Hawksbill en mai 2022. L'ajout de nouvelles distributions permet de corriger des problèmes d'anciennent distributions et d'ajouter de nouvelles fonctionnalités ou d'enlever des fonctionnalités inutiles. Les changements restent souvent mineur entre les distributions. Les distributions ont une durée de vie entre 2 et 5 ans en général.</br>
=='''Le dataset Pile'''==
 
   
  +
== ROS1 et ROS2 dans le marché de la robotique ==
Cette dataset (825 GB) respecte les principes d’une bonne dataset dont on a parlé dans la partie GPT-2. En effet, elle contient des données diversifiée qui couvrent plusieurs domaines ce qui la rend la meilleure dataset pour entraîner un modèle général et pour pouvoir exécuter des différentes tâches [6]. </br>
 
Elle se compose de 22 sous datasets qui rentrent dans des différents domaines. Les documents d’une dataset peuvent être revus plusieurs fois ‘epochs’ durant un ‘epoch’ sur la dataset entière. Par exemple, puisque Wikipedia est considérée comme une source des documents de bonne qualité, son ‘epoch’ est vu 3 fois plus que d’autres datasets.
 
   
  +
En regardant le marché de la robotique dans ces deux dernières années, on peut voir différents projets ayant vu le jour qui se basent sur ROS et ROS2, et ce pas uniquement dans le milieu universitaire et dans des petites entreprises. Des entreprises comme Boston Dynamics ou OTTO motors l'utilisent dans leurs projets, ou encore la NASA.</br>
[[File:Gptj-1.PNG|Figure 5: Les sous datasets de la Pile]]
 
  +
Parmi les projets notable de ces dernières années, on retoruve par exemple une collaboration entre Boston Dynamics et OTTO motors pour un projet d'automatisation d'entrepôt avec des robots transportant les cartons à entreposer et des robots avec un bras pour déplacer les cartons et les placer dans l'entrepôt. Ce projet utilise en particulier l'obstacle avoidance fournis par ROS2</br>
  +
Un autre projet intéressant est un projet de la NASA, dans lequel le but est de créer des robots d'aide à la maintenance des stations spatiales pour assister les astonautes dans les bases dans l'espace. Ce projet était dans des phases de test avancées en août 2021. Il se basait sur ROS1.</br>
  +
Il existe de nombreux projets basés sur ROS1 et ROS2 et nous vous invitons à consulter les rapports réguliers sur l'état de la robotique pour suivre ces avancés.
  +
   
  +
= '''Conclusion''' =
Figure 5: Les sous datasets de la Pile [7]
 
   
  +
ROS2 est un assez récent et de ce fait, beaucoup de projet sont encore fait sous ROS1. Cependant, en répondant à des nouveaux besoins, ROS2 a pu commencer à être utilisé pour des nouveaux projets et on peut espérer le voir dans beaucoup de projet dans les années à venir.
=='''Utilisation du modèle'''==
 
 
GPT-J a été particulièrement développé pour améliorer la génération des textes suivant les instructions données. En fournissant une ‘prompt’ en entrée, GPT-J renvoie un texte en respectant les paramètres donnés.
 
Il répond bien à des prompts de différents types, par exemple [8]:
 
 
[[File:Gptj-3.PNG|Figure 6: exemple de 'prompt' donnée en entrée à GPT-J]]
 
 
Figure 6: exemple de 'prompt' donnée en entrée à GPT-J
 
 
=='''Performance'''==
 
On peut voir dans la figure Y que GPT-J a des performances meilleures que celles de GPT-2 et GPT-Neo dans les tests faits sur ces datasets. </br>
 
Il est plus performant que des modèles de GPT-3 dans quelques cas (notamment GPT-3-1.3B, GPT-3-Babbage, GPT-3-2.7B qui ont beaucoup moins de paramètres que lui).
 
 
[[File:Gptj-2.PNG|Figure 7: Comparaison des performances de GPT-J et des autres modèles ]]
 
 
Figure 7: Comparaison des performances de GPT-J et des autres modèles [8]
 
 
= '''Le plus récent, GPT-3''' =
 
 
=='''L’objectif de GPT-3'''==
 
 
Les modèles actuels ont été conçus pour réaliser des tâches spécifiques que l’on leur a spécifiées avant l’exécution de la tâche en elle-même. Le problème de cette méthode est qu’elle nécessite un grand nombre de ressources pour chaque type de tâche et pour certaines tâches on peut avoir du mal à collecter suffisamment de données pour réaliser un entraînement complet. De plus, comme le but est de se rapprocher au maximum de la méthode d’apprentissage humaine, nous n’avons pas besoin d’une quantité astronomique d’exemples pour comprendre comment réaliser telle ou telle tâche et nous sommes également capables de mixer ou passer aisément d’une tâche à l’autre.
 
 
=='''Les différentes approches'''==
 
 
Le but de OpenAI est de réaliser un modèle étant capable de reproduire au mieux la méthode d’apprentissage des humains. Pour cela, ils ont expérimenté différentes approches pour pré-entraîner leur modèle. Certaines avaient déjà été testées avec GPT-2, comme le zero-shot learning. </br>
 
 
* La première approche est la plus classique : le '''fine-tuning'''. Son avantage est qu’elle permet de bonnes performances mais elle nécessite une quantité importante de données labellisées et spécifiques pour chaque tâche à réaliser. Les chercheurs de OpenAI n’ont donc pas fine-tuned leur modèle.
 
 
* Le '''few-shot learning''' : on donne au modèle quelques exemples de tâches à réaliser mais on ne met pas à jour les poids pendant la période d’inférence. On donne donc K exemples de tâches ainsi que le résultat qui serait attendu et ensuite on donne un exemple final et on demande au modèle quel est sa prédiction.
 
 
* Le '''One-shot learning''' : seulement une démonstration (exemple et prédiction attendue) est autorisée mais on précise aussi la nature de la tâche à effectuer via une phrase en langage naturel en plus de la donnée en entrée.
 
 
* Le '''Zero-shot learning''' : Aucune démonstration n’est autorisée. Le modèle dispose seulement d’une phrase descriptive de la tâche en langage naturel. C’est de ce type d’apprentissage que veut se rapprocher le plus GPT3 car il mimique l’apprentissage humain au maximum. Cependant il reste le plus compliqué à mettre en place car le modèle a du mal à comprendre le format de la tâche demandée.
 
 
[[File:Approaches.png| Figure 8: Les différentes approches utilisées pour GPT-3]]
 
 
Figure 8: Les différentes approches utilisées pour GPT-3
 
 
=='''L’architecture du modèle'''==
 
* Nombre de paramètres : 175 milliards de paramètres pour le modèle principal baptisé “GPT-3” et de 13 milliards à 125 millions pour les 7 sous-modèles GPT-3 (GPT-3 Small, GPT-3 Medium, etc.).
 
 
* Architecture Transformers, identique à celle de GPT-2
 
 
Pas beaucoup d’évolution au niveau de l’architecture même de GPT-3 mise à part l’augmentation drastique du nombre de paramètres.
 
 
[[File:ConfigGPT3.png| Figure 9: informations sur les différents modèles de GPT-3]]
 
 
Figure 9: informations sur les différents modèles de GPT-3 [9]
 
 
=='''Limitations'''==
 
 
Malgré le fait que GPT-3 atteigne d'excellents scores sur de nombreuses tâches, le modèle possède certaines limites. Tout d’abord, il est plutôt faible sur les tâches de synthèse de textes, il fait beaucoup de répétitions et même des contradictions.
 
Un autre problème récurrent chez les modèles de deep learning est le biais, et GPT-3 n’y échappe pas non plus. Certains utilisateurs ont pu constater des biais racistes ou misogynes comme par exemple l’association du mot “Islam” avec “terrorisme” qui revient souvent dans les phrases générées par le modèle [10].
 
 
=='''Autres modèles issus de GPT-3'''==
 
Pour l’utilisation de l’API de OpenAI, il existe différents modèles à notre disposition pour les fine-tune : davinci, curie, babbage, et ada. Les 2 premiers sont les plus complets, mais chacun a ses tâches “préférées”.
 
 
{| class="wikitable"
 
! Modèle !! Tâche
 
|-
 
| Davinci || Complex intent, cause and effect, summarization for audience
 
|-
 
| Curie || Language translation, complex classification, text sentiment, summarization
 
|-
 
| Babbage || Moderate classification, semantic search classification
 
|-
 
| Ada || Parsing text, simple classification, address correction, keywords
 
|}
 
 
=='''Applications en production qui utilisent GPT-3 '''==
 
* Duolingo : Utilise GPT-3 pour donner des corrections en grammaire Française.
 
 
* HyperClova : modèle TAL de coréen basé sur GPT-3, développé par Naver.
 
 
* 500+ Openers for Tinder : GPT-3 a généré des centaines de phrases d’introduction pour les conversations Tinder.
 
   
 
= '''Bibliographie''' =
 
= '''Bibliographie''' =
[1] Attention Is All You Need: https://arxiv.org/abs/1706.03762
+
[1] Why has ROS2 been created: https://design.ros2.org/articles/why_ros2.html (Author: Brian Gerkey, Date : 2014-06)
 
[2] The true names/sizes of the 4 GPT-2 models (Issue): https://github.com/openai/gpt-2/issues/209
 
 
[3] Language Models are Unsupervised Multitask Learners : https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
 
 
[4] Le projet sur github pour plus d’informations: https://github.com/kingoflolz/mesh-transformer-jax/
 
 
[5] Documentation de GPT-J sur Huggingface: https://huggingface.co/docs/transformers/model_doc/gptj
 
   
  +
[2] Monthly report of the state of Robotic: https://ubuntu.com/blog/the-state-of-robotics-XXXX-2021 (remplacer XXX par le mois pour regarder chaque mois de 2021)
[6] Documentation de la pile: https://pile.eleuther.ai/
 
   
  +
[3] ROS description : http://wiki.ros.org/rqt (Author: Thomas Dirk)
[7] The Pile: An 800GB Dataset of Diverse Text for Language Modeling:
 
https://arxiv.org/pdf/2101.00027.pdf
 
   
  +
[4] Documentation for ROS1 and ROS2 : https://docs.ros.org/ (Author: Open Robotics)
[8] GPT-J-6B: 6B JAX-Based Transformer (Aran Komatsuzaki): https://arankomatsuzaki.wordpress.com/2021/06/04/gpt-j/
 
   
  +
[5] ROS : le standard d'architecture logicielle robotique : https://www.digitalcorner-wavestone.com/
[9] Language Models are Few-Shot Learners: https://arxiv.org/pdf/2005.14165.pdf
 
   
  +
[6] Site marchant de robot - donne aussi des avis sur des technologies: https://www.generationrobots.com/fr/
[10] How Biased is GPT-3: https://medium.com/fair-bytes/how-biased-is-gpt-3-5b2b91f1177
 

Latest revision as of 13:51, 10 January 2022

Robot Operatin System 2 (ROS2)

Auteurs

Résumé

ROS2 est une plateforme Open Source pour le développement en robotique qui vient succéder à ROS1 (Robot Operating System). L’idée de ROS est de fournir une plateforme d’exécution ainsi qu’un ensemble d’outils de développement qui s’adapte à une multitude de projets en robotique. ROS2 est né avec la volonté de venir s’adapter aux nouveaux besoins qui n’était pas présent au moment de la création de ROS1 : la collaboration entre robots, les contraintes temps réel, l’environnement de production plutôt que de développement, … La première distribution de ROS2 est arrivée en 2017 et près de 8 distributions existent à ce jour.

Mots Clés

Système d’exploitation pour robots (ROS) : plateforme offrant des services proche de ceux des systèmes d'exploitation comme l'abstraction du matériel, la gestion de la concurrence, gestion des processus, etc...
nœuds : c'est l'élément de base des graphes ROS, il correspond à une unité fonctionnelle (ex: contrôle des roues) et il peut envoyer et recevoir des données à d'autres noeuds.
topic : Système de transport de l'information basé sur le concept de publisher et subscriber.
service : Système de transmission de l'information basé sur une structure client/serveur, où le client fait des requêtes au serveur pour obtenir une donné.
action : Système de transmission combinant les topics et les services très utlisés pour les tâches de longues durées car il permet d'avoir un feedback régulier de ce qui est fait par le node pendant la tâche.

Abstract

ROS2 is an open source platform for the development of robots that comes after ROS1 (Robot Operating System). The idea behind ROS is to create a platform that can execute the robot’s code while also bringing development tools for any robot developer. ROS2 was created with the will to adapt to new needs that didn’t exist when ROS1 was created : collaboration between robots, real time constraint, production environment, … The first ROS2 distribution arrived in 2017 and 7 other distributions have been created since then.


Keywords

Robot Operating System (ROS) : platform offering operating systems services like the abstraction of the material, the control of the process, etc...
node : basic ROS element around one functional unit (example: control of the wheels). It can send and receive data to other nodes.
topic : Data transport system based on subscriber/publisher idea.
service : Data transport system based on client/server idea, where the client needs to call for the ressource to get it from the server.
action : Data transport system based on service and topic that is used for long task to get regular feedback during the task.

Synthèse

Qu'est ce que c'est ROS ?

Histoire

Willow garage(laboratoire de recherche en informatique de Californie créé en 2006) met au point un robot à taille humanoïde (PR2) en 2010. Pour la création de ce robot, la société décide de mettre en place une pateforme adaptée au besoin de ce robot : ROS (Robot Operating System). Cette plateforme sera ensuite repris par la société Open Robotics (société californienne à but non lucratif) et étendu à plus de 75 robots. Le but était de faire de ROS un standard pour un ensemble de robots.

PR2.jpg

Description

ROS fonctionne autour de 5 axes majeures :
- Logiciel d'exécution
- Outils de developpement
- Bibliothèques logicielles
- Standard robotique
- Communauté ROS

ROS offre une plateforme d'exécution dans laquelle on peut exécuter le code destiné au robot. C'est l'aspect système d'exploitation (Operating System) que l'on retrouve dans ROS.
On trouve également un ensemble d'outils de plus haut niveau pour le développement allant de la configuration, à la maintenance et aux tests. Le but est donc d'avoir un outil avec lequel programmer.
De plus, l'apect communautaire est très fort dans le developpement de ROS, avec un enrichissement et un partage des bibliothèques logicielles pour faciliter l'expansion de ROS pour de nombreux robots.
Enfin, ROS se veut comme établissant un standard de règle de bonne pratique, de patterns, etc...

ROS Description.png

Quels changements apporte ROS2 ?

ROS2 a été créé en décembre 2017 dans le but de répondre à de nouveaux besoins. En effet, lors de la création de ROS1, Willow garage s'est basé sur les besoins qui concernaient leur robot PR2 à l'époque. Cependant avec les années, ROS s'est de plus en plus élargi s'éloignant de ces besoins initiaux. L'idée était aussi que l'API créé datait de 2010 donc passer à ROS2 pouvait aussi permettre de mettre à jour cette API.

ROS2 a donc pour but de :
- permettre la communication dans une équipe de robots (robot seul dans ROS1)
- permettre d'utiliser des systèmes embarqués de très petite taille
- permettre la transmission de donnée en temps réel
- s'adapter à un environnement de production plutôt que l'environnement académique dans lequel ROS1 avait été créé
- s'adapter au réseau instable car ROS1 s'adapte mal à des variations de connection du réseau.

Afin de parvenir à ces buts, ROS2 offre plusieurs nouveautés par rapport à ROS1 :
- Plus de système d’exploitation sur lesquels développer (Windows par exemple)
- Utilise des version plus récentes de C++ et Python
- Possibilité de créer plusieurs noeuds dans un processus
- Utilisation d’un DDS (Data Distribution Service) qui permet d’améliorer la transmission
- Roslaunch permet d’assurer que tous les noeuds ont été instanciés correctement avant l'exécution de leur comportement
- “Une API revue au goût du jour”


Concepts manipulés par ROS2

ROS se base sur 4 concepts de base : les noeuds, les topics, les services et les actions.

Architecture d'un graphe ROS:

ROS graphe.gif


Les noeuds sont des unités fonctionnelles qui peuvent contenir plusieurs paramètres comme des entiers, des strings, etc... Par exemple, on pourrait avoir un node associé à la roue d'un véhicule.

Les topics sont des systèmes de transmission où des noeuds peuvent s'abonner pour recevoir les changements qui sont publiés par les publishers. Les publishers sont des noeuds qui vont se déclarer au topic commme publishers et partager leur données à tous les subscribers de ce topic.

ROS topic.gif


Les services sont des systèmes de transmission basés sur l'achitecture client/serveur ou un ou plusieurs clients peuvent demander un donnée au serveur. Chaque service ne peut avoir qu'un seul serveur, mais il peut avoir une multitude de clients. De plus, lorsque que le serveur envoie la donnée, il ne l'envoie qu'au client lui ayant demandé cette donnée, pas aux autres.

ROS service.gif

Les actions sont des systèmes de transmission basés à la fois sur les topics et les services. Le but est d'avoir des feedbacks réguliers lors d'une action longue. Pour cela, le client va envoyer un but et va demander le résultat au serveur, le but étant le résultat de l'action longue et la demande de résultat va donc prendre un certain temps. Pendant ce temps, la serveur va envoyer des notifications régulières via un topic au client pour lui indiquer l'avancée par rapport au but final (les feedbacks).

ROS actions.gif


Evolution future de ROS2

Depuis sa création, ROS2 a été décliné sous 7 distributions : Ardent, Bouncy, Crystal, Dashing, Eloquent, Foxy, Galactic. Les nouvelles distributions sortent entre 6 mois et 1 an après la précédente. La prochaine distribution qui verra le jour sera Humble Hawksbill en mai 2022. L'ajout de nouvelles distributions permet de corriger des problèmes d'anciennent distributions et d'ajouter de nouvelles fonctionnalités ou d'enlever des fonctionnalités inutiles. Les changements restent souvent mineur entre les distributions. Les distributions ont une durée de vie entre 2 et 5 ans en général.

ROS1 et ROS2 dans le marché de la robotique

En regardant le marché de la robotique dans ces deux dernières années, on peut voir différents projets ayant vu le jour qui se basent sur ROS et ROS2, et ce pas uniquement dans le milieu universitaire et dans des petites entreprises. Des entreprises comme Boston Dynamics ou OTTO motors l'utilisent dans leurs projets, ou encore la NASA.
Parmi les projets notable de ces dernières années, on retoruve par exemple une collaboration entre Boston Dynamics et OTTO motors pour un projet d'automatisation d'entrepôt avec des robots transportant les cartons à entreposer et des robots avec un bras pour déplacer les cartons et les placer dans l'entrepôt. Ce projet utilise en particulier l'obstacle avoidance fournis par ROS2
Un autre projet intéressant est un projet de la NASA, dans lequel le but est de créer des robots d'aide à la maintenance des stations spatiales pour assister les astonautes dans les bases dans l'espace. Ce projet était dans des phases de test avancées en août 2021. Il se basait sur ROS1.
Il existe de nombreux projets basés sur ROS1 et ROS2 et nous vous invitons à consulter les rapports réguliers sur l'état de la robotique pour suivre ces avancés.


Conclusion

ROS2 est un assez récent et de ce fait, beaucoup de projet sont encore fait sous ROS1. Cependant, en répondant à des nouveaux besoins, ROS2 a pu commencer à être utilisé pour des nouveaux projets et on peut espérer le voir dans beaucoup de projet dans les années à venir.

Bibliographie

[1] Why has ROS2 been created: https://design.ros2.org/articles/why_ros2.html (Author: Brian Gerkey, Date : 2014-06)

[2] Monthly report of the state of Robotic: https://ubuntu.com/blog/the-state-of-robotics-XXXX-2021 (remplacer XXX par le mois pour regarder chaque mois de 2021)

[3] ROS description : http://wiki.ros.org/rqt (Author: Thomas Dirk)

[4] Documentation for ROS1 and ROS2 : https://docs.ros.org/ (Author: Open Robotics)

[5] ROS : le standard d'architecture logicielle robotique : https://www.digitalcorner-wavestone.com/

[6] Site marchant de robot - donne aussi des avis sur des technologies: https://www.generationrobots.com/fr/