2015年12月7日月曜日

ロボット用ラインセンサーについての知見

はじめに

諸々思うところありまして、ライントレースをするロボットを作る上で必須となる、 「ラインセンサー」について、適当に書き散らすことにしました。

多くの人は漠然と「フォトリフレクタか何かを並べて使えばラインセンサーとして良い」と考えるでしょうが、 そのフォトリフレクタの使い方一つとっても大量の方式があります。 以下には1ヶ月ほどライントレースの製作だけを意識して行えば行き着く結論が書かれていますが、 何かと時間との戦いになるロボコン屋にはそんな無駄な作業を余裕はないでしょう。 思考を整理し加速させる材料となれば幸いです。

なお、ライントレースの入門自体は下に示す綺麗にまとめてくださった方の一連の記事を参照すると良いでしょう。

それと本記事は上記の一連の記事を一通り呼んだことを前提に書きたいと思います。 めんどくさいから。w

アナログ値をつかうか、二値化するか

ライントレースするロボットを用いる競技には、ランサー、マイコンカーラリーを始め、多種多様なものがありますが、 やはりその究極とはロボトレース競技に違いないでしょう。 あの上位陣のロボットが見せるなめらかな動きというのは、フォトトランジスタをAD変換した8bitから12bit程度のAD変換によって得られた値を うまいことゴニョっとして比例制御なりPID制御なりの操作量としてモニョっと入れてできているのですから、 究極の速さを求めるためのライントレースならアナログ変換値をつかうことは必須でしょう。

しかしながら、この手法はある程度以上競技台の質が確保されていないと調整しきれない場合が多いです。 例えばロボトレーサやランサーなどはかなりの質が確保されていますが、 大学ロボコンや適当な私設ロボコンなどでは競技台ごとや同じ競技台の中でも場所によって塗りが微妙に違ったり、 紙の上に印刷したりビニールテープを張ったりするだけだったりします。 この場合はアナログ値を使ったものではうまくいかないことが多いので二値化する方が良いでしょう。 また、そういう競技ではそこまで速度を追い求めるわけでもないはずですのでこれで十分なはずです、

基礎中の基礎

大抵のラインセンサというのはLEDで対象面を照らし、その反射光をフォトトランジスタやフォトダイオードで拾うという、 フォトリフレクタをいくつか並べた方式を用います。この方式は例えば白と黒で光の反射率が違うのを利用しています。

LED側の回路について

基本的なこと

基本的には、というか大抵の場合は以下の様になるでしょう。

とても単純です。抵抗値ですが、おそらくLEDの許容電流ギリギリになるように設定する場合が多いです。 これはLEDから発せられる光が十分に強くないと外乱光によるノイズの影響を受けやすくなるためです。

LEDをON/OFFできるようにする

このように回路を組むことでLEDをON/OFFできるようにする方法もあるでしょう。

ON/OFFできるようにするといくつかいいことがあります。例えばご利益が得やすい状況順に

  • 一瞬だけ光らせるのであれば定常的に光らせるより大きい電流を流すことができる(=明るく光らせることができる)
  • ON時とOFF時の差を取ることである程度外部の定常的な外乱光の影響を減らすことができる(特性が線形であればあるほど)
  • 節電できる
  • センサー同士が干渉している時、一つづつ動かすことで干渉しないようにできる

などがあります。ちなみに図ではFETでON/OFFしていますが、特に複数個数がある場合は、 シンクドライバIC とかを使うと回路がすっきりできます。

何色のLEDをつかうべきか?

何色の(どのくらいの波長の)LEDをつかうべきかということに関して、 まず考慮されるべきは、相方のフォトトランジスタ感度特性にあった波長であるかどうかです。 感度特性のピークに近くないと、どんなにLEDを光らせても反応しないなんてことがあるかもしれません。 また、予想される外乱光の波長とは別の波長であるかどうかが重要となってきます。 これは考えればせやなってなると思いますので特には書きません。

以上を鑑みると可視光でない波長が最適なように思えます。 現在、可視光でない波長を扱えるフォトトランジスタやLEDは赤外線のものが安価であるので、 特に赤外線が用いられるようです。

余談ですが、赤外線に近い赤色も動作や照射範囲を確認しやすいなどの理由で採用されることもあります。 照射範囲を調整しなければいけない場合は候補に入れても良いかもしれません。

余談:凝ってみた

LEDを品質よく光らせたいのであれば以下の様な回路を組んでも良いでしょう。

この回路はオペアンプで基本的な定電流回路を組み、その上で大電流がドライブ可能な様に FETでバッファを組んでいます。詳しくは解説しませんが、 LEDに流れる電流は

I = R1 × Vref

になります。([定電流回路 オペアンプ]とでもググればよろし)

多分こういうのが一番凝っている回路になるでしょうが、こんなに凝らずとも、 よほどのことがない限りソフト側で負担すべき程度の誤差になるでしょう。

フォトトランジスタ側の回路について

基本的にはこんな感じになるでしょう。

これで明るければ電圧がVcc寄りに、暗ければGND寄りに触れます。 出力電圧については、ほぼ

 =  × R

になります。抵抗値の選定などはこれを目安にやると良いでしょう。 しかしながら抵抗値を大きくし過ぎると反応速度が悪くなったり、 AD変換に必要なインピーダンスより大きくなったりするので 次の図のようにオペアンプを適切に挟んでやるといいでしょう。

非反転増幅回路による倍率は、

R1/R2

で定められます。

よく使われる抵抗値は、オペアンプを挟まない場合は1~10kΩ、 オペアンプを挟む場合は100~470Ωくらいになる場合が多いようです。 オペアンプの増幅は1(ボルテージフォロワ)~5倍程度が多い気がします。

ちなみにもっと反応速度が必要な場合、フォトダイオードを使う必要が出てきますが、 そんなもの使う人はこんな解説ページは必要ないので割愛します。

2値化前提の回路

上記のLED回路とフォトトランジスタ回路にコンパレータをつけるだけでもいいかもしれません。

しかし、そんなめんどくさいことをするよりも専用ICを使い (例えばこういうの)、 もっと簡単に回路を組み、ノイズ耐性も良好にする方法があります。

以下に光変調型フォトIC、S4282-51を使った回路を例示します。

この半固定抵抗は感度調整用です。 お前マジかみたいな気分になるけどこれ以外にやり方が思いつかない・・・。 半固定抵抗以外にも固定抵抗がついていますが、半固定抵抗が0Ωになってしまった場合の 最低限の保険のためについています。

そういえば現地での感度調整は回路屋の仕事です(半固定抵抗回すだけだけど)。 ソフト屋の仕事でゎなぃ。

その他の方式

画像処理

あらゆる意味で速度との勝負です。できるもんならやってみやがれ。

???「それも経験、さ。」

ラインイメージセンサ

要するにバーコードのあれですかね。面白そうではある。

カラーセンサ

床がカラフルであるときにそこまで速度が必要でないのであれば、 そこまで応答速度が早くないカラーセンサが候補に上がります。 ただ、照明の色相や競技台による微妙な差異をどうやって取り除くかは十分考える必要があります。

センサーの配置や距離について

使用するフォトリフレクタやLEDとフォトトランジスタの組み合わせによって、 ラインが書かれている面とセンサー間の距離には適正値が違います。 フォトリフレクタを使用する場合は、適正距離が書かれていますので、よく呼んで「わかり」を得ましょう。 LEDとフォトトランジスタの組み合わせをするのであればLEDの指向性(何度広がるか)を見て、 よく考え、実験して決めましょう。

また、距離によって床に当たる光量、床から帰ってくる光量が大幅に変わってくるのは周知の事実ですから、 これを一定にする努力も周知の事実であります(でも行われない)。 例えば、坂道のあるフィールド(ロボカップジュニアのレスキュー・ラインや大学ロボコンの特定のルール)や、 紙の上のフィールド(ロボットが走るとどんな工夫をしてあってもめっちゃたわむ)では対策が必須となります。 対策例としてはロボットにただネジ止めするのでなく、蝶番や、ちょっと凝って平行リンクを使って、 ロボットからの距離を変えられるようにすることで床からの距離を一定にするという方法があります。

戦うべき外乱光

我々が主に戦う外乱光は以下の通りとなっています。

室内灯

我々が室内にいる時は大抵50Hzとか60Hzの電源で動いている照明の恩恵を受けますが、 ロボットに恩恵をもたらすかというと殆どの場合NOです。 ラインセンサーから発せられる光に比べると光源との距離も鑑みて、十分弱いと思っていると、 大会会場の水銀灯はそれでもとても明るかったりします。 覆いをつけるなりなんなり対策しましょう。

ちなみに室内灯から受ける外乱光は50Hzや60Hzをではなく100Hzや120Hzです。

太陽光など

最悪です。電灯線由来の照明に比べ、すごく強い上に赤外線成分マシマシです。 まあ直射日光の元でロボコンをやったりしないでしょうが、 うっかりうっかりカーテンがあいてたりするとギャーってなります。

フラッシュ

・・・はい。つらい。

時間的にピンポイントすぎるので異常値を取り除くとかの処理が逆にし易いですが、 大抵影響を受けやすいロボコンはフラッシュ禁止になってます。

覆い

外乱光からラインセンサーをお守りするダサいけど効果的な手法です。 つけるに越したことはないです。変なこだわりを持たずに、ダメだと思ったら付けましょう。

余談:そのライントレースはそんなに品質が必要ですか?

どのような種類のロボットでも、綺麗に、速く、ライントレースすればするほど動作は美しく感じられます。 でも、特にライントレース以外の機能を持つロボットは、ある程度以上のライントレース速度や品質を求めるよりも、 他の機能の開発に限られている時間を回したほうがいい場合がかなーりあります。 車のシートにマイクロメートル単位の精度は要りませんね?陸上国家では帆走技術ツリーは要りませんね? 目的的な品質管理を心がけましょう。

とは言え、確実な競技には正確な足回りは必須です。 1000回競技を完遂して1000回とも1回も線を外れないのが最低合格ラインです。 がんばりましょう。

おわりに

Q.君最近よく更新するね。

A.書き溜めてたのを放出してるだけなんやなって

0 件のコメント:

コメントを投稿