Skip to main content

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

Développement local sur Linux avec X11 et pas Wayland

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 avec sudo 

 

Pour pouvoir utiliser le conteneur Docker depuis n'importe quel environnement, Linux, Windows ou Mac, 

  • Installer Visual Studio Code
  • Installer l'extension Dev Container

Avec PWA

Une première approche est de faire tourner les applications graphiques via une PWA sur l'hôte.

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://discourse.ros.org/t/mini-workshop-developing-and-teaching-ros-from-a-web-browser-using-dev-containers-and-pwas/31533

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 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/ 
  • 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 sur un serveur/PC distant

  • Installer le pack d'extensions Remote Development
  • se 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
  • Cloner le dépôt https://github.com/rplayground/sandbox
  • Ouvrir le dossier sandbox
  • Lancer Dev Container: Reopen in Container

Avec X11 Forwarding

 

Avec VNC

Remote-SSH: Connect to host...

https://articulatedrobotics.xyz/tutorials/docker/dev-containers/ 

Nav2, container, PWA  https://discourse.ros.org/t/repeatable-reproducible-and-now-accessible-ros-development-via-dev-containers/31398 https://github.com/ros-navigation/docs.nav2.org/blob/master/development_guides/devcontainer_docs/devcontainer_guide.md