Eloquent Elusor(eloquent[14501]

*Eloquent Elusor*是ROS 2的第五个版本。 [14502]

支持的平台 [8234]

Eloquent Elusor 主要支持以下平台: [14503]

一级平台: [14235]

  • Ubuntu 18.04(Bionic):amd64``和``arm64 [14314]

  • Mac macOS 10.14 (Mojave) [14504]

  • Windows 10(Visual Studio 2019) [14315]

二级平台: [14236]

  • Ubuntu 18.04(Bionic):arm32 [14316]

Tier 3 平台: [14317]

  • Debian Stretch(9):amd64arm64arm32 [14318]

  • OpenEmbedded Thud(2.6)/ webOS OSE:arm32x86 [14319]

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

自 Dashing 发布以来的变化 [14525]

geometry_msgs [14526]

现在``geometry_msgs/msg/Quaternion.msg``接口的默认初始化为一个有效的四元数,具有以下值: [14527]

\[\begin{split}x = 0 \\ y = 0 \\ z = 0 \\ w = 1 `[14528] <http://fishros.org/page/calib/#/home?apihost=http://fishros.org:2023/ros2/calib&msgid=14528>`_\end{split}\]

这是有关更多细节的拉取请求: https://github.com/ros2/common_interfaces/pull/74 [14529]

静态变换广播器和监听器现在在``/tf_static``话题上使用QoS持久性``transient_local``。类似于ROS 1中的latched设置,静态变换只需要发布一次。新的监听器将从所有存活且在之前发布的静态广播器接收变换。所有发布者必须更新使用此持久性设置,否则它们的消息将不会被变换监听器接收。有关更多细节,请参阅此拉取请求: https://github.com/ros2/geometry2/pull/160 [14530]

rclcpp [14358]

与``get_actual_qos()``的API中断 [14531]

在Dashing中引入的``get_actual_qos()``方法在``PublisherBase``和``SubscriptionBase``上以前返回了一个rmw类型``rmw_qos_profile_t``,但这使得在创建其他实体时难以重用。因此,它已更新为返回一个``rclcpp::QoS``。 [14532]

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

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()``是最合适的名称的唯一方法,因此我们将被迫选择一个不太明显的方法名称。 [14534]

与发布者和订阅者类的API变更 [14535]

为了简化发布者和订阅者的构建过程,构造函数的API已进行了更改。 [14536]

不可能支持废弃周期,因为旧的签名接受rcl类型,而新的签名接受``NodeBaseInterface``类型,以便获得现在所需的附加信息,并且无法仅通过rcl类型获取所需的附加信息。如果这有助于贡献者,新的签名可能会被回溯,但由于发布者和订阅者几乎总是使用工厂函数或其他更高级别的API创建,我们不认为这对大多数用户会构成问题。 [14537]

请查看原始的PR了解更多详细信息,并在那里进行评论,如果这引起了问题: [14538]

[https://github.com/ros2/rclcpp/pull/867](https://github.com/ros2/rclcpp/pull/867) [14539]

编译器警告,关于未使用``add_on_set_parameters_callback``的结果 [14540]

自Eloquent Patch Release 2(2020-12-04)开始 [14541]

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

https://github.com/ros2/rclcpp/pull/1243 [14543]

rmw [14450]

由于新增发布者和订阅者选项而导致的API变更。 [14544]

rmw_create_publisher() 方法新增了一个类型为 const rmw_publisher_options_t * 的参数。这个新结构包含了用于新发布者的选项(除了类型支持、主题名称和QoS之外)。 [14545]

方法``rmw_create_subscription()``的一个参数被删除,即``bool ignore_local_publications``,并被新的类型为``const rmw_subscription_options_t *``的选项所取代。``ignore_local_publications``选项被移入新的``rmw_subscription_options_t``类型中。 [14546]

在这两种情况下,这些新的参数(指针类型)不能为null,因此rmw实现应该检查选项是否为null。另外,应将选项复制到相应的rmw结构中。 [14547]

请参阅此pull request和相关的pull requests获取更多详细信息: [14548]

https://github.com/ros2/rmw/pull/187 [14549]

ros2cli [14550]

ros2msg和ros2srv已弃用 [14551]

CLI工具``ros2msg``和``ros2srv``已被弃用。它们已被工具``ros2interface``替代,该工具还支持action和IDL接口。您可以运行``ros2 interface --help``获取用法信息。 [14552]

ros2node [14553]

Service客户端已添加到ros2node info。作为该更改的一部分,Python函数``ros2node.api.get_service_info``已更名为``ros2node.api.get_service_server_info``。 [14554]

rviz [14477]

重命名为'2D Nav Goal'工具 [14555]

该工具已更名为'2D Goal Pose',默认话题从``/move_base_simple/goal``更改为``/goal_pose``。 [14556]

这是相关的pull请求: [14557]

https://github.com/ros2/rviz/pull/455 [14558]

TF2 缓冲区 [14559]

现在必须为 TF2 缓冲区提供定时器接口。 [14560]

如果未提供定时器接口,将抛出异常。 [14561]

例如: [14562]

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 [14563]

ROS命令行参数更改 [14564]

为了应对日益复杂的接口,现在扩展了一组配置选项,ROS CLI的语法已经发生了变化。例如,使用Dashing语法的命令行如下: [14565]

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

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

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命令行参数设计文档[14567]

警告

旧的语法已被弃用,并将在下一个版本中移除。 [14568]

已知问题 [17821]

  • [ros2/rosidl#402] find_package(PCL) 干扰了ROS接口生成。解决方法:在 rosidl_generate_interfaces() 之后调用 find_package(PCL)[14569]

  • [ros2/rclcpp#893] rclcpp::Context 由于与 rclcpp::GraphListener 存在引用循环而无法销毁。这导致内存泄漏。由于破坏ABI的风险,修复尚未进行回溯。 [14486]

发布前的时间线 [14487]

发布前的一些关键节点: [14488]

周一,9月30日(α版) [14570]

核心软件包的首次发布可用。从现在开始可以进行测试(某些功能可能尚未完全实现)。 [14490]

周五,10月18日 [14571]

核心包API和功能冻结,此后只能进行错误修复发布。新包可以独立发布。 [14572]

周四,10月24日(β版) [14573]

可用的核心包更新版本。对最新功能进行额外测试。 [14494]

周三,11月13日(正式版本候选人) [14574]

可用的核心软件包更新版本。 [14498]

周二,11月19日 [14575]

冻结 rosdistro。rosdistro 仓库上关于 Eloquent 的 PR 不会被合并(发布公告后重新开放)。 [14576]