Cristal Clemmys (cristal)

Crystal Clemmys est la troisième version de ROS 2.

Plates-formes prises en charge

Crystal Clemmys est principalement pris en charge sur les plateformes suivantes (voir REP 2000 pour plus de détails ):

Plateformes de niveau 1 :

  • Ubuntu 18.04 (Bionique)

  • Mac macOS 10.12 (Sierra)

  • Windows 10

Plateformes de niveau 2 :

  • Ubuntu 16.04 (Xénial)

Nouvelles fonctionnalités de cette version de ROS 2

Changements depuis la sortie de Bouncy

Changements depuis la version Bouncy Bolson :

  • geometry2 - Modification de l’API tf2_ros::Buffer

    tf2_ros::Buffer utilise maintenant rclcpp::Time, le constructeur nécessitant un shared_ptr pour une instance rclcpp::Clock. Voir https://github.com/ros2/geometry2/pull/67 pour plus de détails, avec un exemple d’utilisation :

    #include <tf2_ros/transform_listener.h>
    #include <rclcpp/rclcpp.hpp>
    ...
    # Assuming you have a rclcpp::Node my_node
    tf2_ros::Buffer buffer(my_node.get_clock());
    tf2_ros::TransformListener tf_listener(buffer);
    
  • Toutes les macros de journalisation rclcpp et rcutils nécessitent des points-virgules.

    Voir https://github.com/ros2/rcutils/issues/113 pour plus de détails.

  • rcutils_get_error_string_safe() et rcl_get_error_string_safe() ont été remplacés par rcutils_get_error_string().str et rcl_get_error_string().str.

    Voir https://github.com/ros2/rcutils/pull/121 pour plus de détails.

  • rmw - Modification de l’API ``rmw_init””

    Il y a deux nouvelles structures, rcl_context_t et rcl_init_options_t, qui sont utilisées avec rmw_init. La structure d’options init est utilisée pour transmettre des options au middleware et est une entrée pour rmw_init. Le contexte est un handle qui est une sortie de la fonction rmw_init est utilisé pour identifier à quel cycle init-shutdown chaque entité est associée, où une « entité » est quelque chose de créé comme un nœud, une condition de garde, etc.

    Ceci est répertorié ici car les mainteneurs d’implémentations rmw alternatives devront implémenter ces nouvelles fonctions pour que leur implémentation rmw fonctionne dans Crystal.

    C’est la fonction qui a eu un changement de signature :

    De plus, il y a ces nouvelles fonctions qui doivent être implémentées par chaque implémentation rmw :

    Voici un exemple de ce qui doit être modifié au minimum dans une implémentation rmw pour adhérer à ce changement d’API :

  • rcl - Modification de l’API rcl_init

    Comme le changement rmw ci-dessus, il y a deux nouvelles structures dans rcl appelées rcl_context_t et rcl_init_options_t. Les options d’initialisation sont transmises à rcl_init en tant qu’entrée et le contexte est transmis en tant que sortie. Le contexte est utilisé pour associer toutes les autres entités rcl à un cycle init-shutdown spécifique, ce qui fait que init et shutdown ne sont plus des fonctions globales, ou plutôt ces fonctions n’utilisent plus un état global et encapsulent à la place tous les états dans le type de contexte.

    Tout mainteneur d’une implémentation de bibliothèque cliente (qui utilise également rcl sous le capot) devra apporter des modifications pour fonctionner avec Crystal.

    Ces fonctions ont été supprimées :

    • rcl_get_global_arguments

    • rcl_get_instance_id

    • rcl_ok

    Ces fonctions avaient des changements de signature :

    Voici les nouvelles fonctions et types :

    Ces fonctions nouvelles et modifiées auront un impact sur la façon dont vous gérez init et shutdown dans votre bibliothèque cliente. Pour des exemples, regardez les PR rclcpp et rclpy suivants :

    Cependant, vous pouvez simplement continuer à proposer une initialisation et un arrêt globaux uniques dans votre bibliothèque cliente et stocker un seul objet de contexte global.

Problèmes connus

  • Une condition de concurrence dans Fast-RTPS 1.7.0 peut entraîner la chute des messages en cas de stress (Issue).

  • L’utilisation du paramètre QoS TRANSIENT_LOCAL avec rmw_fastrtps_cpp peut planter des applications avec des messages volumineux (Issue).

  • La communication entre les fournisseurs entre rmw_fastrtps_cpp et les autres implémentations ne fonctionne pas sous Windows (Issue).

  • Lors de l’utilisation d’OpenSplice (version < 6.9.190227) sur macOS et Windows, vous pouvez rencontrer des conflits de noms lorsque vous faites référence à des types de champs avec des noms d’autres packages si le même nom existe également dans le package actuel (Issue). En mettant à jour vers une version plus récente d’OpenSplice ainsi qu’au moins la troisième version de correctif de Crystal, le problème devrait être résolu. Sous Linux, la mise à jour vers les derniers packages Debian inclura la dernière version d’OpenSplice.