The motion framework uses the so called
MotionPhase, which implements a few functions and are used in a control cycle of the module
MotionEngine. Different modules implement different versions of the
MotionPhase, which can be created by the so called
MotionGenerators. The overview is seen below.
MotionEngine takes the representation
MotionRequest from the behavior and acts accordingly.
For it the
MotionEngine will always first update the currently active
MotionPhase, to let it know a motion frame passed.
isDone-function is used to determine, if the active
MotionPhase can be stopped and a new one can begin.
If so the
MotionGenerators are used with the
MotionRequest to create a new
Additionally the until now active
MotionPhase can also create a new one, which then overwrites the one from the
Afterwards the head and arm joints are determined and last but not least the active
MotionPhase is used to determine the rest of the joints.
This motion cycle is illustrated below.
Adding New Motions¶
The B-Human system supports different motion types like walking, kicking or getting up. One may add more motions, which shall be executable from the behavior. To achieve this the new motion must be added to the following files:
Src/Representations/MotionControl/MotionRequest.h: add your motion to the enum
Motionand other new parameters to the
Src/Representations/MotionControl/: add a representation which inherits from
Src/Modules/MotionControl/: add a module, which will provide the added representation
Src/Modules/MotionControl/MotionEngine/MotionEngine: add the representation as
REQUIRESand add it to the
Src/Representations/BehaviorControl/SkillInterfaces.h: add a skill that sets the
MotionRequestmotion and the other new parameters
Src/Modules/BehaviorControl/SkillBehaviorControl/Skills/Output/MotionRequest/: add the implementation of your skill
Config/Scenarios/*/threads.cfg: add the provider for the new representation
Motion Coordinate System¶
All necessary information for
Motion comes from the representation
It is generated by
Cognition and is relative to the
TorsoMatrix of the robot at the time the
MotionRequest was last updated.
Therefore the robot can be in different configurations.
To accurately determine the ball position relative to the robot which is compatible to how the
WalkingEngine functions, a transformation is needed to convert the robot relative coordinates (from the
MotionRequest) into walk step relative coordinates.
As a walk step size is always relative to the current support foot, the transformation must calculate how the robot would move IF it would execute the step size of 0 rotation and 0 translation.
This transformation is visually shown below.
A transformation function is provided in
We assume a support foot switch occures and the left foot will be the swing foot.
In the state
Cognition Coordinatesystem the ball is relative to the robot and therefore relative to its
TorsoMatrix, which is defined by the middle point between both feet and the average yaw rotation of both.
Motion Relative Start shows where the left foot would be if a step size of 0 would be executed and where its coordinatesystem lies within the current one.
Motion Transformation transforms the coordinate system in a way, that the would be
TorsoMatrix is now at the coordinate point (0,0) with a straight alignement.
This results in a completely different ball position.
Previously its position was far away to the right side and now it is directly in front of the left foot.
With this transformation we can now correctly plan the walking steps or walk kicks.
Note that at no point a walk step was executed yet.
This is all done just to get the correctly transformations of the world around the robot, like the ball, to correctly calculate the walk steps.
For example to kick the ball a simple walk step of 0 rotation, a few centimeter forward and 0 to the side would be sufficient.
In the real world the robot would directly go from the starting state
Cognition Coordinatesystem to execute the forward step, without first returning the swing foot parallel to the support foot.