This is Paul, my depressed Robot, who can balance on his ball. Click on the picture to see Paul.
2013 I started exploring microcontrollers, that is the result.
Paul measures its acceleration with an acceleration sensor and its angular acceleration with a gyro (MPU6050), and fuses the data by use of a Kalman filter to get a stable orientation with no drift. A PID-controller computes a
correction signal out of its as-is position, velocity and acceleration and the to-be position and speed as set by the remote. This correction signal is transformed to the necessary velocity of each
omnis-wheel by multiple application of 3D-rotation matrixes mapping the head's coordination system to the coordination system of each wheel.
As a result, the omni-wheels compensate the deviation of Paul from the upright position.
Technically it works with two ATMega644 processors, one main controller communicating with the remote via XBee, controlling all decorating stuff (DECTalk voice and lights) and telling the second ATMega the to-be position and to-be speed. The second ATMega runs the control loop above and the drives the omni wheels. By fixed point arithmetic it was possible to tune it such that the control loop runs 166 times a second.
The concept of the schematics is basically a uC doing the control of balance and another uC managing the movements.
This is the initial sketch of how Paul is supposed to look like