RVO2 Local Planner¶
概要¶
Velocity Obstacle(VO)という考え方をベースに速度空間で計算を行って障害物回避を行うローカルプランナー。
SSLのローカルプランナとしての実装¶
SSLでは単に障害物を回避するだけではなく、ルールによる禁止エリアへの侵入を防ぐ必要がある。 アルゴリズムに則った実装を行うならば、禁止エリアへ向かう速度を選択しないような速度空間における線形制約を追加する必要がある。
しかし、RVO2ライブラリの中に手を加える必要があったり、この操作をわざわざ速度空間で行う必要性もない。 そこで、ここではRVO2に受け渡す前に禁止エリア内に目標位置がある場合は、禁止エリア外に設定し直すなどの前処理を行うことで対応する。 この処理の便利なところは、目標位置が必ず禁止エリア外になるため、ロボットが既に禁止エリア内にいる場合でも、目標位置を設定するだけで自動的に禁止エリアから退避できるところである。
ボールプレイスメントエリアの退避¶
ボールプレイスメントエリアの退避は以下のような特殊性をもつ。
- ボールプレイスメントは一つのシーンである。
- したがって、session_controllerで独自のPlannerを割り当てることができる。
- ボールプレイスメントは特定の条件下でのみ発生する。
- コマンドのフラグで管理しづらい
よって、ボールプレイスメントエリアの回避は専用のPlanner作成するのが良い。 幸い、ボールプレイスメント中はエリアを避けることしか考えなくて良いので、非常にシンプルなPlannerを書くことができる。 (厳密には、ボールプレイスメント後の敵のフリーキックのことを考える必要はあるが...)
ペナルティエリアの回避¶
点の回避¶
目標位置、現在位置がペナルティエリアにはいったときに適用する。
- 位置Aをゴール中心から遠ざかる方向に0.1m移動する
- 位置Aがペナルティエリア内にある場合、1に戻る
- 位置Aを最終目標位置として設定する
経路の回避¶
目標位置・現在位置共にペナルティエリアに入っていない場合でも、経路がペナルティエリアを通過する場合がある。
- 経路とペナルティエリアが衝突するか調べる。衝突しない場合、なにもしない
- ま