Skip to content

Commit

Permalink
🔄 synced local 'docs/ai' with remote 'docs'
Browse files Browse the repository at this point in the history
  • Loading branch information
HansRobo committed Jul 21, 2024
1 parent e1d1fd8 commit 1838ede
Show file tree
Hide file tree
Showing 3 changed files with 286 additions and 0 deletions.
57 changes: 57 additions & 0 deletions docs/ai/offense.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# オフェンス

## アクション

ボールの所有権をもつロボットが、ボールを操作して行う行動をアクションとする。
ボールは1つなので、複数台のロボットが同時にボールの所有権を持つことはなく、一連のオフェンスはアクションの列として表現される。

アクションの本体は、ロボットがボールを操作する瞬間の集合である。
例えば、パスやシュートならば、ボールを蹴る瞬間であり、ドリブルならばドリブルしている間である。

ただし、これだけだとオフェンス中にどのアクションにも属さない状態が生じるので、前のアクションの本体が終了したとき、次のアクション
が始まるものとする。(これらの時間範囲はアクションに含まれるだけであって、アクションの本体であるわけではない)
例えば、パスの場合ではボールが前のロボットからキックされて自分の方に転がり始めた瞬間からパスアクションが始まり、次のロボットへボールを蹴り出した瞬間にパスアクションが終了する。
ここで、キックに失敗したときは上位レイヤーで認知され、アクション列が作り直される。

また、アクションではアクション本体以外のステージも持つ。

- PRE_STAGE: アクション本体が始まる前に行うステージ
- ON_STAGE: アクション本体が行われるステージ
- POST_STAGE: アクション本体が終わった後に行うステージ

## パスアクション

### PRE_STAGE

パスを受ける地点から離れすぎない範囲で、マークを振り切るための動きを行う。

#### 暫定実装

パスを受け取る地点へ移動する

### ON_STAGE

パスを受け取る地点へ移動し、ボールを受け取って次のターゲットへキックする

### POST_STAGE

特になし

## シュートアクション

正直このアクションは必要かどうかは微妙
パスアクションの特殊化として扱うべきかもしれない

### PRE_STAGE

### ON_STAGE

### POST_STAGE

## ドリブルアクション

### PRE_STAGE

### ON_STAGE

### POST_STAGE
145 changes: 145 additions & 0 deletions docs/ai/other_team/Sumatra.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,148 @@ stateDiagram-v2
DropBall --> ClearBall: FAILURE
DropBall --> ClearBall: SUCCESS
```

## AOffensiveActionMoves

TDP2018に解説されている。

- ForcedPass
- DirectKick
- 敵ゴールへの直接シュート
- ClearingKick
- 味方の危ない状況からのクリア
- StandardPass
- LowChanceKick
- 敵ゴールへの直接シュート
- GoToOtherHalf
- 自陣でボールをキープしているが適切なパスターゲットがない場合
- KickInsBlue
- 敵ロボットがいない場所にボールを蹴る
- RedirectGoalShot
- RedirectPass
- Receive

### ベースクラス(2018年時点でのもの)

<https://github.com/TIGERs-Mannheim/Sumatra/blob/e858a04f90d5f9d0c0d9df0e4fd913e66d386e6c/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/offense/action/moves/AOffensiveActionMove.java>

※viability: 実行可能性

- isActionViable
- そのアクションが実行可能かどうかを返す
- 返り値
- TRUE
- PARTIAL
- FALSE
- activateAction
- calViabilityScore

### ベースクラス(2021年時点でのもの)

calcAction

#### 返り値:OffensiveAction

- move:EOffensiveActionMove(PROTECT_MOVE)
- FORCED_PASS
- REDIRECT_GOAL_KICK
- GOAL_KICK
- CLEARING_KICK
- STANDARD_PASS
- LOW_CHANCE_GOAL_KICK
- MOVE_BALL_TO_OPPONENT_HALF
- KICK_INS_BLAUE
- RECEIVE_BALL
- PROTECT_MOVE
- action:EOffensiveAction(PASS)
- PASS
- KICK_INS_BLAUE
- CLEARING_KICK
- GOAL_SHOT
- PROTECT
- REDIRECT
- RECEIVE
- viability:OffensiveActionViability
- TRUE
- PARTIAL
- FALSE

### ベースクラス(2023年時点でのもの)

<https://github.com/TIGERs-Mannheim/Sumatra/blob/master/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/offense/action/EOffensiveActionType.java>

- type:OffensiveActionType
- PASS
- REDIRECT_KICK
- DRIBBLE_KICK
- PROTECT
- CHOP_TRICK
- Hackentrick: かかとで後方にけり、相手をかわす技
- RECEIVE

<https://github.com/TIGERs-Mannheim/Sumatra/blob/master/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/offense/action/moves/EOffensiveActionMove.java>

- OffensiveActionMoveの種類
- REDIRECT_GOAL_KICK
- CHOP_TRICK
- FINISHER
- GOAL_KICK
- FORCED_PASS
- CLEARING_KICK
- STANDARD_PASS
- LOW_CHANCE_GOAL_KICK
- MOVE_BALL_TO_OPPONENT_HALF
- RECEIVE_BALL
- PROTECT_MOVE

build関数はOffensiveActionTypeのラインナップをサポート

<https://github.com/TIGERs-Mannheim/Sumatra/blob/master/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/offense/action/RatedOffensiveAction.java>

- RatedOffensiveAction
- buildProtect
- buildChopTrick
- buildPass
- buildKick
- buildRedirectKick
- buildDribbleKick
- buildReceive

### ForcedPass

フリーキックのような、必ずパスしなければいけない状況で使われる。

<https://github.com/TIGERs-Mannheim/Sumatra/blob/master/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/offense/action/moves/ForcedPassActionMove.java>

### FinisherActionMove

ドリブルしながらゴールを狙うアクション

### ClearingKickActionMove

ボールをゴール中心から離れる方向にチップキックする

- TRUE
- ボールがゴールに近い&壁デフェンスが間に合ってない&ボールが相手に近い&自コートにボールがある&ボールが0.3m/s以下
- FALSE
- それ以外

### ProtectActionMove

## PassGenerator

<https://github.com/TIGERs-Mannheim/Sumatra/blob/5e99731884440591f633e65b01118f291f460d4e/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/pass/PassGenerator.java>

## KIckOriginという概念

<https://github.com/TIGERs-Mannheim/Sumatra/blob/259774013fe5fef0c5eeff46db5f04c3f7d61f56/modules/moduli-ai/src/main/java/edu/tigers/sumatra/ai/metis/pass/KickOrigin.java>

次にボールがキックされる点。

ボールが動いていないときは、ボールの場所であり、動いているときは以下のいずれかが発生したときである。

- (相手ボールのとき)ボールをカット
- ボールをキャッチ
- ボールをリダイレクト

impact time: ボールがKickOriginに到着するまでの時間
84 changes: 84 additions & 0 deletions docs/ai/other_team/tigers.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,87 @@
- 適度に柔軟性を持ち、衝撃吸収できる
- 接着剤を塗布している
- カバーが破損しても接着剤で保持される(ガラスフィルムみたいな感じ?)

## TDP2019

### ロボットのアップデート

v2016からv2019までのアップデート

- モーターが50Wから70Wに
- エンコーダが光学式から磁気式に
- ホイールを32%小型化
- これにより、ホイールを90°間隔で配置できるようになった
- カメラ3台
- 視覚オドメトリ用上方カメラ2台
- ドリブル用下方カメラ1台
- SBCはJetson TX2かラズパイ3を切り替えられる

### 経路計画

#### 前提

ここに書いてあることはTDP2016が詳しい

- 速度ではなく、目標位置を送信している
- Vision情報はロボットに転送されている
- 回避は、最終目的地よりも優先度の高い、中間目的地を設定することで実現している
- ロボット内でスキルを実行している?(100Hzで更新)

#### アルゴリズムの概要

1. 目的地までの暫定経路を生成
2. 衝突チェック(なければ終了)
3. 適当な経路を複数生成
4. 生成した経路を評価して、ペナルティが最も小さい経路を選択
5. 中間目的地を使った経路も生成して評価
6. 基本敵には中間目的地を使った経路を選択。ペナルティが大幅に小さくなる場合は、4.で選択した経路を選択

#### 中間目的地の生成方法

TBD

#### ペナルティの計算方法

TBD

### パスターゲットの評価の改良

従来、パスターゲットの評価値は一つしかなかったが、いかに分割した。

- リダイレクトシュートできる確率(Redirect Goal Shot Score)
- パスをが通る確率(Pass Score)

#### リダイレクトシュートできる確率

#### リダイレクト角度スコア

- リダイレクト角度が最重要視される
- 45°以下ではでスコアが飽和
- 最大角度(設定値)を超えるとスコアが0になる
- 45°~最大角度の範囲で線形にスコアが減少

### 距離スコア

- 遠いほどスコアが低くなる
- 一定距離を超えるとスコアが0になる

TBD

## TDP2018

### ドリブラのアップデート

ドリブラの自由度を増やして、ボールの衝撃吸収とボールのドリブル性能の両立を図った。

### AOffensiveActionMoves

- ForcedPass
- DirectKick
- ClearingKick
- StandardPass
- LowChanceKickGoToOtherHalf
- KickInsBlue
- RedirectGoalShot
- RedirectPass
- Receive

0 comments on commit 1838ede

Please sign in to comment.