警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
ROS 2 Crystal Clemmys(代号 "crystal";2018 年 12 月)
Crystal Clemmys 是 ROS 2 的第三个版本。
支持的平台
Crystal Clemmys 主要支持以下平台(见 REP 2000 详细信息):
1 级平台:
Ubuntu 18.04(仿生)
Mac macOS 10.12(Sierra)
Windows 10
二级平台:
Ubuntu 16.04 (Xenial)
ROS 2 发布的新功能
改进内存管理
节点的自省信息
改进发射系统
自《弹跳》发布以来的变化
以来的变化 弹跳波尔松 释放:
几何2 -
tf2_ros::Buffer
API 更改tf2_ros::Buffer
现在使用rclcpp::Time
的构造函数需要一个共享_ptr
至rclcpp::Clock
实例。参见 https://github.com/ros2/geometry2/pull/67 的详细信息,以及使用示例:#include <tf2_ros/transform_listener.h>; #include <rclcpp/rclcpp.hpp>; ... # 假定您有一个 rclcpp::Node my_node tf2_ros::缓冲器 缓冲区(我的节点.获取时钟()); tf2_ros::变换监听器 tf_listener(缓冲区);
全部
rclcpp
和rcutils
日志宏需要分号。rcutils_get_error_string_safe()
和rcl_get_error_string_safe()
改为rcutils_get_error_string().str
和rcl_get_error_string().str
.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 实体与特定的 init-shutdown 循环关联起来,从而使 init 和 shutdown 不再是全局函数,或者说这些函数不再使用全局状态,而是将所有状态封装在上下文类型中。客户端库实现的任何维护者(也使用
rcl
引擎盖下)需要进行更改才能与 Crystal 协同工作。这些功能已被删除:
rcl_get_global_arguments
rcl_get_instance_id
rcl_ok
这些功能都有签名变化:
这些是新的功能和类型:
这些新函数和已更改的函数将影响您在客户端程序库中处理 init 和 shutdown 的方式。请参考以下示例
rclcpp
和rclpy
公关的:不过,您可以继续在客户端库中提供单一的全局启动和关闭功能,并只存储一个全局上下文对象。
已知问题
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 版本。