(57)【要約】【課題】  センサと触覚刺激を生成するアクチュエータを備えた入力デバイスにおいて、多様なアプリケーションに応じてアクチュエータの駆動手段を柔軟に変更できるように高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動すること。【解決手段】  初期値や中間値を低い頻度で通信しあい、通信間の値をセンサ情報で更新して補完する状態変数を通じて、ホストコンピュータとローカルプロセッサの同期を取り、ローカルプロセッサの状態更新手段とアクチュエータ駆動手段を低い通信頻度で変更することで、多様なアプリケーションに対応する高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動することを可能とした。【選択図】      図１
2008257294.tif 000002
【特許請求の範囲】
【請求項１】
入力デバイスにユーザから加えられる作用を検出するセンサと、前記センサの検出結果に依存して駆動量を変更して前記ユーザの手または指の触覚を刺激するアクチュエータと、前記検出結果に依存して前記駆動量を算出する駆動量算出手段を有するローカルプロセッサと、パーソナルコンピュータ等のホストコンピュータと前記ローカルプロセッサの間で双方向に通信する通信手段と、を備えたデータ入力システムの触覚刺激生成方法であって、
前記ホストコンピュータは、前記センサの検出結果に依存して値が更新される状態変数とその更新手段を備え、
前記通信手段は、前記状態変数の初期値または中間値と、前記駆動量算出手段を指定する情報またはそのパラメータと、前記更新手段を指定する情報またはそのパラメータとを、前記ホストコンピュータから前記ローカルプロセッサへ送信し、
前記ローカルプロセッサは、前記状態変数の初期値または中間値と、前記センサの検出結果とから前記状態変数の現時点値を算出し、この状態変数の現時点値と前記駆動量算出手段を指定する情報またはそのパラメータとから前記アクチュエータの駆動量を算出することを特徴とする触覚刺激生成方法。
【請求項２】
入力デバイスにユーザから加えられる作用を検出するセンサと、前記センサの検出結果に依存して駆動量を変更して前記ユーザの手または指の触覚を刺激するアクチュエータと、前記検出結果に依存して前記駆動量を算出する駆動量算出手段を有するローカルプロセッサと、パーソナルコンピュータ等のホストコンピュータと前記ローカルプロセッサの間で双方向に通信する通信手段と、を備えたデータ入力システムの触覚刺激生成方法であって、
前記ローカルプロセッサは、前記センサの検出結果に依存して値が更新される状態変数とその更新手段を備え、
前記通信手段は、前記駆動量算出手段を指定する情報またはそのパラメータと、前記更新手段を指定する情報またはそのパラメータとを、前記ホストコンピュータから前記ローカルプロセッサへ送信し、
前記通信手段は、ローカルプロセッサにおいて更新された前記状態変数の現在値を、前記ローカルプロセッサから前記ホストコンピュータへ送信し、
前記ローカルプロセッサは、前記状態変数の初期値または中間値と前記センサの検出結果とから前記状態変数の現時点値を算出し、この状態変数の現時点値と前記駆動量算出手段を指定する情報またはそのパラメータとから前記アクチュエータの駆動量を算出することを特徴とする触覚刺激生成方法。
【請求項３】
請求項１または請求項２記載の触覚刺激生成方法において、
前記駆動量算出手段は、前記状態変数の変化に対して駆動量が連続的に変化するように算出することを特徴とする触覚刺激生成方法。
【請求項４】
請求項１または請求項２記載の触覚刺激生成方法において、
前記状態変数をディスプレイ上のカーソル位置を表す変数とし、
また前記更新手段を一時点前のカーソル位置と前記センサの検出結果に基づいて次の時点のカーソル位置を決定する手段とし、
さらに前記駆動量算出手段のパラメータをディスプレイ上のアイコンの位置に関する情報またはメニュー項目の境界位置に関する情報を表すパラメータとし、
前記駆動量算出手段は、カーソル位置がディスプレイ上のアイコンの位置またはメニュー項目の境界位置に近づくにつれて、徐々に駆動量を変化させて行くことを特徴とする触覚刺激生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザの操作を検出するセンサの情報に基づいて、アクチュエータを駆動してユーザの手や指の触覚を刺激する触覚刺激生成装置において、センサ情報に対して遅延なく高速に触覚刺激を生成する方法に関する。
【背景技術】
【０００２】
近年、ハプティック・ユーザインターフェイスに関する研究が盛んに行われているが、専用プロセッサを用いずに、パーソナルコンピュータ等の汎用のコンピュータを用いてハプティック・ユーザインターフェイスを制御する場合には、マイクロソフト社（登録商標）のウィンドウズ（登録商標）のようなノンリアルタイムのＯＳ（オペレーティングシステム）を用いることになり、センサ情報に対して生成する触覚刺激の生成タイミングが遅れるため、ユーザの受ける触覚刺激がガタガタと不測のタイミングで変化して操作性が大幅に低下することが問題であった。
【０００３】
一方、リアルタイムで動作するＯＳを備えた専用プロセッサを導入する場合には、汎用性の高いウィンドウズ（登録商標）との連携を取ることが難しく、多様なアプリケーションに対応するための柔軟性に乏しかった。
【０００４】
こうした現状に対して、本発明では、ウィンドウズ（登録商標）等の汎用ＯＳで使用されている状態変数（状態変数とは、初期値、中間値が与えられたときに、前の時点の状態から次の時点の状態を定める更新規則によって、継時的に次々と値を定めて行く変数のことを言う）をローカルプロセッサの側でも再現する仕組みを導入することによって、遅延があっても深刻な影響を及ぼすことのない、状態変数の初期値や中間値、あるいはゆっくり変化する情報である更新手段を指定する情報やそのパラメータのみをウィンドウズ（登録商標）側からローカルプロセッサ側に比較的少ない頻度で送信しながら、高頻度に計測するセンサ情報を用いて逐次状態変数値を更新し、迅速に遅延なくアクチュエータを駆動する制御方式を与える。
【０００５】
さらに本発明ではアクチュエータを駆動する際に、状態変数値の変化に対して、連続的に（徐々に）駆動量を変化させるようにして、駆動量がアナログ的に大小の量的な違いをもってユーザの指や手に作用するようにすることによって、実際のイベントが発生してしまう前に、ユーザが事前にイベントの発生を予測する情報として微細な駆動量の変化を感じられるようにしている。それによってユーザは事前に操作の修正を行うことが可能となり、誤入力の発生を防ぐことができる。あるいは正しい操作をガイドする手掛かりとして連続的な刺激量の変化を利用することができる。このように連続的に駆動量を変えていく際には、センサ情報の変化に対して遅延なく迅速に駆動量を変化させなければ、ユーザはガタガタとした不快な駆動量の変化を感じることになり、それを防ぐためにも上記の遅延を克服する方式が有効である。連続的に変化する触覚刺激があっても、それが遅れて提示される場合には、ユーザに混乱を招くことになる。本発明の方式を利用することによってユーザは遅延なく与えられる駆動量の連続的な変化を手掛かりとして、誤差が軽微な段階で誤りを修正し、操作を正しい方向に導くことができる。
【０００６】
本発明に関連する先行技術としては以下の特許文献を上げることができる。
【特許文献１】特開２００２−３０７３３６号公報
【特許文献２】特開２００４−８２２９３号公報
【特許文献３】特開２００６−２８６０１６号公報
【０００７】
特許文献１にはマスターとスレーブという表現でホストとローカルのプロセッサの役割が示されているが、本発明で問題にされている遅延に対する対策は示されていない。また特許文献２には、ローカルとホストの間の通信遅れの克服法が示されているが、問題設定がロボットの制御であるため、遅れそのものを回避することは不可能であって、遅れに関する情報をユーザに提示することでユーザが遅れを認知しながらロボットを操作できるようにする方法が示されている。
【０００８】
特許文献３には、その請求項６で「前記ホストコンピュータから前記入出力デバイスに送られた命令に対応して、ソフトウェアプロセスを実行するための前記ホストコンピュータから分離した局部的プロセッサであって、前記ソフトウェアプロセスは、前記アクチュエータにより前記ユーザによる操作が可能なオブジェクトに作用するべき抵抗の程度を表す、減衰定数を設定して、前記ソフトウェアプロセスは、前記アクチュエータに作用させられて前記力の前記出力を生じるべき力の値を推論しており、そこでは前記推論は、前記減衰定数及び前記ユーザによる操作が可能なオブジェクトの速度に少なくとも部分的に基く、局部的プロセッサと、前記接地面に対する前記ユーザによる操作が可能なオブジェクトの動きを検出するための少なくとも１つのセンサであって、前記少なくとも１つのセンサは、前記センサの信号の表現を前記局部的プロセッサに報告する、少なくとも１つのセンサと、を具備することを特徴とする入出力デバイス」との記載があり、本発明と同様にローカルプロセッサが導入されているが、この特許では特定用途のための専用システムを想定しており、ホスト側のノンリアルタイムＯＳによる遅延の問題は配慮されていない。また汎用性に対する配慮もしておらず、ホスト側の状況やアプリケーションの違いに応じてローカル側の動作を変更する必要がないため、「状態変数の値をホストとローカルで共有する仕組み」や「駆動量算出手段や状態変数更新手段やそのパラメータをホストからローカルへ伝える通信手段」も存在せず、こうした概念の欠如のために、状況やアプリケーションに応じて柔軟にローカルプロセッサの動作を変更することができない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
特に本発明で想定している触覚刺激提示手段を備えた入力デバイスにおいては、センサが検出する情報の変化に対して、ユーザの触覚に作用するアクチュエータが連続的に駆動量を変えるような場面では、センサ入力に対するアクチュエータ動作の遅延は、触覚にガタガタした感触と感じられて、ユーザに不快感を与えると共に、微小なずれの段階でユーザが操作を修正することを難しくし、デバイスの操作性を大きく低下させる。特にウィンドウズ（登録商標）のように普及しているＯＳでは、リアルタイム処理を行えないため、高頻度に出力する信号には上述した遅延が生じることが避けられず、リアルタイムＯＳを備えたローカルプロセッサを介在することが必要とされるが、ウィンドウズ（登録商標）側の多様な状況の変化に応じて、柔軟にローカルプロセッサの動作を変えることが難しかった。
【００１０】
本発明は、上述のかかる事情に鑑みてなされたものであり、触覚刺激提示手段を備えた入力デバイスにおいて、上記の遅延を克服しながら、柔軟にローカルプロセッサの動作を変えることを可能とする触覚刺激生成方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明では、触覚刺激提示手段を備えた入力デバイスにおいて、センサが検出するユーザの操作に対して、アクチュエータが連続的に駆動量を変えてユーザの触覚に作用する際に、連続性を前提として値を更新する状態変数の概念を導入し、その値が連続性に変化することに基づき、状態変数の初期値や中間値のみを比較的少ない頻度でホストとローカルプロセッサの間でやり取りすることで定期的に両者の状態変数値の同期を取る。ここで頻度の少ない通信であれば、遅延のある通信手段で十分に対応することができる。
【００１２】
ここで入力信号に関しては遅延なくホストに伝わることを前提として、入力情報であるセンサ情報は同じ値が常時遅延なく、ホストとローカルプロセッサに伝わるものとし、同じセンサ情報を用いてそれぞれの側で状態更新を行なうことで、上記の同期を取る間の状態変数の値を補間することでホストとローカルプロセッサの両者で常時状態変数値を一致するように共有することができる。
【００１３】
こうしてホストとローカルプロセッサの間で常時同じ値になるように共有する状態変数を通じてアクチュエータを駆動することで、上記の遅延の問題を回避することができる。
【００１４】
あるいは汎用性がこれよりも損なわれてしまうが、ローカルプロセッサの側で状態変数の値を計算し、通信手段を通じてそれをホスト側に送ることで、状態変数の値を共有して遅延の問題を回避することもできるが、現状のウィンドウズ（登録商標）ではローカルプロセッサにそのような状態変数を導入することが難しく、この方法を取る場合には、ウィンドウズ（登録商標）に代わる新たなＯＳが必要とされる。
【００１５】
いずれの場合にも、状態変数の更新手段そのもの、あるいはそのパラメータ、及びアクチュエータの駆動量算出手段そのもの、あるいはそのパラメータを、通信手段を用いてホストからローカルプロセッサに転送することで、ウィンドウズ（登録商標）側のディスプレイ画面情報の変化等、アプリケーション側の各種の状況の変化に応じて、アクチュエータの動作を柔軟に変更することを可能になる。なおこうした状況の変化は、センサ情報の変化やアクチュエータ駆動信号の変化よりははるかに少ない頻度で生じるので、遅延のある通信手段でも支障なく対応することができる。
【００１６】
なお状態変数自体は連続的に変化するものであっても、それが適当な閾値を超えたときに、急激にアクチュエータを駆動するようにしても良い。この場合にも状態変数自体の変化は連続的であるし、状態変数の更新手段そのもの、あるいはそのパラメータ、及びアクチュエータの駆動量算出手段そのもの、あるいはそのパラメータは急激に変化することはないので遅延のある通信手段でも対応することができる。この方法によれば、通信する情報は緩やかに連続的に変化するものであるので、少ない頻度で伝送することで済ませながらも、目的の地点、時点で遅れることのないタイミングで急激にアクチュエータを動作させることができる。
【００１７】
本発明の方法は、このようにアクチュエータを不連続、急激に駆動する場合にも利用できるが、ユーザの知覚上は、アクチュエータの駆動量が連続的に変化しているときに、通信の遅延のためにガタガタと駆動量が不測に変化するとそれを極めて不快に感じるので、本発明が真価を発揮するのは、状態変数の変化に対してアクチュエータの駆動量を連続的に変化させる場合と言えよう。
【００１８】
例えば、触覚に加える刺激を通じてＧＵＩの操作を支援する場合には、ディスプレイ上のカーソル位置を表す変数を上記の状態変数と看做せば良い。カーソル位置はユーザが加える操作、例えばマウスの運動に対して連続的に変化するし、一時点前の地点を示す座標値にマウスの運動によって定まる値が加えられて次の時点の地点の座標値が定まるので、上述した状態変数の定義がそのまま当てはまる。
【００１９】
この場合には、カーソルがディスプレイ上を動くときに、その位置に応じてアクチュエータの駆動量が変化し、ユーザは触覚を通じてディスプレイ上のグラフィクスの内容を把握できると都合が良い。
【００２０】
例えば、カーソルがアイコンの一つに近づくときに徐々にアクチュエータが動いて指を刺激して触覚的にそのことを確認できると良い。
【００２１】
あるいはカーソルがメニューの項目を横切るときにはカーソルが項目間の境界に近づくときに徐々にアクチュエータが動いて指を刺激して触覚的に近づいていることを確認できると良い。
【００２２】
こうした場合には、アクチュエータを駆動するローカルプロセッサにアイコンの位置やメニュー項目の境界位置を伝達する必要がある、こうした位置情報は駆動量算出手段のパラメータとしてホストからローカルプロセッサに伝送される。また、駆動量算出手段を指定する情報として、駆動量を定める関数そのものやそれを指定するインデックスも、ホストからローカルプロセッサに伝送されて、関数の形態を変更できることが望ましい。これらの情報は、カーソルの移動やアクチュエータの駆動のための信号に比べるとずっと少ない頻度で通信することで伝達できるので遅延の影響を受けずに済む。
【００２３】
またマウスの感度をホストの側で変更したり、マウスの動きに対するカーソルの動きに加速度を導入したりすることで、アプリケーションの変化により柔軟に対応できるが、このような場合には、状態変数を更新する手段をホスト側で変更できるようにすると良い。ホスト側で更新手段そのものやそのパラメータを変更すると、状態変数の値を同期させる都合上、この変更した情報をローカルプロセッサに伝えて、ローカルプロセッサ側の処理にも同じ変更を加える必要がある。この変更は高い頻度に生じるものでないので遅延のある通信で対応することができる。
【００２４】
更新手段やそのパラメータを変更すると、状態変数が持つ情報量が変わってくる。例えばマウス感度を落とすと元々のセンサ情報の持つ情報量が失われて、マウスの動きの情報は間引きされたり切り捨てられたりしてカーソル位置に反映されることになる。ホスト側の汎用性を最大限確保するためには、劣化する前の生のセンサ情報をホスト側に伝えておくことが望ましい。したがって、上述した２つの状態変数共有法のうち、後者の方法は汎用性を維持する上では好ましくない。
【発明の効果】
【００２５】
上述のごとく、本発明によれば、多様なアプリケーションに応じてアクチュエータの駆動手段を柔軟に変更できるように高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動することが可能であり、特に触覚刺激提示手段を備えた入力デバイスにおいて、誤入力を防ぎ、操作をガイドするようにユーザの操作に対して連続的にアクチュエータ駆動量を変化させる場合に、ユーザの不快感をなくし、操作性を向上する目的に多大の効果がある。
【発明を実施するための最良の形態】
【００２６】
以下本発明の実施の形態を説明する。図１は、第１の実施の形態による触覚刺激生成方法を説明するためのデータ入力システム５０の機能ブロック図である。
ここで、データ入力システム５０は、パーソナルコンピュータ等のホストコンピュータ８、マウス等の入力デバイスを有し、その間はＵＳＢケーブル、無線、赤外線等の通信線９で接続されている。
【００２７】
ホストコンピュータ８は、ＣＰＵの機能によって演算処理を実行する演算部６１、データを記憶する記憶部６２および入力デバイス４０との間でデータを伝送する伝送部６３から構成されている。またホストコンピュータ８はディスプレイ４と繋がり表示出力を行っている。また、記憶部６２には、入力デバイス４０を制御するための状態変数６７が保存されている。演算部６１は、ディスプレイ４に対する表示出力処理を行う表示出力手段６４、状態変数を更新する状態変数更新手段６５、およびデータの送受信処理を実行する送受信処理手段６６を備えている。なお、通信手段５１は、伝送部４１，６３と通信線９が一体となって構成される。
【００２８】
一方、入力デバイス４０は、ＣＰＵの機能によって演算処理を実行するローカルプロセッサ１０、ホストコンピュータ８との間でデータ伝送を行う伝送部４１、位置検出用のセンサ１４、図示しない突起等を介して触覚刺激を発生させるアクチュエータ１２で構成されている。また、ローカルプロセッサ１０は、センサ１４から信号を入力するデータ入力処理手段４２、データの送受信処理を実行する送受信処理手段４３、アクチュエータ１２の駆動量を計算する駆動量算出手段４４およびこの計算結果に基づいてアクチュエータ１２に対して制御信号を出力する制御信号出力手段４５を備えている。
【００２９】
次に上記の構成を有するデータ入力システム５０を例に触覚刺激生成方法を説明する。
図２は、第１の実施の形態による触覚刺激生成方法の信号の流れの説明図である。センサ１４の検出した情報Ｚはローカルプロセッサ１０に入力し、まずＳ（ｔ）＝Ｇ（Ｚ，Ｓ（０））の式によって状態変数の現時点ｔにおける値Ｓ（ｔ）を決定するのに使われる。情報Ｚは送受信処理手段４３を介してホスト８側にも送られており、演算部６１の状態変数更新手段６５により同じ式で状態変数値が算出される。ここでホストコンピュータ８側からローカルプロセッサ１０側へ送られる情報Ｓ（０）は状態変数の初期値であるが、実際には周期的にホストコンピュータ８から遅延のある通信手段５１を使って送られてくる中間値を使っても良い。また実際には次の更新式によって１時点前の値から更新する。Ｓ（ｔ）＝Ｈ（Ｚ，Ｓ（ｔ−１））。しかしながら、この式で前の時点の値を辿ってゆくと中間値、または初期値に辿り着くのでここでは簡単のために、Ｓ（ｔ）＝Ｇ（Ｚ，Ｓ（０））の式で表している。初期値や中間値は低い頻度で伝送されるので通信に遅延があっても問題にならない。あるいはより好ましくは、初期値や中間値に、それを送った時点の時刻情報を付随して伝送するようにすると、その時刻情報に基づいて、より正確に現時点の状態変数値を推定できるようになる。こうして状態変数値はローカルプロセッサ１０の駆動量算出手段４４によって常時ホスト側と同じ値になるように再現される。ここで使われる関数Ｇは、ホスト８からローカルプロセッサ１０側に遅延のある通信手段５１によって伝送される。なお、状態変数更新手段（更新手段）６５を指定する情報として関数Ｇそのものを伝送しなくともそのインデックスやパラメータを送るようにしても良い。
【００３０】
アクチュエータ１２の駆動量Ｕは、こうして逐次更新されてホストコンピュータ側の値と一致するように同期の取られる状態変数値Ｓ（ｔ）と、ＧＵＩのメニュー項目の境界位置やアイコン位置などを表すパラメータＰ１，Ｐ２・・・などを用いてＵ＝Ｆ（Ｓ（ｔ），Ｐ１，Ｐ２，・・・）の式で算出される。ここで使われる関数Ｆはホストからローカルプロセッサ側に遅延のある通信手段によって伝送される。関数Ｆそのものを伝送しなくともそのインデックスやパラメータを送るようにしても良い。パラメータＰ１，Ｐ２・・・もホストからローカルプロセッサ側に遅延のある通信手段によって伝送されるが、これらのパラメータはＺやＵに比べて変化が緩やかであるので遅延のある通信手段で伝送しても問題ない。
【００３１】
図３に、本発明の第２の実施の形態による触覚刺激生成方法の信号の流れを示す。機能構成に関する図１との違いは、状態変数６７と状態変数更新手段６５をローカルプロセッサ１０側に持たせることである。その他の機能は図１と同様である。
触覚刺激生成の手順は、図２と大部分は同じであるが、ホストであるパーソナルコンピュータに伝えられる情報は、ローカルプロセッサの更新手段で計算される状態変数値Ｓ（ｔ）であり、生のセンサ情報Ｚでない点が図２と異なっている。この方法でも同じ状態変数値Ｓ（ｔ）をホスト８とローカルプロセッサ１０で共有することができる。しかし前述したようにホストの受けるセンサ情報が修飾され、場合によって情報の劣化したものになるので、アプリケーションの汎用性を確保する上では不利となる。
【００３２】
以上の図２、図３中の符号１で示される通信は通常は高速に遅延が少なく行われる。一方、ホスト８がウィンドウズ（登録商標）のようにリアルタイムＯＳでないＯＳで動いている場合には、符号２で示される通信に遅延が生じる。符号３で示すようにＳ（ｔ）そのものでなく初期値または中間値であるＳ（０）を伝送するようにすれば、これらの値は頻繁に送る必要がないため遅延のある通信で対応できる。
【００３３】
図４には、本発明の触覚刺激生成方法を触覚刺激提示手段を備えたマウスに応用した例を示す。ホストであるパーソナルコンピュータ８とマウス内部に設けられたローカルプロセッサ１０は遅延のある通信線９で双方向に通信することができる。マウスの位置の変化を検出するセンサ１４が検出するセンサ情報は遅延なくパーソナルコンピュータ８に伝えられるが、パーソナルコンピュータ８内部のウィンドウズ（登録商標）で出力の計算に遅延が生じるため、パーソナルコンピュータ８からローカルプロセッサ１０に伝えられる情報には遅延が生じる。表示出力手段６４によって表示出力されるディスプレイ４の領域Ａ（符号５で示される）には例えばアイコンが表示さる。このときに触覚的にアイコンの位置を把握できるように、カーソル６が領域Ａに近づくときに徐々にアクチュエータ１２の駆動量を増加させて、マウスに設けられた突起１３を突出させて親指を刺激する。あるいは領域Ａがメニューの一つの項目を現すときには、その境界にカーソルが近づくときにアクチュエータの駆動量を増加させる。ここでディスプレイ上に設けられた座標系７で、カーソルの位置を示す座標値（ｘ，ｙ）が前述した状態変数となる。また領域Ａの位置や境界を表す（ｘ１，ｙ１），（ｘ２，ｙ２）がアクチュエータ駆動量算出手段４４のパラメータＰ１，Ｐ２・・・に該当する。
【００３４】
図５には、マウス１５に搭載したアクチュエータ１８、２０が突起を駆動して指を刺激する様子を示す。駆動量は１９に示される突起の突出する長さになる。この長さは連続的に変化して、図４のカーソル位置（ｘ，ｙ）がアイコンの位置やメニューの境界を示す（ｘ１，ｙ１），（ｘ２，ｙ２）に近づくときに徐々に増加する。１６，１７はそれぞれマウスの右、左ボタンである。突起は２１に示すように引っ込んだり、２３に示すように突出したりする。ここでは４つの突起が独立に駆動される。
【００３５】
図６には、実際に試作したデバイスの内部構造を透視図で示す。上述した原理で動作する触覚刺激生成装置が内蔵されている様子が示されている。以下にこの試作デバイスの触覚刺激生成方法の仕様を具体的に示す。
【００３６】
ここではＵＳＢでホストであるＰＣ（パーソナルコンピュータ）とマウス内のローカルプロセッサとの間の通信を行う。ＵＳＢからマウスには１００ミリ秒毎に送る６４バイトの信号を送るがその内容は以下の通りである。
６４バイトのうちの最初の７バイトで３つのアクチュエータに共通の情報を指定する。
また、残りの５７バイトを１９バイトずつ３つに分けて、３つのアクチュエータの各々に対して独立に、各１９バイトを使って下記に述べる駆動関数の種類とそのパラメータ情報を指定する。
【００３７】
６４バイトの中の第１〜第３バイトでディスプレイ解像度とマウス解像度のスケール変換率を、第４〜第５バイトでディスプレイカーソル位置のｘ座標を、第６〜第７バイトでディスプレイカーソル位置のｙ座標を、第８〜第２６バイトでアクチュエータ１の関数の種類とそのパラメータを、第２７〜第４５バイトでアクチュエータ２の関数の種類とそのパラメータを、そして第４６バイトから第６４バイトでアクチュエータ２の関数の種類とそのパラメータを指定する。すなわち第１〜第３バイトで上述した関数Ｇのパラメータを伝送し、第４〜第７バイトで状態変数であるカーソル座標値の初期値や中間値を伝送する。また第８〜第６４バイトで３つのアクチュエータに対して、前述したアクチュエータ駆動量算出手段を示す関数Ｆのインデックスとパラメータを伝送する。これらの伝送は１００ミリ秒毎に行われ、この程度の低頻度で行えば、ウィンドウズ（登録商標）の処理の遅延を吸収できる。一方で、ローカルプロセッサからＰＣへは１０ミリ秒毎にマウスの座標情報やボタンのクリック情報が伝送され、こちらは遅延なく高頻度に伝送される。
【００３８】
上述したようにＰＣ側で持っているディスプレイ上のカーソル位置の情報を１００ミリ秒毎にＵＳＢでマウス内のローカルプロセッサに伝達する。１００ミリ秒では時間分解能が荒すぎるので、ローカルプロセッサ内部のファームウェアによって、光学的位置センサが位置変化分Δｘ、Δｙを検出する度に、次式でディスプレイカーソル位置を更新し、マウス内部でディスプレイカーソル位置をエミュレートし、より高い時間分解能でディスプレイカーソル位置を得るようにする。これが上述した状態変数の更新手段Ｇに相当する処理になる。
Ｘ＝Ｘ＋Δｘ／α
Ｙ＝Ｙ＋Δｙ／α
ここで、Ｘ，Ｙは直近で与えられているディスプレイカーソルの位置。Δｘ、Δｙはマウス内部で光学的センサによって検出されるマウス移動量。αは第１〜第３バイトで与えられるスケール変換率。なおスケール変換率は、ＰＣ側のドライバで用いられている係数である。なおαは必要な精度が得られるように何らかの表現で表して（最大３バイト）、下記の式に用いる。このαはＧのパラメータである。
【００３９】
アクチュエータの駆動量を算出する駆動関数（ディスプレイカーソル座標に対してアクチュエータ駆動量を定める関数）としては次の４種類（ステップ関数、ピラミッド関数、リッジ関数、線形関数）を用意して、各アクチュエータに対して用意された１９バイトの中の最初の１バイトを使って、次のように関数の種類を指定する。また残り１８バイトを以下のような関数のパラメータを指定するために使用する。なおパラメータは関数の種類毎に内容が変わるので関数毎に解釈を変えるように注意する。なおいずれの関数を用いる場合も、現時点の駆動量を優先して、マウスを動かすときに駆動量が現時点の量から連続的に変わるように配慮する。マウスを動かしたとたんに駆動量が不連続に変化すると、人は極めて不快に感じる。しばらく動かしてから、ＧＵＩと同期して意味を持って不連続に変化する分には、人は不快に感じない。
【００４０】
ステップ関数（１９バイトの内の第１バイトを‘Ｓ’にして指定する）：
マウス内のローカルプロセッサでエミュレートして求めたディスプレイカーソル座標をＸ，Ｙとする。この座標に対するアクチュエータ駆動量Ｕを次式で定める。ＸＡ<ＸＢ、ＹＡ<ＹＢとする。
Ｘ<ＸＡまたはＸＢ<ＸのときにＳＸ＝−１、ＸＡ<Ｘ<ＸＢのときにＳＸ＝１。
Ｙ<ＹＡまたはＹＢ<ＹのときにＳＹ＝−１、ＹＡ<Ｙ<ＹＢのときにＳＹ＝１。
Ｕ  ＝ＭＩＮ（ＳＸ，ＳＹ）＊振幅。ここで、（ＭＩＮ（ＳＸ，ＳＹ）はＳＸ、ＳＹのうち小さい方を選ぶ関数）。
以上で用いた５つのパラメータＸＡ，ＸＢ、ＹＡ，ＹＢ、振幅はそれぞれ２バイトで表して、この順で、残り１８バイトの最初の１０バイトを使って表現する。
【００４１】
ピラミッド関数（１９バイトの内の第１バイトを‘Ｉ’にして指定する）：
マウス内のローカルプロセッサでエミュレートして求めたディスプレイカーソル座標をＸ，Ｙとする。この座標に対するアクチュエータ駆動量Ｕを次式で定める。ＸＡ<ＸＣ<ＸＢ、ＹＡ<ＹＣ<ＹＢとする。
Ｘ<ＸＡまたはＸＢ<ＸのときにＳＸ＝０。
ＸＡ<Ｘ<ＸＣのときにＳＸ＝１−（ＸＣ−Ｘ）／（ＸＣ−ＸＡ）。
ＸＣ<Ｘ<ＸＢのときにＳＸ＝１−（Ｘ−ＸＣ）／（ＸＢ−ＸＣ）。
Ｙ<ＹＡまたはＹＢ<ＹのときにＳＹ＝０。
ＹＡ<Ｙ<ＹＣのときにＳＹ＝１−（ＹＣ−Ｙ）／（ＹＣ−ＹＡ）。
ＹＣ<Ｙ<ＹＢのときにＳＹ＝１−（Ｙ−ＹＣ）／（ＹＢ−ＹＣ）。
Ｕ  ＝ＭＩＮ（ＳＸ，ＳＹ）＊振幅。
以上で用いた７つのパラメータＸＡ，ＸＢ、ＸＣ，ＹＡ，ＹＢ、ＹＣ，振幅はそれぞれ２バイトで表して、この順で、残り１８バイトの最初の１４バイトを使って表現する。
【００４２】
リッジ関数（１９バイトの内の第１バイトを‘Ｒ’にして指定する）：
マウス内でエミュレートして求めたディスプレイカーソル座標をＸ，Ｙとする。この座標に対するアクチュエータ駆動量Ｕを次式で定める。
Ｘ<ＸＡまたはＸＢ<ＸのときにＳＸ＝０。
ＸＡ<Ｘ<ＸＣのときにＳＸ＝１−（ＸＣ−Ｘ）／（ＸＣ−ＸＡ）。
ＸＣ<Ｘ<ＸＢのときにＳＸ＝１−（Ｘ−ＸＣ）／（ＸＢ−ＸＣ）。
Ｙ<ＹＡまたはＹＢ<ＹのときにＳＹ＝０。
ＹＡ<Ｙ<ＹＣのときにＳＹ＝１−（ＹＣ−Ｙ）／（ＹＣ−ＹＡ）。
ＹＣ<Ｙ<ＹＢのときにＳＹ＝１−（Ｙ−ＹＣ）／（ＹＢ−ＹＣ）。
Ｕ  ＝ＭＡＸ（ＳＸ，ＳＹ）＊振幅。ここで、（ＭＡＸ（ＳＸ，ＳＹ）はＳＸ、ＳＹのうち大きい方を選ぶ関数）。
以上で用いた７つのパラメータＸＡ，ＸＢ、ＸＣ，ＹＡ，ＹＢ、ＹＣ，振幅はそれぞれ２バイトで表して、この順で、残り１８バイトの最初の１４バイトを使って表現する。
【００４３】
線形関数（１９バイトの内の第１バイトを‘Ｌ’にして指定する）：
マウス内でエミュレートして求めたディスプレイカーソル座標をＸ，Ｙとする。この座標に対するアクチュエータ駆動量Ｕを次式で定める。この式によれば、パラメータとして与えられる３点：（ＸＡ，ＹＡ，ＺＡ）、（ＸＢ，ＹＢ，ＺＢ）、（ＸＣ，ＹＣ，ＺＣ）を通過する平面を想定し、（Ｘ，Ｙ）に対する駆動量をこの平面上のＺとして求めることになる。なお計算を簡単とするために、（ＸＣ，ＹＣ）を原点として、ＸＹ方向に座標軸を想定したときに、（ＸＡ，ＹＡ）はＸ軸上に、（ＸＢ，ＹＢ）はＹ軸上にあるように上記の３点を選ぶようにする。そうするとＹＡ＝ＹＣ、ＸＢ＝ＸＣとなり、任意の点（Ｘ，Ｙ）におけるＨは次式によって求まる。
Ｚ＝（ＺＡ−ＺＣ）（Ｘ−ＸＣ）／（ＸＡ−ＸＣ）＋（ＺＢ−ＺＣ）（Ｙ−ＹＣ）／（    ＹＢ−ＹＣ）＋ＺＣ。
Ｕ＝Ｚ。
ここで定義したＺは以前に定義したセンサ情報を表わすＺと同じ記号でも意味が異なるので混同しないように注意する必要がある。
以上で用いた７つのパラメータＸＡ，ＸＣ，ＹＢ、ＹＣ，ＺＡ，ＺＢ、ＺＣはそれぞれ２バイトで表して、この順で、残り１８バイトの最初の１４バイトを使って表現する。
【００４４】
以上のように求めたＵは、最大値３０度を超えたら３０度に切り捨て、最小値−３０度以下となったら−３０度に切り上げる。こうしてＵを−３０度から３０度の範囲に制限する。
【００４５】
ホストであるＰＣ側に搭載するドライバ用ソフトウェアの仕様は次のように定める。
【００４６】
入力（マウスの座標とボタンの情報）：
ドライバとＵＳＢとの間では、ドライバはウィンドウズ（登録商標）の標準スクロールホイール付マウスの規格に則った（のっとった）USB信号を通じて、標準マウスの場合と互換性のある形式で、座標やマウスボタンクリックの情報を得る。ドライバは、これらの情報に基づき、画面上のマウスカーソルを動かしたり、各種イベント関数を起動したりする。
ドライバとアプリケーションソフトウェアとの間では、アプリケーションソフトウェアはウィンドウズ（登録商標）標準のマウス用関数（あるいはそれと同形式の関数）を用いて座標（注意：マウスの位置ではなく画面のカーソルの位置を示す座標情報）やマウスボタン操作の情報を得られるようにする。
【００４７】
出力（アクチュエータ制御のための情報）：
ドライバとＵＳＢとの間では、ＵＳＢを通じて入力デバイスへアクチュエータ制御用の100ミリ秒ごとに６４バイトの信号を出力する。この64バイトの情報は、下記のServoControl( BYTE* )によってメモリの所定のアドレスから始まる６４バイトに書き込まれ、ドライバは100ミリ秒毎にこのアドレスからの64バイトを読み出してＵＳＢを通じて入力デバイス側に送信する。
【００４８】
ドライバとアプリケーションソフトウェアとの間では、アプリケーションソフトウェアは、本件専用のアクチュエータ制御用関数ServoControl( BYTE* ScaleTranslation, BYTE* DisplayCursorPositionX, BYTE* DisplayCursorPositionY, BYTE* Parameters_for_ServoUnit1 BYTE* Parameters_for_ServoUnit２ BYTE* Parameters_for_ServoUnit３)を用いて、アクチュエータ駆動量を指定し、これが上記のアドレスから始まる64バイトに記入され、それが100ミリ秒毎に周期的に読み出されてＵＳＢを通じて入力デバイスに伝えられる。ScaleTranslation は３バイトのバイト配列、DisplayCursorPositionXとDisplayCursorPositionYはそれぞれ２バイトのバイト配列、Parameters_for_ServoUnit1，Parameters_for_ServoUnit2 Parameters_for_ServoUnit3はそれぞれ３つのアクチュエータ用の駆動関数の種類とパラメータを定める各１９バイトのバイト配列である。
【００４９】
ユーザはマウスが移動するイベントが発生する度に起動する関数の中で、まずマウスカーソルの画面上の座標を取得し、この座標値に基づき上記の計64バイトの情報を決めて、上記の関数ServoControlを呼び出して、この６４バイトの情報を上記のアドレスに書き込む。
【００５０】
本発明は上述の実施の形態に限定されず、その趣旨を逸脱しない範囲で種々変形して実施することができる。たとえば、上記の実施形態では、触覚刺激生成装置をマウスへ搭載した場合を例として説明したが、任意の入力デバイス上で任意の触覚刺激（例えば触覚刺激など）を生成する装置を搭載する場合に、本発明の制御方法は有効である。
【図面の簡単な説明】
【００５１】
【図１】本発明の第１の実施の形態による触覚刺激生成方法を説明するためのデータ入力システム５０の機能ブロック図である。
【図２】本発明の第１の実施の形態による触覚刺激生成方法の信号の流れの説明図である。
【図３】本発明の第２の実施の形態による触覚刺激生成方法の信号の流れの説明図である。
【図４】本発明の触覚刺激生成方法を触覚刺激提示手段を備えたマウスに搭載した例を示すシステム構成図である。
【図５】触覚刺激提示手段を備えたマウスにおいて、アクチュエータで突起を駆動して親指の触覚を刺激する様子を示す図である。
【図６】本発明の触覚刺激生成方法を搭載した触覚刺激提示手段を備えたマウスの内部構造を示す透視図である。
【図１】
2008257294.tif 000003
【図２】
2008257294.tif 000004
【図３】
2008257294.tif 000005
【図４】
2008257294.tif 000006
【図５】
2008257294.tif 000007
【図６】
2008257294.tif 000008