Configurer Ned/Ned2 pour ROS multi-machines
V.1.1
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.