Skip to content

Commit cf3c2f4

Browse files
authored
Doc (#741)
1 parent bdb5b53 commit cf3c2f4

File tree

3 files changed

+224
-1
lines changed

3 files changed

+224
-1
lines changed

.github/workflows/custom_dict.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
"gltf",
130130
"svgs",
131131
"teleporting",
132-
"DDPS"
132+
"DDPS",
133+
"cooldown"
133134
]
134135
}

docs/defense.md

+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
# デフェンス
2+
3+
## Planner
4+
5+
### TotalDefensePlanner
6+
7+
現在使用中
8+
9+
TotalDefensePlannerは、ゴールキーパーとディフェンダーの配置を決定するプランナーです。このプランナーでは、`calculateRobotCommand`関数を用いてディフェンダーの目標位置を計算し、`getSelectedRobots`関数を用いてゴールキーパーとディフェンダーを選択します。ディフェンダーの目標位置は、`getDefenseLinePoints`関数によって計算されます。
10+
11+
`getDefenseLinePoints`関数は、以下の手順でディフェンダーの配置を決定します。
12+
13+
1. `getDefenseLinePointParameter`関数を使用して、ボールライン上のパラメータを計算します。`DefenseLinePointParameter`は、自陣ペナルティエリアを囲む線をパラメータ化したもので、0から`threshold3`までの値を持ちます。このパラメータは、ディフェンダーが配置されるべきボールライン上の位置を示します。
14+
2. パラメータが存在しない場合、ペナルティエリア内にボールが侵入したときにディフェンダーがいなくなるのを防ぐために、代替のボールラインを使用してパラメータを計算します。
15+
3. パラメータが存在する場合、`getDefenseLinePoint`関数を使用して、パラメータに対応するディフェンダーの目標位置を計算します。
16+
4. 複数のディフェンダーを配置する必要がある場合、`DEFENSE_INTERVAL`パラメータを使用して、ディフェンダー間の間隔を決定します。`DEFENSE_INTERVAL`パラメータのデフォルト値は0.2です。
17+
5. `getDefenseLinePointParameterThresholds`関数を使用して、ディフェンダーが配置されるべき範囲を制限します。
18+
19+
各パラメータの説明は、以下のとおりです。
20+
21+
* `DEFENSE_INTERVAL`: ディフェンダー間の間隔を決定するパラメータです。
22+
* `OFFSET_X`: ペナルティエリアのコーナーを計算する際に使用するX軸方向のオフセットです。
23+
* `OFFSET_Y`: ペナルティエリアのコーナーを計算する際に使用するY軸方向のオフセットです。
24+
25+
`getDefenseLinePointParameter`関数で得られるパラメータは、以下の図に示すように、自陣ペナルティエリアを囲む線をパラメータ化したものです。
26+
27+
```mermaid
28+
graph LR
29+
A[p1] -- parameter < threshold1 --> B[p2]
30+
B -- threshold1 + parameter < threshold2 --> C[p3]
31+
C -- threshold2 + parameter < threshold3 --> D[p4]
32+
style A fill:#f9f,stroke:#333,stroke-width:2px
33+
style B fill:#f9f,stroke:#333,stroke-width:2px
34+
style C fill:#f9f,stroke:#333,stroke-width:2px
35+
style D fill:#f9f,stroke:#333,stroke-width:2px
36+
```
37+
38+
この図では、p1, p2, p3, p4はペナルティエリアのコーナーを表し、parameterはp1からp2、p2からp3、p3からp4への距離を示します。
39+
40+
### DefenderPlanner
41+
42+
現在非推奨
43+
44+
DefenderPlannerは、ディフェンダーの配置を決定するプランナーです。このプランナーは、`calculateRobotCommand`関数を使用して、ディフェンダーの目標位置を計算します。ディフェンダーの目標位置は、`getDefenseLinePoints`関数または`getDefenseArcPoints`関数を使用して計算されます。
45+
46+
### TigersGoaliePlanner
47+
48+
TigersGoaliePlannerは、Tigersのゴールキーパーの行動を決定するプランナーです。このプランナーは、`calculateRobotCommand`関数を使用して、ゴールキーパーの状態に基づいて、ゴールキーパーの行動を決定します。ゴールキーパーの状態は、以下の状態遷移図に基づいて更新されます。
49+
50+
```mermaid
51+
stateDiagram
52+
[*] --> STOP
53+
STOP --> DEFEND : not isStopped()
54+
PREPARE_PENALTY --> DEFEND : not isPreparePenalty()
55+
MOVE_TO_PENALTY_AREA --> DEFEND : status == SUCCESS
56+
MOVE_TO_PENALTY_AREA --> DEFEND : isKeeperWellInsidePenaltyArea()
57+
MOVE_TO_PENALTY_AREA --> STOP : isStopped()
58+
MOVE_TO_PENALTY_AREA --> PREPARE_PENALTY : isPreparePenalty()
59+
DEFEND --> PASS : ballCanBePassedOutOfPenaltyArea()
60+
DEFEND --> RAMBO : canGoOut()
61+
DEFEND --> GET_BALL_CONTACT : isBallBetweenGoalieAndGoal()
62+
DEFEND --> MOVE_TO_PENALTY_AREA : isOutsidePenaltyArea()
63+
DEFEND --> STOP : isStopped()
64+
DEFEND --> PREPARE_PENALTY : isPreparePenalty()
65+
DEFEND --> INTERCEPT : canInterceptSafely()
66+
PASS --> DEFEND : isBallMoving()
67+
PASS --> MOVE_IN_FRONT_OF_BALL : isBallPlacementRequired()
68+
PASS --> STOP : isStopped()
69+
PASS --> PREPARE_PENALTY : isPreparePenalty()
70+
INTERCEPT --> DEFEND : hasInterceptionFailed()
71+
INTERCEPT --> PASS : ballCanBePassedOutOfPenaltyArea()
72+
INTERCEPT --> STOP : isStopped()
73+
INTERCEPT --> PREPARE_PENALTY : isPreparePenalty()
74+
RAMBO --> DEFEND : world_model->point_checker.isPenaltyArea(world_model.ball.pos) or isGoalKick()
75+
RAMBO --> STOP : isStopped()
76+
RAMBO --> PREPARE_PENALTY : isPreparePenalty()
77+
MOVE_IN_FRONT_OF_BALL --> DEFEND : isBallMoving()
78+
MOVE_IN_FRONT_OF_BALL --> DEFEND : isBallPlaced()
79+
MOVE_IN_FRONT_OF_BALL --> GET_BALL_CONTACT : status == SUCCESS
80+
MOVE_IN_FRONT_OF_BALL --> STOP : isStopped()
81+
MOVE_IN_FRONT_OF_BALL --> PREPARE_PENALTY : isPreparePenalty()
82+
GET_BALL_CONTACT --> MOVE_WITH_BALL : status == SUCCESS
83+
GET_BALL_CONTACT --> MOVE_IN_FRONT_OF_BALL : status == FAILURE
84+
GET_BALL_CONTACT --> STOP : isStopped()
85+
GET_BALL_CONTACT --> PREPARE_PENALTY : isPreparePenalty()
86+
MOVE_WITH_BALL --> DEFEND : status == SUCCESS
87+
MOVE_WITH_BALL --> MOVE_IN_FRONT_OF_BALL : status == FAILURE
88+
MOVE_WITH_BALL --> STOP : isStopped()
89+
MOVE_WITH_BALL --> PREPARE_PENALTY : isPreparePenalty()
90+
```
91+
92+
# デフェンス
93+
94+
## Planner
95+
96+
### TotalDefensePlanner
97+
98+
現在使用中
99+
100+
TotalDefensePlannerは、ゴールキーパーとディフェンダーの配置を決定するプランナーです。このプランナーでは、`calculateRobotCommand`関数を用いてディフェンダーの目標位置を計算し、`getSelectedRobots`関数を用いてゴールキーパーとディフェンダーを選択します。ディフェンダーの目標位置は、`getDefenseLinePoints`関数によって計算されます。
101+
102+
`getDefenseLinePoints`関数は、以下の手順でディフェンダーの配置を決定します。
103+
104+
1. `getDefenseLinePointParameter`関数を使用して、ボールライン上のパラメータを計算します。`DefenseLinePointParameter`は、自陣ペナルティエリアを囲む線をパラメータ化したもので、0から`threshold3`までの値を持ちます。このパラメータは、ディフェンダーが配置されるべきボールライン上の位置を示します。
105+
2. パラメータが存在しない場合、ペナルティエリア内にボールが侵入したときにディフェンダーがいなくなるのを防ぐために、代替のボールラインを使用してパラメータを計算します。
106+
3. パラメータが存在する場合、`getDefenseLinePoint`関数を使用して、パラメータに対応するディフェンダーの目標位置を計算します。
107+
4. 複数のディフェンダーを配置する必要がある場合、`DEFENSE_INTERVAL`パラメータを使用して、ディフェンダー間の間隔を決定します。`DEFENSE_INTERVAL`パラメータのデフォルト値は0.2です。
108+
5. `getDefenseLinePointParameterThresholds`関数を使用して、ディフェンダーが配置されるべき範囲を制限します。
109+
110+
各パラメータの説明は、以下のとおりです。
111+
112+
* `DEFENSE_INTERVAL`: ディフェンダー間の間隔を決定するパラメータです。
113+
* `OFFSET_X`: ペナルティエリアのコーナーを計算する際に使用するX軸方向のオフセットです。
114+
* `OFFSET_Y`: ペナルティエリアのコーナーを計算する際に使用するY軸方向のオフセットです。
115+
116+
`getDefenseLinePointParameter`関数で得られるパラメータは、以下の図に示すように、自陣ペナルティエリアを囲む線をパラメータ化したものです。
117+
118+
```mermaid
119+
graph LR
120+
A[p1] -- parameter < threshold1 --> B[p2]
121+
B -- threshold1 + parameter < threshold2 --> C[p3]
122+
C -- threshold2 + parameter < threshold3 --> D[p4]
123+
style A fill:#f9f,stroke:#333,stroke-width:2px
124+
style B fill:#f9f,stroke:#333,stroke-width:2px
125+
style C fill:#f9f,stroke:#333,stroke-width:2px
126+
style D fill:#f9f,stroke:#333,stroke-width:2px
127+
```
128+
129+
この図では、p1, p2, p3, p4はペナルティエリアのコーナーを表し、parameterはp1からp2、p2からp3、p3からp4への距離を示します。
130+
131+
### DefenderPlanner
132+
133+
現在非推奨
134+
135+
DefenderPlannerは、ディフェンダーの配置を決定するプランナーです。このプランナーは、`calculateRobotCommand`関数を使用して、ディフェンダーの目標位置を計算します。ディフェンダーの目標位置は、`getDefenseLinePoints`関数または`getDefenseArcPoints`関数を使用して計算されます。
136+
137+
### TigersGoaliePlanner
138+
139+
TigersGoaliePlannerは、Tigersのゴールキーパーの行動を決定するプランナーです。このプランナーは、`calculateRobotCommand`関数を使用して、ゴールキーパーの状態に基づいて、ゴールキーパーの行動を決定します。ゴールキーパーの状態は、状態遷移図に基づいて更新されます。
140+
141+
## Skill
142+
143+
### Goalie
144+
145+
Goalieスキルは、ゴールキーパーの行動を制御するスキルです。このスキルは、ボールの位置、速度、および他のロボットの位置に基づいて、ゴールキーパーの行動を決定します。主なロジックは`inplay`関数にあり、以下の状況に応じて行動を決定します。
146+
147+
* **HALT**: その場に停止
148+
* **THEIR_PENALTY_PREPARATION, THEIR_PENALTY_START**: ボールの排出を停止
149+
* **COMMAND_STOP**: ボールの排出を停止
150+
* **ボール排出**:
151+
* ボールが止まっていて、味方ペナルティエリア内にある場合、ボールをペナルティエリア外に出します。
152+
* パスできるロボットのリストを作成し、最も適切なロボットにパスします。
153+
* **シュートブロック**:
154+
* ボールがゴールに向かっている場合、ボールライン上の最も近い点を計算し、その点に移動してシュートをブロックします。
155+
* **ボールを待ち受ける**:
156+
* 上記以外の場合、デフォルト位置(自ゴールの中央の0.9倍の位置)に移動し、ボールを待ち受けます。
157+
* ボールが自コートにある場合、敵のパス先を予測し、その位置に移動してパスカットを試みます。
158+
159+
### Marker
160+
161+
Markerスキルは、指定された敵ロボットをマークするスキルです。このスキルは、`update`関数にあり、`mark_mode`パラメータに基づいて、以下のモードでマーキングを行います。
162+
163+
* **save_goal**:
164+
* 敵ロボットと自ゴールの中間の位置に移動します。
165+
* 敵ロボットがシュートするのを防ぐことを目的とします。
166+
* **intercept_pass**:
167+
* 敵ロボットとボールの中間の位置に移動します。
168+
* 敵ロボットへのパスを阻止することを目的とします。
169+
170+
# デフェンス
171+
172+
## Planner
173+
174+
# デフェンス
175+
176+
## Planner
177+
178+
### TotalDefensePlanner
179+
180+
現在使用中
181+
182+
### DefenderPlanner
183+
184+
現在非推奨
185+
186+
## Skill
187+
188+
### Goalie
189+
190+
### Marker

docs/simple_placer_planner.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## SimplePlacerPlanner
2+
3+
`SimplePlacerPlanner`は、ロボットを特定のエリアに配置するためのプランナーです。
4+
5+
### 概要
6+
7+
このプランナーは、フィールドをいくつかのエリアに分割し、各ロボットを最も適切なエリアに割り当てることを目的としています。エリアの割り当ては、各エリアに存在する敵ロボットの数に基づいて動的に調整されます。
8+
9+
### 機能
10+
11+
- **エリア分割:** フィールドをFW, MF, WG1, WG2などのエリアに分割します。
12+
- **動的割り当て:** 各エリアに存在する敵ロボットの数に基づいて、ロボットをもっとも適切なエリアに割り当てます。
13+
- **再割り当て:** ロボットが目標位置に到達すると、再割り当てのクールダウン期間を経て、再度最適なエリアを探索します。
14+
- **可視化:** 各エリアとロボットの移動ラインを可視化します。
15+
16+
### メンバ変数
17+
18+
- `defense_areas`: `AreaWithInfo`構造体のベクター。各エリアの名前、自チームロボット数、敵チームロボット数、エリアのボックス情報を含みます。
19+
- `assignment_map`: ロボットIDからエリア名へのマッピングを保持するunordered_map。
20+
- `target_positions`: ロボットIDから目標位置へのマッピングを保持するunordered_map。
21+
- `reassignment_cooldown`: ロボットIDから再割り当てクールダウンカウンターへのマッピングを保持するunordered_map。
22+
- `position_threshold`: 移動が完了したと判断する距離しきい値。
23+
- `cooldown_frames`: エリア再割り当ての待機フレーム数。
24+
25+
### メソッド
26+
27+
- `calculateRobotCommand`: ロボットコマンドを計算し、各ロボットを最適なエリアに移動させるためのコマンドを生成します。
28+
- `getSelectedRobots`: ロボットを選択し、各ロボットに役割を割り当てます。
29+
30+
### 使用方法
31+
32+
`SimplePlacerPlanner`は、`PlannerBase`クラスを継承し、`calculateRobotCommand`メソッドを実装することで、ロボットの配置を計画します。このプランナーは、ワールドモデルの情報に基づいて、各ロボットを最適なエリアに動的に割り当て、チーム全体の戦略的な配置を支援します。

0 commit comments

Comments
 (0)