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 版本中的新功能
内存管理改进
有关节点的自检信息
启动系统改进
Laid the groundwork for file-based logging and /rosout publishing
自 Bouncy 发布以来的变化
自 “Bouncy Bolson <Release-Bouncy-Bolson>” 发布以来的变化:
geometry2 -
tf2_ros::Buffer
API Change
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);
所有“rclcpp”和“rcutils”日志宏都需要分号。
See https://github.com/ros2/rcutils/issues/113 for details.
rcutils_get_error_string_safe()
和rcl_get_error_string_safe()
已被rcutils_get_error_string().str
和rcl_get_error_string().str
取代。See https://github.com/ros2/rcutils/pull/121 for details.
rmw - “rmw_init”API 更改
有两个新结构,
rcl_context_t
和rcl_init_options_t
,它们与rmw_init
一起使用。 init 选项结构用于将选项传递给中间件,是rmw_init
的输入。 上下文是一个句柄,它是rmw_init
函数的输出,用于识别每个实体与哪个初始化关闭周期相关联,其中“实体”是任何创建的东西,如节点、保护条件等。之所以在这里列出,是因为替代 rmw 实现的维护者需要实现这些新函数,才能让他们的 rmw 实现在 Crystal 中工作。
这是具有签名更改的函数:
此外,每个 rmw 实现都需要实现以下新功能:
下面是在 rmw 实现中需要进行最低限度的更改以遵守此 API 更改的示例:
rcl -
rcl_init
API Change与上面的
rmw
更改一样,rcl
中有两个新结构,分别称为rcl_context_t
和rcl_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 版本。