Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions source/Releases/Release-Lyrical-Luth.rst
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,16 @@ TODO
New features in this ROS 2 release
----------------------------------

``ament_cmake``
^^^^^^^^^^^^^^^

Allow multiple ``ament_python_install_package()`` calls per package
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This enables shipping a single package with both python code and generated interfaces (from ``rosidl_generate_interfaces()``).
Source directories from each call are merged at install time, with the last call winning on file conflicts.

See https://github.com/ament/ament_cmake/pull/587 for more details.

``class_loader``
^^^^^^^^^^^^^^^^

Expand Down Expand Up @@ -167,7 +177,140 @@ Builds on the experimental ``EventsExecutor`` by adding support for multiple sou
Compared to the Single and Multithreaded Executors, the ``EventsCBGExecutor`` exhibits around 10 to 15% less CPU usage.
Note: The experimental ``EventsExecutor`` is now deprecated. For similar performance, use the ``EventsCBGExecutor`` with one thread.

<<<<<<< HEAD
`Unified component container interface <https://github.com/ros2/rclcpp/pull/3134>`__ - ``component_container`` is now the single entrypoint for launching both regular and isolated component containers with all types of executors.
=======
* Added new `Callback Group Events Executor <https://github.com/ros2/rclcpp/pull/3097>`__.
Like its predecessor the experimental ``EventsExecutor``, the ``EventsCBGExecutor`` uses
an events queue to process ready entities.
Builds on the experimental ``EventsExecutor`` by adding support for multiple sources of
ROS time and multiple threads.
Compared to the Single and Multithreaded Executors, the ``EventsCBGExecutor`` exhibits
around 10 to 15% less CPU usage.
Note: The experimental ``EventsExecutor`` is now deprecated. For similar performance, use
the ``EventsCBGExecutor`` with one thread.

* `Unified component container interface <https://github.com/ros2/rclcpp/pull/3134>`__ -
``component_container`` is now the single entrypoint for launching both regular and
isolated component containers with all types of executors.

* Added ``disable_callbacks()`` and ``enable_callbacks()`` APIs to ``SubscriptionBase``.
By design the subscription itself is a shared pointer and its callbacks are propagated to
the executor, making it difficult to manage subscription lifecycle from the application
side.
When a subscription is deleted at the application layer, it may still be referenced by
the node and executor, causing callbacks to be invoked unexpectedly.
This can lead to undefined behavior when the callback accesses resources that have been
cleaned up.
The new APIs allow users to disable subscription callbacks at runtime without destroying
the subscription, preventing unexpected callback invocations.

See `ros2/rclcpp#2984 <https://github.com/ros2/rclcpp/issues/2984>`__ and
`ros2/rclcpp#2985 <https://github.com/ros2/rclcpp/pull/2985>`__ for more details.

``rclpy``
^^^^^^^^^

Native asyncio support with ``AsyncNode`` (experimental)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Added ``AsyncNode``, a new node type that runs on the ``asyncio`` event loop.
Subscription, service, and timer callbacks can now ``await`` any asyncio operation.
The new async ``client.call(request)`` and sim-time aware ``clock.sleep(...)`` are awaitable from any asyncio task.
CPU usage is significantly reduced compared to the ``SingleThreadedExecutor``.

See the :doc:`Writing an async node with asyncio <../Tutorials/Intermediate/Writing-An-Async-Node-With-Asyncio-Python>` tutorial and https://github.com/ros2/rclpy/pull/1620 for more details.

``rosbag2``
^^^^^^^^^^^

``Rosbag2`` received several new recording, playback, observability, and API improvements.

* Added support for repeating transient-local messages when recording bags.
Users can configure selected transient-local topics with ``--repeat-transient-local`` and
an optional per-topic depth, or use ``--repeat-all-transient-local`` to automatically apply
the behavior to topics whose publishers offer ``TRANSIENT_LOCAL`` durability QoS.
This helps preserve latched/static state, such as maps or static transforms, across bag
splits and snapshots.

See `ros2/rosbag2#2385 <https://github.com/ros2/rosbag2/pull/2385>`__,
`ros2/rosbag2#2386 <https://github.com/ros2/rosbag2/pull/2386>`__,
`ros2/rosbag2#2387 <https://github.com/ros2/rosbag2/pull/2387>`__, and
`ros2/rosbag2#2391 <https://github.com/ros2/rosbag2/pull/2391>`__ for more details.

* Added recorder service APIs for starting and stopping recording, starting and stopping topic
discovery, and querying whether discovery is running.
This makes it possible to control a recorder process remotely through ROS services instead
of only through the command-line process lifecycle.

See `ros2/rosbag2#2248 <https://github.com/ros2/rosbag2/pull/2248>`__ for more details.

* Added scheduled service operations for coordinated recording and playback workflows.
Record, play, resume, and split operations can now be scheduled by time, with support for
node time, publish time, and receive time modes where applicable.
Service responses were also extended with explicit return codes and error strings.

See `ros2/rosbag2#2330 <https://github.com/ros2/rosbag2/pull/2330>`__ and
`ros2/rosbag2#2357 <https://github.com/ros2/rosbag2/pull/2357>`__ for more details.

* Added circular logging by split count.
When recording with bag splitting enabled, ``--max-bag-files`` limits the maximum number of
bag files stored on disk by automatically deleting the oldest split files as new ones are
created.

See `ros2/rosbag2#2218 <https://github.com/ros2/rosbag2/pull/2218>`__ for more details.

* Added a time-bounded snapshot cache option, ``--max-cache-duration``.
This allows snapshot-mode recording to bound the cached data by duration in addition to
existing cache controls.

See `ros2/rosbag2#2289 <https://github.com/ros2/rosbag2/pull/2289>`__ for more details.

* Added message-loss observability during recording.
``Rosbag2`` can now collect message-loss statistics from the transport layer and recorder
internals, and publish incremental per-topic loss events on the predefined
``events/rosbag2_messages_lost`` topic.
The publishing rate can be configured with ``--stats_max_publishing_rate``.

See `ros2/rosbag2#2039 <https://github.com/ros2/rosbag2/pull/2039>`__,
`ros2/rosbag2#2144 <https://github.com/ros2/rosbag2/pull/2144>`__, and
`ros2/rosbag2#2150 <https://github.com/ros2/rosbag2/pull/2150>`__ for more details.

* Expanded the ``rosbag2_py`` player and recorder APIs.
Python users can now programmatically control playback and recording with APIs such as
pause, resume, stop, seek, play-next, spin control, and wait helpers, instead of relying
only on blocking command-line-style helpers.

See `ros2/rosbag2#2047 <https://github.com/ros2/rosbag2/pull/2047>`__ and
`ros2/rosbag2#2062 <https://github.com/ros2/rosbag2/pull/2062>`__ for more details.

* Added APIs for querying player timing metadata.
Users can now query the player's starting time and playback duration, and Python readers
can access the send timestamp when reading serialized messages.

See `ros2/rosbag2#2061 <https://github.com/ros2/rosbag2/pull/2061>`__ and
`ros2/rosbag2#2095 <https://github.com/ros2/rosbag2/pull/2095>`__ for more details.

* Improved message definition resolution for recorded data.
``Rosbag2`` can now find message definitions in nested subdirectories, better resolve inner
message definitions for service and action introspection data, and support relative includes
in local IDL message definitions.

See `ros2/rosbag2#2041 <https://github.com/ros2/rosbag2/pull/2041>`__,
`ros2/rosbag2#2052 <https://github.com/ros2/rosbag2/pull/2052>`__,
`ros2/rosbag2#2055 <https://github.com/ros2/rosbag2/pull/2055>`__, and
`ros2/rosbag2#2241 <https://github.com/ros2/rosbag2/pull/2241>`__ for more details.

* Updated split bag file naming to include the split index, bag name, and timestamp, making
split files easier to identify and sort.

See `ros2/rosbag2#2265 <https://github.com/ros2/rosbag2/pull/2265>`__ for more details.

* Enabled the ``rosbag2_performance_benchmarking`` package to be built by default, making the
benchmarking tools easier to use for recorder and player performance evaluation.

See `ros2/rosbag2#2093 <https://github.com/ros2/rosbag2/pull/2093>`__ for more details.
>>>>>>> 57ee23f (Added release notes for async node and ament_python_install_package (#6520))

``rosbag2``
^^^^^^^^^^^
Expand Down
Loading