説明

触覚刺激生成方法

【課題】 センサと触覚刺激を生成するアクチュエータを備えた入力デバイスにおいて、多様なアプリケーションに応じてアクチュエータの駆動手段を柔軟に変更できるように高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動すること。
【解決手段】 初期値や中間値を低い頻度で通信しあい、通信間の値をセンサ情報で更新して補完する状態変数を通じて、ホストコンピュータとローカルプロセッサの同期を取り、ローカルプロセッサの状態更新手段とアクチュエータ駆動手段を低い通信頻度で変更することで、多様なアプリケーションに対応する高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動することを可能とした。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザの操作を検出するセンサの情報に基づいて、アクチュエータを駆動してユーザの手や指の触覚を刺激する触覚刺激生成装置において、センサ情報に対して遅延なく高速に触覚刺激を生成する方法に関する。
【背景技術】
【0002】
近年、ハプティック・ユーザインターフェイスに関する研究が盛んに行われているが、専用プロセッサを用いずに、パーソナルコンピュータ等の汎用のコンピュータを用いてハプティック・ユーザインターフェイスを制御する場合には、マイクロソフト社(登録商標)のウィンドウズ(登録商標)のようなノンリアルタイムのOS(オペレーティングシステム)を用いることになり、センサ情報に対して生成する触覚刺激の生成タイミングが遅れるため、ユーザの受ける触覚刺激がガタガタと不測のタイミングで変化して操作性が大幅に低下することが問題であった。
【0003】
一方、リアルタイムで動作するOSを備えた専用プロセッサを導入する場合には、汎用性の高いウィンドウズ(登録商標)との連携を取ることが難しく、多様なアプリケーションに対応するための柔軟性に乏しかった。
【0004】
こうした現状に対して、本発明では、ウィンドウズ(登録商標)等の汎用OSで使用されている状態変数(状態変数とは、初期値、中間値が与えられたときに、前の時点の状態から次の時点の状態を定める更新規則によって、継時的に次々と値を定めて行く変数のことを言う)をローカルプロセッサの側でも再現する仕組みを導入することによって、遅延があっても深刻な影響を及ぼすことのない、状態変数の初期値や中間値、あるいはゆっくり変化する情報である更新手段を指定する情報やそのパラメータのみをウィンドウズ(登録商標)側からローカルプロセッサ側に比較的少ない頻度で送信しながら、高頻度に計測するセンサ情報を用いて逐次状態変数値を更新し、迅速に遅延なくアクチュエータを駆動する制御方式を与える。
【0005】
さらに本発明ではアクチュエータを駆動する際に、状態変数値の変化に対して、連続的に(徐々に)駆動量を変化させるようにして、駆動量がアナログ的に大小の量的な違いをもってユーザの指や手に作用するようにすることによって、実際のイベントが発生してしまう前に、ユーザが事前にイベントの発生を予測する情報として微細な駆動量の変化を感じられるようにしている。それによってユーザは事前に操作の修正を行うことが可能となり、誤入力の発生を防ぐことができる。あるいは正しい操作をガイドする手掛かりとして連続的な刺激量の変化を利用することができる。このように連続的に駆動量を変えていく際には、センサ情報の変化に対して遅延なく迅速に駆動量を変化させなければ、ユーザはガタガタとした不快な駆動量の変化を感じることになり、それを防ぐためにも上記の遅延を克服する方式が有効である。連続的に変化する触覚刺激があっても、それが遅れて提示される場合には、ユーザに混乱を招くことになる。本発明の方式を利用することによってユーザは遅延なく与えられる駆動量の連続的な変化を手掛かりとして、誤差が軽微な段階で誤りを修正し、操作を正しい方向に導くことができる。
【0006】
本発明に関連する先行技術としては以下の特許文献を上げることができる。
【特許文献1】特開2002−307336号公報
【特許文献2】特開2004−82293号公報
【特許文献3】特開2006−286016号公報
【0007】
特許文献1にはマスターとスレーブという表現でホストとローカルのプロセッサの役割が示されているが、本発明で問題にされている遅延に対する対策は示されていない。また特許文献2には、ローカルとホストの間の通信遅れの克服法が示されているが、問題設定がロボットの制御であるため、遅れそのものを回避することは不可能であって、遅れに関する情報をユーザに提示することでユーザが遅れを認知しながらロボットを操作できるようにする方法が示されている。
【0008】
特許文献3には、その請求項6で「前記ホストコンピュータから前記入出力デバイスに送られた命令に対応して、ソフトウェアプロセスを実行するための前記ホストコンピュータから分離した局部的プロセッサであって、前記ソフトウェアプロセスは、前記アクチュエータにより前記ユーザによる操作が可能なオブジェクトに作用するべき抵抗の程度を表す、減衰定数を設定して、前記ソフトウェアプロセスは、前記アクチュエータに作用させられて前記力の前記出力を生じるべき力の値を推論しており、そこでは前記推論は、前記減衰定数及び前記ユーザによる操作が可能なオブジェクトの速度に少なくとも部分的に基く、局部的プロセッサと、前記接地面に対する前記ユーザによる操作が可能なオブジェクトの動きを検出するための少なくとも1つのセンサであって、前記少なくとも1つのセンサは、前記センサの信号の表現を前記局部的プロセッサに報告する、少なくとも1つのセンサと、を具備することを特徴とする入出力デバイス」との記載があり、本発明と同様にローカルプロセッサが導入されているが、この特許では特定用途のための専用システムを想定しており、ホスト側のノンリアルタイムOSによる遅延の問題は配慮されていない。また汎用性に対する配慮もしておらず、ホスト側の状況やアプリケーションの違いに応じてローカル側の動作を変更する必要がないため、「状態変数の値をホストとローカルで共有する仕組み」や「駆動量算出手段や状態変数更新手段やそのパラメータをホストからローカルへ伝える通信手段」も存在せず、こうした概念の欠如のために、状況やアプリケーションに応じて柔軟にローカルプロセッサの動作を変更することができない。
【発明の開示】
【発明が解決しようとする課題】
【0009】
特に本発明で想定している触覚刺激提示手段を備えた入力デバイスにおいては、センサが検出する情報の変化に対して、ユーザの触覚に作用するアクチュエータが連続的に駆動量を変えるような場面では、センサ入力に対するアクチュエータ動作の遅延は、触覚にガタガタした感触と感じられて、ユーザに不快感を与えると共に、微小なずれの段階でユーザが操作を修正することを難しくし、デバイスの操作性を大きく低下させる。特にウィンドウズ(登録商標)のように普及しているOSでは、リアルタイム処理を行えないため、高頻度に出力する信号には上述した遅延が生じることが避けられず、リアルタイムOSを備えたローカルプロセッサを介在することが必要とされるが、ウィンドウズ(登録商標)側の多様な状況の変化に応じて、柔軟にローカルプロセッサの動作を変えることが難しかった。
【0010】
本発明は、上述のかかる事情に鑑みてなされたものであり、触覚刺激提示手段を備えた入力デバイスにおいて、上記の遅延を克服しながら、柔軟にローカルプロセッサの動作を変えることを可能とする触覚刺激生成方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明では、触覚刺激提示手段を備えた入力デバイスにおいて、センサが検出するユーザの操作に対して、アクチュエータが連続的に駆動量を変えてユーザの触覚に作用する際に、連続性を前提として値を更新する状態変数の概念を導入し、その値が連続性に変化することに基づき、状態変数の初期値や中間値のみを比較的少ない頻度でホストとローカルプロセッサの間でやり取りすることで定期的に両者の状態変数値の同期を取る。ここで頻度の少ない通信であれば、遅延のある通信手段で十分に対応することができる。
【0012】
ここで入力信号に関しては遅延なくホストに伝わることを前提として、入力情報であるセンサ情報は同じ値が常時遅延なく、ホストとローカルプロセッサに伝わるものとし、同じセンサ情報を用いてそれぞれの側で状態更新を行なうことで、上記の同期を取る間の状態変数の値を補間することでホストとローカルプロセッサの両者で常時状態変数値を一致するように共有することができる。
【0013】
こうしてホストとローカルプロセッサの間で常時同じ値になるように共有する状態変数を通じてアクチュエータを駆動することで、上記の遅延の問題を回避することができる。
【0014】
あるいは汎用性がこれよりも損なわれてしまうが、ローカルプロセッサの側で状態変数の値を計算し、通信手段を通じてそれをホスト側に送ることで、状態変数の値を共有して遅延の問題を回避することもできるが、現状のウィンドウズ(登録商標)ではローカルプロセッサにそのような状態変数を導入することが難しく、この方法を取る場合には、ウィンドウズ(登録商標)に代わる新たなOSが必要とされる。
【0015】
いずれの場合にも、状態変数の更新手段そのもの、あるいはそのパラメータ、及びアクチュエータの駆動量算出手段そのもの、あるいはそのパラメータを、通信手段を用いてホストからローカルプロセッサに転送することで、ウィンドウズ(登録商標)側のディスプレイ画面情報の変化等、アプリケーション側の各種の状況の変化に応じて、アクチュエータの動作を柔軟に変更することを可能になる。なおこうした状況の変化は、センサ情報の変化やアクチュエータ駆動信号の変化よりははるかに少ない頻度で生じるので、遅延のある通信手段でも支障なく対応することができる。
【0016】
なお状態変数自体は連続的に変化するものであっても、それが適当な閾値を超えたときに、急激にアクチュエータを駆動するようにしても良い。この場合にも状態変数自体の変化は連続的であるし、状態変数の更新手段そのもの、あるいはそのパラメータ、及びアクチュエータの駆動量算出手段そのもの、あるいはそのパラメータは急激に変化することはないので遅延のある通信手段でも対応することができる。この方法によれば、通信する情報は緩やかに連続的に変化するものであるので、少ない頻度で伝送することで済ませながらも、目的の地点、時点で遅れることのないタイミングで急激にアクチュエータを動作させることができる。
【0017】
本発明の方法は、このようにアクチュエータを不連続、急激に駆動する場合にも利用できるが、ユーザの知覚上は、アクチュエータの駆動量が連続的に変化しているときに、通信の遅延のためにガタガタと駆動量が不測に変化するとそれを極めて不快に感じるので、本発明が真価を発揮するのは、状態変数の変化に対してアクチュエータの駆動量を連続的に変化させる場合と言えよう。
【0018】
例えば、触覚に加える刺激を通じてGUIの操作を支援する場合には、ディスプレイ上のカーソル位置を表す変数を上記の状態変数と看做せば良い。カーソル位置はユーザが加える操作、例えばマウスの運動に対して連続的に変化するし、一時点前の地点を示す座標値にマウスの運動によって定まる値が加えられて次の時点の地点の座標値が定まるので、上述した状態変数の定義がそのまま当てはまる。
【0019】
この場合には、カーソルがディスプレイ上を動くときに、その位置に応じてアクチュエータの駆動量が変化し、ユーザは触覚を通じてディスプレイ上のグラフィクスの内容を把握できると都合が良い。
【0020】
例えば、カーソルがアイコンの一つに近づくときに徐々にアクチュエータが動いて指を刺激して触覚的にそのことを確認できると良い。
【0021】
あるいはカーソルがメニューの項目を横切るときにはカーソルが項目間の境界に近づくときに徐々にアクチュエータが動いて指を刺激して触覚的に近づいていることを確認できると良い。
【0022】
こうした場合には、アクチュエータを駆動するローカルプロセッサにアイコンの位置やメニュー項目の境界位置を伝達する必要がある、こうした位置情報は駆動量算出手段のパラメータとしてホストからローカルプロセッサに伝送される。また、駆動量算出手段を指定する情報として、駆動量を定める関数そのものやそれを指定するインデックスも、ホストからローカルプロセッサに伝送されて、関数の形態を変更できることが望ましい。これらの情報は、カーソルの移動やアクチュエータの駆動のための信号に比べるとずっと少ない頻度で通信することで伝達できるので遅延の影響を受けずに済む。
【0023】
またマウスの感度をホストの側で変更したり、マウスの動きに対するカーソルの動きに加速度を導入したりすることで、アプリケーションの変化により柔軟に対応できるが、このような場合には、状態変数を更新する手段をホスト側で変更できるようにすると良い。ホスト側で更新手段そのものやそのパラメータを変更すると、状態変数の値を同期させる都合上、この変更した情報をローカルプロセッサに伝えて、ローカルプロセッサ側の処理にも同じ変更を加える必要がある。この変更は高い頻度に生じるものでないので遅延のある通信で対応することができる。
【0024】
更新手段やそのパラメータを変更すると、状態変数が持つ情報量が変わってくる。例えばマウス感度を落とすと元々のセンサ情報の持つ情報量が失われて、マウスの動きの情報は間引きされたり切り捨てられたりしてカーソル位置に反映されることになる。ホスト側の汎用性を最大限確保するためには、劣化する前の生のセンサ情報をホスト側に伝えておくことが望ましい。したがって、上述した2つの状態変数共有法のうち、後者の方法は汎用性を維持する上では好ましくない。
【発明の効果】
【0025】
上述のごとく、本発明によれば、多様なアプリケーションに応じてアクチュエータの駆動手段を柔軟に変更できるように高い汎用性を確保しながら、センサ情報の変化に応じて遅延なくアクチュエータを駆動することが可能であり、特に触覚刺激提示手段を備えた入力デバイスにおいて、誤入力を防ぎ、操作をガイドするようにユーザの操作に対して連続的にアクチュエータ駆動量を変化させる場合に、ユーザの不快感をなくし、操作性を向上する目的に多大の効果がある。
【発明を実施するための最良の形態】
【0026】
以下本発明の実施の形態を説明する。図1は、第1の実施の形態による触覚刺激生成方法を説明するためのデータ入力システム50の機能ブロック図である。
ここで、データ入力システム50は、パーソナルコンピュータ等のホストコンピュータ8、マウス等の入力デバイスを有し、その間はUSBケーブル、無線、赤外線等の通信線9で接続されている。
【0027】
ホストコンピュータ8は、CPUの機能によって演算処理を実行する演算部61、データを記憶する記憶部62および入力デバイス40との間でデータを伝送する伝送部63から構成されている。またホストコンピュータ8はディスプレイ4と繋がり表示出力を行っている。また、記憶部62には、入力デバイス40を制御するための状態変数67が保存されている。演算部61は、ディスプレイ4に対する表示出力処理を行う表示出力手段64、状態変数を更新する状態変数更新手段65、およびデータの送受信処理を実行する送受信処理手段66を備えている。なお、通信手段51は、伝送部41,63と通信線9が一体となって構成される。
【0028】
一方、入力デバイス40は、CPUの機能によって演算処理を実行するローカルプロセッサ10、ホストコンピュータ8との間でデータ伝送を行う伝送部41、位置検出用のセンサ14、図示しない突起等を介して触覚刺激を発生させるアクチュエータ12で構成されている。また、ローカルプロセッサ10は、センサ14から信号を入力するデータ入力処理手段42、データの送受信処理を実行する送受信処理手段43、アクチュエータ12の駆動量を計算する駆動量算出手段44およびこの計算結果に基づいてアクチュエータ12に対して制御信号を出力する制御信号出力手段45を備えている。
【0029】
次に上記の構成を有するデータ入力システム50を例に触覚刺激生成方法を説明する。
図2は、第1の実施の形態による触覚刺激生成方法の信号の流れの説明図である。センサ14の検出した情報Zはローカルプロセッサ10に入力し、まずS(t)=G(Z,S(0))の式によって状態変数の現時点tにおける値S(t)を決定するのに使われる。情報Zは送受信処理手段43を介してホスト8側にも送られており、演算部61の状態変数更新手段65により同じ式で状態変数値が算出される。ここでホストコンピュータ8側からローカルプロセッサ10側へ送られる情報S(0)は状態変数の初期値であるが、実際には周期的にホストコンピュータ8から遅延のある通信手段51を使って送られてくる中間値を使っても良い。また実際には次の更新式によって1時点前の値から更新する。S(t)=H(Z,S(t−1))。しかしながら、この式で前の時点の値を辿ってゆくと中間値、または初期値に辿り着くのでここでは簡単のために、S(t)=G(Z,S(0))の式で表している。初期値や中間値は低い頻度で伝送されるので通信に遅延があっても問題にならない。あるいはより好ましくは、初期値や中間値に、それを送った時点の時刻情報を付随して伝送するようにすると、その時刻情報に基づいて、より正確に現時点の状態変数値を推定できるようになる。こうして状態変数値はローカルプロセッサ10の駆動量算出手段44によって常時ホスト側と同じ値になるように再現される。ここで使われる関数Gは、ホスト8からローカルプロセッサ10側に遅延のある通信手段51によって伝送される。なお、状態変数更新手段(更新手段)65を指定する情報として関数Gそのものを伝送しなくともそのインデックスやパラメータを送るようにしても良い。
【0030】
アクチュエータ12の駆動量Uは、こうして逐次更新されてホストコンピュータ側の値と一致するように同期の取られる状態変数値S(t)と、GUIのメニュー項目の境界位置やアイコン位置などを表すパラメータP1,P2・・・などを用いてU=F(S(t),P1,P2,・・・)の式で算出される。ここで使われる関数Fはホストからローカルプロセッサ側に遅延のある通信手段によって伝送される。関数Fそのものを伝送しなくともそのインデックスやパラメータを送るようにしても良い。パラメータP1,P2・・・もホストからローカルプロセッサ側に遅延のある通信手段によって伝送されるが、これらのパラメータはZやUに比べて変化が緩やかであるので遅延のある通信手段で伝送しても問題ない。
【0031】
図3に、本発明の第2の実施の形態による触覚刺激生成方法の信号の流れを示す。機能構成に関する図1との違いは、状態変数67と状態変数更新手段65をローカルプロセッサ10側に持たせることである。その他の機能は図1と同様である。
触覚刺激生成の手順は、図2と大部分は同じであるが、ホストであるパーソナルコンピュータに伝えられる情報は、ローカルプロセッサの更新手段で計算される状態変数値S(t)であり、生のセンサ情報Zでない点が図2と異なっている。この方法でも同じ状態変数値S(t)をホスト8とローカルプロセッサ10で共有することができる。しかし前述したようにホストの受けるセンサ情報が修飾され、場合によって情報の劣化したものになるので、アプリケーションの汎用性を確保する上では不利となる。
【0032】
以上の図2、図3中の符号1で示される通信は通常は高速に遅延が少なく行われる。一方、ホスト8がウィンドウズ(登録商標)のようにリアルタイムOSでないOSで動いている場合には、符号2で示される通信に遅延が生じる。符号3で示すようにS(t)そのものでなく初期値または中間値であるS(0)を伝送するようにすれば、これらの値は頻繁に送る必要がないため遅延のある通信で対応できる。
【0033】
図4には、本発明の触覚刺激生成方法を触覚刺激提示手段を備えたマウスに応用した例を示す。ホストであるパーソナルコンピュータ8とマウス内部に設けられたローカルプロセッサ10は遅延のある通信線9で双方向に通信することができる。マウスの位置の変化を検出するセンサ14が検出するセンサ情報は遅延なくパーソナルコンピュータ8に伝えられるが、パーソナルコンピュータ8内部のウィンドウズ(登録商標)で出力の計算に遅延が生じるため、パーソナルコンピュータ8からローカルプロセッサ10に伝えられる情報には遅延が生じる。表示出力手段64によって表示出力されるディスプレイ4の領域A(符号5で示される)には例えばアイコンが表示さる。このときに触覚的にアイコンの位置を把握できるように、カーソル6が領域Aに近づくときに徐々にアクチュエータ12の駆動量を増加させて、マウスに設けられた突起13を突出させて親指を刺激する。あるいは領域Aがメニューの一つの項目を現すときには、その境界にカーソルが近づくときにアクチュエータの駆動量を増加させる。ここでディスプレイ上に設けられた座標系7で、カーソルの位置を示す座標値(x,y)が前述した状態変数となる。また領域Aの位置や境界を表す(x1,y1),(x2,y2)がアクチュエータ駆動量算出手段44のパラメータP1,P2・・・に該当する。
【0034】
図5には、マウス15に搭載したアクチュエータ18、20が突起を駆動して指を刺激する様子を示す。駆動量は19に示される突起の突出する長さになる。この長さは連続的に変化して、図4のカーソル位置(x,y)がアイコンの位置やメニューの境界を示す(x1,y1),(x2,y2)に近づくときに徐々に増加する。16,17はそれぞれマウスの右、左ボタンである。突起は21に示すように引っ込んだり、23に示すように突出したりする。ここでは4つの突起が独立に駆動される。
【0035】
図6には、実際に試作したデバイスの内部構造を透視図で示す。上述した原理で動作する触覚刺激生成装置が内蔵されている様子が示されている。以下にこの試作デバイスの触覚刺激生成方法の仕様を具体的に示す。
【0036】
ここではUSBでホストであるPC(パーソナルコンピュータ)とマウス内のローカルプロセッサとの間の通信を行う。USBからマウスには100ミリ秒毎に送る64バイトの信号を送るがその内容は以下の通りである。
64バイトのうちの最初の7バイトで3つのアクチュエータに共通の情報を指定する。
また、残りの57バイトを19バイトずつ3つに分けて、3つのアクチュエータの各々に対して独立に、各19バイトを使って下記に述べる駆動関数の種類とそのパラメータ情報を指定する。
【0037】
64バイトの中の第1〜第3バイトでディスプレイ解像度とマウス解像度のスケール変換率を、第4〜第5バイトでディスプレイカーソル位置のx座標を、第6〜第7バイトでディスプレイカーソル位置のy座標を、第8〜第26バイトでアクチュエータ1の関数の種類とそのパラメータを、第27〜第45バイトでアクチュエータ2の関数の種類とそのパラメータを、そして第46バイトから第64バイトでアクチュエータ2の関数の種類とそのパラメータを指定する。すなわち第1〜第3バイトで上述した関数Gのパラメータを伝送し、第4〜第7バイトで状態変数であるカーソル座標値の初期値や中間値を伝送する。また第8〜第64バイトで3つのアクチュエータに対して、前述したアクチュエータ駆動量算出手段を示す関数Fのインデックスとパラメータを伝送する。これらの伝送は100ミリ秒毎に行われ、この程度の低頻度で行えば、ウィンドウズ(登録商標)の処理の遅延を吸収できる。一方で、ローカルプロセッサからPCへは10ミリ秒毎にマウスの座標情報やボタンのクリック情報が伝送され、こちらは遅延なく高頻度に伝送される。
【0038】
上述したようにPC側で持っているディスプレイ上のカーソル位置の情報を100ミリ秒毎にUSBでマウス内のローカルプロセッサに伝達する。100ミリ秒では時間分解能が荒すぎるので、ローカルプロセッサ内部のファームウェアによって、光学的位置センサが位置変化分Δx、Δyを検出する度に、次式でディスプレイカーソル位置を更新し、マウス内部でディスプレイカーソル位置をエミュレートし、より高い時間分解能でディスプレイカーソル位置を得るようにする。これが上述した状態変数の更新手段Gに相当する処理になる。
X=X+Δx/α
Y=Y+Δy/α
ここで、X,Yは直近で与えられているディスプレイカーソルの位置。Δx、Δyはマウス内部で光学的センサによって検出されるマウス移動量。αは第1〜第3バイトで与えられるスケール変換率。なおスケール変換率は、PC側のドライバで用いられている係数である。なおαは必要な精度が得られるように何らかの表現で表して(最大3バイト)、下記の式に用いる。このαはGのパラメータである。
【0039】
アクチュエータの駆動量を算出する駆動関数(ディスプレイカーソル座標に対してアクチュエータ駆動量を定める関数)としては次の4種類(ステップ関数、ピラミッド関数、リッジ関数、線形関数)を用意して、各アクチュエータに対して用意された19バイトの中の最初の1バイトを使って、次のように関数の種類を指定する。また残り18バイトを以下のような関数のパラメータを指定するために使用する。なおパラメータは関数の種類毎に内容が変わるので関数毎に解釈を変えるように注意する。なおいずれの関数を用いる場合も、現時点の駆動量を優先して、マウスを動かすときに駆動量が現時点の量から連続的に変わるように配慮する。マウスを動かしたとたんに駆動量が不連続に変化すると、人は極めて不快に感じる。しばらく動かしてから、GUIと同期して意味を持って不連続に変化する分には、人は不快に感じない。
【0040】
ステップ関数(19バイトの内の第1バイトを‘S’にして指定する):
マウス内のローカルプロセッサでエミュレートして求めたディスプレイカーソル座標をX,Yとする。この座標に対するアクチュエータ駆動量Uを次式で定める。XA<XB、YA<YBとする。
X<XAまたはXB<XのときにSX=−1、XA<X<XBのときにSX=1。
Y<YAまたはYB<YのときにSY=−1、YA<Y<YBのときにSY=1。
U =MIN(SX,SY)*振幅。ここで、(MIN(SX,SY)はSX、SYのうち小さい方を選ぶ関数)。
以上で用いた5つのパラメータXA,XB、YA,YB、振幅はそれぞれ2バイトで表して、この順で、残り18バイトの最初の10バイトを使って表現する。
【0041】
ピラミッド関数(19バイトの内の第1バイトを‘I’にして指定する):
マウス内のローカルプロセッサでエミュレートして求めたディスプレイカーソル座標をX,Yとする。この座標に対するアクチュエータ駆動量Uを次式で定める。XA<XC<XB、YA<YC<YBとする。
X<XAまたはXB<XのときにSX=0。
XA<X<XCのときにSX=1−(XC−X)/(XC−XA)。
XC<X<XBのときにSX=1−(X−XC)/(XB−XC)。
Y<YAまたはYB<YのときにSY=0。
YA<Y<YCのときにSY=1−(YC−Y)/(YC−YA)。
YC<Y<YBのときにSY=1−(Y−YC)/(YB−YC)。
U =MIN(SX,SY)*振幅。
以上で用いた7つのパラメータXA,XB、XC,YA,YB、YC,振幅はそれぞれ2バイトで表して、この順で、残り18バイトの最初の14バイトを使って表現する。
【0042】
リッジ関数(19バイトの内の第1バイトを‘R’にして指定する):
マウス内でエミュレートして求めたディスプレイカーソル座標をX,Yとする。この座標に対するアクチュエータ駆動量Uを次式で定める。
X<XAまたはXB<XのときにSX=0。
XA<X<XCのときにSX=1−(XC−X)/(XC−XA)。
XC<X<XBのときにSX=1−(X−XC)/(XB−XC)。
Y<YAまたはYB<YのときにSY=0。
YA<Y<YCのときにSY=1−(YC−Y)/(YC−YA)。
YC<Y<YBのときにSY=1−(Y−YC)/(YB−YC)。
U =MAX(SX,SY)*振幅。ここで、(MAX(SX,SY)はSX、SYのうち大きい方を選ぶ関数)。
以上で用いた7つのパラメータXA,XB、XC,YA,YB、YC,振幅はそれぞれ2バイトで表して、この順で、残り18バイトの最初の14バイトを使って表現する。
【0043】
線形関数(19バイトの内の第1バイトを‘L’にして指定する):
マウス内でエミュレートして求めたディスプレイカーソル座標をX,Yとする。この座標に対するアクチュエータ駆動量Uを次式で定める。この式によれば、パラメータとして与えられる3点:(XA,YA,ZA)、(XB,YB,ZB)、(XC,YC,ZC)を通過する平面を想定し、(X,Y)に対する駆動量をこの平面上のZとして求めることになる。なお計算を簡単とするために、(XC,YC)を原点として、XY方向に座標軸を想定したときに、(XA,YA)はX軸上に、(XB,YB)はY軸上にあるように上記の3点を選ぶようにする。そうするとYA=YC、XB=XCとなり、任意の点(X,Y)におけるHは次式によって求まる。
Z=(ZA−ZC)(X−XC)/(XA−XC)+(ZB−ZC)(Y−YC)/( YB−YC)+ZC。
U=Z。
ここで定義したZは以前に定義したセンサ情報を表わすZと同じ記号でも意味が異なるので混同しないように注意する必要がある。
以上で用いた7つのパラメータXA,XC,YB、YC,ZA,ZB、ZCはそれぞれ2バイトで表して、この順で、残り18バイトの最初の14バイトを使って表現する。
【0044】
以上のように求めたUは、最大値30度を超えたら30度に切り捨て、最小値−30度以下となったら−30度に切り上げる。こうしてUを−30度から30度の範囲に制限する。
【0045】
ホストであるPC側に搭載するドライバ用ソフトウェアの仕様は次のように定める。
【0046】
入力(マウスの座標とボタンの情報):
ドライバとUSBとの間では、ドライバはウィンドウズ(登録商標)の標準スクロールホイール付マウスの規格に則った(のっとった)USB信号を通じて、標準マウスの場合と互換性のある形式で、座標やマウスボタンクリックの情報を得る。ドライバは、これらの情報に基づき、画面上のマウスカーソルを動かしたり、各種イベント関数を起動したりする。
ドライバとアプリケーションソフトウェアとの間では、アプリケーションソフトウェアはウィンドウズ(登録商標)標準のマウス用関数(あるいはそれと同形式の関数)を用いて座標(注意:マウスの位置ではなく画面のカーソルの位置を示す座標情報)やマウスボタン操作の情報を得られるようにする。
【0047】
出力(アクチュエータ制御のための情報):
ドライバとUSBとの間では、USBを通じて入力デバイスへアクチュエータ制御用の100ミリ秒ごとに64バイトの信号を出力する。この64バイトの情報は、下記のServoControl( BYTE* )によってメモリの所定のアドレスから始まる64バイトに書き込まれ、ドライバは100ミリ秒毎にこのアドレスからの64バイトを読み出してUSBを通じて入力デバイス側に送信する。
【0048】
ドライバとアプリケーションソフトウェアとの間では、アプリケーションソフトウェアは、本件専用のアクチュエータ制御用関数ServoControl( BYTE* ScaleTranslation, BYTE* DisplayCursorPositionX, BYTE* DisplayCursorPositionY, BYTE* Parameters_for_ServoUnit1 BYTE* Parameters_for_ServoUnit2 BYTE* Parameters_for_ServoUnit3)を用いて、アクチュエータ駆動量を指定し、これが上記のアドレスから始まる64バイトに記入され、それが100ミリ秒毎に周期的に読み出されてUSBを通じて入力デバイスに伝えられる。ScaleTranslation は3バイトのバイト配列、DisplayCursorPositionXとDisplayCursorPositionYはそれぞれ2バイトのバイト配列、Parameters_for_ServoUnit1,Parameters_for_ServoUnit2 Parameters_for_ServoUnit3はそれぞれ3つのアクチュエータ用の駆動関数の種類とパラメータを定める各19バイトのバイト配列である。
【0049】
ユーザはマウスが移動するイベントが発生する度に起動する関数の中で、まずマウスカーソルの画面上の座標を取得し、この座標値に基づき上記の計64バイトの情報を決めて、上記の関数ServoControlを呼び出して、この64バイトの情報を上記のアドレスに書き込む。
【0050】
本発明は上述の実施の形態に限定されず、その趣旨を逸脱しない範囲で種々変形して実施することができる。たとえば、上記の実施形態では、触覚刺激生成装置をマウスへ搭載した場合を例として説明したが、任意の入力デバイス上で任意の触覚刺激(例えば触覚刺激など)を生成する装置を搭載する場合に、本発明の制御方法は有効である。
【図面の簡単な説明】
【0051】
【図1】本発明の第1の実施の形態による触覚刺激生成方法を説明するためのデータ入力システム50の機能ブロック図である。
【図2】本発明の第1の実施の形態による触覚刺激生成方法の信号の流れの説明図である。
【図3】本発明の第2の実施の形態による触覚刺激生成方法の信号の流れの説明図である。
【図4】本発明の触覚刺激生成方法を触覚刺激提示手段を備えたマウスに搭載した例を示すシステム構成図である。
【図5】触覚刺激提示手段を備えたマウスにおいて、アクチュエータで突起を駆動して親指の触覚を刺激する様子を示す図である。
【図6】本発明の触覚刺激生成方法を搭載した触覚刺激提示手段を備えたマウスの内部構造を示す透視図である。

【特許請求の範囲】
【請求項1】
入力デバイスにユーザから加えられる作用を検出するセンサと、前記センサの検出結果に依存して駆動量を変更して前記ユーザの手または指の触覚を刺激するアクチュエータと、前記検出結果に依存して前記駆動量を算出する駆動量算出手段を有するローカルプロセッサと、パーソナルコンピュータ等のホストコンピュータと前記ローカルプロセッサの間で双方向に通信する通信手段と、を備えたデータ入力システムの触覚刺激生成方法であって、
前記ホストコンピュータは、前記センサの検出結果に依存して値が更新される状態変数とその更新手段を備え、
前記通信手段は、前記状態変数の初期値または中間値と、前記駆動量算出手段を指定する情報またはそのパラメータと、前記更新手段を指定する情報またはそのパラメータとを、前記ホストコンピュータから前記ローカルプロセッサへ送信し、
前記ローカルプロセッサは、前記状態変数の初期値または中間値と、前記センサの検出結果とから前記状態変数の現時点値を算出し、この状態変数の現時点値と前記駆動量算出手段を指定する情報またはそのパラメータとから前記アクチュエータの駆動量を算出することを特徴とする触覚刺激生成方法。
【請求項2】
入力デバイスにユーザから加えられる作用を検出するセンサと、前記センサの検出結果に依存して駆動量を変更して前記ユーザの手または指の触覚を刺激するアクチュエータと、前記検出結果に依存して前記駆動量を算出する駆動量算出手段を有するローカルプロセッサと、パーソナルコンピュータ等のホストコンピュータと前記ローカルプロセッサの間で双方向に通信する通信手段と、を備えたデータ入力システムの触覚刺激生成方法であって、
前記ローカルプロセッサは、前記センサの検出結果に依存して値が更新される状態変数とその更新手段を備え、
前記通信手段は、前記駆動量算出手段を指定する情報またはそのパラメータと、前記更新手段を指定する情報またはそのパラメータとを、前記ホストコンピュータから前記ローカルプロセッサへ送信し、
前記通信手段は、ローカルプロセッサにおいて更新された前記状態変数の現在値を、前記ローカルプロセッサから前記ホストコンピュータへ送信し、
前記ローカルプロセッサは、前記状態変数の初期値または中間値と前記センサの検出結果とから前記状態変数の現時点値を算出し、この状態変数の現時点値と前記駆動量算出手段を指定する情報またはそのパラメータとから前記アクチュエータの駆動量を算出することを特徴とする触覚刺激生成方法。
【請求項3】
請求項1または請求項2記載の触覚刺激生成方法において、
前記駆動量算出手段は、前記状態変数の変化に対して駆動量が連続的に変化するように算出することを特徴とする触覚刺激生成方法。
【請求項4】
請求項1または請求項2記載の触覚刺激生成方法において、
前記状態変数をディスプレイ上のカーソル位置を表す変数とし、
また前記更新手段を一時点前のカーソル位置と前記センサの検出結果に基づいて次の時点のカーソル位置を決定する手段とし、
さらに前記駆動量算出手段のパラメータをディスプレイ上のアイコンの位置に関する情報またはメニュー項目の境界位置に関する情報を表すパラメータとし、
前記駆動量算出手段は、カーソル位置がディスプレイ上のアイコンの位置またはメニュー項目の境界位置に近づくにつれて、徐々に駆動量を変化させて行くことを特徴とする触覚刺激生成方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2008−257294(P2008−257294A)
【公開日】平成20年10月23日(2008.10.23)
【国際特許分類】
【出願番号】特願2007−95704(P2007−95704)
【出願日】平成19年3月30日(2007.3.30)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成18年度、独立行政法人科学技術振興機構、独創的シーズ展開事業大学発ベンチャー創出推進「機器の簡単確実な操作を実現するハプティックユーザインターフェースの研究開発」にかかる委託研究、産業活力再生特別措置法第30条の適用を受ける特許出願
【出願人】(304021417)国立大学法人東京工業大学 (1,821)