Skip to content

Commit 1deb21a

Browse files
committed
feat(game_controller_hsl): finalize implementation of base states
1 parent 9dad19f commit 1deb21a

26 files changed

Lines changed: 130 additions & 85 deletions

File tree

src/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/game_status_capsule.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Optional
22

33
from bitbots_utils.utils import get_parameters_from_other_node
4-
from game_controller_hl_interfaces.msg import GameState
4+
from game_controller_hsl_interfaces.msg import GameState
55
from std_msgs.msg import Bool
66

77
from bitbots_blackboard.capsules import AbstractBlackboardCapsule
@@ -20,32 +20,37 @@ def __init__(self, node, blackboard=None):
2020
self.last_goal_from_us_time = -86400.0
2121
self.last_goal_time = -86400.0
2222
self.free_kick_kickoff_team: Optional[bool] = None
23-
self.game_controller_stop: Bool = False
23+
self.game_controller_stop: bool = False
2424
# publish stopped msg for hcm
25-
self.stop_pub = self.node.create_publisher(Bool, "game_controller/stop_msg", 1)
25+
self.stop_pub = node.create_publisher(Bool, "game_controller/stop_msg", 1)
2626

27-
def get_gamestate(self) -> int:
28-
# Init, ready, set, playing, finished, standby
27+
def get_game_state(self) -> int:
28+
# Init, ready, set, playing, finished
2929
return self.gamestate.main_state
3030

31-
def get_gamePhase(self) -> int:
32-
# Timeout, Normal, Penaltyshoot
33-
return self.gamestate.gamePhase
31+
def get_game_phase(self) -> int:
32+
# Timeout, Normal, Extratime, Penaltyshoot
33+
return self.gamestate.game_phase
3434

35-
def get_setPlay(self) -> int:
36-
# None, Kick In, Goalkick, Cornerkick, Pushing Freekick, Penaltykick
37-
return self.gamestate.setPlay
35+
def get_set_play(self) -> int:
36+
# None, Direct Freekick, Indirect Freekick, Penalty, Throw in, Goalkick, Cornerkick,
37+
return self.gamestate.set_play
3838

3939
def get_secondary_team(self) -> int:
40-
# Team ID, wer in set Play den Baall hat
41-
return self.gamestate.kickingTeam
40+
# Team ID, wer in set Play den Ball hat
41+
return self.gamestate.kicking_team
4242

4343
def has_kickoff(self) -> bool:
4444
# vegelcih mit eigener Teamnummer
45-
return self.gamestate.kickingTeam == self.team_id
45+
return self.gamestate.kicking_team == self.team_id
46+
47+
def is_stopped(self) -> bool:
48+
return self.gamestate.stopped
4649

4750
def has_penalty_kick(self) -> bool:
48-
return self.gamestate.set_play == GameState.SET_PLAY_PENALTY_KICK and self.gamestate.kickingTeam == self.team_id
51+
return (
52+
self.gamestate.set_play == GameState.SET_PLAY_PENALTY_KICK and self.gamestate.kicking_team == self.team_id
53+
)
4954

5055
def get_our_goals(self) -> int:
5156
return self.gamestate.own_score
@@ -74,7 +79,7 @@ def get_secondary_seconds_remaining(self) -> float:
7479
)
7580

7681
def get_seconds_since_unpenalized(self) -> float:
77-
return self._node.get_clock().now().nanoseconds / 1e9 - self.seconds_till_unpenalized
82+
return self._node.get_clock().now().nanoseconds / 1e9 - self.unpenalized_time
7883

7984
def get_is_penalized(self) -> bool:
8085
return self.gamestate.penalized
@@ -98,7 +103,7 @@ def gamestate_callback(self, gamestate_msg: GameState) -> None:
98103

99104
self.game_controller_stop = gamestate_msg.stopped
100105

101-
self.stop_pub.publish(self.game_controller_stop)
106+
self.stop_pub.publish(Bool(data=self.game_controller_stop))
102107

103108
"""Anstoß im Falle von Overtime jetzt erstmal nicht genauer geregelt
104109
if (
@@ -109,13 +114,14 @@ def gamestate_callback(self, gamestate_msg: GameState) -> None:
109114
# secondary action is now executed but we will not see this in the new messages.
110115
# it will look like a normal kick off, but we need to remember that this is some sort of free kick
111116
# we set the kickoff value accordingly, then we will not be allowed to move if it is a kick for the others
112-
self.free_kick_kickoff_team = gamestate_msg.kickingTeam
117+
self.free_kick_kickoff_team = gamestate_msg.kicking_team
113118
119+
if gamestate_msg.set_play != 2 and gamestate_msg.secondary_time == 0:
120+
self.free_kick_kickoff_team = gamestate_msg.kicking_team
114121
115-
if gamestate_msg.setPlay != 2 and gamestate_msg.secondaryTime == 0:
122+
if gamestate_msg.set_play != 2 and gamestate_msg.secondary_time == 0:
116123
self.free_kick_kickoff_team = None
117124
118-
119125
if self.free_kick_kickoff_team is not None:
120126
gamestate_msg.has_kick_off = self.free_kick_kickoff_team == self.team_id
121127
"""

src/bitbots_behavior/bitbots_blackboard/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<build_depend>bitbots_docs</build_depend>
2424
<depend>bitbots_tf_buffer</depend>
2525
<depend>bitbots_utils</depend>
26-
<depend>game_controller_hl_interfaces</depend>
26+
<depend>game_controller_hsl_interfaces</depend>
2727
<depend>python3-numpy</depend>
2828
<depend>rclpy</depend>
2929
<depend>ros2_numpy</depend>

src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/game_state_decider.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from bitbots_blackboard.body_blackboard import BodyBlackboard
22
from dynamic_stack_decider.abstract_decision_element import AbstractDecisionElement
3-
from game_controller_hl_interfaces.msg import GameState
3+
from game_controller_hsl_interfaces.msg import GameState
44

55

66
class GameStateDecider(AbstractDecisionElement):
@@ -30,6 +30,11 @@ def perform(self, reevaluate=False):
3030
return "FINISHED"
3131
elif game_state_number == GameState.STATE_STANDBY:
3232
return "STANDBY"
33+
else:
34+
# This should never happen, but all cases required string response
35+
# as we do not get any stack trace otherwise
36+
self.blackboard.node.get_logger().error(f"Received unknown game state number: {game_state_number}")
37+
return "UNKNOWN"
3338

3439
def get_reevaluate(self):
3540
"""

src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/secondary_state_decider.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from bitbots_blackboard.body_blackboard import BodyBlackboard
22
from dynamic_stack_decider.abstract_decision_element import AbstractDecisionElement
3-
from game_controller_hl_interfaces.msg import GameState
3+
from game_controller_hsl_interfaces.msg import GameState
44

55

66
class SecondaryStateDecider(AbstractDecisionElement):
@@ -16,6 +16,9 @@ def __init__(self, blackboard, dsd, parameters):
1616

1717
def perform(self, reevaluate=False):
1818
state_number = self.blackboard.gamestate.get_secondary_state()
19+
set_play_number = self.blackboard.gamestate.get_set_play()
20+
game_phase_number = self.blackboard.gamestate.get_game_phase()
21+
1922
# todo this is a temporary hack to make GUI work
2023
if state_number == GameState.STATE_NORMAL:
2124
return "NORMAL"
@@ -37,6 +40,11 @@ def perform(self, reevaluate=False):
3740
return "GOAL_KICK"
3841
elif state_number == GameState.STATE_THROW_IN:
3942
return "THROW_IN"
43+
else:
44+
self.blackboard.node.get_logger().error(
45+
f"Unknown secondary state with game phase {game_phase_number} and set play {set_play_number}"
46+
)
47+
return "UNKNOWN"
4048

4149
def get_reevaluate(self):
4250
"""

src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/body_behavior.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from bitbots_blackboard.body_blackboard import BodyBlackboard
55
from bitbots_tf_buffer import Buffer
66
from dynamic_stack_decider.dsd import DSD
7-
from game_controller_hl_interfaces.msg import GameState
7+
from game_controller_hsl_interfaces.msg import GameState
88
from geometry_msgs.msg import PoseWithCovarianceStamped, Twist
99
from rclpy.callback_groups import MutuallyExclusiveCallbackGroup
1010
from rclpy.duration import Duration

src/bitbots_behavior/bitbots_body_behavior/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<depend>bitbots_tts</depend>
2323
<depend>bitbots_utils</depend>
2424
<depend>dynamic_stack_decider</depend>
25-
<depend>game_controller_hl_interfaces</depend>
25+
<depend>game_controller_hsl_interfaces</depend>
2626
<depend>geometry_msgs</depend>
2727
<depend>python3-numpy</depend>
2828
<depend>rclpy</depend>

src/bitbots_lowlevel/bitbots_buttons/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ find_package(ament_cmake REQUIRED)
1515
find_package(backward_ros REQUIRED)
1616
find_package(bitbots_docs REQUIRED)
1717
find_package(bitbots_msgs REQUIRED)
18-
find_package(game_controller_hl_interfaces REQUIRED)
18+
find_package(game_controller_hsl_interfaces REQUIRED)
1919
find_package(rclcpp REQUIRED)
2020
find_package(std_msgs REQUIRED)
2121
find_package(std_srvs REQUIRED)
@@ -27,7 +27,7 @@ ament_target_dependencies(
2727
ament_cmake
2828
backward_ros
2929
bitbots_msgs
30-
game_controller_hl_interfaces
30+
game_controller_hsl_interfaces
3131
rclcpp
3232
std_msgs
3333
std_srvs

src/bitbots_lowlevel/bitbots_buttons/package.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
<depend>backward_ros</depend>
2121
<depend>bitbots_docs</depend>
2222
<depend>bitbots_msgs</depend>
23-
<depend>game_controller_hl_interfaces</depend>
23+
<depend>game_controller_hsl_interfaces</depend>
2424
<depend>rclcpp</depend>
2525
<depend>std_msgs</depend>
2626
<depend>std_srvs</depend>
2727
<depend>test_msgs</depend>
2828

2929
<export>
30-
<bitbots_documentation>
30+
<bitbots_documentation>
3131
<language>python3</language>
3232
<status>tested_robot</status>
3333
</bitbots_documentation>

src/bitbots_lowlevel/bitbots_buttons/src/button_node.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include <bitbots_msgs/msg/buttons.hpp>
55
#include <bitbots_msgs/srv/manual_penalize.hpp>
66
#include <bitbots_msgs/srv/set_teaching_mode.hpp>
7-
#include <game_controller_hl_interfaces/msg/game_state.hpp>
7+
#include <game_controller_hsl_interfaces/msg/game_state.hpp>
88
#include <rclcpp/experimental/executors/events_executor/events_executor.hpp>
99
#include <rclcpp/rclcpp.hpp>
1010
#include <std_msgs/msg/bool.hpp>
@@ -53,12 +53,12 @@ class ButtonNode : public rclcpp::Node {
5353
teaching_mode_client_ = this->create_client<bitbots_msgs::srv::SetTeachingMode>("teaching_mode");
5454
buttons_sub_ = this->create_subscription<bitbots_msgs::msg::Buttons>(
5555
"/buttons", 1, std::bind(&bitbots_buttons::ButtonNode::buttonCb, this, _1));
56-
gamestate_sub_ = this->create_subscription<game_controller_hl_interfaces::msg::GameState>(
56+
gamestate_sub_ = this->create_subscription<game_controller_hsl_interfaces::msg::GameState>(
5757
"gamestate", 1, std::bind(&bitbots_buttons::ButtonNode::gamestateCb, this, _1));
5858
}
5959

6060
// Sets the in_game_ variable to true, if a Gamestate message from the Gamecontroller arrives.
61-
void gamestateCb(const game_controller_hl_interfaces::msg::GameState::SharedPtr msg) { in_game_ = true; }
61+
void gamestateCb(const game_controller_hsl_interfaces::msg::GameState::SharedPtr msg) { in_game_ = true; }
6262

6363
void buttonCb(const bitbots_msgs::msg::Buttons::SharedPtr msg) {
6464
// button1 - red
@@ -197,7 +197,7 @@ class ButtonNode : public rclcpp::Node {
197197
rclcpp::Client<std_srvs::srv::Empty>::SharedPtr foot_zero_client_;
198198
rclcpp::Client<std_srvs::srv::SetBool>::SharedPtr power_client_;
199199
rclcpp::Subscription<bitbots_msgs::msg::Buttons>::SharedPtr buttons_sub_;
200-
rclcpp::Subscription<game_controller_hl_interfaces::msg::GameState>::SharedPtr gamestate_sub_;
200+
rclcpp::Subscription<game_controller_hsl_interfaces::msg::GameState>::SharedPtr gamestate_sub_;
201201
};
202202
} // namespace bitbots_buttons
203203

src/bitbots_misc/bitbots_bringup/launch/highlevel.launch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
<!-- launch game controller -->
1818
<group if="$(var game_controller)">
19-
<include file="$(find-pkg-share game_controller_hl)/launch/game_controller.launch">
19+
<include file="$(find-pkg-share game_controller_hsl)/launch/game_controller.launch">
2020
<arg name="sim" value="$(var sim)" />
2121
<arg name="use_parameter_blackboard" value="true" />
2222
<arg name="parameter_blackboard_name" value="parameter_blackboard" />

0 commit comments

Comments
 (0)