# Announcing ros2\_control for Foxy

**URL:** <https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274>\
**Category:** ROS General\
**Tags:** release, ros2, ros\_control, foxy\
**Created:** [January 4, 2021, 9:48pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274 "2021-01-04T21:48:28Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![bmagyar](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/bmagyar/32/15336_2.png) [@bmagyar](https://discourse.openrobotics.org/u/bmagyar)\
**Post date:** [January 4, 2021, 9:48pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/1 "2021-01-04T21:48:28Z")

</div>

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`](https://github.com/ros-controls/control_msgs/blob/foxy-devel/control_msgs/msg/DynamicJointState.msg) 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!

 ![diehard2baggage](https://us1.discourse-cdn.com/flex022/uploads/ros/original/2X/4/47757fda8e66a2e8d3bfd9d41f6a8242f06f2242.jpeg)  
[Full scene](https://www.youtube.com/watch?v=s8wXejQ7uvI)

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](https://github.com/dignakov/ros2_control_demo_drivers).  
ABB:

[![](https://us1.discourse-cdn.com/flex022/uploads/ros/original/3X/5/8/5866ee02c4ac1aa718769bf315c2a0c2de3b9103.jpeg "ros2\_control Foxy first release ABB robot simulation demo") ](https://www.youtube.com/watch?v=w6bSe3xc5AQ)

KUKA:

[![](https://us1.discourse-cdn.com/flex022/uploads/ros/original/2X/a/a02a595c9712d0b099414df28bbebf82fad96ad4.jpeg "ros2\_control: first Foxy release, KUKA simulated forward position demo") ](https://www.youtube.com/watch?v=Bia2q_Yszew)

For getting started, try the hands-on demo from the demos repo:  
[https://github.com/ros-controls/ros2\_control\_demos/#example-1-industrial-robots-with-only-one-interface](https://github.com/ros-controls/ros2_control_demos/#example-1-industrial-robots-with-only-one-interface)

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

- The framework: [ros2\_control](https://github.com/ros-controls/ros2_control)
- The controllers: [ros2\_controllers](https://github.com/ros-controls/ros2_controllers)
- Our ever-growing set of reference implementations following some [typical robot urdfs](https://github.com/ros-controls/roadmap/blob/master/design_drafts/components_architecture_and_urdf_examples.md) can be found in [ros2\_control\_demos](https://github.com/ros-controls/ros2_control_demos)

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.

---

<div class="post-metadata">

**Author:** ![Aaron\_Blasdel](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/aaron_blasdel/32/4214_2.png) [@Aaron\_Blasdel](https://discourse.openrobotics.org/u/Aaron_Blasdel)\
**Post date:** [January 5, 2021, 3:11am UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/2 "2021-01-05T03:11:57Z")

</div>

@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?

---

<div class="post-metadata">

**Author:** ![bmagyar](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/bmagyar/32/15336_2.png) [@bmagyar](https://discourse.openrobotics.org/u/bmagyar)\
**Post date:** [January 5, 2021, 7:02am UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/3 "2021-01-05T07:02:40Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Aaron\_Blasdel](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/aaron_blasdel/32/4214_2.png) [@Aaron\_Blasdel](https://discourse.openrobotics.org/u/Aaron_Blasdel)\
**Post date:** [January 5, 2021, 4:46pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/4 "2021-01-05T16:46:38Z")

</div>

> 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”?

---

<div class="post-metadata">

**Author:** ![MakeMe](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/makeme/32/6197_2.png) [@MakeMe](https://discourse.openrobotics.org/u/MakeMe)\
**Post date:** [January 5, 2021, 8:18pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/5 "2021-01-05T20:18:42Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![destogl](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/destogl/32/7158_2.png) [@destogl](https://discourse.openrobotics.org/u/destogl)\
**Post date:** [January 6, 2021, 2:09pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/6 "2021-01-06T14:09:52Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![destogl](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/destogl/32/7158_2.png) [@destogl](https://discourse.openrobotics.org/u/destogl)\
**Post date:** [January 6, 2021, 2:12pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/7 "2021-01-06T14:12:26Z")

</div>

For people who want to test the framework. Yesterday I created the first version of the documentation. You can find it in this [PR](https://github.com/ros-controls/roadmap/pull/36). We are happy to get feedback, especially from first-time users.

Have a nice testing 🙂

---

<div class="post-metadata">

**Author:** ![MartinPeris](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/martinperis/32/381_2.png) [@MartinPeris](https://discourse.openrobotics.org/u/MartinPeris)\
**Post date:** [January 8, 2021, 4:16am UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/8 "2021-01-08T04:16:27Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![macaulay.nikluc](https://avatars.discourse-cdn.com/v4/letter/m/96bed5/32.png) [@macaulay.nikluc](https://discourse.openrobotics.org/u/macaulay.nikluc)\
**Post date:** [January 8, 2021, 6:50am UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/9 "2021-01-08T06:50:58Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![bmagyar](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/bmagyar/32/15336_2.png) [@bmagyar](https://discourse.openrobotics.org/u/bmagyar)\
**Post date:** [January 8, 2021, 7:34am UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/10 "2021-01-08T07:34:31Z")

</div>

This is one of the use cases we are trying to cover explicitly now. You could open a github issue over at [ros2\_control](https://github.com/ros-controls/ros2_control) and treat it as a dev journal we can chime in on.

---

<div class="post-metadata">

**Author:** ![Boris\_il\_forte](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/boris_il_forte/32/9675_2.png) [@Boris\_il\_forte](https://discourse.openrobotics.org/u/Boris_il_forte)\
**Post date:** [March 16, 2021, 5:34pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/11 "2021-03-16T17:34:42Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![bmagyar](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/bmagyar/32/15336_2.png) [@bmagyar](https://discourse.openrobotics.org/u/bmagyar)\
**Post date:** [March 16, 2021, 6:12pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/12 "2021-03-16T18:12:33Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Boris\_il\_forte](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/boris_il_forte/32/9675_2.png) [@Boris\_il\_forte](https://discourse.openrobotics.org/u/Boris_il_forte)\
**Post date:** [March 16, 2021, 7:54pm UTC](https://discourse.openrobotics.org/t/announcing-ros2-control-for-foxy/18274/13 "2021-03-16T19:54:15Z")

</div>

thanks for the answer.  
I was wondering if it will be possible to do something like this:  
[https://github.com/kuka-isir/cart\_opt\_ctrl/commit/2414cef4730f6f127b5f51d5932011b9354079ed](https://github.com/kuka-isir/cart_opt_ctrl/commit/2414cef4730f6f127b5f51d5932011b9354079ed)  
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!
