Déploiement de TP de simulation avec Dev Container
On suppose qu'on veut déployer des TP qui font appel à des environnements de simulation, comme Gazebo ou URSim.
Pour faciliter le déploiement reproductible en général, et en particulier la réutilisation d'environnements de développement fournis par les développeurs, on utilise des conteneurs Docker. On a besoin d'accélération graphique via un GPU pour afficher ces simulations afin de ne pas surcharger le CPU. En revanche, on ne fait pas tourner d'algorithmes qui ont besoin de GPU, type Machine Learning.
Installation de Docker
On peut faire tourner le conteneur Docker sur n'importe quel environnement : Linux, Windows, Mac, ou sur un serveur
Développement local sur Linux avec X11 et pas Wayland
- Installer par exemple Ubuntu 24 ou Linux Mint 22 Mate
- Installer docker.io : le paquet debian de docker
sudo apt install -y docker.io --install-recommends
- Installer git
sudo apt install git
Développement local sur Windows avec X11 forwarding
- Vérifier les prérequis à WSL2 de votre Windows
- Installer Docker Desktop
- Vérifier que Docker est configuré et fonctionne avec WSL2
- Installer une distribution Linux via WSL2, par exemple Ubuntu 24 depuis le Microsoft Store
- Lancer un Terminal Ubuntu sur WSL2 (taper
ubuntu
depuis le menu démarrer) - Installer git
sudo apt install git
Développement sur serveur distant
- Installer une distribution Linux Server, par exemple Yunohost 12
- Installer docker.io : le paquet debian de docker
sudo apt install -y docker.io --install-recommends
- Créer un utilisateur YunoHost, lui donner un accès ssh et les droits appropriés (ne pas l'ajouter au groupe admin YunoHost)
- NE PAS ajouter votre user au groupe docker, car ça lui donnerait des droits admin
sudo usermod -aG docker $USER
- Lancer les commandes
docker
avecsudo
Pour pouvoir utiliser le conteneur Docker depuis n'importe quel environnement, Linux, Windows ou Mac,
Installer Visual Studio CodeInstaller l'extension Dev Container
Avec PWA
Une première approche est de faireséparer la partie calcul CPU de la partie graphique GPU. On fait tourner les calculs dans le Docker. On fait tourner les applications graphiques dans le navigateur Web de l'hôte via une PWAPWA, par exemple via gzweb
pour gazebo. Il nous faut alors un navigateur qui supporte l'accélération graphique des applications Web, seuls Chrome et dérivés supportent le WebGL :
- Installer Chrome sur
l'hôte.Windows ou Chromium sur Linux, de préférence depuis le PPA - Vérifier que WebGL est activé en vérifiant que le cube tourne sur https://get.webgl.org/
L'énorme avantage est que l'environnement de développement Docker n'a pas besoin d'accélération graphique. Pas besoin de perdre du temps à essayer de passer la carte graphique au conteneur. Un serveur sans accélération graphique suffit.
https://github.com/rplayground/sandbox
source /opt/ros/$ROS_DISTRO/setup.bash
source /usr/share/gazebo/setup.sh
GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(find /opt/ros/$ROS_DISTRO/share \
-mindepth 1 -maxdepth 2 -type d -name "models" | paste -s -d: -)
ros2 launch ./launch/security_demo_launch.py \
use_rviz:=False headless:=True
Pour un développement local
Installer Chrome sur Windows ouChromium sur Linux, de préférence depuis le PPAVérifier que WebGL est activé en vérifiant que le cube tourne surhttps://get.webgl.org/- Installer Visual Studio Code, sur Linux depuis Snap ou le PPA Microsoft Noter que Codium sur Linux ne supporte par l'extension Dev Container nécessaire
- Désactiver la télémétrie
- Installer Docker
avec le support de l'accélération graphique, cf. ci-dessus - Installer l'extension
Dev Container
. Noter que les extensions nécessaires au développement de ROS seront installées dans le VSCode-Server du container - Sur Windows : Lancer un Terminal Ubuntu sur WSL2 (taper ubuntu depuis le menu démarrer)
- Sur Linux : Lancer un Terminal
- Cloner le dépôt du Dev Container
git clone https://github.com/rplayground/sandbox
- Se placer dans le dossier
cd ~/sandbox
- Ouvrir le dossier dans Visual Studio Code
code .
- Lancer
Dev Container: Reopen in Container
Pour un développement distant sur un serveur/PC distant
- Installer le pack d'extensions
Remote Development
seSe connecter à la machine de développement distante depuis Visual Studio Code- Ouvrir la Command Palette
Ctrl+Shift+P
- Lancer
Remote-SSH: Connect to host...
- Configurer la connexion ssh par mot-de-passe ou clé si ce n'a pas encore été fait
- Ouvrir la Command Palette
- Cloner le dépôt https://github.com/rplayground/sandbox
- Ouvrir le dossier sandbox
- Lancer
Dev Container: Reopen in Container
Tester l'installation
Avec X11 Forwarding
On peut aussi afficher les fenêtres graphiques des applications qui tournent dans le Container directement sur l'hôte, par ex. gazebo-client
Pour cela il faut :
- Installer dans le conteneur le gestionnaire de fenêtres x11-apps (partie serveur)
- Avoir accès à un gestionnaire de fenêtres X11 sur l'hôte (partie client)
- Configurer correctement l'hôte et le Dev Container pour que le conteneur ait accès au client X11
- Cela peut poser des problèmes de sécurité car le conteneur risque d'avoir accès à tout ce qu'il se passe sur l'écran de l'hôte
On ne peut plus se contenter d'une distribution Linux Serveur type YunoHost pour le développement distant
Les calculs graphiques se font alors dans le container ??
Avec VNC
Remote-SSH: Connect to host...
https://articulatedrobotics.xyz/tutorials/docker/dev-containers/