マウサー/マウス タスクリスト(単一大会編)

はじめに

あいさつ

こんにちは、うえぽんです。
オープンソースマウス Zirconia で競技参加を目指しています。

この記事は何?

前回のあらすじ

前回記事「マウサー/マウス タスクリスト(1シーズン編)」の続きです。
前回は、全国大会のファイナリストにギリギリ滑り込むための条件の予想を立てました。
最終的に、2024年度のいつ頃までにマシンを作る際のデッドラインを(おぼろげながら)意識することができました。

今回の話

今回はもう少しマウスのソフトに近い情報を収集し、まとめます。
※つまりまだソフト設計の前段階・・・早くコードを書きたいです😇

  • お品書き

    ① 大会の流れを確認する。

    • 競技ルールに沿った形で迷路走行する条件を書き出す
      • いつ、どういった情報が入手できるか、どういう操作を行ってよいか?

    ② ①の各状態をベースに、状態を追加してみる

    • 大会ルールを状態遷移に落とし込む
      • いくつかの要素に分けて、それぞれの状態遷移を書きだす
      • (次の記事) マウスのプログラムの状態遷移を設計する

注意事項

競技の規定に関する事項については、 必ず公式文書を参照してください

大会の流れ

一つの大会の開始から終了まで流れを見てみます。

~大会 数週間前

迷路情報公開

迷路サイズ、ゴール領域座標、ゴール領域内の柱の有無が発表されます。 (例: 2022年)

大会 前日

試走会

ルールで厳密に規定されていませんが、例年(2018,2019,2022) 昼~夕方の間、試走が可能できるようです。

Optional: マウスパーティ

懇親会です。コロナ後は開催されていない模様です。
大会前日の限界開発を華麗に回避し、マウスパーティに出られるように頑張りたいですね
...頑張れるかなぁ???

大会 当日

車検:

マウスが規定を満たしているかチェックする作業です。
過去大会では車検通過後から競技直前まで、マウスは「マウス置き場」に隔離されたようです。

2018, 2019年 全日本ファイナルでは、競技時間30分前までに所定の場所にマウスを預ける必要があったようです。
2022年 全日本ファイナルでは、事前の写真登録必須化に伴い車検とマウス預け制度が無くなったようです。
2023年 全日本ファイナルはアナウンス前なので要チェックですね。

競技開始

  • 持ち時間

    各大会毎に異なりますが、全日本では例年、
    ファイナル: 10分経過 or 5回試行終了 / セミファイナル: 5分経過 or 5回試行終了
    が多いようです。
    ルール上は以下のようになっています。

    3-6 マイクロマウスの持ち時間は最大10分間として競技会ごとに定める。この間原則的に5回までの走行をすることができる。(原文Link)

  • 1走目
    競技開始時点でマウスは迷路の情報を持たないため、まずは迷路探索を行います。
    ゴール到達後も、最適な経路を見つけるため迷路探索を続行することができます。
  • 2走目以降
    何事も無ければ 1走目で記録した迷路情報を元に最短走行を行います。

    最速を狙う場合、
    簡易整備(タイヤ掃除など)→パラメータ調整→走行開始→スタート→ゴール→スタートへ帰還
    という流れの繰り返し が一般的のようです。

    ベストマウサー、自律賞を狙う場合などでは、マウサーの操作なしに連続走行を行うマウスもあるようです。

  • 走行に失敗した場合
    こちらの方が問題です。
    明らかな走行異常発生時(おそらく2秒以上の長時間停止など)以外で走行中止した場合、
    迷路に関する記録をすべて消去しなければなりません。

    3-5 操作者は、競技委員長の指示または走行中止の許可がない限り走行中のマイクロマウスに触れてはならない。競技委員長は、あきらかに走行に異常が認められた場合、走行中止の申し出を認める。
    また、それ以外の走行中止の申し出については、迷路に関する記憶をすべて消去することを条件に認める。 (原文Link)

ところで、迷路に関する記憶をすべて という文言が気になりました。

文字どおり、壁の有無等の競技中に走行中に収集した情報だけでなく、迷路サイズ、ゴール位置、さらにはデバッグ用に収集したログデータの類も一切合切すべて消去しなければならない、と考えるのは少々不合理そうです。

ルールを作った人の意図を類推するに、 走行中止した場合、マウスのゴールにたどり着く能力を、競技開始時点同等にリセットしたい という意図があるとみて、走行中止時のリセット対象は 競技中に収集した壁データ (事後解析用ログデータは除く) と解釈して設計することとします。(ツッコミ歓迎です)

状態遷移

さて、上記の内容を状態遷移の図表に書き出してみます。
書き出していく中で見えてきた、大会によって可変しうる要素は パラメータ としてメモしておきます。
では書き出した結果を見ていきます。ルールに出てきた要素は以下の3つに分割された状態遷移に分類できそうです。

1. 競技進行

競技進行は比較的単純です。事前に時間制限と、走行できる回数が規定されており、
走行の度に手持ちの試行回数を 1 消費し、N回目の試行を終了すると競技終了です。
また制限時間を超過した場合も競技終了です。

3-6 マイクロマウスの持ち時間は最大10分間として競技会ごとに定める。この間原則的に5回までの走行をすることができる。(原文Link

【パラメータ】

項目 単位 値域 補足
時間制限 Integer 0 < T ≦ 600 マイクロマウス競技規定 3-6 より
走行回数制限 Integer 0 < N マイクロマウス競技規定 3-6 より
ただし 原則5回まで の表記あり

2. マウス内の地図情報

マウス内の地図情報に関わる振る舞いもルールで規定されています。
他2つと比較して、マウサーによる人力操作の多さが目立ちます。

3-2 操作者は迷路が公開された後で迷路に関する情報をマイクロマウスに入力してはならない。
また競技中にスイッチ操作等で、迷路に関する情報を修正、あるいは部分的に消去することはできない。(原文Link)

とある通り、 迷路(=壁の配置)の公開前であれば、マウスに対して迷路情報の入力が可能です。
また、走行中止時に消去しなければならない情報ルール上事前にマウスに書き込める情報(≒パラメータ化すべき項目)は、大会数週間前に公開される以下の情報ということになります。

【パラメータ】

項目 単位 値域 補足
迷路基本情報
迷路サイズ (x, y) 区画 0<x, y≤32 マイクロマウス競技規定 2-2 より
ゴール領域座標 左上: (x1,y1)
右下: (x2,y2)
区画 0≤x, y≤32 マイクロマウス競技規定 2-3 より
(例) (X18, Y13)-(X19,Y15)
ゴール領域内の柱 Boolean - - -

3. 走行状態

ルール3-3に表記されているとおりです。

3-3 迷路の走行は、毎回始点より開始し、始点に戻った時点あるいは2秒以上停止、もしくはマイクロマウスの走行中止が認められた時点で終了する。(原文Link)

考察

あらためて3つの状態遷移を見てみる

ルールを読めば容易にわかることしか書かれてないですね。
ソフト開発で最も大きなウェイトを占める「迷路走行」を、 3.走行 の「走行中」 ただ一言で片付けてしまっている点からして、完成までは程遠い状態です。

ただ、パラメ―タ化すべき要素と、注意すべき要素をいくつか発見できました。

1. 競技進行について

運営側が試行回数や競技時間をカウントしているため、マウスのプログラム側ではあまり意識する必要はなさそうです。

2. 地図情報について

状態遷移の迷路基本情報の入力壁データ全消去 は人力で行わなければならない点が厄介そうです。

迷路基本情報の入力 の厄介さは、例えば家で直前まで制御パラメータ調整等々をする場合に顕在化しそうです。
調整用迷路の基本情報が本番と異なる場合、調整終了後に大会用の迷路基本情報を忘れずに書き込む必要があります。すごーくミスしそうですね。

壁データ全消去の厄介さは、ミスした際のリスクの大きさにあると思います。
大会本番、マウスが想定外の挙動をとったタイミングという焦りがちな状況下での操作になります。
うっかりデータ消去を忘れていると一発ルール違反になりますし、反対に不要なタイミングでうっかり壁データ全消去してしまうと探索をやり直すことになります。

いずれもなんらか対策が必要そうです。

3. 走行について

走行終了方法の意識は必要そうですが、基本的にルール通りです。

今回は ルール上の項目のみ考慮 したため当然ではありますが、「探索走行」や「最短走行」といった一般的な走行モードが一切書かれていません。

「走行中」の中身こそがメインなので、今後はこの中身の検討が中心になりそうです。

まとめ

とりあえず最低限ルールの大枠を理解することができました。
ただし、現状は状態遷移が3つ、しかも粒度バラバラの状態です。
下ごしらえはここまで。次回から本腰入れて設計していきます。

余談

本当はスーパーバイザ制御みたいなことをやりたかったんですが、あとから「対象システムがモデル化されてないと成立せんやんけ!」となりボツりました。
新しいことをやり始める際は、手を動かす前に文献を読もう。