# Position Control vs Velocity Control vs Torque Control

Please can somebody explain to me the difference between Position Control, Velocity Control, and Torque Control? Specifically, I am thinking in terms of a robot arm. I understand that position control tries to control the position of the actuators, such that the error signal is the difference between the current position and the desired position. Velocity control is then trying to control the velocity of each actuator, and torque control is trying to control the torque of each actuator.

However, I don't understand why these are not all the same thing. If you want to send a robot arm to a certain position, then you could use position control. But in order to move an actuator to a certain position, you need to give it a velocity. And in order to give it a velocity, you need to give it a torque. Therefore, whether the error is in position, velocity, or torque, it always seems to come back to just the error in torque. What am I missing?

Torque is analogous to force for rotating systems, in that:

$$F = m a \\ \tau = I \alpha \\$$

Where $\alpha$ is angular acceleration and $I$ is moment of inertia. $m$ and $a$ are mass and linear acceleration, respectively.

So, in a way, a position controller, a velocity controller, and an acceleration (torque) controller are all different implementations of each other because each is the integral of the next - position is the integral of velocity, and velocity is the integral of acceleration.

Where these differ is how you apply the controller. This typically depends on what you're interested in. For instance, are you trying to control position, as in a servo motor? Are you trying to regulate acceleration, as in a hospital elevator?

Typically you will have some specification you are trying to meet. Then, with your specifications, you can use typical PID guidelines to build a controller for that particular aspect. That is, if you work at that particular "level": position, velocity, or acceleration, then you can design for a particular rise time, overshoot, and damping.

The difference being that you're designing acceleration overshoot, or positional overshoot.

Generally I would say the output of the controller goes to motor voltage, so while the output of the controller is always the same (motor volts) the input and gains are different, with the desire to achieve a different set of operating parameters.

I'll close by pointing out that a motor controller output is terminal voltage because that's how one modulates motor current. Motor current, in turn, generates torque via the motor torque constant.

So, ultimately, every controller regulates motor torque, but with the end goals varying - control motor acceleration, velocity, or position. Again, what you're trying to control depends on the application and will affect the gains you choose.

• Thanks very much for your answer. I guess my confusion comes from understanding why you would ever use anything other than position control. For example, with a robot arm, all you need to do is to get it from one position to the next. Why would you care about the actual torque in the joints? Why not just figure out the position which all the joints need to be set at, and then use the position error in your feedback loop? – Karnivaurus Jun 9 '16 at 21:46
• As I say in my answer @Karnivaurus second order effects are notoriously difficult to control. If you need Torque Control it's probably because you want to control Torque as a first order effect. You don't want your robot to start dropping things because someone decided that it should be able to run a bit faster. – Mark Booth Jun 10 '16 at 12:07
• @MarkBooth gives a great example of torque control for robotic hands. In general, these applications are referred to as "compliant actuators" - a position or velocity controller might seed the operating point of a torque controller. Note also that not every application that needs a controller is a robotic arm. – Chuck Jun 10 '16 at 12:28
• @Karnivaurus - In my line of work (industrial drives) we care a lot about precise control of motor speeds - this is in between a position and torque (acceleration) controller. If the forward drive in a metal mill is turning too slow then there's a "cobble" - the metal accumulates somewhere it's not supposed to, which is generally where people stand. Too fast in a paper mill and it breaks the sheet. – Chuck Jun 10 '16 at 12:31

I'm going to take a slightly different tack to Chuck.

## What is Torque Control?

For me, Torque Control is about performing a move with an explicitly defined torque, rather considering torque just the means to the end of Position or Velocity control.

Normally when you move a robot, you specify position and speed, with the robot allowed to use any and all torque up to it's maximum, required to achieve those two goals.

When you specify a move with a Torque component, you are saying you want to use that specific torque for that move. It's easiest to illustrate this with an example.

## Example: picking up an egg

Let's say that you want your robot to grip an egg. The egg is a fragile spheroid of (slightly) variable size.

### Without Torque control

Ideally, you would have to know the orientation of the egg and the precise dimension along the grip axis. You then have to close the gripper to be slightly smaller than that grip axis dimension and rely in the error between the demanded and actual position to apply the correct amount of force to grip the egg securely.

This second order effect is very fragile and could result in eggs being dropped once motors start to age and provide less torque, or start to crush eggs if PID parameters are tweaked to (say) improve position or velocity accuracy.

Since eggs aren't uniform, if you cannot measure the grip axis dimension for each egg, then you will need to work out a compromise grip position.

Too small and large eggs will be broken by the force applied, too large and small eggs won't be gripped tightly enough. If there is sufficient variation between the smallest and largest eggs, there may be no compromise position which won't either crush or drop some eggs.

### With Torque control

With Torque control, you have much finer, more predictable control. You are specifying torque as a first order effect and have direct control over it.

Typically, you would start by moving the gripper without Torque Control to just larger than the largest egg, then move the gripper with Torque Control to just smaller than the smallest egg. As soon as the torque limit is achieved, the motor would stop moving, and the egg would be gripped with precisely the required force.

## Why not use Torque control all the time?

You typically only ever use Torque Control when you absolutely need it because direct Torque Control means giving up control of position and velocity.

You can get close to direct Torque Control by applying a Torque limit to a standard Position/Velocity move, but you have to be careful, since the torque limit must be higher than the minimum torque needed to achieve those moves.

Applying a torque limit which is too low can easily result in following errors (actual position falling behind required position, resulting in poor control) and can even prevent a robot from moving to it's destination position (if the torque limit is lower than the torque required to make the move, due to stiction, friction or gravity to name but a few possible factors).

## Complications

There are some situations where you need to apply a force smaller than the stiction of the system. Because the static friction would prevent the required force being applied, effectively no force would be applied. This could be the case with some direct drive motors for instance. In that case your Torque Control system may need to be able to briefly apply a higher force to break past the static friction, but then quickly revert to the required Torque, so that excess force is not applied.

## Conclusion

Torque control is an important technique for some applications, it is something which our bodies take for granted, but which Robot systems have to be explicitly configured for.

I think Mark Booth's answer was best. Talked about the applicational differences between the modes, without getting into theory or detracting from the original question.

If I can expand a little further to bring more clarification:

Each mode uses the commanded method as its PRIMARY form of control, and it has control of the other parameters only by way of limitation.

As Mark mentioned above, you can use a POSITION MOVE with LIMITS on the torque and velocity.... the controller will do its best to get to that position within the limits provided, but makes no effort to meet anything specified by the velocity or torque limits. Therefore, you could get to your commanded position with a speed of 10in/sec even though your limit was set at 40in/sec.

Basically, whatever you mode you command in, the move will attempt to meet that criteria first and will ignore the other two (aside from limits).

If VELOCITY is the most important thing you need to control, such as a conveyor... then use Velocity Mode. If Torque is important, such as not tearing a web or overtensioning something, then use Torque Mode.

I think where it's confusing is between VELOCITY mode and POSITION mode. Arguably, you could control a conveyor using POSITION MOVES and simply setting limits on how much velocity the movement command can use. Eventually, after getting up to speed, your conveyor will be moving at the velocity specified in your POSITION MOVE. However, if you need to adjust your speed a bit, a POSITION MOVE makes this difficult. You now have to find a new position to move to and either increase or decrease the limit on your "speed max". This is much easier if you are just using VELOCITY control, as the position of a conveyor is essentially cyclic and infinite. You can simply adjust up or adjust down the velocity of your velocity command, and you DON'T REALLY CARE where the position of the conveyor is. Namely, velocity is important but position isn't.

With the "egg robot" example above, your torque control cares about keeping the torque at a specific value, but it doesn't care where the position of the gripper is, or what the velocity is.

It was confusing for me as well, but when you're spec'ing an application, just think about WHAT IS MOST IMPORTANT to you, and use that as your control method. They all will essentially do the same thing, but it's kind of an "order of precedence" for what it cares about most.