Catégorie : Tutoriels

  • Simuler un drone voilier avec Gazebo et ArduPilot

    Simuler un drone voilier avec Gazebo et ArduPilot

    Dans ce tutoriel, nous allons voir comment installer plusieurs logiciels (Gazebo, des plugins Gazebo, ArduPilot) et les faire fonctionner ensemble pour simuler un drone voilier et pouvoir le voir en 3D sur notre ordinateur, et pour pouvoir le contrôler automatiquement.

    Installer Ubuntu 24.04LTS

    Tout d’abord, il vous faut installer Ubuntu 24.04 LTS, aussi appelé Ubuntu Noble. En effet, les logiciels que nous allons utilisés sont pour la plupart conçus pour fonctionner avec Ubuntu 24.04 Lts.

    Vous pouvez ensuite vérifier que vous êtes sur la bonne version en lancant le terminal, puis en exécutant lsb_release -a.

    Ici, on est bien sur Ubuntu 24.04 LTS.

    Vérifiez bien que vous avez Ubuntu 24.04.4 LTS.

    Installer Gazebo

    Une fois Ubuntu installé, nous allons d’abord installer Gazebo. Gazebo est le logiciel qui va nous permettre de simuler notre drone, la physique, d’avoir une visualisation en 3D, etc. Ensuite, une fois Gazebo installé, nous allons installer les plugins de Gazebo nécessaires pour la simulation de drones voiliers (la mer, le vent, etc).

    Ajouter le Repository de ROS2

    Quand on installe un logiciel sur Ubuntu, on le fait avec la ligne de commande en faisant, par exemple, apt install mon-logiciel.

    Cette commande appelle le logiciel apt, fourni de base avec Ubuntu. Le logiciel apt essaye ensuite d’installer sur le système le logiciel demandé (mon-logiciel dans l’exemple fourni ici),

    Pour ce faire, apt parcours des listes de logiciels. Ces listes s’appellent des repositories apt.

    Tous les logiciels ne sont pas téléchargeables depuis les repositories apt présents de base dans Ubuntu. Il est parfois nécessaire de rajouter de nouveaux repositories apt pour installer certains logiciels.

    C’est le cas de Gazebo. Pour pouvoir installer Gazebo avec apt, il faut ajouter un repository apt qui contient Gazebo. C’est le cas du repository de ROS2. Bien que ce dernier soit prévu pour installer ROS2, il permet également d’installer Gazebo.

    sudo apt install software-properties-common 
    sudo add-apt-repository universe 
    sudo apt update && sudo apt install curl –y 
    export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') 
    curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" 
    sudo dpkg -i /tmp/ros2-apt-source.deb 

    Vérifier que le repository apt de ROS2 a bien été installé

    Ensuite, pour vérifier que le repository apt de ROS2 a bien été installé sur votre Ubuntu, vous pouvez regarder le contenu du dossier /etc/apt/sources.list.d, vous devriez voir ros2.sources.

    Installer Gazebo 

    Puis, on installe Gazebo. Plus précisément, on va installer la version « Harmonic » de Gazebo. C’est la version de Gazebo qui est prévue pour fonctionner avec la version « Jazzy » de ROS2.  Dans la commande qui suit, remplacez ${ROS_DISTRO} par “jazzy”, car Gazebo Harmonic est prévu pour fonctionner avec ROS Jazzy.

    sudo apt install ros-${ROS_DISTRO}-ros-gz 

    Vérifier que Gazebo soit bien installé

    Pour vérifier que Gazebo est bien installé, nous allons essayer de le lancer depuis le terminal.

    gz sim
    On doit pouvoir lancer Gazebo en faisant gz sim. Ici, on est bien sur Gazebo Harmonic comme indiqué en haut à droite.

    Installer les plugins Gazebo

    Créer un dossier dans lequel installer les plugins

    Nous allons maintenant créer un dossier quelque part sur notre ordinateur dans lequel nous allons télécharger les plugins Gazebo.

    On est libre de créer ce dossier n’importe où, mais le mieux est de faire dans son dossier utilisateur. Le dossier utilisateur est un dossier sur Ubuntu dans lequel sont stockés tous vos fichiers personnels. Si votre nom d’utilisateur sur Ubuntu est louis, votre dossier utilisateur sera de la forme /home/louis.

    Quand on ouvre le terminal, une variable d’environnement est automatiquement créée qui s’appelle $HOME. Si on affiche le contenu de cette variable, on obtient l’emplacement de notre dossier utilisateur.

    La variable $HOME contient l’emplacement du dossier utilisateur. Dans mon cas, mon nom d’utilisateur est ubuntu donc le dossier est /home/ubuntu.

    On va créer un dossier dans notre dossier utilisateur.

    Ça va être : $HOME/gz_ws.

    Dans ce dossier, gz_ws, on va créer un sous-dossier, src.

    À la fin, on doit donc avoir : $HOME/gz_ws/src.

    Les plugins sont en général des repositories Git. Ces repositories n’ont rien à voir avec les repositories apt qu’on a installés pour installer Gazebo. Un repository Git est simplement un dossier qui contient également toutes les modifications que le dossier a subit depuis le début. On peut cloner un repository Git, c’est-à-dire le télécharger ainsi que toutes ses modifications au fil du temps.

    Installer asv_sim 

    Asv_sim est un plugin pour Gazebo.

    Suivre les instructions d’installation : https://github.com/srmainwaring/asv_sim en prenant en compte les modifications suivantes :

    • Ne suivez que les commandes pour Ubuntu (pas pour Mac) ;
    • Ne sourcez pas le workspace (c’est-à-dire n’exécutez pas pour l’instant la dernière commande du README, celle qui est source install/setup.bash).

    En particulier, au moment de la commande colcon build … que le README.md d’asv_sim vous demande de lancer, rajoutez --packages-select asv_sim2 juste après colcon build, de sorte qu’à la fin vous avez :

    colcon build --packages-select asv_sim2 --symlink-install --merge-install --cmake-args \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DBUILD_TESTING=ON \
    -DCMAKE_CXX_STANDARD=17

    Le fait de rajouter l’argument --packages-select asv_sim2 à la commande colcon build... permet de ne builder uniquement que le package asv_sim. (Par défaut, colcon build build tous les packages dans le dossier src.) Pour l’instant, c’est le seul package que vous avez actuellement dans le dossier src, donc ça ne fait aucune différence, mais c’est un bon réflexe à avoir. 🙂

    Puis, créez un fichier dans votre dossier utilisateur, c’est-à-dire $HOME, que vous appelerez, par exemple, « setup_gz.bash”. Dedans, copiez-coller le code de: https://github.com/srmainwaring/asv_sim?tab=readme-ov-file#set-environment-variables 

    Ne pas oublier de remplacer « GZ_VERSION=garden » par « GZ_VERSION=harmonic« .

    Rajoutez également, au tout DÉBUT, de quoi sourcer le fichier « setup.bash » dans votre dossier “gz_ws”. C’est-à-dire que vous rajoutez : « source $HOME/gz_ws/install/setup.bash« . Grâce à ça, à partir de maintenant, vous n’avez qu’à sourcer setup_gz.bash et non plus /opt/ros/jazzy/setup.bash.

    Ça veut dire quoi « sourcer » ? Sourcer un fichier veut dire qu’on va venir modifier les variables d’environnement du terminal actuel en exécutant un script. Une variable d’environnement est une variable que tous les programmes lancés depuis un même terminal peuvent accéder. Certaines variables d’environnement sont présentes de base, d’autres peuvent être rajoutées par vous (c’est ce qu’on fait en sourcant un nouveau fichier).

    En général, on source toujours un fichier avant de définir de nouvelles variables d’environnement.

    Dans le README d’asv_sim, inutile de suivre la partie “Usage” à partir de “Anemometor Sensor”, elle concerne des cas d’utilisation avancée après l’installation. 

    Installer asv_wave_sim 

    Faire la même chose avec: https://github.com/srmainwaring/asv_wave_sim.

    Au moment de build le plugin avec la commande qui commence par colcon build, rajoutez comme pour le plugin précédent l’argument --packages-select gz-waves1 pour ne builder que le plugin que vous venez de télécharger.

    Rajouter, à la fin du fichier “setup_gz.bash” que je vous avais demandé de créer, les commandes de : https://github.com/srmainwaring/asv_wave_sim?tab=readme-ov-file#set-environment-variables sauf les deux premières commandes (qui commencent par export`).

    Installer SITL_Models

    Clonez ce repository Git dans le même dossier gz_ws/src : https://github.com/ArduPilot/SITL_Models.

    Cette fois-ci, il n’y a rien à builder. 🙂

    Ajoutez ensuite à la fin du fichier setup_gz.bash des lignes permettant à Gazebo de trouver les ressources dans SITL_Models.

    Ici, j’ai créé au dessus une variable GZ_WS_DIR égale à $HOME/gz_ws pour simplifier les choses.

    Les instructions exactes sont données dans le fichier Catamaran.md présent dans le repo que vous venez de cloner (SITL_Models).

    Installer ardupilot_gazebo

    Nous allons également cloner ardupilot_gazebo dans le dossier gz_ws/src.

    C’est ce plugin qui permet à Gazebo et à Ardupilot SITL de communiquer ensemble.

    Clonez le repository, puis rendez-vous dans le dossier gz_ws et suivez les instructions du README pour installer le plugin.

    Pour le builder, on n’utilise pas colcon cette fois ci. À la place, on suit les instructions du README.

    1. On définit d’abord la variable d’environnement GZ_VERSION et on lui donne la valeur « harmonic », en rentrant la commande export GZ_VERSION="harmonic".
    2. Puis, on build le plugin sans passer par Colcon :
      cd ardupilot_gazebo
      mkdir build
      cd build
      cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo make -j4
    3. Vous êtes maintenant censé avoir un dossier build dans le dossier de votre plugin ardupilot_gazebo.

    Concernant la partie « Configure », contentez-vous de copier le contenu du code dans votre fichier setup_gz.bash à la fin de ce dernier, en vous assurant de modifier les chemins de fichiers pour qu’ils correspondent aux votres.

    export GZ_SIM_SYSTEM_PLUGIN_PATH=$HOME/gz_ws/src/ardupilot_gazebo/build:$GZ_SIM_SYSTEM_PLUGIN_PATH
    export GZ_SIM_RESOURCE_PATH=$HOME/gz_ws/src/ardupilot_gazebo/models:$HOME/gz_ws/src/ardupilot_gazebo/worlds:$GZ_SIM_RESOURCE_PATH

    Vérifier que les plugins soient bien installés

    Nous allons maintenant vérifier que nous avions bien installé les plugins.

    Pour cela, ouvrez un nouveau terminal, puis sourcez votre fichier “setup_gz.bash”, c’est-à-dire : « source $HOME/setup_gz.bash« . 

    Enfin, tester votre installation en lancant Gazebo avec les nouvelles fonctionnalités du plugin : gz sim -v4 -r catamaran_waves.sdf. Avant de lancer Gazebo, assurez-vous qu’aucune autre fenêtre de Gazebo ne soit ouverte.

    Gazebo et ses plugins sont bien installés.

    Installer ArduPilot SITL

    Cette page explique en détail comment installer ArduPilot SITL. SITL est la version d’ArduPilot destiné à être installée non pas sur un hardware d’autopilote, mais sur un ordinateur, afin de permettre la simulation.

    ArduPilot est différent de Gazebo. Par conséquent, ne l’installez pas dans le dossier gz_ws.

    Cette page en particulier donne plus de détails sur le processus d’installation d’ArduPilot SITL. Ceci dit, vous n’avez pas besoin de gitk ou de git-gui, juste de git que vous avez déjà.

    Il vous faut d’abord cloner la dernière version d’ArduPilot. À noter qu’ArduPilot est un logiciel différent de Gazebo. Donc, clonez ArduPilot dans un dossier à part, par exemple $HOME/ardupilot (c’est-à-dire à la racine de votre dossier utilisateur) ou encore $HOME/Documents/ardupilot).

    git clone --recurse-submodules --depth 1 https://github.com/ArduPilot/ardupilot.git

    Cette commande permet de cloner le repository Git, en excluant l’historique des modifications depuis le début, mais en incluant les submodules. Un submodule, c’est un repository Git qui est inclus dans un autre repository Git.

    Ensuite, il faut installer les packages dont dépend ArduPilot. Heureusement, il suffit d’exécuter un script qui fait tout ça automatiquement.

    Depuis le terminal, rendez-vous dans le dossier ardupilot, puis executez le script : Tools/environment_install/install-prereqs-ubuntu.sh, ne vous étonnez pas si le script vous pose des questions. Répondez simplement N à chaque question sauf celle qui vous propose d’installer de nouveaux packages, c’est-à-dire que vous ne voulez pas sourcer automatiquement l’environnement virtuel Python, que vous ne voulez pas l’autocomplétetion, etc. En gros, ça permet de ne rien modifier à votre terminal de base.

    Dernières vérifications

    Pour vérifier que tout fonctionne, lancez Gazebo depuis un terminal avec :

    source $HOME/setup_gz.bash
    gz sim -v 4 -r catamaran_waves.sdf

    Vous êtes censé voir le catamaran s’afficher avec les vagues.

    Depuis un autre terminal, lancez ArduPilot (la première fois va prendre du temps) :

    source ~/venv-ardupilot/bin/activate
    Tools/autotest/sim_vehicle.py -v Rover --model JSON --add-param-file=$HOME/gz_ws/src/SITL_Models/Gazebo/config/catamaran.param --map -w --console

    Puis, ajoutons du vent depuis un troisième terminal :

    gz topic -t /wind -m  gz.msgs.Vector3d -p "x:5, y:5, z:0"