Jazzy Jalisco (jazzy)

Jazzy Jalisco 是 ROS 2 的第十个版本。 以下是自上一个版本以来 Jazzy Jalisco 中重要变化和功能的重点介绍。 有关自 Iron 以来所有变化的列表,请参阅 long form changelog

支持的平台

Jazzy Jalisco 主要支持以下平台:

一级平台:

  • Ubuntu 24.04 (Noble): amd64 and arm64

  • Windows 10 (Visual Studio 2019): amd64

二级平台:

  • RHEL 9: amd64

三级平台:

  • macOS: amd64

  • Debian Bookworm: amd64

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

安装

Install Jazzy Jalisco

ROS 2 与 Gazebo 集成方式的变化

从 Jazzy Jalisco 开始,我们将简化 ROS 2 与 Gazebo 的集成方式。

对于每个 ROS 2 版本,都会有一个推荐的、受支持的 Gazebo 版本与该版本配套。

对于 Jazzy Jalisco,推荐的 Gazebo 版本将是 Harmonic。

为了使 ROS 2 软件包更容易使用 Gazebo 软件包,现在有 gz_*_vendor 软件包。

这些软件包是:

ROS 2 包可以通过在 package.xml 中添加依赖项来使用这些包中的功能,例如:

<depend>gz_math_vendor</depend>

然后在“CMakeLists.txt”中使用它们,例如:

find_package(gz_math_vendor REQUIRED)
find_package(gz-math)

add_executable(my_executable src/exe.cpp)
target_link_libraries(my_executable gz-math::core)

Note

仍然可以将其他版本的 Gazebo 与 Jazzy Jalisco 结合使用。但这些版本不会经过充分测试或与 ROS 2 集成。有关更多信息,请参阅 https://gazebosim.org/docs/harmonic/ros_installation

此 ROS 2 版本中的新功能

common_interfaces

此 ROS 2 版本中的新功能

添加了一条新消息,其中包含定义速度和转换速度所需的所有字段。

有关更多详细信息,请参阅 https://github.com/ros2/common_interfaces/pull/240

将 ARROW_STRIP 添加到 Marker.msg

向 Marker.msg 添加了新类型的标记“ARROW_STRIP”。

有关更多详细信息,请参阅 https://github.com/ros2/common_interfaces/pull/242

image_transport

支持惰性订阅者

有关更多详细信息,请参阅 https://github.com/ros-perception/image_common/issues/272

公开设置回调组的选项

有关更多详细信息,请参阅 https://github.com/ros-perception/image_common/issues/274

启用允许列表

添加参数,以便用户可以在运行时选择性地禁用 image_transport 插件。

有关更多详细信息,请参阅 https://github.com/ros-perception/image_common/issues/264

使用自定义 QoS 进行广告和订阅

允许用户在创建 image_transport 发布者和订阅者时传递自定义服务质量。

有关更多详细信息,请参阅 https://github.com/ros-perception/image_common/issues/288

已将 rclcpp 组件添加到 Republish

用户现在可以将 image_transport 重新发布器节点作为 rclcpp_component 启动。

有关更多详细信息,请参阅 https://github.com/ros-perception/image_common/issues/275

message_filters

TypeAdapters 支持

允许用户在 message_filters 中使用类型适配。

有关更多信息,请参阅 https://github.com/ros2/message_filters/pull/96

rcl

添加获取类型描述服务

实现 ~/get_type_description 服务,允许外部用户获取节点提供的每种类型的描述。

每个节点都根据 REP 2016 提供此服务。

有关更多详细信息,请参阅 https://github.com/ros2/rcl/pull/1052

rclcpp

服务的类型支持助手

添加了新的服务类型支持助手 rclcpp::get_service_typesupport_handle 以提取服务类型支持句柄。

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/pull/2209

rclpy

ParameterEventHandler

新类 ParameterEventHandler 允许我们通过参数事件监控和响应参数的变化。

有关更多详细信息,请参阅 https://github.com/ros2/rclpy/pull/1135

ros2cli

添加了 --log-file-name 命令行参数

现在可以使用 --log-file-name 命令行参数来指定日志文件名前缀。

ros2 run demo_nodes_cpp talker --ros-args --log-file-name filename

请参阅 https://github.com/ros2/ros2cli/issues/856 了解更多信息。

为订阅选项添加了 QoS

TopicStatisticsOptions 中添加了一个用户可设置的 QoS 参数,允许统计数据具有与订阅本身不同的 QoS。

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/pull/2323

添加客户端和服务计数

现在可以获取服务创建的客户端数量。

ros2action

支持 type 子命令

现在可以使用 ``type``子命令检查动作类型。

ros2 action type /fibonacci
action_tutorials_interfaces/action/Fibonacci

有关更多信息,请参阅https://github.com/ros2/ros2cli/pull/894。

rosbag2

服务记录和回放

现在可以使用 ros2bag 命令行界面记录和播放服务数据。

此功能基于 Service Introspection 构建,自 Iron Irwini 以来一直可用。 Service recording and display 增加了将服务数据记录到 bag 文件中的功能。 而 Service playing 可以从 bag 文件中播放该服务数据。

记录所有服务数据:

ros2 bag record --all-services

记录所有服务和所有主题数据:

ros2 bag record --all

从包文件中播放服务数据:

ros2 bag play --publish-service-requests bag_path

有关详细信息,请参阅 `设计文档<https://github.com/ros2/rosbag2/blob/rolling/docs/design/rosbag2_record_replay_service.md>`__

新的过滤模式

现在可以按主题类型进行过滤。

ros2 bag record --topic_types sensor_msgs/msg/Image sensor_msgs/msg/CameraInfo
ros2 bag record --topic_types sensor_msgs/msg/Image

更多详情请参阅 https://github.com/ros2/rosbag2/pull/1577https://github.com/ros2/rosbag2/pull/1582

播放器和录制器现在作为 rclcpp 组件公开

这允许在数据记录或回复期间使用进程内通信时进行“零拷贝”。

这可以在处理高带宽数据流时显著减少记录或回复期间的 CPU 负载,并有助于避免传输层的数据丢失。

它还提供了使用 YAML 配置文件来处理 rosbag2_transport::Playerrosbag2_transport::Recorder 可组合节点的能力。

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/tree/jazzy?tab=readme-ov-file#using-with-composition

添加了禁用录音机键盘控制的选项

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1607

在录制过程中使用中间件发送和接收来自 message_info 的时间戳

在可用的情况下,rosbag2 现在使用中间件提供的发送和接收时间戳。

这些时间戳更能说明数据的实际发送和接收时间。

请注意,目前仅支持将时间戳保存到包中(默认设置)用于 MCAP 文件。

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1531

为录制添加了压缩线程优先级选项

现在可以指定执行压缩的线程的优先级。

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1457

添加了按时间拆分现有 ros2 包的功能

在“StorageOptions”中添加了“start_time_ns”和“end_time_ns”,以在“ros2 bag convert”操作期间排除不在“[start_time;end_time]”中的消息。

更多详情请参阅 https://github.com/ros2/rosbag2/pull/1455

将序列化的元数据直接存储在 bag 文件中

rosbag2 始终将元数据存储在与 bag 文件关联的 metadata.yaml 文件中。

现在,元数据也存储在每个 bag 文件中,一次是在打开文件时,第二次是在关闭写入的 bag 文件时。

这允许 bag 文件自包含,并且在 rosbag2 播放器或第三方应用程序中无需 metadata.yaml 文件即可使用。

如果需要,仍然可以使用 ros2 bag reindex 来恢复 metadata.yaml 文件。

将 ROS_DISTRO 名称存储在元数据中

参见https://github.com/ros2/rosbag2/pull/1241 了解更多详情。

为 Python 绑定添加了自省 QoS 方法

现在可以从 Python 绑定中自省 QoS 设置。

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1648

rosidl

添加了支持键注释的接口

key 注释允许指示数据成员是键的一部分,它可以有零个或多个键字段,并且可以应用于各种类型的结构字段。

有关更多详细信息,请参阅 https://github.com/ros2/rosidl/pull/796https://github.com/ros2/rosidl_typesupport_fastrtps/pull/116

rviz2

为 TF 显示添加了正则表达式过滤器字段

/tf 上有许多帧时,很难在 RViz 中正确地显示它们,尤其是当帧重叠时。 通常的解决方案是在 TF 显示的 Frames 字段中启用和禁用所需的帧。

现在可以使用正则表达式过滤帧。

有关更多详细信息,请参阅 https://github.com/ros2/rviz/pull/1032

将测量的订阅频率附加到主题状态

可以在主题状态中可视化 Hz小部件。

有关更多详细信息,请参阅 https://github.com/ros2/rviz/issues/1113

重置功能

可以使用新服务或使用键盘快捷键“R”重置时间。

有关更多详细信息,请参阅 https://github.com/ros2/rviz/issues/1109https://github.com/ros2/rviz/issues/1088

增加了对 point_cloud_transport 的支持

可以使用 point_cloud_transport 包订阅点云。

有关更多详细信息,请参阅 https://github.com/ros2/rviz/pull/1008

与 ROS 的 RViz 功能相同

可以使用 ROS 1 版本中提供的相同插件。

  • DepthCloud

  • AccelStamped

  • TwistStamped

  • WrenchStamped

  • Effort

相机信息显示

可以在 3D 场景中可视化 CameraInfo 消息。

有关更多详细信息,请参阅 https://github.com/ros2/rviz/pull/1166

rcpputils

添加了 tl_expected

std::expected 是 C++23 特性,目前 ROS 2 还不支持。 但是,可以通过反向移植的实现从 rcpputils 使用“tl::expected”。

有关更多详细信息,请参阅https://github.com/ros2/rcpputils/pull/185。

rcutils

将人类可读的日期添加到日志格式

现在,通过使用 RCUTILS_CONSOLE_OUTPUT_FORMAT 环境变量中的 {date_time_with_ms} 令牌,可以在使用控制台日志记录时以人类可读的格式输出日期。

有关更多详细信息,请参阅 https://github.com/ros2/rcutils/pull/441

自 Iron 发布以来的变化

common_interfaces

为 geometry_msgs/Polygon 和 PolygonStamped 添加了 ID

多边形通常用于表示特定对象,但目前如果没有任何特定标识,则很难纠正。 此功能添加了一个 ID 字段来消除多边形的歧义。

有关更多详细信息,请参阅 https://github.com/ros2/common_interfaces/pull/232

geometry2

删除了已弃用的标头

在 Humble 中,标头: tf2_bullet/tf2_bullet.htf2_eigen/tf2_eigen.htf2_geometry_msgs/tf2_geometry_msgs.htf2_kdl/tf2_kdl.htf2_sensor_msgs/tf2_sensor_msgs.h 已被弃用,取而代之的是: tf2_bullet/tf2_bullet.hpptf2_eigen/tf2_eigen.hpptf2_geometry_msgs/tf2_geometry_msgs.hpptf2_kdl/tf2_kdl.hpptf2_sensor_msgs/tf2_sensor_msgs.hpp 在 Jazzy 中, tf2_bullet/tf2_bullet.htf2_eigen/tf2_eigen.htf2_geometry_msgs/tf2_geometry_msgs.htf2_kdl/tf2_kdl.htf2_sensor_msgs/tf2_sensor_msgs.h 标头已被完全删除。

更改了 wait_for_transform_asyncwait_for_transform_full_async 的返回类型

以前 Buffer 类的 wait_for_transform_asyncwait_for_transform_full_async 返回包含 true 或 false 的未来

在 Jazzy 中,未来将包含正在等待的转换的信息。

启用 Twist 插值器

包含新 API 以查找参考帧中移动帧的速度。

有关更多信息,请参阅 https://github.com/ros2/geometry2/pull/646

rcl

调用计时器时的实际和预期调用时间

添加了新的计时器 API rcl_timer_call_with_info 以收集调用计时器时的实际和预期调用时间。 这允许用户获取计时器预计被调用时的计时器信息以及计时器被调用的实际时间。

更多详情请参阅 https://github.com/ros2/rcl/pull/1113

在超时计算和虚假唤醒方面改进了 rcl_wait

为启用了时间覆盖的时钟的计时器添加了特殊处理。

对于这些计时器,我们不应该计算超时,因为等待集是由相关的保护条件唤醒的。

有关更多详细信息,请参阅 https://github.com/ros2/rcl/issues/1146

rclcpp

修复了数据竞争条件

修复了执行器中的数据竞争条件。

参见https://github.com/ros2/rclcpp/issues/2500 了解更多详情。

使用 rclcpp::WaitSet 作为执行器的一部分

通过使默认的单/多线程执行器在实体集合重建方面像静态单线程执行器一样工作,提高 rcl_wait_set 的创建和删除次数。

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/pull/2142

由于此更改,执行器中的回调不再按一致顺序排列,即使在同一个实体内也是如此。

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/issues/2532

rclcpp::get_typesupport_handle 已弃用

提取消息类型支持句柄的 rclcpp::get_typesupport_handle 已弃用,并将在未来版本中删除。

应改用 rclcpp::get_message_typesupport_handle

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/pull/2209

已删除弃用的 rclcpp/qos_event.hpp 标头

在 Iron 中,已弃用标头 rclcpp/qos_event.hpp,而使用 rclcpp/event_handler.hpp

在 Jazzy 中,已完全删除 rclcpp/qos_event.hpp 标头。

已删除弃用的订阅回调签名

回到 Humble,形式为 void callback(std::shared_ptr<MessageT>)void callback(std::shared_ptr<MessageT>, const rclcpp::MessageInfo &) 的订阅签名已弃用。

在 Jazzy 中,这些订阅签名已被删除。

用户应改用 void callback(std::shared_ptr<const MessageT>)void callback(std::shared_ptr<const MessageT>, const rclcpp MessageInfo &)

定时器调用时的实际和预期调用时间

在定时器回调中添加``rclcpp::TimerInfo``参数,用于收集定时器调用时的实际和预期调用时间。

这允许用户获取定时器预期调用时间以及定时器调用的实际时间的定时器信息。

有关更多详细信息,请参阅https://github.com/ros2/rclcpp/pull/2343。

rclcpp_action

取消后回调

添加了一个函数,用于在目标句柄超出范围后停止其回调。

此函数允许我们在锁定的上下文中删除句柄。

有关更多详细信息,请参阅 https://github.com/ros2/rclcpp/pull/2281

rclcpp_lifecycle

添加新节点接口 TypeDescriptionsInterface

添加新节点接口 TypeDescriptionsInterface 以提供 GetTypeDescription 服务。

参见https://github.com/ros2/rclcpp/pull/2224 了解更多详情。

rclpy

rclpy.node.Node.declare_parameter

rclpy.node.Node.declare_parameter 不允许静态键入没有默认值的参数。

有关更多详细信息,请参阅 https://github.com/ros2/rclpy/pull/1216

向方法参数添加了类型

添加了类型检查,以改善使用静态类型检查的任何人体验。

请参阅 https://github.com/ros2/rclcpp/pull/2224https://github.com/ros2/rclpy/issues/1240https://github.com/ros2/rclpy/issues/1237https://github.com/ros2/rclpy/issues/1231https://github.com/ros2/rclpy/issues/1241https://github.com/ros2/rclpy/issues/1233

rosbag2

--exclude CLI 选项的重命名

--exclude CLI 选项已重命名为 --exclude-regex,以更好地反映其功能。

请参阅 https://github.com/ros2/rosbag2/pull/1480 了解更多信息。

offered_qos_profiles 表示的变化

枚举值现在用于代码中的 offered_qos_profiles、元数据中 QoS 设置的人性化字符串值以及覆盖 QoS 配置文件 YAML 文件中。

有关示例,请参阅 https://github.com/ros2/rosbag2/tree/jazzy?tab=readme-ov-file#overriding-qos-profiles

向读写包拆分事件添加了节点名称消息

有关详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1609

在关闭包时添加了 BagSplitInfo 服务调用

有关详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1422

解决了与处理 SIGINT 和 SIGTERM 信号相关的多个问题rosbag2

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1557https://github.com/ros2/rosbag2/pull/1301https://github.com/ros2/rosbag2/pull/1464

将存储返回的 topic_id 添加到 TopicMetadata

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1538

为 CompressionOptions 和 CompressionMode 结构添加了 Python 绑定

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1425

提高``SqliteStorage::get_bagfile_size()``的性能

这最大限度地降低了使用 SQLite3 存储插件进行记录时在包拆分操作期间丢失消息的可能性。

有关更多详细信息,请参阅 https://github.com/ros2/rosbag2/pull/1516

rqt_bag

改进了性能并更新了 rosbag API

rosbag2 API 和 Ubuntu Noble 库版本中有一些重大更改,需要对 rqt_bag 进行一些更改。

有关更多详细信息,请参阅 https://github.com/ros-visualization/rqt_bag/pull/156

开发进度

有关 Jazzy Jalisco 开发的进度,请参阅 this project board

有关 Jazzy Jalisco 遵循的广泛流程,请参阅 process description page

已知问题

即将推出。

发布时间表

2023 年 11 月 - 平台决策

REP 2000 更新了目标平台和主要依赖版本。

到 2024 年 1 月 - 滚动平台转移 构建农场更新了 Jazzy Jalisco 的新平台版本和依赖版本。

2024 年 4 月 8 日星期一 - Alpha + RMW 冻结 ROS Base [1] 软件包的初步测试和稳定,以及 RMW 提供商软件包的 API 和功能冻结。

2024 年 4 月 15 日星期一 - 冻结 Rolling Ridley 中 ROS Base [1] 软件包的 API 和功能冻结。

此后只应发布错误修复版本。 新软件包可以独立发布。

2024 年 4 月 22 日星期一 - 分支 Rolling Ridley 的分支。 rosdistro 重新开放,用于 ROS Base [1] 软件包的滚动 PR。 Jazzy 开发从 ros-rolling-* 软件包转向 ros-jazzy-* 软件包。

2024 年 4 月 29 日星期一 - Beta 版 ROS Desktop [2] 软件包的更新版本可用。 呼吁进行一般测试。

2024 年 5 月 1 日星期三 - 教程派对开始 托管在 https://github.com/osrf/ros2_test_cases 上的教程可供社区测试。

2024 年 5 月 13 日星期一 - 候选版本 构建了候选版本软件包。 ROS Desktop [2] 软件包的更新版本可用。

星期一2024 年 5 月 20 日 - 发行版冻结 冻结所有 ROS 2 桌面软件包rosdistro 上的所有 Jazzy 分支。 不会合并任何针对 jazzy 分支或针对 jazzy/distribution.yamlrosdistro 存储库的拉取请求。

2024 年 5 月 23 日星期四 - 全面上市 发布公告。 ROS 2 桌面软件包 源冻结已解除,并重新开放 rosdistro 以接受 Jazzy 拉取请求。