Copy-Paste from your other thread, Alienkid10. Take the time to read it.
Servo motion is a powerful way to achieve motion in the physical world. It consists in a servo controller that adjusts the force on the object in order to achieve a given speed, hence the name servo motion.
Achieving speed through force is a very natural method because this is how the real world works. It produces natural movements, avoids the collision problem unlike dLoc and interacts correctly with gravity unlike linV.
At the heart of the servo motion actuator there is a PID servo controller: it measures the speed error (= the difference between the target speed and the actual speed) and updates the force based on the error by applying a force that is proportional to the error (the ‘P’ coefficient) and proportional to the integral of the error (the ‘I’ coefficient). The higher the coefficients, the “harder” the speed control (= quick reaction); the lower the coefficients, the “softer” the speed control (=slow reaction, sliding effect).
Additionally you can limit the force along each axis so that the accelaration (or braking) force is limited.
To compare with the cruise control in a car, the P and I coefficient define how precise will be the control and the limit coefficients define the power of the engine and thus how quickly it will reach the target speed.
You can achieve a great variety of movement styles with the servo motion actuator, for example, by not limiting the force along the transversal axis, you get a strong reaction to sliding, which is equivalent to anysotropic friction.
The servo motion actuator applies forces; it is therefore not compatible with other actuators that sets the force too, i.e a simple motion force actuator or another servo motion, although it is possible to combine two servo motion actuators that works on different axis.
Here for example a request for Franky’s falling behavior during the Apricot dev: when Franky is falling, its falling speed should be limited (say to 10), as if there was air friction. The idea is to compensate the gravity when the speed reaches the limit. These settings will achieve the goal:
Local flag is not set => the speed is measured and the force is applied in global coordinates, required as we are compensating the gravity.
By setting small force limits on the X and Y axis, the horizontal movements of Franky are not disturbed, just a small friction.
The speed target of -9 on the Z axis sets the target falling speed.
The max force of 15 is sufficient to compensate the gravity (assuming the object mass is 1 and gravity is 9.81, the weigth is 9,81). If the object is heavier, increase that limit.
The min force of 0 means that the servo motion controller will no be able to speed-up the falling (would require negative force), Franky will fall naturally until it reaches -9 from which speed the servo motion will start to apply a positive force to block the speed.
The I coefficient of 0 means no bouncing in the speed: Franky will not slow down, it will simply stop falling faster.
The P coefficient of 10 means that a speed error of 1 is necessary to achieve a negative force that is high enough to compensate the gravity => the actual falling speed will be -10. Note that P is independent to mass: the actual force applied = Perrormass.