7.1.7-Composants et fonctionnalités courants de ROS

Communication distribuée dans ROS

ROS (Robot Operating System) est conçu comme un environnement de calcul distribué. Cela signifie qu'un système ROS en cours d'exécution peut être composé de plusieurs nœuds répartis sur plusieurs machines. Selon la configuration, n'importe quel nœud peut avoir besoin de communiquer avec n'importe quel autre nœud à tout moment.

Pour faciliter cela, ROS a des exigences réseau spécifiques :

  1. Il doit y avoir une connectivité bidirectionnelle complète entre toutes les machines sur tous les ports.
  2. Chaque machine doit s'annoncer en utilisant un nom qui peut être résolu par toutes les autres machines.

Étapes d'implémentation

1. Préparation

Avant de configurer ROS pour la communication distribuée, assurez-vous que les différents ordinateurs sont sur le même réseau. Idéalement, chaque ordinateur devrait se voir attribuer une adresse IP statique. Si vous utilisez des machines virtuelles, vous devez changer le paramètre de l'adaptateur réseau en « Mode pont » pour leur permettre d'interagir sur le même réseau.

2. Modifier les fichiers de configuration

Sur chaque ordinateur, vous devez modifier le fichier /etc/hosts pour y inclure les adresses IP et les noms d'hôtes des autres machines.

  • Sur la machine hôte :

    Ajoutez l'adresse IP et le nom d'hôte de la machine esclave.

    plaintext
    <Slave_IP_Address>    <Slave_Hostname>
  • Sur la machine esclave :

    Ajoutez l'adresse IP et le nom d'hôte de la machine hôte.

    plaintext
    <Host_IP_Address>    <Host_Hostname>

Après avoir mis à jour les fichiers /etc/hosts, utilisez la commande ping pour vérifier si les machines peuvent communiquer entre elles :

  • Vérifier l'adresse IP : Utilisez ifconfig ou ip addr show.
  • Vérifier le nom d'hôte : Utilisez hostname.

3. Configurer l'adresse IP de la machine hôte

Sur la machine hôte, vous devez configurer l'adresse IP en ajoutant les lignes suivantes au fichier ~/.bashrc :

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Host_IP_Address>

Ces lignes définissent ROS_MASTER_URI sur l'adresse IP de la machine hôte, ce qui indique à ROS où s'exécute le nœud master (roscore). ROS_HOSTNAME définit le nom d'hôte de la machine que ROS utilisera.

4. Configurer l'adresse IP de la machine esclave

Sur chaque machine esclave (vous pouvez avoir plusieurs esclaves), vous devez également modifier le fichier ~/.bashrc en ajoutant :

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Slave_IP_Address>

Cette configuration pointe chaque machine esclave vers le ROS master de l'hôte, leur permettant de rejoindre le réseau ROS.

Tester la configuration

1. Démarrer roscore sur la machine hôte

Sur la machine hôte, démarrez le nœud master ROS en exécutant :

bash
roscore

Cette étape est cruciale car le nœud master ROS gère la communication entre les différents nœuds du réseau ROS.

2. Tester la communication de l'hôte à l'esclave

  • Sur la machine hôte : Démarrez un nœud subscriber.
  • Sur la machine esclave : Démarrez un nœud publisher.

Vérifiez que les nœuds peuvent communiquer comme prévu.

3. Tester la communication de l'esclave à l'hôte

  • Sur la machine esclave : Démarrez un nœud subscriber.
  • Sur la machine hôte : Démarrez un nœud publisher.

À nouveau, vérifiez que la communication entre les nœuds fonctionne correctement.