À propos des bibliothèques clientes ROS 2

Aperçu

Les bibliothèques clientes sont les API qui permettent aux utilisateurs d’implémenter leur code ROS. À l’aide de bibliothèques clientes, les utilisateurs ont accès aux concepts ROS tels que les nœuds, les sujets, les services, etc. Les bibliothèques clientes sont disponibles dans une variété de langages de programmation afin que les utilisateurs puissent écrire du code ROS dans le langage le mieux adapté à leur application. Par exemple, vous préférerez peut-être écrire des outils de visualisation en Python car cela accélère les itérations de prototypage, tandis que pour les parties de votre système qui sont concernées par l’efficacité, les nœuds pourraient être mieux implémentés en C++.

Les nœuds écrits à l’aide de différentes bibliothèques clientes peuvent partager des messages entre eux car toutes les bibliothèques clientes implémentent des générateurs de code qui permettent aux utilisateurs d’interagir avec les fichiers d’interface ROS dans la langue respective.

En plus des outils de communication spécifiques au langage, les bibliothèques clientes exposent aux utilisateurs les fonctionnalités de base qui font de ROS « ROS ». Par exemple, voici une liste de fonctionnalités généralement accessibles via une bibliothèque client :

  • Noms et espaces de noms

  • Temps (réel ou simulé)

  • Paramètres

  • Journalisation de la console

  • Modèle de filetage

  • Communication intra-processus

Bibliothèques clientes prises en charge

La bibliothèque cliente C++ (rclcpp) et la bibliothèque cliente Python (rclpy) sont toutes deux des bibliothèques clientes qui utilisent des fonctionnalités communes dans la RCL.

Le paquet rclcpp

La bibliothèque cliente ROS pour C++ (rclcpp) est l’interface idiomatique C++ orientée vers l’utilisateur qui fournit toutes les fonctionnalités du client ROS telles que la création de nœuds, l’éditeur et les abonnés. rclcpp se construit au-dessus de rcl et de rosidl API, et il est conçu pour être utilisé avec les messages C++ générés par rosidl_generator_cpp.

rclcpp utilise toutes les fonctionnalités de C++ et C++17 pour rendre l’interface aussi facile à utiliser que possible, mais puisqu’il réutilise l’implémentation dans rcl, il est capable de maintenir un comportement cohérent avec le d’autres bibliothèques clientes qui utilisent l”API rcl.

Le référentiel rclcpp est situé sur GitHub à ros2/rclcpp et contient le package rclcpp. L”API générée la documentation est ici :

api/rclcpp/index.html

Le paquet rclpy

La bibliothèque cliente ROS pour Python (rclpy) est l’équivalent Python de la bibliothèque cliente C++. Comme la bibliothèque cliente C++, rclpy s’appuie également sur l’API C rcl pour son implémentation. L’interface fournit une expérience Python idiomatique qui utilise des types et des modèles Python natifs comme des listes et des objets de contexte, mais en utilisant l’API rcl API dans l’implémentation, il reste cohérent avec les autres bibliothèques clientes en termes de parité des fonctionnalités et de comportement. En plus de fournir des liaisons idiomatiques Python autour de rcl API et Python pour chaque message, la bibliothèque cliente Python s’occupe du modèle d’exécution, en utilisant threading.Thread ou similaire pour exécuter les fonctions dans rcl API.

Comme C++, il génère du code Python personnalisé pour chaque message ROS avec lequel l’utilisateur interagit, mais contrairement à C++, il convertit finalement l’objet de message Python natif dans la version C du message. Toutes les opérations se produisent sur la version Python des messages jusqu’à ce qu’elles aient besoin d’être passées dans la couche rcl, à quel point elles sont converties dans la version C ordinaire du message afin qu’elle puisse être passée dans le ``rcl` ` C API. Ceci est évité si possible lors de la communication entre les éditeurs et les abonnés dans le même processus pour réduire la conversion vers et depuis Python.

Le référentiel rclpy est situé sur GitHub à ros2/rclpy et contient le package rclpy. L”API générée la documentation est ici :

api/rclpy/index.html

Maintenu par la communauté

Alors que les bibliothèques clientes C++ et Python sont gérées par l’équipe principale de ROS 2, les membres de la communauté ROS 2 maintiennent des bibliothèques clientes supplémentaires :

  • Ada Liaison Ada et outils pour ROS 2 - superposition d’espace de travail.

  • C rclc ne place pas de couche au-dessus de rcl mais complète rcl pour faire de rcl+rclc une bibliothèque client complète en C. Voir ` micro.ros.org <https://micro.ros.org/>`__ pour les tutoriels.

  • JVM et Android Liaisons Java et Android pour ROS 2.

  • _.NET Core, UWP et C# Ceci est une collection de projets (liaisons, générateur de code, exemples et plus) pour écrire des applications ROS 2 pour .NET Core et Norme .NET.

  • Node.js rclnodejs est un client Node.js pour le système d’exploitation Robot (ROS 2). Il fournit une API JavaScript simple et facile pour la programmation ROS 2.

  • Rust Il s’agit d’un ensemble de projets (la bibliothèque cliente rclrs, le générateur de code, des exemples, etc.) qui permet aux développeurs d’écrire des applications ROS 2 dans Rust.

Les bibliothèques clientes plus anciennes et non maintenues sont :

Fonctionnalité commune : la RCL

La plupart des fonctionnalités trouvées dans une bibliothèque cliente ne sont pas spécifiques au langage de programmation de la bibliothèque cliente. Par exemple, le comportement des paramètres et la logique des espaces de noms devraient idéalement être les mêmes dans tous les langages de programmation. Pour cette raison, plutôt que d’implémenter la fonctionnalité commune à partir de zéro, les bibliothèques clientes utilisent une interface de bibliothèque cliente ROS (RCL) de base commune qui implémente la logique et le comportement des concepts ROS qui ne sont pas spécifiques au langage. Par conséquent, les bibliothèques clientes n’ont besoin que d’encapsuler la fonctionnalité commune dans la RCL avec des interfaces de fonctions étrangères. Cela permet de garder les bibliothèques clientes plus fines et plus faciles à développer. Pour cette raison, la fonctionnalité RCL commune est exposée avec les interfaces C car le langage C est généralement le langage le plus facile à envelopper pour les bibliothèques clientes.

En plus de rendre les bibliothèques clientes légères, un avantage d’avoir le noyau commun est que le comportement entre les langages est plus cohérent. Si des modifications sont apportées à la logique/au comportement de la fonctionnalité dans la RCL principale - les espaces de noms, par exemple - toutes les bibliothèques clientes qui utilisent la RCL verront ces modifications reflétées. De plus, avoir le noyau commun signifie que la maintenance de plusieurs bibliothèques clientes devient moins de travail lorsqu’il s’agit de corrections de bogues.

La documentation de l’API pour la RCL peut être trouvée ici.

Fonctionnalité spécifique à la langue

Les concepts de bibliothèque client qui nécessitent des fonctionnalités/propriétés spécifiques à la langue ne sont pas implémentés dans la RCL mais sont implémentés dans chaque bibliothèque client. Par exemple, les modèles de threading utilisés par les fonctions « spin » auront des implémentations spécifiques au langage de la bibliothèque cliente.

Démo

Pour une présentation de l’échange de messages entre un éditeur utilisant rclpy et un abonné utilisant rclcpp, nous vous encourageons à regarder cette conférence ROSCon à partir de à 17h25 (voici les slides).

Comparaison avec ROS 1

Dans ROS 1, toutes les bibliothèques clientes sont développées « à partir de zéro ». Cela permet à la bibliothèque client Python ROS 1 d’être implémentée uniquement en Python, par exemple, ce qui présente des avantages tels que l’absence de compilation de code. Cependant, les conventions de dénomination et les comportements ne sont pas toujours cohérents entre les bibliothèques clientes, les corrections de bogues doivent être effectuées à plusieurs endroits et de nombreuses fonctionnalités n’ont jamais été implémentées que dans une seule bibliothèque cliente (par exemple, UDPROS).

Résumé

En utilisant la bibliothèque client ROS de base commune, les bibliothèques client écrites dans une variété de langages de programmation sont plus faciles à écrire et ont un comportement plus cohérent.