Ros2_control in Lyrical Luth: what's new

Lyrical Luth has been marked as stable/released in ros2_control, ros2_controllers, control_toolbox and realtime_tools. Here are the main changes since Kilted Kaiju. A few of them change default behaviour, so read the :warning: Breaking / behaviour changes subsections before you upgrade.
For what the stable label means for API and ABI stability from here on, see Releases, versioning and public API claim of ros-controls.

:saxophone: = backported to Jazzy. The number after the icon is the first Jazzy release of that package to include the change. If you’re still on Jazzy, you can already use these.

Full details:


ros2_control

:warning: Breaking / behaviour changes

  • The handle and export APIs deprecated since Jazzy have been removed (#3610). See the announcement and the migration guide for step-by-step instructions.
    • Hardware components: export_state_interfaces() / export_command_interfaces() are gone. The framework now creates the interfaces from the <ros2_control> tag; use set_state/get_state and set_command/get_command to access the values.
    • StateInterface / CommandInterface can no longer be built from a double*. Handles now own their value.
    • Chainable controllers: on_export_state_interfaces() / on_export_reference_interfaces() are replaced by on_export_*_interfaces_list(), which return shared pointers.
  • switch_controller is now strict by default (#2742).
  • configure_controller only accepts unconfigured controllers. The spawner now skips controllers that are already configured; pass --reconfigure to clean up and configure them again (#3196).
  • The controller manager’s ROS arguments are no longer forwarded to controllers (#3016).
  • A failing controller now deactivates its whole chain (#2681). :saxophone: 4.39.0
  • Controller update rates are rounded to the nearest achievable rate when the requested rate does not divide evenly into the controller manager’s rate (#2828). :saxophone: 4.41.0

New features

  • More data types in handles: besides double and bool, handles now also support float32, int8/16/32 and uint8/16/32 (#2879). :saxophone: 4.42.0
  • New interface configuration types INDIVIDUAL_BEST_EFFORT and REGEX for more flexible interface claiming (#2902). :saxophone: 4.42.0
  • New MagneticFieldSensor semantic component (#2627). :saxophone: 4.39.0
  • New cleanup_controller service and CLI verb (#2414), and ros2 control unload_controller --all-inactive (#3466). :saxophone: 4.42.0 / 4.48.0
  • New handle_exceptions parameter: choose whether exceptions thrown in a controller’s update() are caught by the controller manager or propagated (#2807). :saxophone: 4.40.0
  • spawner: separate arguments for each controller when using --controller (#2895) :saxophone: 4.44.0. Parameter files are matched the same way rclcpp does it, including namespaces and wildcards (#3719).
  • simple_transmission and differential_transmission support the force interface (#2588). :saxophone: 4.39.0

ros2_controllers

:warning: Breaking / behaviour changes

  • joint_trajectory_controller: constraints.goal_time now defaults to 10.0 s, and its meaning has changed. A negative value now waits indefinitely; 0.0 now means no grace period. action_execution_timeout has been removed (#2592).
  • joint_state_broadcaster no longer publishes dynamic_joint_states. Use state_interfaces_broadcaster or gpio_controllers instead (#2187).
  • JointGroupPositionController, JointGroupVelocityController and JointGroupEffortController are deprecated. Use forward_command_controller with the interface_name parameter instead (#1913).
  • diff_drive / mecanum_drive / omni_wheel_drive controllers: tf_frame_prefix_enable is deprecated. Set tf_frame_prefix: "" instead, or "~" to use the node namespace (#1997). diff_drive_controller’s publish_rate parameter has been removed (#2259).

:rocket: New controllers

  • battery_state_broadcaster (#2086). :saxophone: 4.42.0
  • state_interfaces_broadcaster (#2006). :saxophone: 4.36.0
  • magnetometer_broadcaster (#2214). :saxophone: 4.41.0

New features

  • joint_trajectory_controller:
    • Trajectory replacement from ROS 1 is back (allow_trajectory_replacement): a new goal is spliced into the running trajectory instead of replacing it (#2419).
    • Decelerate to stop on cancel/preempt with max_deceleration_on_cancel (#2163). :saxophone: 4.39.0
    • Upsampling of positions-only action chunks into a smooth spline, useful for learned policies that run at a low rate (positions_upsampling.enable) (#2491).
  • Mobile robot controllers: new service to set the odometry at runtime (#2096, #2110, #2148, #2244).
  • force_torque_sensor_broadcaster: can publish the wrench transformed into a list of target frames (#2021). :saxophone: 4.35.0
  • pid_controller: set_current_state_as_first_setpoint avoids jumps on activation (#2205) :saxophone: 4.39.0; reset_commands_at_deactivation (#2602) :saxophone: 4.43.0.

control_toolbox

  • New templated ExponentialFilter class (#493).
  • LowPassFilter::configure() can set the filter’s initial state (#657).

realtime_tools

  • New LockFreePooledSPSCQueue for large or move-only types (#606). :saxophone: 3.14.1

Thank you to everyone who contributed code, reviews, issues and testing this cycle! :folded_hands:
Please report problems on the ros-controls GitHub.

1 Like