top of page
  • joint_state_controller: This controller reads all joint positions and publish them on to the topic "/joint_states". This controller does not send any command to the actuators. Used as "joint_state_controller/JointStateController". 

​

  • effort_controllers: Use when you want to send commands to an effort interface. This means that joint actuator you want to control accepts effort [current (or) voltage] command.

               JointPositionController: Used as "effort_controllers/JointPositionController". This controller plugin accepts the position                                                         [radians (or) meters] value as input. Error (goal position - current position) is mapped to output                                                     effort command through a PID loop.

               JointVelocityController: Used as "effort_controllers/JointVelocityController". This controller plugin accepts the velocity                                                           [radians/sec (or) meters/sec] values as input. Error (goal velocity - current velocity) is mapped to                                                   output effort command through a PID loop.

​

               JointEffortController: Used as "effort_controllers/JointEffortController". This controller plugin accepts the effort [force (or)                                                torque] values as input. The input effort is simply forwarded as output effort command to the joint                                                  actuator. The values of P, I and D have no effect on output effort.

​

               JointGroupPositionControllerUsed as "effort_controllers/JointGroupPositionController". This controller functions same as                                                             effort_controllers/JointPositionController for a group of joints.

                

               JointGroupEffortControllerUsed as "effort_controllers/JointGroupEffortController". This controller functions same  as                                                                effort_controllers/JointEffortController for a group of joints.    

 

  • velocity_controllers: Use when you want to send commands to an velocity interface. This means that joint actuator you want to control accepts velocity command directly.

               JointPositionControllerUsed as "velocity_controllers/JointPositionController". This controller plugin accepts the position                                                      [radians (or) meters] value as input. Error (goal position - current position) is mapped to output                                                      velocity command through a PID loop.

​

               JointVelocityController: Used as "velocity_controllers/JointVelocityController". This controller plugin accepts the velocity                                                      [radians/sec (or) meters/sec] values as input. The input velocity value is  simply forwarded as                                                        output command to the joint actuator. The values of P, I and D have no effect on output command.

​

               JointGroupVelocityControllerUsed as "velocity_controllers/JointGroupVelocityController". This controller functions same                                                               as velocity_controllers/JointVelocityController for a group of joints.

​

  • position_controllers: Use when you want to send commands to an position interface. This means that joint actuator you want to control accepts position command directly.

                JointPositionController: Used as "position_controllers/JointPositionController". This controller plugin accepts the position                                                      [radians (or) meters] values as input. The input position value is simply forwarded as output                                                          command to the joint actuator. The values of P, I and D have no effect on output  command.

                

                JointGroupPositionControllerUsed as "position_controllers/JointGroupPositionController". This controller functions same                                                              as position_controllers/JointPositionController for a group of joints.​

​

  • joint_trajectory_controllers: This controller is used for executing joint-space trajectories on a group of joints. Trajectories are specified as a set of waypoints to be reached. Waypoints consist of positions, and optionally velocities and accelerations. For more information on this controller, click here.

                 effort_controllersUsed as "effort_controllers/JointTrajectoryController". This controller plugin is used for the  joint                                                     actuators that accepts effort [current (or) voltage]. The position+velocity trajectory following error is                                               mapped to the output effort commands through a PID loop.


                 velocity_controllersUsed as "velocity_controllers/JointTrajectoryController". This controller plugin is used for the joint                                                    actuators that accepts velocity command directly. The position+velocity trajectory following error is                                                  mapped to the output velocity commands through a PID loop.

​

                 position_controllers: Used as "position_controllers/JointTrajectoryController". This controller plugin is used for the joint                                                   actuators that accepts position command directly. The desired positions in the specified trajectory                                                   are simply forwarded to the joints. The values of P, I and D have no effect on output command.

  • Interfaces for Joint Actuators:

       - EffortJointInterface : This interface is used for the joint actuators which accepts effort (voltage or current) command. As you                                                   might have guessed by now, this interface is used with the effort_controllers.

​

       - VelocityJointInterface : This interface is used for the joint actuators which accepts velocity command directly. Used with the                                                      velocity_controllers.


       - PositionJointInterface : This interface is used for the joint actuators which accepts position command directly. Used with the                                                       position_controllers.

       

  • Interfaces for Joint Sensors:

       - JointStateInterface  : This interface is used when you have senors for getting the current position or/and velocity or/and effort                                                 (force/torque) of the joints. Used with joint_state_controller.                                                                                                               JointStateInterface is used in almost all robot because it gets the current joint positions of the robot which

                                             data in-turn is used by the tf/tf2 to calculate forward kinematics of the robot.

​

       - ImuSensorInterface : This interface is used when you have a IMU sensors which is used to get the orientation, angular velocity                                               and linear acceleration of the joint/robot. This is used with imu_sensor_controller.

​

          Based on the type of the motors and sensors you are using, you have to choose the interfaces accordingly. Now that we have understood the types of interfaces available for joint actuators and sensors, lets learn how to write the hardware_interface node (the software representation of our robot).

 

          So lets assume a robot with three joints as example and will write hardware interface for that. Lets start.

All the projects I haves made are using ros_control. So you can check my projects for working examples of robots using ros_control.

​

We are half way through about ROS Control.

Good things take time. Visit again for complete material.

​

Work under progress....!!!!!!

​

​

The tricky part in understanding ros control is to write the hardware_interface node. Once we write the hardware abstraction node we
have every thing ready to control the robot.

So lets see how to write the hardware interface node. 

bottom of page