I have a five DoF robot. Each axis is connected to a cylinder. You can send PWM values to each cylinder and you are able to read out the position values of each cylinder which makes it possible to design a closed-loop inverse kinematic controller. Given a desired goal position for the manipulator, assume you have estimated the desired velocity change of each joint (for example using move_group library in ROS).

Although we can control the velocity of the robot's joints by manipulating the PWM values, we cannot perfectly recreate these velocity values since we don't have the dynamic model of the robot. Thus, our best bet is to go for the position control of the robot.

Is my theory so far correct? Or is there a way to implement a velocity controller without a dynamic model?


Your intuition is partially correct in the sense that you ought to go with position control implemented via velocity commands resorting to a kinematic (not dynamic) model of the manipulator.

This can be explained by inspecting one of the easiest policy used for inverse kinematics,

$$ \dot{\mathbf{q}} = \mathbf{J}^{-1} \cdot \left( \mathbf{x}_d - \mathbf{x}(\mathbf{q}) \right), $$

that establishes a closed-loop between the actual error in the Cartesian space and the velocity commands to be sent to the joint motors $\dot{\mathbf{q}}$, being $\mathbf{J}^{-1}$ the inverse of the Jacobian matrix.

Essentially, you cannot send velocity commands without applying instant corrections through the readouts of the end-effector position $\mathbf{x}(\mathbf{q})$, otherwise the small discrepancies of how the commands will get integrated into joint positions (because motors are not perfect integrators) will let you end up far from the target $\mathbf{x}_d$.

The point here is that you only need a kinematic model – in this case the Jacobian – and not a complete dynamic model of the joints comprising for example the masses distribution. The lack of such a latter knowledge can be in fact compensated by the high-level kinematic closed loop.

Nevertheless, if you somehow deal with the dynamics of the system, then you'll certainly obtain better performance.

  • $\begingroup$ Thank you for your advice, which confirms the possible future direction of development. I wish I could deal with the dynamics of the system, but since the robot is hydraulically driven (see the link below), all sorts of nonlinearities related to the hydraulic occur. By any chance, do you have experience of applying PID controller for a nonlinear system? hzc-power.com/de/bagger/… $\endgroup$ – Joe Mar 3 at 11:56
  • $\begingroup$ I have no specific experience with hydraulic systems per se but I can tell you that, although PID's are linear controllers, they can perform pretty well in the presence of nonlinearities if you supply them with model-based feed-forward terms or through gain scheduling. $\endgroup$ – Ugo Pattacini Mar 3 at 12:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.