Universal Robots Forum

Choosing the right controller

These questions are related to ros_controllers represented in the ur3_controllers.yaml file. Specifically the pos_joint_traj_controller, vel_joint_traj_controller and joint_group_vel_controller.

In the first part I ask questions about the 3 controllers separatly. This is also to validated my comprehension of the controllers. In the last section, I ask a question about the difference between 2 controllers.

position_controllers/JointTrajectoryController

Per the joint_trajectory_controller wiki: For position-controlled joints, desired positions are simply forwarded to the joints.

Does this mean that this is just a feedforward controller (open-loop) from ros_control perspective?

At the lower level, the servoj command is used which will do a little bit of interpolation (comment). There is also a proportionnal gain for following target position (taken from the URScript API Referrence).

So basically this controller is a joint trajectory controller with a P feedback loop where the loop closure is done with the internal UR controller, not with ros_control framework?

velocity_controllers/JointTrajectoryController

Per the joint_trajectory_controller wiki: while for velocity (effort) joints, the position+velocity trajectory following error is mapped to velocity (effort) commands through a PID loop

This is a joint trajectory controller which outputs velocities to reach a position (comment)

Is the servoj command used? If so the only valuable information used is the position. So the the robot is controlled via position.

Is this a feedforward + PID external feedback controller (image from the free reprint of Modern Robotics p.421) aimed for velocity inputs but is derived to feed positions instead? There would also be an internal P feedback loop from the servoj command.

Untitled

velocity_controllers/JointGroupVelocityController

This is a forwarding-controller which takes in velocity setpoints and simply forwards it to the robot controller. (comment)

This simply forwards the velocity inputs through the speedj command as a feedforward controller. It is up to the person to close the loop to achieve what they want (Ex. to create an admittance controller).

pos_joint_traj_controller VS vel_joint_traj_controller

What is the difference between these 2 controllers. Is one of them suppose to make trajectories smoother?