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

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

       1.2.3ROS-Meta-Paket

      Im Gegensatz zu einem einzelnen ROS-Paket ist ein ROS-Meta-Paket eine Ansammlung mehrerer loser ROS-Pakete in einem großen Gesamtpaket. Angenommen, wir entwickeln einen Roboter, der fahren, sehen und sprechen kann. Wir würden ein Paket für das Fahren, eines für das Sehen und zuletzt ein Paket für das Sprechen erstellen. Nun befinden sich diese Pakete innerhalb unseres src-Ordners und sobald weitere Pakete dazukommen, leidet die Übersichtlichkeit. Ein Meta-Paket bedeutet zugleich, dass ROS-Pakete in einem Unterordner von src gesammelt werden. Die Struktur unseres Beispielroboters könnte folgendermaßen aussehen, wenn wir es als ROS-Meta-Paket anlegen.

      /home/<benutzername>/catkin_ws/src/meinbot-kinetic-master

      /home/<benutzername>/catkin_ws/src/meinbot-kinetic-master/meinbot

      /home/<benutzername>/catkin_ws/src/meinbot-kinetic-master/meinbot_fahren

      /home/<benutzername>/catkin_ws/src/meinbot-kinetic-master/meinbot_sehen

      /home/<benutzername>/catkin_ws/src/meinbot-kinetic-master/meinbot_sprechen

      Die Anatomie eines ROS-Pakets kennen wir bereits. Interessant ist hier nur das ROS-Paket meinbot. Es vermittelt von seinem Namen her keine Funktion, die wir besprochen haben. Schauen wir also in den Ordner.

      meinbot

      |__ CMakeLists.txt

      |__ package.xml

      Das Verzeichnis von meinbot, welches ein Meta-Paket realisiert, enthält lediglich die Pflichtdatei package.xml und die Bauanleitung CMakeLists.txt. Der Inhalt von CMakeLists.txt verrät uns mehr über seine Funktion.

      cmake_minimum_required(VERSION 2.8.3)

      project(meinbot)

      find_package(catkin REQUIRED)

      catkin_metapackage()

      Das Makro catkin_metapackage() weist CMake an, das Verzeichnis meinbot wie ein ROS-Meta-Paket zu behandeln. Werfen wir zuletzt noch einen Blick in die stark verkürzte Datei package.xml.

      ...

      <buildtool_depend>catkin</buildtool_depend>

      <run_depend>meinbot_fahren</run_depend>

      <run_depend>meinbot_sehen</run_depend>

      <run_depend>meinbot_sprechen</run_depend>

      <export>

      <metapackage />

      </export>

      Abgesehen von dem benötigten <buildtool_depend>-Element dürfen Meta-Pakete nur <run_depend>-Elemente haben. In diesen Elementen werden die losen ROS-Pakete zu einem großen, ganzen Meta-Paket geschnürt. Am Ende steht ein <export>-Element,

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