2024年12月5日

010-1.ロボット競技に役立つEV3センサー入門-第1回「回転センサーを見える化しよう」

この連載では「教育版レゴ マインドストームEV3」を使い、各種センサーをロボット競技に役立てるためのノウハウを紹介していきます。本当に役立てるためには実際に手足を動かすしかありませんので、これを参考に実践してみましょう。なお、使用するプログラミング環境は「教育版EV3ソフトウェア」です。(文/松原拓也)

◆ 回転センサーの仕組み

連載一回目の今回は「回転センサー」に着目してみましょう。
回転センサーというのは、LモーターやMモーターに内蔵されているセンサーです。センサーは直接見ることはできません。

一般用EV3のダウンロードページ(http://www.lego.com/ja-jp/mindstorms/downloads)で公開されている「EV3 ハードウェア開発キット(LEGO MINDSTORMS EV3 Hardware Developer Kit=通称HDK)」を参照すると、回転センサーを回路図で確認することができます。
回路図の赤色の部分がフォトトランジスタです。これが回転センサーです。2つのセンサーで回転方向を判別しています。隣にあるLEDとセットで使います。推測ですが、LEDはセンサーには赤外線が使われていると思います。

回転センサーの構造は「一般用レゴマインドストームNXT」の取扱説明書がヒントになります。これにはインテリジェントサーボモーターの内部構造が載っています。NXT用とEV3用では形状が若干違っていますが、電気的な仕様は同じなので、おそらくEV3用モーターも似た構造になっていると思われます。
この資料によると、スリットの入った円盤が回転することで回転センサーがON/OFFを繰り返します。この信号をソフトウェアが解読することで回転方向と回転角度、回転速度が分かります。
専門的にはこうした仕組みのセンサーのことを「ロータリーエンコーダー」と呼びます。

◆ 実験用ロボットとフィールド

実験用にシンプルなロボットを作ってみました。
使用しているモーターは「Lモーター」1つだけです。 モーターは出力ポートAにつないでいます。 モーターを正転させると前進します。

ロボットを側面から見た様子です。写真の右側が進行方向です。大きいほうのタイヤはモーターにつながっています。タイヤの直径は56mmです。
小さいほうのタイヤは空回りします。

テーブルにロボットを置きます。 巻き尺で距離を測って、スタート地点から60cm先をゴール地点とします。
今回、特に提案したいのは、走行タイムやモーターの角速度を見える状態にすることです。思い込みではなくデータで問題点を洗い出し、対策することがロボット競技では重要だと思います。速くて正確なロボットを作りましょう。
たとえば、走行タイムは人間がストップウォッチで測ったりせずにロボットそのもので測ってみたらいいのではないでしょうか。手間は減って、測定ミスもなくなると思います。

◆ 走行タイムの見える化

完成したプログラムです。
数学ブロックを使って移動距離を元に回転数を計算しています。
Lモーターブロックのパワーは「50」に設定しました。
走行タイムはタイマ1の値をそのまま使います。タイムはディスプレイに表示させます。

実行結果がこちらです。 ディスプレイを見ると「約2.4秒」でゴールに到着したことが分かります。

モーターの回転に負荷を加えるため坂道を作ってみました。
距離は60cmのままです。

プログラムを実行してみました。
タイムは「約2.4秒」でした。モーターの負荷が増えていても平地の時と結果は変わりません。さらに、ロボットを持ち上げて無負荷の状態で実行してもタイムは「約2.4秒」です。
これはどういうことかというと、モーターの負荷をインテリジェントブロック側が感じ取って、本当のパワーを調節しているためです。パワーを変化させることで同じタイムを維持しているわけです。おそらくバッテリが消耗した場合でも、ある程度は差を吸収してくれるのではないでしょうか。

つまり、モーターブロックのパラメータの「パワー」というのはソフト上で管理している「速度」のことです。パワーには「本当のパワー」と「ソフト上のパワー」の2種類が存在しています。見える化によって、それをハッキリさせることができました。
ちなみに坂道の場合、ロボットはゴールの約7cm手前で止まってしまいました。これはタイヤがスリップしてしまったためです。対策するためには、ゴールに到着できたかどうかを回転センサー以外の方法で検出しないといけません。

◆ 角速度の見える化

自動車には速さを知るためにスピードメーターが付いています。 同様にロボットにもスピードメーターを取り付けてみましょう。
先ほどと同じロボットを用意します。 長時間回転させるので、タイヤは浮かせた状態にします。モーターの負荷がなくなってしまうので、実践的なデータから離れてしまいます。もし広い場所が確保できる場合には、実際にロボットを走らせてみましょう。

こちらが角速度を測定するためのプログラムです。「角速度」とは角度の速度のことです。
回転センサーの差を計算して、グラフに描きます。モーターのパワーは0~100の範囲で0.1秒ごとに切り替えます。

プログラムの実行結果は写真のとおりです。
見事、グラフが描かれました。X軸がパワーで、 Y軸が角速度です。
グラフはきちんと比例しているようですが、実際は違います。 グラフの右側、パワー95~100あたりで角速度が上がっていません。96度/0.1秒あたりで止まっています。
なぜ角速度が上がっていないのでしょうか? おそらくパワー95あたりで、実際のパワー(電力)が最大に達してしまい。モーターの性能以上に回転しない状態になっていると思います。

モーターが限界に達した時の角速度は0.1秒あたり約96度でした。単位を置き換えると960度/秒です。
これをRPM(1分あたりの回転数)に変換すると、960×60÷360=160。つまり、160 RPMであるとわかりました。
「EV3 ハードウェア開発キット」によると、Lモーターの電気的な仕様として、9V通電時には176 RPMに達するそうです。充電式バッテリの場合、電圧は8~7Vくらいなので、 そのまま当てはめにくいのですが、仕様通りかそれ以上の性能を発揮しています。
見える化によって、モーターの性能をはっきりと確認することができました。

回転センサーを一切使わずにモーターを動かしたい場合には「未調整のモーター動作」というブロックを使います。これはRCX時代の古いモーターを動かすためのブロックですが、現在のモーターにも使うことができます。この場合の「パワー」は純粋に電気的なパワーの大きさを示しています。
[DOWNLOAD]今回作成したプログラム(教育版EV3ソフトウェア用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。