Crystal Clemmys (crystal
)
Crystal Clemmys 是 ROS 2 的第三个发布版本。
支持的平台
Crystal Clemmys 主要支持以下平台(完整详情请参阅 REP 2000):
一级平台:
Ubuntu 18.04 (Bionic)
Mac macOS 10.12 (Sierra)
Windows 10
二级平台:
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);
所有
rclcpp
和rcutils
的日志宏都需要分号。有关详细信息,请参见 https://github.com/ros2/rcutils/issues/113。
rcutils_get_error_string_safe()
和rcl_get_error_string_safe()
已被替换为rcutils_get_error_string().str
和rcl_get_error_string().str
。有关详细信息,请参见 https://github.com/ros2/rcutils/pull/121。
rmw -
rmw_init
API 变更引入了两个新的结构体:
rcl_context_t
和rcl_init_options_t
,它们与rmw_init
一起使用。初始化选项结构体用于向中间件传递选项,并作为rmw_init
的输入参数。上下文是一个句柄,是rmw_init
函数的输出,用于标识每个实体与哪个初始化-关闭周期相关联,其中“实体”可以是节点、守护条件等。将此列在此处是因为替代 rmw 实现的维护人员需要实现这些新函数,以使其 rmw 实现在 Crystal 中正常工作。
这是函数的签名发生变化的地方:
此外,每个 rmw 实现都需要实现以下这些新函数:
以下是一个示例,最小限度地更改 rmw 实现以符合此 API 更改:
rcl -
rcl_init
API变更和上面的``rmw``变更一样,在``rcl``中引入了两个新的结构体,分别是``rcl_context_t``和``rcl_init_options_t``。初始化选项被作为输入参数传递给``rcl_init``函数,而上下文则作为输出参数传递。上下文用于将所有其他的rcl实体关联到特定的初始化-关闭周期,有效地使初始化和关闭不再是全局函数,或者说这些函数不再使用全局状态,而是将所有状态封装在上下文类型中。
任何一个客户端库实现的维护者(也在底层使用``rcl``)都需要进行更改以适应Crystal。
以下函数已被移除:
rcl_get_global_arguments
rcl_get_instance_id
rcl_ok
这些函数的签名发生了变化:
以下是新的函数和类型:
这些新的和修改过的函数将影响您在客户端库中处理初始化和关闭的方式。有关示例,请查看以下
rclcpp
和rclpy
PR:但是,您可以继续在您的客户端库中提供单个全局初始化和关闭,并只存储一个全局上下文对象。
已知问题
Fast-RTPS 1.7.0 中的竞争条件可能会在压力下导致消息丢失(Issue)。
在使用 rmw_fastrtps_cpp 的 TRANSIENT_LOCAL QoS 设置时,可能会导致具有大消息的应用程序崩溃(Issue)。
在Windows上,rmw_fastrtps_cpp`与其他实现之间的跨供应商通信不起作用(`问题)。
在macOS和Windows上使用OpenSplice(版本 < 6.9.190227)时,如果引用其他软件包中具有相同名称的字段类型,可能会遇到命名冲突,如果当前软件包中也存在相同的名称(问题)。通过升级到更新版本的OpenSplice以及至少Crystal的第三个补丁版本,问题应该得到解决。在Linux上,更新到最新的Debian软件包将包含最新的OpenSplice版本。