Kapitel 5. Aktionen

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Im vorigen Kapitel wurden ROS-Dienste beschrieben, die für synchrone Anfrage/Antwort-Interaktionen nützlich sind - also für Fälle, in denen asynchrone ROS-Themen nicht am besten geeignet erscheinen. Aber auch Dienste sind nicht immer die beste Lösung, vor allem dann nicht, wenn die Anfrage mehr ist als eine einfache Anweisung der Form "Hole (oder setze) den Wert von X".

Während Dienste für einfache "get/set"-Interaktionen wie Statusabfragen und die Verwaltung von Konfigurationen praktisch sind, funktionieren sie nicht gut, wenn du eine lang laufende Aufgabe initiieren musst. Stell dir zum Beispiel vor, du befiehlst einem Roboter, zu einem weit entfernten Ort zu fahren; nenne ihn goto_position. Der Roboter wird dafür viel Zeit benötigen (Sekunden, Minuten, vielleicht auch länger), wobei die genaue Zeitspanne nicht im Voraus bekannt ist, da Hindernisse auftreten können, die einen längeren Weg erfordern.

Stell dir vor, wie eine Serviceschnittstelle zu goto_position für den Aufrufer aussehen könnte: Du sendest eine Anfrage mit dem Standort des Ziels und wartest dann für eine unbestimmte Zeit auf die Antwort, die dir sagt, was passiert ist. Während du wartest, ist dein aufrufendes Programm gezwungen zu blockieren, du hast keine Informationen über den Fortschritt des Roboters auf dem Weg zum Ziel und du kannst das Ziel nicht abbrechen ...

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.