Configurer Matlab et la Toolbox ROS pour Ned/Ned2

V.2.1

Configuration de la boîte à outils matlab ROS

Difficulté : moyenne

Temps : ~1h avec toutes les installations (peut varier en fonction de votre connexion internet).

Note

Ce tutoriel est fonctionnel à partir de :
La version v4.1.0 de la ned_ros_stack
La version v4.1.0 de Niryo Studio

Ce tutoriel est conçu pour Ned/Ned2. Si vous utilisez un Niryo One, cliquez-ici.

Objectifs

  • Préparer l’espace de travail Matlab afin de pouvoir l’utiliser pour les autres tutoriels liés à Matlab

  • Être capable d’utiliser Ned/Ned2 avec Matlab

  • Être capable de créer du contenu avec Ned/Ned2 et Matlab en utilisant ROS

Prérequis

  • Connaissances de base concernant Matlab

  • Connaissances de base en robotique et à propos de ROS

  • Être capable d’utiliser Ned/Ned2

Ce dont vous aurez besoin

  • Un Ned ou un Ned2

  • Un ordinateur sous Ubuntu ou Windows

  • Matlab (2014 ou ultérieur) installé sur celui-ci

  • Matlab ROS Toolbox

  • Une connexion Wi-Fi

Note

Pour réaliser ce tutoriel nous avons utilisé un ordinateur sous Windows10, avec Matlab2022a et un Ned2.

Installation des extensions

Il est nécessaire d’installer les extensions après les avoir téléchargées depuis le site de Matlab.

Matlab ros toolbox

Matlab ROS Toolbox

Matlab ROS Toolbox : Présentation

ROS Toolbox met à disposition une interface qui connecte Matlab et Simulink à ROS (et ROS 2), permettant alors de créer un réseau de nodes ROS.
Cette boite à outils est notamment composée de fonctions Matlab et de blocs Simulink pour importer, lire et analyser des données ROS stockées dans des fichiers “rosbag”. Elle permet d’établir une connexion avec un réseau ROS en cours d’exécution pour accéder à ses messages.

Astuce

Pour plus de détails, nous vous invitons à prendre connaissance du tutoriel officiel concernant ROS Toolbox.

Télécharger le package « ned_ros » depuis notre GitHub

Afin de contrôler Ned/Ned2 avec Matlab, il est nécessaire de générer des messages ROS sur le robot depuis Matlab. Pour ce faire, il faut tout d’abord installer le package « ned_ros » disponible sur notre GitHub.

Vous pouvez cloner le package « ned_ros » depuis notre GitHub

git clone https://github.com/NiryoRobotics/ned_ros.git

Ou le télécharger en ZIP

Extrayez le dans un dossier facile d’accès (exemple : D:/ned_ros) et vérifiez que le dossier s’appelle « ned_ros » (et pas « ned_ros_master »).
Stack ROS du Ned sur GitHub

Stack ROS du Ned sur GitHub

Configurer pyenv dans Matlab

Dans la fenêtre de commande Matlab, tapez :

pyenv

Si vous obtenez cette réponse :

Réponse dans la fenêtre de commande

Réponse dans la fenêtre de commande

Vous devez installer python3.9.

Installateur python

Installateur python

Note

N’oubliez pas de cocher la case « Add Python 3.9 to PATH »

Maintenant, dans la fenêtre de commande Matlab, tapez :

pyenv('Version'),('YOUR_PATH/python.exe')
Fenêtre de commande pour configurer pyenv

Fenêtre de commande pour configurer pyenv

Installation de Cmake version 3.19

Pour que Matlab puisse fonctionner comme nous l’attendons, il est nécessaire d’installer la version 3.19 de Cmake. Pour ce faire, vous pouvez télécharger la dernière version de Cmake. Téléchargez un dossier .zip et extrayez le.
Copiez le chemin du dossier /bin, puis allez dans les paramètres avancés de l’ordinateur et ajoutez une nouvelle variable pour coller le chemin.
Paramètres avancés

Configuration de CMake dans les paramètres avancés

Vous pouvez maintenant tester cette commande dans un terminal :

cmake --version
Invite de commande

Invite de commande après la configuration de CMake

Dans Matlab, essayez de compiler ces lignes :

folderpath = "/YOUR_PATH/ned_ros"
rosgenmsg(folderpath)

Si CMake n’est pas trouvé, tapez dans la fenêtre de commande Matlab :

>> oldPath = getenv('PATH');
>> newPath = strcat(oldPath,pathsep,'YOUR_PATH\bin'); %YOUR_PATH of the /bin folder
>> setenv('PATH',newPath);
>> system('cmake --version')

Maintenant, reessayez la compilation des deux lignes.

Configuration l’espace de travail pour la génération de messages et de services ROS sur le robot

Maintenant que vous avez le package ned_ros, il faut relier les messages et services du Ned/Ned2 à Matlab.

Pour ce faire, il est nécessaire de créer un script Matlab dans le dossier de votre choix dans lequel vous rédigerez le code ci-dessous. IL spécifie le chemin du package ned_ros qui contient l’ensemble des messages et services, puis il les génère.
folderpath = "/YOUR_PATH/ned_ros"
rosgenmsg(folderpath)

Vous devriez obtenir le message suivant :

Identifying message files in folder '/YOUR_PATH/ned_ros'..Done.
Validating message files in folder '/YOUR_PATH/ned_ros'..Done.
[12/12] Generating MATLAB interfaces for custom message packages... Done.
Running catkin build in folder '/YOUR_PATH/ned_ros/matlab_msg_gen_ros1/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log

To use the custom messages, follow these steps:

1. Add the custom message folder to the MATLAB path by executing:

addpath('/YOUR_PATH/ned_ros/matlab_msg_gen_ros1/win64/install/m')
savepath

1. Refresh all messages class definitions, which requires clearing the workspace, by executing:

clear classes
rehash toolboxcache

1. Verify that you can use the custom messages.
Enter "rosmsg list" and ensure that the output contains the generated
custom message types.

Etape 1 : utilisez la commande suivante dans la fenêtre de commandes

addpath('/YOUR_PATH/ned_ros/matlab_msg_gen_ros1/win64/install/m')
savepath

Note

Il est normal d’obtenir à ce moment un message d’avertissement. Vous pouvez passer à l’étape 2.

Etape 2 : utilisez une seconde commande

clear classes
rehash toolboxcache

Note

Il est normal d’obtenir à ce moment un message d’avertissement. Vous pouvez passer à l’étape 3.

Etape 3 : dernière commande

rosmsg list

Vous devriez maintenant voir l’ensemble des messages disponibles depuis Matlab, particulièrement ceux de niryo_robot.

niryo_robot_commander/ArmMoveCommand
niryo_robot_commander/GetFKRequest
niryo_robot_commander/GetFKResponse
niryo_robot_commander/GetIKRequest
niryo_robot_commander/GetIKResponse
niryo_robot_commander/JogShiftRequest
niryo_robot_commander/JogShiftResponse
niryo_robot_commander/PausePlanExecution
niryo_robot_commander/RobotCommand
niryo_robot_commander/ShiftPose
              (...)
niryo_robot_vision/DebugColorDetectionRequest
niryo_robot_vision/DebugColorDetectionResponse
niryo_robot_vision/DebugMarkersRequest
niryo_robot_vision/DebugMarkersResponse
niryo_robot_vision/ObjDetectionRequest
niryo_robot_vision/ObjDetectionResponse
niryo_robot_vision/TakePictureRequest
niryo_robot_vision/TakePictureResponse

Vous pouvez à présent commenter ces deux lignes, ce qui sera à faire à chaque fois que vous connecterez un nouveau robot.

Note

Vous pouvez également voir l’ensemble des services disponibles depuis Matlab en utilisant la commande « rosservice list ».

Matlab a maintenant accès aux messages et services ROS du Ned ! Vous pouvez à présent allumer le robot, le connecter à internet et configurer la connexion avec Matlab.

Connexion du Ned/Ned2 à internet et récupération de son adresse IP

Maintenant que les services et messages ROS du Ned sont disponibles sous Matlab, nous allons configurer la connexion avec Matlab en utilisant la boîte à outils « ROS Toolbox ».

Commencez par allumer le robot puis connectez le à internet pour récupérer son adresse IP.

La manière la plus simple de trouver l’adresse IP du robot est d’utiliser Niryo Studio. Retrouvez plus d’informations dans la documentation de Niryo Studio.

Note

Vous devez connecter Ned/Ned2 en mode Wi-Fi (not Hotspot).

Note

Pour la suite de ce tutoriel, nous utiliserons l’expession IP_OF_NED pour mentionner l’adresse IP du robot.

Configuration de la communication entre Ned/Ned2 et Matlab

Maintenant que Ned/Ned2 est connecté à internet, nous pouvons passer à la configuration de la communication avec Matlab.

Note

  • L’hôte est votre ordinateur avec Matlab avec l’adresse IP IP_HOST_COMPUTER,

  • Le robot est Ned/Ned2, avec l’adresse IP IP_OF_NED.

Pour définir cet environnement de travail, nous allons utiliser la fonction « setenv » de Matlab ROS Toolbox. Ajoutez ces deux lignes à la fin de votre script Matlab.

ipaddress = "http://IP_0F_NED:11311";
setenv('ROS_MASTER_URI','ipaddress')
setenv('ROS_IP','IP_HOST_COMPUTER')

Communiquer avec Ned/Ned2 depuis Matlab

Nous pouvons à présent utiliser Matlab et ROS Toolbox pour communiquer avec le robot.

Pour ce faire, nous devons initialiser ROS avec la fonction « rosinit » de ROS Toolbox.
« rosinit » démarre un ROS master qui correspond à un roscore. Il lance en parallèle un node global qui permet de se connecter à ce roscore avec une adresse IP par défault, c’est pourquoi nous allons directement passer en paramètre du rosinit() l’adresse IP de notre robot à la place de celle par défaut afin que celui-ci soit directement connecté au ROS master de Matlab.

Ajoutez la ligne suivante à votre script :

rosinit(ipaddress)
Si tout fonctionne correctement, vous devriez voir apparaître ceci :
Configuration rosinit

Configuration rosinit

Avant de déconnecter ou d’éteindre le robot, n’oubliez pas de taper « rosshutdown » dans la fenêtre de commande Matlab, pour couper la connexion avec ROS.

Si vous utilisez la commande « rostopic list », vous pouvez voir apparaître l’ensemble des topics du Ned.

Note

Vous êtes maintenant prêt à utiliser Matlab et ROS Toolbox pour contrôler Ned/Ned2 !