๐ ๏ธ OpenADSuite#
OpenADSuite provides tools and templates that streamline development workflows and improve code quality and maintainability. The subsections in the navigation bar describe the available tools, release process, and analysis capabilities in more detail.
Contribution Guidelines#
We welcome contributions across the OpenADS repositories and ask you to follow these guidelines:
Feel free to open issues and pull requests to report bugs, suggest improvements, or propose new features. Keep pull requests in the
Draftstate until they are ready for review to respect reviewersโ time.AI tools may assist with preparing issues or pull requests, but a human author must remain responsible for the submission and for addressing maintainer feedback and requested changes.
Adopt community best practices where possible. Use openads_demo_module as a template and integrate the provided CI workflows into your OpenADS modules.
For code contributions, follow the ROS 2 developer guide.
Development#
The guides below explain how to improve existing OpenADS modules and how to create new OpenADS modules. If you encounter problems in the development workflow, feel free to open an issue.
Improve Existing Modules#
Found a bug or want to add a feature to an existing OpenADS module? The following steps let you start coding and testing with minimal setup effort:
Clone either the OpenADStack or the OpenADSim repository, then locate the module you want to improve in one of the
docker-compose.ymlfiles.Append
-devto the image tag to switch from the deployment to a development image, which includes source code and all required dependencies for code development.Set
command: sleep infinityto keep the container running while you develop, compile and run the contained code.Start the Docker composition with
docker compose up.Use Visual Studio Code to attach to the running development container.
In the development container, navigate to the source code at
/docker-ros/ws/src/targetand start developing.Compile the source code with
CTRL-Bor by selectingF1โTasks: Run TaskโBuild with Build Type.Run the compiled code with the default command configured in
docker-ros.ymlby executingrun_default_command.
Example: Improve ackermann_trajectory_control
Clone the OpenADStack and the ackermann_trajectory_control repositories:
git clone --recursive https://github.com/openads-project/openadstack.git git clone --recursive https://github.com/openads-project/ackermann_trajectory_control.git
Change the following lines in the
ackermann-trajectory-controlDocker service:image: gitlab.ika.rwth-aachen.de:5050/fb-fi/its-modules/control/ackermann_trajectory_control:v1.3.0-dev # append '-dev' command: sleep infinity # replace the existing command to keep the development container running # mount the cloned `ackermann_trajectory_control` repository from your host into the container to make changes persistent volumes: - ../../../ackermann_trajectory_control:/docker-ros/ws/src/target
Run the OpenADStack:
cd openadstack docker compose up
Open Visual Studio Code, select
F1โDev Containers: Attach to Running Container...and select theopenadstack-control-ackermann-trajectory-controlcontainer.Open the source code folder (
/docker-ros/ws/src/target) in Visual Studio Code withOpen Folder(orCTRL-O).Start developing and compile the source code with
CTRL-BorF1โTasks: Run TaskโBuild with Build Type.Run the compiled code using the default command of the image:
run_default_command
You can also modify the start command as required. However, make sure to source the compiled install space (or open a new terminal with
TerminalโNew Terminal):source /docker-ros/ws/install/setup.bash ros2 launch ackermann_trajectory_control ackermann_trajectory_control.launch.py
Once your changes are ready for publication, push them to a fork of the original git repository and create a pull request in the OpenADS repository.
Create New Modules#
Want to add functionality that is not yet covered by an existing OpenADS module, or integrate open source software from another ecosystem into OpenADS? A growing distributed ecosystem makes it easier to compare and test different approaches. The following steps will help you create a new OpenADS module quickly, whether you are building new functionality or integrating an existing solution:
Use the openads_demo_module template repository to create a new GitHub repository in the organization of your choice by selecting the
โ Create a new repositorybutton in the upper-right corner.Select a name for the new repository. In most cases, this should match the name of the main ROS package in the repository and follow the ROS naming convention, for example
openads_test_module.Configure the recommended GitHub repository settings. This also allows CI workflows to push Docker images to the container registry in your GitHub organization or personal namespace.
Verify that the
docker-rosworkflow successfully created a development image in the repositoryโs Actions tab. If needed, useRe-Run All Jobsto restart the pipeline.Clone the repository to your workstation. Use the
--recursiveargument to include the development environment submodule, or rungit submodule update --initafterward if you cloned without it:git clone --recursive git@github.com:<your-organization>/openads_test_module.git
Open the cloned repository in Visual Studio Code:
code openads_test_moduleReopen the folder in a development container. This will build a local development image including ROS 2 and required dependencies for development:
F1โDev Containers: Rebuild and Reopen in ContainerTip
If building the development image fails, for example with
ERROR: failed to build: failed to solve: error getting credentials, pull the base image manually withdocker pull rwthika/ros2:jazzy, ensure that your Docker credentials helper is unlocked, and retry reopening the folder in the container.Visual Studio Code will automatically open the source code mounted from your locally cloned repository to
/docker-ros/ws/src/targetin the container.Compile the source code with
CTRL-BorF1โTasks: Run TaskโBuild with Build Type.Run the compiled code with the default command configured in
docker-ros.ymlby executingrun_default_command.You can remove the sample ROS packages
openads_demo_moduleandopenads_demo_module_interfacesand create a new package template that matches your needs withros2-pkg-create --template ros2_cpp_pkg ..Make sure to set a default command, which is automatically executed on start of deployment containers.
Run
.openads-dev-environment/scripts/generate_readme.pyto generate the top-level and package README files, resolve the remaining TODO placeholders, then rerun the generator until it produces no further changes. Run.openads-dev-environment/scripts/check_repository_consistency.pyto verify that the repository passes the consistency checks.Once your module is ready and passes all checks, create a release and open a pull request in the OpenADStack repository to suggest integrating the module.