以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。尚、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
<実施形態1>
座標入力装置の概略構成を、図1を用いて説明する。
図中、1Lは、センサユニット2−L1及び2−L2(第1のセンサユニット及び第2のセンサユニット)を装備するセンサバーである。また、1Rは、2−R1及び2−R2(第3のセンサユニット及び第4のセンサユニット)を装備するセンサバーである。
筐体であるセンサバー1L及び1R(総称する場合は、センサバー1と表記)は、図示のように矩形状の座標入力有効領域5の対向する2辺に設けられる。表示装置が仮にフロントプロジェクターとすれば、表示領域は座標入力有効領域5の範囲内に設定され、例えば、平面状のホワイトボード6に投影される。無論、ホワイトボード6に限定されるものではなく、壁面等であっても良い。
センサバー1L及び1Rの側面にはそれぞれ、図示のように再帰反射部4L及び4R(総称する場合は、再帰反射部4と表記)が装着されている。そして、再帰反射部4L及び4Rはそれぞれ、対向する辺に設けられたセンサバー1Lあるいは1Rのセンサユニットが投光した赤外光を再帰的に反射できるように構成してある。
センサバー1Lに内蔵される演算制御回路3Lはセンサユニット2−L1及び2−L2を制御して、その出力結果を演算処理すると共に、センサバー1Rの演算制御回路3Rを制御する。センサバー1Rの演算制御回路3Rは、センサユニット2−R1及び2−R2を制御して、その出力結果を演算処理して、センサバー1Lの演算制御回路3Lにその結果を送信する。そして、センサバー1Lの演算制御回路3Lは、4つのセンサユニット2−L1、2−L2、2−R1及び2−R2からの出力結果を処理して、指示位置を算出し、パーソナルコンピュータ等の外部機器へ結果を出力する。
図1では、センサバー1Lの演算制御回路3Lとセンサバー1Rの演算制御回路3Rとはコードで接続される構成(つまり、有線接続)となっているが、これに限定されない。例えば、無線等の通信機能を互いに搭載して、それらの通信機能を使用してデータの送受信(無線接続)を行っても良い。
尚、以後の説明にあっては、水平方向をX軸(図面右側が+)、天地方向をY軸(下側が+)として説明する。
図2はセンサユニット2−L1、2−L2、2−R1及び2−R2(総称する場合は、センサユニット2と表記する)の詳細構成を示す図である。図2(A)は図1における断面A−Aであり、図2(B)及び(C)は図中の矢印方向から見た正面図である。
図2(A)において、センサユニット2は、センサバー1に収納されており、座標入力有効領域5に向けて光を投光する投光部30及び到来光を受光する受光部40で構成される。投光部30と受光部40の距離はL_pdであり、その間に再帰反射部4が図示のように設けられている。45は光透過性の部材であって、センサバー1内へのゴミ等の異物の侵入を防止するための保護部材である。
図2(B)において、投光部30は、発光部である赤外LED31、投光レンズ32、両者を固定するための接着層33で構成される。投光レンズ32は、赤外LED31の光を、座標入力面となるホワイトボード6と略平行な光束となるように構成する。そして、対向する辺に設けられたセンサバー1の再帰反射部4の全領域を照明するように、投光範囲がg〜h範囲であって、頂点が点Oの位置(センサユニット2の重心位置)の扇状の光束を出射する。
図2(C)において、受光部40は、投光部30が投光した光が、対向する辺に設けられたセンサバー1に装着されている再帰反射部4によって再帰反射された光を検出する。41は光電変換素子であるところのラインCCD、42は受光レンズ、43は視野絞り、44は赤外線通過フィルターである。また、保護部材45に赤外通過フィルター機能を設けることで、赤外線通過フィルター44を廃止してもかまわない。
受光部40の光軸はX軸方向に設定される。視野範囲はg〜h範囲であり、点Oの位置が光学的な中心位置となっている。また、受光部40は、図示のように光軸に対して非対称な光学系となっている。点Oの位置、及び方向g、方向hが略一致するように、投光部30と受光部40は、図2(A)のように重ねて配置される。また、受光部40は、入射する光の方向に応じて、ラインCCD41の画素に集光されるので、ラインCCD41の画素番号は入射する光の角度情報を表す。
また、受光部40は、座標入力有効領域5の座標入力面と略平行な視野範囲を有し、その光軸方向は、ラインCCD41の受光面の法線方向と一致するように配置されている。
図3(A)は演算制御回路3のブロック図である。実施形態1におけるセンサバー1Lの演算制御回路3Lとセンサバー1Rの演算制御回路3Rは、外部へのインタフェース仕様を除き、いずれも同様の回路構成であり、接続される対応するセンサユニット2の制御、演算を行う。図3(A)は、特に、センサバー1Lの演算制御回路3Lの構成を示している。
センサユニット2−L1及び2−L2のラインCCD41用のCCD制御信号は、ワンチップマイコン等で構成されるCPU61から出力され、ラインCCD41のシャッタータイミングやデータの出力制御等を行う。ここで、CPU61は、内部に不揮発性メモリ(例えば、フラッシュメモリ)を内蔵しており、この不揮発性メモリには、座標入力装置を制御するためのプログラムや各種の設定値等のデータが記憶されている。これにより、CPU61は、不揮発性メモリに記憶されているプログラムを読み出して実行したり、各種設定値の書込や読出を随時行うことができるようになっている。
CCD用のクロックはクロック発生回路CLK62から各センサユニット2−L1及び2−L2に送信されるとともに、ラインCCD41との同期をとって各種制御を行うためにCPU61にも入力されている。尚、センサユニット2−L1及び2−L2の赤外LED31を駆動するLED駆動信号は、CPU61から供給される。
センサユニット2−L1及び2−L2それぞれのラインCCD41からの検出信号は、A/Dコンバータ63に入力され、CPU61からの制御によって、デジタル値に変換される。変換されたデジタル値はメモリ64に記憶され、角度計算に用いられる。そして、計算された角度情報から幾何学的な指示位置を算出し、外部PC等の情報処理装置にインタフェース68(例えば、USBインタフェース)を介して出力される。
先に示した通り、各センサバー1の演算制御回路3は、各々2つのセンサユニット2を制御している。仮に、センサバー1Lの演算制御回路3Lがメイン機能を果たすものとすれば、CPU61はシリアル通信部67を介して、センサバー1Rの演算制御回路3Rに制御信号を送信して、回路間の同期を行う。そして、演算制御回路3Rから、必要なデータの取得を行うことになる。
演算制御回路3L及び3R間の動作は、マスター・スレーブ制御にて動作する。実施形態1の場合、演算制御回路3Lがマスターで、演算制御回路3Rがスレーブである。尚、各演算制御回路は、マスター・スレーブのどちらにもなりうるが、ディップスイッチ(不図示)等の切替部で、CPUのポートに切替信号を入力することで、マスター・スレーブの切替が可能となっている。
マスターであるセンサバー1Lの演算制御回路3Lからは、対向する辺に設けられたセンサバー1Rのセンサユニット2−R1及び2−R2のデータを取得するために、制御信号がスレーブの演算制御回路3Rにシリアル通信部67を介して送信される。そして、センサユニット2−R1及び2−R2で得られた角度情報が算出され、シリアル通信部67を介してマスター側の演算制御回路3Lに送信される。
尚、インタフェース68は、実施形態1の場合、マスター側の演算制御回路3Lに実装されることになる。また、66は、指示具として、赤外線を発光する専用ペン(不図示)を使用した時の赤外線受光部である。65は専用ペンからの信号をデコードするためのサブCPUである。専用ペンは、ペン先が入力面を押圧したことを検知するスイッチや、ペン筺体サイド部に種々のスイッチを有する。それらのスイッチの状態やペンの識別情報を専用ペンに設けられた赤外線発光部で送信することにより、専用ペンの操作状態を検知することが可能となる。
図3(B)はセンサユニット2を動作させるためにマスター側の演算制御回路3LのCPU61が出力する制御信号、及びセンサユニット2の動作を示すタイミングチャートである。
71、72、73がラインCCD41制御用の制御信号であり、SH信号71の間隔でラインCCD41のシャッター開放時間が決定される。ICGL信号72はセンサバー1Lのセンサユニット2−L1及び2−L2へのゲート信号であり、ラインCCD41内部の光電変換部の電荷を読出部へ転送する信号である。
CCDL信号74は、センサユニット2−L1及び2−L2のラインCCD41のシャッター開放時間を示す信号である。ICGR信号73は、対向するセンサバー1Rのセンサユニット2−R1及び2−R2へのゲート信号であり、シリアル通信部67を介してセンサバー1Rの演算制御回路3Rに送信される。そして、演算制御回路3RがラインCCD41内部の光電変換部の電荷を読出部へ転送する信号を生成する。CCDR信号75は、センサユニット2−R1及び2−R2のラインCCD41のシャッター開放時間を示す信号である。
LEDL信号76及びLEDR信号77は、各センサユニット2の赤外LED31の駆動信号である。SH信号71の最初の周期でセンサバー1Lのセンサユニット2−L1及び2−L2の赤外LED31を点灯するために、LEDL信号76が各々のLED駆動回路(不図示)を経て赤外LED31に供給される。
そして、SH信号71の次の周期で、対向する辺に設けられたセンサバー1Rのセンサユニット2−R1及び2−R2の赤外LED31を点灯するために、LEDR信号77がシリアル通信部67を介して演算制御回路3Rに送信される。そして、演算制御回路3Rが各々のLED駆動回路に供給するための信号を生成する。
赤外LED31の駆動、及びラインCCD41のシャッター開放が終了した後に、ラインCCD41の信号がセンサユニット2から読み出され、後述する方法で角度情報を算出する。そして、スレーブ側の演算制御回路3Rの演算結果はマスター側の演算制御回路3Lに送信される。
以上のように動作させることで、センサバー1Lのセンサユニット2−L1及び2−L2と対向するセンサバー1Rのセンサユニット2−R1及び2−R2とは、異なるタイミングで動作するようになる。このように構成することで、対向する辺に設けられたセンサユニットの赤外光を検出することなく、センサユニット自身が発光した再帰反射光のみを検出できる。
図4を用いて、センサバー1のセンサユニット2から出力される、受光状態を示す信号について説明する。先ず、センサユニット2の投光部30の発光が無い状態である場合の受光部40の出力は図4(A)となり、発光が有る場合の受光部40の出力は図4(B)となる。図4(B)において、レベルAが検出した光量の最大レベルであり、レベルBが光を全く検出(受光)できてないレベルと言える。
センサユニット2が発光した赤外線は、対向する辺に設けられた再帰反射部4で再帰反射され、自身のセンサユニット2で検出される。画素番号Njから画素番号Nfまでの光量は、表示画面の大きさやそのアスペクト比、それに対応したセンサバー1の配置状態(特に、2つのセンサバー1間の距離)等によって変化する。
実施形態1の座標入力装置は、最適な光量レベルが得られるように、SH信号を制御することによって、ラインCCD41のシャッター開放時間、及び赤外LED31の露光時間を調整する。センサユニット2から得られる光量が多ければ時間を短くし、逆に少なければ時間を長く設定することができる。さらには、検出光量レベルに応じて、赤外LED31に流す電流を調整しても良い。このように出力信号を監視することで、最適な光量が得られるように構成されている。このような調整を、レベル変動が有った場合に適宜行う仕様としても良い。もしくは、センサバー1が設置され、その状態が保持されている間は、安定した一定の信号が得られるはずであるので、このような光量の調整は、設置が完了した電源投入時に行えばよい。
座標入力有効領域5の入力面をタッチ(指示)することで光路を遮ると、図4(C)のように、例えば、画素番号Ncで光量が検出できなくなる。実施形態1では、この図4(A)〜図4(C)の信号を用いて、タッチした方向、言い換えると、角度を算出する。
まず、システムの起動時、システムのリセット時、あるいは自動的に、基準データを取得する。以降、一つのセンサユニット2のデータ処理について説明するが、他のセンサユニットでも同様の処理を行っている。
電源投入時、操作者によるタッチ操作が行われてない状態で、投光部30の照明無しの状態でラインCCD41の出力をA/Dコンバータ63によりA/D変換して、この値をBase_Data[N]としてメモリ64に記憶する。これは、ラインCCD41のバイアスのばらつき等を含んだデータとなり、図4(A)のレベルB付近のデータとなる。ここで、[N]はラインCCD41のCCD画素番号であり、有効な入力範囲に対応する画素番号が用いられる。
同様に、操作者によるタッチ操作が行われてない状態で、投光部30から投光した状態での光量分布を取得して記憶する。これは、図4(B)の実線で表されたデータであり、Ref_Data[N]としてメモリ64に記憶する。これにより、初期データとして2種類のデータの記憶を管理する。
その後、サンプリングを開始することになるが、タッチ操作が行われてなければ、図4(B)に示すデータは、タッチ操作が行われると、その指示位置に応じて影Cが検出された図4(C)に示すデータが検出される。この投光部30の照明有りの状態で得られるサンプルデータをNorm_Data[N]と定義する。
これらのデータ(メモリ64に記憶されているBase_Data[N]とRef_Data[N])を用いて、まずは、指示具の入力の有無、遮光部分の有無の判定を行う。まず、遮光部分を特定するために、データの変化量を各々の画素において算出し、予め設定してある閾値Vthaと比較する。
Norm_Data0[N] = Norm_Data[N] - Ref_Data[N] (1)
ここで、Norm_Data0[N]は、各画素における光量の変化量であり、閾値比較により、ノイズ等による誤判定を防止し、所定量の確実な変化を検出する。そして、閾値を超えるデータが、例えば、所定数以上の連続した画素で発生した場合に、タッチ操作が有ると判定する。この処理は、差を取り比較するだけなので、短時間での演算が可能であり、入力の有無判定を高速に行うことができる。
次に、より高精度に検出するために、式(2)を用いて、画素データの変化の比を計算して入力点の決定を行う。
Norm_DataR[N] = Norm_Data0[N] / (Base_Data[N] - Ref_Data[N]) (2)
この画素データ(光量分布)に対して、別途設定される閾値Vthrを適用する。そして、その閾値Vthrを横切る点に対応する、光量分布中の遮光部分に対応する光量変動領域の立ち上がり部と立ち下がり部の画素番号から、両者の中央を指示具による入力に対応する画素とすることで、角度を算出する。
図4(D)は変化の比の計算を終了後の検出結果の例である。今、閾値Vthrで検出すると、遮光部分の立ち上がり部分は、Ns番目の画素でレベルLsとなり閾値Vthrを超えたとする。さらに、Nt番目の画素でレベルLtとなり閾値Vthrを下まわったとする。
この時、出力すべきラインCCD41の画素番号Npを、立ち上がり部と立ち下がり部の画素番号の中央値として式(3)のように計算しても良いが、そうすると、ラインCCD41の画素間隔が出力画素番号の分解能になる。
Np = Ns + (Nt - Ns) / 2 (3)
そこで、より高分解能に検出するために、それぞれの画素のデータレベルとその一つ前の隣接画素のデータレベルを用い、閾値Vthrを横切る仮想の画素番号を計算する。
画素NsのレベルをLs、画素Ns−1番のレベルをLs−1、そして、画素NtのレベルをLt、画素Nt−1のレベルをLt−1とすると、それぞれの仮想画素番号Nsv、Ntvは、
Nsv = Ns-1 + ( Vthr - Ls-1 ) / ( Ls -LS-1 ) (4)
Ntv = Nt-1 + ( Vthr - Lt-1 ) / ( Lt -Lt-1 ) (5)
と計算できる。この計算式によれば、出力レベルに応じた仮想画素番号、つまり、ラインCCD41の画素番号よりも細かい画素番号を取得できる。そして、これらの仮想画素番号Nsv、Ntvの仮想中心画素Npvは、式(6)で決定される。
Npv = Nsv + ( Ntv - Nsv ) / 2 (6)
このように、閾値Vthrを越えるデータレベルの画素の画素番号とその隣接する画素番号と、それらのデータレベルから、所定レベルの閾値Vthrを横切る仮想的な仮想画素番号を計算することで、より分解能の高い検出を実現できる。
このように得られた中心画素番号から、実際の指示具の座標値を計算するためには、この中心画素番号を角度情報に変換する必要がある。
後述する実際の座標計算では、角度そのものよりもその角度における正接(tangent)の値を計算するほうが都合がよい。尚、画素番号から、tanθへの変換には、テーブル参照や変換式を用いる。変換式は、例えば、高次の多項式を用いると精度を確保できるが、次数等は計算能力及び精度スペック等を鑑みて決定すればよい。
ここで、5次多項式を用いる場合の例を示すと、5次多項式を用いる場合には係数が6個必要になるので、出荷時等にこの係数データをCPU61内の不揮発性メモリに記憶しておけばよい。今、5次多項式の係数をL5、L4、L3、L2、L1、L0としたとき、tanθは
tanθ=(L5*Npr+L4)*Npr+L3)*Npr+L2)*Npr+L1)*Npr+L0 (7)
であらわすことができる。同様なことを、各々のセンサユニットに対して行えば、それぞれの角度データを決定できる。もちろん、上記例では、tanθを計算しているが、角度データそのものを計算し、その後、tanθを計算しても構わない。
図5は、画面座標との位置関係を示す図である。センサバー1Lのセンサユニット2−L1の視野範囲は方向jから方向fの範囲であり、角度の正負を図示のように設定する。そして、センサユニット2−L1の光軸はX軸方向であり、その方向を角度0°と定義する。同様に、センサユニット2−L2の視野範囲は方向fから方向jの範囲であり、角度の正負を図示のように設定し、及び、センサユニット2−L2の光軸の方向を角度0°と定義する。そして、センサユニット2−L1の光軸中心とセンサユニット2−L2の光軸中心を結ぶ線分をY軸と定義すれば、各センサユニットの光軸はその線分の法線方向となる。また、センサユニット2−L1の光軸中心とセンサユニット2−L2の光軸中心との距離をdhと定義する。
今、点Pの位置でタッチ操作が行われた場合を想定する。
センサユニット2−L1で算出される角度はθL1であり、センサユニット2−L2で算出される角度はθL2である。この2つの角度情報と距離dhを用いて、幾何学的に指示位置Pの座標を算出することが可能となる。
x=dh・tan(π/2-θL2)・tan(π/2-θL1)/(tan(π/2-θL2)+tan(π/2-θL1)) (8)
y=dh・tan(π/2-θL2)/(tan(π/2-θL2)+tan(π/2-θL1)) (9)
また、一方のセンサユニットの出力がθL1=0、もしくはθL2=0の場合であっても、他方のセンサユニットが出力する角度情報に基づき、幾何学的に容易に指示位置を算出することが可能である。
ここで、センサユニット2−L1及びセンサユニット2−L2の視野範囲から、指示位置Pが図5(B)のハッチング部の範囲に有る場合のみ、その指示位置を算出することが可能である。指示位置がその範囲に無い場合には、図5(C)、図5(D)、図5(E)に示す様に、演算に用いるセンサユニットの組み合わせを変更することで、座標入力有効領域5全域の指示位置を検出できるようになる。従って、各センサユニット2が検出した遮光方向の有無、及び遮光方向に基づき、座標算出に必要なセンサユニットを選択して、指示位置を算出する。そして、選択したセンサユニット2の組み合わせに応じて、式(8)、式(9)のパラメータを変更して、座標変換を行えばよい。
尚、図5(F)に示すように、センサユニット選択の境界領域近傍に指示位置Pが存在すると、この場合は、図5(B)もしくは図5(C)の状態のセンサユニットの組み合わせで、その指示位置を算出できる。具体的な構成として、例えば、センサユニット2−L2の視野範囲と、センサユニット2−R1の視野範囲は、座標入力有効領域5の対角線方向で重複するように構成される。そして、重複した領域でタッチした場合には、複数通りのセンサユニットの組み合わせで座標算出が可能となる。その場合にあっては、両者の組み合わせで算出した座標値の平均値を確定座標として出力しても良い。
さて、このように算出された座標値は、実施形態1の座標入力装置が持つ第1の座標系(以後、相対座標系と称す)の値であって、位置算出が可能な有効領域は図1における座標入力有効領域5である。そして、この座標入力有効領域5の範囲内にディスプレイの表示面を設けることになる。ディスプレイが仮にフロントプロジェクターとすると、図6に示すように、投影画像である表示領域8が座標入力有効領域5内に設定されることになる。図6では、d1を原点としてdx軸、dy軸からなる表示座標系である第2の座標系(以後、表示座標系と称す)からなる。表示されている画像を直接タッチすることで、アイコン等のタップ操作を行うためには、相対座標系に対する表示座標系の位置を合わせる作業を行う必要がある。位置合わせ作業は一般的にキャリブレーションと呼ばれている。
通常、キャリブレーションを実行するためには、表示制御を行っているパーソナルコンピュータ(PC)に専用のアプリケーションソフトがインストールされる。アプリケーションを起動すると、表示画面には十字クロス等の指標が表示され、ユーザにそのクロス位置をタッチするように促す。その動作を異なる位置で所定回数繰り返すことで得られる相対座標系の座標値と、十字クロスが表示されている位置の表示座標系の座標値とが一致するように、座標系の変換が行われる。
実施形態1の座標入力装置にあっては、アプリケーションソフトを使って十字クロスの位置を表示させてタッチさせるのではなく、表示画面の4隅をタッチすることで、この座標変換を行っている。このように構成することで、その場にあるPCに接続することで、特別なソフトをインストールすることなく直ぐに使えると言う優れた効果が得られる。特に、本願発明の座標入力装置は、センサバー1を持ち運んで会議室に設置する可搬型であり、一緒にPCを持ち運ぶ必要が無いと言うことは大きな利点である。持ち運んだ先の、その場のPC、その場の表示装置を利用して、簡単に設置を完了させて直ぐに使えると言う優れた効果を発揮する。
このキャリブレーションモードへの遷移は、例えば、センサバー1に設けられたモード遷移スイッチ(不図示)で行われる。ユーザは、表示画面の位置を変更した場合等にモード遷移スイッチを押下する。このモード遷移スイッチにより、キャリブレーションモードへ遷移すると、センサバー1に内蔵されるスピーカ等の出力部により、4隅部を順次タッチするようにガイダンスする。また、隅部のタッチが完了する毎に、入力が完了したことを示すブザー音を報知しても良い。または、センサバー1に内蔵されるインジケータで、その操作を促しても良い。
さて、相対座標系での座標算出では、式(8)及び式(9)で演算に用いるセンサユニット2間の距離dhが既知である必要が有る。しかしながら、表示装置と組み合わせて使用する図6のような使用態様の場合、この距離dhは必ずしも既知である必要は無い。つまり、ディスプレイの大きさを示す4隅部の情報が、タッチ操作することにより順次、相対座標系における各センサユニットでの角度情報として取得される。その結果、比による計算だけで、表示座標系の指示位置の座標を算出することが可能である。
さて、実施形態1の座標入力装置は、種々の表示サイズの表示面に対して、ユーザが2本のセンサバー1を装着して使用することを想定している。そして、2本のセンサバー1間の相対的な位置関係として、2つのセンサバー1が平行、同一長さ、かつX軸方向に他方のセンサバーのセンサユニットが配置されることで、相対座標系での高精度な位置検出が可能となる。2本のセンサバー1がこのような配置となる仕組みを設けることも可能であるが、その場合、ユーザにそれなりの慎重な設置作業を強いることになる。仮に、2つのセンサバー1を目分量で簡単に装着できれば、利便性の向上、設置時間の大幅短縮へとつながる。そこで、実施形態1にあっては、利便性向上のために、座標検出モードとして第2の検出モードを有する。
図7(A)は第2の検出モードを説明するためのマスター側のセンサバー1LのCPU61が出力する制御信号、及びセンサユニット2の動作を示すタイミングチャートである。
91、92、93がラインCCD41制御用の制御信号であり、SH信号91の間隔でラインCCD41のシャッター開放時間が決定される。ICGL信号92はセンサバー1Lのセンサユニット2−L1及び2−L2へのゲート信号であり、ラインCCD41内部の光電変換部の電荷を読出部へ転送する信号である。
CCDL信号94は、センサユニット2−L1及び2−L2のラインCCD41のシャッター開放時間を示す信号である。ICGR信号93は、対向するセンサバー1Rのセンサユニット2−R1及び2−R2へのゲート信号であり、シリアル通信部67を介してセンサバー1Rの演算制御回路3Rに送信される。そして、演算制御回路3RがラインCCD41内部の光電変換部の電荷を読出部へ転送する信号を生成することになる。CCDR信号95は、センサユニット2−R1及び2−R2のラインCCD41のシャッター開放時間を示す信号である。
LEDL信号96及びLEDR信号97は、各センサユニット2の赤外LED31の駆動信号である。SH信号91の最初の周期でセンサバー1Rのセンサユニット2−R1及び2−R2の赤外LED31を点灯するために、LEDR信号97がシリアル通信部67を介してセンサバー1Rの演算制御回路3Rに送信される。そして、演算制御回路3Rが各々のLED駆動回路に供給するための信号を生成する。
そして、SH信号91の次の周期で、センサバー1Lのセンサユニット2−L1及び2−L2の赤外LED31を点灯するために、LEDL信号96が各々のLED駆動回路を経て赤外LED31に供給する。
赤外LED31の駆動、及びラインCCD41のシャッター開放が終了した後に、ラインCCD41の信号がセンサユニット2から読み出され、後述する方法で角度情報を算出する。そして、スレーブ側の演算制御回路3Rの演算結果はマスター側の演算制御回路3Lに送信される。
以上のように動作させることで、センサバー1Lのセンサユニット2−L1及び2−L2は、対向するセンサバー1Rのセンサユニット2−R1及び2−R2が発光した赤外LED31の赤外光を直接検出(直接受光)する。同様に、センサバー1Rのセンサユニット2−R1及び2−R2は、対向するセンサバー1Lのセンサユニット2−L1及び2−L2が発光した赤外LED31の赤外光を直接検出する。
尚、図3では、センサバー1Lのセンサユニット2−L1及び2−L2と対向するセンサバー1Rのセンサユニット2−R1及び2−R2とを異なるタイミングで動作する座標検出モードであり、これが第1の検出モードとなる。
図7(B)は、第2の検出モードで動作する場合に、センサユニット2で得られる検出信号波形を示している。対向する辺に設けられた2つのセンサユニット2の投光部30からの発光をそれぞれ受光するので、ピーク信号が2つ生成される。そして、先に述べた角度算出の方法と同様な方法で、その方向を各々算出する。尚、図中の破線は、図4(B)で示す受光部40の出力(光量分布)を示すものであり、方向Nj、方向Nfの間にピーク信号が生成されることを示している。このとき、検出されたピーク信号のCCD画素番号はそれぞれN1、N2として、メモリ64に保存される。
上述のように、ユーザが2つのセンサバー1を目分量で装着した場合であっても、高精度な位置検出を実現することが実施形態1の目的の一つである。そのために、各センサユニット2が、対向するセンサバー1に収納されているセンサユニット2の投光部30の光を検出することで、対向するセンサユニット2がどの方向に位置するかを検出する。
図8を用いて、その様子を説明する。図8において、センサユニット2−L1の光軸中心とセンサユニット2−L2の光軸中心を結ぶ線分をY軸、その法線方向をX軸とすれば、センサユニット2−L1及び2−L2の光軸はX軸と平行である。そして、対向するセンサユニット2−R1は、センサユニット2−L1から見ると角度θ1の方向であり、センサユニット2−L2から見ると角度θ3の方向である。同様に、θ1からθ8までの角度を算出することが可能であり、その結果、センサバー1Lのセンサユニット2−L1の光軸と、センサバー1Rのセンサユニット2−R1の光軸の成す角度θ9が算出される。
言い換えると、センサバー1Lとセンサバー1Rの相対的な傾きを検出することができる。更には、センサバー1の長手方向の長さが変化した場合であっても、各センサユニット2間の絶対的距離を知ることはできないが、4つのセンサユニットの相対的な位置関係を取得することが可能である。そして、先に述べたディスプレイの大きさを示す4隅部の情報を、タッチ操作することで取得すれば、相対座標による計算(比による演算)だけでも、表示座標系での座標を高精度で算出することが可能となる。
図9は電源投入時からの初期設定処理を示すフローチャートである。
まず、投影画像である表示領域8の全領域を含む矩形状の座標入力有効領域5を形成するために、操作者によってセンサバー1がホワイトボード6に装着されると、CPU61は、例えば、電源投入が行われて初期設定を行う(S101)。尚、センサバー1には、例えば、マグネット等の装着部が内蔵されていて、ホワイトボード6等の壁面に貼りつけることができるようになっている。
次に、CPU61は、入出力ポートの設定、タイマ設定等の座標入力装置に係る各種初期化を行うとともに、光電変換素子に残っている余分な電荷を除去する等のラインCCD41の初期化も行う(S102)。次に、ラインCCD41が検出する光量の最適化を行う。ホワイトボード6や表示領域8の大きさは、使用環境により様々であり、センサバー1間の距離は適宜ユーザによって設定される。従って、装着の状態によって、検出される光の強度は異なる。そのため、CPU61は、ラインCCD41のシャッター開放時間や赤外LED31の点灯時間、もしくは赤外LED31の駆動電流の設定を含む第2の検出モードで動作設定を行う(S103)。ここで、S103における動作設定とは、対向するセンサユニット2から直接光を受ける動作の状態(図7における第2の検出モード)であって、4つのセンサユニット2の相対的な位置関係を導出することを目的とする。
次に、CPU61は、ラインCCD41の出力信号を取り込む(S104)。そして、CPU61は、その出力信号に基づいて、光を検出したか否かを判定することで、センサユニットの配置が適切であるか否かを判定する(S105)。ここで、光が検出できない場合(S105でNO)、これは、センサユニット2の受光部40の視野範囲に、対向する位置にあるセンサユニット2が位置していない可能性がある状態である。つまり、この状態は、ユーザによるセンサバー1の配置/設置が不適な状態にある。そこで、このような場合は、その旨を報知して、センサバーの再設置を促す(S106)。そして、ユーザによる再設置が完了すると、再び、S101を開始する。尚、S104で取り込む出力信号は、図7(B)に示すような信号となり、実施形態1の場合は、2つのピーク信号が出力されている状態が正常状態と言える。この際、CPU61は、2つのピーク信号のCCD画素番号を、それぞれN1、N2として検出する。
次に、CPU61は、検出信号の波形のチェックを行う(S107)。対向する位置にあるセンサユニット2の光が強すぎる場合、例えば、検出信号の波形(波形レベル)の少なくとも一部が所定の閾値を超える場合(S107でNO)、S103に戻り、例えば、露光時間をより短くする等の設定値の変更(再設定)を行う。そして、今度、S107でチェックされる検出信号の波形は、より光強度が弱い状態となっているはずである。そして、その信号レベルが適正である場合(S107でYES)、例えば、検出信号の波形の少なくとも一部が所定の閾値以下である場合、S108に進む。
以上の動作を、各センサユニット(実施形態1の場合、4つ)で実行し、すべての信号が最適化されると、CPU61は、CPU61内部の不揮発性メモリに記憶されている、2つのピーク信号のCCD画素番号を読み出す(S108)。ここで、読み出される値は、前回電源が入っていた時までに座標入力装置の設置位置(センサバー1L及び1Rの相対的な設置位置)を表すパラメータとして記録されたものである。読み出されたCCD画素番号をそれぞれN1p、N2pとする。そして、CPU61は、S104で取り込んだ出力信号に含まれる2つのピーク信号に対応するCCD画素番号N1、N2を不揮発性メモリに記録する(S109)。これにより、不揮発性メモリに記録されていたCCD画素番号の値は、今回、記録される値に更新されることになる。
次に、CPU61は、下記式により、不揮発性メモリに前回記録された2つのピーク信号と今回記録された2つのピーク信号を比較(変化分を算出)して、両者に変化があるか否かを判定する(S110)。
ΔN1=N1−N1p (10)
ΔN2=N2−N2p (11)
まず、変化量ΔN1及びΔN2が両方とも、予め決められている閾値Ntを超えていない場合、CPU61は、検知結果として座標入力装置の設置位置が、前回電源が入っていた時の設置位置からの変化が十分小さいと判定する(S110でNO)。その後、CPU61は、センサユニット2の相対的な位置関係を算出するセンサ位置算出処理を行う。θ1からθ8の値が分かっているため、幾何学的な計算により、各センサユニットの相対的な位置関係を算出することができる(S112)。尚、各センサユニットの相対的な位置関係の算出は、図8を用いて説明したが、詳細には、例えば、特開2014−048960号公報に開示される技術を使用することができる。
S113以降では、センサユニット2が投光した赤外光が、対向するセンサバー1に設けられた再帰反射部4で再帰反射され、その光を自身の受光部40で検出した時の信号レベルを最適化する。上述したとおり、センサバー1の配置は一意では無く、その配置に応じた検出レベルを最適化することで、安定した信号を得ることを目的とする。っそこで、CPU61は、設定する項目として、ラインCCD41のシャッター開放時間や赤外LED31の点灯時間、もしくは赤外LED31の駆動電流の設定を含む第1の検出モードで動作設定を行う(S113)。仮に最初の動作設定を光量が最大に得られるように設定すると、その時のラインCCD41の出力信号を取り込む(S114)。
CPU61は、検出信号の波形のチェックを行う(S115)。取り込まれた出力信号は、照明時のデータであり、図4(B)の様な波形となる。光が強すぎると、ラインCCD41のダイナミックレンジの範囲を超え、出力が飽和することになるので、正確な角度を算出することが困難となる。その場合は、S111で、検出信号の波形が不適と判定され(S115でNO)、S113に戻り、検出信号の波形(波形レベル)がより小さくなるように、再設定が行われる。再帰反射光を検出するので、S103〜S107での処理(つまり、第2の検出モード)でセンサユニット2の投光を受光部40で直接検出する場合と比べて、格段に投光する光量が大きくなるように設定することになる。
そして、波形レベルが最適と判定される場合(S115でYES)、CPU61は、照明無しの状態の信号Base_Data[N](図4(A)参照)を取得してメモリ64に記憶する(S116)。次に、CPU61は、照明有りの状態の信号Ref_Data[N](図4(B)参照)を取得してメモリ64に記憶する(S117)。
このようにして、全てのセンサユニットでのデータが取得されると、一連の初期設定処理が完了し、図12に示す通常のサンプリング動作に移行する。図12の処理の内容については後述する。
一方、S110において、変化量ΔN1及びΔN2のいずれかが閾値Ntを超えていた場合、CPU61は、検知結果として座標入力装置の設置位置が、前回電源が入っていた時の設置位置から大きく変化したと判定する(S110でYES)。その場合、CPU61は、座標入力装置の設置を再設定するための設置再設定処理を実行する。この設置再設定処理の詳細について図10を用いて説明する。
まず、CPU61は、座標入力装置の設置位置が変化したことをユーザに通知するために、その旨を示す通知として、ビープ音を出力すると同時にエラーを示すインジケータを点灯する(S401)。次に、CPU61は、第2の検出モードでラインCCD41の出力信号を取り込む(S402)。そして、CPU61は、座標入力装置の設置位置の変化がないか判定する(S403)。
このときの出力信号の検出波形の一例を図7(C)に示す。取り込んだ検出波形を実線で示し、ピーク信号に対応するCCD画素番号をそれぞれN1’、N2’とする。また、点線で示す波形は、S104で取り込んだ時の検出波形であり、ピーク信号に対応するCCD画素番号はそれぞれN1、N2である。ピーク信号に対応するCCD画素番号が変化するということは、センサバー1Lとセンサバー1Rの位置関係が変化していることを示している。そこで、それぞれの値の変化量をチェックする。
ΔN1=N1’−N1 (12)
ΔN2=N2’−N2 (13)
変化量ΔN1及びΔN2のいずれかが閾値Ntを超えている場合、検知結果として座標入力装置の設置位置の変化が継続していると判定する(S403でNO)。この場合は、S402に戻り、CPU61は、再度、ラインCCD41の出力信号を取り込む。このとき、N1’、N2’の値をそれぞれN1、N2に代入する。従って、再度、S403で式(12)および式(13)を計算するときは、前回取り込んだときの値と、新たに取り込んだ値とを比較することになる。
一方、変化量ΔN1及びΔN2のいずれも閾値Ntを超えていない場合、CPU61は、検知結果として座標入力装置の設置位置の変化が十分小さいと判定し、時間計測を開始した後に、同様に、S402に戻る。以上の処理を繰り返し、変化量ΔN1及びΔN2が閾値Ntを超えていない状態が一定時間経過した場合(S403でYES)、S404に進む。尚、この一定時間は、例えば、1秒から数秒程度の範囲の値で予め設定されている。
S404〜S409では、設置位置の変化に応じて更新が必要な設定情報を再設定する処理を行う。まず、S404〜S407の処理は、図9におけるS113〜S117で説明した処理と同様である。第1の検出モードでラインCCD41の出力信号を取り込み、波形レベルの調整及び記憶を行う。
次に、CPU61は、図9のS109と同じように、今回検出した2つのピーク信号に対応するCCD画素番号N1’、N2’を不揮発性メモリに記録する(S408)。そして、CPU61は、キャリブレーション処理を実行する(S409)。このキャリブレーション処理の詳細について図11を用いて説明する。
まず、CPU61は、第1の検出モードに設定し、ラインCCD41の出力信号を取り込む(S203)。そして、CPU61は、入力の有無を判定する(S204)。入力がない場合(S204でNO)、入力があるまで待機する。一方、入力がある場合(S204でYES)、CPU61は、出力信号に遮光部分が生成されているセンサユニットを選択する(S205)。CPU61は、その選択したセンサユニットを用いて、遮光部分が生成されている角度を各々算出する(S206)。そして、CPU61は、データの取得が完了したことを報知する(S301)。この報知は、例えば、完了を示すビープ音を出力する。
次に、CPU61は、表示領域8の4隅の全てのデータの取得が完了したか否かを判定する(S302)。取得が完了していない場合(S302でNO)、S203に戻る。一方、取得が完了している場合(S302でYES)、相対座標系から表示座標系へと変換するためのパラメータを算出する(S303)。ここで、算出されたパラメータは、S208(図12)における座標変換で使用される。キャリブレーション処理を完了すると、図12に示す通常のサンプリング動作に移行する。
図12は初期設定処理後の通常のサンプリング動作を示すフローチャートである。
まず、CPU61は、第2の検出モードに設定し、ラインCCD41の出力信号を取り込む(S201)。次に、CPU61は、取り込んだ出力信号に基づいて、座標入力装置の設置位置が変化したか否かを判定する(S202)。この処理は、図10のS402、S403と同様である。座標入力装置の設置位置が大きく変化した場合(S202でYES)、CPU61は、設置再設定処理を実行する(S209)。この処理の内容は図10で説明した通りである。
一方、座標入力装置の設置位置が変化していない場合(S202でYES)、S203以降の処理が実行される。通常の取込動作(第1の検出モード)として、センサユニット2が投光した赤外光が、対向するセンサバー1に設けられた再帰反射部4で再帰反射され、その光を自身の受光部40で検出した時の信号を検出する(S203)。その時のデータは、Norm_data[N]であり、仮にタッチ操作があって光路を遮ると、図4(C)のように、画素番号Ncの辺りで光信号が検出できなくなる。
CPU61は、いずれかのセンサユニット2で、このような光の遮光部分が生成されたか否か、つまり、入力の有無を判定する(S204)。入力が無いと判定される場合(S204でNO)、S201に戻る。一方、入力が有ると判定される場合(S204でYES)、前述の図11の説明と同様に、CPU61は、センサユニットの選択(S205)、角度算出(S206)を行う。ここで算出された角度と、各センサユニットの位置関係の情報を用いて、CPU61は、相対座標系での指示位置の座標を算出する(S207)。尚、指示位置の座標の算出は、例えば、特開2014−048960号公報に開示される技術を使用することができる。各センサユニットの位置関係の情報は、図9のS112で算出されている。そして、算出した指示位置座標を表示座標系に変換して、その座標値を外部機器に外部機器に出力(送信)する(S208)。
以上説明したように、実施形態1によれば、座標入力装置の設置位置の変化を検出して、その旨をユーザに通知して、キャリブレーション処理等の再設定処理を自動的に実行することで、ユーザ操作の負担を軽減し使い勝手を改善することができる。また、座標入力装置の初期設定処理において、座標入力装置の現在の設置位置と過去の設置位置との変化を検出し、再設定処理を自動的に実行することで、ユーザが気付かないうちに位置が変化したような場合においても対応することができる。特に、座標入力装置を設置したまま長期間使用するような場合には大きな効果が得られる。
例えば、座標入力装置の使用後に設置した状態のままにしておき、後日再び使用するような場合、その間に何らかの原因によって設置位置がずれると、指示位置座標にずれが発生する。この状態でキャリブレーションを行わないまま使用してしまうと、指示位置座標のずれにより誤操作を引き起こす可能性があるが、実施形態1の構成を適用することによって、そのような事を未然に防止することができる。
<実施形態2>
実施形態1では、センサユニット2は、投光部30に赤外LED31を内蔵し、受光部40にラインCCD41等を内蔵する構成について説明している。実施形態2としては、カメラ等の撮像部を使用するシステムについても、実施形態1を適用することができる。
この場合、図8を例にすると、センサユニット2−L1、2−L2、2−R1及び2−R2には、撮像部が内蔵されている。各撮像部は、表示領域8の方向の画像を撮像し、他の撮像部の位置する角度を、マッチング等の画像認識処理を行うことで検出する。その結果、θ1からθ8までの角度を検出することができるので、実施形態1と同様の処理を実現することができる。
撮像部を使用するシステムにおけるタッチ検出は、画像認識処理で指示具(指等)の入力を検出する方法や、ペンを用いる方法がある。ペンを用いる方法では、例えば、ペン先にLEDを内蔵し、タッチ時にLEDを発光させ、その光を撮像部で検出することで入力の方向を検知する。
尚、以上の実施形態の機能は以下の構成によっても実現することができる。つまり、本実施形態の処理を行うためのプログラムコードをシステムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)がプログラムコードを実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、またそのプログラムコードを記憶した記憶媒体も本実施形態の機能を実現することになる。
また、本実施形態の機能を実現するためのプログラムコードを、1つのコンピュータ(CPU、MPU)で実行する場合であってもよいし、複数のコンピュータが協働することによって実行する場合であってもよい。さらに、プログラムコードをコンピュータが実行する場合であってもよいし、プログラムコードの機能を実現するための回路等のハードウェアを設けてもよい。またはプログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行する場合であってもよい。