The disturbance observer is a tool for compensating disturbances, it is very useful and widely utilized in robotics.

When applying a force to a object via a motor we would expect the object to accelerate according to Newtons second law $F=m\ddot{x}$ as show in the block diagram below.

However in practice we often find that some sort of unmodeled and undesired force is acting on our object and as a result the acceleration is different from what we would expect.

This is where the disturbance observer comes in. As the name suggests it observes the value of the disturbance. Once we know the value of the disturbance, then we can compensate it such that the system will behave as if there was no disturbance force acting on it. An example implementation of the disturbance observer is shown below

The low pass filters parameter ,g,  can be tuned to change the performance of the system. If its too high then the system will become unstable, if its too low then the system might not respond to high frequency disturbances fast enough. This type of disturbance observer is based on acceleration signals but in practice our sensors are usually encoders, which are essentially position sensors, so we would have to discretely differentiate the position data to get an acceleration curve. Unfortunately discrete differentiation can introduce noise and time delay into the acceleration data. Therefore some of the more practical implementations of the disturbance observer rely on position or velocity data. Actually in the literature disturbance observers which work on the Cartesian(a.k.a workspace) level are known as workspace observers or WOB for short, therefore the above block diagram is actually a WOB and DOB is shown below.

As can be seen the joint space implementation is not much different from the workspace implementation, the only real difference is that instead of $F=m\ddot{x}$ the rotational equivalent $\tau=J_n\ddot{\theta}$ is used. By the way $J_n$ is the nominal inertia of the plant while $J$ is the real. As you may have noticed, for this scheme to work we have to know the weight/inertia of the link to which the motor is attached. However the good news is that this scheme still works as long as the nominal mass/inertia is greater than the real mass inertia. So some trial and error checking is allowed although the closer we are to the real value the better.

Next: Position Control

Previous: Inverse Kinematics