Cristal Clemmys (cristal)
Table des matières
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
yorosbag2 <https://index.ros.org/r/rosbag2/githov-ros2-rosbag2/#crystal>yo__
chrysat <../../Concepts/Abbot-Ryat>h
Amélioration de la gestion de la mémoire
Informations d’introspection sur les nœuds
Améliorations du système de lancement
A jeté les bases de la « journalisation basée sur les fichiers et de la publication /rosout <https://github.com/ros2/rcl/pull/327> »__
Changements depuis la sortie de Bouncy
Changements depuis la version Bouncy Bolson :
geometry2 - Modification de l’API
tf2_ros::Buffertf2_ros::Bufferutilise maintenantrclcpp::Time, le constructeur nécessitant unshared_ptrpour une instancerclcpp::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
rclcppetrcutilsnécessitent des points-virgules.Voir https://github.com/ros2/rcutils/issues/113 pour plus de détails.
rcutils_get_error_string_safe()etrcl_get_error_string_safe()ont été remplacés parrcutils_get_error_string().stretrcl_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_tetrcl_init_options_t, qui sont utilisées avecrmw_init. La structure d’options init est utilisée pour transmettre des options au middleware et est une entrée pourrmw_init. Le contexte est un handle qui est une sortie de la fonctionrmw_initest 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_initComme le changement
rmwci-dessus, il y a deux nouvelles structures dansrclappeléesrcl_context_tetrcl_init_options_t. Les options d’initialisation sont transmises àrcl_initen 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
rclsous le capot) devra apporter des modifications pour fonctionner avec Crystal.Ces fonctions ont été supprimées :
rcl_get_global_argumentsrcl_get_instance_idrcl_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
rclcppetrclpysuivants :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.