Roboter mit ROS. Murat Calis
möchte, beginnt mit dem Befehl rostopic pub /move_base_simple und den Rest erfüllt die
Abb. 1–12Zieleingabe für eine mobile Basis
Nach der Eingabe eines Navigationsziels setzt sich der Roboter in Bewegung und die Meldungen in der Konsole vermehren sich. Sobald das Ziel erreicht ist, nehmen die Meldungen ab und es erscheint die DEBUG-Meldung, dass das Ziel erreicht wurde.
Die Einstellung der Logstufe ist nur eine von vielen Möglichkeiten, mit denen das Programm rosconsole zusammenhängt. Weitere Möglichkeiten sind auf den Wiki-Seiten aufgezeichnet http://wiki.ros.org/rosconsole.
1.3.4.2rqt_logger_level
Die Einstellung der Logstufen bietet auch das grafische Pendant rqt_logger_level. Mit einem Mausklick auf die gewünschte Logstufe ist diese umgehend übernommen. So kann man spielerisch etwas mehr über Nodes erfahren.
Abb. 1–13Einstellung der Logstufe für eine mobile Basis
1.3.4.3rqt_console
Ein weiteres grafisches Werkzeug zur Anzeige und zum Filtern von Logmeldungen ist das Programm rqt_console. Die Einstellung der Logstufen erfolgt wie in rqt_logger_level auch, nur dass der Knopf zum Aufruf des Fensters für die Logstufen etwas schwerer zu erraten ist. Er befindet sich oben rechts zwischen den Fenstersteuerungsbuttons im Hauptfenster von rqt_console. Wenn man mit der Maus über den Knopf fährt, erscheint ein Hinweistext mit dem Inhalt »Configuration«. Danach kann man die Logstufen der verschiedenen Nodes einstellen.
Darüber hinaus bietet rqt_console eine Filtermöglichkeit während der Anzeige. Es können reguläre Ausdrücke verwendet werden, um nach Schlüsselwörtern zu filtern, oder man lässt nur bestimmte Meldungen anzeigen, die einem bestimmten Muster entsprechen.
Abb. 1–14Einstellung der Logstufe in rqt_console
Das Setupfenster von rqt_console erfasst Meldungen aus dem Topic /rosout_agg. Dieses Topic ist ein Aggregations-Topic und dient der Entlastung des zentralen Log-Topics /rosout, da sonst jeder Verbindungsaufbau über TCP mit dem zentralen Log-Topic die Performance zu sehr beeinträchtigen würde. Mit der Angabe in der Zeile Buffer werden bis zu 20000 Logmeldungen gepuffert, danach werden die ältesten Meldungen durch neue verdrängt.
1.3.5roswtf
Wenn Logmeldungen nicht weiterhelfen oder ein Problem nicht erkennbar ist, hilft vielleicht das Programm roswtf weiter. Bevor Sie es starten, navigieren Sie mit roscd in das ROS-Paket, wo Sie das Problem vermuten. Dann analysiert das Programm alle Paketabhängigkeiten in diesem ROS-Paket und danach die Integrität der laufenden ROS-Programme und ROS-Variablen.
1.3.6rosbag
In ROS gibt es das Programm rosbag, um eine beliebige Anzahl Topics zur Laufzeit aufzuzeichnen und abzuspielen. Es profitiert von der losen Struktur der Programme, die nach dem Publish- und Subscribe-Prinzip miteinander kommunizieren. Daraus ergeben sich Möglichkeiten, wie das Versenden einer Aufzeichnung zu Reproduktionszwecken bei Fehlern. In einem anderen Szenario könnte das wiederholte Abspielen dazu dienen, mit den aufgezeichneten Daten der Topics eigene Programme zu entwickeln oder die Daten zu analysieren.
Das Aufzeichnen und Abspielen von ROS-Nachrichten mit rosbag ist selbstverständlich nicht alles, was rosbag kann. Wir werden uns aber in diesem Abschnitt auf diese beiden wesentlichen Funktionen konzentrieren. Ein kurzes Video mit einem Überblick gibt es auf den Wiki-Seiten von ROS unter http://wiki.ros.org/rosbag.
Die Verwendung von Aufzeichnungen kann den Einsatz eines Roboters reduzieren, da Sensordaten von der Hardware aufgezeichnet und so verwendet werden können, als stammten sie tatsächlich von einem realen Roboter. Genau hier besteht allerdings auch ein Problem mit Abspieldaten. Werden aufgezeichnete Daten abgespielt, während ein Roboter angeschlossen ist, dann passiert eben das, was damals während der Aufzeichnung passiert ist inklusive dem, was der Roboter aktuell ausführt, also eine Mischung aus aktuellen und aufgezeichneten Daten und Befehlen.
Eine Aufzeichnung, die abgespielt wird, kann einen angeschlossenen Roboter bewegen und Schäden verursachen!
Starten Sie mit roslaunch eine Simulation und lassen Sie den Roboter ein oder mehrere Ziele ansteuern. Sobald wir mit rosbag eine Aufzeichnung starten, werden die gewünschten Topics abonniert und in einer bag-Datei gespeichert. Wenn zahlreiche Topics abonniert werden, inklusive Bild- und Sensordaten, kann die Datei sehr schnell sehr groß werden. Mit dem Befehl rosbag help erhalten Sie einen Überblick über die möglichen Unterbefehle, die mit rosbag ausgeführt werden können.
Abb. 1–15Ein record-Node abonniert die ausgewählten Topics
rosbag record –a
Der obige Befehl startet eine Aufzeichnung mit allen verfügbaren Topics. Die bag-Datei wird in dem Ordner erstellt, in dem der rosbag-Befehl ausgeführt wurde. Der Dateiname ist standardmäßig ein Zeitstempel mit dem aktuellen Datum und der Dateiendung bag. Beendet wird die Aufzeichnung, indem man in dem Konsolenfenster, das die Aufzeichnung gestartet hat,
Es ist möglich, bestimmte Topics anzugeben, die man aufzeichnen möchte. Das reduziert die Belastung für den Prozessor und den benötigten Speicherplatz. Der folgende Befehl zeichnet lediglich zwei Topics auf.
rosbag record /move_base_simple/goal /camera/image_raw
Zum Abspielen einer bag-Datei wird der Befehl mit der Option play und einem Dateinamen aufgerufen. Dann werden umgekehrt an alle Topics, die aufgezeichnet wurden, die gespeicherten Nachrichten zurückgesendet. In der obigen Abbildung zeigen die Pfeile dann in die entgegengesetzte Richtung und der Name des Nodes beginnt dann nicht mehr mit record, sondern mit play.
rosbag play <dateiname.bag>
Spielen wir eine bag-Datei ab, dann kommen einige Dinge im ROS-System durcheinander. Schließlich können die Position und Orientierung des Roboters auf der Karte eine ganz andere gewesen sein, als wir die Nachrichten aufgezeichnet haben. Da ROS viele Berechnungen auf Basis der aktuellen Zeit durchführt, können unterschiedliche Zeitstempel auch unterschiedliche Ergebnisse liefern. Es wird also nie eine exakte Wiedergabe dessen sein, wie der Ablauf der Simulation zum Zeitpunkt der Aufnahme stattgefunden hat.
Wer seine Aufnahmen mit dem Start einer launch-Datei ausführen will, kann dies durch Einbinden des rosbag-Pakets als Node in einer beliebigen launch-Datei tun.
<node
pkg="rosbag"