You're reading the documentation for a version of ROS 2 that has reached its EOL (end-of-life), and is no longer officially supported. If you want up-to-date information, please have a look at Galactic.
ROS 2 Crystal Clemmys (codename ‘crystal’; December 2018)
Table of Contents
Crystal Clemmys is the third release of ROS 2.
Supported Platforms
Crystal Clemmys is primarily supported on the following platforms (see REP 2000 for full details):
Tier 1 platforms:
Ubuntu 18.04 (Bionic)
Mac macOS 10.12 (Sierra)
Windows 10
Tier 2 platforms:
Ubuntu 16.04 (Xenial)
New features in this ROS 2 release
Improvement in memory management
Introspection information about nodes
Launch system improvements
Laid the groundwork for file-based logging and /rosout publishing
Changes since the Bouncy release
Changes since the Bouncy Bolson release:
geometry2 -
tf2_ros::Buffer
API Changetf2_ros::Buffer
now usesrclcpp::Time
, with the constructor requiring ashared_ptr
to arclcpp::Clock
instance. See https://github.com/ros2/geometry2/pull/67 for details, with example usage:#include <tf2_ros/transform_listener.h> #include <rclcpp/rclcpp.hpp> ... # Assuming you have a rclcpp::Node my_node tf2_ros::Buffer buffer(my_node.get_clock()); tf2_ros::TransformListener tf_listener(buffer);
All
rclcpp
andrcutils
logging macros require semicolons.See https://github.com/ros2/rcutils/issues/113 for details.
rcutils_get_error_string_safe()
andrcl_get_error_string_safe()
have been replaced withrcutils_get_error_string().str
andrcl_get_error_string().str
.See https://github.com/ros2/rcutils/pull/121 for details.
rmw -
rmw_init
API ChangeThere are two new structs, the
rcl_context_t
and thercl_init_options_t
, which are used withrmw_init
. The init options struct is used to pass options down to the middleware and is an input tormw_init
. The context is a handle which is an output ofrmw_init
function is used to identify which init-shutdown cycle each entity is associated with, where an “entity” is anything created like a node, guard condition, etc.This is listed here because maintainers of alternative rmw implementations will need to implement these new functions to have their rmw implementation work in Crystal.
This is the function that had a signature change:
Additionally, there are these new functions which need to be implemented by each rmw implementation:
Here’s an example of what minimally needs to be changed in an rmw implementation to adhere to this API change:
rcl -
rcl_init
API ChangeLike the
rmw
change above, there’s two new structs inrcl
calledrcl_context_t
andrcl_init_options_t
. The init options are passed intorcl_init
as an input and the context is passed in as an output. The context is used to associate all other rcl entities to a specific init-shutdown cycle, effectively making init and shutdown no longer global functions, or rather those functions no longer use an global state and instead encapsulate all state within the context type.Any maintainers of a client library implementation (that also uses
rcl
under the hood) will need to make changes to work with Crystal.These functions were removed:
rcl_get_global_arguments
rcl_get_instance_id
rcl_ok
These functions had signature changes:
These are the new functions and types:
These new and changed functions will impact how you handle init and shutdown in your client library. For examples, look at the following
rclcpp
andrclpy
PR’s:However, you may just continue to offer a single, global init and shutdown in your client library, and just store a single global context object.
Known Issues
A race condition in Fast-RTPS 1.7.0 may cause messages to drop under stress (Issue).
Using the TRANSIENT_LOCAL QoS setting with rmw_fastrtps_cpp can crash applications with large messages (Issue).
Cross-vendor communication between rmw_fastrtps_cpp and other implementations is not functioning on Windows (Issue).
When using OpenSplice (version < 6.9.190227) on macOS and Windows you might experience naming conflicts when when referencing field types with names from other packages if the same name also exist in the current package (Issue). By updating to a newer OpenSplice version as well as at least the third patch release of Crystal the problem should be resolved. On Linux updating to the latest Debian packages will include the newest OpenSplice version.