Interface ROS 1
Ce sujet présente l’installation et l’utilisation de l’interface ROS 1 pour Mech-Eye SDK.
|
Les dernières interfaces ROS 1 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 1 de Mech-Eye SDK, les prérequis suivants doivent être satisfaits :
-
Version ROS 1 : Il est recommandé d’utiliser la version stable Noetic Ninjemys.
-
Version Ubuntu : 20.04 est recommandée, qui est la plateforme cible principale de ROS Noetic Ninjemys.
| L’interface ROS 1 de Mech-Eye SDK a été testée avec les versions ROS 1 et Ubuntu ci-dessus. Les exemples de commandes de ce sujet se basent sur ces versions. |
-
Installer Mech-Eye SDK : Veuillez vous référer à Guide d’installation de Mech-Eye SDK (Ubuntu).
-
Installer les bibliothèques logicielles dépendantes de l’interface.
Installer les bibliothèques logicielles dépendantes
L’interface ROS 1 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
Après avoir installé ROS Noetic Ninjemys, exécutez les commandes suivantes pour installer les bibliothèques logicielles dépendantes :
sudo apt install libopencv-dev
sudo apt install ros-noetic-cv-bridge
sudo apt install libpcl-dev
sudo apt install ros-noetic-pcl-conversions
sudo apt install python3-colcon-common-extensions
Cloner et construire l’interface
Suivez ces étapes pour cloner et construire l’interface ROS 1 pour Mech-Eye SDK :
-
Exécutez les commandes suivantes pour cloner l’interface ROS 1 :
mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/src git clone https://github.com/MechMindRobotics/mecheye_ros_interface.git -
Exécutez la commande suivante pour configurer l’environnement :
source /opt/ros/noetic/setup.bash -
Exécutez les commandes suivantes pour construire l’interface ROS 1 :
cd ~/catkin_ws catkin_make
Utiliser l’interface
Suivez ces étapes pour utiliser l’interface ROS 1 pour Mech-Eye SDK :
-
(Facultatif) Modifiez la configuration dans le fichier de lancement start_camera (.launch) à l’emplacement ~/catkin_ws/src/mecheye_ros_interface/launch/ selon vos besoins :
-
Enregistrer automatiquement les fichiers obtenus en local : Définissez la valeur de
save_filesurtruepour enregistrer automatiquement les fichiers obtenus dans le répertoire /tmp/. -
Se connecter à un Caméra spécifique via l’adresse IP spécifiée :
-
Définissez la valeur de
camera_ipsur l’adresse IP de la caméra. -
Modifiez le fichier de programmation C++ MechMindCamera (.cpp) dans /catkin_ws/src/mecheye_ros_interface/src/ : Commentez la fonction
if (!findAndConnect(camera))et décommentez les lignes situées sous cette fonction.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 à nouveau la commande catkin_make.
-
-
-
Ouvrez un terminal et exécutez la commande suivante pour démarrer l’interface :
source ~/catkin_ws/devel/setup.bash roslaunch mecheye_ros_interface start_camera.launch -
Saisissez l’index du Caméra auquel vous souhaitez vous connecter selon l’instruction, puis appuyez sur Entrée pour vous connecter au Caméra.
-
Ouvrez un nouveau terminal et exécutez la commande suivante pour appeler un service. Remplacez service_name par le nom du service, parameter_name par le nom du paramètre de la caméra et parameter_value par la valeur de paramètre à définir.
La section Services fournit les commandes d’exemple de chaque service. source ~/catkin_ws/devel/setup.bash rosservice call [/service_name] "{parameter_name: parameter_value}"
Sujets
Les sujets suivants sont fournis par l’interface ROS 1 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 1 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 :
rosservice call /capture_color_image -
capture_depth_map : Acquérir la carte de profondeur.
Exemple :
rosservice call /capture_depth_map -
capture_point_cloud : Acquérir le nuage de points non texturé.
Exemple :
rosservice call /capture_point_cloud -
capture_textured_point_cloud : Acquérir le nuage de points texturé.
Exemple :
rosservice call /capture_textured_point_cloud -
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 :
rosservice call /capture_stereo_color_images
Gérer les groupes de paramètres
-
get_all_user_sets : Obtenir les noms de tous les groupes de paramètres disponibles.
Exemple :
rosservice call /get_all_user_sets -
get_current_user_set : Obtenir le nom du groupe de paramètres actuellement sélectionné.
Exemple :
rosservice call /get_current_user_set -
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.
rosservice call /set_current_user_set "{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.
rosservice call /add_user_set "{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.
rosservice call /delete_user_set "{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 :
rosservice call /device_info
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 1 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 :
|
-
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.
rosservice call /get_int_parameter "{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.
rosservice call /set_int_parameter "{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.
rosservice call /get_float_parameter "{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.
rosservice call /set_float_parameter "{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.
rosservice call /get_bool_parameter "{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.
rosservice call /set_bool_parameter "{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.
rosservice call /get_enum_parameter "{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.
rosservice call /set_enum_parameter "{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.
rosservice call /get_roi_parameter "{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)).
rosservice call /set_roi_parameter "{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.
rosservice call /get_range_parameter "{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.
rosservice call /set_range_parameter "{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.
rosservice call /get_float_array_parameter "{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].
rosservice call /set_float_array_parameter "{name: Scan2DHDRExposureSequence, array: [30.0,35.5,40.0]}" -