Читать книгу Roboter mit ROS - Murat Calis - Страница 40
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, drückt.
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"
type="record"
name="rosbag_recorder"
args="
–o
$(find abot_gazebo)/aufzeichnung1
/move_base/goal
/camera/image_raw"
/>
Ein grafisches Programm als Alternative zur Konsole bietet das Programm rqt_bag. Es bietet die gleichen Funktionen und zusätzlich einen Editor für aufgezeichnete Inhalte. Damit lassen sich Videoströme inspizieren sowie Topics im Einzelnen betrachten. Die Funktionsknöpfe sind an einen Videorekorder angelehnt so findet man sich auch schnell darin zurecht. Ein Vorteil von rqt_bag ist, dass es möglich ist, die aufgezeichneten Daten einfach nur zu betrachten statt gleichzeitig zu publizieren.