MoveIt Pro API
Core Behaviors for MoveIt Pro
Loading...
Searching...
No Matches
Joint Velocity Controller

Overview

This package contains a ROS 2 controller that can be used to move the joints of a robot using velocity setpoints. It contains a ROS-agnostic joint velocity setpoint generator and a ROS 2 controller (using ros2_control) that uses this generator to compute the reference signals to send to the robot, via the hardware interface. The controller takes desired joint velocities as input, in a control_msgs/JointJog message, and computes the immediate next joint positions and velocities to send to the robot, while respecting the robot's joint velocity and acceleration constraints. Joint velocity and acceleration limits are defined in the controller's configuration file, and can also be dynamically reconfigured at runtime via a ROS 2 Service call.

Design

The Joint Velocity Controller has been designed with the following goals in mind:

  1. ROS-agnostic core library + ros2_control wrapper. This makes it easier to reuse the core in other control frameworks outside ROS if needed.
  2. Streaming interface. The controller is designed to be used with a streaming interface, where the user is expected to send joint velocities at some rate. This makes it specially suitable as a teleoperation controller, or for use with other higher level closed loop controllers (e.g. visual servoing, learnt policy, etc.).
  3. Real-time safe: no allocations in real-time thread. Validated via memory allocation tests (see malloc_counter.hpp).
  4. Exit conditions (e.g. command timeout) trigger a full stop, satisfying user-defined joint-space velocities and decelerations.
  5. MISRA C++ 23 compliant.