ТОП просматриваемых книг сайта:
Roboter mit ROS. Murat Calis
Читать онлайн.Название Roboter mit ROS
Год выпуска 0
isbn 9783960884682
Автор произведения Murat Calis
Жанр Математика
Издательство Bookwire
Nodes können vor, während des Starts und im laufenden Zustand konfiguriert werden.
Der Parameter-Server läuft innerhalb des ROS-Masters und kann somit per XMLRPC abgefragt werden. Da das Abfragen der Parameterwerte die Nodes Zeit kostet, sind Parameter für nicht verändernde Konfigurationseinstellungen besser geeignet als sich ständig verändernde Parameterwerte. Erst wenn man den ROS-Master beendet, wird der Parameter-Server beendet und alle Parameter werden gelöscht. Ein Node, der private Parameter für sich oder globale Parameter für alle Nodes gesetzt hat, wird nicht automatisch die gesetzten Parameter löschen, sobald er beendet wird. Alle Parameter unterliegen der Obhut des Parameter-Servers und somit des ROS-Masters. Erst wenn man den ROS-Master beendet, werden alle Parameter gelöscht.
Einen Auszug der Parameter erhalten wir mit dem Befehl rosparam list. Anhand der Ausgabe erkennen wir eine gewisse Nomenklatur, die sich an die Namenskonvention von ROS hält. Unter dem Link http://wiki.ros.org/Names finden wir eine ausführliche Beschreibung dazu.
...
/move_base/base_global_planner
/move_base/base_local_planner
/move_base/global_costmap/footprint
/move_base/global_costmap/inflation_layer/enabled
/move_base/global_costmap/obstacle_layer/enabled
/joint_state_controller/publish_rate
/joint_state_controller/type
In der Beispielausgabe stehen die Namen der Nodes am Anfang, gefolgt von den Parametern. Angenommen, wir wollen die Parameter von move_base verifizieren, ob diese auch korrekt gesetzt wurden. Einen Parameterwert können wir mit dem Befehl rosparam get ausgeben. In der Beispielausgabe ist nur ein Bruchteil der Parameter von move_base aufgeführt. In Wirklichkeit sind es nach Ausführen des Befehls rosparam list | grep move_base | wc -l insgesamt 121. Anstatt alle Parameter einzeln mit rosparam get abzuarbeiten, ist es möglich, anhand des Node-Namen eine geordnete Liste der 121 Parameter und Parameterwerte auf der Konsole auszugeben.
rosparam get /move_base
Ist nur ein Teilbereich von /move_base für uns interessant, so geben wir den Namen nach einem Schrägstrich ein.
rosparam get /move_base/global_costmap
Parameterwerte werden mit dem Befehl rosparam set auf dem Parameter-Server gespeichert. Da diese Speicherung flüchtig ist und den nächsten Neustart des ROS-Masters nicht übersteht, empfiehlt es sich, eine eigene Parameter-Datei anzulegen, um diese beim Start mit rosparam load oder in einer launch-Datei zu laden. In ROS kommt zu diesem Zweck das YAML-Format zum Einsatz.
Nachfolgend sehen Sie einen Auszug aus einer Konfigurationsdatei im YAML-Format; das Raute-Symbol (#) leitet einen Kommentar ein und wird nicht als Konfiguration verarbeitet.
#abot:
# Publish all joint states
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
# Effort Controllers
leftWheel_effort_controller:
type: effort_controllers/JointEffortController
joint: left_wheel_motor
pid: {p: 100.0, i: 0.1, d: 10.0}
rightWheel_effort_controller:
type: effort_controllers/JointEffortController
joint: right_wheel_motor
pid: {p: 100.0, i: 0.1, d: 10.0}
Die Zeileneinrückung und Doppelpunkte in einer YAML-Datei bestimmen den hierarchischen Aufbau der Parameter, sobald diese auf dem Parameter-Server geladen werden. Im obigen Beispiel wird aus leftWheel_effort_controller: type: /leftWheel_effort_controller/type. Ein weiterer Speicherort für Parameter sind Launch-Dateien.
1.2.11ROS-Launch
Je mehr Nodes wir entwickeln, die miteinander kommunizieren, desto mehr Nodes werden gestartet. Mit dem Befehl roscore würde man zunächst den ROS-Master starten und anschließend mit dem Befehl rosrun, welcher nur einen einzelnen Node starten kann, ein Node nach dem anderen in jeweils einem eigenen Terminal-Fenster. Schließlich hat man eine Menge offener Terminal-Fenster, was die Suche nach bestimmten Nodes erschwert, deren Ausgaben man gezielt beobachten möchte.
Der Befehl roslaunch erleichtert die Arbeit mit mehreren Nodes und verschafft uns einen Überblick, indem wir alle Nodes, die wir starten wollen, in einer launch-Datei zusammenfassen und zum Ausführen lediglich ein Terminal-Fenster öffnen, denn roslaunch startet auch den ROS-Master, wenn dieser noch nicht gestartet wurde. In einer launch-Datei können zudem auch andere entfernte launch-Dateien eingebunden werden. Alle Optionen und Tools rund um roslaunch werden auf den Wiki-Seiten unter http://wiki.ros.org/roslaunch und http://wiki.ros.org/roslaunch/Commandline%20Tools gezeigt.
Der gleichnamige Ordner für launch-Dateien befindet sich in einem ROS-Paket. Der Inhalt einer launch-Datei wird im XML-Format verfasst. In einer Datei können Nodes, Parameter und weitere launch-Dateien definiert werden. Mit Funktionen können Berechnungen und Namensauflösungen in einer launch-Datei verwendet werden. Ein ausführliches Beispiel und Möglichkeiten für eine launch-Datei finden wir unter folgendem Link http://wiki.ros.org/roslaunch/XML.
Der Befehl roslaunch startet wie bereits erwähnt gegebenenfalls einen ROS-Master und führt alle in einer launch-Datei aufgeführten Definitionen gleichzeitig aus. Es wird also nicht der Reihe nach abgearbeitet und genau dieses Verhalten sollte bei der Programmierung von Nodes beachtet werden, denn wenn ein Node auf einen Wert oder einen Service eines anderen Nodes zugreift, obwohl dieser noch nicht einmal gestartet ist, entstehen Fehlermeldungen der Kategorie fatal.
Als Beispiel soll hier die launch-Datei abot_description.launch aus dem gleichnamigen Paket abot_description erörtert werden.
<? xml version="1.0" encoding="utf-8" ?>
name="urdf_file"
default="$(find xacro)/xacro --inorder
'$(find abot_description)/urdf/abot.xacro'" />