Documentation Status

Cannot load information on name: ros_control, distro: electric, which means that it is not yet in our index. Please see this page for information on how to submit your repository to our index.
Cannot load information on name: ros_control, distro: fuerte, which means that it is not yet in our index. Please see this page for information on how to submit your repository to our index.
Cannot load information on name: ros_control, distro: groovy, which means that it is not yet in our index. Please see this page for information on how to submit your repository to our index.
ros_control: control_toolbox | controller_interface | controller_manager | controller_manager_msgs | controller_manager_tests | hardware_interface | joint_limits_interface | realtime_tools | transmission_interface

Package Summary

Released Continuous integration Documented

A set of packages that include controller interfaces, controller managers, transmissions, hardware_interfaces and the control_toolbox.

ros_control: control_toolbox | controller_interface | controller_manager | controller_manager_msgs | controller_manager_tests | hardware_interface | joint_limits_interface | realtime_tools | transmission_interface

Package Summary

Released Continuous integration Documented

A set of packages that include controller interfaces, controller managers, transmissions, hardware_interfaces and the control_toolbox.

Overview

The ros_control packages are a rewrite of the pr2_mechanism packages to make controllers generic to all robots beyond just the PR2.

ros control Diagram source in ros_control/documentation

The ros_control packages takes as input the joint state data from your robot's actuator's encoders and an input set point. It uses a generic control loop feedback mechanism, typically a PID controller, to control the output, typically effort, sent to your actuators. ros_control gets more complicated for physical mechanisms that do not have one-to-one mappings of joint positions, efforts, etc but these scenarios are accounted for using transmissions.

A high-level overview of the project can be found in the ROScon 2014 talk entitled ros_control: An overview (slides, video).

Additional documentation is available at the Github Wiki

Controllers

A list of available controller plugins, contained in ros_controllers, as of this writing. You can of course create your own and are not limited to this list:

  • effort_controllers
    • joint_effort_controller
    • joint_position_controller
    • joint_velocity_controller
  • joint_state_controller
    • joint_state_controller
  • position_controllers
    • joint_position_controller
  • velocity_controllers
    • joint_velocity_controllers

Hardware Interfaces

A list of available hardware interfaces (via the Hardware Resource Manager) as of this writing. You can of course create your own and are not limited to this list:

  • Joint Command Interfaces
    • Effort Joint Interface
    • Velocity Joint Interface
    • Position Joint Interface
  • Joint State Interfaces
  • Actuator State Interfaces
  • Actuator Command Interfaces
    • Effort Actuator Interface
    • Velocity Actuator Interface
    • Position Actuator Interface
  • Force-torque sensor Interface
  • IMU sensor Interface

Transmissions

A transmission is an element in your control pipeline that transforms efforts/flow variables such that their product - power - remains constant. A transmission interface implementation maps effort/flow variables to output effort/flow variables while preserving power.

Mechanical transmissions are power-preserving transformations, ie.

P_in        = P_out

F_in x V_in = F_out x V_out

where P, F and V stand for power, force and velocity. More generally, power is the product of an effort (eg. force, voltage) and a flow (eg. velocity, current) variable. For a simple mechanical reducer with ratio n, one has:

effort map: F_joint = F_actuator * n

flow map:   V_joint = V_actuator / n

From the above it can be seen that power remains constant between input and output. Complementary Wikipedia link (first part will do).

Transmission URDF Format

See URDF Transmissions.

Transmission Interfaces

Transmission-specific code (not robot-specific) implementing bidirectional (actuator <-> joint) effort and flow maps under a uniform interface shared across transmission types. This is hardware-interface-agnostic. A list of available transmission types as of this writing:

  • Simple Reduction Transmission
  • Differential Transmission
  • Four Bar Linkage Transmission

Usages:

Example

See here

Joint Limits

The joint_limits_interface contains data structures for representing joint limits, methods for populating them from common formats such as URDF and rosparam, and methods for enforcing limits on different kinds of joint commands.

The joint_limits_interface is not used by controllers themselves (it does not implement a HardwareInterface) but instead operates after the controllers have updated, in the write() method (or equivalent) of the robot abstraction. Enforcing limits will overwrite the commands set by the controllers, it does not operate on a separate raw data buffer.

Specification

  • Joint limits Position, velocity, acceleration, jerk and effort.

  • Soft joint limits Soft position limits, k_p, k_v (as described in pr2_controller_manager/safety_limits).

  • Utility method for loading joint limits information from URDF (only position, velocity, effort)

  • Utility method for loading soft joint limits information from URDF

  • Utility method for loading joint limits from ROS parameter server (all values). Parameter specification is the same used in MoveIt, with the addition that we also parse jerk and effort limits.

Joint limits interface

  • ros_control interface for enforcing joint limits.

  • For effort-controlled joints, position-controlled joints, and velocity-controlled joints, two types of interfaces have been created. The first is a saturation interface, used for joints that have normal limits but not soft limits. The second is an interface that implements soft limits, similar to the one used on the PR2.

Example

See here

Examples

Install

On Ubuntu, you can install ros_control from debian packages (recommended):

sudo apt-get install ros-$ROS_DISTRO-ros-control ros-$ROS_DISTRO-ros-controllers

Or on Ubuntu and other platforms from source. To ease installing from source a rosinstall file is provided:

cd CATKIN_WORKSPACE/src
wstool init
wstool merge https://raw.github.com/ros-controls/ros_control/$ROS_DISTRO-devel/ros_control.rosinstall
wstool update
cd ..
rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
catkin_make

Ideas and future perspectives

Not exactly a roadmap, but this page contains discussion and proposed solutions to allow ros_control to better accommodate more complex control setups and address shortcomings in the current implementation.

A ROS Control SIG exists with a mailing list for discussing ros_control issues and features. You are encouraged to join and help with ros_control's development!

Wiki: ros_control (last edited 2015-03-17 08:21:07 by AdolfoRodriguez)