Software - autonohm/georg_at_home GitHub Wiki
Architektur
Die Software ist über 3 Repos aufgeteilt:
- pib-backend: unsere abgeänderte Pib software (geforkt)
- georg_interfaces: die ros2 Interfaces für den Georg Roboter
- georg_at_home: das Repo für den Georg Roboter
[!NOTE] Die Interfaces sind aus der restlichen Software ausgegliedert, damit man sie separat verwenden kann.
Der Gebrauchsfall wäre z.B. ein Laptop-Nutzer will die Topics des Roboters auslesen.
Hierzu muss Ros die Datentypen (Interfaces) des Roboters kennen um sie auslesen zu können.
Der Laptop muss also die georg_interfacescolcon build-en & sourcen, bevor z.B.ros2 topic listverwendet werden kann
Aufbau georg_at_home
software
Die software ist so aufgegliedert, dass systemrelevante Software, wie Konfigurationen und Projekt-Dateien unvermerkt,
und alle Docker, bzw ROS-basierte Pakete mit pkg_ präfigiert sind.
Die Ordnerstruktur schaut wie folgt aus:
georg_at_home
├── ...
├── projectctl.bash
└── software
├── docker_base_image
│ └── compose.yaml
├── pkg_barebones
│ ├── README.md
│ ├── Dockerfile
│ └── compose.yaml
└── pkg_mit_allem
├── README.md
├── compose.yaml
├── config
│ ├── demo2.launch.py
│ └── __pycache__ /* diese Ordner ignorieren, löschen erlaubt */
│ └──...
└── ros_node
├── package.xml
├── README.md
└── ...
Hier sind 2 Pakete: barebones & mit_allem, plus das systemrelevante docker_base_image.
- Nötig für ein Paket ist nur die
compose.yaml.
In ihr wird ein (oder mehrere) Container beschrieben. - Eine README.md ist stark empfohlen, damit andere lesen können was das Paket überhaupt macht.
- Als Konvention sollen alle ROS Nodes bei container build-time integriert werden (docker build // colcon build),
alles was zu run-time benötigt wird (Parameter, Launchfiles, ...) kommt in einenconfigOrdner, der read-only als/configin den container gemountet wird.
[!IMPORTANT] Die
projectctl.bashim georg_at_home Ordner soll verwendet werden um alle Projekte zu verwalten,
und bedient sich wie docker compose:
mancd-e in den georg_at_home Ordner kann nun machen:./projectctl.bash up./projectctl.bash down./projectctl.bash build./projectctl.bash logsund weitere (schau mit./projectctl.bash help)
[!TIP] In dem Tutorial Creating a package wird schritt für schritt anhand Beispiele ein Paket erstellt.