2024年度マイクロマウス新人研修キット製作研修

無線で操るマイクロマウス – マイクロマウス新人研修(山本)

2024年度マイクロマウス新人研修

はじめに

はじめまして!2024年度新卒でアールティに入社した山本です。

簡単に自己紹介をします。
私は、小学校から高校まで、ロボット競技会に参加していました。
大学ではソフトウェアを中心に、Web アプリケーションのバックエンドやインフラおよび IoT デバイスの開発等を行っていました。
また、大学在学中は、機械学習の高速化に関する研究を行っていました。
こんな感じで、ロボットに触れるのはかれこれ8年ぶりくらいです。

入社後初めてのブログは、アールティおなじみのマイクロマウス研修です。

研修について

アールティでは、エンジニア・非エンジニア問わず、マイクロマウス研修を受けます。マイクロマウスを研修に使う理由については、以下の記事に詳しく書かれています。

現在、マイクロマウス競技といえば、大きいサイズと小さいサイズの競技があります。2024年度新人研修では、大きいサイズのクラシックマウス競技で行います。

研修では、アールティが販売している、クラシックマウス競技向けマウスである Pi:Co Classic3(以下 Pi:Co)を用います。社内では「ピーコ」と呼ばれています。

今年は新入社員が私を含めて5人いるということもあり、マイクロマウス研修は3週間かけて行われました。

第1週

第1週では、Pi:Co の説明や組み立てから始まりました。

組み立て

いきなり Pi:Co そのものを組み立てるのではなく、はんだ付け練習用の基板を組み立てました。
初心者への配慮が行き届いていますね。

ここで、先輩社員からのチェックタイム!
はんだはきれいな富士山の形がよいのですが、私ははんだを盛りすぎてしまう癖があるとの指摘をいただきました。
以後盛りすぎないように注意しました。

ここからは Pi:Co 本体の組み立てです。
電源回路と本体とセンサ回路とマイコンをはんだ付けしました。

そして、ここまでの部品を組み立てて…

私の Pi:Co Classic3 が完成しました。

走行

組み立てが終わり、電源投入を確認したら、サンプルプログラムを用いて Pi:Co を走らせました。

といってもいきなり迷路を走行させるのではなく、直線や旋回幅、センサのしきい値といったパラメータの調整を行いました。走行系のパラメータがあっていないと、指定した長さと走る長さがズレているため、長距離を走行していると位置がおかしくなります。センサの位置とパラメータの調整が正しくないと、壁を正しく認識できず、壁を見失ってあらぬ方向に走り出したり、壁に気づけず激突してしまいます。

これらのパラメータ調整はとても繊細で、少し変えただけでロボットの動作が良いほうにも悪いほうにも見違えるほど変わりました。とても奥深いです。でも大丈夫! Pi:Co には設定用のマニュアルが付属しているので、それに沿って調整していくと結構イイカンジに走るようになりました。

あらかた調整が終わった後、4×6 の小さな迷路で走行させ、微調整を施して、競技会と同じ 16×16 の大きさの迷路で走らせました。

そして、第1週の金曜日には、社内マイクロマウス走行会が催されました。
コースは APEC2024 という大会で使用された 16×16 の迷路です。
私は、マウスの直進速度と加速度を高めて挑み、無事、1分12秒で完走することができました。

第2週

第2週では、マウスの走行性能の改良に挑みました。

スラローム走行

先ほどの動画で、90度の角を曲がるときに、迷路の中央で停止してから車体を90度ターンさせ、再度発進するという旋回方法を行っていました。これは超信地旋回という旋回方法で、一時停止することでとても安定するのですが、それがタイムロスにもつながります。

一方で、私たちが車に乗るとき、交差点ではうまい具合に斜めにカーブして曲がるかと思います。これをマイクロマウスではスラローム走行と呼びます。

経路を図示すると、このくらい差があります。

スラローム走行の方法にはいくつかの種類がありますが、比較的実装しやすい、等速円運動スラロームを実装しました。

等速円運動スラロームの実装

先輩方のブログ記事や研修資料を参考に実装を行いました。Pi:Co の中心部分の旋回半径を \(r_c=80\ mm\) とします。Pi:Co の中心と左右のタイヤは同じ地点を円の中心として旋回するので、車体の幅の半分である \(37\ mm\) を足し引きしてあげると、各タイヤの旋回半径がわかります。そして、Pi:Coの中心と内輪と外輪の速度をそれぞれ \(v_c, v_i, v_o\) として設定し、角速度 \(\omega\) について解くと

\begin{align}
\omega=\frac {v_c}{r_c} = \frac{v_c}{80}=\frac{v_i}{80-37}=\frac{v_o}{80+37}
\end{align}

となり、\(v_c=400 [mm/sec]\) と決定することで、各タイヤの速度を算出できます。

これをソフトウェア上で実装して調整を施すと、先ほどと同じ迷路 4×6 の迷路を見違えるほど早く走るようになりました。時間にしておよそ 13秒の短縮です!!

これからパラメータを微調整して、第2週の金曜日の社内マイクロマウス走行会に持って行きました。
今度の迷路は、全日本マイクロマウス大会2023で使用された16×16の迷路で、なかなか難しい迷路でしたが、無事完走できました!
時間は32.7秒でした。

第3週

第3週では、テクニカルチャレンジに取り組みました。

テクニカルチャレンジ

テクニカルチャレンジとは、研修中に行った発展課題です、各自 1 つ Pi:Co に関連するテーマを決めて、その開発に取り組みます。

いきなり開発するのではなく、まずはテクニカルチャレンジ内で扱うテーマや実装内容の詳細、スケジュールなどを計画書にまとめ上げます。それを先輩社員にチェックしてもらい、Go サインが出たら開発開始です!

開発した内容

私は、Pi:Co のモータやセンサのパラメータ調整に何度も苦しめられていました。もっと手軽に様々な走行パターンやパラメータを試せたらいいのに…。そこで、Wi-Fi 機能を搭載した ESP32-S3 マイコンボード(以下 ESP32)を利用します。Wi-Fi を通じて、PC やスマホのブラウザから Pi:Co を遠隔操作したり、センサの状態を取得し、可視化する機能を追加しました。

ブラウザから操作するために、ESPAsyncWebServer というライブラリを用いて、ESP32 上に Web サーバを立ち上げました。そして、HTML で操作画面を作成しました。
実装したブラウザの画面は以下の通りです。ここからは、各機能について解説します。

ブザー機能

ブザー機能はその名の通り、ブザーを鳴らす機能です。Web サーバとハードウェア連携の動作確認用に作りました。画面上のボタンを押すと、Pi:Co のブザーから音が流れます。最初は単音を鳴らしていましたが、同期のYo氏に触発されて、メロディを奏でるように改良しました。

走行機能

走行機能は、画面上でコマンドを入力することで、自律走行時と同じパラメータを用いてマウスを走らせることができる機能です。PC ゲームの操作を参考に「前進・左超信地旋回・反転・右超信地旋回」をそれぞれ「W・A・S・D」キーに、「左前・右前」へのスラローム走行をそれぞれ「Q・E」キーに割り当てました。これら 6 つのコマンドで Pi:Co の進行方向を決定します。画面上のボタンやテキストボックスから、簡単に進み方を設定できます。
また、直進速度も設定できます。

この機能は、スラロームと前進を組み合わせた走行などを重点的にテストするために実装しました。

センサ機能

センサ機能は、画面上に Pi:Co のセンサの値をリアルタイムで表示できる機能です。この画面では、Pi:Co に搭載されている「前方を見るセンサ」2 つと、「左右の壁を見るセンサ」2 つ、計 4 つ全て確認できます。さらに、センサが壁を検知すると赤枠で強調してくれます。なので、Pi:Co がどのように迷路を見ているかがわかりやすくなっています。

この機能を思いついたきっかけは、Pi:Co センサの値の表示機能が有線でしか利用できず、コートの中心付近でパソコンと Pi:Co を扱うのに苦労した経験からです。

ブラウザに表示される値を更新するために、 WebSocket というブラウザとサーバ間で双方向にリアルタイムに通信できる規格を用いました。実装は以下のサイトを参考にしました。

https://randomnerdtutorials.com/esp32-websocket-server-sensor/

しきい値変更機能

リアルタイムでセンサの値が分かれば、値を変えた時の挙動もテストしたくなるかと思います。そこで、ブラウザから一時的にセンサの壁判定のしきい値を変更できる機能を実装しました。

画面からしきい値を変更すると、値がセンサ機能の壁判定や走行機能・本番用の自律迷路探索などに反映されて、その場でテストができるようになります。

動画では、FLセンサのしきい値を 1(1以上の値が出たら、壁と判断する)とした結果、常に壁判定を出すようになりました。

工夫した点

開発した Wi-Fi 機能は常時動作するものではなく、ボタン操作で起動するようになっています。これは、マイクロマウスおよびクラシックマウスのルールに準拠するためであり、調整用途を意図しているからです。

1. 競技中にプログラムのローディングおよびROMの交換を行なうことは許されない。また、競技中にマイクロマウスを本体とは独立した開発装置やコンソールボックスと接続してプログラム実行に関する指示を与えることも許されない。

クラシックマウス競技規定|New Technology Foundation:https://www.ntf.or.jp/?page_id=118

また、ESP32 は 2つのCPUコアを搭載していますが、Arduino からはメインコア(Core 1)のみを利用しています。そこで、Arduino から freeRTOS のコマンドを呼び出すことで、マルチコア動作を実現しました。本実装では、サブコア(Core 0)で Web 画面を表示する HTTP サーバを動作させています。

Pi:Co の Wi-Fi モードを起動すると、メインコアでは走行機能、サブコアでは HTTPサーバがそれぞれ起動します。ブラウザから走行コマンドを実行すると、メインコアで待ち受けていた走行機能用の関数が動作し、コマンドと同じ走行を行います。

以下のシーケンス図では、「→」が物理的な操作、「破線の→」がネットワーク経由での操作を表しています。

sequenceDiagram
    participant h as 人間
    box Pi:Co
        participant c1 as メインコア(Core1)
        participant c0 as サブコア(Core0)
    end
    h ->> c1: Wi-Fiモード(走行機能あり)選択
    c1 ->>+ c0:Wi-Fiモード起動
    Note right of c0: Webサーバが動作中
    loop 常時実行
        c0 -->> h: センサ情報を送信
    end
    h -->> c0: 走行経路を指定
    c0 ->> c1: 走行を指示

また、走行機能と排他利用にはなりますが、Pi:Co の自律走行中に、センサの値を確認することもできます。

sequenceDiagram
    participant h as 人間
    box Pi:Co
        participant c1 as メインコア(Core1)
        participant c0 as サブコア(Core0)
    end
    h ->> c1: Wi-Fiモード(走行機能なし)選択
    c1 ->>+ c0:Wi-Fiモード起動
    Note right of c0: Webサーバが動作中
    loop 常時実行
        c0 -->> h: センサ情報を送信
    end
    h ->> c1: 探索走行を指示

発表会

そして、テクニカルチャレンジ最終日では、先輩社員たちの前で、実装した機能について発表しました。本ブログの内容をもとに、実機を用いて動作させることができました。

発表中にいただいた質疑応答は以下の通りです。

Q1. ESP32 上でのWebサーバの実装で苦労した点はありますか?
A1. Wi-Fi への接続が失敗するときがあったり、サブコアで動作しなかった時のデバッグが大変でした。
そこで、ブザーなどを利用して状態をわかりやすいように工夫しました。

Q2. ESP32 を Web サーバにする経験はどの程度ありましたか?
A2. ESP32 マイコン自体は個人的によく利用していました。
ですが、Web サーバ機能を利用するのは初めてだったと思います。

Q3. ESP32 が Webサーバとして動作する仕組みはどうなっていますか?
A3. ESPAsyncWebServer というライブラリを利用して、HTML/CSS/JavaScript ファイルを配信しています。

Q4. 調整に利用した感想はどうでしたか?
A4. 特にセンサ関係の機能が便利でした。

Q5. パソコンだけではなく、スマホから利用できませんか?
A5 ボタンの大きさなどが整っておらず、UI/UX はよくありませんが、利用はできます。
今後実装を検討したいです。

まとめ

まず、ロボットを1から組み立てる経験がとてもよかったです。基板や部品の状態から、ロボットとして仕上がっただけでとても嬉しいですし、走行させているとどんどん愛着が湧いていきました。

また、スラローム走行の実装における「理論で設計し、組み立てて動かす」という経験は、今後ロボットを触っていく中で、理論から考えるという土台を作るうえでとても大事だと思いました。

Pi:Co ははんだ付けの箇所こそ多いですが、組み立ててしまえばこっちのものです。サンプルプログラムや調整方法の書いてある丁寧なマニュアルがあり、マウス初心者でも扱いやすかったです。さらに、スラローム走行や斜め走行、探索アルゴリズムの改良など、改善できる余地も残されているため、脱初心者にも良い教材であると思いました。

社内での走行会の後、先輩社員のマウスの走りを見て違いを研究したり、自身のマウスについてのフィードバックを頂いたりと、マウスを通じた交流が活発でとても驚きました。そして、社内で共通の話題があることで、多くの先輩社員さんと話したり、仲良くなることができました。

長くなりましたが、ここまで読んでいただきありがとうございました。
2024新人研修の記事一覧はこちらです。

タイトルとURLをコピーしました