Stand Up¶
For standing up after fallen, we use RL policies, executed by the module GetUpEngine. For the Booster K1 we use two different ones.
The first try uses a fast stand up policy, after that each try uses a slower version. For the Booster T1 there exists only the slow version.
The fast version is trained with an adjusted version of mjlab playground1,
the slow version is trained with an adjusted of BoosterGym2 and can be found on our GitHub3.
To prevent damage when a get up is not possible, a dynamic break up is triggered.
Network Structure Input¶
Slow Policy¶
The expected neuronal network input is expected to be as follows:
- 3D Vektor (0,0,-1) rotated around the current torso orientation
- Sequence of x, y, z
- 3 Inputs
- Gyro values of the IMU
- Sequence of x, y, z
- 3 Inputs
- Phase Input
- Value between [0,1]
- 0 Representing the start, 1 the end of the stand up
- 1 Input
- The measured joint positions
- Sequence for Booster robots is (waistYaw), lHipPitch, lHipRoll, lHipYaw, lKneePitch, lAnklePitch, lAnkleRoll, rHipPitch, rHipRoll, rHipYaw, rKneePitch, rAnklePitch, rAnkleRoll
- A position offset is subtracted beforehand
- [12|13] Inputs, depending on K1 or T1
- The measured joint velocities
- Sequence the same as joint positions
- Raw values calculated based on the last and current joint positions
- Multiplied by factor 0.1
- [12|13] Inputs, depending on K1 or T1
- The last policy joint output
- The requested joint positions
- Sequence the same as joint positions
- [12|13] Inputs, depending on K1 or T1
- The requested joint positions
Fast Policy¶
The expected neuronal network input is expected to be as follows:
- Gyro values of the IMU
- Sequence of x, y, z
- 3 Inputs
- 3D Vektor (0,0,-1) rotated around the current torso orientation
- Sequence of x, y, z
- 3 Inputs
- The measured joint positions
- Sequence for Booster robots is (waistYaw), lHipPitch, lHipRoll, lHipYaw, lKneePitch, lAnklePitch, lAnkleRoll, rHipPitch, rHipRoll, rHipYaw, rKneePitch, rAnklePitch, rAnkleRoll
- A position offset is subtracted beforehand
- [12|13] Inputs, depending on K1 or T1
- The measured joint velocities
- Sequence the same as joint positions
- Raw values calculated based on the last and current joint positions
- Multiplied by factor 0.1
- [12|13] Inputs, depending on K1 or T1
- The last policy joint output
- The requested joint positions
- Sequence the same as joint positions
- [12|13] Inputs, depending on K1 or T1
- The requested joint positions
Neuronal Network output¶
The expected neuronal network output is as follows:
- The requested joint positions
- Same sequence as joint position Input
- The basis offset needs to be added
The output joint positions are expected to be clipped and a position offset added. The raw values are used as input for the next inference of the policy.
Break Up¶
For the fast policy, the stand up try is either automatically stopped after 3 seconds, or when the torso orientation is increasing once again after it increased before by a large amount. For the slow policy, the configuration file defines reference values. It defines the duration of each step as well as the expected torso orientation. This can be combined with the phase input to detect once the robot diverted too much from the configuration.
Procedure¶
The fast stand up can start immediately, the slow stand up first starts a static recover motion. When the stop state is active from a GameController, the start of a new try is paused, but an already executed one continues.
Note
The fast stand up can fail when the robot is in a pile of robots. In that case the robot could fall on its head during the break up. Same can occure for the slow stand up, but that version is robust and normally succeeds in such situations.