LEGO®がMindstorms EV3用のPythonを公式にサポートするようになったので、これまでJavaで行っていたMindstomsのソフトウェア開発をPythonに移行することにしました。新しいパワフルな環境が使えるようになったので使ってみたいところです。そこでそれを使った最初の開発として、EV3のロボットでハノイの塔(Tower of Hanoi)のパズルを解くというプロジェクトに取り組むことにしました。題して「EV3でハノイの塔を」です。
Tower of Hanoi Solverの初号機ということで、以降このロボットをTHS1と呼ぶことにします。
THS1を実現する上での課題は、
でしょう。
1はアルゴリズムそのものは分かっていてそれをPythonで記述するだけなのである程度の見通しは得られています。
2はLEGOがMindstorms EV3用のPythonをサポートするようになったおかげで、ネット上に情報が出回っているのでそれを探せば何とかなりそうです。
一番厄介なのが3で、これは未知の部分です。試行錯誤で作っていくしかないでしょう。これがうまくいかないといくらソフトウェアで頑張ってもどうにもなりません。そこで、先ずはこれから進めることにします。
人間がパズルを解く動作から類推すると、必要な機構は、
A) 円盤を掴む。
B) A)を上下(Z軸)方向に移動させる。
C) A)、B)を水平(X軸)方向に移動させる
です。今回対象にするパズルは下の写真に示すものなので、ザックリ言って、円盤を掴む機構は20~45mmΦで厚さ9mmの円盤を掴めること、Z軸方向、X軸方向の可動範囲をそれぞれ70mm、92mm以上にして、その位置決めの精度を誤差±1mm以内にするというところでしょう。
スタートになるのは円盤を掴む機構でしょうからそれから考えます。
写真で示すように円盤の直径が異なるので、それを確実に掴むためには工夫が必要です。部品の形状が決まっているので、それをどう組み合わせるかがポイントになります。指を模した構造を開閉して掴むのが常套手段でしょうが、当初、プラスチック部品だけで作ると滑ってうまくいきません。そこで指先にゴム製の軸コネクタを付けることでその問題を解決しました。これを使うと滑りにくく、また可撓性があるので径の違う円盤でも安定に挟んで保持でます。
指で円盤を掴む方式については、横からか上からか、2本指か4本指かなど、いくつかの方式を試しました。最終的に、写真のようにMediumサーボモータの鉛直軸周りの回転をウォームとウォームホイールで伝えて、4本の指が左右に対称に動くようにしてみました。この4本の指を開いて円盤に上から近づき、閉じて円盤を外から挟みこむわけです。
部品サイズが固定されていてモーター、ギア、アームの位置関係を自由に設定できないのですこしアンバランスなところがありますが、その若干のズレは指先のゴムで吸収させるという作戦です。
下にテストした様子を撮影したビデオを紹介します。
大きさの異なる円盤を安定して掴んで軸から取りだし、他の軸に落とすことができるのでこの方式で行くことにします。
円盤をグリップできたので、次はこれをZ軸方向に動かす機構の製作です。前述したように上下に最低70mm動かす必要があります。それについては次回記述することにします。
また、この検証実験では赤外線のリモートコントローラを使ってモーターを操作していますが、モーターを少しずつマニュアルで動かしながら動作を確認するにはこの機能がとても有効です。特に複数のモーターを扱うとなるとさらに効果を発揮できそうです。この方法については備忘のため別途記述することにします。