この投稿は ETロボコン Advent Calendar 2017 の 4日目 の記事です。
背景
初代 Mindstorms RCX、二代目 Mindstorms NXT の光センサーは「周辺光 (Ambient Light)」の影響を強く受けました。具体的には、ETロボコンの競技コースに天窓から日差しが差し込んだり、舞台照明用のスポットライトを競技コースに当てると、光センサーの測定値が想定外の値に触れてしまい、コースアウトする走行体が続出しました。
この周辺光の影響を打ち消す手段として私が2009年の関東地区大会で開発した方法が『まいまい式』です。
Mindstorms NXTが走行体に採用されていた2014年大会頃までは、さまざまな参加チームの皆さんが「まいまい式」に改良を加えて提案してくださったのですが、走行体がMindstorms EV3に置き換わってからは「まいまい式」が、ETロボコンで言及される回数も減りました。
Mindstorms EV3の標準カラーセンサー(光センサー)を使ってみると、周辺光の影響を受けにくくなっていることが経験的にわかります。では「まいまい式」は死んでしまったのか? オワコンなのか? ナシ寄りのナシなのか? EV3カラーセンサーの動作を検証して確かめてみます。 😀
光センサー測定原理
Mindstormsシリーズで使われている光センサー(カラーセンサー)の測定方法は単純です。ライントレースロボットのばあい、投光照明 (Floodlight)と呼ばれるLEDからコース(床)に向けて光を当てて、コースが反射した光(=反射光)の強弱を光センサーの受光素子で測定することで床に描かれたラインの明度(黒白)を測定します。
この測定方法は初代RCXから3代目EV3の標準カラーセンサーに至るまで変わっていません。
「周辺光(たとえば天井灯の明るさ)」が「反射光」よりも十分に暗ければ(弱ければ)影響はないのですが、「周辺光」が「反射光」に対して無視できない程度に「明るい(強い)」環境では、光センサーの受光素子で測定する値は「反射光」+「周辺光」となります。そして「周辺光」が競技コースの場所によりムラ(明暗)があると、「反射光の明度の差」と「周辺光の明度の差」がミックスしてしまい、ライントレースロボットがコースラインを見失ってコースアウトする原因になっていました。
ハイスピードカメラ撮影
ハイスピードカメラ(Casio EXILIM EX-F1)で、カラーセンサーのLED(Flood Light)を撮影してみます。モードは反射モードです。毎秒1200コマで撮影した動画をスロー再生させています。
カラーセンサーの赤色LEDが明滅していることがわかります。しかしながら、1秒間に1200コマの高速で撮影してもエリアシング(Aliasing)を起こしているようで、明滅の瞬間がハッキリとは撮影できていません。
光測定 ブレッドボード回路
動画撮影ではカラーセンサーのLEDの明滅をハッキリと捉えることができなかったため、照度センサー(phototransistor)を使って、以下の写真のような簡単な電子回路を組み、オシロスコープで電圧の時間変化を測定しました。
光測定 回路図
フォトトランジスターは明るさ(光の強さ)に比例して電流が流れるため、直列に接続した抵抗のドロップ電圧をオシロスコープで測定します。
反射モード測定結果
約1000マイクロ秒(=1ミリ秒)の周期でLEDが明滅していることがわかります。
LEDが点灯している期間は意外に短く約150マイクロ秒でした。
RGBモード測定結果
明滅の周期は反射モードと同じ約1000マイクロ秒でした。
LEDの点灯のピークが3段階になっていますが、これは赤、青、緑の3色のLEDが交互に点灯している結果だと思われます。
まとめ
EV3カラーセンサーは標準動作で「まいまい式」をつかい周辺光をキャンセルしています。まいまい式は死んでいなかった… 😀
今回の動作解析には「反射(reflection)モード」と「RGBモード」で測定方法の違いはあるか?という裏テーマがあったのですが、この結果だけをみると、いずれの方法でも周辺光のキャンセル処理が働いているし、測定周期も同じということで、大きな違いはないと思われます。