You're reading the documentation for a development version. For the latest released version, please have a look at Iron.

Jazzy Jalisco (jazzy)

Jazzy Jalisco is the tenth release of ROS 2. What follows is highlights of the important changes and features in Jazzy Jalisco since the last release. For a list of all of the changes since Iron, see the long form changelog

Supported Platforms

Jazzy Jalisco is primarily supported on the following platforms:

Tier 1 platforms:

  • Ubuntu 24.04 (Noble): amd64 and arm64

  • Windows 10 (Visual Studio 2019): amd64

Tier 2 platforms:

  • RHEL 9: amd64

Tier 3 platforms:

  • macOS: amd64

  • Debian Bookworm: amd64

For more information about RMW implementations, compiler / interpreter versions, and system dependency versions see REP 2000.

Installation

Install Jazzy Jalisco

Changes to how ROS 2 and Gazebo integrate

Starting with Jazzy Jalisco, we are streamlining how ROS 2 and Gazebo integrate. For every ROS 2 release, there will be a recommended, supported Gazebo release that goes along with that release. For Jazzy Jalisco, the recommended Gazebo release will be Harmonic.

To make it easier for ROS 2 packages to consume Gazebo packages, there are now gz_*_vendor packages. Those packages are:

ROS 2 packages can use the functionality in these packages by adding dependencies in package.xml, e.g.:

<depend>gz_math_vendor</depend>

And then using them in CMakeLists.txt, e.g.:

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

It will still be possible to use alternate Gazebo versions with Jazzy Jalisco. But those will not be as well tested or integrated with ROS 2. See https://gazebosim.org/docs/harmonic/ros_installation for more information.

New features in this ROS 2 release

common_interfaces

New VelocityStamped message

Added a new message with all fields needed to define a velocity and transform it.

See https://github.com/ros2/common_interfaces/pull/240 for more details.

Adds ARROW_STRIP to Marker.msg

Added new type of Marker, ARROW_STRIP, to Marker.msg.

See https://github.com/ros2/common_interfaces/pull/242 for more details.

image_transport

Support lazy subscribers

See https://github.com/ros-perception/image_common/issues/272 for more details.

Expose option to set callback groups

See https://github.com/ros-perception/image_common/issues/274 for more details.

Enable allow list

Added parameter so users can selectively disable image_transport plugins at runtime.

See https://github.com/ros-perception/image_common/issues/264 for more details.

Added rclcpp component to Republish

Users can now start the image_transport republisher node as an rclcpp_component.

See https://github.com/ros-perception/image_common/issues/275 for more details.

message_filters

TypeAdapters support

Allows users to use Type Adaptation within message_filters.

See https://github.com/ros2/message_filters/pull/96 for more information.

rcl

Add get type description service

Implements the ~/get_type_description service which allows external users to get descriptions of each type that a node offers. This is offered by each node according to REP 2016.

See https://github.com/ros2/rcl/pull/1052 for more details.

rclcpp

Type support helper for services

New type support helper for services rclcpp::get_service_typesupport_handle is added to extract service type support handle.

See https://github.com/ros2/rclcpp/pull/2209 for more details.

ros2cli

Added a --log-file-name command line argument

It is now possible to use --log-file-name command line argument to specify the log file name prefix.

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

See https://github.com/ros2/ros2cli/issues/856 for more information.

Added QoS to subscription options

A user-settable QoS parameter was added to the TopicStatisticsOptions, which allows the statistics to have a different QoS from the subscription itself.

See https://github.com/ros2/rclcpp/pull/2323 for more details.

Add clients and services count

It is now possible to get the number of clients created by a service.

ros2action

type sub-command supported

It is now possible to use the type sub-command to check the action type.

ros2 action type /fibonacci
action_tutorials_interfaces/action/Fibonacci

See https://github.com/ros2/ros2cli/pull/894 for more information.

rosbag2

Service recording and playback

It is now possible to record and play service data with the ros2bag command line interface.

This features builds on Service Introspection, which has been available since Iron Irwini. Service recording and display adds the ability to record service data into a bag file. And Service playback can play that service data from the bag file.

Record all services data:

ros2 bag record --all-services

Record all services data with all topic data:

ros2 bag record --all

Play service data from bag file:

ros2 bag play --publish-service-requests bag_path

See the design document for more information.

New filter modes

It is now possible to filter by topic type.

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

See more details https://github.com/ros2/rosbag2/pull/1577 and https://github.com/ros2/rosbag2/pull/1582.

Added introspection QoS methods to Python bindings

It is now possible to instrospect QoS setting from Python bindings.

See https://github.com/ros2/rosbag2/pull/1648 for more details.

rosidl

Added interfaces to support key annotation

The key annotation allows indicating that a data member is part of the key, which can have zero or more key fields and can be applied to structure fields of various types.

See https://github.com/ros2/rosidl/pull/796 and https://github.com/ros2/rosidl_typesupport_fastrtps/pull/116 for more details.

rviz2

Added regex filter field for TF display

When there are many frames on /tf it can be hard to properly visualize them in RViz, especially if frames overlap. The usual solution to this is to enable and disable desired frames in Frames field of the TF display. Now it is possible to filter frames using regular expressions.

See https://github.com/ros2/rviz/pull/1032 for more details.

Append measured subscription frequency to topic status

It is possible to visualize Hz in the topic status widget.

See https://github.com/ros2/rviz/issues/1113 for more details.

Reset functionality

It is possible to reset Time using a new service or using the keyboard shortcut R.

See https://github.com/ros2/rviz/issues/1109 and https://github.com/ros2/rviz/issues/1088 for more details.

Added support for point_cloud_transport

It is possible to subscribe to point clouds using the point_cloud_transport package.

See https://github.com/ros2/rviz/pull/1008 for more details.

Feature parity with RViz for ROS

It is possible to use the same plugins available in the ROS 1 version.

  • DepthCloud

  • AccelStamped

  • TwistStamped

  • WrenchStamped

  • Effort

Camera info display

It is possible to visualize CameraInfo messages in the 3D scene.

See https://github.com/ros2/rviz/pull/1166 for more details.

rcpputils

Added tl_expected

std::expected is C++23 feature, which is not yet supported in ROS 2. However, it is possible to use tl::expected from rcpputils via a backported implementation.

See https://github.com/ros2/rcpputils/pull/185 for more details.

rcutils

Add human readable date to logging formats

It is now possible to output dates in a human readable format when using console logging by using the {date_time_with_ms} token in the RCUTILS_CONSOLE_OUTPUT_FORMAT environment variable.

See https://github.com/ros2/rcutils/pull/441 for more details.

Changes since the Iron release

common_interfaces

Added IDs to geometry_msgs/Polygon and PolygonStamped

Polygons are often used to represent specific objects but are difficult to rectify currently without any kind of specific identification. This feature adds an ID field to disambiguate polygons.

See https://github.com/ros2/common_interfaces/pull/232 for more details.

geometry2

Removed deprecated headers

In Humble, the headers: 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 were deprecated in favor of: 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 In Jazzy, the 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 headers have been completely removed.

Changed return types of wait_for_transform_async and wait_for_transform_full_async

Previously wait_for_transform_async and wait_for_transform_full_async of the Buffer class returned a future containing true or false In Jazzy, the future will contain the information of the transform being waited on.

Enabled Twist interpolator

Included new API to lookup the velocity of the moving frame in the reference frame.

See https://github.com/ros2/geometry2/pull/646 for more information.

rcl

Improved rcl_wait in the area of timeout computation and spurious wakeups

Added special handling for timers with a clock that has time override enabled. For these timer we should not compute a timeout, as the waitset is woken up by the associated guard condition.

See https://github.com/ros2/rcl/issues/1146 for more details.

rclcpp

Fixed data race conditions

Fixed data race conditions in executors.

See https://github.com/ros2/rclcpp/issues/2500 for more details.

Utilize rclcpp::WaitSet as part of the executors

Improve the number of rcl_wait_set creations and deletions by making the default Single/Multithreaded executors work like the static single threaded executor in terms of entity collection rebuilding.

See https://github.com/ros2/rclcpp/pull/2142 for more details.

rclcpp::get_typesupport_handle is deprecated

The rclcpp::get_typesupport_handle that extracts message type support handle is deprecated, and will be removed in a future release. Instead, rclcpp::get_message_typesupport_handle should be used.

See https://github.com/ros2/rclcpp/pull/2209 for more details.

Deprecated rclcpp/qos_event.hpp header was removed

In Iron, the header rclcpp/qos_event.hpp was deprecated in favor of rclcpp/event_handler.hpp. In Jazzy, the rclcpp/qos_event.hpp header has been completely removed.

Deprecated subscription callback signatures were removed

Back in Humble, subscription signatures of the form void callback(std::shared_ptr<MessageT>) and void callback(std::shared_ptr<MessageT>, const rclcpp::MessageInfo &) were deprecated.

In Jazzy, these subscription signatures have been removed. Users should switch to using void callback(std::shared_ptr<const MessageT>) or void callback(std::shared_ptr<const MessageT>, const rclcpp MessageInfo &).

rclcpp_action

Callback after cancel

Added a function to stop callbacks of a goal handle after it has gone out of scope. This function allows us to drop the handle in a locked context.

See https://github.com/ros2/rclcpp/pull/2281 for more details.

rclcpp_lifecycle

Add new node interface TypeDescriptionsInterface

Add new node interface TypeDescriptionsInterface to provide the GetTypeDescription service.

See https://github.com/ros2/rclcpp/pull/2224 for more details.

rclpy

rclpy.node.Node.declare_parameter

The rclpy.node.Node.declare_parameter does not allow statically typing parameter without a default value.

See https://github.com/ros2/rclpy/pull/1216 for more details.

Added types to method arguments

Added type checking to improve the experience for anyone using static type checking.

See 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, and https://github.com/ros2/rclpy/issues/1233.

rqt_bag

Improved performance and updated rosbag API

There are some breaking changes in the rosbag2 API and Ubuntu Noble library versions that required some changes to rqt_bag.

See https://github.com/ros-visualization/rqt_bag/pull/156 for more details.

Development progress

For progress on the development of Jazzy Jalisco, see this project board.

For the broad process followed by Jazzy Jalisco, see the process description page.

Known Issues

To come.

Release Timeline

November, 2023 - Platform decisions

REP 2000 is updated with the target platforms and major dependency versions.

By January, 2024 - Rolling platform shift

Build farm is updated with the new platform versions and dependency versions for Jazzy Jalisco.

Mon. April 8, 2024 - Alpha + RMW freeze

Preliminary testing and stabilization of ROS Base [1] packages, and API and feature freeze for RMW provider packages.

Mon. April 15, 2024 - Freeze

API and feature freeze for ROS Base [1] packages in Rolling Ridley. Only bug fix releases should be made after this point. New packages can be released independently.

Mon. April 22, 2024 - Branch

Branch from Rolling Ridley. rosdistro is reopened for Rolling PRs for ROS Base [1] packages. Jazzy development shifts from ros-rolling-* packages to ros-jazzy-* packages.

Mon. April 29, 2024 - Beta

Updated releases of ROS Desktop [2] packages available. Call for general testing.

Wed, May 1, 2024 - Kick off of Tutorial Party

Tutorials hosted at https://github.com/osrf/ros2_test_cases are open for community testing.

Mon. May 13, 2024 - Release Candidate

Release Candidate packages are built. Updated releases of ROS Desktop [2] packages available.

Mon. May 20, 2024 - Distro Freeze

Freeze rosdistro. No PRs for Jazzy on the rosdistro repo will be merged (reopens after the release announcement).

Thu. May 23, 2024 - General Availability

Release announcement. rosdistro is reopened for Jazzy PRs.