2024¶
Getting Started¶
macOS¶
Make/macOS/generate
now creates Xcode projects with reproducible GUIDs. The tool Util/SimRobot/Make/macOS/pbxgen
replaces the random GUIDs created by cmake
by ones derived from the project structure. As a result, Xcode does not create a new set of precompiled headers anymore whenever the project file was regenerated. In addition, Make/macOS/generate
is much faster now.
Architecture¶
Team Communication¶
We improved our communication and decision-making to determine when robots should send packages to their temmates. Previously, once our budget limit implementation allowed for one message to be send, all robots would be able to send. This caused a deficit of up to six messages and therefore for no more messages to be send for the next 6 seconds. This caused a lot of problems with multiple robots wanting to play the ball and not being capable to resolve this situation for a long period of time. We added a restriction to prioritize sending messages from robots playing the ball. In addition, a delay for robots further away from the ball is now included. With those adjustments, we do not overshoot our own budget anymore and allow for a smoother communication.
Perception¶
Ball and Penalty Mark Perceptor¶
We combined the ball perceptor network and the penalty mark classifier network to a unified model (see this section).
CNN-based Goal Posts Detection¶
We developed a method that finds candidate regions for goal posts and then uses a convolutional neural network to either confirm or reject those candidates (see this section).
Improved Line Intersection Classification¶
The classification of intersections of field lines was split into two modules and the classification network was retrained. In addition to our previous approach, the network now gets the distance to the intersection candidates as an additional input (see this section).
Modeling¶
Whistle Detection¶
B-Human's WhistleRecognizer
was replaced by the WhistleDetector
developed by the Nao Devils. We adapted their module to our code base and modified it to better work with our team-wide acceptance of the whistle. We also added a minimum confidence required for both individual detection methods (physical model and neural network) to accept a whistle.
Behavior Control¶
CABSL 2¶
The per-robot behavior control (SkillBehaviorControl
) consists of high-level actions and skills. Before 2024, the high-level actions were implemented as so-called options in the C-based Agent Behavior Specification Language (CABSL). Skills were written in a specialized skill framework, either as plain C++ code or also as CABSL options. This is now consolidated into a new version of CABSL, implementing everything as options. In comparison to CABSL 1, CABSL 2 adds the ability to split the behavior into multiple compilation units, it uses a different syntax for passing arguments, and it adds constant definitions as well as state variables. The standalone version of CABSL 2 is described here. However, the version integrated into the B-Human framework differs in a few aspects from the standalone version:
- Rather than using the
iostream
framework from the C++ standard library for streaming arguments and reading configuration files, the B-Human streaming framework is used. - In addition to referring to options by their names as strings, the B-Human version also creates an enumeration type
Option
within the behavior. It overloads methods such asexecute
andselect_option
to also accept this type. - Per-option definitions can be read and changed using the modify mechanism.
- The
SkillBehaviorControl
is a module and its options inherit all representations that it requires and they can set all representations that it provides.
Handling the Standby State¶
For detecting the referee signal in the Standby
state, we use the same approach as last year (see this section), but we extract a smaller patch from the top of the upper camera image. The patch is smaller, because the referee appears a lot smaller in the image if robots have to look at him/her from the opposing touchline. The robots look at the assumed position of the referee in a way that he/she should appear in the upper part of the upper camera image to minimize blooming effects from the ceiling lights.
As misdetections cannot be out-ruled, a single robot starts to enter the pitch after the signal was detected, giving the referee enough time to penalize that robot before the rest of the team walks in, which it would not if the pawn sacrifice is penalized. The robot walks in from the side where the referee stands, which means that even if it were removed, the same number of robots can still look at the referee afterwards. There is a maximum of two pawn sacrifices before the robots just wait for the GameController to announce the Ready
state.
If the team missed the referee signal and receives the delayed Ready
signal from the GameController, the robots enter the pitch with maximum speed. Most of them will still reach their kick-off positions within the time window of 15 seconds.
Indirect Kick¶
To implement the indirect kick rule, each robot shares the timestamp of the last kick it performed with its teammates. If any of the timestamps received from teammates is more recent than the last set play, a robot is allowed to kick at the goal. The first robot that kicks the ball after a set play sends this information as a priority message (see B-Human Team Report and Code Release 2022 Section 3.2.1) to ensure that its teammates know that they can score. To preserve the message budget, further kicks are only announced as a byproduct of the regular team communication.
If a robot is not allowed to kick at the goal, it will pass to a teammate or dribble instead, just as it would do if the way to the goal is blocked or the goal is too far away.
Calibration¶
The calibration procedure got a handful of fixes. It can now be aborted at any time and restarted by simply bringing the robot back into the unstiff state with the head sensors. For two full calibrations back to back, a restart of the software is still necessary.
Motion Control¶
Walk Stability¶
We did smaller adjustments and improvements in the already existing balancing features:
- The step adjustments velocity, which is used to determine how fast the feet are allowed to be moved to the corrected position, is drastically reduced once the current step time exceeds the step duration.
- The side hip shift was improved with more suitable parameters.
Walk Planing¶
Our step planning modules WalkToBallEngine
and WalkToPoseEngine
and the used step planing utilities WalkUtilities
got multiple bug fixes to reduce the occurrence of steps, which just let the robot stand still and waste up to 500 ms (two walking steps) of walking time.
In-Walk Kicks¶
We improved the stability, accuracy and speed of execution.
- The decision, whether a kick will be unstable based on the previous step size, was improved and a
WalkDelayPhase
is used to improve kick stability. - In combination with the stable walk, the execution time of the kicks could be reduced by increasing the deviation thresholds.
- The accuracy was improved by updating the kick after being calculated in the first few frames after the kick started.
- We added dynamic diagonal kicks. Those are an interpolation between the forward and side kicks and are dynamically calculated based on the ball center position and the closest point of the edge of the kicking sole. This allows for a fast play of the ball near other robots.
Intercepting¶
We changed our intercepting for the dynamic ball handling challenge in 2023. This version was refined and used for the normal games. It replaces the simple intercepting by side steps requested by the behavior. This new version plans directly in the Motion
process. It places the robot in the middle of the ball path and optimizes the translational step size of the rotational part. This automatically creates large side steps when the specific leg is the swing foot that is closer to the ball path and large rotational steps in the other case. In case there is not much time left, a step is calculated that only places one sole on the ball path. Also a back walking step is requested to ensure not walking into the ball, but a more smooth stopping of the ball.
Additionally we added the possibility to overwrite the current executed walking step to execute an intercepting step for a rolling ball. Previously, if the robot just started a walk step with the same side the ball would intercept the own y-axis, the robot needed to wait two full steps to start intercepting. This is a waste of up to 500 ms. Now the robot can start intercepting, even if the step is close to being finished.
Goalie Jump¶
We changed the decision for when the goalie can jump while walking. This reduces the chance of a buffered jump when the robot still needs to finish its walking steps. Also more intercepting by walking is used to allow the goalie to be more active with the ball afterwards.
Technical Challenges¶
B-Human participated in the only technical challenge that was held this year: