Eloquent Elusor (``éloquent””)

Eloquent Elusor est la cinquième version de ROS 2.

Plates-formes prises en charge

Eloquent Elusor est principalement pris en charge sur les plates-formes suivantes :

Plateformes de niveau 1 :

  • Ubuntu 18.04 (Bionic) : amd64 et arm64

  • Mac macOS 10.14 (Mojave)

  • Windows 10 (Visual Studio 2019)

Plateformes de niveau 2 :

  • Ubuntu 18.04 (Bionic) : arm32

Plateformes de niveau 3 :

  • Debian Stretch (9) : amd64, arm64 et arm32

  • OpenEmbedded Thud (2.6) / webOS OSE : arm32 et x86

Pour plus d’informations sur les implémentations RMW, les versions du compilateur/interpréteur et les versions des dépendances système, consultez REP 2000.

Nouvelles fonctionnalités de cette version de ROS 2

Quelques fonctionnalités et améliorations que nous aimerions souligner :

Au cours du développement, le meta ticket Eloquent sur GitHub contient un état à jour des tâches de haut niveau en cours ainsi que des références de tickets spécifiques avec plus de détails.

Changements depuis la sortie de Dashing

geometry_msgs

L’interface geometry_msgs/msg/Quaternion.msg s’initialise désormais par défaut sur un quaternion valide, avec les valeurs suivantes :

\[\begin{split}x = 0 \\ y = 0 \\ z = 0 \\ w = 1\end{split}\]

Voici la demande d’extraction pour plus de détails : https://github.com/ros2/common_interfaces/pull/74

Les diffuseurs et les écouteurs de transformation statique utilisent désormais la durabilité QoS transient_local sur le sujet /tf_static. Semblable au paramètre verrouillé dans ROS 1, les transformations statiques ne doivent être publiées qu’une seule fois. Les nouveaux auditeurs recevront des transformations de tous les diffuseurs statiques qui sont actifs et ont publié auparavant. Tous les éditeurs doivent être mis à jour pour utiliser ce paramètre de durabilité, sinon leurs messages ne seront pas reçus par les écouteurs de transformation. Voir cette pull request pour plus de détails : https://github.com/ros2/geometry2/pull/160

RCLCP

Rupture d’API avec get_actual_qos()

Introduite dans Dashing, la méthode get_actual_qos() sur PublisherBase et SubscriptionBase renvoyait auparavant un type rmw, rmw_qos_profile_t, mais cela rendait difficile la réutilisation avec la création d’autres entités. Par conséquent, il a été mis à jour pour renvoyer un rclcpp::QoS à la place.

Le code existant devra utiliser la méthode rclcpp::QoS::get_rmw_qos_profile() si le profil rmw est toujours requis. Par exemple:

void my_func(const rmw_qos_profile_t & rmw_qos);

/* Previously: */
// my_func(some_pub->get_actual_qos());
/* Now: */
my_func(some_pub->get_actual_qos()->get_rmw_qos_profile());

La raison pour casser cela directement plutôt que de faire un tic-tac est qu’il s’agit d’une nouvelle fonction et que les utilisateurs s’attendent à ce qu’elle soit rarement utilisée. De plus, puisque seul le type de retour change, l’ajout d’une nouvelle fonction avec un autre serait le seul moyen de faire un cycle de dépréciation et get_actual_qos() est le nom le plus approprié, nous serions donc obligés de choisir un moins nom évident pour la méthode.

Rupture d’API avec les classes d’éditeur et d’abonnement

Dans un effort pour rationaliser la construction des éditeurs et des abonnements, l’API des constructeurs a été modifiée.

Il serait impossible de prendre en charge un cycle de dépréciation, car l’ancienne signature prend un type rcl et la nouvelle prend le type NodeBaseInterface afin qu’elle puisse obtenir les informations supplémentaires dont elle a maintenant besoin, et il n’y a aucun moyen d’obtenir les informations supplémentaires nécessaire à partir du type rcl uniquement. La nouvelle signature pourrait éventuellement être rétroportée si cela aidait les contributeurs, mais comme les éditeurs et les abonnements sont presque toujours créés à l’aide des fonctions d’usine ou d’une autre API de niveau supérieur, nous ne nous attendons pas à ce que cela pose un problème pour la plupart des utilisateurs.

Veuillez consulter le pr original pour plus de détails et commenter si cela pose des problèmes :

https://github.com/ros2/rclcpp/pull/867

Avertissement du compilateur concernant le résultat inutilisé de add_on_set_parameters_callback

Depuis la version 2 du patch Eloquent (2020-12-04)

Les utilisateurs doivent conserver le descripteur renvoyé par rclcpp::Node::add_on_set_parameters_callback, sinon leur rappel peut être désenregistré. Un avertissement a été ajouté pour aider à identifier les bogues où la poignée retournée n’est pas utilisée.

https://github.com/ros2/rclcpp/pull/1243

rmw

Rupture de l’API en raison de l’ajout d’options d’éditeur et d’abonnement

La méthode rmw_create_publisher() a un nouvel argument ajouté de type const rmw_publisher_options_t *. Cette nouvelle structure contient des options (au-delà de la prise en charge du type, du nom du sujet et de la qualité de service) pour les nouveaux éditeurs.

La méthode rmw_create_subscription() avait un argument supprimé, bool ignore_local_publications, et remplacé par les nouvelles options de type const rmw_subscription_options_t *. L’option ignore_local_publications a été déplacée dans le nouveau type rmw_subscription_options_t.

Dans les deux cas, les nouveaux arguments, qui sont des pointeurs, ne peuvent jamais être nuls, et les implémentations de rmw doivent donc vérifier que les options ne sont pas nulles. De plus, les options doivent être copiées dans la structure rmw correspondante.

Consultez cette demande d’extraction et les demandes d’extraction associées pour plus de détails :

https://github.com/ros2/rmw/pull/187

Votre gagne-pain

ros2msg et ros2srv obsolètes

Les outils CLI ros2msg et ros2srv sont obsolètes. Ils ont été remplacés par l’outil ros2interface, qui prend également en charge les interfaces d’action et IDL. Vous pouvez exécuter ros2 interface --help pour l’utilisation.

Parce que c’est s2

Les clients de service ont été ajoutés aux informations de ros2node. Dans le cadre de ce changement, la fonction Python ros2node.api.get_service_info a été renommée ros2node.api.get_service_server_info.

voir

Outil renommé « Objectif de navigation 2D »

L’outil a été renommé “2D Goal Pose” et le sujet par défaut a été changé de /move_base_simple/goal à /goal_pose.

Voici la pull request associée :

https://github.com/ros2/rviz/pull/455

Tampon TF2

Les tampons TF2 doivent maintenant être dotés d’une interface de temporisation.

Si une interface de minuterie n’est pas donnée, une exception sera levée.

Par exemple:

tf = std::make_shared<tf2_ros::Buffer>(get_clock());
// The next two lines are new in Eloquent
auto timer_interface = std::make_shared<tf2_ros::CreateTimerROS>(
  this->get_node_base_interface(),
  this->get_node_timers_interface());
tf->setCreateTimerInterface(timer_interface);
// Pass the Buffer to the TransformListener as before
transform_listener = std::make_shared<tf2_ros::TransformListener>(*tf);

RCL

Modifications des arguments de la ligne de commande ROS

Pour faire face à une interface de plus en plus complexe, avec un ensemble désormais étendu d’options de configuration, la syntaxe ROS CLI a été modifiée. Par exemple, une ligne de commande utilisant la syntaxe Dashing comme :

ros2 run some_package some_node foo:=bar __params:=/path/to/params.yaml __log_level:=WARN --user-flag

est écrit en utilisant la syntaxe Eloquent (et au-delà) comme suit :

ros2 run some_package some_node --ros-args --remap foo:=bar --params-file /path/to/params.yaml --log-level WARN -- --user-flag

Cette syntaxe explicite offre de nouvelles fonctionnalités, comme l’affectation d’un seul paramètre --param name:=value. Pour plus de référence et de justification, consultez le document de conception des arguments de ligne de commande ROS.

Avertissement

L’ancienne syntaxe est obsolète et doit être supprimée dans la prochaine version.

Problèmes connus

  • [ros2/rosidl#402] find_package(PCL) interfère avec la génération de l’interface ROS. Solution : appelez find_package(PCL) après rosidl_generate_interfaces().

  • [ros2/rclcpp#893] rclcpp::Context n’est pas détruit à cause d’un cycle de référence avec ``rclcpp::GraphListener ``. Cela provoque une fuite de mémoire. Un correctif n’a pas été rétroporté en raison du risque de casser l’ABI.

Chronologie avant la sortie

Quelques étapes menant à la sortie :

Mon. Sep 30th (alpha)

Premières versions des packages de base disponibles. Les tests peuvent avoir lieu à partir de maintenant (certaines fonctionnalités n’ont peut-être pas encore été ajoutées).

Ven. 18 octobre

Gel de l’API et des fonctionnalités pour les packages principaux Seules les versions de correctifs de bogues doivent être effectuées après ce point. De nouveaux packages peuvent être publiés indépendamment.

Jeu. 24 octobre (bêta)

Versions mises à jour des packages de base disponibles. Tests supplémentaires des dernières fonctionnalités.

Épouser. 13 novembre (version candidate)

Versions mises à jour des packages de base disponibles.

Tue. Nov 19th

Geler rosdistro. Aucun PR pour Eloquent sur le repo rosdistro ne sera fusionné (réouverture après l’annonce de la sortie).