{"id":2575,"date":"2016-03-26T10:20:35","date_gmt":"2016-03-26T09:20:35","guid":{"rendered":"http:\/\/www.generationrobots.com\/blog\/?p=2575"},"modified":"2023-04-27T14:59:28","modified_gmt":"2023-04-27T12:59:28","slug":"ros-robot-operating-system-3","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/ros-robot-operating-system-3\/","title":{"rendered":"ROS &#8211; Robot Operating System"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2575\" class=\"elementor elementor-2575\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5ee248c4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5ee248c4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-75483d3a\" data-id=\"75483d3a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5eb1e0b6 elementor-widget elementor-widget-text-editor\" data-id=\"5eb1e0b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\n<h2 class=\"wp-block-heading\" id=\"h-qu-est-ce-que-ros\">Qu\u2019est ce que ROS ?<\/h2>\n\n\n\n<p>Comme son nom l\u2019indique, ROS (Robot Operating System) est un syst\u00e8me d\u2019exploitation pour robots. De m\u00eame que les syst\u00e8mes d\u2019exploitation pour PC, serveurs ou appareils autonomes, ROS est un syst\u00e8me d\u2019exploitation complet pour la robotique de service.<\/p>\n\n\n\n<p>Il est compos\u00e9 d\u2019un ensemble de logiciels libres open source permettant de d\u00e9velopper des logiciels pour la robotique.<\/p>\n\n\n\n<p>ROS est un m\u00e9ta syst\u00e8me d\u2019exploitation, quelque chose entre le syst\u00e8me d\u2019exploitation et le middleware.<\/p>\n\n\n\n<p>Il fournit des services proches d\u2019un syst\u00e8me d\u2019exploitation :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Abstraction du mat\u00e9riel<\/li>\n\n\n\n<li>Gestion de la concurrence<\/li>\n\n\n\n<li>Gestion des processus<\/li>\n<\/ul>\n\n\n\n<p>ROS fournit aussi des fonctionnalit\u00e9s de haut niveau :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Appels asynchrones<\/li>\n\n\n\n<li>Appels synchrones<\/li>\n\n\n\n<li>Base de donn\u00e9es centralis\u00e9e de donn\u00e9es<\/li>\n\n\n\n<li>Syst\u00e8me de param\u00e9trage du robot<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-de-l-interet-d-un-os-pour-les-robots\">De l&rsquo;int\u00e9r\u00eat d&rsquo;un OS pour les robots<\/h2>\n\n\n\n<p>Avant les OS robotiques, chaque concepteur de robot, chaque chercheur en robotique passait un temps non n\u00e9gligeable \u00e0 concevoir mat\u00e9riellement son robot ainsi que le logiciel embarqu\u00e9 associ\u00e9. Cela demandait des comp\u00e9tences en m\u00e9canique, \u00e9lectronique et programmation embarqu\u00e9e.<\/p>\n\n\n\n<p>G\u00e9n\u00e9ralement, les programmes ainsi con\u00e7us correspondaient plus \u00e0 de la programmation embarqu\u00e9e, proche de l&rsquo;\u00e9lectronique, qu\u2019\u00e0 de la robotique proprement dite, telle que nous pouvons la rencontrer aujourd\u2019hui dans la robotique de service. La r\u00e9utilisation des programmes \u00e9tait non triviale car fortement li\u00e9s au mat\u00e9riel sous-jacent.<\/p>\n\n\n\n<p>L\u2019id\u00e9e principale d\u2019un OS robotique est d\u2019\u00e9viter de r\u00e9inventer la roue \u00e0 chaque fois et de proposer des fonctionnalit\u00e9s standardis\u00e9es faisant abstraction du mat\u00e9riel, tout comme un OS classique pour PC, d\u2019o\u00f9 l\u2019analogie de nom.<\/p>\n\n\n\n<p>ROS se positionne donc comme un facilitateur de projets robotiques. Les chercheurs ou les ing\u00e9nieurs des p\u00f4les R&amp;D ne passent plus de temps \u00e0 cr\u00e9er un nouvel \u00e9cosyst\u00e8me pour chaque nouveau projet en robotique. Cela repr\u00e9sente \u00e9galement une \u00e9conomie financi\u00e8re.<\/p>\n\n\n\n<p>ROS a un effet d\u2019acc\u00e9l\u00e9rateur en R&amp;D en r\u00e9duisant les co\u00fbts et le \u201ctime to market\u201d. Pour les structures ou d\u00e9partement souhaitant lancer un nouveau prototype rapidement, ou qui ont besoin de combler un retard technologique, c\u2019est tr\u00e8s int\u00e9ressant.<\/p>\n\n\n\n<p>Un autre avantage de l\u2019OS robotique comme ROS est de rassembler des savoir-faire de diff\u00e9rentes disciplines. En effet, concevoir et programmer un robot, c\u2019est :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>G\u00e9rer le mat\u00e9riel en \u00e9crivant les pilotes<\/li>\n\n\n\n<li>G\u00e9rer la m\u00e9moire et les processus<\/li>\n\n\n\n<li>G\u00e9rer la concurrence et la fusion de donn\u00e9es<\/li>\n\n\n\n<li>Proposer des algorithmes de raisonnement abstrait faisant largement appel \u00e0 l&rsquo;intelligence artificielle<\/li>\n<\/ul>\n\n\n\n<p>La robotique n\u00e9cessite donc des comp\u00e9tences tr\u00e8s diff\u00e9rentes, comp\u00e9tences g\u00e9n\u00e9ralement hors de port\u00e9e d&rsquo;une seule personne.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">ROS abaisse le niveau technique requis pour travailler sur des projets robotiques. Cela peut permettre \u00e0 de nombreuses entreprises de plus facilement se lancer en robotique, ou concevoir des syst\u00e8mes complexes plus rapidement.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-l-histoire-de-ros\">L\u2019histoire de ROS<\/h2>\n\n\n\n<p>Il existe de nombreux framework robotiques r\u00e9alis\u00e9s dans une optique pr\u00e9cise, \u00e0 des fins de prototypage. ROS a \u00e9t\u00e9 voulu plus g\u00e9n\u00e9raliste m\u00eame si ses concepteurs pensent qu\u2019il n\u2019est pas l\u2019OS ultime capable de tout faire.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Avant 2007, ann\u00e9e de cr\u00e9ation du middleware ROS, les roboticiens ne disposaient pas d\u2019architecture logicielle embarqu\u00e9e standard. Il s\u2019agit donc d\u2019une avanc\u00e9e importante.<\/span><\/p>\n\n\n\n<p>ROS est d\u00e9velopp\u00e9 et maintenu par une soci\u00e9t\u00e9 californienne, Willow Garage, fond\u00e9e en 2006 par Scott Hassan, un des premiers employ\u00e9s de Google qui a particip\u00e9 au d\u00e9veloppement de la technologie du moteur de recherche et qui est aussi \u00e0 l\u2019origine des Yahoo Groups (en fait de eGroups qui est devenu Yahoo Groups). Le PDG de Willow Garage est Steeve Cousin, un ancien d\u2019IBM.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/ROS\/logo-willow.png\" alt=\"logo de Willow Garage\" \/><\/figure>\n\n\n\n<div align=\"center\">\u00a0<\/div>\n\n\n\n<p>Willow Garage est une soci\u00e9t\u00e9 priv\u00e9e qui entretient des liens \u00e9troits avec l\u2019universit\u00e9 de Stanford qui est proche g\u00e9ographiquement de Willow Garage (\u00e0 Palo Alto en Californie).<\/p>\n\n\n\n<p>Willow Garage se pr\u00e9sente comme un laboratoire de recherche et un incubateur technologique pour la robotique personnelle, centr\u00e9 sur la recherche plus que sur les profits (au moins au d\u00e9but).<\/p>\n\n\n\n<p>Willow Garage d\u00e9veloppe aussi bien du logiciel avec ROS que du mat\u00e9riel avec leurs robots PR2et TurtleBot. Dans tous les cas, ce qui est produit est open source (licences BSD). Leur id\u00e9e est que si l\u2019on souhaite voir arriver les robots dans nos foyers, il faut pour cela acc\u00e9l\u00e9rer les recherches en fournissant des bases hardware et software solides et qui soient open source.<\/p>\n\n\n\n<p>Il semblerait que Willow Garage veuille b\u00e2tir la communaut\u00e9 de la robotique plut\u00f4t que la robotique en elle-m\u00eame. Interrog\u00e9 par le magazine l\u2019Expansion, Scott Hassan indique que ses objectifs sont identiques \u00e0 ceux d\u2019Irobot mais que la strat\u00e9gie pour y parvenir est diff\u00e9rente.<\/p>\n\n\n\n<p>4 raisons de croire au succ\u00e8s de Willow Garage d\u2019apr\u00e8s le singularityhub :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ils souhaitent proposer les moyens de ne plus r\u00e9inventer la roue afin d\u2019acc\u00e9l\u00e9rer les recherches en robotique.<\/li>\n\n\n\n<li>Ils ont les fonds n\u00e9cessaires.<\/li>\n\n\n\n<li>Ils ont l\u2019oreille du monde de la recherche.<\/li>\n\n\n\n<li>Ils veulent favoriser le d\u00e9ploiement de leur technologie gratuitement avant de penser \u00e0 gagner de l\u2019argent.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-l-organisation-generale-de-ros\">L\u2019organisation g\u00e9n\u00e9rale de ROS<\/h2>\n\n\n\n<p>La philosophie de ROS se r\u00e9sume dans les 5 grands principes suivants :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Peer to Peer<\/li>\n\n\n\n<li>Bas\u00e9 sur des outils (microkernel)<\/li>\n\n\n\n<li>Multi langages<\/li>\n\n\n\n<li>L\u00e9ger<\/li>\n\n\n\n<li>Gratuit et open source<\/li>\n<\/ul>\n\n\n\n<p>Reprenons chacun de ces points.<\/p>\n\n\n\n<p><strong>Peer to Peer <\/strong>: Un robot suffisamment complexe est compos\u00e9 de plusieurs ordinateurs ou cartes embarqu\u00e9es reli\u00e9es par Ethernet ainsi que parfois des ordinateurs externes au robot pour des t\u00e2ches de calcul intensif. Une architecture peer to peer coupl\u00e9e \u00e0 un syst\u00e8me de tampon (buffering) et un syst\u00e8me de lookup (un name service appel\u00e9 master dans ROS), permet \u00e0 chacun des acteurs de dialoguer en direct avec un autre acteur, de mani\u00e8re synchrone ou asynchrone en fonction des besoins.<\/p>\n\n\n\n<p><strong>Multi langages <\/strong>: ROS est neutre d\u2019un point de vue langage et peut \u00eatre programm\u00e9 en diff\u00e9rents langages. La sp\u00e9cification de ROS intervient au niveau message. Les connexions peer to peer sont n\u00e9goci\u00e9es en XML-RPC qui existe dans un grand nombre de langages. Pour supporter un nouveau langage, soit on rewrappe les classes C++ (ce qui a \u00e9t\u00e9 fait pour le client Octave par exemple), soit on \u00e9crit les classes permettant de g\u00e9n\u00e9rer les messages. Ces messages sont d\u00e9crits en IDL (Interface Definition Language).<\/p>\n\n\n\n<p><strong>Bas\u00e9 sur des outils <\/strong>: Plut\u00f4t qu\u2019un runtime monolithique, ROS a adopt\u00e9 un design microkernel qui utilise un grand nombre de petits outils pour faire le build et le run des diff\u00e9rents composants ROS. Lorsque vous parcourrez les tutoriaux ROS, vous apprenez \u00e0 vous servir de plusieurs commandes permettant de manipuler les n\u0153uds et les messages. Chaque commande est en fait un ex\u00e9cutable. L\u2019avantage de cette solution est qu\u2019un probl\u00e8me sur un executable n\u2019affecte pas les autres, rendant le syst\u00e8me plus robuste et \u00e9volutif qu\u2019un syst\u00e8me bas\u00e9 sur un runtime centralis\u00e9.<\/p>\n\n\n\n<p><strong>L\u00e9ger<\/strong> : Afin de lutter contre le d\u00e9veloppement d\u2019algorithmes plus ou moins li\u00e9s avec l\u2019OS robotique et donc difficilement r\u00e9utilisables ensuite, les d\u00e9veloppeurs de ROS souhaitent que les pilotes et autres algorithmes soient contenus dans des ex\u00e9cutables ind\u00e9pendants. Cela assure la r\u00e9utilisabilit\u00e9 maximale et surtout le maintient d\u2019une taille r\u00e9duite. Ce m\u00e9canisme rend ROS facile d&rsquo;usage, la complexit\u00e9 se trouvant dans les librairies. Cette organisation facilite en plus le test unitaire. Enfin, ROS utilise du code (pilotes et algorithmes) issus d\u2019autres projets open source :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simulateur Player\/stage<\/li>\n\n\n\n<li>Librairie de traitement d\u2019image et de vision artificielle : OpenCV<\/li>\n\n\n\n<li>Algorithme de planification : OpenRave<\/li>\n\n\n\n<li>\u2026<\/li>\n<\/ul>\n\n\n\n<p>Pour une liste compl\u00e8te des algorithmes disponibles, rendez-vous sur : <a class=\"catalogue\" title=\"Liste de stacks ROS disponibles\" href=\"http:\/\/www.ros.org\/wiki\/StackList\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.ros.org\/wiki\/StackList<\/a><\/p>\n\n\n\n<p><strong>Gratuit et open source <\/strong>: Nous avons d\u00e9j\u00e0 expliqu\u00e9 les raisons de ce choix avant. Notons toutefois que l\u2019architecture choisie est coh\u00e9rente avec ce choix : ROS passe des donn\u00e9es gr\u00e2ce \u00e0 de la communication interprocess. De ce fait, les modules n\u2019ont pas besoin d\u2019\u00eatre li\u00e9s dans un unique process, facilitant ainsi l\u2019usage des diff\u00e9rentes licences.<\/p>\n\n\n\n<p>L\u2019\u00e9cosyst\u00e8me ROS poss\u00e8de des fonctionnalit\u00e9s de partage. ROS permet d\u2019importer et exporter des biblioth\u00e8ques de logiciels (packages ROS) qui peuvent \u00eatre charg\u00e9es et upload\u00e9es sur le site www.ros.org. Ces fonctionnalit\u00e9s ont \u00e9mul\u00e9 les pratiques collaboratives et le partage de connaissance dans le secteur de la robotique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-les-autres-systemes-d-exploitation-generalistes-pour-robots\">Les autres syst\u00e8mes d\u2019exploitation g\u00e9n\u00e9ralistes pour robots<\/h2>\n\n\n\n<p>Citons quelques syst\u00e8mes d\u2019exploitation ou middleware pour robots :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"text-decoration: underline;\">Microsoft Robotics Developper Studio <\/span>: syst\u00e8me multiplateforme, cr\u00e9\u00e9 par Microsoft. Il est gratuit et il fournit un outil de simulation. Il n\u2019est cependant compatible qu\u2019avec Windows et se programme avec un langage manag\u00e9 .NET (C# de pr\u00e9f\u00e9rence).<\/li>\n\n\n\n<li><span style=\"text-decoration: underline;\">NAOQi<\/span> : syst\u00e8me robotique r\u00e9alis\u00e9 pour le robot NAO par Aldebaran Robotics. Se programme en C++ ou Python. NAOQI est open source.<\/li>\n\n\n\n<li><span style=\"text-decoration: underline;\">URBI <\/span>: R\u00e9alis\u00e9 par la soci\u00e9t\u00e9 fran\u00e7aise <a class=\"catalogue\" title=\"Gostai, soci\u00e9t\u00e9 fran\u00e7aise de robotique \u00e0 l'origine de URBI et du robot Jazz\" href=\"http:\/\/www.gostai.com\">Gostai<\/a>. Il est open source et propose son propre langage de script (URBIScript). Il se programme en C++ \u00e9galement. URBI est multiplateformes.<\/li>\n<\/ul>\n\n\n\n<p>Il existe ensuite de nombreux syst\u00e8mes embarqu\u00e9s sp\u00e9cifiques \u00e0 un robot en particulier. On sort ici du mod\u00e8le multiplateforme.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-programmer-avec-ros\">Programmer avec ROS<\/h2>\n\n\n\n<p>ROS n\u2019est pas d\u00e9pendant d\u2019un langage. A ce jour, trois librairies principales ont \u00e9t\u00e9 d\u00e9finies pour ROS qui permettent de programmer respectivement ROS en Python, en Lisp ou en C++. En plus de ces trois librairies, deux librairies exp\u00e9rimentales sont propos\u00e9es, qui permettent de programmer ROS en Java ou en Lua.<\/p>\n\n\n\n<p><strong>Un mot sur ROSJAVA et Android<\/strong><br \/>Rosjava est quelque chose qui est diff\u00e9rent de la librairie cliente java pr\u00e9sente dans ROS et que nous venons de mentionner. Rosjava est une impl\u00e9mentation enti\u00e8rement en Java de ROS cr\u00e9\u00e9e et maintenue par Google et Willow Garage. Dans ce cas, au lieu d\u2019avoir une librairie cliente en java qui permet d\u2019acc\u00e9der au c\u0153ur de ROS qui lui est \u00e9crit en C++, le projet rosjava a totalement r\u00e9\u00e9crit le c\u0153ur de ROS en Java. L\u2019objectif poursuivit par Google est d\u2019avoir une version de ROS totalement compatible avec Android, le syst\u00e8me d\u2019exploitation l\u00e9ger de Google. Rosjava permettra de piloter les robots dont le syst\u00e8me d\u2019exploitation n\u2019est pas Linux mais Android (m\u00eame si Android est bas\u00e9 sur Linux).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-les-robots-compatibles-avec-ros\">Les robots compatibles avec ROS<\/h2>\n\n\n\n<p>La liste des robots compatibles avec ROS \u00e9volue sans cesse. Pour une liste exhaustive, rendez-vous sur le site de Willow Garage : <a class=\"catalogue\" title=\"Liste des robots compatibles avec ROS\" href=\"http:\/\/www.ros.org\/wiki\/Robots\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.ros.org\/wiki\/Robots<\/a><\/p>\n\n\n\n<p>Citons tout de m\u00eame les plus connus : <a class=\"catalogue\" title=\"Robot humanoide NAO\" href=\"http:\/\/www.generationrobots.com\/fr\/246-acheter-le-robot-humanoide-nao\">NAO<\/a>, Lego Mindstorms NXT, IRobot Roomba, TurtleBot et enfin le robot ic\u00f4ne de Willow Garage, le fameux robot PR2.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/ROS\/PR2-robot.jpg\" alt=\"Robot PR2 de Willow Garage\" \/><\/figure>\n\n\n\n<div align=\"center\">\u00a0<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-le-systeme-de-fichiers-de-ros\">Le syst\u00e8me de fichiers de ROS<\/h2>\n\n\n\n<p>Les ressources de ROS sont organis\u00e9es dans une structure hi\u00e9rarchique sur disque. Deux concepts importants se d\u00e9tachent :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Le package<\/strong> : C\u2019est l\u2019unit\u00e9 principale d\u2019organisation logicielle de ROS. Un package est un r\u00e9pertoire qui contient les n\u0153uds (nous verrons ci-dessous ce qu\u2019est un n\u0153ud), les librairies externes, des donn\u00e9es, des fichiers de configuration et un fichier de configuration xml nomm\u00e9 manifest.xml.<\/li>\n\n\n\n<li><strong>La stack<\/strong> : Une stack est une collection de packages. Elle propose une agr\u00e9gation de fonctionnalit\u00e9s telles que la navigation, la localisation\u2026 Une stack est un r\u00e9pertoire qui contient les r\u00e9pertoires des packages ainsi qu\u2019un fichier de configuration nomm\u00e9 stack.xml.<\/li>\n<\/ul>\n\n\n\n<p>En plus de ces deux notions tr\u00e8s importantes, on rel\u00e8ve \u00e9galement la notion de distribution. Une Distribution, comme dans Linux, est un ensemble de stacks versionn\u00e9es.<\/p>\n\n\n\n<p>Les derni\u00e8res distributions en date de ROS :<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td>\n<ul>\n<li><a class=\"catalogue\" title=\"ROS Fuerte distribution ROS\" href=\"http:\/\/ros.org\/wiki\/fuerte\" target=\"_blank\" rel=\"noopener noreferrer\">ROS Fuerte<\/a>, publi\u00e9e le 23 Avril 2012<\/li>\n<li><a class=\"catalogue\" title=\"ROS Electric Emys distribution ROS\" href=\"http:\/\/www.ros.org\/wiki\/electric\" target=\"_blank\" rel=\"noopener noreferrer\">ROS Electric Emys<\/a>, publi\u00e9e le 30 ao\u00fbt 2011<\/li>\n<li><a class=\"catalogue\" title=\"ROS Diamondback distribution ROS\" href=\"http:\/\/www.ros.org\/wiki\/diamondback\" target=\"_blank\" rel=\"noopener noreferrer\">ROS Diamondback<\/a>, publi\u00e9e le 2 mars 2011<\/li>\n<li><a class=\"catalogue\" title=\"ROS C Turtle distribution ROS\" href=\"http:\/\/www.ros.org\/wiki\/cturtle\" target=\"_blank\" rel=\"noopener noreferrer\">ROS C Turtle<\/a>, publi\u00e9e le 2 ao\u00fbt 2010<\/li>\n<li><a class=\"catalogue\" title=\"ROS Box Turtle distribution ROS\" href=\"http:\/\/www.ros.org\/wiki\/boxturtle\" target=\"_blank\" rel=\"noopener noreferrer\">ROS Box Turtle<\/a>, publi\u00e9e le 2 mars 2010<\/li>\n<\/ul>\n<\/td>\n<td><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/ROS\/electric_distribution-ROS.png\" alt=\"Distribution Electric ROS\" width=\"160\" height=\"127\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-les-notions-de-base-de-ros\">Les notions de base de ROS<\/h2>\n\n\n\n<p>Le principe de base d\u2019un OS robotique est de faire fonctionner en parall\u00e8le un grand nombre d\u2019ex\u00e9cutables qui doivent pouvoir \u00e9changer de l\u2019information de mani\u00e8re synchrone ou asynchrone. Par exemple, un OS robotique doit interroger \u00e0 une fr\u00e9quence d\u00e9finie les capteurs du robot (capteur de distance \u00e0 ultrasons ou infrarouge, capteur de pression, capteur de temp\u00e9rature, gyroscope, acc\u00e9l\u00e9rom\u00e8tre, cam\u00e9ras, microphones\u2026), r\u00e9cup\u00e9rer ces informations, les traiter (faire ce que l\u2019on appelle la fusion de donn\u00e9es), les passer \u00e0 des algorithmes de traitement (traitement de la parole, vision artificielle, localisation et cartographie simultan\u00e9e,\u2026) et enfin contr\u00f4ler les moteurs en retour. Tout ce processus s\u2019effectue en continue et en parall\u00e8le. D\u2019autre part, l\u2019OS robotique doit assurer la gestion de la concurrence afin d\u2019assurer l\u2019acc\u00e8s efficace aux ressources du robot.<\/p>\n\n\n\n<p>Nous d\u00e9crivons ci-dessous les concepts regroup\u00e9s dans ROS sous le nom de \u00ab ROS Computation Graph \u00bb et qui permettent d&rsquo;atteindre ces objectifs. Il s\u2019agit des concepts utilis\u00e9s par le syst\u00e8me en cours de fonctionnement tandis que le \u00ab ROS FileSystem \u00bb d\u00e9crit dans le paragraphe pr\u00e9c\u00e9dent correspond aux concepts statiques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-les-noeuds\">Les n\u0153uds<\/h3>\n\n\n\n<p>ROS r\u00e9pond \u00e0 tout cette probl\u00e9matique gr\u00e2ce \u00e0 des notions de base simples. La premi\u00e8re notion est la notion de <strong>n\u0153ud<\/strong>.<\/p>\n\n\n\n<p>Dans ROS, un n\u0153ud est une instance d\u2019un ex\u00e9cutable. Un n\u0153ud peut correspondre \u00e0 un capteur, un moteur, un algorithme de traitement, de surveillance\u2026 Chaque n\u0153ud qui se lance se d\u00e9clare au <strong>Master<\/strong>. On retrouve ici l&rsquo;architecture microkernel o\u00f9 chaque ressource est un noeud ind\u00e9pendant.<\/p>\n\n\n\n<p>Le syst\u00e8me de n\u0153uds permet de standardiser des fonctions basiques, et ainsi de d\u00e9velopper rapidement des briques technologiques qui pourront \u00eatre r\u00e9utilis\u00e9es, modifi\u00e9es ou am\u00e9lior\u00e9es facilement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-le-master\">Le Master<\/h3>\n\n\n\n<p>Le <strong>Master<\/strong> est un service de d\u00e9claration et d\u2019enregistrement des n\u0153uds qui permet ainsi \u00e0 des n\u0153uds de se connaitre et d\u2019\u00e9changer de l\u2019information. Le Master est impl\u00e9ment\u00e9 via XMLRPC.<\/p>\n\n\n\n<p>Le Master comprend une sous-partie tr\u00e8s utilis\u00e9e qui est le <strong>Parameter Server<\/strong>. Celui-ci, \u00e9galement impl\u00e9ment\u00e9 sous forme de XMLRPC, comme son nom l\u2019indique est une sorte de base de donn\u00e9es centralis\u00e9e dans laquelle les n\u0153uds peuvent stocker de l&rsquo;information et ainsi partager des param\u00e8tres globaux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-les-topics\">Les topics<\/h3>\n\n\n\n<p>L\u2019\u00e9change de l\u2019information s\u2019effectue soit de mani\u00e8re asynchrone via un <strong>topic<\/strong> ou de mani\u00e8re synchrone via un <strong>service<\/strong>.<\/p>\n\n\n\n<p>Un <strong>topic<\/strong> est un syst\u00e8me de transport de l\u2019information bas\u00e9 sur le syst\u00e8me de l\u2019abonnement \/ publication (subscribe \/ publish). Un ou plusieurs n\u0153uds pourront publier de l\u2019information sur un <strong>topic<\/strong> et un ou plusieurs n\u0153uds pourront lire l\u2019information sur ce <strong>topic<\/strong>. Le <strong>topic<\/strong> est en quelque sorte un bus d\u2019information asynchrone un peu comme un flux RSS. Cette notion de bus many-to-many asynchrone est essentielle dans le cas d\u2019un syst\u00e8me distribu\u00e9.<\/p>\n\n\n\n<p>Le <strong>topic<\/strong> est typ\u00e9, c&rsquo;est-\u00e0-dire que le type d\u2019information qui est publi\u00e9e (le <strong>message<\/strong>) est toujours structur\u00e9 de la m\u00eame mani\u00e8re. Les n\u0153uds envoient ou re\u00e7oivent des messages sur des topics.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-les-messages\">Les messages<\/h3>\n\n\n\n<p>Un <strong>message<\/strong> est une structure de donn\u00e9e composite. Un message est compos\u00e9 d\u2019une combinaison de types primitifs (chaines de caract\u00e8res, bool\u00e9ens, entiers, flottants\u2026) et de message (le message est une structure r\u00e9cursive). Par exemple un n\u0153ud repr\u00e9sentant un servomoteur du robot, publiera certainement son \u00e9tat sur un topic (selon ce que vous aurez programm\u00e9) avec un message contenant par exemple un entier repr\u00e9sentant la position du moteur, un flottant repr\u00e9sentant sa temp\u00e9rature, un autre flottant repr\u00e9sentant sa vitesse\u2026<\/p>\n\n\n\n<p>La description des messages est stock\u00e9e dans <em>nom_package\/msg\/monMessageType.msg<\/em>. Ce fichier d\u00e9crit la structure des messages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-les-services\">Les services<\/h3>\n\n\n\n<p>Le topic est un mode de communication asynchrone permettant une communication many-to- many. Le <strong>service<\/strong> en revanche r\u00e9pond \u00e0 une autre n\u00e9cessit\u00e9, celle d\u2019une communication synchrone entre deux n\u0153uds. Cette notion se rapproche de la notion d\u2019appel de proc\u00e9dure distante (remote procedure call).<\/p>\n\n\n\n<p>La description des services est stock\u00e9e dans <em>nom_package\/srv\/monServiceType.srv<\/em>. Ce fichier d\u00e9crit les structures de donn\u00e9es des requ\u00eates et des r\u00e9ponses.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/ROS\/Concepts-de-base-de-ROS.jpg\" alt=\"Sch\u00e9ma des conceptes de base de ROS\" \/><\/figure>\n\n\n\n<div align=\"center\">\u00a0<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-les-bags\">Les bags<\/h3>\n\n\n\n<p>Les \u00ab bags \u00bb sont des formats pour stocker et rejouer les messages \u00e9chang\u00e9s. Ce syst\u00e8me permet de collecter par exemple les donn\u00e9es mesur\u00e9es par les capteurs et les rejouer ensuite autant de fois qu\u2019on le souhaite afin de faire de la simulation sur des donn\u00e9es r\u00e9elles. Ce syst\u00e8me est \u00e9galement tr\u00e8s utile pour d\u00e9boguer un syst\u00e8me a posteriori.<\/p>\n\n\n\n<p>L\u2019outil <a class=\"catalogue\" title=\"Outil RxBag de ROS permettant d'enregistrer et de rejouer des sc\u00e9narios robotiques\" href=\"http:\/\/www.ros.org\/wiki\/rxbag\" target=\"_blank\" rel=\"noopener noreferrer\">rxbag<\/a> permet de visualiser graphiquement les donn\u00e9es enregistr\u00e9es dans les fichiers bag.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-urdf\">URDF<\/h2>\n\n\n\n<p>ROS propose d\u2019autres notions que nous pourrons d\u00e9couvrir \u00e0 l\u2019occasion d\u2019un nouvel article. Citons n\u00e9anmoins une (autre) contribution int\u00e9ressante de ROS \u00e0 la robotique. Il s\u2019agit de l\u2019urdf (Unified Robot Description Format), un format XML permettant de d\u00e9crire sous la forme d\u2019un fichier standardis\u00e9 un robot complet. Le robot ainsi d\u00e9crit peut \u00eatre statique ou dynamique et des propri\u00e9t\u00e9s physiques et de collision peuvent y \u00eatre ajout\u00e9es.<\/p>\n\n\n\n<p>Outre le standard, ROS propose plusieurs outils permettant de g\u00e9n\u00e9rer, parser ou valider ce format.<\/p>\n\n\n\n<p>L\u2019URDF est utilis\u00e9 par exemple par le simulateur Gazebo pour repr\u00e9senter le robot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ros2\">ROS2<\/h2>\n\n\n\n<p>A l\u2019origine, ROS a \u00e9t\u00e9 d\u00e9velopp\u00e9 pour le monde acad\u00e9mique (recherche, \u00e9ducation sup\u00e9rieure). Cet \u00e9cosyst\u00e8me n\u2019est donc pas align\u00e9 sur les normes de productions commerciales.<\/p>\n\n\n\n<p>Une nouvelle version, ROS2, a \u00e9t\u00e9 lanc\u00e9e en 2017. Cette version comble les lacunes de ROS en termes de s\u00e9curit\u00e9 et de fiabilit\u00e9 notamment. ROS2 apporte une qualit\u00e9 de service, la prise en charge des syst\u00e8mes int\u00e9gr\u00e9s et des sc\u00e9narios en temps r\u00e9el.<\/p>\n\n\n\n<p>Nous avons r\u00e9dig\u00e9 un article d\u00e9taill\u00e9 intitul\u00e9 \u201c<a class=\"catalogue\" title=\"ROS2 : qu\u2019est-ce qui change par rapport \u00e0 ROS ?\" href=\"\/blog\/fr\/ros2-quest-ce-qui-change-par-rapport-a-ros\/\">ROS2 : qu\u2019est-ce qui change par rapport \u00e0 ROS ?<\/a>\u201d, que nous vous invitons \u00e0 lire, si vous souhaitez en savoir plus sur ROS2.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-de-nombreux-outils-tres-utiles-dans-ros\">De nombreux outils tr\u00e8s utiles dans ROS<\/h2>\n\n\n\n<p>Comme nous l\u2019avons dit plus haut, ROS est une collection d\u2019outils et d\u2019algorithmes. Certains sont tr\u00e8s utilis\u00e9s lors de la programmation, de la simulation ou de l\u2019ex\u00e9cution des comportements des robots. Citons quelques outils ou algorithmes que le programmeur de ROS retrouvera souvent :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stage : un simulateur 2D<\/li>\n\n\n\n<li>Gazebo : un simulateur 3D<\/li>\n\n\n\n<li>Rviz : un syst\u00e8me de visualisation 3D (contrairement \u00e0 Gazebo, il n\u2019inclut pas de moteur physique)<\/li>\n\n\n\n<li>Le package <strong>tf<\/strong> qui permet de manipuler des coordonn\u00e9es et des transformations (si vous avez d\u00e9j\u00e0 eu \u00e0 faire de la cin\u00e9matique inverse et \u00e0 manipuler des matrices, alors ce package va grandement vous faciliter la vie).<\/li>\n\n\n\n<li>Opencv : traitement d\u2019images<\/li>\n\n\n\n<li>PointCloudLibrary : reconstruction d\u2019environnement 3D \u00e0 partir de mesures d\u2019un laser<\/li>\n<\/ul>\n\n\n\n<p>Les API standards de ROS sont disponibles \u00e0 l\u2019adresse : <a class=\"catalogue\" title=\"API standards de ROS\" href=\"http:\/\/www.ros.org\/wiki\/APIs\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.ros.org\/wiki\/APIs<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ressources\">Ressources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a class=\"catalogue\" title=\"Portail de ROS, robot Operating System\" href=\"http:\/\/www.ros.org\" target=\"_blank\" rel=\"noopener noreferrer\">www.ros.org<\/a><\/li>\n<\/ul>\n\n\n\n<div id=\"robots-compatibles-ros\">\n<h2>Nos robots et \u00e9quipements compatibles ROS<\/h2>\n<p>Chez G\u00e9n\u00e9ration Robots, nous proposons un grand choix de robots et composants robotiques compatibles ROS. R\u00e9el gain de temps pour les chercheurs et les d\u00e9veloppeurs, ROS permet de travailler imm\u00e9diatement sur un projet et\/ou une application. En effet, de nombreuses ressources sont disponibles en ligne : github, drivers, wiki&#8230;<\/p>\n<p>D\u00e9couvrez nos robots et \u00e9quipements compatibles ROS :\u00a0<\/p>\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-98fa41b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"98fa41b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6e61608\" data-id=\"6e61608\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-42f9f57 elementor-widget elementor-widget-image\" data-id=\"42f9f57\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/static.generation-robots.com\/img\/robots-compatibles-ros.jpg\" title=\"\" alt=\"Robots compatibles ROS\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-077c927 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"077c927\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-19f57fc\" data-id=\"19f57fc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8a7826f elementor-widget elementor-widget-text-editor\" data-id=\"8a7826f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul>\n<li><a class=\"catalogue\" title=\"Robots mobiles autonomes\" href=\"\/fr\/533-robots-mobiles-autonomes\">Robots mobiles autonomes compatibles ROS<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Robots collaboratifs\" href=\"\/fr\/213-robots-collaboratifs\">Robots collaboratifs compatibles ROS<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Bras 6 axes Niryo\" href=\"\/fr\/468-bras-6-axes-niryo\">Bras 6 axes Niryo<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Bras robotique Interbotix Trossen Robotics\" href=\"\/fr\/381-bras-robotique-interbotix-trossen-robotics\">Bras robotique Interbotix Trossen Robotics<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Bras robotique OpenManipulator\" href=\"\/fr\/383-autres-bras-robotiques\">Bras robotique OpenManipulator<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Drones programmables\" href=\"\/fr\/322-drones-programmables\">Drones compatibles ROS<\/a><\/li>\n<li><a class=\"catalogue\" title=\"LiDAR compatibles ROS\" href=\"\/fr\/206-capteurs-lidar-pour-la-robotique-et-l-automatisation\">LiDAR compatibles ROS<\/a><\/li>\n<li><a class=\"catalogue\" title=\"Cam\u00e9ras de profondeur\" href=\"\/fr\/205-cameras-de-profondeur\">Cam\u00e9ras de profondeur compatibles ROS<\/a><\/li>\n<\/ul>\n\n\n\n\n<p>G\u00e9n\u00e9ration Robots (<a class=\"catalogue\" title=\"G\u00e9n\u00e9ration Robots, le sp\u00e9cialiste europ\u00e9en du robot personnel programmable\" href=\"http:\/\/www.generationrobots.com\">http:\/\/www.generationRobots.com<\/a>)<\/p>\n\n\n\n<p><em><span style=\"font-size: 9pt;\">Tout usage et reproduction soumis \u00e0 autorisation explicite pr\u00e9alable. <\/span><\/em><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Qu\u2019est ce que ROS ? Comme son nom l\u2019indique, ROS (Robot Operating System) est un syst\u00e8me d\u2019exploitation pour robots. De m\u00eame que les syst\u00e8mes d\u2019exploitation pour PC, serveurs ou appareils autonomes, ROS est un syst\u00e8me d\u2019exploitation complet pour la robotique de service. Il est compos\u00e9 d\u2019un ensemble de logiciels libres open source permettant de d\u00e9velopper[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/ros-robot-operating-system-3\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":2583,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10527],"tags":[],"class_list":["post-2575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides-et-tutoriels"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/2575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/comments?post=2575"}],"version-history":[{"count":20,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/2575\/revisions"}],"predecessor-version":[{"id":13982,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/2575\/revisions\/13982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/2583"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=2575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=2575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=2575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}