Читать книгу Roboter mit ROS - Murat Calis - Страница 23
1.2.6ROS-Topics
ОглавлениеDamit ein Node mit anderen Nodes kommunizieren kann, publiziert oder abonniert dieser ein oder mehrere Topics. Topics sind Themen-Bezeichnungen, unter denen es fortwährend Nachrichten (engl. Messages) zu senden oder empfangen gibt. Will ein Node zur Gesichtserkennung Nachrichten von einer Kamera erhalten, so abonniert dieser Node für die Gesichtserkennung ein entsprechendes Topic – zum Beispiel »/ camera/image_raw«. Nachdem ein Topic abonniert wurde, fließen Nachrichten vom publizierenden zum abonnierenden Node, also in nur eine Richtung.
Abb. 1–5Ein Publisher, ein Topic und ein Subscriber
Die in der obigen Abbildung dargestellte 1:1-Kommunikationsform kann auch in Form einer 1:n- oder n:n-Kommunikation vorkommen. Wenn ein Topic für mehr als nur einen Abonnenten interessant ist, lesen mehrere Subscriber denselben Nachrichtenkanal. Darüber hinaus kann ein Subscriber beliebig viele Topics abonnieren, auch wenn diese von unterschiedlichen Publishern stammen.
Abb. 1–6Viele Publisher, viele Topics und viele Subscriber
Der Befehl, der in ROS wohl am häufigsten benutzt wird, ist der zum Anzeigen der Topics.
rostopic list
Zum Abonnieren bzw. Ausgeben der Nachrichten in der Konsole verwenden wir echo.
rostopic echo /camera/image_raw
Für das Publizieren muss nicht gleich ein Node programmiert werden, denn der pub-Befehl erfüllt diese Funktion bereits in der Konsole. In nachfolgendem Befehl geht es um Nachrichten, die mit einer Rate -r in Hertz, also zehnmal in der Sekunde an das Topic mit der Bezeichnung /cmd_vel gesendet werden. Die publizierten Nachrichten enthalten dann Daten im Format geometry_msgs/Twist. Mehr Information darüber erfährt man mit rosmsg show geometry_msgs/Twist. Die beiden aufeinanderfolgenden Minussymbole ermöglichen negative Werteangaben. Ein Tupel beginnt immer mit einem einfachen hochgestellten Komma und muss damit auch beendet werden. Die Einheit für Fortbewegungen in einem Drei-Achsen-System wird von ROS in Meter pro Sekunde vorgegeben. Also bewirkt der folgende Befehl, dass sich das Fahrzeug mit 0,2 Meter/Sekunde auf der x-Achse rückwärts bewegt und mit 1,57 Radiant/ Sekunde gegen den Uhrzeigersinn dreht.
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist -- '{linear: {x: -0.2, y:
0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.57}}'
Nachrichten in der Konsole publizieren
Oft ist es nicht trivial, die grammatikalisch korrekte Schreibweise zum Publizieren von Nachrichten in der Konsole zu erahnen. Da wir bereits zuvor schon von der -Taste Hilfe erhalten haben, wird diese uns einmal mehr behilflich sein. Man gebe den Befehl bis zur Bezeichnung des Topics ein (rostopic pub /cmd_vel) und verwende dann die -Taste und schon wird der gesamte Befehl samt Vorgaben ausgedruckt. Nur noch die Werte einsetzen und fertig.