ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

ROS 2 Ardent Apalone released

We’re happy to announce the ROS 2 release Ardent Apalone!

Installation instructions and tutorials can be found on the ROS 2 wiki.

To get an idea of what’s in this release, be sure to read the Ardent page.

A few features and improvements we would like to highlight in this release:

  • The first non-beta release.
  • rviz including a few plugins (the Windows version will follow in a few weeks)
  • Different initialization options for message data structures in C++
  • Logging API improvements, now also used in the demos
  • Time support in C++ with different clocks
  • wait-for-service support in the Python client library
  • Draft implementation of REP 149 specifying format 3 of the package manifest files

While there is always more work to be done we consider several of the core components to be ready to be used by a broader audience. Therefore we have dropped the “beta” label and will support Ardent for one year, fixing bugs and keeping the release working, especially on platforms with rolling dependency releases (OS X / Windows). We’ll start a regular six month release cycle for newer versions of ROS 2. While we do aim to keep the API as stable as possible, we can’t guarantee 100% API compatibility between releases. That being said, whether or not ROS 2 is ready to be used for your application or if you can switch from ROS 1 to ROS 2 right now depends on the exact feature set and requirements of your use case. Please check the features page as well as the roadmap for more information.

As always, we invite you to try out the new software, give feedback, report bugs, and suggest features (and contribute code!):

Your friendly neighborhood ROS 2 Team



Small note: The link to the “Ardent page” leads to non-existing wiki page.

Thank you for pointing it out. I fixed the link in the original post. For completeness - this is the correct one: Ardent Apalone.

Can someone please explain or link to an example explaining this part of the release notes?

Different initialization options for message data structures in C++


In ROS1, the structs/class members that were generated for messages were always value-initialized. While this is convenient, and prevents users from accessing uninitialized memory by accident, it can also be a waste of time. For example, a camera driver may construct an Image message with a large number of zeros in it, and then immediately overwrite the zeros with the actual image data. There was no need to spend the time to set the zeros, since it was going to be immediately overwritten.

In ROS2, we now have the option to control that behavior. The default behavior is like ROS1; all struct members are value-initialized. However, during message class construction, it is possible to pass an initializer to the class to control how members are initialized (see the documentation here:

Let me know if you need more information.

That’s perfect, thanks