ROS 2 Lyrical Luth Released! 🎉

ROS 2 Lyrical Luth Released

:turtle: Happy day before World Turtle Day! Today the ROS 2 Release Team is happy to announce the twelth release of ROS 2: Lyrical Luth (codenamed lyrical).

In addition to the official logo shared previously, we also have a new Lyrical Luth turtlesim and Discourse icon :lyrical: :lyrical:. Our Lyrical T-shirt and swag campaign is still live! You can still grab all the cool merch if you want to support the release. All proceeds help support the Open Source Robotics Foundation (OSRF).

Lyrical Luth is a long term support (LTS) release that will be supported until May 2031. The distribution supports the following platforms:

  • Tier 1 platforms:
    • Ubuntu 26.04 (Resolute): amd64 and arm64
    • Windows 11 (Visual Studio 2022): amd64
  • Tier 2 platforms:
    • RHEL 10: amd64
  • Tier 3 platforms:
    • Ubuntu Noble (24.04)
    • macOS
    • Debian Trixie
    • OpenEmbedded

For more information about RMW implementations, compiler/interpreter versions, and system dependency versions please see Lyrical Luth Supported Platforms and Platform Support Tiers.

If you are new to ROS, we recommend trying Lyrical Luth on a Tier 1 supported platform. Check the installation instructions and tutorials on docs.ros.org, and give Lyrical a spin!

Should you run into any difficulties, please ask a question on Robotics Stack Exchange or let us know on Zulip. If you would like to try Lyrical but are afraid of commitment you can find Lyrical Docker containers on Docker Hub shortly.

New Features and Enhancements

Lyrical Luth is feature packed and full of improvements! If you want the gritty details feel free to peruse the release notes and complete changelog for core ROS 2 packages. We’ve summarized a few new features we’ll think you’ll love below.

New Executors Deliver Improved Performance

Looking for better executor performance? Check out the new Callback Group Events Executor. Like its predecessor the EventsExecutor, the EventsCBGExecutor uses an events queue to process ready entities. However, EventsCBGExecutor adds support for multiple sources of ROS time and multiple threads. Compared to the Single and Multithreaded executors, the EventsCBGExecutor uses 10% to 15% less CPU! If you are using composable nodes you can Launch a component container with the EventsCBGExecutor using the new --executor-type argument

We want to send a big shout out to Janosch Machowinski, Skyler Medeiros, and Maurice Alexander Purnawan for making this performance improvement happen!

Asyncio in RCLPy with Improved Performance!

Want to use asyncio and rclpy at the same time? Well now you can thanks to a pull request from Nadav Elkabets! Check out our new AsyncNode class. This node runs an asyncio event loop allowing you to call await on any asyncio operation from any ROS subscription, service, or timer callback. Try await client.call(request) to wait for service calls, and the sim-time aware await clock.sleep(...). Best of all, this class uses significantly less CPU compared to the default SingleThreadedExecutor.

To get started check out our Python asyncio Node Tutorial on docs.ros.org.

rosidl::Buffer Improvements Facilitate Zero-Copy GPU Data Transfer

Moving ROS data to or from a GPU just got a lot faster and easier in ROS 2 Lyrical Luth! If your ROS application uses a GPU for data processing you’ll want to upgrade as soon as possible to take advantage of our new zero-copy data transfer capabilities.

Are you publishing data on ROS topics, but using that data elsewhere, like a GPU? Tired of copying data out of the GPU before publishing just to copy it back into the GPU in the subscriber? You can now use rosidl::Buffer to publish and subscribe to ROS messages without performing costly data copy operations. You can learn all about this exciting new feature and how to use it to improve your GPU performance on on docs.ros.org.

To make this performance improvement possible all uint8[] fields now have the type rosidl::Buffer<uint8_t> in C++ instead of std::vector<uint8_t>. You must define your ROS messages with uint8[] fields and install an appropriate rosidl::BufferBackend implementation to take advantage of this feature. Note that only publishers and subscribers using rmw_fastrtps_cpp may use this feature for now, but support in Zenoh is coming soon!

Using a custom hardware accelerator or machine learning library? You can benefit from this too. See Writing a rosidl::Buffer backend to learn how to implement your own rosidl::BufferBackend.

Big thanks to our colleagues at NVIDIA, particularly CY Chen for making this improvement happen!

Miscellaneous Features

ROS 2 Lyrical Luth comes with a ton of other great new features and we’ve compiled a partial list of them below. Remember, if you are coming from Jazzy (or even Humble or Foxy) you’ll also get all of the great features we shipped in Kilted Kaiju.

A Community Effort

ROS 2 is truly a community effort, and this could not have been better exemplified by our public beta testing of Lyrical Luth over the past few weeks. Almost 2651 test cases were put through the ringer with several improvements identified along the way. It really helped “harden” the Lyrical distribution. The release team would like to extend a heartfelt thank you to all testers. For our top twenty testers you should get an e-mail in your inbox with a swag coupon code sometime later next week. A full list of our 110 testers can be found below.

Thank you to all 110 T&T Party Contributors!

Aadya dave, Aarav Gupta, Aashishkumar, Abdulhaleem Oseni, Abhinand Binu , Abhiroop Bhavsar, Aditya Dev Singh, Aditya Kamath, Adyansh Gupta, Adyansh Gupta, Ahmed Ishiba, Akash Kanagala, Akashleena Sarkar, Alan McDonley, Amar Balutkar, Amber Handal, Ammaar Ahmed, Andreas, Andy Blight, Anushri Arora, Aryan Rajendra Jagushte , Atharv Mudse , Avinash Umesh Sarma, Azmyin Md. Kamal, Ben waxler, Bhavesh Gandhi, Carlos Leonardo Lazzari, Cherry Cheung, Chetan Satpute, Danish Tapia, Deep Kotadiya, Drake McGillivray, Edward Morgan, Emmanuel Nketsia Yawson, Enzo Ghisoni, Eric, fengchen, George Stavrinos, Harrison Chen, Innocent Pious, Jasper Grant, Jeff Donovan, Jiahao Sim, Josef Gstoettner, Julie Foresta, Jyothiswaroop Kasina, Kai Tung Yu, Kartik Rana, Ken Gregson, Koshiro Suzuki, Kunal Yadav, Kushant Patel, Labeeb Nassar, Labeeb Nassar, Lautaro, Lautaro, Leslie Selorm Afeawo, Lingampalli Venkata Subramanyam, Maik Fruhner, Manav Sikka, Mann Bhanushali, Marco Walther, Mariano, Marlvern Chimbwanda, Matheus Sousa Soares, Mathew P Hans, mentor, Mer Alba, mervin mathew, Mikael Arguedas, Mike Giedosh, mohan, Mostafa Ahmed Sayed Hassan, Muhammad Usman, Nagharajan Gudalur Thyagarajan, Neeraj Cherakara, Nikos Mitropoulos, Nirmal Ram , Nisrine Lasfer, Noel Jimenez Garcia, Olivier Stasse, Omer Sayed, Oscar, Paresh Soni, praga, Pranav Shirgur, Pranava Swaroopa, Rohit, Sachin Kumar, Satvik Sharma, Satya Dheeraj, Selorm Leslie Afeawo, Shahazad Abdulla , Shahryar Mooraj , Shanmukha Vishnu, Shubham Chauhan , Somanshu, Sourav Anil Hawaldar , Sterling McLeod, Stuart G Johnson, Terdoo George Anaana, Tharun Oommen Jacob, Tom Lageson, Tomoya Fujita, Trushant Adeshara, Vaibhav S, Vansh Mittal, Vincenzo Petrone, Vishwanath R, and Yashvi Shah.

We also want to thanks the 238 contributors who contributed to this release through code changes, documentation, and testing, and especially to our ROS Boss @sloretz! The following individuals made contributions to the Lyrical release:

A big thank you to our 239 contributors to Lyrical Luth! * Aarav Gupta * Abrar Rahman Protyasha * Achille Verheye * Adam Aposhian * Adam Leeper * Addisu Z. Taddese * AiVerisimilitude * Akihiko Komada * Alberto Soragna * Alejandro HernĂĄndez Cordero * Alex Spitzer * Alex Tyshka * Alex Youngs * Alexander Kornienko * Alexis Tsogias * Alireza Moayyedi * Alon Borenshtein * Amin Ya * Andreas * Andrei Costinescu * Andrei Kholodnyi * Andrew Symington * Andrianov Roman * Anthony Welte * Antonio Brandi * Arne Hitzmann * Auguste Lalande * Barry Xu * Bartlomiej Styczen * Bas Zalmstra * Brad Martin * Brandon Simoncic * Brennan Miller-Klugman * BƂaĆŒej Sowa * CY Chen * ChenYing Kuo (CY) * Chris Lalancette * Christian Rauch * Christian Ruf * Christoph Fröhlich * Christophe Bedard * Chui Vanfleet * Clara Berendsen * CristĂłbal Arroyo * Daisuke Nishimatsu * Daisuke Sato * Dan Mascarenhas * DangitBen * Danil * David Anthony * David Revay * David V. Lu * Dhruv Patel * Dominik * EddyGharib * Eesha Kumar * ElSayed ElSheikh * Emerson Knapp * Emmanuel * Emre Kuru * Eric Lujan * Erwin L. * EsipovPA * Esteve Fernandez * Evan Flynn * Fabian Thomsen * Faseel Chemmadan * Felix Exner (fexner) * Filip * Florencia * Florian Vahl * Francisco Gallego Salido * Francisco Rossi * Garrett Brown * Gary Bey * Gary Servin * Georg Flick * Giorgio Pintaudi * Grey * Guillaume Doisy * Harrison Chen * HervĂ© Audren * Hugal31 * Hunter L. Allen * Ian Chen * Ilario A. Azzollini * Ivo Ivanov * Jan Vermaete * Janosch Machowinski * Jasper van Brakel * Jay Sridharan * Jean Paul * Jeremie Deray * Jimmy McElwain * Jochen Sprickerhof * Johannes Böhm * John TGZ * Jonas Otto * Jonathan Selling * Jorge J. Perez * Jose Luis Rivero * Joshua Supratman * JosĂ© Faria * Julien Enoch * Katherine Scott * Kaju-Bubanja * Kenji Brameld * Khaled Gabr * Kimberly N. McGuire * Kostubh Khandelwal * Kosuke Takeuchi * Kotaro Yoshimoto * Larry Gezelius * Leander Stephen D'Souza * Lee * Lennart Reiher * Lucas Wendland * Lucien Morey * Lukas SchĂ€per * Luke Sy * Mahmoud Mazouz * Mario DomĂ­nguez LĂłpez * Mark Johnson * Markus Bader * Martin Pecka * Mateusz Ć»ak * Matt Condino * Matteo Princisgh * Matthew Foran * Matthijs van der Burgh * Maurice Alexander Purnawan * Maxime Fleury * Michael Carlstrom * Michael Carroll * Michael Orlov * Michael Tandy * Michal Sojka * Michel Hidalgo * Michiel Leegwater * Miguel Company * Mihir Rao * Mikael Arguedas * Minju * Mirko Ferrati * Mohit Kumaresan * Nadav Elkabets * Nathan Boisard * Nathan Brooks * Nathan Wiebe Neufeldt * Nikola Banović * Om Shivam Verma * Oren Bell * Oren Bell PhD * Oscmoar07 * Parth Patel * Patrick Roncagliolo * Pavel Esipov * Pavel Guzenfeld * Peng Wang * Peter Mitrano (AR) * Pierre Ballif * R Kent James * RHolland * Rahat Dhande * Raphael van Kempen * Rick-v-E * Robert Haschke * Romain Reignier * Rushhaank Sahay * SPeak * Sahil Lakhmani * Sai Kishor Kothakota * Sam Privett * Samuel Foo Enze * Sarthak Bagga * Scott K Logan * Sebastian Castro * Sebastian Javier D'Alessandro Szymanowski * Selim Ağırman * Sergei Zobov * Shane Loretz * Shravan Deva * Shynur * Silvio Traversaro * Simon Jusner * Skyler Medeiros * Sriharsha Ghanta * Stefan Fabian * Steve Macenski * Steve Peters * Steven Palma * Stoyan Gaydarov * Taiga Arai * Tanishq Chaudhary * Tim Clephas * Tim Wendt * Timo Röhling * Tom Moore * Tomoya Fujita * Tony Najjar * Tully Foote * Tyler Weaver * Vladimir Gerts * William Woodall * Yadnyeshwar Amol Sakhare * Yadunund * Yannik Meinken * YuJin Hong * Yuchen966 * Yuyuan Yuan * Zhaoyuan Cheng * Zheng Qu * baranbologur * carlos-apex * cdisco * cramke * dcconner * eboasson * fabianhirmann * ipa-fez * jay * jordanburklund * keeponoiro * matthias88 * mhidalgo-rai * milidam * mini-1235 * mohit * mosfet80 * nelson * nomumu * pum1k * r-simonelli * solo * t0k0shi * wodtko * xndcn * yellowhatter * Øystein Sture

Finally, we’d like to announce the name of the next ROS 2 release for May 2027:

:person_surfing: Makoa Mata-mata :turtle:

Makoa is a Hawaiian word that means fearless or courageous and the Mata-Mata is a South American species of freshwater turtle found in the Amazon basin and river system of the eastern Guianas.

47 Likes

Proud to have contributed to this release through the tutorial party! Congrats to the whole ROS team :tada:

5 Likes

Awesome work by everyone involved! Congrats!!

Congratulations on the release of Lyrical!

The Gazebo team is happy to announce that Gazebo Jetty :gazebo: is available for ROS 2 Lyrical! Get started with:

sudo apt install ros-lyrical-ros-gz

See Gazebo Jetty in action at the community meeting held for the release and read the release notes to learn about all the new features available.

Select Updates from Jetty

The following are some of the new features in Jetty that are particularly relevant for the ROS community

Zenoh transport support, working towards improved ROS integration

Up until Ionic, Gazebo used ZeroMQ (0MQ) as its primary message transport protocol. Gazebo now supports Zenoh as an alternative transport implementation, offering improved discovery, interoperability, and performance. To enable Zenoh, set the environment variable export GZ_TRANSPORT_IMPLEMENTATION=zenoh. This allows Gazebo to leverage
Zenoh’s features and potentially integrate more seamlessly with ROS 2 and other systems utilizing Zenoh.

ROS Standard Sim Interface

Members of the ROS community have built a standard simulation interface to improve the portability of robot code between simulators. This new standard interface should allow ROS developers to quickly and easily switch between simulators based on their development needs.

A major update on Gazebo’s release cadence

The Gazebo PMC has updated the cadence and naming of Gazebo releases to better align with those of ROS 2. Going forward, releases of Gazebo will be made in March, just two months before the associated ROS 2 release, instead of Septemeber. Additionally, the release name will start with the same letter as the associated ROS 2 release. Consequently, the next Gazebo release is planned for March, 2027 and the name of the release will start with the letter ‘M’ (skipping ‘K’ and ‘L’) to align with ROS 2 Makoa Mata-mata. The rationale for this change and additional details can be found in Proposal for a new Gazebo Release Cadence .

:gazebo: Gazebo PMC

9 Likes

Exciting! Are the URDF improvements (namely the acceleration/jerk limits) going to be backported to earlier distros, or is this change exclusively forward looking?

It’s only forward looking as it breaks ABI due to new member variables. It is only available from Lyrical on and on URDF versions tag >= 1.2. If the URDF version tag is set to < 1.2, then the acceleration, deceleration and jerk fields are ignored and will initialize them to infinity.

1 Like

thanks – that makes sense and I suspected it was the case.

Anyways I think for my purposes support for URDF 1.2 needs to happen in Pinocchio first. The model classes do not have acceleration/jerk limit fields themselves at the moment.

2 Likes

Got it. Hopefully, soon :wink:

1 Like

I’d like to personally thank all who contributed to ROS Lyrical Luth. @sloretz and @mjcarroll worked hard for months to coordinate all the work going on to pull this release together. @cyc lead work by NVIDIA to develop one of the stand-out features of Lyrical, the rosidl::Buffer feature for high-performance data handling, and @ahcorde worked hard to help pull that feature into readiness for the release. Janosch Machowinski, @skye.galaxy and @mini-1235 produced a significantly more advanced, efficient, and capable executor, the Callback Group Events Executor. rclpy finally has support for asynchronous programming, thanks to @nadavelkabets. That’s not to mention all the other features and contributions we received from 239 people for this release!

I’d also like to thank all who contributed to the testing party. Without this testing work, we wouldn’t be able to release ROS Lyrical Luth with confidence. Thanks also to @Katherine_Scott for putting together and coordinating the testing party!

ROS really is the result of the hard work of a community.

9 Likes