Interface ROS 2

Vous consultez actuellement la documentation pour la dernière version (2.5.4). Pour accéder à une autre version, cliquez sur le bouton "Changer de version" situé dans le coin supérieur droit de la page.

■ Si vous n’êtes pas sûr de la version du produit que vous utilisez, veuillez contacter le support technique Mech-Mind pour obtenir de l’aide.

Ce sujet présente la manière d’installer et d’utiliser l’interface ROS 2 pour Mech-Eye SDK.

Les dernières interfaces ROS 2 ne sont compatibles qu’avec Mech-Eye SDK 2.3.4 ou supérieur. Si vous souhaitez continuer à utiliser le programme ROS existant après l’installation de la dernière version de Mech-Eye SDK, veuillez modifier le programme ROS conformément au Guide de migration.

Prérequis

Pour utiliser l’interface ROS 2 de Mech-Eye SDK, les prérequis suivants doivent être satisfaits :

L’interface ROS 2 de Mech-Eye SDK a été testée avec les versions ROS 2 et Ubuntu ci-dessus. Les exemples de commandes de ce sujet se basent sur ces versions.

Installer les bibliothèques logicielles dépendantes

L’interface ROS 2 de Mech-Eye SDK dépend des bibliothèques logicielles suivantes :

  • OpenCV : version 3.0 ou supérieure

  • PCL : version 1.8 ou supérieure

  • (Si vous devez utiliser la commande ros2 launch) xterm : aucune exigence de version

    La commande ros2 launch permet de visualiser facilement les données de nuage de points obtenues dans RViz, sans nécessiter d’opérations supplémentaires.

Après avoir installé ROS Humble Hawksbill, exécutez les commandes suivantes pour installer les bibliothèques logicielles dépendantes :

sudo apt install libopencv-dev
sudo apt install ros-humble-cv-bridge
sudo apt install libpcl-dev
sudo apt install ros-humble-pcl-conversions
sudo apt install python3-colcon-common-extensions

Cloner et construire l’interface

Suivez ces étapes pour cloner et construire l’interface ROS 2 pour Mech-Eye SDK :

  1. Exécutez les commandes suivantes pour cloner l’interface ROS 2 :

    mkdir -p ~/colcon_ws/src && cd ~/colcon_ws/src
    git clone https://github.com/MechMindRobotics/mecheye_ros2_interface.git
  2. Exécutez la commande suivante pour configurer l’environnement :

    • Si ROS 2 a été installé via les paquets Debian :

      # Remplacez ".bash" par votre shell si vous n’utilisez pas bash
      # Les valeurs possibles sont : setup.bash, setup.sh, setup.zsh
      source /opt/ros/humble/setup.bash
    • Si ROS 2 a été compilé depuis les sources :

      # Remplacez ".bash" par votre shell si vous n’utilisez pas bash
      # Les valeurs possibles sont : setup.bash, setup.sh, setup.zsh
      . ~/ros2_humble/install/local_setup.bash
  3. Exécutez les commandes suivantes pour construire l’interface ROS 2 :

    cd ~/colcon_ws
    colcon build

Utiliser l’interface

Suivez ces étapes pour utiliser l’interface ROS 2 pour Mech-Eye SDK :

  1. (Facultatif) Modifiez les configurations dans le fichier de programmation C++ MechMindCamera (.cpp) dans ~/colcon_ws/src/mecheye_ros2_interface/src/ selon vos besoins :

    • Enregistrer automatiquement les fichiers obtenus en local : définissez la valeur de save_file sur true pour enregistrer automatiquement les fichiers obtenus dans le répertoire /tmp/.

    • Se connecter à un Caméra spécifique via l’adresse IP spécifiée :

      1. Définissez la valeur de camera_ip sur l’adresse IP de la caméra.

      2. Commentez la fonction if (!findAndConnect(camera)), et décommentez les lignes situées sous cette fonction.

    • Transformer le repère de référence : modifiez les valeurs de fx, fy, u et v pour transformer le repère de référence de la caméra vers un autre repère. Utilisez des quaternions pour la rotation.

      Après avoir modifié les fichiers de programmation C++ ou le fichier d’en-tête MechMindCamera (.h) dans le répertoire de travail, exécutez de nouveau la commande colcon build.
  2. Ouvrez un terminal et exécutez la commande suivante pour démarrer l’interface :

    • Utilisez la commande ros2 launch :

      source ~/colcon_ws/install/setup.bash
      ros2 launch ~/colcon_ws/src/mecheye_ros2_interface/launch/start_camera.py
    • Utilisez la commande ros2 run :

      source ~/colcon_ws/install/setup.bash
      ros2 run mecheye_ros_interface start
  3. Saisissez l’index du Caméra auquel vous souhaitez vous connecter selon les instructions, puis appuyez sur Entrée pour vous connecter au Caméra.

  4. Ouvrez un nouveau terminal et exécutez la commande suivante pour appeler un service. Remplacez service_name par le nom du service, ServiceName par le nom du fichier de service, parameter_name par le nom du paramètre de la caméra, et parameter_value par la valeur du paramètre à définir.

    La section Services fournit les commandes d’exemple de chaque service.
    source ~/colcon_ws/install/setup.bash
        ros2 service call [/service_name] [mecheye_ros_interface/srv/ServiceName] "{parameter_name: parameter_value}"

Sujets

Les sujets suivants sont fournis par l’interface ROS 2 de Mech-Eye SDK :

  • /mechmind/camera_info : paramètres intrinsèques de la caméra

  • /mechmind/stereo_color_image_left : l’image 2D stéréo gauche encodée en bgr8

  • /mechmind/stereo_color_image_left : l’image 2D stéréo gauche encodée en bgr8

  • /mechmind/stereo_color_image_right : l’image 2D stéréo droite encodée en bgr8

  • /mechmind/depth_map : la carte de profondeur encodée en image monocanal, le canal contenant un nombre flottant 32 bits

  • /mechmind/point_cloud : les données de nuage de points non texturé

  • /mechmind/textured_point_cloud : les données de nuage de points texturé

Services

Voici les services fournis par l’interface ROS 2 de Mech-Eye SDK ainsi que l’exemple de commande pour chacun.

Acquérir des données

  • capture_color_image : Acquérir l’image 2D.

    Exemple :

    ros2 service call /capture_color_image mecheye_ros_interface/srv/CaptureColorImage
  • capture_depth_map : Acquérir la carte de profondeur.

    Exemple :

    ros2 service call /capture_depth_map mecheye_ros_interface/srv/CaptureDepthMap
  • capture_point_cloud : Acquérir le nuage de points non texturé.

    Exemple :

    ros2 service call /capture_point_cloud mecheye_ros_interface/srv/CapturePointCloud
  • capture_textured_point_cloud : Acquérir le nuage de points texturé.

    Exemple :

    ros2 service call /capture_textured_point_cloud mecheye_ros_interface/srv/CaptureTexturedPointCloud
  • capture_stereo_color_images : Acquérir les images 2D des deux caméras 2D.

    Ce service n’est disponible que pour les modèles suivants : DEEP-GL, LSR S-GL, LSR L-GL et LSR XL-GL.

    Exemple :

    ros2 service call /capture_stereo_color_images mecheye_ros_interface/srv/CaptureStereoColorImages

Gérer les groupes de paramètres

  • get_all_user_sets : Obtenir les noms de tous les groupes de paramètres disponibles.

    Exemple :

    ros2 service call /get_all_user_sets mecheye_ros_interface/srv/GetAllUserSets
  • get_current_user_set : Obtenir le nom du groupe de paramètres actuellement sélectionné.

    Exemple :

    ros2 service call /get_current_user_set mecheye_ros_interface/srv/GetCurrentUserSet
  • set_current_user_set : Sélectionner le groupe de paramètres à utiliser.

    Ce service comporte 1 paramètre :

    • value (string) : le nom du groupe de paramètres à sélectionner.

    Exemple : Sélectionner le groupe de paramètres nommé 123.

    ros2 service call /set_current_user_set mecheye_ros_interface/srv/SetCurrentUserSet "{value: '123'}"
    Les noms de groupes de paramètres constitués uniquement de chiffres doivent être entourés de guillemets simples.
  • add_user_set : Ajouter un groupe de paramètres. Le groupe de paramètres nouvellement ajouté est automatiquement sélectionné comme groupe de paramètres courant.

    Ce service comporte 1 paramètre :

    • value (string) : le nom du groupe de paramètres à ajouter.

    Exemple : Ajouter un groupe de paramètres nommé 123.

    ros2 service call /add_user_set mecheye_ros_interface/srv/AddUserSet "{value: '123'}"
    Les noms de groupes de paramètres constitués uniquement de chiffres doivent être entourés de guillemets simples.
  • delete_user_set : Supprimer le groupe de paramètres spécifié.

    Ce service comporte 1 paramètre :

    value (string) : le nom du groupe de paramètres à supprimer.

    Exemple : Supprimer le groupe de paramètres nommé 123.

    ros2 service call /delete_user_set mecheye_ros_interface/srv/DeleteUserSet "{value: '123'}"
    Les noms de groupes de paramètres constitués uniquement de chiffres doivent être entourés de guillemets simples.

Obtenir les informations de la caméra

device_info : Obtenir les informations de la caméra actuellement connectée.

Les informations obtenues comprennent :

  • Modèle

  • Numéro de série

  • Version matérielle

  • Version du firmware

  • Adresse IP

  • Masque de sous-réseau

  • Méthode d’attribution de l’adresse IP

  • Numéro de port

Exemple :

ros2 service call /device_info mecheye_ros_interface/srv/DeviceInfo

Ajuster les paramètres de la caméra

À partir de Mech-Eye SDK 2.3.4, des méthodes sont fournies en fonction des types de données des paramètres de la caméra, et l’interface ROS 2 propose les services correspondants. Pour obtenir ou ajuster la valeur d’un paramètre de caméra, appelez le service correspondant au type de données du paramètre de caméra et saisissez le nom du paramètre de caméra comme paramètre du service. Les types de données et les noms des paramètres de la caméra se trouvent dans les fichiers d’en-tête du chemin d’installation de Mech-Eye SDK : /opt/mech-mind/mech-eye-sdk/include/area_scan_3d_camera/parameters/.

Les types de données suivants des paramètres de la caméra sont distingués :

  • _Int

  • _Float

  • _Bool

  • _Enum

  • _Roi

  • _Range

  • _FloatArray

  • get_int_parameter : Obtenir la valeur du paramètre de caméra de type _Int spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DExpectedGrayValue.

    ros2 service call /get_int_parameter mecheye_ros_interface/srv/GetIntParameter "{name: Scan2DExpectedGrayValue}"
  • set_int_parameter : Définir la valeur du paramètre de caméra de type _Int spécifié.

    Ce service comporte 2 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • value (int) : la nouvelle valeur du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre Scan2DExpectedGrayValue sur 101.

    ros2 service call /set_int_parameter mecheye_ros_interface/srv/SetIntParameter "{name: Scan2DExpectedGrayValue, value: 101}"
  • get_float_parameter : Obtenir la valeur du paramètre de caméra de type _Float spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DExposureTime.

    ros2 service call /get_float_parameter mecheye_ros_interface/srv/GetFloatParameter "{name: Scan2DExposureTime}"
  • set_float_parameter : Définir la valeur du paramètre de caméra de type _Float spécifié.

    Ce service comporte 2 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • value (float) : la nouvelle valeur du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre Scan2DExposureTime sur 40.1.

    ros2 service call /set_float_parameter mecheye_ros_interface/srv/SetFloatParameter "{name: Scan2DExposureTime, value: 40.1}"
  • get_bool_parameter : Obtenir la valeur du paramètre de caméra de type _Bool spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DToneMappingEnable.

    ros2 service call /get_bool_parameter mecheye_ros_interface/srv/GetBoolParameter"{name: Scan2DToneMappingEnable}"
  • set_bool_parameter : Définir la valeur du paramètre de caméra de type _Bool spécifié.

    Ce service comporte 2 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • value (bool) : la nouvelle valeur du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre Scan2DToneMappingEnable sur True.

    ros2 service call /set_bool_parameter mecheye_ros_interface/srv/SetBoolParameter "{name: Scan2DToneMappingEnable, value: True}"
  • get_enum_parameter : Obtenir la valeur du paramètre de caméra de type _Enum spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DExposureMode.

    ros2 service call /get_enum_parameter mecheye_ros_interface/srv/GetEnumParameter "{name: Scan2DExposureMode}"
  • set_enum_parameter : Définir la valeur du paramètre de caméra de type _Enum spécifié.

    Ce service comporte 2 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • value (string) : la nouvelle valeur du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre Scan2DExposureMode sur Timed.

    ros2 service call /set_enum_parameter mecheye_ros_interface/srv/SetEnumParameter "{name: Scan2DExposureMode, value: Timed}"
  • get_roi_parameter : Obtenir la valeur du paramètre de caméra de type _Roi spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DROI.

    ros2 service call /get_roi_parameter mecheye_ros_interface/srv/GetROIParameter "{name: Scan2DROI}"
  • set_roi_parameter : Définir la valeur du paramètre de caméra de type _Roi spécifié.

    Ce service comporte 5 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • x (uint32) : la nouvelle coordonnée x du coin supérieur gauche de la ROI.

    • y (uint32) : la nouvelle coordonnée y du coin supérieur gauche de la ROI.

    • width (uint32) : la nouvelle largeur de la ROI.

    • height (uint32) : la nouvelle hauteur de la ROI.

    Exemple : Définir la valeur du paramètre Scan2DROI sur 20, 20, 600, 800 (il s’agit d’une ROI de 600 px de large, 800 px de haut, dont le coin supérieur gauche est au pixel (20,20)).

    ros2 service call /set_roi_parameter mecheye_ros_interface/srv/SetROIParameter "{name: Scan2DROI, x: 20, y: 20, width: 600, height: 800}"
  • get_range_parameter : Obtenir la valeur du paramètre de caméra de type _Range spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre DepthRange.

    ros2 service call /get_range_parameter mecheye_ros_interface/srv/GetRangeParameter "{name: DepthRange}"
  • set_range_parameter : Définir la valeur du paramètre de caméra de type _Range spécifié.

    Ce service comporte 3 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • lower (int32) : la nouvelle valeur minimale de l’intervalle de valeurs du paramètre de la caméra.

    • upper (int32) : la nouvelle valeur maximale de l’intervalle de valeurs du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre DepthRange sur 200–1000.

    ros2 service call /set_range_parameter mecheye_ros_interface/srv/SetRangeParameter "{name: DepthRange, lower: 200, upper: 1000}"
  • get_float_array_parameter : Obtenir la valeur du paramètre de caméra de type _FloatArray spécifié.

    Ce service comporte 1 paramètre :

    • name (string) : le nom du paramètre de la caméra.

    Exemple : Obtenir la valeur du paramètre Scan2DHDRExposureSequence.

    ros2 service call /get_float_array_parameter mecheye_ros_interface/srv/GetFloatArrayParameter "{name: Scan2DHDRExposureSequence}"
  • set_float_array_parameter : Définir la valeur du paramètre de caméra de type _FloatArray spécifié.

    Ce service comporte 2 paramètres :

    • name (string) : le nom du paramètre de la caméra.

    • array (float64[]) : la nouvelle valeur du paramètre de la caméra.

    Exemple : Définir la valeur du paramètre Scan2DHDRExposureSequence sur [30.0, 35.5, 40.0].

    ros2 service call /set_float_array_parameter mecheye_ros_interface/srv/SetFloatArrayParameter "{name: Scan2DHDRExposureSequence, array: [30.0,35.5,40.0]}"

Cette page est-elle utile ?

Veuillez nous indiquer comment améliorer :

Nous accordons de l’importance à votre vie privée

Nous utilisons des cookies pour vous offrir la meilleure expérience possible sur notre site web. En continuant à utiliser le site, vous reconnaissez accepter l’utilisation des cookies. Si vous refusez, un cookie unique sera utilisé pour garantir que vous ne soyez pas suivi ou reconnu lors de votre visite sur ce site.