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):amd64arm64arm32

  • OpenEmbedded Thud (2.6) / webOS OSE:arm32x86

有关 RMW 实现、编译器/解释器版本和系统依赖版本的更多信息,请参阅``REP 2000 <https://www.ros.org/reps/rep-2000.html>`__。

安装

Install Eloquent Elusor

此 ROS 2 版本中的新功能

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

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

自 Dashing 发布以来的变化

geometry_msgs

The 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 and ros2srv deprecated

CLI 工具“ros2msg”和“ros2srv”已弃用。 它们已被工具“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 Buffer

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

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

For example:

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 command line arguments design document.

Warning

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

已知问题

  • [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.

发布前的时间线

发布前的一些里程碑:

9 月 30 日星期一(alpha 版) 核心软件包的首批发布可用。 从现在开始可以进行测试(某些功能可能尚未实现)。

10 月 18 日星期五 核心软件包的 API 和功能冻结 在此之后,只应发布错误修复版本。 新软件包可以独立发布。

10 月 24 日星期四(beta 版) 核心软件包的更新版本可用。 最新功能的额外测试。

11 月 13 日星期三(候选版本) 核心软件包的更新版本可用。

11 月 19 日星期二 冻结 rosdistro。 rosdistro 存储库上的 Eloquent 的任何 PR 都不会被合并(发布公告后重新打开)。