Skip to content

Commit 6677d47

Browse files
committed
キックオフのプランナを組んだ
1 parent 72a7dc7 commit 6677d47

File tree

2 files changed

+39
-27
lines changed

2 files changed

+39
-27
lines changed

session/crane_planner_plugins/include/crane_planner_plugins/our_kickoff_planner.hpp

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,17 @@ namespace crane
2424
class OurKickOffPlanner : public PlannerBase
2525
{
2626
private:
27-
std::shared_ptr<skills::KickoffAttack> kickoff_attack_;
27+
std::shared_ptr<skills::KickoffAttack> kickoff_attack;
28+
std::shared_ptr<RobotCommandWrapper> attacker_command;
2829

29-
std::shared_ptr<skills::KickoffSupport> kickoff_support_ public
30-
: COMPOSITION_PUBLIC explicit OurKickOffPlanner(
31-
WorldModelWrapper::SharedPtr & world_model, ConsaiVisualizerWrapper::SharedPtr visualizer)
30+
std::shared_ptr<skills::KickoffSupport> kickoff_support;
31+
std::shared_ptr<RobotCommandWrapper> supporter_command;
32+
33+
// std::shared_ptr<ConsaiVisualizerWrapper> visualizer;
34+
35+
public:
36+
COMPOSITION_PUBLIC explicit OurKickOffPlanner(
37+
WorldModelWrapper::SharedPtr & world_model, ConsaiVisualizerWrapper::SharedPtr visualizer)
3238
: PlannerBase("our_kickoff_planner", world_model, visualizer)
3339
{
3440
}
@@ -37,24 +43,14 @@ class OurKickOffPlanner : public PlannerBase
3743
const std::vector<RobotIdentifier> & robots) override
3844
{
3945
std::vector<crane_msgs::msg::RobotCommand> robot_commands;
40-
for (auto robot_id : robots) {
41-
crane_msgs::msg::RobotCommand target;
42-
auto robot = world_model->getRobot(robot_id);
43-
44-
target.robot_id = robot_id.robot_id;
45-
target.chip_enable = false;
46-
target.dribble_power = 0.0;
47-
target.kick_power = 0.0;
4846

49-
// TODO: implement
50-
target.motion_mode_enable = false;
47+
kickoff_attack->run(*attacker_command, visualizer);
48+
kickoff_support->run(*supporter_command, visualizer);
5149

52-
// setTarget(target.target_x, 0.0);
53-
// setTarget(target.target_y, 0.0);
54-
// target.target_velocity.theta = 0.0;
50+
robot_commands.emplace_back(attacker_command->getMsg());
51+
robot_commands.emplace_back(supporter_command->getMsg());
5552

56-
robot_commands.emplace_back(target);
57-
}
53+
// いい感じにSUCCESSも返す
5854
return {PlannerBase::Status::RUNNING, robot_commands};
5955
}
6056

@@ -64,20 +60,32 @@ class OurKickOffPlanner : public PlannerBase
6460
{
6561
// 一番ボールに近いロボットをkickoff attack
6662
auto best_attacker = std::max_element(
67-
selectable_robots.begin(), selectable_robots.end(),
68-
[this](const uint8_t & a, const uint8_t & b) {
69-
return world_model->getRobot(a)->getDistance(world_model->ball.pos) <
70-
world_model->getRobot(b)->getDistance(world_model->ball.pos);
63+
selectable_robots.begin(), selectable_robots.end(), [this](const auto & a, const auto & b) {
64+
return world_model->getOurRobot(a)->getDistance(world_model->ball.pos) <
65+
world_model->getOurRobot(b)->getDistance(world_model->ball.pos);
7166
});
7267
Point supporter_pos{0.0, 2.0};
7368
auto best_supporter = std::max_element(
7469
selectable_robots.begin(), selectable_robots.end(),
75-
[this, supporter_pos](const uint8_t & a, const uint8_t & b) {
76-
return world_model->getRobot(a)->getDistance(supporter_pos) <
77-
world_model->getRobot(b)->getDistance(supporter_pos);
70+
[this, supporter_pos, best_attacker](const auto & a, const auto & b) {
71+
if (a == *best_attacker) {
72+
// bの方大きい => best_attackerであるaが除外される
73+
return true;
74+
} else if (b == *best_attacker) {
75+
// bの方大きくない => best_attackerであるbが除外される
76+
return false;
77+
} else {
78+
return world_model->getOurRobot(a)->getDistance(supporter_pos) <
79+
world_model->getOurRobot(b)->getDistance(supporter_pos);
80+
}
7881
});
7982

80-
// TODO return
83+
kickoff_attack = std::make_shared<skills::KickoffAttack>(*best_attacker, world_model);
84+
attacker_command = std::make_shared<RobotCommandWrapper>(*best_attacker, world_model);
85+
kickoff_support = std::make_shared<skills::KickoffSupport>(*best_supporter, world_model);
86+
supporter_command = std::make_shared<RobotCommandWrapper>(*best_supporter, world_model);
87+
88+
return {*best_attacker, *best_supporter};
8189
}
8290
};
8391

session/crane_planner_plugins/include/crane_planner_plugins/planners.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ auto generatePlanner(const std::string & planner_name, Ts... ts) -> PlannerBase:
4949
return std::make_unique<TigersGoaliePlanner>(ts...);
5050
} else if (planner_name == "waiter") {
5151
return std::make_unique<WaiterPlanner>(ts...);
52+
} else if (planner_name == "our_kickoff") {
53+
return std::make_unique<OurKickOffPlanner>(ts...);
54+
} else {
55+
throw std::runtime_error("Unknown planner name: " + planner_name);
5256
}
5357
}
5458
} // namespace crane

0 commit comments

Comments
 (0)