Crystal Clemmys (crystal)
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::BufferAPI Changetf2_ros::Buffernow usesrclcpp::Time, with the constructor requiring ashared_ptrto arclcpp::Clockinstance. 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
rclcppandrcutilslogging 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().strandrcl_get_error_string().str.See https://github.com/ros2/rcutils/pull/121 for details.
rmw -
rmw_initAPI ChangeThere are two new structs, the
rcl_context_tand 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_initfunction 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_initAPI ChangeLike the
rmwchange above, there’s two new structs inrclcalledrcl_context_tandrcl_init_options_t. The init options are passed intorcl_initas 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
rclunder the hood) will need to make changes to work with Crystal.These functions were removed:
rcl_get_global_argumentsrcl_get_instance_idrcl_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
rclcppandrclpyPR’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.