Roboter mit ROS. Murat Calis

Roboter mit ROS - Murat Calis


Скачать книгу
blaue Linie auch in den negativen Bereich ausgeschlagen. Die Einstellungen für die Maximalgeschwindigkeit in x-Richtung und die maximale Drehgeschwindigkeit um die z-Achse wurden in der Datei base_local_planner_params.yaml des Pakets abot_navigation vorgenommen.

       1.3.3rqt_robot_steering

      Es ist zwar gut zu wissen, wie man einen Roboter mit Konsolenbefehlen fortbewegt, aber oft möchte man in einer grafischen Oberfläche schnell mal ein Gelände abfahren, ohne ständig an die Konsole gebunden zu sein. Dazu ist das Programm rqt_robot_steering gut geeignet. Es ist für Roboter konzipiert, die zwei unabhängig motorisierte Antriebsräder haben. Beide Antriebsräder sind fest am Chassis montiert, also ohne ein Lenkrad, das die Spur beeinflusst. Die Funktion des Lenkrads wird durch unterschiedliche Geschwindigkeiten der Motoren erreicht. Wenn ein Motor schneller dreht als der andere, dann fährt das Fahrzeug eine Kurve. Drehen beide Motoren gleich schnell, dann fährt es geradeaus. In der Abbildung 1–11 steuert der vertikal ausgelegte Regler die Geschwindigkeit nach vorne und hinten, während der horizontale Regler eine Drehung nach links oder rechts bewirkt. Eine Kombination beider Regler hat zur Folge, dass eine Bewegung nach vorne oder hinten und zusätzlich eine Drehung nach links oder rechts möglich ist.

      rosrun rqt_robot_steering rqt_robot_steering

      Das Programm rqt_robot_steering startet eine grafische Oberfläche. Ein ROS-Master muss bereits laufen, da das Programm mit rosrun aufgerufen wird und deshalb nicht automatisch einen ROS-Master startet.

      Abb. 1–11ROS-Roboter-Fernsteuerung mit rqt_robot_steering

      Wenn Sie das Programm zum ersten Mal starten, sind die Standardwerte stets brauchbar. Der Topic cmd_vel ist bekannt als Empfänger für Nachrichten des Typs geometry_msgs/Twist, die von rqt_robot_steering generiert werden und anschließend an das besagte Topic senden. Die Maximalgeschwindigkeit von 1 m/s nach vorne und hinten ist ebenso vernünftig. So kann es nicht passieren, dass der Roboter mit 20 Meter/Sekunde durch die Gegend flitzt. Ändern Sie diese Werte, dann werden sie beim nächsten Start als Standardwerte verwendet. Beginnen Sie am besten mit dem horizontalen Regler für Drehung in Radiant/Sekunde und belassen den vertikalen Regler bei 0 m/s. So bleibt der Roboter auf der Stelle stehen und dreht sich lediglich in die gewünschte Richtung.

       1.3.4ROS-Ereignisse und Logdateien

      In der Softwareerstellung ist es wichtig zu wissen, was ein Programm tut, während es läuft. Am häufigsten werden Meldungen in einem Terminalfenster ausgegeben, in eine Datei geschrieben oder auch beides gleichzeitig. Mit dem ROS-Framework erhalten wir dazu eine Schnittstelle zu einem Logsystem, welches auf Apache log4cxx basiert und nützliche Funktionen für die Verwaltung von Meldungen bietet.

       Ereignisflut

      In der Entwicklungsphase ist es sehr wertvoll, Ereignisse in Logdateien oder in einem Terminalfenster zu untersuchen. Jedoch können zu viele Meldungen im Terminalfenster und Schreibzugriffe auf die Festplatte das System bremsen und sich negativ auf die Gesamtleistung auswirken. In der Produktivphase sollten Meldungen stets auf ein Minimum reduziert werden.

      In der Grundeinstellung werden Ereignisse von Nodes und dem ROS-Master im Heimatverzeichnis des Benutzers und zwar unter ~/.ros/log gespeichert. Dort wiederum befinden sich mit der Zeit eine Menge Unterverzeichnisse mit einer eindeutigen ID als Verzeichnisname. Um nicht erst das aktuelle Verzeichnis mit den Logeinträgen suchen zu müssen, gibt es einen symbolischen Link mit dem Namen latest, welcher immer zum Verzeichnis mit den neuesten Logdateien führt. Der Speicherort für Logdateien kann mit der optionalen Umgebungsvariable ROS_LOG_DIR bestimmt werden. Im nachfolgenden Befehl öffnen wir mit gedit die aktuellste Logdatei des ROS-Masters.

      gedit ~/.ros/log/latest/master.log

      Der Speicherverbrauch durch Logdateien kann dazu führen, dass die Festplatte einfach mal voll ist. Einen Blick auf den Verbrauch durch ROS-Logdateien erhalten wir mit dem nächsten Befehl.

      rosclean check

      Um Platz zu schaffen oder alle Logdateien, die von ROS erstellt wurden, zu löschen, können wir ebenso das Programm rosclean nutzen.

      rosclean purge

      Wenn wir wollen, dass unsere Nodes ihre Meldungen auch in der Konsole ausgeben, dann können für beliebige Nodes output-Attribute mit dem Wert »screen« gesetzt werden, so wie wir das in Abschnitt 1.2.11 in einer launch-Datei gesehen haben. Eine weitere Möglichkeit besteht darin, dem launch-Befehl den Parameter screen anzuhängen. Durch Letzteres wird die Ausgabe für alle Nodes in der launch-Datei auf die Konsole gelenkt.

      Das Logsystem von ROS kennt fünf verschiedene Kritikalitätsstufen, auch bekannt als Logstufen, engl. Loglevel. Die niedrigste Stufe mit den häufigsten Meldungen heißt DEBUG, gefolgt von INFO, WARN, ERROR und schließlich FATAL. Das Gute an einem Logsystem ist, dass wir filtern können, welche dieser fünf Stufen wir in der Konsole für jeden einzelnen Node ausgeben möchten.

      Die Standardstufe für das Logsystem in ROS ist INFO. Die Einstellung der Standard-Logstufe wird in der globalen Konfigurationsdatei $ROS_ROOT/config/rosconsole.config im Hauptverzeichnis von ROS vorgenommen. Die Einstellungen der globalen Konfigurationsdatei können durch Einstellungen in einer eigenen Konfigurationsdatei, die in der Umgebungsvariable ROSCONSOLE_CONFIG_FILE benannt wird, überschrieben werden.

      Wer mehr Meldungen aus den ROS-Nodes bekommen möchte, stellt also die Logstufe für einzelne Nodes auf DEBUG oder ändert insgesamt die Standardstufe von ROS. In unseren eigenen Programmen können wir die Logstufe selbst bestimmen, dazu kommen wir später in Kapitel 5.

       1.3.4.1rosconsole

      Bestimmte Meldungen werden nur in bestimmten Logstufen angezeigt. Nehmen wir ein Beispiel: Wir möchten wissen, wann unser Roboter sein Navigationsziel erreicht hat. Die entsprechende Meldung erscheint aber nur in der Logstufe DEBUG. Da wir bereits den Simulator und RViz gestartet haben, müssen wir lediglich die Logstufe einstellen und das Navigationsziel eingeben. Beachten Sie, dass die Einstellung der Logstufe für ein Node bei jedem Start mit roslaunch erneut vorgenommen werden muss, da die globale Konfigurationsdatei als Logstufe eben INFO eingestellt hat. Wenn Sie eine Logstufe für ein Node permanent machen möchten, geben Sie das in der globalen Konfigurationsdatei ein. Das folgende Beispiel ist äquivalent zu der Einstellung, die wir mit rosconsole vornehmen werden, nur dass die Einstellung hier permanent ist.

      log4j.logger.ros.move_base=DEBUG

      Beginnen wir also mit der Einstellung der Logstufe für die mobile Basis, sodass Meldungen der Stufe DEBUG ausgegeben werden.

      rosconsole set /move_base ros.move_base debug

      Ist die Logstufe für unsere mobile Basis auf DEBUG eingestellt, werden entsprechende Meldungen in unterschiedlicher Schriftfarbe angezeigt. Geben wir nun das Ziel ein und beobachten danach das Konsolenfenster, in dem wir ursprünglich die launch-Datei gestartet haben. Ein Navigationsziel können Sie auch interaktiv in RViz setzen. Verwenden Sie dazu das Werkzeug für 2D-Navigationsziele, welches in der Symbolleiste von Abbildung 2–6 in Abschnitt


Скачать книгу