Eloquent Elusor (eloquent)

Eloquent Elusor 是 ROS 2 的第五个版本。

支持的平台

Eloquent Elusor 主要支持以下平台:

第 1 层平台:

  • Ubuntu 18.04 (Bionic): amd64 and arm64

  • Mac macOS 10.14 (Mojave)

  • Windows 10 (Visual Studio 2019)

第 2 层平台:

  • Ubuntu 18.04 (Bionic): arm32

第 3 层平台:

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

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

有关 RMW 实现、编译器/解释器版本和系统依赖版本的更多信息,请参阅 REP 2000

安装

Install Eloquent Elusor

此 ROS 2 版本中的新功能

我们想重点介绍一些功能和改进:

在开发过程中,GitHub 上的 Eloquent 元票证 包含正在进行的高级任务的最新状态,以及具有更多详细信息的特定票证的引用。

自 Dashing 发布以来的变化

geometry_msgs

geometry_msgs/msg/Quaternion.msg 接口现在默认初始化为有效四元数,具有以下值:

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

以下是更多详细信息的拉取请求:https://github.com/ros2/common_interfaces/pull/74

静态转换广播器和侦听器现在在 /tf_static 主题上使用 QoS 持久性 transient_local

与 ROS 1 中的锁存设置类似,静态转换只需发布一次。

新侦听器将接收来自所有处于活动状态且之前已发布过的静态广播器的转换。

所有发布者都必须更新才能使用此持久性设置,否则转换侦听器将无法接收其消息。 有关更多详细信息,请参阅此拉取请求:https://github.com/ros2/geometry2/pull/160

rclcpp

API 使用 get_actual_qos() 中断

在 Dashing 中引入的 PublisherBaseSubscriptionBase 上的 get_actual_qos() 方法以前返回 rmw 类型 rmw_qos_profile_t,但这使得在创建其他实体时难以重用。

因此,它已更新为返回 rclcpp::QoS

现有代码将需要使用如果仍然需要 rmw 配置文件,则使用 rclcpp::QoS::get_rmw_qos_profile() 方法。 例如:

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());

直接中断而不是执行滴答操作的理由是,这是一个新功能,预计用户不会经常使用。 此外,由于只有返回类型在变化,添加具有不同返回类型的新函数将是执行弃用周期的唯一方法,而“get_actual_qos()”是最合适的名称,因此我们不得不为该方法选择一个不太明显的名称。

发布者和订阅类的 API 中断

为了简化发布者和订阅的构造,构造函数的 API 已更改。

不可能支持弃用周期,因为旧签名采用 rcl 类型,而新签名采用 NodeBaseInterface 类型,以便它可以获取现在需要的附加信息,并且无法仅从 rcl 类型获取所需的附加信息。

如果这有助于贡献者,新签名可能会被反向移植,但由于发布者和订阅几乎总是使用工厂函数或其他更高级别的 API 创建的,我们预计这对大多数用户来说不会成为问题。

请参阅原始 pr 了解更多详细信息,并在那里发表评论,如果这会导致问题:

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

编译器警告``add_on_set_parameters_callback`` 未使用的结果

自 Eloquent Patch Release 2 (2020-12-04) 以来

用户应保留``rclcpp::Node::add_on_set_parameters_callback`` 返回的句柄,否则他们的回调可能会被取消注册。 已添加警告以帮助识别未使用返回句柄的错误。

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

rmw

由于添加发布者和订阅选项导致 API 中断

rmw_create_publisher() 方法添加了一个类型为 const rmw_publisher_options_t * 的新参数。

此新结构包含新发布者的选项(除 typesupport、主题名称和 QoS 之外)。

rmw_create_subscription() 方法删除了一个参数 bool ignore_local_publications,并替换为类型为 const rmw_subscription_options_t * 的新选项。

ignore_local_publications 选项已移至新的 rmw_subscription_options_t 类型。

在两种情况下,新参数(指针)都可能永远不会为空,因此 rmw 实现应检查以确保选项不为空。 此外,应将选项复制到相应的 rmw 结构中。

有关更多详细信息,请参阅此拉取请求和相关拉取请求:

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

ros2cli

ros2msg 和 ros2srv 已弃用

CLI 工具 ros2msgros2srv 已弃用。 它们已被工具 ros2interface 取代,该工具还支持操作和 IDL 接口。 您可以运行 ros2 interface --help 以了解用法。

ros2node

服务客户端已添加到 ros2node 信息中。 作为该更改的一部分,Python 函数“ros2node.api.get_service_info” 已重命名为“ros2node.api.get_service_server_info”。

rviz

重命名“2D Nav Goal”工具

该工具已重命名为“2D Goal Pose”,默认主题已从“/move_base_simple/goal”更改为“/goal_pose”。

以下是相关的拉取请求:

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

TF2 缓冲区

TF2 缓冲区现在必须提供计时器接口。

如果没有提供计时器接口,则会引发异常。

例如:

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

ROS 命令行参数更改

为了应对日益复杂的界面,以及现在扩展的配置选项集,ROS CLI 语法已更改。 例如,使用 Dashing 语法的命令行如下:

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

使用 Eloquent (及更高版本)语法编写如下:

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

这种显式语法提供了新功能,例如单参数分配“–param name:=value”。 有关更多参考和原理,请查看“ROS 命令行参数设计文档<https://design.ros2.org/articles/ros_command_line_arguments.html>”__。

Warning

以前的语法已被弃用并将在下一版本中删除。

Known Issues

  • [ros2/rosidl#402] find_package(PCL) interferes with ROS interface generation. Workaround: invoke find_package(PCL) after rosidl_generate_interfaces().

  • [ros2/rclcpp#893] rclcpp::Context is not destroyed because of a reference cycle with rclcpp::GraphListener. This causes a memory leak. A fix has not been backported because of the risk of breaking ABI.

发布前的时间线

发布前的时间线

Mon. Sep 30th (alpha)

First releases of core packages available. Testing can happen from now on (some features might not have landed yet).

Fri. Oct 18th

API and feature freeze for core packages Only bug fix releases should be made after this point. New packages can be released independently.

Thu. Oct 24th (beta)

Updated releases of core packages available. Additional testing of the latest features.

Wed. Nov 13th (release candidate)

Updated releases of core packages available.

Tue. Nov 19th

Freeze rosdistro. No PRs for Eloquent on the rosdistro repo will be merged (reopens after the release announcement).