Skip to content

321 split docker image structure#340

Merged
geurto merged 186 commits intomainfrom
321-split-docker-image-structure
Jan 26, 2026
Merged

321 split docker image structure#340
geurto merged 186 commits intomainfrom
321-split-docker-image-structure

Conversation

@geurto
Copy link
Collaborator

@geurto geurto commented Nov 24, 2025

Description

Restructuring of repository to make it more modular and future-proof. Code and dependencies are split into separate Docker images, with a compose script to create configurations to run.

TO DO:

Platforms:

  • rcdt_franka
  • rcdt_husarion
  • rcdt_realsense
  • rcdt_velodyne
  • rcdt_zed
  • rcdt_ouster
  • rcdt_nmea

Real hardware:

  • Franka
  • Panther
  • Lynx
  • Realsense
  • Velodyne
  • Zed
  • Ouster
  • GPS

Libraries:

  • rcdt_gazebo
  • rcdt_tools
  • rcdt_moveit
  • rcdt_nav2

Testing:

  • Build new pytest structure
  • Franka core
  • Panther core
  • Lynx core
  • Sensors core
  • Franka Moveit
  • Nav2 Lidar
  • Nav2 GPS
  • Collision Monitor

Linting:

  • Build new linting structure
  • Ruff
  • Ty
  • pydoclint
  • clang-format
  • doxygen

Others:

  • GitHub Workflow
  • VScode Dev Container
  • Improve compose.py
  • expand compose script / create Python CLI tool to deal with configuration options
  • distribute pyproject.toml dependencies to relevant containers (instead of all dependencies installed in all containers)
  • parameter remaps (such as in nav2) based on namespaces set in compose.py script (if nav2 and panther/lynx --> set namespace_vehicle=panther/lynx)
  • Remove old files
  • Add pull script
  • Build Franka / Husarion separate

Existing problems:

  • Cannot launch panther and lynx (two times rcdt_husarion container).

Fixes: #321

Testing

Explain how you tested your changes.

Documentation

  • I have updated the documentation (if necessary)

Additional Notes

Any relevant screenshots, logs, or context.

@geurto geurto linked an issue Nov 24, 2025 that may be closed by this pull request
11 tasks
@Jelmerdw
Copy link
Collaborator

I think this branch is not correctly rebased from main. It shows changes in many files you didn't do, like images that are removed in the docs folder and removal of the pyflow folder. Can you fix this, so that there is more overview of what you actually changed?

@Jelmerdw Jelmerdw force-pushed the 321-split-docker-image-structure branch from c7b9671 to 2328932 Compare November 28, 2025 10:35
@Jelmerdw Jelmerdw marked this pull request as ready for review January 20, 2026 15:11
@geurto geurto marked this pull request as draft January 23, 2026 10:51
@geurto geurto marked this pull request as ready for review January 23, 2026 14:16
geurto and others added 22 commits January 23, 2026 15:58
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…rrors.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* Check disk space after building docker image.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Trigger workflow.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Trigger workflow without cache.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Test other clean up script.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Disable our clear disk space action.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Test clean-image-for-docker

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Test other action.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add our old method after new method.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix format.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Clean up code.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix reference.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

---------

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* Remove unused files

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Missing docs, but new working configuration management implementation of the launching of the platforms

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Update docstrings, still need to rename certain functions

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Add empty files in preparation for splitting up the robot.py file

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Split robot.py into separate files and extract global methods and variables from the Platform class and place them in different files

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Change name of file that describes its use better

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Make global methods in platform.py specific to the Platform class since they are only used there, and remove the old robot.py file

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Adjusted the code to pass the linting checks

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Move class-specific functions to the corresponding classes

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Generalise 'robot' to 'platform' where possible

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Fix naming in URDFs

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Rename package rcdt_messages to rcdt_interfaces to follow the classic ros2 naming standards more closely

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Minor updates for the code after Jelmer's review

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Move configuration context to EnvironmentConfig since that's accessible from everywhere, and change robots.launch.py to bringup.launch.py to follow ros2 naming standards more closely

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Rename '.platform' to '.platform_type' to make the code easier to read

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Update linting

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Remove unused images from repo

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Rename 'utils_conf' to 'utils_config'

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Improve naming

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Rename configuration files and add predefined configuration class

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Update rcdt_test file structure

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Move 'SKIP' to launch_utils and work through all remaining TODOs

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

---------

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* First steps.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* WIP

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix local odometry and visualize in Rviz and Vizanti.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Create 3D world form open street map.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add license.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add osm2world install script to docker file.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Remove zip after unpacking.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Show disk space in post install.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Check disk space before and after chown.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Undo changes.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Load 3D world based on map.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Restructure sdf files.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Use dynamic namespaces.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Us logger instead of printing.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix test.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Change osm2world properties to not add road marking materials since this results in height differences.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Only remap gps topic when using gps.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Skip joy gripper tests.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

---------

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…launch.py

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
… needs cuda/torch; added rcdt_tools

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…oded) properties

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
… restart rviz/gazebo without taking down the robot compose

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* Add missing docs from ospo checklist, template names still need to be updated

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

* Update placeholder values with the correct values, and add some extra text to the README.md

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>

---------

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* Generalize Nav2 tests.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Create simplified nav2_manager using nav2 commander API.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add GPS navigation and extend UI.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* WIP

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix tests.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Switch to using tf2 listener directly.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Apply feedback.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Try spin_once function with zero timeouts.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Apply feedback.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Apply feedback.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

---------

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Jelmerdw and others added 19 commits January 23, 2026 16:00
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…isplaying Gazebo UI

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
@geurto geurto force-pushed the 321-split-docker-image-structure branch from 293430d to 0939a2a Compare January 23, 2026 15:03
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>

![Panther](../img/panther/panther.png)

Regarding all vehicles, the general rule we apply for assigning IP addresses follows the following numbering order:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deze verandering kan weer weg (lijn 43 t/m 49), ik had dit naar bovenin verplaatst.

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
@geurto geurto merged commit 6eea97a into main Jan 26, 2026
11 checks passed
@geurto geurto deleted the 321-split-docker-image-structure branch January 26, 2026 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split docker image structure

4 participants