Announcing ros2_control for Foxy

Hello there folks,

We’ve had a busy 2020 at the ros2_control Working Group thinking about and discussing how to improve ros_control for ROS2.
I am pleased to announce the first release of ros2_control and ros2_controllers in Foxy!

Don’t be overly excited yet though! This is a release of only the core framework and some of the old and loved controllers, but not everything yet.
Highlighted features:

  • Supported controllers: joint_state_controller, joint_trajectory_controller and forward_command_controller
  • Entirely component-based setup, for those of you familiar with ros_control, you can think of it as CombinedRobotHardware being a first class citizen. No need to write a RobotHW anymore if someone else already made a driver for the component/robot you want to use.
  • ROS2 CLI support
  • No more hardcoded joint or actuator interface types (i.e. can support any joint type, not only position, velocity and effort)
  • Resource and lifecycle management done in a cleaner manner, leveraging some ROS2 and more modern C++ practices
  • Composability with other ROS2 nodes via executors
  • Support the control_msgs/DynamicJointState message which is a flexible alternative to sensor_msgs/JointState

Upcoming releases will include:

  • diff_drive_controller
  • JointGroup[Position/Velocity/Effort]Controller
  • transmissions
  • Gazebo support
  • more demos and documentation.

Did you guys also watch Die Hard 2 over the Christmas break? If yes, I’m sure those orange industrial robots in the baggage-handling scene made you wonder: “When can I use ros_control with ROS2 on my robots?” The time has come!


Full scene

As we do not yet have the Gazebo plugin working, allow me to show a KUKA and an ABB simulation thanks to Taiga Robotics. The source code for both can be found here.
ABB:

KUKA:

For getting started, try the hands-on demo from the demos repo:

For more, you may join us or follow our progress at the working group meetings or in the following repos:

Warmest thanks to everyone who helped make ros2_control happen but especially our main contributors:
Karsten Knese (Bosch), Denis Štogl (KIT), Victor Lopez & Jordan Palacios (PAL Robotics),
Edwin Fan & Alejandro Cordero (Open Robotics), Colin MacKenzie, Dmitri Ignakov (Taiga Robotics), Andy Zelenak and Lovro Ivanov (PickNik Robotics)

PS:
Until the next Foxy sync, the packages are only available from the ros2-testing apt repository.

27 Likes

@bmagyar This is amazing! Great work contributers!

Any plans to bloom it into the rolling distro as well so it can be auto-included in all future distros?

1 Like

The satellite packages will very soon be bloomed into Rolling, if not already there.
For the framework itself, we need to get some slightly breaking changes out of the way before we do that. The rolling distro approach is great but it assumes you had everything ready for that distro when it was released which is not necessarily the case for us.

2 Likes

For the framework itself, we need to get some slightly breaking changes out of the way before we do that.

I think Rolling is by definition unstable so breaking changes are allowed there when needed so there are no worries there. But from a “we don’t want to release it twice into rolling when we could release it once after the changes” I totally get you.

The rolling distro approach is great but it assumes you had everything ready for that distro when it was released which is not necessarily the case for us.

What do you mean by “ready for the distro”?

2 Likes

Hi, i was wondering if a ignition gazebo plugin is in the works or only gazebo classic?
Great work!!

1 Like

We are currently targeting only Gazebo. People in the team who are using simulations told that ignition is not ready yet for this. So the first step is Gazebo (classic) and then, hopefully, during 2021 also Ignition.

For people who want to test the framework. Yesterday I created the first version of the documentation. You can find it in this PR. We are happy to get feedback, especially from first-time users.

Have a nice testing :slight_smile:

2 Likes

This is the best news of the year! Testing right away!!

1 Like

This is fantastic!

I am fairly versed in ROS1 and familiar enough with ROS2. But I have no experience yet with ros_control.

I have a custom 1DOF actuator (a motor with communication via CANBus) that I would like integrate with ros2_control as an exercise. My final goal is to use 2 motors together and implement a differential drive control robot (simulated and with real hardware) writing as little code as possible, and maybe write a blog post about it and share it with the community. What would be the best place to ask questions?

This is one of the use cases we are trying to cover explicitly now. You could open a github issue over at ros2_control and treat it as a dev journal we can chime in on.

Will ROS 2 implement dynamic feedforward terms for the effort_interface and the joint_trajectory_controller? As far as I know, In ROS 1 the only feedforward term is the feedforward velocity. It seems a bit complex to modify the controller class to support dynamic compensation/feedforward torque based on the inertia matrix. It would be nice to have a way to easily specify these components, at least by providing a class or a plugin.

For now, we are working on making controllers available to the same robustness levels as in ROS1 with a few minor features along the way. You are more than welcome to suggest changes to the effort_controllers or joint_trajectory_controller packages.

thanks for the answer.
I was wondering if it will be possible to do something like this:

I think the new version of the code dropped the template specialization (which was not optimal in any case, because you could not reuse easily the bulk of the code to create a generic effort trajectory controller, as far as I know).

Thank you very much for your effort in the development such important tools!