This template uses Docker for easy deployment and testing. It also includes GitHub Actions for CI/CD.
TLDR: Search for todo and update all occurrences to your desired name
-
Change LICENSE if necessary
-
Modify .pre-commit-config.yaml according to your need
-
Modify/add GitHub workflow status badges in README.md
-
Modify
todo-docker-user,todo-base-image,todo-image-name,todo-image-userin .env- .env will be loaded when you use docker compose for build/run/push
todo-docker-userrefers to your docker hub account usernametodo-base-imageis the image dockerfile is based on, such asnvidia/cuda:13.0.0-cudnn-devel-ubuntu24.04todo-image-userrefers to the default user inside the image, which is used to determine home folder
-
Modify the service name from
todo-service-nameto your service name in docker-compose.yml, add additional volume mounting options such as dataset directories -
Update Dockerfile and .dockerignore
- Existing dockerfile has screen & tmux config, oh-my-zsh, cmake, and other basic goodies
- Add any additional dependency installations at appropriate locations
-
build.sh to build and test the image locally in your machine's architecture
- The scripts uses buildx to build multi-arch image, you can disable this by removing redundant archs in docker-compose.yml
- Building stage does not have GPU access, if some of your dependencies need GPU, build them inside a running container and commit to the final image
-
run_container.sh or
docker compose up -dto run and test a built image- The service by default will mount the whole repository onto
CODE_FOLDERinside the container so any modification inside also takes effect outside, which is useful when you use vscode remote extension to develop inside a running container with remote docker context - You should be able to run and see GUI applications inside the container if
DISPLAYis set correctly when you run the script
- The service by default will mount the whole repository onto
-
push.sh to push the multi-arch image to docker hub
- You should have the docker hub repository set up before pushing
The template ROS package has both C++ and Python entrypoints. You can modify the package to suit your needs.
-
Find all occurrences of new_package in code using your IDE's global search feature and replace them with your new ROS package name, must follow underscore_naming_convention, these include:
- package.xml
- CMakeLists.txt
- setup.py
- Python sources under scripts and src (both under the package directory)
- C++ sources under include and src (both under the package directory)
- launch files
- shell script launch.sh to launch docker container and the ROS node
-
Find all occurrences of new_package or NewPackage in the naming of folders and source files and replace them with your package name, must follow underscore_naming_convention for python files and UpperCamelCase for non-entrypoint C++ files, these include:
- package directory
- Python library directory under src
- C++ library directory under include
-
Update name of launch files and their content, modify launch.sh accordingly since this will be the entry point of the ROS node from outside the container
-
Update name of ROS msg/action/srv files and update them in the corresponding CMakeLists.txt, C++, and Python source files
-
Update the package dependencies in package.xml and CMakeLists.txt
-
Find all occurrences of new_project namespace in C++ source files and replace them with your project name
-
Update ROS_MASTER_URI and ROS_IP in .env
- Run scripts/dev_setup.sh to setup the development environment
- This template currently only supports docker image for amd64 and arm64, if you want to support other architectures, please modify the build.sh script and docker-compose.yml accordingly