ROS 2 Crystal Clemmys (codename ‘crystal’; December 2018)¶
Table of Contents
Crystal Clemmys is the third release of ROS 2.
Crystal Clemmys is primarily supported on the following platforms (see REP 2000 for full details):
Tier 1 platforms:
- Ubuntu 18.04 (Bionic)
- Mac OS X 10.12 (Sierra)
- Windows 10
Tier 2 platforms:
- Ubuntu 16.04 (Xenial)
- Actions in C / C++ (server / client examples)
- Improvement in memory management
- Introspection information about nodes
- Launch system improvements
- Laid the groundwork for file-based logging and /rosout publishing
- Time and Duration API in Python
- Parameters work with Python nodes
Changes since the Bouncy Bolson release:
rclcpp::Time, with the constructor requiring a
rclcpp::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);
rcutilslogging macros require semicolons.
See https://github.com/ros2/rcutils/issues/113 for details.
rcl_get_error_string_safe()have been replaced with
See https://github.com/ros2/rcutils/pull/121 for details.
There are two new structs, the
rcl_init_options_t, which are used with
rmw_init. The init options struct is used to pass options down to the middleware and is an input to
rmw_init. The context is a handle which is an output of
rmw_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:
rmwchange above, there’s two new structs in
rcl_init_options_t. The init options are passed into
rcl_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:
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
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.
- 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.