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