受光回路の解析


本稿では,LEDとフォトトランジスタを使った,壁とロボット間の距離を計測するセンサーを考える.
発光回路の解説は,森永式発光回路の解析で述べた.
本稿では,受光回路はどうあるべきかについて考察する.

なお,森永式受光回路の解説はこじまうすブログの記事が詳しいので,そちらを参考にするのも良いだろう.

反射のダイナミクス

LEDとフォトトランジスタを使ったセンサーのダイナミクスを考えよう.

光は,LED~フォトトラまでどのような経路で届くのか

LEDから発光された光は,迷路内で複雑に反射し,センサー届く.
理想は発光された光がすべて壁に当たり,乱反射なしに反射して,センサーに戻ることである.

  • LED -> 前壁 -> フォトトラ

しかし,マイクロマウス競技の壁は鏡のようになめらかではない
そのため,入射角と反射角は等しいとは限らず,乱反射をおこす.どのような法則で乱反射をおこすかは不明である.
(近似モデルのひとつとして,反射率なるものはあるらしい.)

また,実際の迷路には,距離を測りたい壁だけでなく,ほかの壁も配置されている.
例えば,前壁とロボットの距離を計測したい場合,
前壁にセンサーを向け,

  • LED -> 前壁 -> フォトトラ

の経路で光が反射してくることを期待する.
しかし,実際には乱反射があるため,

  • LED -> 前壁 -> 横壁 -> フォトトラ
  • LED -> 横壁 -> 前壁 -> フォトトラ

の経路でも光は帰ってくる.
センサーが壁に対して垂直に向けているならこの影響は少ないが,
ななめに向けている場合,無視できないほどの量が反射する.
(これにより,実際にはそれほど近づいていないにも関わらず,ロボットが「壁にぶつかりそう!」と勘違いすることがよくある)

また,

  • LED -> 前壁 -> 地面 ->フォトトラ

の経路で反射することもあるだろう.
地面の色が少しでも変わると,反射量が変わる.
練習場と本番でセンサーに対するパラメータを調整しなおす必要が出てくる.

さらに,

  • LEDの横側 -> フォトトラの横側

の経路でも光は到達する.
LEDとフォトトラを基盤の上下に分けて配置しても,なぜか光は到達する.

このように,LEDとフォトトラの間には,理想とはかけ離れた光の経路がいくつも存在する.
この影響を小さくすることが求められている.

余計な光の経路をカットするには

例えば,センサーホルダーを作ることが有効である.

余分な経路で光が反射する問題は,フォトトラの指向性を上げることで緩和が期待できる(センサーホルダーのピンホール効果を狙う).
また,どの程度他の壁が近づくと影響が無視できなくなるかをあらかじめ調べておき,
無視できない領域に侵入したら,センサーを信用せず(場合によっては)無補正で走るようにすればよい.
これはクランク(1歩前進,90度回転,1歩前進,90度回転を繰り返すような迷路)を走る際に有効である.

地面の反射率が異なる問題は,LEDを十分高い位置に配置する,基盤の内側に配置するなどの工夫で緩和されるだろう.

LED,フォトトラの横側から光が届く問題も,センサーホルダーで回避できる.
センサーホルダーは機械加工で真面目に作ってもよいが,
フォトトランジスタとLEDの側部に黒のビニルテープをまくだけでも効果があることが分かっている.

外光のダイナミクス

受光回路を設計する場合,除去しなければならない外光は何かを考えておくことが重要である.
マイクロマウスにおける外光として以下のものが考えられる.

  • 蛍光灯
  • フラッシュ撮影
  • 太陽光
  • ビデオ撮影の光

競技は主に室内で行われるため,太陽光対策の重要性は低い.また,経験的に,ビデオ撮影の光も影響は少ない.
蛍光灯とフラッシュ撮影について考察しておこう.

蛍光灯について

蛍光灯は入力電圧の2倍の周波数で点滅している.西日本だと120hz,東日本だと100hzの周期で点滅していることになる.
そのため,外光として直流成分と120/100hzの交流成分が外光としてマウスに照らされることになる.
実際,こじまうすブログでは,大会会場の照明は100hzで点滅していることが確認されている.

ここで,本当に120/100hzの光はマウスのセンシングに影響を与えるかどうかを,周波数解析によって検証する.

実験機として,「かむかむhalf」を使う.
かむかむhalfは一般的な板マウスであり,フォトトランジスタとポイントソースLEDの対をセンサーとして持っている.
フォトトランジスタにはプルダウン抵抗がつりさげられており,ADポートに直接フォトトランジスタのエミッタが接続されている.
本記事ではLEDは使わず,フォトトランジスタのみを使う.
実験手順は以下の通りである.

  • 実験は西日本で行う.(120hzで蛍光灯が点滅する環境で実験を行う)
  • かむかむhalfを蛍光灯に向ける.
  • *蛍光灯に向ける角度は20,45度の2通りで実験を行う.
  • この時のセンサーの受光値1msec毎に1sec間記録する.(1000データが得られる)
  • 得られたデータに離散フーリエ変換をかけ,各周波数成分の振幅応答をグラフに出力する
  • 120hzの周波数成分をかむかむhalfは受光しているのかを確認する

以下はセンサーの受光値である.
Gairanmae1
Gairanmae2

光源に向ければ向けるほど,より強い光を受光していることが確認できる.
また,値は一定幅の範囲ぶれており,ぶれの範囲は光源に向ければ向けるほど大きくなることが分かる.
下位数bitの情報を犠牲にすれば,交流成分はないものとみなせることが分かる.

以下は実験データに離散フーリエ変換をかけた結果である.
1000データで解析しているため,500hz以上のデータに意味はないことに注意する.
Gairan1
Gairan2

直流成分(0hz)に強い振幅応答があることが確認できる.
また,120hzとその高調波成分に強い振幅応答があることが確認できる.

実験結果より,以下のことがわかる.

  • 外光が強いほど直流成分,120hzの周波数成分の両方が大きくなる.
  • 120hzだけでなく,高調波成分も外乱としてマウスに照らされている.
  • 東日本と西日本では蛍光灯の周波数成分が異なるため,西日本で調整したマウスは東日本では動かないということがありえる

1番目の結果は,センサーの光/電流特性の非線形性が主な原因と思われる.
この結果より,強いスポット光が当てられるマイクロマウス競技エキスパート決勝の舞台では,
交流成分のノイズが普段より大きいものとなっていることが分かる.
これは,交流成分はないものとみなすために必要な情報量の放棄量が増えることを意味しており,
センサーの分解能低下・制御の不安定化をもたらす可能性がある.
2番目の結果は,電源に乗っている高調波成分がそのまま蛍光灯の発光に影響しているからと思われる.
3番目の結果から,ポイントソースLED+フォトトランジスタを使ったセンサーを採用する場合,

  • まじめにフィルタリングを設計する(120/100hzの両方の周波数成分をカットするフィルタリング回路かデジタルフィルタを設計)
  • 下位数BITを無視して,高周波成分のノイズを無視,無視しても迷路を走れるような制御をつくる

のどちらかを行う必要があることがわかる.
が,どう考えても後者がお手軽で安全.ADコンバータの分解能10~12bitのうち,3bitくらいなら無視しても大きな影響があるとは思えない.
ただ,無視する設計を採用するのであれば少し大目に無視しないと,エキスパート決勝の舞台で事故る可能性がある.

つくばカピオでのスポット光について

全日本大会の舞台であるつくばカピオで,
「調整場では動くが,本番ではうまく動かない」
という経験はないだろうか?
これは,本番と調整場では照明環境が違うことが原因になっている場合が多い.
そこで,調整場と本番舞台における,照明の発光強度を計測した.

実験手順は以下の通りである.

  • 実験はつくばカピオ,調整場と本番舞台で行う.
  • *照明にロボットを向けた場合,ロボットを水平に置いた場合のの2通りで実験を行う.
  • この時のセンサーの受光値1msec毎に1sec間記録する.(1000データが得られる)
  • 得られたデータに離散フーリエ変換をかけ,各周波数成分の振幅応答をグラフに出力する

生データは以下の通りである.

1番目のデータ(練習場,照明にロボットを向けた場合)は強烈な結果を示している.
10計測周期でAD変換結果が800~1200の範囲で揺れている.
何らかの対策が必須であることが分かる.

以下のグラフは実験データに離散フーリエ変換をかけた結果である,各周波数の振幅を示している.
1000データで解析しているため,500hz以上のデータに意味はないことに注意する.
Tukuba1-rensyuu-90
Tukuba2-rensyuu-0

左のグラフは練習場で照明にロボットを向けた場合のデータに対する解析結果,
右のグラフは練習場で水平にロボットを置いた場合のデータに対する解析結果である.
Tukuba3-final-90
Tukuba4-final-0
左のグラフはエキスパート決勝舞台で照明にロボットを向けた場合のデータに対する解析結果,
右のグラフはエキスパート決勝舞台で水平にロボットを置いた場合のデータに対する解析結果である.

グラフの値域に入りきっていない0hzにおける振幅はそれぞれ

  • 1063678(練習場で照明にロボットを向けた場合)
  • 48717(練習場で水平にロボットを置いた場合)
  • 1112930(エキスパート決勝舞台で照明にロボットを向けた場合)
  • 600731(エキスパート決勝舞台で水平にロボットを置いた場合)

である.

すべての計測データにおいて,50hzの整数倍の周波数において,強い振幅が確認できる.
また,高周波になればなるほど振幅は指数関数的に小さくなっていることが確認できる.
このことから,サンプリング間隔を十分高速にすれば,外光は常に一定値であるとみなせることが分かる.
1khz以上の周期でサンプリングできるなら,ローパスフィルタは不要である.
0hzの外乱はエキスパート決勝舞台の方が強いことが確認できる.
このことから,ハイパスフィルタが重要であることが分かる.

今回の計測では,会場全体を通して照明条件が一定でないことが目についた.
複数あるライトの光の強さには明らかにムラがあり,強く光があたる部分とそうでない部分がある.
今回は練習場の中でもたまたま照明光が強い部分で計測したため,このような結果になったと考えられる.
一方,スポット光の影響はさほど感じられなかった.
スポット光は技術課題というよりかは,むしろ,観客・報道陣への配慮という意味のようだ.

外光の除去

多くのフォトトランジスタは,光-電流特性は非線形である.
egg-torteのような,フォトトラに抵抗を吊り下げただけのシンプルな受光回路を考えた場合,以下のようなダイナミクスとなる.

  • センサーに入る光+外光→フォトトラ(非線形!)→電流出力→抵抗(線形)→電圧出力→マイコンのADコンバータへ

これでは,ダイナミクス全体が非線形になってしまい,外光の除去は難しい.

しかし,線形性に優れた素子(TPS601など)をフォトトラとして採用し,ダイナミクス全体を線形にすれば,定常外乱は簡単に除去できる.
外光は50hz程度の低周波数ばかりであるため,
ある程度高い周波数(500hzなど)でLEDをパルス駆動し,変調を行えばよいのである.

具体的には,高速で,LEDを点灯・消灯し,点灯時と消灯時の光量を測定する.
そうすれば,

  • 発光時のAD変換値-消灯時のAD変換値

が,フォトトラに届いたLED発光量としてみなせるようになる.

これにより,スポット光や,蛍光灯の影響をほぼ除去できる.

変調の周波数を上げれば上げるほど,除去できる外乱の幅は広がる.(サンプリング定理より)
実際のフォトトランジスタは光を受けてから信号が立ち上がるまで10usec程度の遅れが発生するため,いかに応答速度を上げるかが重要である.
応答速度を速めるには,フォトトラの感度を下げることなどが有効だが,感度を下げれば得られるAD変換の値は小さくなり,壁検知が難しくなる.
Phototr

(各グラフの位相関係はあっていない.100msecごとに飛び出しているノイズはAD変換器のサンプルホールド回路の影響)

よって,線形性・応答速度に優れた素子を探すことが,外乱に強いマウスを作るコツのひとつといえるだろう.
変調の周波数が上がることは,制御周期が上がることも意味しており,高速なマウス作りにもつながる一石二鳥の効果もある.
(制御周期が高速=反射速度が速い=安定して走行可能な最高速が向上)

距離計測

光と距離の関係

  • 光の強さは光源からの距離の二乗に反比例する

ことが知られている.
すなわち,フォトトラに届いた光量-壁までの距離の間には,線形の関係は成り立っていない.
そのまま制御に使ってしまうと,望ましくない挙動をおこすことがある.

おおざっぱな線形化

前述した性質を鵜呑みで解釈するなら,センサーに入る光量の二乗根をとれば,壁までの距離(の定数倍)が得られる.
この方式では,おおざっぱな値しか得られないが,この値を連続的に使って制御することになるため,問題ない.
(2010年のクラシックマウス優勝者はこの方式を採用している)

二乗根の計算は,標準ライブラリを使うことが考えられる.
浮動小数点演算になるため,マイコンによっては,計算量がかなりかかる.
その場合は,近似的に二乗根を求める関数を自作すればよい.(例えば,二分探索を使った平方根のページにある関数など)
どうせモデル自体がおおざっぱなので,高精度な演算にこだわる意味はないのだ.(計算誤差の分散は大きくても良い,平均値のずれが大きいと問題かも?)

テーブルフィッティングによる線形化

理想であれば,前項の仮定が成立するが,実際はそうではない.
そのため,おおざっぱにしか計測できないことに気持ち悪さを感じる人もいるだろう.

これに対しては,あらかじめ壁とロボット間距離に対する変換テーブルを用意することが考えられる.
フォトトラに届いた光と壁までの距離間の数理モデルが不明でも,力で用意してやれば,この気持ち悪さは一応は解決できる.
欠点は,テーブルの用意が大変煩雑な作業になること,環境が変わるたびにテーブルを用意しなおす必要があることである.

対数グラフへのフィッティングによる線形化

変換テーブルは対数グラフに近い形を示すことが知られている.
これを利用して,簡単に変換テーブルを作る方法がある.

以下のような関係が壁までの距離x\in\mathbb{R}\displaystyleとフォトトランジスタの計測値y\in\mathbb{R}\displaystyleの間に成立していると仮定する.

(1)    \begin{align*} x = b-\frac{a}{\log y} \end{align*}

ただし,a,b\in \mathbb{R}\displaystyleはセンサーと壁がなす角度・センサーの特性・壁の反射率・外光の強さによって決まる定数である.
このa,b\displaystyleの値を求めれば,変換テーブルが定まる.

未知数は2つなので,2つの計測結果(x_1,y_1),(x_2,y_2)\in\mathbb{R}^2があれば,
方程式を解くことでa,b\displaystyleを求めることができる.
実際,

(2)    \begin{align*} a&=-\frac{x_1-x_2}{\frac{1}{\log y_2}-\frac{1}{\log y_1}}\\ b&=x_1+\frac{a}{\log y} \end{align*}

である.
ただし,多くの場合,計測結果には外乱が乗っており,この式では正確な値を求めることができない.
そこで,複数の計測結果(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\in\mathbb{R}^2\displaystyleから近似値を求めることを考える.
本稿では最も基本的な導出法である,最小二乗法を紹介する.

最小二乗法では,計測値と近似式の二乗誤差を最小化するパラメータa,b\displaystyleを求めることを考える.
すなわち,以下の評価関数S:\mathbb{R}^2\to \mathbb{R}\displaystyleを最小化するa,b\displaystyleを求める.

(3)    \begin{align*} S(a,b):=\sum^{N}_{i=1}(x_i+\frac{a}{\log y_i}-b)^2\displaystyle \\ \end{align*}

この関数はC^1\displaystyle級なので,偏微分によって停留点(極小値・極大値・鞍点)を求めることができる.

(4)    \begin{align*} \frac{\partial S}{\partial a}&=aB+C-bE\\ \frac{\partial S}{\partial b}&=NB-D-aE\\ A&:=\sum^{N}_{i=1}x_i^2\\ B&:=\sum^{N}_{i=1}(\frac{1}{\log y_i})^2\\ C&:=\sum^{N}_{i=1}(\frac{x_i}{\log y_i})^2\\ D&:=\sum^{N}_{i=1}x_i\\ E&:=\sum^{N}_{i=1}\frac{1}{\log y_i} \end{align*}

ただし,記号の置き換えとして,定数A,B,C,D,E \displaystyleを置いた.

(5)    \begin{align*} \frac{\partial S}{\partial a}&=0\\ \frac{\partial S}{\partial b}&=0\displaystyle \end{align*}

を満たす点が停留点であるので,これを解いて,

(6)    \begin{align*} a&=\frac{DE-nC}{nB-E^2}\\ b&=\frac{BD-CE}{nB-E^2}\displaystyle \end{align*}

ここで,関数の形状から明らかにこの点は最小点である.
このようにして二乗誤差を最小化するパラメータa,b\displaystyleを求めることができる.

もちろん,これらの数学的議論をすっ飛ばして,excel先生のマクロを活用しても良い.
(むしろ,excel先生を使うほうがおすすめである)

参考文献