Jazzy Jalisco (jazzy
)
Jazzy Jalisco 是 ROS 2 的第十个版本。 以下是自上一个版本以来 Jazzy Jalisco 中重要变化和功能的重点介绍。 有关自 Iron 以来所有变化的列表,请参阅 long form changelog
支持的平台
Jazzy Jalisco 主要支持以下平台:
一级平台:
Ubuntu 24.04 (Noble):
amd64
andarm64
Windows 10 (Visual Studio 2019):
amd64
二级平台:
RHEL 9:
amd64
三级平台:
macOS:
amd64
Debian Bookworm:
amd64
有关 RMW 实现、编译器/解释器版本和系统依赖版本的更多信息,请参阅 REP 2000。
安装
ROS 2 与 Gazebo 集成方式的变化
从 Jazzy Jalisco 开始,我们将简化 ROS 2 与 Gazebo 的集成方式。
对于每个 ROS 2 版本,都会有一个推荐的、受支持的 Gazebo 版本与该版本配套。
对于 Jazzy Jalisco,推荐的 Gazebo 版本将是 Harmonic。
为了使 ROS 2 软件包更容易使用 Gazebo 软件包,现在有 gz_*_vendor
软件包。
这些软件包是:
gz_common_vendor: https://github.com/gazebo-release/gz_common_vendor
gz_cmake_vendor: https://github.com/gazebo-release/gz_cmake_vendor
gz_math_vendor: https://github.com/gazebo-release/gz_math_vendor
gz_transport_vendor: https://github.com/gazebo-release/gz_transport_vendor
gz_sensor_vendor: https://github.com/gazebo-release/gz_sensor_vendor
gz_sim_vendor: https://github.com/gazebo-release/gz_sim_vendor
gz_tools_vendor: https://github.com/gazebo-release/gz_tools_vendor
gz_utils_vendor: https://github.com/gazebo-release/gz_utils_vendor
sdformat_vendor: https://github.com/gazebo-release/sdformat_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/1577 和 https://github.com/ros2/rosbag2/pull/1582。
播放器和录制器现在作为 rclcpp 组件公开
这允许在数据记录或回复期间使用进程内通信时进行“零拷贝”。
这可以在处理高带宽数据流时显著减少记录或回复期间的 CPU 负载,并有助于避免传输层的数据丢失。
它还提供了使用 YAML 配置文件来处理 rosbag2_transport::Player
和 rosbag2_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]”中的消息。
将序列化的元数据直接存储在 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/796 和 https://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/1109 和 https://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.h
、 tf2_eigen/tf2_eigen.h
、 tf2_geometry_msgs/tf2_geometry_msgs.h
、
tf2_kdl/tf2_kdl.h
、 tf2_sensor_msgs/tf2_sensor_msgs.h
已被弃用,取而代之的是: tf2_bullet/tf2_bullet.hpp
、
tf2_eigen/tf2_eigen.hpp
、 tf2_geometry_msgs/tf2_geometry_msgs.hpp
、 tf2_kdl/tf2_kdl.hpp
, tf2_sensor_msgs/tf2_sensor_msgs.hpp
在 Jazzy 中, tf2_bullet/tf2_bullet.h
、 tf2_eigen/tf2_eigen.h
、 tf2_geometry_msgs/tf2_geometry_msgs.h
、
tf2_kdl/tf2_kdl.h
、 tf2_sensor_msgs/tf2_sensor_msgs.h
标头已被完全删除。
更改了 wait_for_transform_async
和 wait_for_transform_full_async
的返回类型
以前 Buffer
类的 wait_for_transform_async
和 wait_for_transform_full_async
返回包含 true 或 false 的未来
在 Jazzy 中,未来将包含正在等待的转换的信息。
启用 Twist 插值器
包含新 API 以查找参考帧中移动帧的速度。
有关更多信息,请参阅 https://github.com/ros2/geometry2/pull/646。
rcl
调用计时器时的实际和预期调用时间
添加了新的计时器 API rcl_timer_call_with_info
以收集调用计时器时的实际和预期调用时间。
这允许用户获取计时器预计被调用时的计时器信息以及计时器被调用的实际时间。
在超时计算和虚假唤醒方面改进了 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/2224、https://github.com/ros2/rclpy/issues/1240、https://github.com/ros2/rclpy/issues/1237、https://github.com/ros2/rclpy/issues/1231、https://github.com/ros2/rclpy/issues/1241 和 https://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/1557、https://github.com/ros2/rosbag2/pull/1301 和 https://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.yaml
的 rosdistro
存储库的拉取请求。
2024 年 5 月 23 日星期四 - 全面上市
发布公告。
ROS 2 桌面软件包 源冻结已解除,并重新开放 rosdistro
以接受 Jazzy 拉取请求。