Kapitel 1. Einführung
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Das Robot Operating System (ROS) ist ein Framework zum Schreiben von Robotersoftware. Es ist eine Sammlung von Werkzeugen, Bibliotheken und Konventionen, die die Entwicklung von komplexem und robustem Roboterverhalten für eine Vielzahl von Roboterplattformen vereinfachen sollen.
Warum? Weil es schwierig ist, wirklich robuste, universell einsetzbare Robotersoftware zu entwickeln. Aus der Sicht des Roboters können viele Probleme, die dem Menschen trivial erscheinen, in Wirklichkeit wilde Variationen zwischen den einzelnen Aufgaben und Umgebungen beinhalten.
Nehmen wir eine einfache Aufgabe, bei der ein Büroassistenzroboter angewiesen wird, einen Hefter zu holen. Zuerst muss der Roboter die Anfrage verstehen, entweder mündlich oder über eine andere Modalität, wie z. B. ein Webinterface, eine E-Mail oder sogar eine SMS. Dann muss der Roboter eine Art Planer starten, um die Suche nach dem Gegenstand zu koordinieren. Dazu muss er wahrscheinlich durch verschiedene Räume in einem Gebäude navigieren, vielleicht auch durch Aufzüge und Türen. In einem Raum angekommen, muss der Roboter die Schreibtische durchsuchen, die mit ähnlich großen Gegenständen vollgestopft sind (da alle tragbaren Gegenstände ungefähr gleich groß sind) und einen Hefter finden. Der Roboter muss dann seine Schritte zurückverfolgen und den Hefter an den gewünschten Ort bringen. Jedes dieser Teilprobleme kann eine beliebige Anzahl von komplizierten Faktoren haben. Und das war eine relativ einfache Aufgabe!
Der Umgang mit realen Variationen komplexer Aufgaben und Umgebungen ist so schwierig, dass keine Einzelperson, kein Labor und keine Institution hoffen kann, ein komplettes System von Grund auf zu entwickeln. Deshalb wurde ROS von Grund auf so konzipiert, dass es die gemeinschaftliche Entwicklung von Robotiksoftware fördert. Bei der Aufgabe "Hol einen Hefter" könnte zum Beispiel eine Organisation Experten für die Kartierung von Innenräumen haben und ein komplexes, aber einfach zu bedienendes System für die Erstellung von Innenraumkarten beisteuern. Eine andere Gruppe hat vielleicht Erfahrung mit der Verwendung von Karten, um sich in Innenräumen zurechtzufinden. Wieder eine andere Gruppe hat vielleicht einen speziellen Computer-Vision-Ansatz entdeckt, mit dem sich kleine Objekte im Durcheinander gut erkennen lassen. ROS enthält viele Funktionen, die speziell dafür entwickelt wurden, diese Art der Zusammenarbeit in großem Maßstab zu vereinfachen.
Kurze Geschichte
ROS ist ein großes Projekt, das viele Vorfahren und Mitwirkende hat. Viele Menschen in der Robotik-Forschungsgemeinschaft sahen die Notwendigkeit eines offenen Rahmens für die Zusammenarbeit. Verschiedene Projekte an der Stanford University, die sich Mitte der 2000er Jahre mit integrativer, verkörperter KI beschäftigten, wie z. B. der STanford AI Robot (STAIR) und das Personal Robots (PR) Programm, schufen interne Prototypen der in diesem Buch beschriebenen flexiblen, dynamischen Softwaresysteme. Im Jahr 2007 stellte Willow Garage, Inc., ein Robotik-Inkubator in der Nähe, beträchtliche Ressourcen zur Verfügung, um diese Konzepte weiter auszubauen und gut getestete Implementierungen zu schaffen. Die Bemühungen wurden von zahllosen Forscherinnen und Forschern unterstützt, die ihre Zeit und ihr Fachwissen zum Kern von ROS und seinen grundlegenden Softwarepaketen beisteuerten. Die Software wurde durchgängig unter der freizügigen BSD-Open-Source-Lizenz entwickelt und fand nach und nach weite Verbreitung in der Robotik-Forschungsgemeinschaft.
Von Anfang an wurde ROS an verschiedenen Institutionen und für verschiedene Roboter entwickelt. Anfangs schien das Kopfzerbrechen zu bereiten, denn es wäre viel einfacher gewesen, wenn alle Mitwirkenden ihren Code auf denselben Servern abgelegt hätten. Ironischerweise hat sich dies im Laufe der Jahre als eine der großen Stärken des ROS-Ökosystems herausgestellt: Jede Gruppe kann ihr eigenes ROS-Code-Repository auf ihren eigenen Servern anlegen und behält die volle Kontrolle darüber. Sie brauchen keine Erlaubnis von irgendjemandem. Wenn sie sich dafür entscheiden, ihr Repository öffentlich sichtbar zu machen, erhalten sie die Anerkennung und den Kredit, den sie für ihre Leistungen verdienen, und können wie alle Open-Source-Softwareprojekte von spezifischem technischen Feedback und Verbesserungen profitieren.
Das ROS-Ökosystem besteht mittlerweile aus Zehntausenden von Nutzern auf der ganzen Welt, diein verschiedenen Bereichen arbeiten - von Tabletop-Hobbyprojekten bis hin zu großen industriellenAutomatisierungssystemen.
Philosophie
Alle Software-Frameworks geben ihre Entwicklungsphilosophie direkt oder indirekt über ihre Idiome und gemeinsamen Praktiken an ihre Mitwirkenden weiter. Im Großen und Ganzen folgt ROS in einigen wichtigen Aspekten der Unix-Philosophie der Softwareentwicklung. Dadurch fühlt sich ROS für Entwickler/innen, die einen Unix-Hintergrund haben, "natürlich" an, während es für diejenigen, die hauptsächlich grafische Entwicklungsumgebungen unter Windows oder Mac OS X verwendet haben, zunächst etwas "kryptisch" wirkt. In den folgenden Abschnitten werden einige philosophische Aspekte von ROS beschrieben:
- Peer-to-Peer
-
ROS-Systeme bestehen aus zahlreichen kleinen Computerprogrammen, die miteinander verbunden sind und ständig Nachrichten austauschen. Diese Nachrichten werden direkt von einem Programm zum anderen weitergeleitet; es gibt keinen zentralen Routing-Dienst. Das macht die zugrundeliegenden Systeme zwar komplexer, aber das Ergebnis ist ein System, das besser skaliert, wenn die Datenmenge zunimmt.
- Tools-basierte
-
Wie die dauerhafte Architektur von Unix zeigt, können komplexe Softwaresysteme aus vielen kleinen, generischen Programmen erstellt werden. Im Gegensatz zu vielen anderen Software-Frameworks für die Robotik verfügt ROS nicht über eine einheitliche integrierte Entwicklungs- und Laufzeitumgebung. Aufgaben wie das Navigieren im Quellcode-Baum, die Visualisierung der Systemzusammenhänge, die grafische Darstellung von Datenströmen, die Erstellung von Dokumentationen, die Protokollierung von Daten usw. werden von separaten Programmen ausgeführt. Dies fördert die Entwicklung neuer, verbesserter Implementierungen, da sie (im Idealfall) gegen Implementierungen ausgetauscht werden können, die für einen bestimmten Aufgabenbereich besser geeignet sind. In neueren Versionen von ROS lassen sich viele dieser Werkzeuge aus Effizienzgründen zu einzelnen Prozessen zusammenfassen oder kohärente Schnittstellen für Bediener oder Debugging schaffen, aber das Prinzip bleibt dasselbe: Die einzelnen Werkzeuge selbst sind relativ klein und generisch.
- Mehrsprachig
-
Viele Softwareaufgaben lassen sich in "hochproduktiven" Skriptsprachen wie Python oder Ruby leichter bewältigen. Es gibt jedoch Fälle, in denen Leistungsanforderungen den Einsatz schnellerer Sprachen wie C++ erfordern. Es gibt auch verschiedene Gründe, warum manche Programmierer/innen Sprachen wie Lisp oder MATLAB bevorzugen. Endlose E-Mail-Flamewars wurden, werden und werden zweifellos auch in Zukunft darüber geführt, welche Sprache für eine bestimmte Aufgabe am besten geeignet ist. ROS hat sich für einen mehrsprachigen Ansatz entschieden, da alle diese Meinungen ihre Berechtigung haben, Sprachen in verschiedenen Kontexten unterschiedlich nützlich sind und der individuelle Hintergrund eines jeden Programmierers bei der Wahl einer Sprache von großer Bedeutung ist. ROS-Softwaremodule können in jeder Sprache geschrieben werden, für die es eine Client-Bibliothek gibt. Zum Zeitpunkt der Erstellung dieses Artikels gibt es Client-Bibliotheken für C++, Python, LISP, Java, JavaScript, MATLAB, Ruby, Haskell, R, Julia und andere. ROS-Client-Bibliotheken kommunizieren miteinander, indem sie einer Konvention folgen, die beschreibt, wie Nachrichten "geflattet" oder "serialisiert" werden, bevor sie über das Netzwerk übertragen werden. In diesem Buch wird fast ausschließlich die Python-Client-Bibliothek verwendet, um Platz in den Code-Beispielen zu sparen und weil sie generell sehr einfach zu bedienen ist. Die in diesem Buch beschriebenen Aufgaben können jedoch mit jeder der Client-Bibliotheken erledigt werden.
- Dünn
-
Die ROS-Konventionen ermutigen die Mitwirkenden, eigenständige Bibliotheken zu erstellen und diese dann so zu verpacken, dass sie Nachrichten an andere ROS-Module senden und von ihnen empfangen können. Diese zusätzliche Schicht soll die Wiederverwendung von Software außerhalb von ROS für andere Anwendungen ermöglichen und vereinfacht die Erstellung von automatisierten Tests mit Standardwerkzeugen für die kontinuierliche Integration erheblich.
- Frei und quelloffen
-
Der Kern von ROS wird unter der BSD-Lizenz veröffentlicht, die eine kommerzielle und nicht-kommerzielle Nutzung erlaubt. ROS überträgt Daten zwischen Modulen über Interprozesskommunikation (IPC), was bedeutet, dass Systeme, die mit ROS gebaut wurden, eine fein abgestufte Lizenzierung ihrer verschiedenen Komponenten haben können. Kommerzielle Systeme haben zum Beispiel oft mehrere Closed-Source-Module, die mit einer großen Anzahl von Open-Source-Modulen kommunizieren. Akademische und Hobby-Projekte sind oft vollständig quelloffen. Die kommerzielle Produktentwicklung findet oft vollständig hinter einer Firewall statt. All diese Anwendungsfälle und noch mehr sind üblich und unter der ROS-Lizenz absolut zulässig.
Installation
Obwohl ROS für eine Vielzahl von Systemen entwickelt wurde, werden wir in diesem Buch Ubuntu Linux verwenden, eine beliebte und relativ benutzerfreundliche Linux-Distribution. Ubuntu bietet ein benutzerfreundliches Installationsprogramm, mit dem Computer zwischen dem Betriebssystem, mit dem sie ausgeliefert wurden (normalerweise Windows oder Mac OS X) und Ubuntu selbst dual-booten können. Trotzdem ist es wichtig, dass du vor der Installation von Ubuntu eine Sicherungskopie deines Computers erstellst, für den Fall, dass etwas Unerwartetes passiert und die Festplatte dabei komplett gelöscht wird.
Es gibt zwar Virtualisierungsumgebungen wie VirtualBox und VMware, in denen Linux gleichzeitig mit einem Host-Betriebssystem wie Windows oder Mac OS X ausgeführt werden kann, aber der in diesem Buch verwendete Simulator ist ziemlich rechen- und grafikintensiv und könnte in einer virtualisierten Umgebung zu langsam sein. Wir empfehlen daher, Ubuntu Linux nativ auszuführen, indem du den Anweisungen auf der Ubuntu-Website folgst.
Ubuntu Linux kann kostenlos von http://ubuntu.com heruntergeladen werden . Der Rest dieses Buches geht davon aus, dass ROS auf Ubuntu 14.04 LTS, auch bekannt als Ubuntu Trusty Tahr, läuft und die ROS Indigo Distribution verwendet wird.
Die ROS-Installationsschritte erfordern einige Shell-Befehle, die du sorgfältig eintippen musst. Diese können entweder von Hand in den folgenden Block kopiert werden (beachte, dass der erste Befehl auf mehrere Zeilen aufgeteilt wurde, damit er in die Seitenränder passt; du kannst ihn in einer einzigen Zeile ohne die Backslashes eingeben) oder aus dem ROS-Wiki kopiert und eingefügt werden. Die folgenden Befehle fügen ros.org zur Liste der Softwarequellen des Systems hinzu, laden die ROS-Pakete herunter und installieren sie und richten die Umgebung und die ROS-Build-Tools ein:
user@hostname$ sudo sh -c \ 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > \ /etc/apt/sources.list.d/ros-latest.list' user@hostname$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add - user@hostname$ sudo apt-get update user@hostname$ sudo apt-get install ros-indigo-desktop-full python-rosinstall user@hostname$ sudo rosdep init user@hostname$ rosdep update user@hostname$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc user@hostname$ source ~/.bashrc
Das scheint ein ganz schöner Block an Shell-Befehlen zu sein! Einige davon sind in der Tat etwas ungewöhnlich, aber andere werden bei der Verwendung von ROS und anderen großen Softwarepaketen auf Ubuntu-Systemen häufig verwendet. Insbesondere der Befehl apt-get
ist ein häufig verwendeter Befehl auf Ubuntu-Linux-Distributionen (neben anderen) und wird im Laufe des Buches häufig verwendet, um zusätzliche Softwarepakete zu installieren. Dieser Befehl installiert die gewünschten Softwarepakete, die du in der Befehlszeile angibst, sowie deren Abhängigkeiten, die Abhängigkeiten ihrer Abhängigkeiten und so weiter. Wenn du lieber eine grafische Anwendung zur Installation und Verwaltung deiner Ubuntu-Paketdateien verwenden möchtest, kannst du synaptic
installieren. Es kann natürlich sein, dass du das über die Kommandozeile machen musst:
user@hostname$ sudo apt-get install synaptic
Die letzten beiden Zeilen der Installationssequenz fügen das Setup-Skript für die ROS-Umgebung, setup.bash, zu den aktuellen und zukünftigen Shells auf diesem System hinzu. Das bedeutet, dass die von ROS bereitgestellten Befehle und Shell-Skripte, wie z. B. die vielen in den folgenden Kapiteln beschriebenen Kommandozeilen-Tools, nun für die Shell-Interpreter auf diesem System zugänglich sind. Ohne diese beiden Zeilen müssten die Benutzer die Datei /opt/ros/indigo/setup.bash für jede Befehlsshell, die sie öffnen, manuell aufrufen. Durch das Hinzufügen der Datei ROS setup.bash zur ~/.bashrc des Benutzers wird sichergestellt, dass dieser Schritt für alle zukünftigen Befehlsshells automatisch erfolgt.
Im Laufe des Buches werden wir verschiedene Betriebssystemfunktionen als "POSIX" bezeichnen, z. B. "POSIX-Prozesse", "POSIX-Umgebungsvariablen" und so weiter. Dies soll darauf hinweisen, dass ein Großteil von ROS mit Blick auf die Portabilität zwischen POSIX-kompatiblen Systemen wie Linux oder Mac OS X geschrieben wurde. In diesem Buch werden wir uns jedoch speziell auf Ubuntu Linux konzentrieren, da es eine beliebte Linux-Distribution für den Desktop ist und die ROS-Build-Farm einfach zu installierende Binärdateien für Ubuntu produziert.
Zusammenfassung
Dieses Kapitel bietet einen Überblick über ROS und seine philosophischen Grundgedanken. ROS ist ein Rahmenwerk für die Entwicklung von Robotersoftware, das aus einer Vielzahl kleiner Programme besteht, die sich gegenseitig schnell Nachrichten übermitteln. Dieses Paradigma wurde gewählt, um die Wiederverwendung von Robotersoftware außerhalb des speziellen Roboters und der Umgebung, in der sie entwickelt wurde, zu fördern. Diese lose gekoppelte Struktur ermöglicht die Erstellung von generischen Modulen, die für eine breite Palette von Roboterhardware und Softwarepipelines geeignet sind und die gemeinsame Nutzung und Wiederverwendung von Code in der globalen Robotikgemeinschaft erleichtern.
Get Programmierung von Robotern mit ROS now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.