2024年12月5日

010-1.ロボット競技に役立つEV3センサー入門-第6回「カラーセンサーの信頼度を見える化する」

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

今回は「EV3カラーセンサー」の「色」モードについて紹介します。色モードはその名のとおり色を検出するモードです。最近のロボット競技には色を検出する要素がたくさん存在します。
カラーセンサーをうまく扱うコツはセンサーを正しく対象物に当てること、それだけです。そのためにはセンサーの特性を理解しておく必要があります。
最初にこのようなロボットを作ります。カラーセンサー1個とLモーター2個を使います。カラーセンサーは横方向に取り付けます。

・入力ポート1:EV3カラーセンサー
・出力ポートA:Lモーター右
・出力ポートD:Lモーター左

まずはEV3カラーセンサーの回路図を見てみましょう。 回路図はリテール版EV3のページにEV3ハードウェア開発キット(HDK)として公開されています。
センサー内部にはフルカラーLEDが搭載されています。フルカラーLEDとは赤色、緑色、青色がセットになったLEDのことです。そして、光を受け止めるためにフォトダイオードが搭載されています。 フォトダイオードは光が当たると電流が多く流れるという部品です。

色モードではLEDは1色ずつ発光させます。 たとえば、赤色が点灯中だと緑色と青色は消灯します。1色ずつ順番に光を反射させることで3色ぶんの輝度を求めます。この輝度の差から色を求めます。
色を求めるためには最低でも3回光を当てないといけません。このため、動いている物体を測定すると誤検出しやすいです。
差から色を算出していますので、LEDから出た光だけが測定結果に影響します。周辺の光は測定結果に影響しません。測定結果が変化しにくいというメリットがありますが、長距離の色の検出は苦手というデメリットがあります。

◆ カラーセンサーの信頼度を測定

EV3カラーセンサーの信頼度を確認するため、このようなフィールドを用意しました。 6×4ポッチの赤色のブロックをカラーセンサーの手前に置きます。 カラーセンサーはブロックに当てて、きょりを0cmにしておきます。

毎度の繰り返しになりますが、ロボット作りの問題は「見える化」で解決しましょう。今回はカラーセンサーの特性を見える化したいと思います。
カラーセンサーの「信頼度」を測定するプログラムがこちらです(color1.ev3)。
マイブロックでカラーセンサーの信頼度を求めてグラフを描きます。

マイブロックの中身です。ここでカラーセンサーの信頼度(0~100%)を求めます。信頼度を求める方法は自己流です。カラーセンサーを繰り返し測定して、正解(赤色を検出)した回数を信頼度としています。 測定回数を100回にすると処理に時間がかかりすぎるので、20回に減らしています。

プログラムを実行すると、ロボットが5cm後退します。

ディスプレイにグラフが表示されました。
X軸が移動したきょり(0cm~5cm)です。 Y軸がカラーセンサーの信頼度(0~100%)です。 完全に赤色と検出できた場合は信頼度が100%になります。
ブロックとセンサーのきょりが1.7cmくらいまでは100%の信頼度を維持しています。
あと、このグラフですがX軸側にすき間が多すぎて、測定が抜けてしまっています。これはロボットの移動速度が速すぎることが原因です。

◆ ソフトウェア的に超低速移動させる

先ほどのプログラムのグラフを改善して、グラフの密度を上げてみました(color2.ev3)。

ロボットを超低速に移動させるマイブロックです。 ロボットを遅く移動させる一番簡単な方法はモーター制御のパワーの値を減らすことです。ですが、ここでは図のような方法で回転を遅らせてみました。モーターを回転と待機を高速に繰り返すことで、回転を遅らせています。
以上の変更によって、移動時間を約1秒→約14秒に引き伸ばすことができました。

プログラムの実行結果です。このグラフを見ると、0~1.8cmまでは信頼度が100%であることがわかります。
前回よりもロボットの移動速度が1/10以下に落ちましたので、グラフの密度は10倍以上に上がっています。それでも隙間がありますが、これは測定に時間がかかりすぎて回転センサーの値が飛び飛びになっているからです。

自分の予想では、センサーが遠くなると信頼度が少しずつ落ちていくと考えていました。しかし、実際の結果では、信頼度はほぼすべて0%か100%かのどちらかです。
なぜここまで急激に信頼度が落ちるのか。理由は不明です。LEDの光が届かなくなって、測定不能に落ちてしまっているのではないかと考えています。

◆ HiTechnic製カラーセンサー

続いて、カラーセンサーをレゴ社純正からHiTechnic製に交換してみました。プログラムのブロックを数個交換するだけで対応させることができます。

プログラムの実行結果がこちらです。 センサーは5cm以上離れていても色を読み取ることができます。ただし、センサーが遠ざかると信頼度が少しずつ落ちていきます。7.5cmくらいで信頼度が0になります。 ちょっと気になるのは最初の0~0.4cmくらいまでグラフが空白になっていることです。0%でも100%でもなく空白なので、プログラムのブロックが応答していない状態と思われます。この現象は2回目以降の実行では発生しません。インテリジェントブロックの電源を入れたら最初に慣らし運転をしたほうがよさそうです。 あとは、グラフのすき間が気になります。EV3カラーセンサーの場合よりも応答が遅いです。これはインテリジェントブロックとの通信方法にI2Cを使っていて、通信に時間がかかってしまうためです。

2つのセンサーの結果を並べてみました。センサーの特性がまったく違っていることが分かります。
最後にカラーセンサーの色モードについて分かったことをまとめてみました。

≪EV3カラーセンサー≫
・プログラムの応答が早い。
・測定範囲:0~1.8cm(1.8cm以上離れると信頼度が一気に落ちる)
・慣らし運転は不要
・測定結果が周辺の光で影響しない

≪HiTechnic製カラーセンサーV2≫
・プログラムの応答が遅い。
・測定範囲:0~6cm(3cm以上離れると信頼度が少しずつ落ちていく)
・慣らし運転は必要
・測定結果が周辺の光で影響する

[DOWNLOAD]今回作成したプログラム(教育版EV3ソフトウェア用)

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