Читать книгу Roboter mit ROS - Murat Calis - Страница 19
1.2.2ROS-Paket
ОглавлениеEin einzelnes ROS-Paket stellt die kleinstmögliche Organisationseinheit innerhalb des ROS-Frameworks dar. Ein Paket ist vergleichbar mit Linux-Software-Paketen. In einem Paket können Nodes, Programme, Bibliotheken, Konfigurationsdateien und mehr enthalten sein. Das Ziel ist eine ausreichende und nützliche, nicht aber überbordende Funktionalität, welche unübersichtlich oder schwer zugänglich wird. Wir können ROS-Pakete auch als Software-Module betrachten, da wir mit ROS modulare Software entwickeln. Ein neues Paket erstellen wir mit catkin_create_pkg standardmäßig im Ordner src unseres ROS-Arbeitsbereichs.
Die folgenden Ordner- und Dateinamen können in einem ROS-Paket vorkommen. Die Tabelle dient auch als Prüfliste bei der Arbeit mit Paketen. Ein häufiger Fehler ist, dass man die CMakeLists.txt nicht konfiguriert, während man Services, Messages etc. in den entsprechenden Ordnern bereits definiert hat. Die farbig gekennzeichnete Datei ist eine Pflichtdatei, die jedes ROS-Paket vorweisen muss, denn ROS-Programme suchen zuerst nach package.xml, um Abhängigkeiten aufzulösen oder zur Laufzeit benötigte Programme zu starten.
Ordner-/Dateiname | Beschreibung |
CATKIN_IGNORE | Optionale leere Datei. Verhindert, dass dieses Paket von catkin kompiliert bzw. verarbeitet wird |
CMakeLists.txt | Bauanleitung für CMake |
package.xml | Software-Abhängigkeiten, Copyright, Autor, Version usw. |
config | Ordner für Konfigurationsdateien (xml, yaml) |
include/paket_name | Ordner für C++-Header-Dateien In CMakeLists.txt muss die Variable INCLUDE_DIRS auf den Speicherort dieser Header-Dateien verweisen |
src/paket_name | Ordner für C++-Dateien und Python-Module In CMakeLists.txt muss für C++-Dateien folgende Definition angepasst werden: add_executable( mein_programm src/paket_name/mein.cpp ) Bei Verwendung von Python-Modulen muss eine konfigurierte Datei setup.py im Paketverzeichnis erstellt werden und folgende Definition in CMakeLists.txt existieren: catkin_python_setup() |
nodes | Python-Skripte, die eine Node-Funktionalität implementieren |
scripts | Ausführbare Skript-Dateien, insbesondere Python-Skripte Implementiert ein Python-Skript eine Node-Funktionalität, dann kann es in scripts oder aber auch im Ordner nodes residieren |
srv | Service-Definitions-Dateien mit der Endung .srv Bei Verwendung von srv-Dateien müssen die folgenden Makros in CMakeLists.txt aktiviert werden: add_service_files(…) generate_messages() |
msg | Message-Definitions-Dateien mit der Endung .msg. Bei Verwendung von msg-Dateien müssen die folgenden Makros in CMakeLists.txt aktiviert werden: add_message_files(…) generate_messages() |
action | Ordner mit .action-Dateien. Bei Verwendung von .action-Dateien müssen die folgenden Makros in CMakeLists.txt aktiviert werden. add_action_files(…) generate_messages() |
launch | Start-Dateien mit der Endung .launch. |
urdf | Ordner mit .urdf-, .xacro- und .gazebo-Dateien. |
meshes | Ordner mit .dae-, .stl-, .jpeg-, .tiff-Dateien. |
cad | Ordner mit Konstruktionsdateien. |
worlds | Ordner mit .world-Dateien wird von Gazebo verwendet. |
models | Ordner mit .dae- und .sdf-Dateien wird von Gazebo verwendet. Der Ordner muss in der Umgebungsvariable $GAZEBO_MODEL_PATH enthalten sein. |
buildings | Ordner mit .sdf-Dateien wird von Gazebo verwendet. |
Tab. 1–2Ordner- und Dateinamen in einem ROS-Paket
Der Befehl rospack liefert nützliche Informationen über die auf dem System installierten ROS-Pakete. Um alle installierten ROS-Pakete aufzulisten, verwendet man folgenden Befehl.
rospack list
Ist der Name des ROS-Pakets bekannt und möchte man wissen, ob das Paket auf dem System installiert ist, dann kann man sich mit dem nächsten Befehl schnell Gewissheit darüber verschaffen.
rospack find abot_description
Meist hängt ein ROS-Paket von diversen anderen Paketen ab. Die Abhängigkeiten überprüfen wir in folgendem Beispiel für das Programm RViz.
rospack depends rviz