Skip to content

Commit ce857e1

Browse files
committed
Use saturating arithmetic in ball placement play to avoid underflow
1 parent 31c4281 commit ce857e1

2 files changed

Lines changed: 25 additions & 15 deletions

File tree

src/software/ai/hl/stp/play/ball_placement/ball_placement_play_fsm.cpp

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,19 @@ BallPlacementPlayFSM::BallPlacementPlayFSM(
1313
{
1414
}
1515

16+
// Subtract b from a, or return 0 if b is larger than a
17+
static unsigned int subSat(unsigned int a, unsigned int b)
18+
{
19+
if (b > a)
20+
{
21+
return 0;
22+
}
23+
else
24+
{
25+
return a - b;
26+
}
27+
}
28+
1629
void BallPlacementPlayFSM::alignWall(const Update &event)
1730
{
1831
PriorityTacticVector tactics_to_run = {{align_wall_tactic}};
@@ -25,8 +38,8 @@ void BallPlacementPlayFSM::alignWall(const Update &event)
2538
TbotsProto::MaxAllowedSpeedMode::PHYSICAL_LIMIT,
2639
TbotsProto::ObstacleAvoidanceMode::AGGRESSIVE);
2740

28-
setupMoveTactics(event, event.common.num_tactics -
29-
static_cast<unsigned int>(tactics_to_run[0].size()));
41+
setupMoveTactics(event, subSat(event.common.num_tactics,
42+
static_cast<unsigned int>(tactics_to_run[0].size())));
3043
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
3144
move_tactics.end());
3245

@@ -52,8 +65,8 @@ void BallPlacementPlayFSM::pickOffWall(const Update &event)
5265
TbotsProto::MaxAllowedSpeedMode::BALL_PLACEMENT_WALL_DRIBBLE,
5366
TbotsProto::MaxAllowedSpeedMode::BALL_PLACEMENT_WALL_DRIBBLE);
5467

55-
setupMoveTactics(event, event.common.num_tactics -
56-
static_cast<unsigned int>(tactics_to_run[0].size()));
68+
setupMoveTactics(event, subSat(event.common.num_tactics,
69+
static_cast<unsigned int>(tactics_to_run[0].size())));
5770
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
5871
move_tactics.end());
5972

@@ -86,8 +99,8 @@ void BallPlacementPlayFSM::alignPlacement(const Update &event)
8699
tactics_to_run[0].push_back(align_placement_tactic);
87100
}
88101

89-
setupMoveTactics(event, event.common.num_tactics -
90-
static_cast<unsigned int>(tactics_to_run[0].size()));
102+
setupMoveTactics(event, subSat(event.common.num_tactics,
103+
static_cast<unsigned int>(tactics_to_run[0].size())));
91104
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
92105
move_tactics.end());
93106

@@ -135,8 +148,8 @@ void BallPlacementPlayFSM::placeBall(const Update &event)
135148
}
136149
}
137150

138-
setupMoveTactics(event, event.common.num_tactics -
139-
static_cast<unsigned int>(tactics_to_run[0].size()));
151+
setupMoveTactics(event, subSat(event.common.num_tactics,
152+
static_cast<unsigned int>(tactics_to_run[0].size())));
140153
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
141154
move_tactics.end());
142155

@@ -168,8 +181,8 @@ void BallPlacementPlayFSM::releaseBall(const Update &event)
168181
tactics_to_run[0].push_back(wait_tactic);
169182
}
170183

171-
setupMoveTactics(event, event.common.num_tactics -
172-
static_cast<unsigned int>(tactics_to_run[0].size()));
184+
setupMoveTactics(event, subSat(event.common.num_tactics,
185+
static_cast<unsigned int>(tactics_to_run[0].size())));
173186
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
174187
move_tactics.end());
175188

@@ -220,8 +233,8 @@ void BallPlacementPlayFSM::retreat(const Update &event)
220233
tactics_to_run[0].push_back(retreat_tactic);
221234
}
222235

223-
setupMoveTactics(event, event.common.num_tactics -
224-
static_cast<unsigned int>(tactics_to_run[0].size()));
236+
setupMoveTactics(event, subSat(event.common.num_tactics,
237+
static_cast<unsigned int>(tactics_to_run[0].size())));
225238
tactics_to_run[0].insert(tactics_to_run[0].end(), move_tactics.begin(),
226239
move_tactics.end());
227240

src/software/ai/hl/stp/play/ball_placement/ball_placement_play_fsm.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
#include "software/ai/hl/stp/play/play_fsm.hpp"
66
#include "software/ai/hl/stp/tactic/dribble/dribble_tactic.h"
77
#include "software/ai/hl/stp/tactic/move/move_tactic.h"
8-
#include "software/ai/hl/stp/tactic/pivot_kick/pivot_kick_tactic.h"
9-
#include "software/ai/passing/eighteen_zone_pitch_division.h"
10-
#include "software/geom/algorithms/closest_point.h"
118

129
struct BallPlacementPlayFSM : public PlayFSM<BallPlacementPlayFSM>
1310
{

0 commit comments

Comments
 (0)