Falling¶
To prevent damage to the robots, a fall is detected and a protective fall motion becomes executed.
The detection is handled by the module FallDownStateProvider and the motion by the module RestrictiveFallEngine.
Fall Detection¶
The module uses an Unscented Kalman Filter to model the center of mass in the support polygon. If the modeled center of mass moves out of the support polygon and its movement is in an angle away from it (e.g. not moving parallel to it),a fall is detected. For the Booster robots we added a scaling factor, to prevent false-positive detections, because for the learned walks the center of mass is often outside the support polygon. Additionally, as a fail-safe we assume a fall whenever the torso is tilted too much.
Fall Motion¶
Once a fall is detected and the robot was previously in a motion that needs a fall prevention,
like walking, standing and kicking, a fall motion is executed. This fall motion is done by the FallPhase.
Currently, we only switch into a soft custom damping mode, to prevent most damage.
Afterwards, the gyro values need to remain below a certain threshold to allow leaving the fall motion and start a get-up routine.
This is due to the fact that the robot might still lie on other robots or obstacles and would fall with full stiffness on the ground,
if a motion would start being executed.
Note
This fail safe exists as we broke a camera once on the NAOs. The robot started the get-up routine too early and hit the head too hard on the ground.