以下、本発明の実施の形態について図面を用いて詳細に説明する。
まず、本発明の光学式の座標入力装置の概略構成について、図1を用いて説明する。
図1において、2001L、2001Rは投光部(発光部)及び受光部(検出部)を有するセンサユニットである。本実施形態の場合、水平線はX軸を、垂直線はY軸を、OはX軸とY軸との交点座標(0,0)を、それぞれ示す。そして、センサユニット2001L及び2001Rは、図示の如く座標入力面であるところの座標入力有効領域300のX軸に平行に、かつY軸に対称な位置に、所定距離離れて配置されている。換言すれば、センサユニット2001L及び2001Rは、座標入力有効領域300の一辺の両端近傍(角部)に設けられている。
また、センサユニット2001L及び2001Rは、制御・演算ユニット20に接続され、制御信号を制御・演算ユニット20から受信すると共に、検出した信号を制御・演算ユニット20に送信する。制御・演算ユニット20、座標入力装置における各種処理を制御する。座標入力有効領域300は、この種の光学式座標入力装置が指示具(指や入力ペン等)により入力指示した位置の検出を行える領域である。
400は入射光を到来方向に再帰的に反射する再帰反射面を有する再帰反射部である。再帰反射部400は、座標入力有効領域300の外側3辺(周辺部)に配置され、左右それぞれのセンサユニット2001L及び2001Rから略90°範囲に投光された光を、センサユニット2001L及び2001Rに向けて再帰反射する。
再帰反射部400により再帰反射された光は、センサユニット2001L及び2001Rによって1次元的に検出され、その光量分布を示す信号が制御・演算ユニット20に送信される。
このように構成することで、座標入力有効領域300に指示具による入力指示がなされると、センサユニット2001L及び2001Rの投光部から投光された光が指示具によって遮られる(遮光部分)。この場合、センサユニット2001L及び2001Rの受光部では、指示具によって遮られた部位(遮光部分)のみの光(再帰反射による反射光)を検出することができなくなり、その結果、どの方向からの光が検出できなかったかを識別することが可能となる。
そこで、制御・演算ユニット20は、センサユニット2001L及び2001Rが検出する光量変化から、指示具により入力指示された部分の遮光部分を検出する。その遮光部分の情報から遮光位置(指示位置)の方向(角度)をそれぞれ計算する。この遮光部分の検出・計算方法に関しては後に詳述する。更に、計算された方向(角度)及びセンサユニット2001L及び2001R相互間の距離情報等から遮光位置(座標)を幾何学的に計算する。それと共に、表示部(不図示)に接続されているPC(パーソナルコンピュータ)等の情報処理装置に、USB等の通信インタフェースを経由して座標値を出力する。
尚、再帰反射部400を構成する再帰反射部材としては、球体のビーズを反射面上に並べて配置することで再帰反射特性を有するビーズタイプの再帰反射シートが用いられる。もしくは光学反射面であるコーナキューブを機械加工等により規則正しく配列することで再帰反射現象を起こす再帰反射シート等が用いられる。
また、図1の座標入力有効領域300を構成する座標入力面の材質は、座標入力装置と組み合わされる表示装置の表示面、或いは、更に、その前面板である、透明のガラス板、或いは、透明樹脂板で構成される。例えば、表示装置としては、液晶、あるいは、プラズマ、あるいは、リアプロジェクション等の表示装置、あるいは、座標入力面がプロジェクターのスクリーン構成とした構成としてもよい。この表示装置との一体的な構成によりインタラクティブな入力装置として利用可能となる。
<センサユニット2001L及び2001Rの詳細説明>
図2は、センサユニット2001L及び2001Rの分解斜視図であり、センサユニット2001L及び2001R中の投光部及び受光部の構成例を示している。
図2において、30は投光部であり、投光部30は、赤外光を発光する赤外LED(発光ダイオード)31及び投光レンズ32より構成される。赤外LED31で発光した光は、投光レンズ32によって、座標入力有効領域300の面に略平行に投光される。同時に、座標入力有効領域300の面内方向に扇状に光を投光される。
図3(a)は、センサユニット2001L及び2001Rの組み立て状態における正面図で、同図における矢印は、投光部30による光が座標入力有効領域300の面内方向に扇状に分布している様子を示している。また、図3(b)は、図3(a)を側面から見た図であり、同様に座標入力有効領域300の面に略平行に、上下方向に制限された光束として投光され、主に再帰反射部400に対して光が投光されている様子を示している。
再び図2に戻って説明すると、40は受光部であり、受光部40は、一次元のラインCCD41、集光光学系としての集光レンズ42、入射光の入射方向を概略制限する絞り43、可視光等の余分な光の入射を防止する赤外フィルタ44から構成される。そして、投光部30で投光された光は、再帰反射部400によって再帰反射され、赤外フィルタ44、絞り43を抜けて集光レンズ42によって、ラインCCD41内の検出素子群の面上に集光される。
また、図2において、51は下筐体、52は上筐体である。絞り43、上筐体52及び下筐体51は、再帰反射部400の再帰反射光のみを通過させるように、主に高さ方向(座標入力有効領域300の面よりの高さ方向)の視野を制限している。そして、座標入力有効領域300の面内方向の視野は、大まかに制限する構成となっている。
尚、本実施形態においては、下筐体51と絞り43とは、互いに一体に成型されているが、これらを別部材で構成しても良いことは言うまでもない。
図4は、センサユニット2001L及び2001Rの投光部30による光が再帰反射部400により再帰反射して、受光部であるラインCCD41で検出されるまでの光路を説明するための図である。同図において、図2及び図3と同一部分には、同一符号が付してある。
図4(a)は座標入力有効領域300の面に対して垂直方向から見た正面図、図4(b)はその側面図である。
図4(a)において、前述した略90°方向に投光された投光部30の光は、光透過部材(集光レンズ42、絞り43、及び赤外フィルタ44)を介して再帰反射部400によって再帰反射される。そして、赤外フィルタ44、絞り43を抜けて集光レンズ42に入射することになるが、その光は、集光レンズ42に対する入射角に応じてラインCCD41の画素45上に結像する(図4(b)参照)。従って、ラインCCD41の出力信号は、再帰反射光の入射角に応じた光量分布を出力することになるので、ラインCCD41の画素番号が角度情報を示すことになる。
また、本実施形態の場合、投光部30と検出部である受光部40は、互いに重ねて配置されている。従って、その距離L(図3(b)参照)は、投光部30から再帰反射部400までの距離に比べて十分に小さな値であり、距離Lを有していても十分な再帰反射光を検出部である受光部40で検知することが可能な構成となっている。
図5は本実施形態に係る座標入力装置における受光光学系(受光部40)で観測されるラインCCD41の画素番号Nと導出すべき角度θとの関係を示す図である。同図において、縦軸は導出すべき角度θを、横軸はラインCCD41の画素番号をそれぞれ示している。
ここでは、ラインCCD41の法線方向と受光光学系の対称軸βL,βRとを互いに一致させ、その方向を角度0°と定義する。この時、測定角度範囲が小さければ、ラインCCD41の画素番号Nと測定角度θとの関係が、例えば、良好な線形性を有する集光レンズ42を設計、製造することは容易である。しかし、測定角度範囲が大きくなると、集光レンズ42の端部で発生する光学的歪を除去することが困難となり、測定角度に大きな誤差が発生するようになる。
一方、本実施形態に係る座標入力装置は、表示ディスプレイ(表示装置)、あるいはフロントプロジェクタ用スクリーンと重ねて配置することによって、指示具による筆跡を表示ディスプレイに表示させる。これにより、恰も紙と鉛筆の様な使い勝手を実現できるものである。
表示ディスプレイの動向について述べれば、表示領域の縦横比(アスペクト比)は4:3のものが主流であったが、フルHD画像等に見られるように16:9のものが普及しつつある。つまり、座標入力装置の座標入力有効領域300もそれに対応すべく横長の仕様となる。
<制御・演算ユニット20の説明>
制御・演算ユニット20とセンサユニット2001L及び2001Rの間では、ラインCCD41用のCCD制御信号、CCD用クロック信号、ラインCCD41の出力信号及び赤外LED31の駆動信号がやり取りされている。
図6は、制御・演算ユニット20の詳細構成を示すブロック図である。
同図において、2001L及び2001Rはセンサユニット、81L及び81RはA/Dコンバータ、82はメモリ、83はワンチップマイコン等で構成されるCPU(中央演算処理装置)である。更に、84L及び84RはLED駆動回路、85はCPU制御用の動作クロック発生回路、86はCCD制御用動作クロック発生回路(CLK)、87はシリアルインタフェースである。
図6において、CCD制御信号は、CPU83から出力され、ラインCCD41のシャッタタイミングやデータの出力制御等を行っている。ラインCCD41用のクロックは、CLK86からセンサユニット2001L及び2001Rに送信されると共に、ラインCCD41との同期をとって各種制御を行うために、CPU83にも入力されている。
LED駆動信号は、CPU83からLED駆動回路84L及び84Rを経て、センサユニット2001L及び2001R中の赤外LED31に供給されている。
センサユニット2001L及び2001R中の検出部であるラインCCD41からの検出信号は、制御・演算ユニット20中のA/Dコンバータ81L及び81Rに入力され、CPU83からの制御によってデジタル値に変換される。この変換されたデジタル値は、必要に応じてメモリ82に記憶され、後述する方法で角度計算、さらには座標値が計算され、その結果を、外部端末(パーソナルコンピュータ)等にシリアルインタフェース87等を介して出力される。
<光量分布検出の説明>
図7は本実施形態に係る制御信号のタイミングチャートである。同図において、91、92、93がラインCCD41制御用の制御信号であり、Sh信号91の間隔でラインCCD41のシャッタ解放時間が決定される。ICGL信号92及びICGR信号93はそれぞれ左右のセンサユニット2001L及び2001Rへのゲート信号であり、ラインCCD41内部の光電変換部の電荷を読出部へ転送する信号である。
LEDL信号94及びLEDR信号95はそれぞれ左右のセンサユニット2001L及び2001Rの赤外LED31の駆動信号である。そして、Sh信号91の最初の周期で一方の赤外LED31(この場合は、センサユニット2001L中の赤外LED31)を点灯するために、LEDL信号94がLED駆動回路(この場合は、LED駆動回路84L)を経て赤外LED31に供給される。
次の周期で、他方の赤外LED31(この場合は、センサユニット2001R中の赤外LED31)を点灯するために、LEDR信号95が他方のLED駆動回路(この場合は、LED駆動回路84R)を経て赤外LED31に供給される。
双方の赤外LED31の駆動が終了した後に、ラインCCD41の信号が左右のセンサユニット2001L及び2001Rから読み出される。
読み出される信号は、例えば、指示具による入力がない場合、つまり、遮光部分がない場合には、それぞれのセンサユニット2001L及び2001Rからの出力として、図8(a)のような光量分布が得られる。
図8は、ラインCCD41の出力レベル(V)とCCD画素番号[N]との関係を示す図である。同図において、縦軸はラインCCD41の出力レベル(V)を、横軸はCCD画素番号[N]を、それぞれ示す。
もちろん、このような光量分布がどのシステムでも必ず得られるわけではない。つまり、再帰反射部400の特性(再帰反射部400の入射角による再帰反射特性)やLED31を含む投光部30の特性、また、経時変化(再帰反射部400の反射面の汚れ等)によって、この光量分布は変化する。更に、この光量分布と再帰反射部の構成との関係に関しては、前述の通りである。
図8(a)において、レベルAが最大光量を検出した時のレベルであり、レベルBが最低光量を検出した時のレベルであるとする。従って、反射光のない状態では、得られる光量レベルはレベルB付近になり、反射光量が増えるほどレベルAに近づくことになる。この様に、ラインCCD41から出力される検出信号は、逐次、対応するA/Dコンバータ81L及び81RによりA/D変換された後、CPU83にデジタルデータとして取り込まれる。実際の光量分布は、投光部30の投光分布、受光部40の受光分布、再帰反射部400の反射特性、センサユニット2001L(2001R)から再帰反射部400までの距離等の各要因を総合したレベルの光量分布となる。しかし、ここでは、模式的に均一のレベル状態で示している。
図8(b)は、指示具で入力を行った場合、つまり、再帰反射部400の反射光を遮った場合の出力の例を示す図であり、同図のCの部分が指示具で再帰反射部400の反射光が遮られたため、その部分のみの光量が低下している。
光量分布の検出は、この光量分布の変化を検知して行うものである。具体的には、まず、図8(a)のような入力のない初期状態(以後、初期状態で得られたデータを初期データと)を予めメモリ82に記憶しておき、それぞれのサンプル期間で得られるデータとメモリ82に記憶しておいた初期データとの差分を計算する。そして、その計算結果に基づいて、図8(b)のような変化があるか否かを判別する。
<角度計算の説明>
角度計算にあたっては、まず、遮光部分を検出する必要がある。
先にも述べたように、光量分布は経時変化等で一定ではないため、システムの起動時等に前述した初期データをメモリ82に記憶することが望ましい。つまり、工場等の出荷時に初期データを設定し、そのデータの更新が逐次行われなければ、例えば、所定の位置の再帰反射部400の反射面にゴミが付着した場合、その部分での再帰反射効率が低下する。
従って、恰もその位置(センサユニット2001L及び2001Rから見た方向)で座標入力動作が行われた、即ち、誤検出してしまうという重大な結果を引き起こす。そのため、システムの起動時等に初期データをメモリ82に記憶することで、再帰反射部400の反射面が経時的にゴミ等で汚れて再帰反射効率が落ちていても、その状態を初期状態として設定し直すことができるので、誤動作を無くすことができる。
無論、再帰反射部400からの信号がゴミの付着した部分で全く受け取ることができなくなれば、座標検出不能の事態となり、何らかの方法で、そのゴミ等を除去しなければならない。しかし、仮に、再帰反射部400からの光信号が大幅に減っている状態にあっては、S/N比の関係で信号の信頼性が低下(例えば、同一地点を指示しているにも拘らず座標が揺らぐ現象が発生し、座標計算分解能を低下させてしまう)する。
さて、電源投入時、入力の無い(遮光部分が無い)状態で、かつ投光部30からの投光を停止している状態で、ラインCCD41の出力をA/Dコンバータ81L及び81RによりA/D変換して、この値をBas_data[N]としてメモリ82に記憶する。この値は、ラインCCD41のバイアスのばらつき等を含んだデータとなり、図8(a)のBのレベル付近のデータとなる。ここで、[N]はラインCCD41のCCD画素番号であり、有効な入力範囲に対応する画素番号が用いられる。
次に、投光部30から投光を行っている状態での光量分布を記憶する。これは、図8(a)の実線で表されたデータであり、Ref_data[N]としてメモリ82に記憶する。これにより、初期データとして2種類のデータの記憶を完了する。
そして、このメモリ82に記憶されたBas_data[N]とRef_data[N]とを用いて、まずは、指示具による入力の有無、かつ遮光部分の有無の判定を行う。
ここで、ラインCCD41の出力のサンプル期間内のN番目の画素の画素データをNorm_data[N]とする。
まず、遮光部分を特定するために、画素データの変化の絶対量によって、入力の有無を判定する。これは、ノイズ等による誤判定を防止し、所定量の確実な変化を検出するためである。
具体的には、画素データの変化の絶対量を、ラインCCD41の各々の画素において以下の式(1)の計算を行い、予め決定してある閾値Vthaと比較する。
Norm_data_a[N] = Norm_data[N] - Ref_data[N] (1)
ここで、Norm_data_a[N]は、ラインCCD41の各画素における絶対変化量に相当することになる。
この処理は、ラインCCD41の各画素の絶対変化量Norm_data_a[N]を計算し、それを閾値Vthaと比較するだけなので、処理時間が短くて済み、入力の有無の判定を高速に行うことが可能である。そして、閾値Vthaを初めて超えた画素が所定数を超えて検出された場合に、指示具の入力があると判定する。
次に、より高精度に検出するために、画素データの変化の比を計算して入力点の決定を行う方法について説明する。
図9は、再帰反射部400の再帰反射面を示す図である。同図において、910は再帰反射部400の反射面、911は指示具である。ここで、反射面910の領域10の反射率が汚れ等により低下していたとすると、このときのRef_data[N]の画素データ分布(光量分布)は、図10(a)のように、領域10に対応する部分の反射光量が少なくなる。
図10は、ラインCCD41の出力レベル(V)とCCD画素番号[N]との関係を示す図である。同図において、縦軸はラインCCD41の出力レベル(V)を、横軸はCCD画素番号[N]を、それぞれ示している。
図10(a)の状態で、図9のように、指示具911により再帰反射部400の略半分を覆ったとすると、反射光量は略半分となるため、図10(b)の太線で示した分布Norm_data[N]が観測されることになる。この状態に対して、上記式(1)を適用すると、その画素データ分布は、図11(a)のようになる。
図11(a)は、Norm_data_a[N]とCCD画素番号[N]との関係を示す図である。同図において、縦軸はNorm_data_a[N]を、横軸はCCD画素番号[N]を、それぞれ示している。
また、図11(b)は、Norm_data_r[N]とCCD画素番号[N]との関係を示す図である。同図において、縦軸はNorm_data_r[N]を、横軸はCCD画素番号[N]を、それぞれ示している。
ここで、図11において、縦軸は初期状態との差分電圧になっている。
この画素データに対して、閾値Vthaと比較すると、本来の入力範囲を外れてしまうような場合(図11(a)の破線領域)がある。もちろん、閾値Vthaをより小さな値に設定することで、ある程度の検出は可能となるが、ノイズ等の影響を受ける可能性が高くなり、座標計算性能を劣化させるという弊害が発生する。
そこで、指示具911によって遮られる遮光部分の光量は、反射面910の領域10、領域11ともに最初の半分(領域10ではV1レベル相当、領域11ではレベルV2相当)であるので、次の式(2)で変化の比を計算することができる。
Norm_data_r[N] = Norm_data_a[N]/(Bas_data[N]-Ref_data[N]) (2)
この式(2)の計算結果を示すと、図11(b)のようになり、光量分布が変化の比で表されることになる。そのため、再帰反射部400の反射率が異なる場合でも、等しく扱うことが可能になる。
この画素データ(光量分布)に対して、閾値Vthrを別途設定する。そして、その閾値Vthrを横切る点に対応する、光量分布中の遮光部分に対応する光量変動領域の立ち上がり部分と立ち下がり部分の画素番号から、例えば、両者の中央を指示具による入力に対応する画素とすることで、高精度に画素情報が取得可能となる。ところが、指示具911自体の直接反射光の影響があると、遮光部分が複数発生し、単純な立ち上がり部分と立ち下がり部分の画素番号から座標値を計算すると誤差が発生してしまう。尚、この直接反射光に対する処理に関しては後述する。
ところで、図11(b)は、説明の便宜上、模式的に描いたものであり、実際の検出信号波形を詳細に表示すると、図12のようになる。
今、閾値Vthrと比較して遮光領域の立ち上がり部分は、Nr番目の画素で閾値Vthrを越えたとし、Nf番目の画素で閾値Vthrを下まわったと仮定する。この時、出力すべきラインCCD41の画素番号Npを、先に説明したように、立ち上がり部と立ち下がり部の画素番号の中央値として下記式(3)のように計算しても良いが、そうすると、ラインCCD41の画素間隔が出力画素番号の分解能になる。
Np=Nr+(Nf-Nr)/2 (3)
そこで、より高分解能に検出するために、それぞれの画素のデータレベルとその一つ前の隣接画素のデータレベルを用いて、閾値Vthrを横切る仮想の画素番号を計算する。
図12において、画素番号NrのラインCCD41の出力レベルをLr、画素番号Nr−1の出力レベルをLr−1とする。同様に、画素番号Nfの出力レベルをLf、画素番号Nf−1の出力レベルをLf−1とする。このとき、検出すべき画素番号を、それぞれの仮想画素番号Nrv、Nfvとすれば、
Nrv=Nr-1+(Vthr-Lr-1)/(Lr-Lr-1) (4)
Nfv=Nf-1+(Vthr-Lf-1)/(Lf-Lf-1) (5)
と計算できる。この計算式によれば、出力レベルに応じた仮想画素番号、つまり、ラインCCD41の画素番号よりも細かい画素番号を取得できる。そして、これらの仮想画素番号Nrv、Nfvの仮想中心画素Npvは、下記式(6)で決定される。
Npv=Nrv+(Nfv-Nrv)/2 (6)
このように、閾値Vthrを越えるデータレベルの画素の画素番号とその隣接する画素番号と、それらのデータレベルから、所定レベルの閾値Vthrを横切る仮想的な仮想画素番号を計算することで、より分解能の高い検出を実現できる。
<CCD画素番号から角度情報への変換>
次に、遮光部分の中心点を示す仮想中心画素に対応する中心画素番号から、実際の指示具の座標値を計算するためには、この中心画素番号を角度情報に変換する必要がある。
図5は、得られた画素番号と角度θとの関係をプロットした図である。この関係の近似式(下記式(7))を定義すると、
θ=f(N) (7)
となり、この近似式(変換式)を用いて画素番号からθへの変換を行うことが可能となる。
本実施形態では、1次近似式を用いて近似できるように、先に説明したセンサユニット2001L及び2001Rの受光部40のレンズ群を構成している。但し、レンズの光学的収差等により、より高次な近似式を用いた方がより高精度に角度情報を得ることが可能となる場合がある。
ここで、どのようなレンズ群を採用するかは、製造コストと密接に関連する。特に、レンズ群の製造原価を下げることによって一般的に発生する光学的な歪を、より高次の近似式を用いて補正する場合には、それなりの演算能力(演算速度)を要求される。従って、目的とする製品に要求される座標計算精度を鑑みながら、その両者を適宜設定すれば良い。
図9のように、指示具911で指示した場合の遮光状態を図11で示しているが、実際には、指示具911自体の直接反射光により更に複雑な遮光領域となる。これに対する対策が、本発明の主眼とするところであり詳しくは、後述する。
<座標計算方法の説明>
図13は、本実施形態に係る座標入力装置におけるセンサユニット2001L及びセンサユニット2001Rの位置関係を示す図である。座標入力有効領域300の水平方向にX軸、垂直方向にY軸を、そして、座標入力有効領域300の中央を原点位置に配置するものとする。そして、座標入力有効領域300の上辺左右にセンサユニット2001L及びセンサユニット2001RをY軸に対称に取り付け、そのセンサユニット2001L及び2001R相互間の距離をDsとする。
また、図示されているように、センサユニット2001L及び2001RのラインCCD41の受光面は、その法線方向がX軸と45°の角度を成すように配置され、その法線方向を0°(基準方向)と定義する。この時、角度の符号は、左側に配置されたセンサユニット2001Lの場合には、時計回りの方向を『+』方向に、また、右側に配置されたセンサユニット2001Rの場合には、反時計回りの方向を『+』方向と定義する。
さらには、図中Poは、各センサユニット2001L及び2001Rの法線方向の交点位置であり、Y軸方向の原点からの距離をPoyと定義する。この時、それぞれのセンサユニット2001L及び2001Rで得られた角度をθL、θRとすると、検出すべき点Pの座標P(x,y)は、下記式(8)、(9)で得られる。
x = Ds/2 * (tanθR - tanθL) / (1 - (tanθR * tanθL)) (8)
y = Ds/2 * (tanθR + tanθL + (2 * tanθR * tanθL)) /
(1 - (tanθR * tanθL)) + P0y (9)
次に、本実施形態に係る座標入力装置の座標計算処理について、図14を用いて説明する。
図14は本実施形態に係る座標入力装置のデータ取得から座標計算までの座標計算処理を示すフローチャートである。
電源投入が行われると、まず、ステップS1801で、CPU83のポート設定、タイマ設定等の座標入力装置に係る各種初期化を行う。次に、ステップS1802で、後述する受光素子であるところのラインCCD41のCCD画素有効範囲を、例えば、メモリ82に予め記憶されている設定値から読み出して設定する。次に、ステップS1803で、ラインCCD41の初期読込動作の初期読込回数を設定する。
尚、この初期読込動作は、座標入力装置の起動時におけるラインCCD41の不要電荷除去を行うための動作である。ラインCCD41では、動作させていないときに不要な電荷を蓄積している場合があり、その電荷が蓄積されている状態で座標入力動作を実行すると、検出不能になったり、誤検出の原因となる。そこで、これを避けるために、ステップS1804では、投光部30による投光を停止している状態で、所定回数の読込動作を実行する。これにより、不要電荷の除去を行う。
次に、ステップS1805で、読込回数が所定回数に達しているか否かを判定する。そして、読込回数が所定回数に達していない場合(ステップS1805でNO)、ステップS1804へ戻る。一方、読込回数が所定回数に達している場合(ステップS1805でYES)、ステップS1806へ進む。
ステップS1806で、ベースデータとして、投光部30による投光を停止している状態でのラインCCD41の画素データ(Bas_data[N])の取込を行う。ステップS1807で、そのベースデータをメモリ82に記憶する。
次に、ステップS1808で、リファレンスデータとして、投光部30からの投光を行っている状態でのラインCCD41の画素データ(初期光量分布に相当する:Ref_data[N])の取込を行う。ステップS1809で、そのリファレンスデータをメモリ82に記憶する。
ここまでの処理が、電源投入時の初期設定動作になる。この初期設定動作は、座標入力装置に構成されているリセットスイッチ等により操作者の意図によって動作するように構成しても良いことは言うまでもない。この初期設定動作を経て、指示具による座標入力を行うための通常取込動作状態に移行することになる。
通常取込動作は、まず、ステップS1810で、座標入力サンプリング状態で、ラインCCD41の通常取込動作を実行して、画素データ(Norm_data[N])の取込を行う。次に、ステップS1811で、メモリデータ(リファレンスデータRef_data[N])と画素データ(Norm_data[N])との差分値を計算する。ステップS1812で、その差分値と上述の閾値Vthrに基づいて、遮光部分の有無、つまり、座標入力が有るか否かを判定する。座標入力が無いと判定された場合(ステップS1812でNO)、ステップS1810へ戻る。
一方、座標入力が有ると判定された場合(ステップS1812でYES)、ステップS1813へ進み、画素データの変化の比を式(2)を用いて計算する。次に、ステップS1814で、計算された画素データの変化の比に対して、閾値Vthrを用いて、指示具による遮光部分に対応する画素データ分布の立ち下がりと立ち上がりの検出を行う。そして、検出された立ち下がり及び立ち上がりと、式(4)、(6)及び(7)を用いて、遮光部分の中心となる仮想的な中心画素番号を計算する。
ステップS1815で、計算された中心画素番号から、近似式(式(7))より、例えば、Tanθを計算する。
以上の基本的な処理に引き続き、本実施形態においては、更に、ここで指示具の直接反射光の影響に対して対応するためのステップS18155の処理(直接反射光対策処理)を実行する。尚、この処理の詳細については後述する。
ステップS1816で、センサユニット2001L及び2001Rに対して計算されたTanθと、式(8)及び(9)とを用いて指示具の入力座標P(x,y)を計算する。
ステップS1817で、計算した座標値を外部端末へ送信する。この送信は、USB、RS232C等のシリアル通信等、任意の通信インタフェースを用いて送信すれば良い。そして、ステップS1817の送信処理を終了した後は、ステップS1810の処理に戻り、以降、電源OFF、若しくは、操作者の意図によってリセット状態が設定されるまで、この処理を繰り返すことになる。
この繰り返し周期を10[msec]程度に設定すれば、本実施形態に係る座標入力装置は、100回/秒の周期で指示具911により指示した座標を外部端末に出力することが可能となる。
以上説明したように、本実施形態に係る座標入力装置によれば、検出信号波形の最大光量と最小光量との差を小さくすることができるので、座標入力装置の座標計算分解能を格段と向上させることができる。
<直接反射光対策処理に関する説明>
ここで、本発明の主眼とする、図14のステップS18155の直接反射光処理の詳細説明を図15を用いて行う。ここでは、前提として、指示具(指やペン等)による指示は、最大2点のみで、且つ、座標入力有効領域は、極端な偏りがない通常頻度の多い指示(入力)パターンに関する処理を例に挙げて説明する。
但し、本発明と同様の構成を用いることにより、3点以上の入力に対応することも可能である。また、説明に際し、それぞれの指示パターンのケースにおいて想定される指示位置、及び、それぞれの左右のセンサユニット2001L及び2001Rにおける光量分布を図16〜図19で模式的に示す。
上述のように、図14のステップS1815で角度(Tanθ)を計算したのち、ステップS18155で直接反射光対策処理を実行する。直接反射光対策処理のステップS18155は、図15で示すように、ステップ181551〜ステップS181555までのステップ群で構成される。
まず、ステップS181551で、左右のセンサユニットであるセンサユニット2001L及び2001Rの内、少なくともいずれかで、受光した光量分布における遮光部分に所定閾値以上の立ち上がりと立ち下がりが2組あるか否かを判定する。具体的には、ステップS1814において、所定閾値(Vthr)で立ち上がり部、立ち下がり部を決定した際に、その立ち上がり、立ち下がりの数をメモリ82に記憶しておき、その記憶されている数を用いて判定する。
まず、ステップS181551において、所定閾値以上の立ち上がりと立ち下がりが2組ない場合(ステップS18155でNO)の処理を説明する。図16(a)は、座標入力有効領域300上に指示位置90に1点のみ指示具で指示した場合のセンサユニット2001Lと2001Rそれぞれの位置関係を示している。112Lは、センサユニット2001Lとセンサユニット2001Rが配置されたそれぞれの位置(基準位置)を結ぶ基準線1000に対して、センサユニット2001Lから指示位置90が形成する線のなす狭角側の角度である。これと同様のセンサユニット2001Rに相当する角度が112Rである。
また、直接反射光基準角度111Lは、センサユニット2001Rにおける指示具の指示による直接反射光の影響の及ぼす直接反射光影響範囲101Rの境界とセンサユニット2001Lとを結ぶ線分と基準線1000とのなす角度である。これと同様のセンサユニット2001Rに相当する直接反射光基準角度が111Rである。直接反射光基準角度111Lと111Rに関しては、直接反射光の影響に関連付けて後述する。
図16(a)は、角度112Lは直接反射光基準角度111Lよりも大きく、かつ、角度112Rは直接反射光基準角度111Rよりも大きくなっている位置に指示を行った場合を示している。図16(b)、(c)は、それぞれ、センサユニット2001Lと2001Rにおける光量分布である。これは、詳しくは後述するが、当然、両センサユニットに対して、直接反射光基準角度111Lと111Rより角度112Lと112Rが大きいということは、直接反射光の影響がないということである。従って、指示具で指示位置90に指示した場合には、図16(b)、(c)を見ればわかるように、遮光部分の数はそれぞれ1つのみとなる。
センサユニット2001Lと2001Rで検出される遮光部分の数がそれぞれ1つのみとなる場合には、ステップS181551において、必ず、以下のように判定される。つまり、センサユニット2001Lと2001Rの内、少なくともいずれかのセンサユニットで、遮光部分に所定閾値以上の立ち上がり部分と立ち下がり部分が2組ない(ステップS18155でNO)と判定される。つまり、両センサユニットで検出される遮光部分が1つずつの場合には、直接反射光の影響のない領域に指示具による指示が一点のみ指示されたと判定できる。この場合には、ステップS181555で、指示具による指示が1点である場合の処理(通常1入力処理)と同様に、処理方法として、指示位置に対応する画素番号から角度を計算する処理を行う。具体的には、ステップS1815で角度情報としてTanθを計算しているので、その角度情報をそのまま保持して、次のステップS1816の処理における座標計算を行うために使用する。
次に、ステップS181551において、所定閾値以上の立ち上がりと立ち下がりが2組ある場合(ステップS18155でYES)の処理を説明する。この場合には、以下の2つのケースが考えられる。遮光部分の数の組み合わせとして、センサユニット2001L及び2001Rの内、いずれか一方が1で、他方が2の場合と、いずれも2の場合である。
まず、前者の場合で、仮にセンサユニット2001Lで検出される遮光部分の数が2で、センサユニット2001Rで検出される遮光部分の数が1の場合を説明する。尚、逆の場合は同様なのでここでは省略する。この場合、更に2つのケースが考えられる。図17(a)にケース1の場合、図17(b)にケース2の場合の指示位置を模式的に示す。また、図17(a)のケース1の場合のセンサユニット2001Lにおける光量分布を図17(c)に、センサユニット2001Rにおける光量分布を図17(d)に示す。同様に、図17(b)のケース2の場合のセンサユニット2001Lにおける光量分布を図17(e)に、センサユニット2001Rにおける光量分布を図17(f)に示す。
ケース1の場合は、図17(a)に示すように、座標入力有効領域300に指示位置90及び91の2点で指示した場合である。この2点の指示位置90及び91の関係は、センサユニット2001Rからの直線上に沿って配置されている。また、センサユニット2001Lに対する直接反射光影響範囲101L、及び、センサユニット2001Rに対する直接反射光影響範囲101Rの範囲外に入力指示されている。
従って、この場合、センサユニット2001Lにおける光量分布(図17(c))では、遮光部分は2組の立ち上がり、立ち下がりが検出される。一方、センサユニット2001Rにおける光量分布(図17(d))では、2点の指示位置90及び91が、ちょうどセンサユニット2001Rから同一の角度となるので、遮光部分は1組のみの立ち上がり、立ち下がりが検出される。これは、もちろん直接反射光とは関係のない、従来の座標入力においても想定される通常のケースである。
次に、ケース2の場合を説明する。指示具による指示位置90は、センサユニット2001Lに対する直接反射光影響範囲101L内の一か所のみである。この場合、指示位置90から離れたセンサユニット2001Rにおける光量分布は、図17(f)に示されるように、遮光部分は1組のみの立ち上がり、立ち下がりが検出される。ところが、センサユニット2001Lに対する直接反射光影響範囲101L内の指示位置90から近いセンサユニット2001Lにおける光量分布では、図17(c)に示すように、遮光部分は2組のみの立ち上がり、立ち下がりが検出される。これは直接反射光によるものであり、これに関して、図18を用いて説明を行う。
図18は、図17(b)のセンサユニット2001L近傍の拡大図である。図18(a)に示すように、センサユニット2001Lの近傍領域を指示した場合には、投光部30からの光が、再帰反射部400に到達する前に指示具により遮られる。この遮光の状態を検出することにより、指示位置を検出する構成が本来の光方式座標入力装置の原理であるが、ここで遮られた光は、その指示具によりすべて吸収されることがなければ、何がしかの反射光が発生する。その反射の仕方は、その指示具の反射面の状態、角度により大きく異なるが、一般的に散乱光となる。散乱光となると、通常、それほど反射光自体の光量は大きくない。
しかし、それでも、図18(a)の様に、指示具の指示位置90が投光部30近傍の場合、直接反射光103L(正確には反射光は帰りの矢印部分)は光路距離が短く、減衰が少ないので、センサユニット2001Lの受光部40で検出される程度の光量となる。また、指示具において、その座標入力面に対して略垂直で、且つ、センサユニット2001Lからの光線方向に対して平滑な垂直な面が存在すれば、その面が正反射面となる。そして、投光部30からの光が直接反射光103Lの様にその面で正反射し、投射方向と略逆向き方向に戻り、ちょうど鏡像関係の条件が整った場合に受光部40で検出されてしまう。
その場合は、散乱光の場合と比べて更に強力な直接反射光(103L)がセンサユニット2001Lで受光されてしまう。以上の散乱光と正反射光の両者に関しては、厳密な区分けが存在するわけではなく、散乱光の場合にも、微視的に見れば正反射光面が存在する。つまり、両者の間は、程度の差があるのみであり、光学的には同一の直接反射光とみなせる。以後、散乱光と正反射を特に区別せず、直接反射光とする。いずれの場合もセンサユニットから指示位置の距離が離れるほどこの直接反射光の受光量は低下し、それに対し、なんらか基準値を設けることが可能となる。
図18(a)に示されるように、指示具が略円柱状であると仮定すると、そのほぼ指示位置90の反射面の中央位置からの直接反射光103Lが、反射面が略センサユニット2001Lからの投射光の光線方向に垂直面となるので最大となる。この場合、センサユニット2001Lにおける受光における光量分布は図18(c)に示すように、本来の遮光部分104の内側の画素範囲105に光のピークが発生する。
従って、この図18(c)の光量分布だけをみると、あたかも、2箇所指示したことにより遮光が二つある状態と区別がつかない状態である。前述の様に、ステップS1812において、遮光部分の有無を所定閾値で判定している。従って、この所定閾値より大きな直接反射光103Lが検出された場合、ステップS1812で本来は入力指示の数に対応した遮光部分の数1となるはずが、直接反射光103Lの影響により実際とは異なる遮光部分の数2とカウントされてしまう。この場合、そのままの遮光部分の数2とした2つの立ち上がりと立ち下がりを基に画素番号を計算し、角度情報を計算し、これを基に座標位置を計算すると誤差が生じてしまう。
一方、図18(b)で示すように、指示具による指示位置がセンサユニット2001Lから遠くなると、投光部30からの直接反射光103Lが受光部40に入射するにしても、その光量は小さくなる。そして、反射面までの往復光路が長くなるため、図18(d)で示すように、ステップS1812における所定閾値を下回るので、遮光部分の数は本来の1とカウントされ誤動作の影響を受けない。
以上のように、物理的条件と電気的条件により、指示による直接反射光影響範囲101Lは一義的に定まる。物理的条件とは、座標入力に用いる指示具(指やペン等)の表面状態、形状、座標入力面に対する角度、更には、投光部30の投光量等である。電気的条件とは、受光部40におけるステップS1812で用いる所定閾値である。従って、指示による直接反射光影響範囲101Lは、その直接反射光がちょうど所定閾値となるセンサユニット2001Lからの距離に対応する半円形の範囲となる。
以上のように、種々の条件により一義的に定まる直接反射光影響範囲101Lの影響範囲の境界を図18(b)に102Lで示す。一方、直接反射光基準角度111Rは、この境界102Lとセンサユニット2001Rとを結ぶ線分と基準線1000とのなす角度である。センサユニット2001Lに相当する直接反射光基準角度111Lに関しても同様である。
ここで、図17(b)のケース2の場合の説明に戻る。直接反射光影響範囲101L内の一点に指示を行った場合には、指示による直接反射光の影響により図17(e)に示すように、あたかもケース1の場合の様な2点入力のごとく誤検出を行ってしまう。
従って、本発明においては、図15のステップS181551で、遮光部分に所定閾値以上の立ち上がり、立ち下がりが2組ある場合(ステップS181551でYES)、以下の処理を行う。
まず、ステップS181552において、入力指示位置のセンサユニットからの角度112L、112Rが所定の角度の範囲内(直接反射光基準角度111L、111R)であるか範囲外であるかの判定を行う。ここで、角度112Lはセンサユニット2001Lとセンサユニット2001Rが配置されたそれぞれの位置を結ぶ基準線1000に対してセンサユニット2001Lから指示具の指示位置90が形成する線のなす角度である。これは、図16のところで説明した通りである。
判定の基準となる直接反射光基準角度111Lと111Rは、前述の通り次の角度である。つまり、センサユニット2001R、2001Lにおける指示具の指示による直接反射光影響範囲101R、Lの境界102R、102Lとセンサユニット2001L、2001Rとを結ぶ線分と基準線1000とのなす角度の内で最大となる角度である。そのセンサユニット自身の直接反射光の影響ではなく、他方のセンサユニットの直接反射光の影響をそのセンサユニットからの角度で判定するのである。
図17(a)のケース1の場合には、ステップS181552で、センサユニット2001Rに関する光量分布(図17(d))において、遮光部分は1つしかないので、他方のセンサユニット2001Lに関するステップS181552の判定は行わない。センサユニット2001Lに関する光量分布(図17(c))において、遮光部分は2つあるので、他方のセンサユニット2001Rに関する判定を行う。センサユニット2001Rに関して、遮光部分に対する角度112Lは、判定の基準となる所定角度(角度111L)より大きいので、図17(c)の遮光部分は直接反射光によるものではなく、本来の2点入力によるものであると判定できる。従って、その場合(ステップS181552でNO)、図15に示すように、ステップS181554で、従来の場合と同様に、処理方法として、2組の立ち上がりと立ち下がりをそれぞれ別の2指示位置として計算する処理を行う。具体的には、すでに、ステップS1815で2つの角度情報としてTanθを計算しているので、その角度情報をそのまま保持して、次のステップS1816の処理における座標計算(2指示位置の座標計算)を行うために使用する。
図17(b)のケース2の場合には、ステップS181552で、センサユニット2001Rに関する光量分布(図17(f))において、遮光部分は1つしかないので、他方のセンサユニット2001Lに関するステップS181552の判定は行わない。センサユニット2001Lに関する光量分布(図17(e))において、遮光部分は2つあるので、他方のセンサユニット2001Rに関するステップS181552の判定を行う。センサユニット2001Rに関して、遮光部分に対する角度112Lは、判定の基準となる所定角度(角度111L)より小さい。そのため、他方のセンサユニット2001Lに関わる直接反射光の影響を受けた場合の2つの遮光部分に対する処理であるステップS181553を実行する。
2つの遮光部分に対する処理(ステップS181553)に関しては、処理方法として、特許文献2で示されている技術を用いる。具体的には、遮光部分候補となる複数の立ち上がり部分及び立ち下がり部分を検出した場合、次のように処理する。つまり、最初に検出される立ち上がり部分(最も小さい画素番号)と最後に検出される立ち下がり部分(最も大きい画素番号)から得られる画素データ分布(画素分布)の中心点を中心画素番号として検出する。この2つの図17(e)の遮光状態に対する処理に関しては、この段階で直接反射光による遮光状態であることがステップS181552で判明しているので、この処理は、この特許文献2の手法に限定されるものではない。この図17(e)の遮光状態から1つの指示に対する中心画素番号を検出する手法ならどのような手法でもよい。
次に、遮光部分の数の組み合わせとして、センサユニット2001L及び2001Rの内、いずれセンサユニットにおいてもその数が2の場合について図19を用いて説明する。
図19(a)のケース1、図19(b)のケース2いずれの場合においても、ステップS181552で、センサユニット2001LとセンサユニットRに関する光量分布(図17(c)〜(f))において、遮光部分はいずれも2つ検出される。従って、両方のセンサユニット2001Lとセンサユニット2001Rに関するステップS181552の判定を行う。
ケース1の場合には、センサユニット2001Rの直接反射光の有無に関して、遮光部分に対する角度112Lに対し、センサユニット2001Lの直接反射光の有無に関して、遮光部分に対する角度112Rに対し、ステップS181552の判定を行う。いずれに関しても、ここで判定の基準となる所定角度(角度111L、111R)よりも角度が大きいと判定されるので、図19(c)及び図19(d)の遮光部分は直接反射光によるものではなく、本来の2点入力によるものであると判定される。従って、その場合(ステップS18552でNO)、図15に示すように、ステップS181554で、従来の場合と同様に、2組の立ち上がりと立ち下がりをそれぞれ別の2指示位置として計算する。具体的には、すでに、ステップS1815で2つの角度情報としてTanθを計算しているので、その角度情報をそのまま保持して、次のステップS1816の処理における座標計算(2指示位置の座標計算)を行うために使用する。
ケース2の場合にも、センサユニット2001Rの直接反射光の有無に関して、遮光部分に対する角度112Lに対し、センサユニット2001Lの直接反射光の有無に関して、遮光部分に対する角度112Rに対し、ステップS181552の判定を行う。センサユニット2001Rの直接反射光の有無に関しては、センサユニット2001Lが検出する遮光部分に対する角度112Lに関して、判定の基準となる所定角度(角度111L)よりも角度が大きいと判定される。従って、図19(f)の遮光部分は直接反射光によるものではなく、本来の2点入力によるものであると判定できる。
一方、センサユニット2001Lの直接反射光の有無に関しては、センサユニット2001Rが検出する遮光部分に対する角度112Rに関して、判定の基準となる所定角度(角度111R)よりも角度が小さいと判定される。従って、図19(e)の遮光部分は、直接反射光によるものであると判定できる。つまり、この場合は、2点の入力位置が、センサユニット2001Lから直線状に沿っており、且つ、一方がセンサユニット2001Lの近傍の直接反射光影響範囲101L内にある場合である。
この場合には、センサユニット2001Rに関しては、ステップS181554で従来の場合と同様に、2組の立ち上がり部分と立ち下がり部分をそれぞれ別の2指示位置として計算する。一方、センサユニット2001Lに関しては、図17のケース2のセンサユニット2001Lの場合と同様に、特許文献2で示されている技術を用いる。具体的には、遮光部分候補となる複数の立ち上がり部分及び立ち下がり部分を検出した場合、最初に検出される立ち上がり部分と最後に検出される立ち下がり部分から得られる画素データ分布の中心点を中心画素番号として検出する。
以上のように、立ち上がり部分と立ち下がり部分の組の数と、入力指示位置のセンサユニットからの角度が所定の角度(直接反射光基準角度)の範囲内であるか否かの判定結果に基づいて、座標入力有効領域に対する指示位置の角度を計算する処理方法を選択する。これにより、直接反射光の影響がある場合にも、誤検出することなく、正確な座標を計算することができる。
以上説明したケースで、通常の操作で生じるほとんどの場合に対応できるが、例えば、上記以外のケースも発生する場合が考えられる。例えば、2入力の場合、それぞれ1点ずつ直接反射光影響範囲101R及び101L内に入力した場合や、直接反射光影響範囲101R及び101Lいずれかに一度同時に2点入力した場合である。この場合も、ここでは詳細説明は省略するが、それに対応した処理を実行することにより対応することができる。
前者の場合には、センサユニット2001L及び2001Rともに、3つの遮光部分が検出されるが、お互いに直接反射光の判定の基準となる所定角度(直接反射光判定基準角度)に関する判定をした上で次の処理を行う。角度が一番小さい遮光部分のみ、従来通りの処理、残りの大きい角度2つに対して、特許文献2で示されている技術を用いる。
一方、後者の場合には、一方のセンサユニットで4つの遮光部分が検出され、他方のセンサユニットで1つあるいは2つの遮光が検出されるが、お互いに直接反射光基準角度に関する判定をした上で次の処理を行う。直接反射光基準角度に関する判定で、遮光部分が直接反射光によるものであると判定されたセンサユニット側で4つの遮光部分に特許文献2で示されている技術を用い、他方のセンサユニットに対しては、従来の場合と同様の処理を行う。
尚、以上の処理に関しては、これに限定されるものではなく、直接反射光基準角度に関する判定を加えた処理であれば、どのようなものでも良い。
また、以上の説明では、2つのセンサユニットに基づいて、座標を検出する構成に関して説明を行っている。しかしながら、本発明の直接反射光対策処理に関する発明は、この構成に限定されるものではなく、3つ以上のセンサユニットを座標計算時に随時組み替えて構成する場合にも適応できることは言うまでもない。
以上説明したように、本実施形態によれば、指や指示具で座標入力有効領域のセンサユニット近傍に指示を行った場合に、投光部からの直接反射光を受光し、受光の光量分布において遮光に影響を与える場合においても正確に指示位置を検出することができる。
具体的には、実際には指示具による1点入力による遮光部分が1つであるが、その指示具からの直接反射光により遮光の光量分布の間に光量が大きい部分が形成され、見掛け上2点入力との区別がつきにくい場合を区別することでき、正確な検出が可能となる。つまり、直接反射光の影響を受けている1点入力については、その1点入力の正確な位置検出が可能となり、2入力の場合には、2点の正確な位置検出が可能となる。
尚、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。