Читать книгу Roboter mit ROS - Murat Calis - Страница 22

1.2.5ROS-Nodes

Оглавление

Ein Node ist eine Instanz eines ausführbaren Programms. Das bedeutet, dass man ein und dasselbe Programm mehrmals gleichzeitig starten kann, indem man unterschiedliche Namen beim Aufruf verwendet.

Programme innerhalb des ROS-Systems werden nicht wie gewöhnliche Systemprogramme oder Anwendungen aufgerufen. Stattdessen wird ein Startprogramm namens rosrun verwendet, um das Programm zu einem vollwertigen Node zu machen. Wir haben zuvor gelernt, dass der ROS-Master sämtliche Ports öffnet und Sockets bereitstellt, damit ein Node erreichbar ist und mit anderen Nodes kommunizieren kann. Wir werden also nie Sockets programmieren oder Ports öffnen müssen, denn das übernimmt ROS für uns.

Im folgenden Befehl wird mit rosrun aus dem Paket rqt_image_view das gleichnamige Programm rqt_image_view gestartet. Im darauffolgenden Befehl ist ein Beispiel mit dem Parameter __name. Der letzte Befehl zeigt die nötigen Informationen eines Node an. Wenn man Nachrichten von einem Node erhalten oder umgekehrt Nachrichten an ein Node senden möchte, dann stehen in den Informationen die Nachrichtendefinitionen, die von den jeweiligen Themen (topics) verwendet werden.

rosrun rqt_image_view rqt_image_view

rosrun rviz rviz __name:=mein_test_name

rosnode info mein_test_name

-Taste verwenden!

In Linux kann man die Konsole dazu bewegen, nach einer Tastatur-Eingabe alles auszugeben, was im Kontext möglich ist. Wenn man »rosrun rqt_« eingibt, aber nicht weiß, wie es weiter geht, einfach zweimal hintereinander die -Taste drücken und schon kommen mögliche Eingabe-Vorschläge von der Konsole.

Sobald der mit rosrun gestartete Node läuft, kann man mit dem Befehl rosnode list prüfen, welchen Node-Namen die Programm-Instanz erhalten hat. Weitere Möglichkeiten gibt die Konsole mit rosnode und zwei aufeinanderfolgenden Tabulator-Eingaben aus.

Der Befehl rosrun sucht in allen Verzeichnissen, die in der Variable $CMAKE_PREFIX_PATH enthalten sind, nach ausführbaren Programmen.

Unsere Programme werden wir jedoch nicht einzeln per rosrun starten, sondern später mit roslaunch in einer Starter-Datei bündeln. Schließlich werden wir viele kleine Programme, die wir nun als Nodes bezeichnen, zu einem großen Cortex verknüpfen.

Sobald wir beginnen, eigene Nodes zu programmieren, werden diese hauptsächlich Topics, Services, Service-Clients, Action-Clients, Action-Services implementieren. Somit generieren wir Schnittstellen für andere Nodes. Dabei beschränkt die Wahl einer der soeben genannten Funktionen nicht die anderen. Wir können also Topics, Services und Actions gleichzeitig und mehrfach vorkommend in einem Node implementieren.

Roboter mit ROS

Подняться наверх