Читать книгу Roboter mit ROS - Murat Calis - Страница 35
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.