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.
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?