RCJレスキューメイズ戦術書

# 前書き
ロボカップジュニア2023全国大会お疲れ様でした。
スタッフとして見ていましたがとても興奮する試合内容でした。
そして、優勝した「blend」本当におめでとうございます！！

さて、この記事ではことRCJレスキューメイズにおける「戦略」について書いていきます。
プログラムを書く時など、参考にして頂けると幸いです。

:::note warn
注意
この先、具体的なコード例などはありません。また、あくまで個人の考え方や意見なのであまり鵜呑みにはしないようお願いします。
:::

それではいきましょう！！！


# 加点方法のおさらい


ではまず初めに、レスキューメイズにおいてどのような加点の仕方になっているかもう一度見ていきましょう。


↓得点一覧
![スクリーンショット 2023-08-09 0.37.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708135/a33faa07-47b3-2b45-f406-c141fb3314c6.png)

https://docs.google.com/spreadsheets/d/1d4kdoVaKpd8HKhmgEeLb_XlLo__WC5Rj/edit?usp=sharing&ouid=107116044368328521543&rtpof=true&sd=true

このようになっています。
改めて見てみるとやはり被災者に関する得点が大きな割合を占めていることが分かるかと思います。


被災者1人あたり最大120点取得できることを考えると、被災者発見の重要性がより伝わってくるでしょう。


なので、この先の記事を読むときは、「被災者発見は重要」ということを忘れずに頭に入れて置いてください。


# その全マス探索本当に必要？

2023全国大会で、全チームのテクニカルドキュメントと試合内容を見たところ、多くのチームが迷路を完璧に全マス探索し切ろうとしていました。


何も悪いことではありません。


しかし、メイズの迷路探索の時間はどんなに大きいマップでも8分となっています。
そして、今回の大会のコートは4×11とかなり大きなものだったので、時間が足りなかったり、途中でマップがずれてしまい帰還できなかったチームがほとんどでした。

きちんと帰還出来ることの何がいいかと言うと、帰還ボーナスという得点を貰えるところにあります。
上の表にもある通り、帰還ボーナスは見つけた被災者一体につき10点つまりバンプ2個分であり、わざわざ全てのマスのバンプや銀タイルで点を稼ぐより、効率的に点を稼ぐことが出来ます。

そのため、例えば被災者を１０人見つけたら[足立法](https://www.rt-shop.jp/blog/archives/3692)で最速帰還するようなプログラムを用意しておくのもいいでしょう。
こうすることによって今回の全国のように3戦の合計点数で競う場合、1試合1試合確実に点を重ねることができる上、タイムを短くすることができます。

また長く走るとマッピングがずれてしまう危険性が増え帰還できなくなりボーナス点を得られないかもしれません。

**どんなマップでも全マス探索して帰還してやるぜ**

と言う人も念の為今回例に挙げたようなプログラムを用意しておくのが良いでしょう。

# 色被災者について
色被災者の一番難しい点は誤発見が起こりやすいと言うことです。
特に白い壁を黄色被災者と誤発見してしまうことが多いのではないでしょうか。
それを防ぐ一番効果的な方法は、RGBではなくHSV(micro pythonならLAB)を使うことです。
HSVやLABでは、RGBでは難しい細かい色の調整を簡単で直感的に行うことができる上、明度を調整することができるため照明条件が変化しても色の認識が安定するというメリットがあります。

また、カメラの側にLEDをつけるのも悪くはありませんが、それによって影ができたり明るくしすぎて白飛びするリスクを考えるとあまり個人的にはおすすめしません。

この色被災者の発見精度は現地の照明条件によって誤差が発生することが多々あります。
そのため現地での調整を楽にするために調整用のプログラムを用意しておくことを強くお勧めします。(この[記事](https://nobinobi.blog/opencv-binarization/)のような)


# 文字被災者について
文字被災者の発見方法には様々なものがあるかと思います。
ハフ変換で直線の数を数えたり、黒い部分の色の面積を数えたりなどなどetc、、、
しかしこれらの方法ではいかんせん精度に問題が出ることがあります。

そのため、私個人的には文字被災者は機械学習一択だ、と考えています。

そこで以下で、文字被災者用の機械学習における意識すべきことを紹介します。

### 画像を二値化
まず一つ目は画像は二値化しようと言うことです。
二値化にする利点は主に計算量の削減とノイズの削減の二つです。


### 自分でモデルを作ろう
前回の大会で、機械学習を使っていたチームは全て何かしらのツールを使ってモデルを作ってましたが、、、
あまりおすすめはしません。

例えるなら、
**大会に使う大事な基盤をチーム以外の人にはんだ付けさせますか？**
という話です。普通そんなことはさせないですよね。

なので、皆さん自分でモデルを作れるようになりましょう！！

**「どんなモデルを作ればいいかわかんないよー」**
という人は[この記事]()にメイズの文字認識で有用な知識について書いてあるのでよければ見てね(僕が大会に使った時のコード置いてるので良かったら)

自分で作れるようになると、なんで文字被災者を誤認識するのか、精度が出ないのかが自ずと分かるようになるはずです。

# 大会前日の人へ
**大会前日やけど今から文字被災者と色被災者で点数稼ぎたい！！**
という人向けの方法を伝授します。

それは、壁に何かがあると認識したらキットを1つ落とすというものだ。

メイズコートの壁に白色以外の何かがあったらそれはだいたい被災者。被災者に間違った数のキットを落としても減点はされません。なので安心して落としましょう。

コートの柱を誤認識しないように気をつければそこそこ点を取れるのでオススメです。

深夜2時でエナドリを飲みながら作業してる君、誤認識連発してやらかすよりマシだ。
大丈夫、正確にコート走れるなら全体の7割は取れる(多分)。7割もあったらよゆーで優勝できるぜ。
だから明日の当日調整のためにとっとと寝な


# 進行停止しない勇気

メイズには誤発見以外にもう一つだけ、減点対象となる行動があります。

それが進行停止です。

進行停止1回につき信頼性ボーナスから10点引かれます。あくまでボーナスなので大量に進行停止をしても点数がマイナスになることはないですが、できるだけ回数は減らしたいものです。

では、どうやって減らせばいいのか。
ミスなく走れる機体を作るのはもちろんですが、大事なことはそれだけではありません。

それと同じくらい大事なのは、
**自分の機体のことをちゃんと知る**
ということです。

製作者やから当たり前や、と言うかもしれませんがまぁ聞いてください。

機体のことを知ると言っても、センサーがどんなので、モーターが何で、みたいなのではありません。
ここで言う「機体のことを知る」とは、機体の行動をきちんと理解する、ということです。

ここで方位がズレたな、とか本来ならここで右に行くはずやけど行かなかったのはあそこでマップがズレたからやなとか、今被災者認識出来なかったのはカメラの画角に入ってなかったからやな、などなど...
このように、今こういう動作をしたから、こんな不調を起こしてる、順調に行ってる、ということなどをログなどを見ずにも分かるようになることを目指しましょう。

それがもし分かるようになれば、ここで進行停止かけてもまだ点取れる可能性がある、とかもう無理そうやな、だからもうここで走行終了しよう、とか、これはチェックポイント戻っても良くならないはずだからこのまま行けるところまでいこう、などの判断がつきやすくなるはずです。

そうしたら、むやみやたらに進行停止をかけて点を失うこどが無くなるはずです。

# おまけ 
私は先の全国大会でインタビュアーをさせて頂いたのですが、そこで思ったことがあるので言わせてください。

**「テクニカルドキュメントとエンジニアリングジャーナル出して、、、」**

忙しいのは分かるんですがこの2つにも少量ですが配点が存在しています(多分)。
特に特別賞(ハードウェア奨励賞やソフトウェア奨励賞、優秀プレゼンテーション賞)などはこれらTDPやジャーナル、インタビューの内容などもを考慮に入れ決められます。
そのためもしこれらの賞を狙う場合は自分の機体やプログラムだけでなくこの2つに力を注ぐことをおすすめします。

そうじゃなくても全国大会では必須のインタビューを円滑に進められるので、ほんとある程度でいいので書いて貰えると幸いです(インタビュアー目線)。

# さいごに、、、
以上のことが私が考える戦略というかコツというか考え方？です。メイズに参加するロボカッパーの方の参考になれば幸いです。

それでは、最後に私が現役ロボカッパーの時に常々思っていた事を書いて〆としたいと思います。

**「機体は早めに完成してもらえるとありがたいです.... byプログラム担当」**

ここまで読んで頂きありがとうございました。