Containers
Prerequisites
- Ubuntu 18.04, 20.04, 22.04
- Feodora 34+
- For rootless use, Podman must be preinstalled
- You need
git
andmake
commands installed for ROS containers to work. - Optional but useful: Docker (can be installed for Debian/Ubuntu like dists with
make install-docker
in ROS containers) - Optional but useful: Nvidia Docker if you have a Nvidia GPU: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
SSH Keys
It can be configured in a number of ways, below is a suggestion:
Edit or create ~/.ssh/config
:
Host git.cs.lth.se Hostname git.cs.lth.se User git IdentityFile ~/.ssh/id_gitcs IdentitiesOnly yes
Generate your key:
ssh-keygen -t ed25519 -f ~/.ssh/id_gitcs
You need to add your key (~/.ssh/id_gitcs.pub
) to:
https://git.cs.lth.se/-/profile/keys
If you use a passphrase (simplifies access and the passphrase is stored in you keychain):
ssh-add ~/.ssh/id_gitcs
ROS Containers Quickstart
Valuable information about how to use ROS Containers exists in the repository readme: https://git.cs.lth.se/robotlab/ros-containers
Clone the ROS-containers repository
git clone git@git.cs.lth.se:robotlab/ros-containers.git cd ros-containers
Set options
There are many options, all start with use-
. All use commands modifies config.env
which you can modify in your favorite text editor aswell. Initially no config.env
exists, it will be copied from config.env.template
.
Quickstart for ROS Noetic and Docker:
make use-docker use-noetic
Quickstart for ROS Noetic and Nvidia docker (for GPU compute and acceleration):
make use-nvidia-docker use-noetic
Both above requires your user to have sudo
access. If your user belongs to the group docker
, you can instead use use-docker-rootless
and use-nvidia-docker-rootless
. Adding your user can normally be done with the command sudo usermod -a -G docker [your usernane]
.
If you intend to run this with a real robot:
make use-real
This adds –priviledged
flag to when running the docker image. This means that it would then no longer be fully sandboxed. This allows among other things unrestricted access to USB devices which is commonly required for cameras.
More options are available in the documentation: https://git.cs.lth.se/robotlab/ros-containers and more specifically you can take a peep inside Makefile
to see available commands.
Build and run
make run
This will build the base image, a special user image where your user is known and mapped and finally a container to run it all in.
By default your home directory is mapped to home
relative to ros-container repo root.
Resume and reset
Delete your container to change mappings or otherwise clean out your environment:
make delete
If you exit your container/restart your computer:
make resume
This command will resume your container. Note: if the container is resumed in one terminal and you resume again, you will effectly use the same terminal interface in multiple terminals (they will be mirrored).
Quickstart: Heron
You should have succeeded in building the container and is inside it for below to work.
Build the Heron Workspace
workspace init heron.rosinstall workspace install
Run Heron simulation
Two terminals or tmux/start roscore in background:
Terminal 1:
workspace shell mon launch heron_launch simulation.launch
A note of behaviour, if you exit the first terminal you created with make run
or make resume
all others will be terminated with the exit of the first.
Terminal 2:
New terminal running inside the container can be created with make terminal
roscore
Workspace Tips/Tricks
Using a custom rosinstall
Let say it is named custom.rosinstall
, replace the name with whatever you want.
- Copy your
custom.rosintall
to[ros-containers-path]/home
or if using shared-home, to your user home directory. - In your home directory, run
workspace init custom.rosinstall
- This will clone all the repos described in
custom.rosinstall
Note: workspace init
autocompletes when pressing the [TAB] key, it combines central rosinstalls with local ones in your current directory.
Switching branches
By default ~/catkin_ws
will contain a file current.rosinstall
which was used to initialize the workspace.
If you modify it, you can run workspace reimport
to apply the new branches and clone new repos that did not exist before.
If you are using ROS2, it would be called ~/colcon_ws
instead.
Note: workspace reimport
will not move or remove repos - you will have to do that manually.
Resources
WSL 2 GPU Drivers
VS Code Workflow
The files in the home folder (in the container) are by default available in home
. But instead of opening that folder in your VS Code, a more convenient way is to attach VS Code to the container. You need to have the Remote Development extension installed in VS Code for this to work.
To attach your VS Code to the running Docker container, choose the Docker panel and right-click on the container to get a context menu.