Le ROS_DOMAIN_ID

Aperçu

Comme expliqué ailleurs, le middleware par défaut utilisé par ROS 2 pour la communication est DDS. Dans DDS, le principal mécanisme permettant à différents réseaux logiques de partager un réseau physique est appelé ID de domaine. Les nœuds ROS 2 sur le même domaine peuvent librement se découvrir et s’envoyer des messages, contrairement aux nœuds ROS 2 sur différents domaines. Tous les nœuds ROS 2 utilisent l’ID de domaine 0 par défaut. Pour éviter les interférences entre différents groupes d’ordinateurs exécutant ROS 2 sur le même réseau, un ID de domaine différent doit être défini pour chaque groupe.

Choisir un ID de domaine (version courte)

Le texte ci-dessous explique la dérivation de la plage d’ID de domaine à utiliser dans ROS 2. Pour ignorer cet arrière-plan et choisir un numéro sûr, choisissez simplement un ID de domaine compris entre 0 et 101 inclus.

Choisir un ID de domaine (version longue)

L’ID de domaine est utilisé par DDS pour calculer les ports UDP qui seront utilisés pour la découverte et la communication. Voir cet article pour plus de détails sur la façon dont les ports sont calculés. En se souvenant de notre réseau de base, le port UDP est un entier 16 bits non signé. Ainsi, le numéro de port le plus élevé pouvant être attribué est 65535. En faisant quelques calculs avec la formule de l’article ci-dessus, cela signifie que l’ID de domaine le plus élevé pouvant être attribué est 232, tandis que le plus bas pouvant être attribué est 0.

Contraintes spécifiques à la plateforme

Pour une compatibilité maximale, certaines contraintes supplémentaires spécifiques à la plate-forme doivent être respectées lors du choix d’un ID de domaine. En particulier, il est préférable d’éviter d’allouer des ID de domaine dans la plage de ports éphémères du système d’exploitation. Cela évite d’éventuels conflits entre les ports utilisés par les nœuds ROS 2 et d’autres services réseau sur les ordinateurs.

Voici quelques notes spécifiques à la plate-forme sur les ports éphémères.

Par défaut, le noyau Linux utilise les ports 32768-60999 pour les ports éphémères. Cela signifie que les ID de domaine 0-101 et 215-232 peuvent être utilisés en toute sécurité sans entrer en collision avec des ports éphémères. La plage de ports éphémères est configurable sous Linux en définissant des valeurs personnalisées dans /proc/sys/net/ipv4/ip_local_port_range. Si une plage de ports éphémères personnalisée est utilisée, les nombres ci-dessus peuvent devoir être ajustés en conséquence.

Contraintes des participants

Pour chaque processus ROS 2 exécuté sur un ordinateur, un « participant » DDS est créé. Étant donné que chaque participant DDS occupe deux ports sur l’ordinateur, l’exécution de plus de 120 processus ROS 2 sur un ordinateur peut se répercuter sur d’autres ID de domaine ou sur les ports éphémères.

Pour comprendre pourquoi, considérez les ID de domaine 1 et 2.

  • L’ID de domaine 1 utilise les ports 7650 et 7651 pour la multidiffusion.

  • L’ID de domaine 2 utilise les ports 7900 et 7901 pour la multidiffusion.

  • Lors de la création du 1er processus (participant zéro) dans l’ID de domaine 1, les ports 7660 et 7661 sont utilisés pour l’unicast.

  • Lors de la création du 120e processus (119e participant) dans l’ID de domaine 1, les ports 7898 et 7899 sont utilisés pour la monodiffusion.

  • Lors de la création du 121e processus (120e participant) dans l’ID de domaine 1, les ports 7900 et 7901 sont utilisés pour la monodiffusion et chevauchent l’ID de domaine 2.

Si l’on sait que l’ordinateur ne sera jamais que sur un seul ID de domaine à la fois et que l’ID de domaine est suffisamment bas, il est prudent de créer plus de processus ROS 2 que cela.

Lorsque vous choisissez un ID de domaine proche du haut de la plage des ID de domaine spécifiques à la plate-forme, une contrainte supplémentaire doit être prise en compte.

Par exemple, supposons un ordinateur Linux avec un ID de domaine de 101 :

  • Le processus zéro ROS 2 sur l’ordinateur se connectera aux ports 32650, 32651, 32660 et 32661.

  • Le premier processus ROS 2 sur l’ordinateur se connectera aux ports 32650, 32651, 32662 et 32663.

  • Le 53e processus ROS 2 sur l’ordinateur se connectera aux ports 32650, 32651, 32766 et 32767.

  • Le 54e processus ROS 2 sur l’ordinateur se connectera aux ports 32650, 32651, 32768 et 32769, s’exécutant dans la plage de ports éphémères.

Ainsi, le nombre maximum de processus qui doivent être créés lors de l’utilisation de l’ID de domaine 101 sous Linux est de 54. De même, le nombre maximum de processus qui doivent être créés lors de l’utilisation de l’ID de domaine 232 sous Linux est de 63, car le numéro de port maximum est 65535.

La situation est similaire sur macOS et Windows, bien que les chiffres soient différents. Sur macOS et Windows, lorsque vous choisissez un ID de domaine de 166 (le haut de gamme), le nombre maximum de processus ROS 2 pouvant être créés sur un ordinateur avant de s’exécuter dans la plage de ports éphémères est de 120.

ID de domaine au calculateur de port UDP