Logo-ROS-Robot-Operating-System

ROS – Robot Operating System

Dieser Beitrag wurde unter Tutorials abgelegt und mit , verschlagwortet am von .

In ein paar Worten

Der Name spricht für sich selbst: ROS (Robot Operating System) ist ein Operating-System für Roboter. Gut bekannt sind schon die Operating-Systems für PC oder Server, ROS überleitet dieses Prinzip zur Service-Robotik.

ROS geht aber noch etwas darüber hinaus: man kann behaupten es handelt sich um eine Mischung aus OS und Middleware.

ROS ermöglicht Anwendungen die einem OS nahe kommen: Hardware-Abstraktion, Konkurrenzmanagement, Prozessmanagement. Parallel dazu auch High-Level Anwendungen wie das asynchrone oder synchrone Aufrufen, zentrale Database oder das Einstellungssystem des Roboters.

Wozu ein OS für Roboter?

Bevor OS für Roboter entwickelt wurden, verbrachte jeder einzelne Forscher oder Robotiker viel Zeit damit die Roboter zu konzipieren und die embedded Software zu schreiben. Das bedurfte Kenntnisse in Sachen Mechanik, Elektronik und Programmierung. Grundsätzlich kam dies der Elektronik geneigter embedded Programmierung näher als der Robotik wie wir sie heute in der Service-Robotik kennen. Die Wiederverwertung solcher Programme war oft schwierig, da diese oft auf die Hardware bezogen waren.

Der offensichtliche Grund ist es also, nicht jedes Mal E=mc2 auszurechnen zu müssen und durch Standardfunktionen die Hardware zu abstrahieren, genau wie auf den gängigen OS für PC.

Ein weiterer Vorteil eines OS für Roboter wie ROS, ist es unterschiedliche Knowhows zusammenzubringen. Einen Roboter zu programmieren bedarf nämlich unter anderem:

  • Hardwaremanagement durch geschriebene Driver
  • Speicher und Prozesse managen
  • Konkurrenz- und Fusiondatamanagement
  • Logische Algorithmen erstellen, was weit auf KI zurückgreift

Robotik ist also vielseitig genug, um allgemein außer Reichweite eines einzelnen Menschen zu sein.

ROS : Der Ursprung

Es gibt viele Robotik-Frameworks die spezifisch für präzise Anwendungen, für Prototypen, erstellt wurden. ROS strebt da eher das Allgemeine an, und wird auch von den Erfindern nicht als Allround-Lösung gedacht.

ROS wird von Willow Garage, einer kalifornischen Firma 2006er Jahrgang, entwickelt. Der Gründer, Scott Hassan, war einer der ersten Google Angestellten, er erarbeitete die Technologie des bekannten Suchmotors und ist verantwortlich für die Yahoo Groups (von eGroups die jetzt Yahoo Groups sind). Der Vorsitzende bei Willow Garage ist Steeve Cousin, ein Veteran IBM’sWillow Garage ist eine Privatfirma die enge Verbindung zu der Universität Standford hat. Beide sind in Palo Alto, Kalifornien fast Nachbarn.

logo von Willow Garage

Willow Garage präsentiert sich als ein Forschungslabor, Technologieinkubator für Eigen-Robotik mehr als profitorientiertes Unternehmen. (Anfangs zumindest)

Willow Garage stellt also die Software ROS her aber auch Roboter als solche, wie den PR2 und den Turtlebot. In beiden Fällen sind die Produkte Open-Source (BSD Lizenz). Der Hintergrundgedanke ist es, dass allmählich Roboter zu unserem Alltag gehören und dazu muss die Forschung angekurbelt werden. Das geht besser mit Open-Source Lösungen.

Es scheint, dass es Willow Garage mehr am Herzen liegt, die Roboter-Community auszubauen als Roboter selber. In einem Interview mit der Zeitschrift l’Expansion, sagte Scott Hassan, dass seine Ziele denen Irobots gleich seien, aber die jeweiligen Strategien sich unterscheiden.

Singularityhubs 4 gute Gründe an Willow Garages Erfolg zu glauben:

  • Der Wille Roboter-Forschung durch vereinfachte Lösungen zu beschleunigen.
  • Die weit ausreichenden Fonds
  • Die offenen Ohren der Welt der Forschung
  • Das kostenfreie Teilen der Technologie, ohne erst an Geld zu denken.

ROS : Grundsätze

ROS Philosophie in 5 Leitmotiven :

  • Peer to Peer
  • Mikrokernel
  • Sprachvielfallt
  • Leichtgewichtig
  • Kostenlos – Open-Source

Lasst uns die jeweiligen Punkte genauer anschauen

Peer to Peer : Komplexe Roboter bestehen aus mehreren Computern, embedded Karten mit Ethernet Kabeln verbunden, und manchmal externe PCs für die rechenleistungshungrigen Durchführungen. Eine Peer-to-Peer Architektur, verkuppelt mit einem Buffer- und einem Lookup-System (Nameservice, in ROS Master genannt) ermöglicht es jeder Einheit direkt mit einer anderen zu kommunizieren. Synchron oder asynchron, je nach Bedarf.

Sprachvielfallt : ROS ist sprachlich gesehen neutral und unterstützt somit Entwicklungen in verschiedensten Programmiersprache. ROS Spezifizität liegt in den Messages. Die Peer-to-Peer Verbindungen werden durch XML-RPC verarbeitet, welches in vielen Sprachen verfügbar ist. Um eine neue Programmiersprache zu unterstützen, kann man entweder die C++Klassen rewrappen (was zB für den Kunden Octave gemacht wurde) oder man schreibt die Klassen, die, die Messages erschaffen. Die Messages sind mit IDL (Interface Definition Language) beschrieben.

Mikrokernel: Mehr als ein monolithisches Runtime hat Ros ein Mikrokernel-Design angenommen. Dieser basiert auf mehreren kleinen Tools um Build und Run der verschiedenen ROS-Komponenten zu managen. Durch das folgen der Tutoriell zu ROS, lernt man schnell Messages und Knoten zu benutzen. Jeder Befehl ist ein isolierter Execute. Vorteil bei dieser Lösung ist, dass wenn ein Fehler bei einem exe auftritt, dieser nicht die anderen Ehegutes beeinflusst, anders als einem All-in-one Runtime.

Leichtgewichtig : Um gegen Algorithmen anzukommen die etwas abweichend von ROS sind (und somit schwer wiederverwendbar), will Willow Garage, dass Algorithmen und Driver unabhängig, in execute-File Form erstellt werden. Somit bleibt ROS an sich leichtgewichtig und Wiederverwendbarkeit wird erhöht. Das macht das ganze Anwenderfreundlich da Komplexität sich in den Libraries befindet. ROS benutzt auch Code aus anderen Open-Source Projekten:

  • Simulator Player/stage
  • Bildverarbeitung und Artificial-Vision mit OpenCV
  • Algorithmen-Planifikation mit OpenRave

Hier eine komplette Liste der verfügbaren Algorithmen: http://www.ros.org/wiki/StackList

Kostenlos und Open-Source: Wir haben die Gründe dieser Entscheidung bereits im Vorfeld erklärt. ROS Architektur ist mit diesem Aspekt kohärent. Einzelne Module sind nicht in einen einzigen Prozess eigebunden, was die Arbeit mit verschiedenen Lizenzen vereinfacht.

Die weiteren operating Systems für Roboter

Hier ein paar Beispiele von Soft- oder Middleware:

  • Microsoft Robotics Developper Studio : Multiplattform-System von Microsoft. Kostenlos und besitzt ein Simulations-Tool. Nur mit Windows kompatibel. Programmierung ist unter einer .NET verhaltenen Sprache (am besten mit C#).
  • NAOQi : Robotersystem für den NAO Roboter von Aldebaran Robotics. Programmierbar unter C++ oder Python. NAOQI ist Open-Source.
  • URBI : Von der französischen Firma Gostai, mit eigener Skriptsprache (URBIScript) und natürlich Open-Source. Auch programmierbar in C++. URBI ist Multi-Plattformfähig.

Es gibt zahlreiche embedded Systeme die auf spezifische Roboter ausgerichtet sind. Aber damit kämen wir aus dem Multi-Plattformrahmen.

ROS: Die Haupteigenschaften

Mit ROS programmieren

ROS ist nicht von einer spezifischen Sprache abhängig. Heutzutage gibt es 3 Grundlibraries für ROS, die jeweils auf Python, Lisp und C++ ausgerichtet sind. Zwei Exmperimentier-Librairies sind für Java und Lua erhältlich.

ROSJAVA und Android
Rosjava (http://code.google.com/p/rosjava/) unterscheidet sich von der hier oben besprochenen Java-Librairy. Es handelt sich dabei um eine komplette Implementation Javas in ROS, erschaffen und gepflegt von Google in Zusammenarbeit mit Willow Garage. Statt hier ein Client zu benutzen um durch Java ans C++ Herz von ROS zu gelangen, wurde das Herz komplett in Java umgeschrieben. Googles Ziel dabei ist es eine Version von ROS zu haben, die mit Android kompatibel ist. Rosjava ermöglicht es Roboter zu steuern dessen OS nicht Linux sondern Android ist. (Selbst wenn Android auf Linux-Basis ist).

Mit ROS kompatible Roboter

Die Liste der kompatiblen Modelle die unter ROS funktionieren wächst ständig. Für einen Einblick in die komplette Liste, besuchen Sie Willow Garages Website: http://www.ros.org/wiki/Robots

Darunter sind die bekanntesten: NAO, Lego Mindstorms NXT, IRobot Roomba, TurtleBot und letztendlich der berühmte PR2 von Willow Garage selbst.

Robot PR2 von Willow Garage

ROS-Datensystem

ROS-Ressourcen sind in rangmäßiger Gliederung eingeordnet. Zwei Konzepte sind zu verstehen:

  • Le package : Es handelt sich hier um die Zentraleinheit der Softwareorganisation von ROS. Ein Package ist ein Verzeichnis der die Knoten beinhaltet (wir werden hier unten erklären, was ein Knoten ist) sowie die externen Librairies, Daten und XML Konfigurationsdateien die manifest.xml genannt wird.
  • Stack : Stack bezeichnet eine Sammlung von Packagen. Sie ermöglicht mehrere Funktionen wie Navigation, Lokalisierung und viele mehr. Ein Stack beinhaltet mehrere Verzeichnisse sowie eine Konfigurationsdatei die stack.xml genannt wird.

Neben diesen beiden wichtigen Begriffen, muss man auch den Begriff « Distribution » integrieren. Eine Distribution ist, wie in Linux, eine Zusammenstellung mehrerer versionsbezogene Stacks.

Die letzte Distribution von ROS :

Distribution Electric ROS

ROS Grundkenntnisse

Das Grundprinzip eines Operating Systems für Roboter, ist es eine Vielzahl an Executes gleichzeitig laufen zu lassen und Informationen synchron oder asynchron auszutauschen. Zum Beispiel muss das Operating System muss mit genauer Frequenz die Sensoren des Roboters abfragen (Ultraschallsensor, Infrarotsensor, Drucksensor, Temperatursensor, Kreiselsensor, Beschleunigungssensor, Kameras, Mikrofone), an die Algorithmen (Sprachmanagement, Künstliche Bildverarbeitung, Lokalisation und Mapping) weitergeben die die Informationen verarbeiten (Datenfusion) und die Motoren letztendlich angemessen kontrollieren. Dieser komplette Prozess ist kontinuierlich und gleichzeitig gemanagte. Dazu muss das Robotik Operating-System Konkurrenzmanagement durchführen um den einfachen Zugriff zum Roboter und dessen Ressourcen weiter zu gewährleisten.

Die Informationen hier unten, sind auf die KONZEPTE BEZOGEN, DIE UNTER ROS ALS « ROS COMPUTTATION GRAPH » BEZEICHNET WERDEN. Nicht zu verwechseln mit dem « ROS File System », hier oben beschrieben, was statisch ist.

Die Knoten

ROS bearbeitet diese Problematik einfachst, dank einfachen Grundlagen. Die erste dieser Begriffe ist der „Knoten“.

In ROS ist ein Knoten eine Execute Instanz. Ein Knoten kann sich auf einen Sensor, ein Motor, ein Verarbeitungsalgorithmus oder Überwachsungsalgorithmus beziehen. Jeder dieser Knoten erklärt sich dem Master. Man findet hier die Bauweise der Mikrokernel wieder: jede Ressource ist ein unabhängiger Knoten.

Der Master

Master ist ein Deklaration- und Speicherservice der Knoten, der es auch den Knoten ermöglicht sich untereinander zu kennen. Der Master ist dank XMLRPC implementiert.

Der Master beinhaltet eine sehr angefragte sekundäre Funktion: das Parameter-Service. Auch durch XMLRPC implementiert, und wie der Name schon ahnen lässt handelt es sich um einer Art zentrales Inhaltsverzeichnis was den Knoten ermöglicht Data zu speichern und somit die allgemeinen Einstellungen zu teilen.

Die Topics

Der Informationsaustausch funktioniert asynchron durch Topics, und synchron durch Services.

Ein Topic ist eine Informationsbewegung, basierend auf einem Subscribe/Publish System. Ein oder mehrere Knoten können somit Informationen auf ein Topic posten, und ein oder mehrere Knoten können diese Information dann ablesen. Ein Topic ist sozusagen ein asynchroner Information-Bus, ähnlich wie ein RSS-Strang. Die Idee eines asynchronen Many-to-Many Bus ist bei einem Verteil-System obere Wichtigkeit.

Der Topic wird immer auf selbe weise erstellt, so dass die veröffentlichen Informationsarten immer gleich strukturiert bleiben. Knoten senden und empfangen Topic-Messages.

Messages

Eine Message ist eine Kompositdata-Struktur. Eine Message ist aus einer Kombination von Kernelementen (Kausalketten, Bolean, Integer) und einer Message gestaltet. (Die Message ist eine rekursive Struktur). Zum Beispiel : Ein Knoten der einem Servomotor angehört, veröffentlicht höchstwahrscheinlich sein Zustand auf einem Topic (je nach Programmierung) mit einer Message die eine Ganzzahl die die Position angibt, eine Floating für Temperatur und eine weitere Floating für die Geschwindigkeit.

Diese Beschreibung zu den Messages ist in nom_package/msg/monMessageType.msg gespeichert. Diese Datei bestimmt die Nachrichtstruktur.

 

Das Topic ist ein asynchroner Kommunikationsmodus der eine Many-to-Many Kommunikation ermöglicht. Service hingegen dient einem anderen Ziel: die synchrone Kommunikation zweier Knoten. Dieser Begriff kommt einem Remote Procedere Call nahe.

Die Beschreibung zu den existierenden Services ist unter package/srv/ServiceType.srv auffindbar. Diese Datei beschreibt die Struktur der Anfrage- und Antwortdaten.

Schematische Darstellung der grundlegenden Konzepte von ROS

Bags

« Bags » ist das Format was Nachrichten lagert und abspielt. Dieses System ermöglicht es zum Beispiel die Informationen der Servomotoren und Sensoren zu speichern und dann so oft man will abgespielt zu werden. Analysen können also auf echten Informationen beruhen oder auch Systeme im Nachhinein debuggt werden.

Das Tool rxbag ermöglicht es, die im Bag gespeicherten Nachrichten visuell zu begutachten.

URDF

ROS ermöglicht vieles mehr und besitzt vielseitige Funktionen die wir in einem nächsten Artikel ansprechen werden. Lasst uns dennoch einen weiteren Beitrag ROS zu der Roboter-Welt erläutern. Es handelt sich um das URDF (Unified Robot Description Format), ein XML Format was es ermöglicht standardisiert einen kompletten Roboter als Datei zu beschreiben.de beschriebene Roboter kann somit statisch oder dynamisch sein, Physisch- oder Kollisionseigenschaften mit integriert werden.

Über die Standard Funktionen hinaus, bietet ROS mehrere Tools die die Erstellung, das Parsen oder Bestätigung der Datei ermöglichen.

URDF ist zum Beispiel bei dem Gazebo Simulator im Einsatz, um den Roboter abzubilden.

ROS : eine Vielzahl an nutzreichen Tools

Wie bereits erwähnt ist ROS aus einer Vielzahl an Tools und Algorithmen zusammengestellt. So manche sind sehr nutzreich bei der Programmierung, Ausführung oder Simulation. Hier ein paar Beispiele der meistbenutzten dieser Tools unter ROS:

  • Stage : 2D-Simulator
  • Gazebo : 3D-Simulator
  • Rviz : 3D-Visualisierungssystem (anders als bei Gazebo, hier kein physischer Motor)
  • Tf-Package dient der Änderungs- und Koordinatenmanipulation beherrscht. (Falls es bei Ihnen schon mal vorgekommen ist, gegenseitige Bewegungslehre und Matrize handzuhaben, wird dieses Package Ihnen das Leben erleichtern!
  • OpenCV : Bildverarbeitung
  • PointCloudLibrary : Wiederherstellung von 3D-Umgebung durch Laser.

Standard API zu ROS gibt es unter: http://www.ros.org/wiki/APIs

Ausgiebige Liste der Packages (mehr als 2000 !)unter: http://www.ros.org/browse/list.php

Ressourcen

 

Génération Robots (http://www.generationRobots.com)

Alle Rechte vorenthalten. Kopie und Benutzung unterliegt voriger Erlaubnis durch Generation Robot