Читать книгу Roboter mit ROS - Murat Calis - Страница 26
1.2.9ROS-Actions
ОглавлениеMit Services haben wir gelernt, kurzfristige Frage-Antwort-Techniken zu verwenden. Was aber, wenn wir langfristige Aufgaben zu bewältigen haben? »Gehe in die Küche, mache das Licht aus und komme wieder zurück«, ist eine typische Aufgabenstellung in der Robotik. Solche zeitintensiven Aufgaben lösen wir mit Actions. Dazu gibt es in ROS das actionlib-Paket. Die actionlib bietet eine standardisierte Schnittstelle, um mit präemptiven Aufgaben zu arbeiten.
Ähnlich wie Services gibt es bei der Verwendung von Actions einen ActionServer und einen ActionClient. Eine Action-Definition wird in eine Datei mit der Endung .action geschrieben. Der Ordnername für Actions lautet action innerhalb eines ROS-Pakets. Action-Dateien sind in drei Bereiche gegliedert, die jeweils mit drei Bindestrichen voneinander abgetrennt werden. Die Reihenfolge innerhalb einer Action-Datei ist Goal, Result und zuletzt Feedback. Wer eigene .action-Dateien verwenden möchte, muss diese wie bei Services besprochen zunächst mit catkin_make in Klassendateien umwandeln lassen.
Ein wichtiges Merkmal von Actions ist, dass sie weder den ActionClient-Node noch den ActionServer-Node blockieren, Stichwort »asynchron«! Man kann eine Action jederzeit stoppen, pausieren, neue Ziele eingeben und parallel andere Aufgaben erledigen.
GoalEin ActionClient sendet ein Goal (deutsch Ziel) an einen ActionServer. Wenn wir mit Services vergleichen, wäre dieser Teil ein Request. Ein Goal könnte am Beispiel einer mobilen Basis eine Koordinate sein, die es zu erreichen gilt.
ResultDas Ergebnis wird nach Beendigung der Action auf dem ActionServer nur einmal an den ActionClient zurückgegeben.
FeedbackUnter Feedback kann man sich den Fortschritt der aktuellen Action vorstellen. Die Richtung ist von ActionServer zu ActionClient. Es obliegt der ActionServer-Programmiererin, eine geeignete Fortschrittsprozedur zu implementieren. Dies könnte zum Beispiel die aktuelle Koordinate des Roboters sein oder in Prozent ausgedrückt, der Anteil am zurückgelegten Weg. Der Fortschritt wird fortlaufend in der Frequenz des ActionServers zurückgegeben.
Da die Zusammenhänge und die darunterliegende Technik sehr umfangreich sind, möchte ich an dieser Stelle auf die Wiki-Seiten von ROS verweisen, die eine exzellente Beschreibung der Technik und Vorgänge in Actions bieten. Die Startseite für actionlib finden wir unter http://wiki.ros.org/actionlib, eine detaillierte Beschreibung steht unter http://wiki.ros.org/actionlib/DetailedDescription.
Schauen wir uns eine Action-Datei mit dem Befehl rosed etwas genauer an. Mit rosed können Dateien, die über die Pfadvariable $CMAKE_PREFIX_PATH erreichbar sind, editiert werden.
rosed move_base_msgs MoveBase.action
geometry_msgs/PoseStamped target_pose
---
---
geometry_msgs/PoseStamped base_position
Die Datei MoveBase.action enthält drei Bereiche, die durch jeweils drei Bindestriche getrennt sind. Der Bereich für Result wurde ausgelassen. Die hierbei verwendeten Messages, geometry_msgs/PoseStamped sehen wir detailliert mit dem Befehl rosmsg show geometry_msgs/PoseStamped.