ROS 2 Galactic Geochelone (codename ‘galactic’; May, 2021)¶
Table of Contents
Galactic Geochelone is the seventh release of ROS 2.
It is now possible to specify different logging levels for different loggers on the command line:
ros2 run demo_nodes_cpp talker --ros-args --log-level WARN --log-level talker:=DEBUG
The above command sets a global log level of WARN, but sets the log level of the talker node messages to DEBUG.
--log-level command-line option can be passed an arbitrary number of times to set different log levels for each logger.
It is now possible to configure the logging directory through two environment variables:
The logic is as follows:
ROS_LOG_DIRis set and not empty.
ROS_HOMEif not set or if empty.
Thus the default value stays the same:
During the Galactic development process, the ROS 2 Technical Steering Committee voted to change the default ROS middleware (RMW) to Cyclone DDS.
Without any configuration changes, users will get Cyclone DDS by default.
Fast-DDS and Connext are still Tier-1 supported RMW vendors, and users can opt-in to use one of these RMWs at their discretion by using the
RMW_IMPLEMENTATION environment variable.
See the Working with multiple RMW implementations tutorial for more information.
The Python code that used to live in tf2_ros has been moved into its own package named tf2_ros_py.
Any existing Python code that depends on tf2_ros will continue to work, but the package.xml of those packages should be amended to
exec_depend on tf2_ros_py.
Change in spin_until_future_complete template parameters¶
The first template parameter of
Executor::spin_until_future_complete was the future result type
ResultT, and the method only accepted a
In order to accept other types of futures (e.g.:
std::future), that parameter was changed to the future type itself.
In places where a
spin_until_future_complete call was relying on template argument deduction, no change is needed.
If not, this is an example diff:
std::shared_future<MyResultT> future; ... -executor.spin_until_future_complete<MyResultT>(future); +executor.spin_until_future_complete<std::shared_future<MyResultT>>(future);
Change in default
/clock subscription QoS profile¶
The default was changed from a reliable communication with history depth 10 to a best effort communication with history depth 1. See ros2/rclcpp#1312.
Waitable API was modified to avoid issues with the
This only affects users implementing a custom waitable.
See ros2/rclcpp#1241 for more details.
rclcpp’s logging macros¶
Previously, the logging macros were vulnerable to a format string attack, where the format string is evaluated and can potentially execute code, read the stack, or cause a segmentation fault in the running program. To address this security issue, the logging macro now accepts only string literals for it’s format string argument.
If you previously had code like:
const char *my_const_char_string format = "Foo"; RCLPP_DEBUG(get_logger(), my_const_char_string);
you should now replace it with:
const char *my_const_char_string format = "Foo"; RCLCPP_DEBUG(get_logger(), "%s", my_const_char_string);
This change removes some convenience from the logging macros, as
std::strings are no longer accepted as the format argument.
If you previously had code with no format arguments like:
std::string my_std_string = "Foo"; RCLCPP_DEBUG(get_logger(), my_std_string);
you should now replace it with:
std::string my_std_string = "Foo"; RCLCPP_DEBUG(get_logger(), "%s", my_std_string.c_str());
If you are using a
std::string as a format string with format arguments, converting that string to a
char * and using it as the format string will yield a format security warning. That’s because the compiler has no way at compile to introspect into the
std::string to verify the arguments. To avoid the security warning, we recommend you build the string manually and pass it in with no format arguments like the previous example.
std::stringstream types are still accepted as arguments to the stream logging macros.
See ros2/rclcpp#1442 for more details.
Action client goal response callback signature changed¶
The goal response callback should now take a shared pointer to a goal handle, instead of a future.
For example, old signature:
void goal_response_callback(std::shared_future<GoalHandleFibonacci::SharedPtr> future)
void goal_response_callback(GoalHandleFibonacci::SharedPtr goal_handle)
Related PR: ros2/rclcpp#1311
API break in function that gets an element from an array¶
The signature of the function was changed because it was semantically different to all the other functions used to get an element from an array or sequence. This only affects authors of rmw implementations using the introspection typesupport.
For further details, see ros2/rosidl#531.
- Mon. March 22, 2021 - Alpha
Preliminary testing and stabilization of ROS Core 1 packages.
- Mon. April 5, 2021 - Freeze
API and feature freeze for ROS Core 1 packages in Rolling Ridley. Note that this includes
rmw, which is a recursive dependency of
ros_core. Only bug fix releases should be made after this point. New packages can be released independently.
- Mon. April 19, 2021 - Branch
Branch from Rolling Ridley.
rosdistrois reopened for Rolling PRs for ROS Core 1 packages. Galactic development shifts from
- Mon. April 26, 2021 - Beta
Updated releases of ROS Desktop 2 packages available. Call for general testing.
- Mon. May 17, 2021 - RC
Release Candidate packages are built. Updated releases of ROS Desktop 2 packages available.
- Thu. May 20, 2021 - Distro Freeze
Freeze rosdistro. No PRs for Galactic on the
rosdistrorepo will be merged (reopens after the release announcement).
- Sun. May 23, 2021 - General Availability
rosdistrois reopened for Galactic PRs.