Skip to content

ボールの所持判定アルゴリズム

https://github.com/ibis-ssl/crane/pull/303

1. イベント検出

ボールへの外力発生イベントを検出する。
イベントは以下の評価値が閾値を超えたときに発生するものとする。

評価値 = abs((前フレームの速度ベクトル) - (現在フレームの速度ベクトル)) / (前フレームの速度) + 0.1)

これによって、ボールの速度ベクトルに変化があった場合にイベントが発生する。
前フレームの速度で割っているのは、ボールの速度が速い場合には些細な地面の凹凸でボールの動きが変わりやすかったり、単純にVisionのブレが大きいのを吸収することを防ぐ正規化である。
また、分母に0.1を足しているのは、ボール速度が0に近づくにつれて評価値が不当に大きくなるのを防ぐためである。

この評価値を用いて、ロボットによるボールへのキックや衝突、またボールの壁への衝突などのイベントを検出する。

2. ボール所持判定

ボールの状態を以下の3つに分類する。

  • 敵所持
  • 味方所持
  • どちらでもない

この状態を計算するためにまず、「敵所持フラグ」「味方所持フラグ」の2つのフラグを計算する

2.1. 敵所持フラグ

以下の条件を満たすとき、「敵所持フラグ」は真となる。

  1. ボールへの外力発生イベントが発生した
  2. ボールに一番近い敵ロボットの距離がボールに十分近い(プルリクエストでは0.3mがしきい値)
  3. ボールがキッカーに接触した(判定方法は2.1.1参照)

3は単にロボットがボールにぶつかっただけで所有権が移るのを防ぐための条件である。

2.1.1. キッカーへの接触判定

ロボット中心から見たボールの方向と、ロボットのキッカーの方向の差が一定角度以下のとき、ボールはキッカーに接触したと判定する。
プルリクエストでは0.4rad、つまりキッカーの左右に23度ずつの範囲を接触範囲としている。

2.2. 味方所持フラグ

「味方所持フラグ」は真となる条件は2通りある。

2.2.1. 条件1

敵所持フラグと同様の条件を味方ロボットが満たしたとき、「味方所持フラグ」は真となる。

2.2.2. 条件2

以下の条件を満たすとき、「味方所持フラグ」は真となる。

  • ロボットのボールセンサが反応した

2.3. フラグとボール状態の遷移

遷移テーブルで「-」は遷移無しを表す。

2.3.1. 現在状態が「どちらでもない」のときの遷移テーブル

敵所持フラグ(真) 敵所持フラグ(偽)
味方所持フラグ(真) - 味方所持
味方所持フラグ(偽) 敵所持 -

2.3.2. 現在状態が「敵所持」のとき

敵所持フラグ(真) 敵所持フラグ(偽)
味方所持フラグ(真) どちらでもない 味方所持
味方所持フラグ(偽) - どちらでもない

2.3.3. 現在状態が「味方所持」のとき

敵所持フラグ(真) 敵所持フラグ(偽)
味方所持フラグ(真) どちらでもない -
味方所持フラグ(偽) 敵所持 どちらでもない