diff --git a/source/Releases/Release-Lyrical-Luth.rst b/source/Releases/Release-Lyrical-Luth.rst index 8a34285d1de..7136c3f3f86 100644 --- a/source/Releases/Release-Lyrical-Luth.rst +++ b/source/Releases/Release-Lyrical-Luth.rst @@ -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`` ^^^^^^^^^^^^^^^^ @@ -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 `__ - ``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 `__. + 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 `__ - + ``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 `__ and + `ros2/rclcpp#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 `__, + `ros2/rosbag2#2386 `__, + `ros2/rosbag2#2387 `__, and + `ros2/rosbag2#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 `__ 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 `__ and + `ros2/rosbag2#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 `__ 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 `__ 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 `__, + `ros2/rosbag2#2144 `__, and + `ros2/rosbag2#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 `__ and + `ros2/rosbag2#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 `__ and + `ros2/rosbag2#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 `__, + `ros2/rosbag2#2052 `__, + `ros2/rosbag2#2055 `__, and + `ros2/rosbag2#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 `__ 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 `__ for more details. +>>>>>>> 57ee23f (Added release notes for async node and ament_python_install_package (#6520)) ``rosbag2`` ^^^^^^^^^^^