こんにちは。SYです。今回は前回の続き、敵よけアルゴリズムについてです。

前回のおさらい

敵よけにはカメラ距離センサなどが不可欠!

ゴール前の敵目の前の敵をそれぞれよける!

ゴールが空いた一瞬を狙ってシュート!

アルゴリズム その1 ~敵よけ編~

敵よけアルゴリズムは4段階に分けられます。

図で表すと、下のような感じになります。

敵よけの説明

距離センサで敵を検知

まず、距離センサで敵がいることを検知する必要があります。

敵は凸凹していて距離センサがきちんと反応しにくいため、一瞬でも近いと検知したら敵がいるとし、一定時間遠いままであれば敵がいないとすることにしました。

回転して敵をよける

一番左の図にあるように、敵がいるとなった場合、最初にゴールがある方向へと前進しながら大きく回転します。

こうすることで、ゴールの方向へと進みつつ、相手の捕捉ゾーンからボールを奪い取ることが可能となります。

横に移動して敵をよける

中央の図にあるように、一定の角度以上回転した場合、ゴールがある側へ斜め方向に動きます。

すでに機体がある程度回転しているため、斜め方向に動くことでゴールに対しほぼ横移動することができ、ボールを捕捉ゾーンに入れたまま敵をよけることができます。

開いた瞬間を狙ってシュート!

一番右の図にあるように、敵がいなくなった場合、ゴールがある方向に向きつつ前進し、ゴールが空いていたらシュートします。

こうすることで、ゴールが空いた一瞬を狙って正確にシュートすることができます。

一つ一つの動きは単純に見えますが、これがあるとないとではボールを取り合うような状況になったときの戦況が大きく変わります。このような敵よけを行うことで、私たちはより高確率でシュートまでたどり着けるようになりました。

アルゴリズム その2 ~シュート編~

シュートするかどうかは、捕捉センサ距離センサカメラの3つを併用して判断しています。

まず大前提として、捕捉センサが反応していて、ボールが捕捉ゾーンに入っている、つまりキッカーで蹴れる位置にボールがあることが必要です。

次に、距離センサによって目の前に敵がいないことを確認します。もし敵がいれば、シュートはせずに先ほどの敵よけを行うことになります。

そして、最も重要なカメラによる判断です。カメラでは、正面の一定の方向がゴールの方向の範囲に含まれていればシュートを打つ、としています。言葉ではわかりづらいのでいくつかの例を挙げて説明します。

敵よけの説明2

黄色の方向が正面の方向、赤色の方向がゴールの見える範囲を表し、○がシュートできる場合、×がシュートできない場合です。

左上ではGKがいるためゴールが斜め方向に見え、前方向にゴールがないためシュートできませんが、右上ではGKがずれているため前方向(黄色)の範囲がゴールの範囲(赤色)に完全に含まれています。

また、左下ではFWがいるためゴールが斜め方向に見えシュートできませんが、右下では敵よけをして自分が斜めを向いているため、相対的にゴールは正面にあり、シュートができると判断されます。

これら3つを組み合わせることで、一瞬を狙った正確なシュートが可能になります。

まとめ

これらのアルゴリズムを組み合わせることで、最初に見せたような敵よけが可能になります。合わさると複雑かもしれませんが、一つ一つの動きは単純なので、そこまで難しくはないと思います。

また、この敵よけもまだ発展途上なため、これからも改善を続けていく予定です。

疑問点や質問、意見等あればブログのコメントにてお願いしますm(_ _)m

では、また次回の記事で!(´∀`)ノシ