一定の規則のもとに用意された迷路を、独自の制御プログラムでバランスを取りながら進みます。その過程で得られた壁情報を自身の思考ルーチンで解き、ゴールを目指します。世界的にも有名な競技ロボットで、大会では、スタートからゴールまでに要した時間を競います。上級者になると、コースを斜めに直進して走らせたり、曲線的にターンしたりと、タイムを縮めるための様々なテクニックを使うようになりますが、私を含め初めたばかりの人はゴールさせるだけでも精一杯です。
マイクロマウスの製作に要した時間は約半年、かかった費用は知人にモーターを借りることができたため、それを除いて約1万円です。高度な知識やテクニック、開発用の設備も求められることから、電子工作の中では難しい部類に属すると思います。とはいえ、製作自体はとても楽しいものですので、是非一度挑戦してみてはいかがでしょうか。以下にロボット開発のおおまかな流れを記載します。
工具およびパーツを用意
ニッパー、はんだごて、ラジオペンチといった必要な工具を揃えておきましょう。日用品売り場でもある程度は揃えられると思いますし、マルツパーツ館などの専門店に足を運ぶのもよいと思います。あるいは、Amazon等でインターネット購入するのが一番楽かもしれません。一方、パーツについてはさすがに専門の場所でないと入手できません。近場に東京の秋葉原や大阪の日本橋といった電気街があればいいのですが、ない場合は、秋月電子通商などの専門の販売サイトを利用しましょう。
シャーシおよびタイヤを作成
最初の難所がここです。電子回路一式やバッテリー等を乗せるシャーシ、およびタイヤとその車軸の機械製作です。フリーの2D CADを用いて設計し、紙に実物大で印刷します。これをアルミ版に貼り付け、切削時の目印にします。旋盤等の工作機械を利用できる環境がある場合はよいのですが、ない場合でも、マイクロマウス程度の機械工作であり細部にこだわらない場合は、糸鋸等を駆使すれば製作自体は何とかなります。ただ、この機械工作部分の出来栄えが、後々のソフトウェア開発における制御のしやすさに影響してくるので丁寧に仕上げるようにします。
バッテリーの作成
エネループ等の充電池を、回路およびモーターの動作に必要な電圧になるよう直列に接続し、電池パック化します。具体的には、充電池の正極と負極をはんだづけしていった後、ペットボトルの包装プラスチックでつつみ、ドライヤーの熱風を当てることで収縮させ、パッキングします。この電池パックの充電には、市販のラジコン用バッテリーの充電器の中から、電圧が近いものを流用すればよいです。ただし、専用の充電器ではありませんので、発熱には十分に注意しましょう。
回路を作成
四種類の回路を製作します。それぞれの動作確認を行った後、ロボットとしてまとめます。
マイコン制御用の回路
SH7125Fというマイコン、およびそれに定電圧の電力を供給するためのレギュレータ、リセットスイッチ、プログラムの書き込みおよびデバッグ時にPCとシリアル通信するための端子等がすべてまとまった回路です。
PCとのシリアル通信を行っている様子
マイコンでLEDを点灯させてみている様子
センサ回路
迷路の壁に可視光を当て、反射された光の強さを感知して数値化し、その大きさを基準値と比較することで、壁からの距離を計算することができます。センサ回路はその計算に必要な情報を取得するための回路です。計算自体はマイコンが行います。
ロボット本体に乗せてみた様子。
モータドライバ回路
DCモーターを制御するためには、専用のモータードライバ回路が必要になります。上記写真はその回路を完全に自作してみたものです。ただ、実際は途中で壊れてしまい、市販のモータードライバICを利用するはめになりました。
モーターを回している様子
ロボット本体に乗せてみた様子
昇圧回路
作成した電池パックの電圧が、市販のモータードライバIC (画像左) に供給するための電圧としては不足していたので、追加で昇圧回路 (画像右) を用意しました。
ソフトウェア開発
大きくは二種類、細かくは三種類のプログラムに分かれています。
ロボット本体を制御するためのプログラム
センサ回路から得られる情報から壁との距離を把握し、モータードライバ回路を利用して左右それぞれのDCモーターに電圧を加える時間を調整することで、進行方向や移動速度等を制御します。実装には、古典的なPID制御を利用しています。ちなみに、DCモーターに付属しているエンコーダーで単位時間あたりのモーターの回転量を把握することで速度を計算しています。
迷路を解くためのプログラム
制御プログラムで迷路を進む中で得られた壁情報をもとに、スタートからゴールまでの最短距離を計算します。今回採用したアルゴリズムのイメージは次のようになります。スタート地点で水を放出しつづけると、閉鎖的な迷路であれば、いずれ水はゴールに到達します。最初に到達した水が通ってきた経路が最短であるという仮定のもと、計算を行います。上の画像はその計算結果の一例です。
シミュレータプログラム
「迷路を解くためのプログラム」の動作テストを行うためのシミュレータプログラムです。キャッチコピーの「頭はいいけど足腰が弱い」とは、シミュレータ上では華麗な走りを見せる、つまり理論上は最短経路を発見できる頭脳を有しているにも関わらず、ロボット本体の制御がうまくいかず、そもそも壁情報が集められない、という残念な状況を表現したものです。
回路図 (主要なパーツ一覧)
実際に製作で利用した回路図、およびそれをどのように基板上に配置するかをまとめた資料です。
マイコン制御用の回路
配置図
センサ回路
配置図
モータードライバおよび昇圧回路
サンプルプログラム
製作したプログラムをすべてGitHubのページにアップロードしました。サンプルとしてご利用ください。
完成までの道程は長いのです
C++の勉強
形になっただけでも満足できます
大変なのは制御パラメータの調整
完成
記事内で用いられたソフトウェア (電子回路図、CAD、ソースコード等)
- ファイル名種別サイズアップロード日時
- マイクロマウス 回路図と配置図.zip電子回路図670KB2024/12/30 22:16
関連記事
- 輪郭に関連した画像処理 (OpenCV3 C++)cv::Canny などで検出したエッジをもとに cv::findContours で輪郭を計算できます。輪郭に関連した処理の例を記載します。 輪郭の描画 #include <opencv2/opencv.hpp> #in
- Qt for Python (PySide2) の基本的な使い方QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?A: The nam...
- OpenGL を Python3 から利用するための環境設定および簡単なサンプルコード (Linux)コンピュータグラフィックスのレンダリングライブラリの一つである OpenGL を Python3 から利用するための Linux 環境を準備して、設定例およびサンプルコードを記載します。特にここでは Debian9 を利用します。 Getting Started [Language bindings / Python](ht
- 立方体を回転させるサンプル (OpenGL、Python)立方体を二つ配置して回転させてみます。ライブラリを用いずに OpenGL API を直接利用します。 wget https://gist.githubusercontent.com/harubot/df886254396a449038ee542ed317f7b3/raw/92216e02d0210b9d81770562ddf7741339f1b286/opengl-setup2.py DISPLA...
- Open Dynamics Engine によるロボットの自己位置の推定 (Python)ロボットアプリケーションを開発する際に、ロボットの自己位置を推定する必要がある場合を考えます。ここでは Open Dynamics Engine を Python から利用した場合について、自己位置推定のサンプルを記載します。自己位置推定と環境の地図作成を同時に行う場合を SLAM (Simultaneous Localization and Mapping) とよびます。 検証に用いる車輪型ロボ...