ししかわのマウス研修 マウス自作研修

【最終回】Webエンジニアがマイクロマウスを作ったらこうなった – ししかわのマウス研修 Part.49

ししかわのマウス研修

ししかわです。

社員研修の一環で、マイクロマウスを自作して全日本大会に出場しました

記事一覧

大会が終わって、書きたかった内容も一通り書けました。「ししかわのマウス研修」は今回で最終回となります。最後にマイクロマウス研修全体の振り返りをしたいと思います。

私の他の記事を読んでいない方でも分かるように、前提知識を補いながら書きますので、ぜひご覧ください!

ややエモい内容になります。

あなた誰?

ししかわと申します。

Shinya Ishikawa's profile
I am a software engineer interested in all kinds of human machine interface.

2019年にアールティに転職してきました。

前職はSIerでWebフロントエンド技術を中心とした研究開発に従事していました。M5Stackを使った個人のMaker活動をきっかけに、また「ハードウェアハッカー」などの名著に影響を受けて、一度は諦めたロボット開発者への道をもう一度目指そうと思って転職を決めました。

前職の頃から一貫して、ユーザインタフェースやヒューマンロボットインタラクションに興味があります。人の日常に溶け込んで、家事・育児などのお手伝いをできるロボットをいつか作りたいと思っています。

アールティのエンジニアは大半がNHKロボコンロボカップ などの出場経験がありますが、私は入社時、ロボット開発はほぼ未経験でした。業務ではUIを中心にソフトウェアエンジニアとして貢献しつつ、「ロボットエンジニア見習い」として勉強の日々です。

「マイクロマウス研修」ってなに?

そもそもマイクロマウスってなに?

マイクロマウスとは、ロボットが迷路を自律的に探索し、ゴールするまでの時間を競う競技、またはそのロボットを差します。

マイクロマウス
マイクロマウス競技の概要 マイクロマウス競技は、参加者自らが作った自立型ロボットが自律的に(自分の力だけで)迷路を探索し、 ゴールまでに達する最短時間を競う競技です。この競技は、1977年にIEEE(米国電気電子学会)が提唱したことに始まり

次の動画はアールティが販売するHM-StarterKitが迷路を走る様子です。

マイクロマウス東日本記録会2018 HM-StarterKit走行

マイクロマウスを作るには壁を検知するセンサや車輪を動かすモータ、その制御、さらには迷路の探索アルゴリズムに至るまで、ソフトとハードをまたいだ幅広い知識が必要となります。

マイクロマウス研修ってなに?

アールティに入社したすべての社員は、マイクロマウスを題材にした研修を通じて、ロボット作りを体験します。技術職もビジネス職も全員です。業務量の調整をしつつ、原則として午前中は全エンジニアが研修をしています

エンジニアはまずアールティが販売するマイクロマウスキット「Pi:Co Classic3」を使って基礎を学んだあと(キット製作研修)、企画から製作まですべて一人で行います(マウス自作研修)。研修のゴールは毎年開催される全日本大会に出場して、迷路を完走することです。

アールティがなぜマイクロマウス研修に力を入れるのか、詳しくは社長がブログで思いを綴っています。

マイクロマウスを研修に使う理由
こんにちは。アールティの社長のyukiこと中川です。 今年度からブログを拡充しはじめまして、おかげさまでショップブログ、マイクロマウスブログも順調な滑り出しとなりました。 松崎が研修で始めたマイクロマウスのブログを見て、お客様や...

なおアールティは通年で社員を募集しています。この記事を読んで興味がわいた方はお気軽にご応募ください。

どんなマイクロマウスを作った?

約1年半の研修を通じて、はじめての自作マウス「M5Mouse」が無事完成しました!

m5mouse

M5Mouseは次のような特徴を持っています。

  •  コンセプトは「Web屋のためのマイクロマウス
    • (私のような)組込みの知識が無い初心者でもコードを読んで理解できる
    • WiFiやBluetoothによる通信機能によって開発を簡単に行える
    • 一部のコードはJavaScriptで実装できる
  • 2つのモジュールが通信しながら走行を行う
    • マウスモジュール…マウスの走行制御を行う。STM32というマイコンを使用。制御のプログラムはC言語で実装
    • コアモジュール…ユーザからの操作を受け付けてマウスに指令を出す。ボタンや液晶ディスプレイ、スピーカーなどのUIを備える。M5Stack(ESP32)を使用。Moddableという組込み向けのJavaScriptプラットフォームを採用し、UIや通信制御はTypeScriptで実装。
  • すべてオープンソース
    • ソースコード、外装のデータ、回路図と基板の設計データを全て公開している

M5MouseのソースコードなどはGitHubで公開中です。

GitHub - meganetaaan/M5Mouse: A micro mouse module made for M5Stack
A micro mouse module made for M5Stack. Contribute to meganetaaan/M5Mouse development by creating an account on GitHub.

目標は達成できた?

全日本大会2020のクラシックマウス競技に出場し、完走できました

その他「研修の目標」と「最初に立てたコンセプト」をどれくらい達成できたか振り返ってみます。

目標/コンセプト 評価
(必須)クラシックマウス競技でスラロームを使った探索走行でゴールできる ゴールできた。ただし2020年大会はリモート開催で何度も走行をやり直せるので例年より条件が緩いことに留意。
クラシックマウスの迷路で最短走行でゴールできる 実装が間に合わず。
Webのスキルセットを持つ人がプログラムを理解して開発できる STM32とM5Stackを使った。M5StackではModdableを採用してTypeScriptでUIを記述できるようにした。STM32のC実装もオブジェクト指向の考え方でクラスを分割し、可読性を上げた。
ネットワーク通信ができる(WiFiまたはBLE) ハード的にはM5Stackを通じて通信できる。ファームの実装がまだ。
UIにこだわれる マウス上部の液晶に色々表示できる。
組み立てやすく、壊れにくい or 壊れても簡単に直せる 組み立てやすい設計にできた。基板は2回の試作を通じて壊れにくいものにできた。
速くなくてよいが、最低限、競技の制限時間内に5回完走できる ハードの性能的には時間内に5回完走できる。最短走行の実装がまだ。

特にソフトウェアの面では、〆切に間に合わず実装できなかった機能がたくさんあるのが心残りです。今後の課題にしたいです。

スキルは身についた?

研修を通じて身についたスキルを棚卸ししてみます。

前述の通り研修を始めた当初(転職した直後)はロボット開発の経験がありませんでした。その状態から一連の研修を通じて、次のことを学習できました。

電気/電子

自作基板

機械

制御理論

  • 二輪ロボットの制御
    • 自己位置推定(オドメトリ)
    • 台形駆動を用いたフィードフォワード制御
    • PIDによるフィードバック制御

ソフトウェア

  • C言語のベストプラクティス
  • Rx、STM32、ESP32などの主要なマイコンの開発手法
  • レジスタアクセスを介したマイコン制御の基礎
    • SPI、I2C、UARTなど基本的なプロトコルを用いた通信
    • アナログ、デジタル入出力の制御
    • 割り込みとタイマ制御
  • 主要な電子部品の制御方法(ドライバの書き方)
  • 迷路探索アルゴリズム

考え方

ご覧の通りマイクロマウスを通じて多岐にわたる知識を学びました。「浅く広く」ではありますが、今後各分野を深く学習するための足がかりとなるはずです。また、ロボットを作る上で有用な考え方も身につきました。

ブログはどれくらい書けた?

研修の成果はブログで公開することが奨励されています。ここまで書いてきたブログを振り返ってみます。

数字で見る「ししかわのマウス研修」

私が書いたブログは2021年5月現在、月3500PV程度のビュー数です。

特に環境構築や学習方法など、初心者の方がほしい情報が多く読まれる傾向がありました。また「LinuxでFusion360を使う」など比較的ニッチな記事も定常的に読まれているのが意外です。これからロボット開発を始めたい方のお役に立てれば幸いです。

ブログを書く習慣ができることのメリット

2週間に1本のペースは「ブログが習慣化した」と言ってよいと思います。習慣化したことで次のようなメリットを実感しています。

ドキュメンテーションのハードルが下がる

業務でも、プライベートでもなにか新しいことを始めるときには「ドキュメントを作りながら作業する」という所作が身につきました。またエラーログやスクリーンショットを残したり、ロボットの写真や映像を撮っておく(撮ったデータは適切に処理する)ことも意識せずできるようになりました。業務では社内wikiに知見をまとめています。

失敗しても「美味しい」と思える

ブログを書く習慣ができていると、何かトラブルがあっても「次のブログのネタができた」と美味しい気持ちになるのが精神衛生上非常によいです。これは個人としてもそうですし、失敗談を開示することでアールティの技術部全体としても「失敗を歓迎する空気、失敗を認めて改善する空気」が醸成される感じがしています。

どうだった?

最後に研修を通じての所感です。

解像度が上がった感じ

映画「マトリックス」のクライマックスシーンにおけるネオような「すべてが0と1に見える」みたいな衝撃…とまではいかないものの、明らかにロボットを見たときの解像度が上がりました

例えるなら、以前花に凝って、花の名前をたくさん覚えたときの新鮮な感覚に近いです。今までは道端の雑草を見たときに「あれは雑草」と一緒くただったのが「あれはシロツメクサと、スズメノカタビラと、カタバミ」などと判別が付くようになりました。すると例えば「あ、こんなところにナガミヒナゲシ(外来種)がいっぱい生えてる。やばいな」とか考えが及ぶようになりました。

ロボットも一緒で、例えば基板を見たときに「なんか部品がいっぱい並んでる」というざっくりした感想だったのが「このICは多分この役割かな」とか「コンデンサの容量これで足りるのか」とか「あ、ここのはんだペースト溶けきってない。やばいな」みたいな見当が付けられるようになりました。

今までロボットは「買ってきて使う」側の人間で、その中身はすべてブラックボックスでしたが、研修を通じてロボットの動きからある程度中身を想像できるようになりました。社長の言葉を借りると「ハードの気持ちが分かる」ようになってきました。

「ハードの気持ちがわかる」ことは普段ソフトウェアエンジニアとして働く上でもメリットがあると実感しています。たとえばロボットの制御で何かトラブルがあった時に、ライブラリのコード、OS、さらにモータやIC、回路など、限りなく下のレイヤーまで潜って仮設を立てて調査ができるようになるからです。

入り口に立った感じ

マイクロマウスでロボットの基本的な知識は一通りおさらいできましたが、本当に基本的なことばかりで「やっと入り口に立った」という感じです。

マイクロマウス競技の参加者は、実に様々なテーマで技術を追究しています。

競技としてはゴールするまでのタイムを競うので「いかに速く走るか」というテーマは最もわかりやすい指標でしょう。しかし他にも「異なる環境(周囲の光量)や異なる迷路に対して、いかに安定して走れるか」も重要です。例えば次のような先人の試みがあります。

ハードからソフトまで、マイクロマウスというプラットフォームを通じて自分の興味あるテーマを追究できる点は、マイクロマウスの魅力です。私はマイクロマウスをロボット教材として見たときに、開発や学習がしやすくなる理想的なUIについて、今後考えてみたいと思います。

余談ですがマイクロマウス大会の成績上位者は畏怖を込めて「宇宙人」と呼ばれたりします。私はやっと2本足で歩き始めた赤子のようなものです。これからも精進したいです。

ロボット開発は楽しい!

改めて、自分が想像したものが形になって動き出すのは楽しいですね!

マウス研修を終えてみて、前職のSIerでアールティへの転職を報告したときのことを思い出します。ディティールは省きますが、ある方に「ししかわ君はマイクロマウスを作りたいの?(もっと価値のあることしないの?)」という趣旨のことを聞かれました。当時どう答えたかはあまり覚えていないのですが、実際に製作を体験してみて、手を動かして初めてわかる知識や、マイクロマウスを通じて得られた繋がり、動いたときの感動は、どれも何ものにも代えがたいです。今なら自信を持ってやってよかったといえます!

次は何するの?

次回からは二足歩行ロボット研修に進みます。連載もヒューマノイドロボットブログに場所を移します。

アールティ ヒューマノイドロボットブログ
RT Humanoid Robot Blog

引き続き、玄人よりはビギナー寄りの「ロボットの経験が無い人が通読することで学習できる」というスタンスで進めたいと思います。

また、研修ではなくなりますがM5Mouseも引き続き開発します。せっかくM5Stackを積んだのに豊富なインタフェースを使いこなせていないのが現状です。ロボットや迷路の状態の可視化や、通信機能を使ったデバッグなど、もっと便利にできるはずと考えています。開発できたらブログも書いて、最終的に「M5Mouseを作ってみた」という人が現れるまで続けたいです。

以上、本連載を最後まで読んでくださりありがとうございました。

ししかわの次回作にご期待下さい!

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