Читать книгу Roboter mit ROS - Murat Calis - Страница 24
1.2.7ROS-Messages
ОглавлениеZuvor haben wir von Nachrichten (engl. Messages) im Zusammenhang mit Nodes gesprochen. Sie sind die Datenströme, die zwischen zwei oder mehr Nodes transportiert werden. Messages werden in .msg-Dateien definiert. Dort steht der Datentyp mit Bezeichner. ROS unterstützt einfache Datentypen und mehrdimensionale Arrays, aus denen man komplexe Datenstrukturen konstruieren kann. Der Ordnername für Messagedateien lautet msg.
Messages fließen immer nur in eine Richtung. Um eine bidirektionale Kommunikation zwischen zwei Nodes zu etablieren, benötigt man ein Service oder eine Action.
Die Kompatibilität der ausgetauschten Nachrichten gewährleisten Subscriber durch Überprüfen der MD5-Quersumme, die aus der Nachrichtendefinition berechnet wird. Jeder Subscriber prüft also zuerst, ob die MD5-Quersumme korrekt ist, um dann die empfangenen Nachrichten zu verarbeiten.
Fehlerhafte Nachrichtenübertragung
Eine Fehlermeldung in der MD5-Quersumme kann auf eine inkompatible Nachrichtendefinition aus einer älteren ROS-Version hindeuten.
Detaillierte Auskunft über Nachrichtendefinitionen erhalten wir mit rosmsg. Schauen wir uns die weiter oben verwendete Nachrichtendefinition geometry_msgs/Twist etwas genauer an. Der Name ist aufgeteilt in Paket (geometry_msgs) und Format (Twist).
Die Einteilung in Namensräume dient hauptsächlich der Kollisionsvermeidung mit anderen identischen Formatnamen. Es kann also geometry_msgs/Twist und turtlebot/ Twist geben, die eine vermeintlich ähnliche Datenstruktur verkörpern.
Der folgende Befehl gibt eine solche Datenstruktur auf der Konsole aus. Wenn man nicht weiß, wie die Datentypbezeichnung lautet, kann man eine Linux-Pipe (das senkrechte |-Symbol wird mit eingegeben) wie im zweiten Befehl für die nötige Information bemühen.
rosmsg show geometry_msgs/Twist
rostopic type /cmd_vel | rosmsg show
Abb. 1–7Datenformate ausgeben mit rosmsg show.
Nachrichten, die an cmd_vel gesendet werden, enthalten eine Zusammensetzung aus zwei Vektoren. Im ersten Vektor, bestehend aus drei Fließkommazahlen, definiert man die lineare Geradeaus-Richtung. Der zweite Vektor, ebenfalls zusammengesetzt aus drei Fließkommazahlen, definiert die angulare Drehrichtung.
Die Vector3-Definition repräsentiert eine Richtung im freien Raum. Mit ihr kann man eine Beschleunigungsangabe in x-, y- und z-Richtung machen. Eine Drehbeschleunigung in die gewünschte Richtung wird anhand der Achsendrehung um x, y oder z angegeben.
ROS-Koordinatensystem
Es gilt die Rechte-Hand-Regel, wobei Folgendes zu beachten ist. Der Zeigefinger zeigt in x-, der Mittelfinger in y- und der Daumen in z-Richtung. Der Drehsinn läuft gegen den Uhrzeiger. Die Maßeinheit für Geschwindigkeit in x-, y- oder z-Richtung ist Meter/Sekunde und bei der Drehung ist es Radiant/Sekunde.
Solange es geht, verwenden wir in ROS vorhandene Nachrichtendefinitionen, um unnötige Arbeit und Redundanz zu vermeiden.
Um in Ubuntu herauszufinden, welche Nachrichtendefinitionen von welchen Paketen zur Verfügung gestellt werden, sucht man mittels »dpkg -l |grep msgs« alle Kandidaten ab. Die Trefferliste liefert meist eine Beschreibung der Nachrichtendefinitionen und deren Verwendung mit.
Wer eigene Nachrichtendefinitionen erstellen möchte, dem empfehle ich, zunächst das ROS-Tutorial zu besuchen, um eine Anleitung parat zu haben (http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv).