Robotik hat sich zu einem dynamischen und zugänglichen Bereich entwickelt, und das Robot Operating System (ROS) zeichnet sich als ein wesentliches Toolkit für Entwickler und Enthusiasten aus. ROS bietet ein flexibles und verteiltes Framework für das Schreiben von Robotersoftware, das es Ihnen ermöglicht, komplexe Verhaltensweisen zu entwickeln, verschiedene Hardwarekomponenten zu integrieren und Code über Projekte hinweg wiederzuverwenden. Ob Sie ein Student, Hobbyist oder professioneller Ingenieur sind, das Verständnis von ROS ermöglicht die Fähigkeit, anspruchsvolle Robotersysteme mit weniger Overhead und mehr Fokus auf High-Level-Logik zu erstellen. Dieser Leitfaden stellt ROS von Grund auf vor, deckt seine Kernideen, praktischen Setup-Schritte und Wege, um Ihre Expertise zu vertiefen.

Was ist ROS?

ROS ist ein Open-Source-Meta-Betriebssystem, das speziell für die Entwicklung von Robotersoftware entwickelt wurde. Es ist kein Echtzeit-Betriebssystem wie FreeRTOS oder eine vollwertige Plattform wie Android, sondern es befindet sich zwischen dem Betriebssystem und Ihrem Anwendungscode und bietet Dienste, die Sie von einem Betriebssystem erwarten würden, wie Hardware-Abstraktion, Low-Level-Gerätesteuerung, Interprozesskommunikation und Paketmanagement. Das Projekt wurde ursprünglich 2007 vom Artificial Intelligence Laboratory der Stanford University entwickelt und später von Willow Garage übernommen, einem Inkubator für Robotik-Innovation. Seitdem ist ROS dank seiner modularen Architektur, umfangreichen Community-Beiträgen und der Unterstützung einer Vielzahl von Sensoren, Aktoren und Algorithmen zum De-facto-Standard für Forschung und Prototyping in der Robotik geworden.

Zu den Hauptmerkmalen von ROS gehören:

  • Peer-to-Peer-Kommunikation Knoten (individuelle Prozesse) kommunizieren mit einem Publish/Abonnieren und Request/Response-Modell, was dezentrale und skalierbare Architekturen ermöglicht.
  • Toolbasiertes Ökosystem Eine reichhaltige Sammlung von Befehlszeilen-Tools wie , und für Introspektion, Debugging und Visualisierung.
  • Sprachliche Unabhängigkeit ROS unterstützt mehrere Programmiersprachen, hauptsächlich C++ und Python, aber auch Java, Lisp und andere, über sprachunabhängige Nachrichtendefinitionen.
  • Leichtgewichtig und modular Das gesamte System basiert auf kleinen, fokussierten ausführbaren Dateien, die individuell entwickelt, getestet und über verschiedene Roboter hinweg wiederverwendet werden können.
  • Paketbasierte Organisation Code ist in Paketen organisiert, die Knoten, Bibliotheken, Konfigurationsdateien und Dokumentation bündeln, wodurch das Teilen und die Zusammenarbeit einfach werden.

Es gibt zwei Hauptversionen: ROS 1 (die klassische Version mit Distributionen wie Noetic Ninjemys) und ROS 2 (eine neu gestaltete Version, die Echtzeitbeschränkungen, Sicherheit und Multi-Plattform-Unterstützung berücksichtigt). Für Anfänger ist das Starten mit ROS 1 aufgrund der reichlich vorhandenen Ressourcen immer noch üblich, aber ROS 2 ist die Zukunft und es lohnt sich, sie zu lernen, sobald die Grundlagen klar sind.

Kernkonzepte von ROS

Um ROS-Programme effektiv zu schreiben, müssen Sie einige grundlegende Abstraktionen verinnerlichen, die das Rückgrat der Kommunikation bilden und definieren, wie Roboter wahrnehmen und handeln.

Knotenpunkte

A Knoten In einem typischen Robotersystem können Sie einen Knoten haben, der die Kamerabildverarbeitung verarbeitet, einen anderen, der den Roboterarm steuert und einen dritten, Odometriedaten veröffentlichen. Knoten sind unabhängig und kommunizieren miteinander durch Themen, Dienste oder Aktionen. Jeder Knoten wird separat kompiliert und ausgeführt, so dass das System auf mehrere Maschinen und Prozessoren verteilt werden kann. Knoten können in jeder unterstützten Sprache geschrieben werden und sind typischerweise in einem Paket definiert.

Themen

Themen werden als Busse bezeichnet, über die Knoten austauschen Nachrichten. Das Publisher/Abonnent-Muster wird verwendet: ein Knoten, der Daten senden möchte (z. B. Laser-Scan-Messungen), veröffentlicht zu einem Thema wie , während Knoten, die diese Daten benötigen, das gleiche Thema abonnieren. Themen sind asynchron und viele-zu-viele, was bedeutet, dass mehrere Publisher und Abonnenten koexistieren können. Nachrichten haben eine vordefinierte Struktur, die in Dateien definiert ist, die in sprachspezifischem Code zusammengefasst werden. Das Verständnis des Themensystems ist entscheidend für die Gestaltung modularer Robotikanwendungen.

Nachrichten

Nachrichten sind die Datenstrukturen, die über Themen hinweg gesendet werden. ROS definiert Standardnachrichtentypen für gemeinsame Daten (z. B. , , ), aber Sie können auch benutzerdefinierte Nachrichtentypen für Ihre Anwendung erstellen. Eine Nachricht enthält typisierte Felder wie Ganzzahlen, Floats, Arrays und verschachtelte Nachrichten. Die Sprache zur Nachrichtendefinition ist einfach und dennoch ausdrucksvoll, sodass Sie komplexe Sensordaten oder Befehlsstrukturen modellieren können.

Dienstleistungen

Während Themen Einweg-Streaming bieten, ermöglichen Dienste synchrone Anfrage-Antwort-Interaktionen. Ein Dienst wird durch ein Paar von Nachrichtenstrukturen definiert: eine für die Anfrage und eine für die Antwort. Zum Beispiel könnte ein Knoten einen -Dienst anbieten, der beim Aufruf die aktuelle Gebühr zurückgibt. Dienste sind nützlich für Aufgaben, die sofortiges Feedback erfordern, wie das Festlegen eines Parameters oder das Auslösen einer One-Shot-Aktion. Sie werden üblicherweise für Konfigurationen oder für Operationen verwendet, die eine Bestätigung benötigen.

Master und Parameter Server

Die ROS-Master Es ist eine zentrale Registrierung, die es Knoten ermöglicht, sich zu finden und miteinander zu verbinden. Es verwaltet Informationen über verfügbare Themen, Dienste und Parameter. Parameterserver ist Teil des Masters und speichert Konfigurationswerte (wie Roboterdimensionen oder PID-Verstärkungen), auf die jeder Knoten zur Laufzeit zugreifen kann. Parameter sind global und können dynamisch aktualisiert werden, wodurch sie ein flexibler Weg sind, um das Verhalten von Robotern ohne erneute Code-Kompilierung zu optimieren.

Beutel

Eine Tasche ist ein Dateiformat, das zum Aufzeichnen und Abspielen von ROS-Nachrichtendaten verwendet wird. Während der Entwicklung können Sie Sensordaten von einem echten Roboter in eine -Datei aufnehmen und später wiedergeben, als ob der Roboter wieder läuft. Dies ist von unschätzbarem Wert für das Debuggen, das Tuning von Algorithmen und Offline-Tests, ohne dass der physische Roboter benötigt wird. Rosbag unterstützt auch Filtern und Konvertieren, was es zu einem Schlüsselwerkzeug für datengesteuerte Robotik macht.

Aktionen

Aktionen erweitern das Servicemodell für länger laufende Aufgaben, die periodisches Feedback benötigen. Zum Beispiel kann das Bewegen eines Roboterarms an eine Zielposition mehrere Sekunden dauern und Sie möchten Zwischenzustandsaktualisierungen. Aktionen verwenden ein Ziel-, Feedback- und Ergebnisprotokoll, mit dem Sie den Fortschritt abbrechen oder überwachen können. Die -Bibliothek bietet die Implementierung und wird häufig in Navigations- und Manipulationsstacks verwendet.

ROS 1 vs. ROS 2: Welches soll man wählen?

ROS 1 (die klassische Version) ist seit über einem Jahrzehnt das Rückgrat der Robotikforschung. Seine letzte offizielle Distribution ist Noetic Ninjemys, die bis 2025 unterstützt wird. ROS 2 wurde eingeführt, um Einschränkungen in der Echtzeit-Performance, Sicherheit und Multi-Plattform-Unterstützung zu beheben. Basierend auf DDS (Data Distribution Service) bietet ROS 2 eine bessere Unterstützung für Multi-Roboter-Systeme, eingebettete Geräte und Produktionsumgebungen. Für Anfänger ist es oft einfacher, mit ROS 1 zu beginnen, weil es eine große Menge an Tutorials und Community-Paketen gibt.

Wenn Sie jedoch ein neues Projekt erstellen oder mit moderner Hardware arbeiten wollen, ist ROS 2 der empfohlene Weg. Viele Ressourcen decken jetzt beide ab, und die Kernkonzepte werden direkt übertragen.

Erste Schritte mit ROS

Der erste praktische Schritt ist die Installation von ROS auf Ihrem Computer. Während ROS macOS, Windows und verschiedene Linux-Distributionen unterstützt, ist die empfohlene Plattform für Anfänger die folgende: Ubuntu Linux (20.04 für ROS Noetic, die letzte ROS 1-Distribution). Der Installationsprozess beinhaltet in der Regel das Einrichten Ihrer Quellen, das Hinzufügen des ROS-Repository-Schlüssels und das Ausführen eines Befehls wie:

Hier wird die komplette Desktop-Suite installiert, einschließlich Kernbibliotheken, Tools und Visualisierungssoftware wie RViz und Gazebo. Nach der Installation müssen Sie das ROS-Umgebungsskript ausfüllen (fügen Sie es zu hinzu), um die Befehlszeilenwerkzeuge zu verwenden:

Wählen Sie für ROS 2 eine Distribution wie Humble Hawksbill (Ubuntu 22.04) und folgen Sie der offiziellen Installationsanleitung.

Erstellen eines Workspace

ROS organisiert Code in eine Catkin Workspace (für ROS 1) oder Colcon Workspace (für ROS 2). Ein Arbeitsbereich ist ein Verzeichnis, in dem Sie Ihre Pakete erstellen und ausführen.

  1. Erstellen Sie einen Ordner:
  2. Navigieren Sie zum Workspace root und führen Sie aus.
  3. Quelle der Setup-Datei:

Verwenden Sie stattdessen für ROS 2. Workspaces ermöglichen es Ihnen, mehrere Pakete zu organisieren und Abhängigkeiten einfach zu verwalten.

Grundlegende ROS-Befehle

Sobald ROS installiert ist, können Sie mit dem System interagieren, indem Sie diese wesentlichen Befehle verwenden:

  • Weißer Thun Startet den ROS-Master, den Parameterserver und einen Protokollierungsknoten. Muss vor jedem anderen ROS-Knoten ausgeführt werden.
  • rosrun <package> <node> Führt einen einzelnen Knoten aus einem bestimmten Paket aus. z.B. startet einen einfachen Schildkrötensimulator, der sich hervorragend zum Lernen eignet.
  • roslaunch <package> <launchfile> – Startet mehrere Knoten und deren Konfigurationen, wie in einer Startdatei definiert. Startdateien vereinfachen komplexe Setups.
  • Rostopische Liste - Listet alle aktiven Themen auf.
  • rostopisches Echo <topic> Druckt Nachrichten, die zu einem Thema veröffentlicht werden.
  • rostopic Pub <topic> <msg type> <data> Veröffentlicht eine Nachricht an ein Thema direkt aus der Kommandozeile.
  • rosservice-Liste - Listen verfügbare Dienste auf.
  • rosservice call <service> <args> Ruft einen Dienst an.
  • Rosnode-Infos, Rosnode-Liste Erhalten Sie Informationen über laufende Knoten.

Diese Befehle geben Ihnen eine leistungsstarke Möglichkeit, Ihr Robotersystem zu inspizieren, zu diagnostizieren und zu steuern, ohne Code zu schreiben.

Erstellen einer einfachen Roboteranwendung

Um Ihr Verständnis zu verfestigen, erstellen Sie ein minimales Publisher/Abonnent-Paar. Dieses Beispiel besteht aus zwei Knoten: einer, der jede Sekunde eine Gegennachricht veröffentlicht (Talker) und ein anderer, der die Nachricht druckt (Listener).

Erstellen Sie zunächst ein neues Paket mit dem Namen in Ihrem Arbeitsbereich Ordner:

Schreibe im Paket ein Python-Skript :

Dann der Zuhörer (FLT:25)

Machen Sie beide Skripte ausführbar () und bauen Sie dann den Arbeitsbereich mit auf. Schließlich feuern Sie in einem Terminal, führen Sie in einem anderen und in einem dritten aus. Sie sehen die Nachrichten des Sprechers, die vom Zuhörer gedruckt werden. Diese einfache Kommunikation demonstriert den Kern-Publish/-Abonnement-Mechanismus, der weitaus komplexere Roboter-Interaktionen ermöglicht.

Wesentliche Werkzeuge für die ROS-Entwicklung

ROS bietet mehrere grafische Tools, die die Entwicklung und das Debuggen dramatisch beschleunigen:

  • RViz - Ein 3D-Visualisierungs-Tool zur Anzeige von Sensordaten, Robotermodellen und Navigationsinformationen. Sie können Laserscans, Punktwolken, Kamerabilder und Bäume anzeigen. Es ist unerlässlich, um zu verstehen, was Ihr Roboter wahrnimmt.
  • rqt - Ein Qt-basiertes Framework für die GUI-Entwicklung, das Plugins wie (visualisiert Knoten-/Themenverbindungen), (zeichnet Daten im Laufe der Zeit auf) und (Log Message Viewer) anbietet.
  • Rossbag Befehlszeilen-Tool zum Aufzeichnen und Abspielen von Taschendateien. Verwenden Sie , um alle Themen zu erfassen, dann , um sie wiederzugeben. Dies ist ein Eckpfeiler der reproduzierbaren Robotikforschung.
  • tf2 Die Transformationsbibliothek, die die Koordinatenrahmen im Laufe der Zeit verfolgt. Sie können verwenden, um Transformationen zu inspizieren und , um die Veröffentlichungsraten zu überprüfen.

Wenn Sie diese Tools frühzeitig beherrschen, sparen Sie stundenlanges Debuggen und können sich auf die Erstellung von Funktionen konzentrieren.

Lernen und Community Resources

ROS hat eine der aktivsten und unterstützendsten Gemeinschaften in der Robotik. Um Ihr Lernen zu beschleunigen, nutzen Sie diese hervorragenden Ressourcen:

  • Offizielle ROS Tutorials – Die ROS Wiki bietet Schritt-für-Schritt-Tutorials für Anfänger, die alles von der Erstellung von Arbeitsbereichen bis hin zu erweiterten Navigationsstacks abdecken.
  • ROS Antworten – Ein Q&A-Forum, in dem Sie spezifische technische Fragen stellen und nach Lösungen suchen können. answer.ros.org.
  • ROS-Diskurs – Das offizielle Diskussionsforum für Ankündigungen, Projekt-Showcases und längere Gespräche. discourse.ros.org.
  • Online-Kurse Plattformen wie Udemy, Coursera und EdX bieten strukturierte ROS-Kurse an. Besonders beliebt ist die Serie "ROS for Beginners" von Anis Koubaa.
  • Bücher – Roboter programmieren mit ROS von Morgan Quigley und Brian Gerkey bietet eine gründliche Einführung, während Robot Operating System (ROS) für absolute Anfänger Lentin Joseph ist hervorragend für Novizen.
  • YouTube-Kanäle – Suche nach „ROS Tutorial – Kanäle wie The Construct, Robotis und IIT Kharagpurs Robotik-Labor bieten Video-Begehungen und Projektdemos.
  • ROS auf Ubuntu installieren – Der Beamte ROS-Einbauführung ist die kanonische Referenz.

Zögern Sie nicht, mit Simulationstools wie Gazebo zu experimentieren, bevor Sie zu einem physischen Roboter wechseln. Die ROS-Community hat Pakete für fast jeden Sensor, Aktuator oder Algorithmus, so dass Sie oft vermeiden können, das Rad neu zu erfinden.

Erweiterte Themen für weitere Explorationen

Sobald Sie mit den Grundlagen vertraut sind, können Sie sich in fortgeschrittenere Bereiche wagen:

  • ROS 2 – Die nächste Generation von ROS, die auf DDS für Echtzeit-Performance, Sicherheit und plattformübergreifenden Support aufbaut.
  • Navigationsstapel Eine Sammlung von Paketen für die autonome Roboternavigation, einschließlich SLAM (Simultanlokalisierung und -kartierung), globale Pfadplanung und Hindernisvermeidung.
  • MoveIt Ein leistungsfähiges Framework für Bewegungsplanung und -manipulation, insbesondere für Roboterarme.
  • URDF - Unified Robot Description Format, eine XML-Spezifikation zur Beschreibung der Kinematik, des visuellen Erscheinungsbilds und der Kollisionsmodelle eines Roboters.
  • Gazebo Integration Simulieren Sie Ihre ROS-Knoten in einer realistischen Physikumgebung, bevor Sie sie auf einem echten Roboter einsetzen.
  • Verhaltensbäume - Ein modularer Weg, um komplexe Roboterverhalten zu definieren, das zunehmend in ROS 2 für die Aufgabenplanung verwendet wird.

Best Practices für die ROS-Entwicklung

Wenn Sie mit dem Aufbau echter Projekte beginnen, sollten Sie diese Best Practices im Auge behalten:

  • Startdateien verwenden - Definieren Sie anstelle von mehreren Terminals Ihre Knotenkonfiguration in einer Datei, wodurch Ihr System reproduzierbar und einfacher zu debuggen ist.
  • Verwalten von Namespaces Wenn Sie mehrere Roboter oder Komponenten ausführen, verwenden Sie Namespaces, um Kollisionen mit Themennamen zu vermeiden.
  • Loggen Sie sinnvoll Verwenden Sie , und mit entsprechenden Verbositätsstufen.
  • Versionskontrolle Benutze immer Git für deine Pakete. fügen Sie ein und ein mit den richtigen Abhängigkeiten hinzu.
  • Test mit Simulationen – Vor dem Laufen auf Hardware simulieren Sie mit Gazebo oder Bühne. Dies reduziert das Risiko und beschleunigt die Entwicklung.
  • Ressourcenlimits einhalten – Setzen Sie geeignete Veröffentlichungsraten und Warteschlangengrößen. Vermeiden Sie Hochwasserthemen mit Hochfrequenzdaten, wenn nicht erforderlich.

Schlussfolgerung

ROS ist nicht nur ein Werkzeug, es ist ein Ökosystem, das sich weiterentwickelt. Indem Sie seine grundlegenden Konzepte beherrschen, öffnen Sie die Tür, um alles zu erstellen, von einfachen Telepräsenz-Bots bis hin zu fortschrittlichen autonomen Systemen. Fangen Sie klein an, üben Sie mit Turtlesim, bauen Sie Ihr erstes Publisher-Abonnent-Paar und integrieren Sie allmählich komplexere Pakete. Die Reise in die Robotik mit ROS ist herausfordernd, aber immens lohnend. Bleiben Sie neugierig, bauen Sie kleine Projekte iterativ und engagieren Sie sich mit der globalen Gemeinschaft.

Ihr erster Roboter wartet.