埃卢索尔 (能言善辩)

能言善辩的埃卢索 是 ROS 2 的第五个版本。

支持的平台

Eloquent Elusor 主要支持以下平台:

1 级平台:

  • Ubuntu 18.04(仿生): amd64arm64

  • Mac macOS 10.14(Mojave)

  • Windows 10(Visual Studio 2019)

二级平台:

  • Ubuntu 18.04(仿生): arm32

三级平台:

  • Debian Stretch (9): amd64, arm64arm32

  • OpenEmbedded Thud (2.6) / webOS OSE: arm32x86

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

安装

安装 Eloquent Elusor

ROS 2 发布的新功能

我们想重点介绍几项功能和改进:

在开发过程中 雄辩的元票据 GitHub 上包含了正在进行的高级别任务的最新状态,并引用了包含更多细节的具体票单。

自 "潇洒 "发布以来的变化

几何参数

"(《世界人权宣言》) 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

静态变换广播员和听众现在使用 QoS 耐用性 瞬态本地/tf_static 主题。与 ROS 1 中的锁定设置类似,静态变换只需发布一次。新的侦听器将从所有存活且之前发布过的静态广播器接收变换。所有发布者都必须更新以使用此耐久性设置,否则变换监听器将无法收到他们的信息。更多详情请参见此请求: https://github.com/ros2/geometry2/pull/160

rclcpp

应用程序接口与 get_actual_qos()

在《潇洒走一回》中引入的 get_actual_qos() 上的 出版商基地SubscriptionBase 之前返回的是 rmw 类型、 rmw_qos_profile_t但这样就很难在创建其他实体时重复使用。因此,我们将其更新为返回一个 rclcpp::QoS 而不是

现有代码需要使用 rclcpp::QoS::get_rmw_qos_profile() 方法。例如

空白 my_func( rmw_qos_profile_t 及样品; rmw_qos);

/* 以前:*/
// my_func(some_pub->get_actual_qos());
/* 现在*/
my_func(some_pub->;get_actual_qos()->;get_rmw_qos_profile());

直接中断而不是使用 tick-tock 的理由是,这是一个新函数,预计用户不会经常使用。此外,由于只有返回类型发生了变化,因此添加一个不同的新函数将是进行弃旧周期的唯一方法,而 get_actual_qos() 是最合适的名称,因此我们不得不为该方法取一个不太明显的名称。

发布者和订阅类的应用程序接口中断

为了简化 "发布者 "和 "订阅 "的构造,构造器的应用程序接口发生了变化。

由于旧签名使用的是 rcl 类型,而新签名使用的是 节点基础接口 类型,以便获取它现在需要的附加信息,而仅从 rcl 类型无法获取所需的附加信息。如果新签名对贡献者有帮助的话,可以向后移植,但由于发布者和订阅几乎都是使用工厂函数或其他更高级的 API 创建的,我们预计这对大多数用户来说都不是问题。

请参阅原始 pr 了解更多细节,并在出现问题时发表评论:

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

编译器对 add_on_set_parameters_callback

自 Eloquent 第 2 版补丁发布以来 (2020-12-04)

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

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

rmw

由于增加了出版商和订阅选项,API 中断

"(《世界人权宣言》) rmw_create_publisher() 方法增加了一个新参数,其类型为 rmw_publisher_options_t *.这个新结构为新发布者提供了选项(除类型支持、主题名称和 QoS 之外)。

"(《世界人权宣言》) rmw_create_subscription() 方法去掉了一个参数、 bool 忽略本地出版物类型的新选项所取代。 rmw_subscription_options_t *.......。 忽略本地出版物 选项移至新的 rmw_subscription_options_t 类型

在这两种情况下,新参数都是指针,永远不会为空,因此 rmw 实现应检查选项是否为空。此外,还应将选项复制到相应的 rmw 结构中。

更多详情,请参阅此拉取请求和相关的拉取请求:

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

ros2cli

已弃用 ros2msg 和 ros2srv

CLI 工具 ros2msgros2srv 已被弃用。它们已被工具 ros2接口还支持动作和 IDL 接口。您可以运行 玫瑰2 界面 --帮助 供使用。

ros2node

ros2node info 中新增了服务客户端。作为该更改的一部分,Python 函数 ros2node.api.get_service_info 已更名为 ros2node.api.get_service_server_info.

rviz

更名为 "2D 导航目标 "工具

该工具更名为 "二维目标姿势",默认主题从 /move_base_simple/goal/goal_pose.

下面是相关的拉取请求:

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

TF2 缓冲区

TF2 缓冲区现在必须有一个定时器接口。

如果没有给出定时器接口,则会出现异常。

例如

tf = 标准::共享<;tf2_ros::缓冲器>;(获取时钟());
// 接下来的两行是 Eloquent 的新内容
汽车 定时器接口 = 标准::共享<;tf2_ros::创建定时器>;(
  ->;获取节点基本接口(),
  ->;获取节点定时器接口());
tf->;设置创建定时器接口(定时器接口);
// 像之前一样将缓冲区传递给变换监听器
变换监听器 = 标准::共享<;tf2_ros::变换监听器>;(*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

这种显式语法提供了新的功能,例如单参数赋值 --参数 名称:=值.如需更多参考资料和理由,请查阅 ROS 命令行参数设计文档.

警告

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

已知问题

  • [ROS2/ROSIDL#402] find_package(PCL) 会干扰 ROS 界面的生成。解决方法:调用 find_package(PCL) rosidl_generate_interfaces().

  • [ros2/rclcpp#893] rclcpp::Context 的参照周期不会被破坏。 rclcpp::GraphListener.这会导致内存泄漏。由于存在破坏 ABI 的风险,因此尚未向后移植修复程序。

发布前的时间表

发布前的几个里程碑:

星期一9 月 30 日(阿尔法)

第一批核心软件包已发布。从现在开始可以进行测试(某些功能可能还未上线)。

星期五10 月 18 日

冻结核心软件包的应用程序接口(API)和功能 在这之后只能发布错误修复版本。新软件包可以独立发布。

星期四10 月 24 日(测试版)

提供核心软件包的更新版本。对最新功能进行更多测试。

11 月 13 日星期三(候选发布)

提供核心软件包的更新版本。

星期二11 月 19 日

Freeze rosdistro.没有 Eloquent 在 rosdistro 将被合并(发布公告后重新开放)。