ROS hat drei Konzeptschichten:
- Dateisystem
- Computation Graph
- Community
Diese sind folgend zusammengefasst und werden in weiteren Kapiteln im Detail erläutert.
Zusätzlich zu den Konzeptschichten werden einerseits Package Resource Names und Graph Resource Names definiert (siehe Namen).
ROS Dateisystem
ROS Ressourcen auf der Harddisk:
Packages: Pakete sind die hauptsächliche Art der Softwareorganisation in ROS. Ein Paket kann folgende Elemente enthalten:
Laufzeitprozesse (Nodes)
- Von ROS abhängige Bibliotheken
- Datensätze
- Konfigurationsdateien
- Alles was sonst noch zu diesem Kontext gehört
Manifests: Das Manifest (manifest.xml) enthält Metadaten über das Paket. Dazu gehören Lizenzinformationen und Abhängigkeiten sowie sprachspezifische Einstellungen wie Compilerflags.
Stacks: Stacks sind eine Sammlung von Paketen, welche zusammen eine Funktionalität bereitstellen (z.B. der navigation stack). Zudem wird ROS Software in Form von Stacks ausgeliefert und versioniert.
Stack Manifests: Das Stack Manifest (stack.xml) enthält Metadaten zum Stack. Dazu gehören Lizenzinformationen sowie Abhängigkeiten zu anderen Stacks.
msg (Message types): Die Datenstruktur von messages ist in <package_name>/msg/<message_type>.msg abgelegt.
srv (Service types): Anfrage- und Antwortdatenstrukturen für services sind unter <package_name>/srv/<service_type>.srv zu finden.
ROS Computation Graph
Der Computation Graph ist ein Peer-to-Peer Netzwerk von ROS Prozessen, welche gemeinsam eine Aufgabe erfüllen. Der Graph bezieht seine Daten aus folgenden Komponenten (ros_comm stack):
Nodes: Knoten sind Prozesse, welche Berechnungen durchführen. ROS ist modular ausgelegt, deshalb arbeiten in einem Robotersystem normalerweise viele Knoten zusammen. Ein Knoten setzt auf einer ROS client library wie roscpp oder rospy auf. Knoten kommunizieren direkt untereinander, die Verbindungsinformationen erhalten sie vom Master. Das Standardkommunikationsprotokoll ist TCPROS.
Master: Über den ROS Master können Namen registriert oder nachgeschlagen werden. Ohne den Master wären die Knoten nicht in der Lage zu kommunizieren.
Parameter Server: Der Parameterserver ist Teil des Masters und speichert Daten zu einem Schlüssel an zentraler Stelle.
Messages: Knoten kommunizieren über Nachrichten (messages). Eine Nachricht ist eine Datenstruktur mit typisierten Feldern. Standard Datentypen (Integer, Float, Boolean) und Arrays derselben werden unterstützt. Nachrichten können beliebig verschachtelte Strukturen enthalten.
Topics: Nachrichten werden über einen Publisher-Subscriber Mechanismus verteilt. Ein Knoten veröffentlicht Nachrichten zu einem Thema (publish to a topic) identifiziert über einen Namen. Ein anderer Knoten, welcher an diesen Nachrichten interessiert ist, abonniert das Thema (subscribe). Es können mehrere Knoten gleichzeitig als Publisher und Subscriber fungieren und ein Knoten kann mehrere Themen veröffentlichen oder abonnieren. Allgemein gesagt wissen Publisher und Subscriber nichts von einander. So werden Erzeugung und Konsum von Informationen entkoppelt.
Services: Der Publisher-Subscriber Mechanismus erlaubt eine flexible, einseitige n-zu-n Kommunikation. Diese ist jedoch für eine Anfrage-Antwort Interaktion zwischen den Knoten nicht geeignet. Für diese Art der Kommunikation bietet ein Knoten einen Service an, identifiziert durch einen Namen. Der aufrufende Knoten sendet eine Anfrage und wartet auf die Antwort.
Bags: Bags sind zur Ablage und Wiedergabe von ROS messages. Mit Bags können z.B. Sensordaten aufgezeichnet werden, welche für die Entwicklung nötig sind, aber nur mit grossem Aufwand aufgezeichnet werden können.
Namen haben eine wichtige Funktion im Computation Graph. Nodes, Topics, Services und Parameter verfügen alle über einen Namen. Damit die Komponenten auch in anderen Laufzeitumgebungen funktionieren, können Namen über die ROS client library während der Laufzeit neu zugeordnet werden.
ROS Community
Das Communitykonzept ermöglicht verschiedenen Gemeinschaften Software und Wissen auszutauschen. Dafür bestehen folgende Ressourcen:
Distributions: Eine ROS Distribution ist eine installierbare Sammlung von versionierten stacks. Distributionen erleichtern die Installation der Software und erhalten konsistente Versionen über eine Menge von Software.
Repositories: ROS stützt auf ein verteiltes Netzwerk von Code repositories, welche verschiedenen Institutionen ermöglichen ihre eigenen Roboterkomponenten zu entwickeln und auszuliefern.
The ROS Wiki: Das ROS Wiki ist die zentrale Stelle für Dokumentation rund um ROS. Jedermann kann sich anmelden und seine eigene Dokumentation, Korrekturen, Tutorials und andere Informationen beitragen.
Bug Ticket System: Mit dem Ticket System können Fehler an zentraler Stelle verwaltet und von der Community verarbeitet werden.
Mailing Lists: Die ROS Users Mailing Liste ist der primäre Kommunikationskanal für Updates zu ROS.
ROS Answers: Über ein Portal können Fragen und Antworten zu ROS der Community zur Verfügung gestellt werden.
Blog: Der Willow Garage Blog stellt regelmässig Updates, Fotos und Videos bereit.