Skip to content

Commit a8f8e85

Browse files
HansRoboclaude
andauthored
feat: SessionBaseのロボット適性評価関数を純粋仮想関数化 (#1132)
Co-authored-by: Claude Sonnet 4.5 <[email protected]>
1 parent ffd5bb9 commit a8f8e85

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

crane_sessions/include/crane_sessions/placement_avoidance_session.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,23 @@ class BallPlacementAvoidanceSession : public SessionBase
3333
{
3434
}
3535

36+
auto getRobotSuitabilityFunc() const
37+
-> std::function<double(const std::shared_ptr<RobotInfo> &)> override
38+
{
39+
auto wm = world_model;
40+
return [wm](const std::shared_ptr<RobotInfo> & robot) {
41+
// ゴールキーパーは除外
42+
if (robot->id == wm->getOurGoalieId()) {
43+
return 10000.0;
44+
}
45+
// ボール配置エリアへの距離(近いほど優先)
46+
if (auto placement_area = wm->getBallPlacementArea(); placement_area) {
47+
return bg::distance(robot->pose.pos, placement_area.value());
48+
}
49+
return 0.0;
50+
};
51+
}
52+
3653
auto calculatePositionCommand(const std::vector<RobotIdentifier> & robots)
3754
-> std::pair<Status, std::vector<crane_msgs::msg::PositionCommand>> override
3855
{

crane_sessions/include/crane_sessions/session_base.hpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,7 @@ class SessionBase
174174
* @return ロボット適性評価関数
175175
*/
176176
virtual auto getRobotSuitabilityFunc() const
177-
-> std::function<double(const std::shared_ptr<RobotInfo> &)>
178-
{
179-
// デフォルト実装: すべてのロボットを等価とみなす(コスト0)
180-
return [](const std::shared_ptr<RobotInfo> &) { return 0.0; };
181-
}
177+
-> std::function<double(const std::shared_ptr<RobotInfo> &)> = 0;
182178

183179
/**
184180
* @brief ハード制約Tacticかどうかを返す

crane_sessions/include/crane_sessions/test_session.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ class TestSession : public SessionBase
3030
COMPOSITION_PUBLIC explicit TestSession(
3131
WorldModelWrapper::SharedPtr & world_model, rclcpp::Node & node);
3232

33+
auto getRobotSuitabilityFunc() const
34+
-> std::function<double(const std::shared_ptr<RobotInfo> &)> override
35+
{
36+
uint8_t target_id = target_robot_id;
37+
return [target_id](const std::shared_ptr<RobotInfo> & robot) {
38+
if (robot->id == target_id) {
39+
return 0.0;
40+
}
41+
return 1000.0;
42+
};
43+
}
44+
3345
std::pair<Status, std::vector<crane_msgs::msg::PositionCommand>> calculatePositionCommand(
3446
const std::vector<RobotIdentifier> & robots) override;
3547

0 commit comments

Comments
 (0)