[Announcement] ROS2 Joint Velocity to Position Controller

Hello ROS community!

These last weeks, I have been working on the joint_velocity_to_position_controller repository, a ROS2 controller for ROS2 Jazzy designed to receive joint velocity commands and convert them into joint positions. This allows robots with position-controlled drivers to be commanded using joint velocity inputs, with smooth and continuous motion generation, complementing the velocity_controllers/JointGroupVelocityController controller.

Thanks for reading, below there is some additional information about the project:

Motivation

We wanted to deploy some policies trained through Reinforcement Learning (Isaac Lab) in ROS2. The policy generates actions as joint positions although the frequency (from 25Hz to 60Hz) is lower than the ROS2 Controller Manager control loop. Therefore, we required a joint velocity controller to generate smooth movements based on the different frequency rates between the RL application and the ROS2 control framework.

The ROS2 controller includes additional features, such as a feedback topic with robot data, to facilitate the integration with the RL application (e.g., inject feedback topic data as observation of the policy).

Features

  • Accepts joint velocity commands as std_msgs::msg::Float64MultiArray.
  • Computes joint positions based on the joint velocity commands.
  • Includes a maximum acceleration value to smooth velocity transitions.
  • Allows an open-loop mode in which the previously commanded joint positions are used instead of the joint positions from the state interfaces, avoiding the injection of hardware feedback latency and transport delays into the command generation loop.
  • The controller includes the option to enable a feedback topic where the controller’s state and data are published. Specifically, the feedback includes the configured joints’ position and velocities, as well as an additional option to publish the Cartesian pose of the kinematic chain defined by the controller joints.

Testing

The ROS2 controller has been tested in simulation (mock_components/GenericSystem) and in a Universal Robots UR16e.

JVTPC-RL-2

Repo

GitHub: https://github.com/aitor-ibarguren/joint_velocity_to_position_controller

The README includes information about the configuration of the controller.

Feedback

I would appreciate feedback on:

  • API design
  • Additional features
3 Likes