Configurer Ned/Ned2 pour ROS multi-machines

V.1.1

Configurer Ned pour ROS multi-machines

Difficulté : facile

Temps : ~15 min

Note

Ce tutoriel est fonctionnel à partir de :
La version v3.0.0 de la ned_ros_stack

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

Ce tutoriel a pour but de détailler les étapes à suivre pour contrôler Ned/Ned2 depuis un autre système, par exemple, un système Ubuntu natif avec ROS, ou une machine virtuelle Ubuntu.

Vous serez capable d’utiliser le ROS wrapper Python du Ned/Ned2 ou développer vos propres packages ROS sur une autre machine.

Pour commencer, vous allez avoir besoin d’avoir ROS Melodic installé sur votre système Ubuntu.

Avant d’aller plus loin, ces documentations pourraient vous être utiles :

Nous nous intéresserons au fonctionnement sur plusieurs machines, avec la Raspberry Pi 4 en tant que ROS Master (cela s’applique également à un ROS Master sur n’importe quel autre ordinateur, mais dans le cadre de ce tutoriel, par souci de clarté, nous considèrerons laRaspberry Pi 4 comme Master et l’autre machine sera appelée machine distante).

Premières étapes

Se connecter au Ned/Ned2

Il est nécessaire de se connecter à la Raspberry Pi 4 à l’intérieur du Ned/Ned2, en SSH. Vous pouvez suivre le tutoriel Se connecter à Ned/Ned2 en SSH.

Connaître ses adresses IP

Vous êtes connecté à la Raspberry Pi 4. Vous connaissez donc son adresse IP.

Pour connaître l’IP depuis votre ordinateur, utilisez :

ifconfig

Depuis chaque machine, assurez-vous d’avoir un retour positif à un ping de l’autre machine avec la commande suivante :

ping <ip address>

Pour plus d’informations, se référer au tutoriel Se connecter à Ned/Ned2 en SSH.

Modification des variables d’environnement ROS sur les deux machines

Ici, Ned/Ned2 sera le maître dans le système multi-machines.

Sur votre ordinateur :

Par défaut, la variable d’environnement « ROS_MASTER_URI » devrait être similaire à “http://localhost:11311”. Vous pouvez vérifier cette information en tapant :

printenv | grep ROS_MASTER_URI

Vous pouvez également vérifier la valeur de chaque variable d’environnement liée à ROS avec :

printenv | grep ROS

Il faut remplacer la valeur de ROS_MASTER_URI par l’adresse IP de la Raspberry Pi. Par exemple, si l’IP de la Raspberry Pi est 192.168.1.179, voici la commande :

export ROS_MASTER_URI=http://192.168.1.179:11311

Il faut également spécifier la valeur de ROS_IP, qui est l’IP privée de votre machine. Si l’IP de votre ordinateur est par exemple 192.168.1.84, entrez :

export ROS_IP=192.168.1.84

Sur le Ned/Ned2

Partons du principe que l’adresse de la Raspberry Pi est 192.168.1.179. Il faut donc définir la variable ROS_MASTER_URI comme suit :

export ROS_MASTER_URI=http://192.168.1.179:11311

De même pour ROS_IP :

export ROS_IP=192.168.1.179

Note

Chaque terminal utilisant ROS doit connaître ces variables. Vous pouvez les exporter chaque vois que vous ouvrez un terminal, ou les définir directement dans votre fichier .bashrc, comme détaillé ci-dessous.

Optionnel : quelques améliorations

Si vous travaillez souvent depuis la même machine distante avec la même Raspberry Pi en tant que Master, vous pouvez directement définir les variables d’environnement dans votre fichier .bashrc. Pour l’ouvrir, entrez :

sudo nano ~/.bashrc

Ajoutez simplement à la fin du fichier :

export ROS_MASTER_URI=http://<Master_IP_address>:11311
export ROS_IP=<Current_machine_IP_address>

Et procédez ainsi sur chaque machine.

Vous pouvez également définir un nom d’hôte à la place de l’adresse IP. Pour cela, il faut modifier /etc/hosts avec :

sudo nano /etc/hosts

Ajoutez au fichier une nouvelle ligne, par exemple : « rpi_machine 192.168.1.179 », et vous pourrez alors définir ROS_MASTER_URI avec :

export ROS_MASTER_URI=http://rpi_machine:11311

L’heure du test

Assurez-vous que ROS est lancé sur la Raspberry Pi 4. Vous pouvez simplement vous y connecter en SSH, stopper le programme actuel depuis le terminal Ned avec :

sudo service niryo_robot_ros stop

Puis lancer la stack ROS intégrale depuis le terminal Ned avec :

roslaunch niryo_robot_bringup niryo_ned_robot.launch

Si vous utilisez Ned2 lancez :

roslaunch niryo_robot_bringup niryo_ned2_robot.launch

Ensuite, sur la machine distante (votre ordinateur), entrez :

rosnode list

Si la configuration a été correctement effectuée, vous devriez à présent voir la liste des nodes en cours d’exécution sur le Master (la Raspberry Pi 4). Cela signifie que la connexion est établie.

Note

En exécutant la commande “rosnode list”, si vous obtenez l’erreur « ERROR: Unable to communicate with master! », cela signifie que le paramétrage n’a pas été effectué correctement, ou que l’installation ROS n’a pas été configurée correctement. Assurez-vous d’avoir correctement installé ROS, en suivant les pages du Wiki ROS qui concernent la configuration réseau pour une utilisation multi-machines, et suivez à nouveau les étapes de ce tutoriel.

A présent, vérifiez que vous pouvez souscrire et publier depuis votre ordinateur sur les topics hébergés par le Master. Vous pouvez echo l’état du mode apprentissage :

rostopic echo /niryo_robot/learning_mode/state

Vous devriez à présent voir l’état du mode apprentissage publié et mis à jour lorsque l’état du mode apprentissage change.

Important

Si vous ne pouvez pas echo un topic depuis votre ordinateur, assurez-vous d’avoir suivi chacune des précédentes étapes. Vérifiez également que les variables d’environnement sont bien définies sur les deux machines, et assurez-vous de lancer le roscore après avoir défini les variables d’environnement.

Vous pouvez à présent utiliser les outils de communication ROS, le ROS Wrapper Python, et accéder à l’ensemble des topics directement depuis votre machine distante !

Note

Si vous rencontrez des difficultés en suivant ce tutoriel, vous pouvez également retrouver la documentation officielle de ROS ici.