Crystal Clemmys (crystal)

Crystal Clemmys 是 ROS 2 的第三个版本。

支持的平台

Crystal Clemmys 主要支持以下平台(有关完整详细信息,请参阅 REP 2000):

第 1 层平台:

  • Ubuntu 18.04 (Bionic)

  • Mac macOS 10.12 (Sierra)

  • Windows 10

第 2 层平台:

  • Ubuntu 16.04 (Xenial)

此 ROS 2 版本中的新功能

自 Bouncy 发布以来的变化

Bouncy Bolson 发布以来的变化:

  • geometry2 - tf2_ros::Buffer API 更改

tf2_ros::Buffer 现在使用 rclcpp::Time,其构造函数需要一个指向 rclcpp::Clock 实例的 shared_ptr。 有关详细信息,请参阅 https://github.com/ros2/geometry2/pull/67,其中包含示例用法:

#include <tf2_ros/transform_listener.h>
#include <rclcpp/rclcpp.hpp>
...
# Assuming you have a rclcpp::Node my_node
tf2_ros::Buffer buffer(my_node.get_clock());
tf2_ros::TransformListener tf_listener(buffer);
  • 所有 rclcpprcutils 日志记录宏都需要分号。

详情请参阅 https://github.com/ros2/rcutils/issues/113

  • rcutils_get_error_string_safe()rcl_get_error_string_safe() 已被 rcutils_get_error_string().strrcl_get_error_string().str 取代。

详情请参阅 https://github.com/ros2/rcutils/pull/121

  • rmw - rmw_init API 更改

有两个新结构,rcl_context_trcl_init_options_t,它们与 rmw_init 一起使用。 init options 结构用于将选项传递给中间件,是 rmw_init 的输入。

上下文是一个句柄,它是 rmw_init 函数的输出,用于识别每个实体与哪个 init-shutdown 循环相关联,其中“实体”是任何创建的东西,如节点、保护条件等。

之所以在此列出,是因为替代 rmw 实现的维护者需要实现这些新函数,才能让他们的 rmw 实现在 Crystal 中工作。

这是具有签名更改的函数:

此外,每个 rmw 实现都需要实现以下新功能:

下面是在 rmw 实现中需要进行最低限度的更改以遵守此 API 更改的示例:

  • rcl - rcl_init API 更改

与上面的 rmw 更改一样,rcl 中有两个新结构,分别称为 rcl_context_trcl_init_options_t。 init 选项作为输入传递到 rcl_init,上下文作为输出传递。 上下文用于将所有其他 rcl 实体与特定的 init-shutdown 循环关联,从而有效地使 init 和 shutdown 不再是全局函数,或者更确切地说,这些函数不再使用全局状态,而是将所有状态封装在上下文类型中。

客户端库实现(也在后台使用 rcl)的任何维护者都需要进行更改才能与 Crystal 配合使用。

这些函数已被删除:

  • rcl_get_global_arguments

  • rcl_get_instance_id

  • rcl_ok

这些函数的签名发生了变化:

以下是新功能和新类型:

这些新的和更改的功能将影响您在客户端库中处理初始化和关闭的方式。 例如,请查看以下“rclcpp”和“rclpy”PR:

但是,您可能只会继续在客户端库中提供单个全局初始化和关闭,并且只存储单个全局上下文对象。

已知问题

  • Fast-RTPS 1.7.0 中的竞争条件可能会导致消息在压力下丢失(问题)。

  • 将 TRANSIENT_LOCAL QoS 设置与 rmw_fastrtps_cpp 一起使用可能会导致带有大消息的应用程序崩溃(问题)。

  • rmw_fastrtps_cpp 与其他实现之间的跨供应商通信在 Windows 上不起作用(问题)。

  • 在 macOS 和 Windows 上使用 OpenSplice(版本 < 6.9.190227)时,如果当前包中也存在相同的名称,则在引用具有其他包中名称的字段类型时可能会遇到命名冲突(问题)。

通过更新到较新的 OpenSplice 版本以及至少 Crystal 的第三个补丁版本,问题应该可以解决。 在 Linux 上,更新到最新的 Debian 软件包将包含最新的 OpenSplice 版本。