こんにちは。SYです。今回は前回の続き、敵よけアルゴリズムについてです。
前回のおさらい
敵よけにはカメラや距離センサなどが不可欠!
ゴール前の敵と目の前の敵をそれぞれよける!
ゴールが空いた一瞬を狙ってシュート!
アルゴリズム その1 ~敵よけ編~
敵よけアルゴリズムは4段階に分けられます。
図で表すと、下のような感じになります。
距離センサで敵を検知
まず、距離センサで敵がいることを検知する必要があります。
敵は凸凹していて距離センサがきちんと反応しにくいため、一瞬でも近いと検知したら敵がいるとし、一定時間遠いままであれば敵がいないとすることにしました。
回転して敵をよける
一番左の図にあるように、敵がいるとなった場合、最初にゴールがある方向へと前進しながら大きく回転します。
こうすることで、ゴールの方向へと進みつつ、相手の捕捉ゾーンからボールを奪い取ることが可能となります。
横に移動して敵をよける
中央の図にあるように、一定の角度以上回転した場合、ゴールがある側へ斜め方向に動きます。
すでに機体がある程度回転しているため、斜め方向に動くことでゴールに対しほぼ横移動することができ、ボールを捕捉ゾーンに入れたまま敵をよけることができます。
開いた瞬間を狙ってシュート!
一番右の図にあるように、敵がいなくなった場合、ゴールがある方向に向きつつ前進し、ゴールが空いていたらシュートします。
こうすることで、ゴールが空いた一瞬を狙って正確にシュートすることができます。
一つ一つの動きは単純に見えますが、これがあるとないとではボールを取り合うような状況になったときの戦況が大きく変わります。このような敵よけを行うことで、私たちはより高確率でシュートまでたどり着けるようになりました。
アルゴリズム その2 ~シュート編~
シュートするかどうかは、捕捉センサ、距離センサ、カメラの3つを併用して判断しています。
まず大前提として、捕捉センサが反応していて、ボールが捕捉ゾーンに入っている、つまりキッカーで蹴れる位置にボールがあることが必要です。
次に、距離センサによって目の前に敵がいないことを確認します。もし敵がいれば、シュートはせずに先ほどの敵よけを行うことになります。
そして、最も重要なカメラによる判断です。カメラでは、正面の一定の方向がゴールの方向の範囲に含まれていればシュートを打つ、としています。言葉ではわかりづらいのでいくつかの例を挙げて説明します。
黄色の方向が正面の方向、赤色の方向がゴールの見える範囲を表し、○がシュートできる場合、×がシュートできない場合です。
左上ではGKがいるためゴールが斜め方向に見え、前方向にゴールがないためシュートできませんが、右上ではGKがずれているため前方向(黄色)の範囲がゴールの範囲(赤色)に完全に含まれています。
また、左下ではFWがいるためゴールが斜め方向に見えシュートできませんが、右下では敵よけをして自分が斜めを向いているため、相対的にゴールは正面にあり、シュートができると判断されます。
これら3つを組み合わせることで、一瞬を狙った正確なシュートが可能になります。
まとめ
これらのアルゴリズムを組み合わせることで、最初に見せたような敵よけが可能になります。合わさると複雑かもしれませんが、一つ一つの動きは単純なので、そこまで難しくはないと思います。
また、この敵よけもまだ発展途上なため、これからも改善を続けていく予定です。
疑問点や質問、意見等あればブログのコメントにてお願いしますm(_ _)m
では、また次回の記事で!(´∀`)ノシ