Comment utiliser OpenCV avec ROS2 en C++ et Python – French ROS Tutorial

18/04/2024

This tutorial is created by Robotics Ambassador 023 Enzo

Rosbotics Ambassador Program https://www.theconstruct.ai/rosbotics-ambassador/)
Cours: ROS2 Basics in 5 Days C++: https://app.theconstructsim.com/courses/133
Cours: ROS2 Basics in 5 Days Python: https://app.theconstruct.ai/courses/ros2-basics-in-5-days-humble-python-132

Introduction

Le but de ce tutoriel est d’apprendre à utiliser la library OpenCV dans vos nodes C++ et Python. OpenCV (Open Source Computer Vision Library) est une bibliothèque de traitement d’images open source. Elle offre des fonctionnalités avancées pour la manipulation, l’analyse et la reconnaissance d’images, y compris la détection d’objets, le suivi, la segmentation, et bien plus encore. Cette library est très répendu et peut s’averer utile pour de nombreuses applications en robotique. Nous allons donc voir ensemble comment utiliser OpenCV à l’aide de la library cv_bridge dans vos nodes ROS2 C++ et Python.

Prérequis: Utiliser une installation ROS2 avec Gazebo et OpenCV

Installation ROS2

Vous pouvez vous connecter au site TheConstruct pour accéder à des machines virtuelles préconfigurées avec une installation ROS. Pour lancer et tester le code, vous devez lancer la simulation du turtlebot3 sur gazebo. Pour faire cela, entez les commandes suivantes dans le terminal:

# Declare le model de turtlebot3 à simuler
export TURTLEBOT3_MODEL=waffle_pi
# Lance la simulation du turtlebot dans gazebo
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

Une fois la simulation du turtlebot3 lancée, celle-ci va publier sur le topic /camera/image_raw que nous allons utiliser dans les codes d’exemples.

Après avoir exécuté ces commandes, appuyez sur le bouton de l’interface gazebo et selectionnez Open Gazebo.

Vous devriez obtenir le résultat suivant:

Si vous voulez effectuer le tutoriel sur votre installation local, vous devez avoir ROS2 installé (https://docs.ros.org/en/humble/Installation.html), avoir configuré un workspace (https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.html) et avoir installé le turtlebot3.

# pour installer tous les packages du turtlebot3
# remplacez humble par votre distro ROS2

sudo apt-get install ros-humble-turtlebot3*
# n'oubliez pas d'exporter le modèle de Turtlebot3 que vous souhaitez utiliser
export TURTLEBOT3_MODEL=waffle_pi

Installer OpenCV

Par défault, toutes les installations de ROS incluent OpenCV mais on peut quand même verifier:

# Pour OpenCV C++ et Python
sudo apt install libopencv-dev python3-opencv

Partie 1: Créer un node C++ utilisant OpenCV

Nous allons commencer par créer un package ROS2 pour compiler et executer les nodes Python et C++ du tutorial.

cd ros2_ws/src/
# Créer le package
ros2 pkg create cv_bridge_tutorial

Nous allons maintenant créer le ficher C++ qui va contenir notre node:

cd ~/ros2_ws/src/cv_bridge_tutorial/src
touch cvbridge_example_cpp.cpp

Une fois le fichier créer, ouvrez le dans votre éditeur de code et copiez y le code suivant:

Dans ce node exemple, on souscrit à l’image publié par le turtlebot3 sur le topic /camera/image_raw, on utilise ensuite un cv_bridge pour la convertir dans un format attendu par les méthodes de la library OpenCV. On utilise la methode cv::threshold qui applique un thresholding à l’image (https://docs.opencv.org/4.x/db/d8e/tutorial_threshold.html). On reconvertit à l’aide du cv_bridge l’image dans le format Image message de ROS et on republit cette image sur le topic /processed_image_topic_cpp.

Pour l’encodage, si vous indiquez “passthrough” dans le parametre encoding du CV_bridge, l’image de sortie aura le même encodage que l’image d’entrée. Une grande partie des fonctions d’OpenCV attendent en entrée des images possèdant un de ces deux encodages: mono8 and bgr8.

On doit ensuite éditer le CMakeList.txt pour pouvoir indiquer les dépendences necessaire à la compilation du node:

Vous pouvez build votre workspace pour verifier si la configuration du CmakeList.txt fonctionne:

cd ~/ros2_ws
colcon build
source install/setup.bash

Partie 2: Créer un node Python utilisant OpenCV

Nous allons utiliser le package crée dans la partie précedante. On va d’abord créer un dossier script et y ajouter le fichier cvbridge_example_py.py qui va contenir notre node:

cd ~/ros2_ws/src/cv_bridge_tutorial/
mkdir scripts
cd scripts
touch cvbridge_example_py.py

Une fois le fichier créer, ouvrez le dans votre éditeur de code et copiez y le code suivant:

Une fois le node python écrit, on doit modifier le CmakeLists.txt créer dans la partie précédente pour pouvoir l’executer:

On peut maintenant compiler le package avec les commandes suivantes:

cd ~/ros2_ws
colcon build
source install/setup.bash

Partie 3: Tester les nodes écrits précedemment

Les deux nodes du tutorial souscrivent au topic /camera/image_raw publié par le turtlebot3. Vous pouvez verifier que la simulation lancée durant l’introduction publie toujours ce topic avec la commande ros2 topic echo ou en lançant rviz2. Un fichier de configuration rviz2 est enregistré à la racine du workspace si vous utilisez le Rosject du tutorial. Vous pouvez lancer rviz2 avec cette configuration en utilisant la commande suivante:

rviz2 -d ~/ros2_ws/src/tutorial_config.rviz

Rviz2 devrait s’ouvrir avec l’interface suivante:
alternative text
Vous pouvez lancer les nodes avec les commandes suivantes:

source install/setup.bash
# Pour le node python
ros2 run cv_bridge_tutorial cvbridge_example_py.py

Dans un autre terminal:

source install/setup.bash
# Pour le node C++
ros2 run cv_bridge_tutorial cvbridge_example_cpp

Vous devriez pourvoir visualiser le résultat des thresholding publiés par les nodes d’exemples:

 

Video Tutorial

Topics:
Masterclass 2023 batch2 blog banner

Check Out These Related Posts

0 Comments

Pin It on Pinterest

Share This