Raspberry Piで走る迷路探索ラズマウス3号機の製作記録

迷路を探索するラズマウス
迷路探索するラズマウス3号機

毎年開催されているマイクロマウス競技を見て、Raspberry Piを用いてマイクロマウスが作れないかと思ったのが製作の動機。公式のマイクロマウス競技では、迷路幅は18cmで、16区画×16区画の迷路を入口からゴールまで探索した後、スタート点に戻ってゴールまでの最短時間を争う。この競技に出場するつもりはないので、自走できること、迷路を探索できることをゴールに競技用マイクロマウスに近いラズマウスを製作することを試みた。用いる部品の制約から迷路幅は20cm(壁中心間)として、家の中で検証するため、試験用迷路は3区画×3区画とした。競技と同じように、迷路探索を行った後、スタートからゴールまで最短コースを走る仕様とした。

ラズマウス3号機
ラズマウス3号機

●ラズマウスの構成部品と組立

部品構成図
部品構成図

迷路幅20cm(壁の板厚1.5cmを差し引くと道幅は18.5cm)の中で回転するため、ラズマウスのサイズはφ18.5cmの中に納まるようにした。ラズマウスの躯体には、主にタミヤの「楽しい工作シリーズ」のユニバーサルプレート・アーム、タイヤなどを使った。正確な走行距離、静止した場所での回転が必要なため、ステッピングモーターにはSM-42BYG011(秋月電子通商)、ドライバーには、SPIで制御ができるL6470使用ステッピングモータードライブキット(秋月電子通商)を使用した。※ストロベリー・リナックス社のL6470とは基板のサイズが異なる。

ステッピングモーターとドライバー
モータードライバーとステッピングモーター

迷路の壁(前方、左右側方)までの距離検出、衝突防止のため、シャープのレーザー測距モジュール(GP2Y0E03)4個と、反射型フォトインタラプタ(GP2A200LCS)2個を使用した。ラズマウスはスタンドアローンで動くため、Raspberry Piの電源はスマホ充電用リチウムバッテリー、ステッピングモーターの電源には、Ni-H(2200mAh-12V)の充電池を使用。

<購入部品リスト>
バイポーラ ステッピングモーター(SM-42BYG011) (\1,380 x 2個 : 秋月電子通商)
ステッピングモータードライブキット(L6470使用)(\1,800 x 2個 : 秋月電子通商)
5mmモーターシャフト用ハブ(2個入)(\540 x 2組 : 秋月電子通商)
ステッピングモーター用ブラケット(B4201) (\375 x 2個 : 秋月電子通商)
シャープ測距モジュール[I2C&アナログ出力](GP2Y0E03) (\760 x 4個 : 秋月電子通商)
反射型フォトインタラプタ(GP2A200LCS) (\350 x 2個 : 秋月電子通商)
ニッケル水素電池パック(12V 2200mAh)(\3,926 : バッテリースペース)
バッテリースマートチャージャー 9.6V-18V(8~15セル)用 (\4,640 : バッテリースペース)

ラズマウス側面
ラズマウス側面

タイヤはタミヤの楽しい工作シリーズ No.145 ナロータイヤセット(58mm径)を使ったが、モーター軸(φ5mm)と合わないため、5mmモーターシャフト用ハブ2枚でタイヤホイールを挟み、モーター軸に固定した。マイクロマウス用ホイール(軸穴φ5mm、タイヤ径φ44mm)もネットで購入できるが、タイヤ径φ44mmではステッピングモーターの高さに合わなかったことと高価(\2,200/個)であることで使わなかった。後で分かったことだが、朱雀工房ストアというネットショップで、GTFRobots アルミホイール φ70mm(\1,556/2個)、中心穴径5mmが入手可能。前輪は、タミヤの楽しい工作シリーズ No.144 ボールキャスターを使った。

ラズマウス前面
ラズマウス前面

前方左右と左右側面の距離センサーは、I2C接続のシャープ測距モジュール(GP2Y0E03)を用いた。このI2Cのアドレスは0x40に固定されているので、4個のモジュールを使うには、アドレスを書き換える必要があり、0x40, 0x50, 0x60, 0x70とした。アドレスの書き換えは、E-Fuse Programmingを利用しモジュールの裏側にあるVpp端子に3.3Vを加えるという、少し面倒な作業が必要。また、一度アドレスを書き換えると、2度目の書き換えはできないなど、注意が必要。書き換えの手順は、GP2Y0E03 Application Noteに記載してある。

ラズマウス後面
ラズマウス後部

モータードライバーは、少ないスペースに収まるように、20mmの間を空けて、2枚の基板を組み合わせ、ユニバーサルプレートで固定した。

●ラズマウスのプログラム構成

プログラム構成
ラズマウスのプログラム概要

HDMIケーブルは接続できないので、Raspberry PiをWiFiでPC(Windows10)と接続して、VNCでリモート操作し、ラズマウス走行の操作はPCまたはiPadのWEBブラウザから行っている。WEBブラウザのindex.html、javascript.jsからwebiopiを用いて、rasMouse.pyの@macro関数を動かしている。書籍「最新RaspberryPiで学ぶ電子工作(金丸隆志著)」では、WebIOPiの起動を次のようなバックグラウンドモードで行っているが、この方法では、rasMouse.pyプログラムにエラーがあった場合、WebIOPiが起動しないだけでなく、エラーの原因が分からない状態となる。

~$ sudo service webiopi start

今回は、次の様なデバッグモードで起動させた。この方法だと、エラーがターミナルに出力され、エラーの原因が分かり、容易にデバッグ出来るようになる。(但し、これはバックグラウンドで動作しないので、他のコマンドの併用はできないが、通常問題はない。)

~$ sudo webiopi -d -c /etc/webiopi/config

WebIOPiの停止は、[Ctl]+[c]

ここで、/etc/webiopi/configの[SCRIPT]の中のmyscript = に、常駐させておくpythonプログラムの名前(ここではrasMouse.py)とプログラムの位置を変更しておく必要がある。
myscript = /usr/share/webiopi/htdocs/raspi/rasMouse.py

●プログラムの起動

VNCリモート化
VNCでリモート化

PC(Windows10)でRaspberry PiをVNC接続して、リモート化する。
IDEにはGeanyを使っているので、リモート画面には、GeanyとLXTerminalが表示されている。

操作パネル
操作パネル

WindowsのWEBブラウザ(IE)を開き、左側にはラズマウス操作用のindex.htmlを起動させ、右側には、プログラムのデバッグ(HTMLとJavaScript)のために、ブラウザのデベロッパーツールを表示している。

●迷路の製作

迷路バリエーション
迷路バリエーション

ベースとなる合板(61.5cm x 61.5cm、60cm x 60cmに壁板厚1.5cmを考慮)の上に、壁板(厚さ1.5cm)を並べて、3区画×3区画の迷路バリエーションを作った。異なる迷路パターン内で探索させることで、探索アルゴリズムのエラーを見つけプログラムのデバッグを行った。

●完成したラズマウスの迷路走行試験

迷路探索のラズマウスの動き