Skip to content

Commit 1c6e570

Browse files
committed
更新
1 parent 3d42845 commit 1c6e570

File tree

1 file changed

+86
-1
lines changed

1 file changed

+86
-1
lines changed

session/crane_planner_plugins/include/crane_planner_plugins/skill_planner.hpp

+86-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,91 @@ namespace crane
5757
} \
5858
}
5959

60-
DEFINE_SKILL_PLANNER(Goalie);
60+
class GoalieSkillPlanner : public PlannerBase
61+
{
62+
public:
63+
std ::shared_ptr<skills::Goalie> skill = nullptr;
64+
65+
std ::shared_ptr<RobotCommandWrapper> robot_command_wrapper = nullptr;
66+
67+
COMPOSITION_PUBLIC explicit GoalieSkillPlanner(
68+
WorldModelWrapper ::SharedPtr & world_model, ConsaiVisualizerWrapper ::SharedPtr visualizer)
69+
: PlannerBase("Goalie", world_model, visualizer)
70+
{
71+
}
72+
73+
std ::pair<Status, std ::vector<crane_msgs ::msg ::RobotCommand>> calculateRobotCommand(
74+
const std ::vector<RobotIdentifier> & robots) override
75+
{
76+
if (not skill or not robot_command_wrapper) {
77+
return {PlannerBase ::Status ::RUNNING, {}};
78+
} else {
79+
std ::vector<crane_msgs ::msg ::RobotCommand> robot_commands;
80+
auto status = skill->run(*robot_command_wrapper, visualizer);
81+
return {static_cast<PlannerBase ::Status>(status), {robot_command_wrapper->getMsg()}};
82+
}
83+
}
84+
auto getSelectedRobots(
85+
uint8_t selectable_robots_num, const std ::vector<uint8_t> & selectable_robots)
86+
-> std ::vector<uint8_t> override
87+
{
88+
skill = std ::make_shared<skills ::Goalie>(world_model->getOurGoalieId(), world_model);
89+
robot_command_wrapper =
90+
std ::make_shared<RobotCommandWrapper>(world_model->getOurGoalieId(), world_model);
91+
return {world_model->getOurGoalieId()};
92+
}
93+
};
94+
95+
class BallPlacementSkillPlanner : public PlannerBase
96+
{
97+
public:
98+
std ::shared_ptr<skills::SingleBallPlacement> skill = nullptr;
99+
100+
std ::shared_ptr<RobotCommandWrapper> robot_command_wrapper = nullptr;
101+
102+
COMPOSITION_PUBLIC explicit BallPlacementSkillPlanner(
103+
WorldModelWrapper ::SharedPtr & world_model, ConsaiVisualizerWrapper ::SharedPtr visualizer)
104+
: PlannerBase("BallPlacement", world_model, visualizer)
105+
{
106+
}
107+
108+
std ::pair<Status, std ::vector<crane_msgs ::msg ::RobotCommand>> calculateRobotCommand(
109+
const std ::vector<RobotIdentifier> & robots) override
110+
{
111+
if (not skill or not robot_command_wrapper) {
112+
return {PlannerBase ::Status ::RUNNING, {}};
113+
} else {
114+
if (auto target = world_model->getBallPlacementTarget(); target.has_value()) {
115+
skill->setParameter("placement_x", target->x());
116+
skill->setParameter("placement_y", target->y());
117+
}
118+
std ::vector<crane_msgs ::msg ::RobotCommand> robot_commands;
119+
auto status = skill->run(*robot_command_wrapper, visualizer);
120+
return {static_cast<PlannerBase ::Status>(status), {robot_command_wrapper->getMsg()}};
121+
}
122+
}
123+
124+
auto getSelectedRobots(
125+
uint8_t selectable_robots_num, const std ::vector<uint8_t> & selectable_robots)
126+
-> std ::vector<uint8_t> override
127+
{
128+
// ボールに近いロボットを1台選択
129+
auto selected_robots = this->getSelectedRobotsByScore(
130+
1, selectable_robots, [this](const std::shared_ptr<RobotInfo> & robot) {
131+
// ボールに近いほどスコアが高い
132+
return 100.0 / std::max(world_model->getSquareDistanceFromRobotToBall(robot->id), 0.01);
133+
});
134+
skill = std ::make_shared<skills ::SingleBallPlacement>(selected_robots.front(), world_model);
135+
136+
if (auto target = world_model->getBallPlacementTarget(); target.has_value()) {
137+
skill->setParameter("placement_x", target->x());
138+
skill->setParameter("placement_y", target->y());
139+
}
140+
141+
robot_command_wrapper =
142+
std ::make_shared<RobotCommandWrapper>(selected_robots.front(), world_model);
143+
return {selected_robots.front()};
144+
}
145+
};
61146
} // namespace crane
62147
#endif // CRANE_PLANNER_PLUGINS__SKILL_PLANNER_HPP_

0 commit comments

Comments
 (0)