(57)【要約】【課題】  人体と仮想物体との衝突に起因する刺激を人体に対して提示する際に、刺激の広がりや、刺激による仮想物体についての情報の付加をも考慮した刺激提示に係る技術を提供すること。【解決手段】  人体に対して刺激を与える為の刺激発生部１１０を、ユーザの人体に複数配置した場合における、それぞれの刺激発生部１１０を制御する。位置判定部１０８は、ユーザが存在する仮想空間を構成する仮想物体と、人体とが接触したか否かを判定する。接触が生じた場合、制御部１０３は、接触したと判定した箇所の近傍に位置する複数の刺激発生部１１０のそれぞれについて、仮想物体と刺激発生部との位置関係に基づいた駆動制御を行う。【選択図】  図１
2008134990.tif 000002
【特許請求の範囲】
【請求項１】
ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定手段と、
前記判定手段が接触したと判定した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記箇所と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記判定手段は、前記人体を模した仮想物体である仮想人体と、前記仮想物体と、が接触したか否かを判定し、接触していると判定した場合には、接触している箇所を特定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記駆動制御手段は、
前記仮想人体における前記箇所と、前記箇所の近傍に位置する複数の刺激発生部のそれぞれの位置との距離を求める距離計算手段と、
前記箇所の近傍に位置する複数の刺激発生部のそれぞれを、求めた距離に基づいて駆動制御する手段と
を備えることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記距離計算手段は、前記仮想人体における前記箇所から、前記仮想人体に沿って複数の刺激発生部までの距離を計算することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記距離計算手段は、前記箇所と前記刺激発生部との直線距離を計算することを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記距離計算手段は、前記仮想物体上の前記箇所における法線を垂線として持つ基準面を設定し、設定した基準面と前記刺激発生部のそれぞれの位置との直線距離を計算することを特徴とする請求項３に記載の情報処理装置。
【請求項７】
前記距離計算手段は、前記仮想人体の移動方向に平行な方向に前記距離を計算することを特徴とする請求項３に記載の情報処理装置。
【請求項８】
前記駆動制御手段は、前記仮想物体の内部に前記仮想人体の一部、若しくは全部が侵入している場合には、前記刺激発生部のうち、前記仮想物体の内部に位置する刺激発生部に対して駆動制御を行い、前記仮想物体の外部に位置する刺激発生部に対しては駆動制御は行わないことを特徴とする請求項３に記載の情報処理装置。
【請求項９】
前記駆動制御手段は、前記箇所と前記刺激発生部との間の距離が大きいほど、当該刺激発生部による刺激開始タイミングを遅らせることを特徴とする請求項１に記載の情報処理装置。
【請求項１０】
前記駆動制御手段は、前記箇所と前記刺激発生部との距離が大きいほど、当該刺激発生部による刺激を弱めることを特徴とする請求項１に記載の情報処理装置。
【請求項１１】
前記駆動制御手段は、前記箇所と前記刺激発生部との距離に応じて、当該刺激発生部による刺激の増減パターンを制御することを特徴とする請求項１に記載の情報処理装置。
【請求項１２】
前記刺激発生部は、機械的な振動刺激を発生する刺激発生部、機械的な振動刺激を発生するボイスコイル型の刺激発生部、アクチュエータにより人体に接触したピンを動作させて刺激を与える刺激発生部、空気圧力により皮膚表面を圧迫する刺激発生部、電気的刺激を人体に対して与える刺激発生部、温度刺激を人体に対して与える刺激発生部の何れかにより構成されていることを特徴とする請求項１に記載の情報処理装置。
【請求項１３】
更に、前記仮想空間の画像を生成し、前記ユーザに対して提示する手段を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項１４】
ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定手段と、
前記判定手段が接触したと判定した場合、前記仮想物体と前記人体が接触した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記仮想物体と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御手段と
を備えることを特徴とする情報処理装置。
【請求項１５】
前記駆動制御手段は、
前記箇所の近傍に位置する複数の刺激発生部のそれぞれの前記仮想物体の表面からの距離を求める距離計算手段と、
前記箇所の近傍に位置する複数の刺激発生部のそれぞれを、求めた距離に基づいて駆動制御する手段と
を備えることを特徴とする請求項１４に記載の情報処理装置。
【請求項１６】
ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置が行う情報処理方法であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定工程と、
前記判定工程で接触したと判定した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記箇所と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御工程と
を備えることを特徴とする情報処理方法。
【請求項１７】
ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置が行う情報処理方法であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定工程と、
前記判定工程で接触したと判定した場合、前記仮想物体と前記人体が接触した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記仮想物体と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御工程と
を備えることを特徴とする情報処理方法。
【請求項１８】
コンピュータに請求項１６又は１７に記載の情報処理方法を実行させるためのコンピュータプログラム。
【請求項１９】
請求項１８に記載のコンピュータプログラムを格納した、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、人体と仮想物体との接触に基づいた刺激を人体に対して与えるための技術に関するものである。
【背景技術】
【０００２】
バーチャルリアリティの分野では、仮想物体に触れたり、操作したりするために触覚ディスプレイの検討が行われている。触覚ディスプレイは大きく分類して、人体に物体からの反力を提示する力覚ディスプレイ（フォース・フィードバック・ディスプレイ）と、物体の手触り感を提示するタクタイルディスプレイに分類される。しかし、従来の力覚ディスプレイは、大型で可搬性に乏しい物が多く、また構成が複雑で高価になりやすい。タクタイルディスプレイについても装置の構成が複雑になりやすく、また現状の技術では十分に手触り感を提示するまでに至っていない。
【０００３】
そこで、仮想物体からの十分な反力や、物体表面の正確な手触り感を提示するのではなく、単純に仮想物体に「接触したかどうか」を提示する接触提示装置が検討されている。係る技術では、振動モータを人体に複数装着し、仮想物体と触れた時に適切な位置の振動モータを振動させ、仮想物体との接触をユーザに知覚させる。振動モータの振動により、ユーザは身体のどの部分が仮想物体に触れているかを知覚することができる。また、振動モータは小型、安価、軽量であることから、人体の全体に装着することも比較的容易で、移動自由度の高いバーチャルリアリティシステムでの仮想物体とのインタラクションには特に有効である。
【０００４】
振動モータを用いた従来の接触提示装置には、次のようなものがある。
【０００５】
特許文献１には、指先の位置を取得するためのデータグローブに振動モータを設置し、指先に振動を与えることで、指先と仮想物体との接触をユーザに知覚させる為の技術が開示されている。
【０００６】
また、非特許文献１には、全身に計１２個の振動モータを装着し、仮想壁との接触時に振動モータを振動させることで、ユーザに壁を認知させる装置が開示されている。係る文献における振動モータ装着位置は、人体感覚図から判断し、頭、手の甲、肘、胴回り（３個）、膝、足首に装着している。
【０００７】
また、非特許文献２には、腕４カ所、脚４カ所に振動モータを装着し、振動モータの振動を変化させて、異なる質感の物体への接触について開示されている。
【０００８】
また、非特許文献３には、戦場シミュレータ用に、振動モータを人体に装着した装置が開示されている。係る技術は、振動モータ制御を無線で行うことが特徴である。
【０００９】
図１３は、従来の振動モータを使用した接触提示装置の機能構成を示すブロック図である。同図では、ユーザの人体１３００には振動モータ３０９が複数配されている。また、ユーザは仮想物体を見るためにヘッドマウントディスプレイ（ＨＭＤ）３００を装着している。また、仮想物体との接触を検知するためには、人体の位置情報が必要であるため、人体の各部位には位置検出用のマーカ３０２が配されていると共に、このマーカを読み取るためのカメラ６が情報処理装置５に接続されている。
【００１０】
マーカ３０２には従来の手法では光学マーカや画像マーカが使われている。また、マーカ以外の手法で人体の位置や形状を求める方法としては、磁気センサによる位置検出や、光ファイバなどを用いたデータグローブなどが用いられている。
【００１１】
情報処理装置５には、位置検出部７、記録装置９、位置判定部８、制御部３、画像出力部３０３が備わっている。
【００１２】
位置検出部７は、カメラ６から入力された画像中におけるマーカを用いて人体部位の位置を求める。記録装置９には、仮想空間を構成している各仮想物体の位置や形状についての情報が記録されている。位置判定部８は、位置検出部７が求めた人体部位の位置と、記録装置９に記録されているそれぞれの仮想物体の位置とを用いて、人体を構成する各部位のうち何れが仮想物体に接触しているのかを判定する。画像出力部３０３は、記録装置９に記録されている情報を用いて仮想空間の画像を生成し、生成した画像をＨＭＤ３００に出力する。制御部３は、位置判定部８による判定結果に基づいて、振動モータ３０１の駆動制御を行う。
【００１３】
このような構成によれば、人体部位の位置情報を検出し、検出した位置情報に基づいて仮想物体と人体部位との接触判定を行うことができる。そして、接触部位に最も近い部位に装着している振動モータ３０１を振動させることができる。ユーザは振動した部分が、仮想物体と接触していることを知覚する。
【００１４】
上記のような接触提示装置では、力覚ディスプレイのように、物体からの反力を発生することはできないが、物体との接触を簡易的に知覚することができる。また、その表現力を向上させる試みがいくつか行われている。
【００１５】
例えば、非特許文献２には、予め実際の物体と衝突した時の振動波形を測定し、仮想物体との衝突時に、この測定した振動波形を模倣して振動モータを駆動することが開示されている。実際の物体と衝突した時の振動波形は材質ごとに異なるので、このような制御を行うことにより、衝突した仮想物体の材質を表現している。
【特許文献１】特表２０００−５０１０３３
【非特許文献１】矢野 博明，小木 哲朗、廣瀬 通孝：“振動モータを用いた全身触覚提示デバイスの開発”，日本バーチャルリアリティ学会論文誌，  Ｖｏｌ．３，  Ｎｏ．３，１９９８
【非特許文献２】Ｊｏｎｇｈｙｕｎ  Ｒｙｕ，  Ｇｅｒａｒｄ  ＪｏｕｎｇｈｙｕｎＫｉｍ：“Ｕｓｉｎｇ  ａ  Ｖｉｂｒｏ−ｔａｃｔｉｌｅ  Ｄｉｓｐｌａｙ  ｆｏｒ  Ｅｎｈａｎｃｅｄ  Ｃｏｌｌｉｓｉｏｎ  Ｐｅｒｃｅｐｔｉｏｎ  ａｎｄ  Ｐｒｅｓｅｎｃｅ”，ＶＲＳＴ’０４，  Ｎｏｖｅｍｂｅｒ  １０−１２，  ２００４，Ｈｏｎｇｋｏｎｇ
【非特許文献３】Ｒ．Ｗ．Ｌｉｎｄｅｍａｎ，  Ｙ．Ｙａｎａｇｉｄａ，  Ｈ．Ｎｏｍａ，Ｋ．Ｈｏｓａｋａ，Ｋ．Ｋｕｗａｂａｒａ：“Ｔｏｗａｒｄｓ  Ｆｕｌｌ−Ｂｏｄｙ  Ｈａｐｔｉｃ  Ｆｅｅｄｂａｃｋ：Ｔｈｅ  Ｄｅｓｉｇｎ  ａｎｄ  Ｄｅｐｌｏｙｍｅｎｔ  ｏｆ  ａ  Ｓｐａｔｉａｌｉｚｅｄ  Ｖｉｂｒｏｔａｃｔｉｌｅ  Ｆｅｅｄｂａｃｋ  Ｓｙｓｔｅｍ”，ＶＲＳＴ’０４，Ｎｏｖｅｍｂｅｒ  １０−１２，２００４，Ｈｏｎｇｋｏｎｇ
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかし、従来の接触提示装置では、仮想物体との衝突点のみに刺激を発生させていたので、仮想物体と衝突したときの衝突感の提示が十分でなかった。人体と実際の物体とが衝突する場合には、物体との衝突点のみならず、衝突時の衝撃が伝搬することで周囲の人体も振動する。従来では、衝突時の波形で振動モータを駆動しているが、１つの振動モータしか動作させていないので、周囲の振動を模倣して刺激を発生させることが考慮されていなかった。また、複数の振動モータが有効に活用されておらず、接触した仮想物体の表面の向きの提示、衝突した仮想物体の形状の提示、仮想物体に人体が侵入した時に干渉から離脱する方向の提示等が十分に行えていなかった。
【００１７】
本発明は以上の問題に鑑みてなされたものであり、人体と仮想物体との衝突に起因する刺激を人体に対して提示する際に、刺激の広がりの提示や、接触した時の仮想物体についての情報の提示をも考慮した刺激提示に係る技術を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。
【００１９】
即ち、ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定手段と、
前記判定手段が接触したと判定した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記箇所と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御手段と
を備えることを特徴とする。
【００２０】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。
【００２１】
即ち、ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定手段と、
前記判定手段が接触したと判定した場合、前記仮想物体と前記人体が接触した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記仮想物体と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御手段と
を備えることを特徴とする。
【００２２】
本発明の目的を達成するために、例えば、本発明の情報処理方法は以下の構成を備える。
【００２３】
即ち、ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置が行う情報処理方法であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定工程と、
前記判定工程で接触したと判定した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記箇所と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御工程と
を備えることを特徴とする。
【００２４】
本発明の目的を達成するために、例えば、本発明の情報処理方法は以下の構成を備える。
【００２５】
即ち、ユーザの人体に対して刺激を与える為の刺激発生部を、当該人体に複数配置した場合における、それぞれの刺激発生部を制御するための情報処理装置が行う情報処理方法であって、
前記ユーザが存在する仮想空間を構成する仮想物体と、前記人体とが接触したか否かを判定する判定工程と、
前記判定工程で接触したと判定した場合、前記仮想物体と前記人体が接触した箇所の近傍に位置する複数の刺激発生部のそれぞれについて、前記仮想物体と前記刺激発生部との位置関係に基づいた駆動制御を行う駆動制御工程と
を備えることを特徴とする。
【発明の効果】
【００２６】
本発明の構成により、人体と仮想物体との衝突に起因する刺激を人体に対して提示する際に、刺激の広がりをも考慮した刺激提示を行うことができる。
【００２７】
また、本発明の構成により、人体と仮想物体との衝突に起因する刺激を人体に対して提示する際に、接触した時の仮想物体についての情報をも考慮した刺激提示を行うことができる。
【発明を実施するための最良の形態】
【００２８】
以下添付図面を参照して、本発明をその好適な実施形態に従って詳細に説明する。
【００２９】
［第１の実施形態］
＜システムの構成について＞
本実施形態は、ユーザに対して仮想空間を提示するためのシステムであって、仮想空間中の仮想物体とユーザの人体との衝突が発生した場合には、係る衝突の感触を、衝突時における刺激の広がりをも考慮して、ユーザの人体に提示するためのものである。
【００３０】
図１は、本実施形態に係るシステムの機能構成を示すブロック図である。
【００３１】
１００は仮想空間を体感するユーザであり、ユーザ１００の頭部には、ＨＭＤ１３０が装着されている。ユーザ１００はこのＨＭＤ１３０が有する表示部に表示されている画像を眼前に見ることで、仮想空間を体感する。
【００３２】
なお、仮想空間の体感のための具体的な構成については以下の説明における趣旨ではないので、簡単に説明しておく。情報処理装置１０５は、ＨＭＤ１３０に備わっているセンサにより計測されたＨＭＤ１３０の位置姿勢を取得する。そしてこの取得した位置姿勢を有する視点から見える仮想空間の画像を生成する。そして、生成した仮想空間画像を画像出力部１１３を介してＨＭＤ１３０が有する表示部に出力する。なお、ＨＭＤ１３０の位置姿勢の取得方法や、仮想空間画像を生成するための具体的な方法については様々なものがあるし、以下の説明の趣旨ではないので、これ以上の説明は省略する。
【００３３】
１は、ユーザ１００の手であり、この手１には、１以上のマーカ１９９が配されていると共に、装着部１０４が取り付けられている。この装着部１０４には、複数の刺激発生部１１０が装着されている。この刺激発生部１１０は、刺激を人体（図１の場合、手１）に対して与えるものである。刺激発生部１１０で発生する刺激は、機械的な振動刺激であることが好ましい。また、刺激発生部１１０としては、例えば振動モータが、小型・軽量で複数個を装着することが比較的容易であることや、人体が知覚するために十分な刺激を発生することにより、好ましい。
【００３４】
機械的な振動刺激を与える刺激発生部１１０には様々なものが考えられる。例えば、機械的な振動刺激を発生するボイスコイル型の刺激発生部１１０を用いても良いし、圧電素子や高分子アクチュエータ等のアクチュエータにより人体に接触したピンを動作させて刺激を与える刺激発生部１１０を用いても良い。また、空気圧力により皮膚表面を圧迫する刺激発生部１１０を用いても良い。
【００３５】
また、刺激は機械的刺激に限らず、皮膚感覚を刺激するものであれば、電気的刺激や温度刺激などを刺激発生部１１０として用いても良い。電気的刺激では、微小電極アレイを用いて刺激を与えるものなどがあり、温度刺激では、熱電素子を用いるものなどがある。
【００３６】
このように、装着部１０４には、装着部１０４を装着する部位に対して刺激を提供することができる刺激発生部１１０が複数配される。この装着部１０４は、例えば手袋やバンド形状のような着脱容易なものであるが、刺激発生部１１０から発生する刺激が人体に伝わるように適切に装着できるものであれば、何を用いても良い。また、同図では、装着部１０４は手１に対して装着するものとして説明したが、他の部位（腕、胴回り、脚等）に対して装着部１０４を装着するようにしても良い。また、装着部１０４に配する刺激発生部１１０の数についても、特に限定するものではない。本実施形態では、ユーザの各部位には、複数の刺激発生部１１０が取り付けられているものとして説明する。
【００３７】
なお、ここで「部位」とは、単に腕や足などのものをさすが、場合よっては、腕と胴体というように、複数の部位を含めたものを総称して「部位」と解釈しても良い。
【００３８】
カメラ１０６は、現実空間中の所定の箇所に複数配置されているものであり、ユーザの各部位に取り付けられたマーカを撮像するものである。カメラ１０６の配置位置については特に限定するものではないし、その位置姿勢は適宜変更しても良い。カメラ１０６により撮像された各フレームの画像（現実空間画像）は情報処理装置１０５が有する位置検出部１０７に出力される。
【００３９】
記録装置１０９は、仮想空間を構成する各仮想物体の形状情報や位置姿勢情報を保持するものである。例えば、仮想物体がポリゴンでもって構成されている場合には、各ポリゴンの法線ベクトルや色のデータ、ポリゴンを構成する各頂点の座標値データ、テクスチャデータ、仮想物体の配置位置姿勢などのデータが記録装置１０９に保持されている。また、記録装置１０９には、ユーザの人体（各部位）を模した仮想物体（以下仮想人体と呼称する）の形状情報や、各部位間の相対的な位置姿勢関係を示す情報も保持されている。
【００４０】
位置検出部１０７は、カメラ１０６から入力された現実空間画像中におけるマーカ１９９を検出し、検出したマーカを用いて、手１を含むユーザの各部位の位置姿勢を求める。そして、求めた各部位の位置姿勢に、人体の各部位を模した仮想人体を配置する処理を行う。これにより、仮想空間中には、ユーザの各部位を模した仮想人体が、実際の各部位と同じ位置姿勢でもって配置されていることになる。係る技術には、例えば、モーションキャプチャ技術があり、周知の技術である。なお、各部位を模した仮想人体については表示しなくても良い。
【００４１】
尚、ここで仮想人体を設定した理由は、人体、例えば、手の形状データを予め用意し、現実の手にその形状データを重畳させれば、後に示す情報処理装置上において、手と仮想物体との干渉（接触）を計算することができる。これにより、マーカを設置した以外の人体の部位において仮想物体との干渉が生じても、人体のどの部分で干渉が生じたかが判明する。
【００４２】
マーカの位置でのみ干渉を検出する場合もしくはマーカを多数配置する場合においては、必ずしも仮想人体を設定する必要は無い。しかしながら、人体のさまざまな場所において仮想物体との干渉が検出できる、または、マーカ数を減らすために、仮想人体を設定して仮想物体との干渉を判定することがより望ましい。
【００４３】
位置判定部１０８は、仮想人体と、それ以外の仮想物体（人体以外の仮想物体であり、以下では単に、仮想物体と呼称する）との干渉判定処理を行う。係る処理については周知の技術であるので、係る処理についての説明は省略する。なお、以下の説明では、「人体と仮想物体との衝突」という表現を行う場合があるが、実質的には「人体の部位を模した仮想物体とその他の仮想物体との衝突」である。
【００４４】
制御部３は、仮想物体と干渉（衝突）している仮想人体が模している部位に配されている刺激発生部１１０を駆動させる制御処理を行う。
【００４５】
図１４は、情報処理装置１０５に適用可能なコンピュータのハードウェア構成を示すブロック図である。
【００４６】
１４０１はＣＰＵで、ＲＡＭ１４０２やＲＯＭ１４０３に格納されているプログラムやデータを用いて本コンピュータ全体の制御を行うと共に、情報処理装置１０５が行うものとして説明する後述の各処理を実行する。即ち、図１に示した位置検出部１０７、位置判定部１０８、制御部１０３、画像出力部１１３のそれぞれをソフトウェアでもって実装した場合、ＣＰＵ１４０１がこのソフトウェアを実行することで、ＣＰＵ１４０１はこれら各部の機能を実現することになる。なお、これら各部を実現するソフトウェアのプログラムは、例えば、後述する外部記憶装置１４０６に保存されている。
【００４７】
１４０２はＲＡＭで、外部記憶装置１４０６からロードされたプログラムやデータを一時的に記憶するためのエリアや、Ｉ／Ｆ（インターフェース）１４０７を介して外部から受信した各種の情報を一時的に記憶するためのエリアを有する。また、ＲＡＭ１４０２は、ＣＰＵ１４０１が各種の処理を実行する際に用いるワークエリアも有する。即ち、ＲＡＭ１４０２は各種のエリアを適宜提供することができる。
【００４８】
１４０３はＲＯＭで、設定データやブートプログラムなどを格納する。
【００４９】
１４０４は操作部で、キーボードやマウスなどにより構成されており、本コンピュータの操作者が操作することで、各種の指示をＣＰＵ１４０１に対して入力することができる。
【００５０】
１４０５は表示部で、ＣＲＴや液晶画面等により構成されており、ＣＰＵ１４０１による処理結果を画像や文字などでもって表示することができる。
【００５１】
１４０６は外部記憶装置で、ハードディスクドライブに代表される大容量情報記憶装置である。ここにはＯＳ（オペレーティングシステム）や、情報処理装置１０５が行うものとして説明する後述の各処理をＣＰＵ１４０１に実行させるためのプログラムやデータが保存されている。また、上記記録装置１０９が保持しているものとして説明した各種の情報もまた、この外部記憶装置１４０６に保存されている。また、既知の情報として説明している情報についてもまた、この外部記憶装置１４０６に保存されている。
【００５２】
外部記憶装置１４０６に保存されているプログラムやデータは、ＣＰＵ１４０１による制御に従って適宜ＲＡＭ１４０２にロードされる。そして、ＣＰＵ１４０１が、このロードされたプログラムやデータを用いて処理を実行することで、本コンピュータは、情報処理装置１０５が行うものとして後述する各処理を実行することになる。
【００５３】
１４０７はＩ／Ｆで、上記カメラ１０６、それぞれの刺激発生部１１０、ＨＭＤ１３０はこのＩ／Ｆ１４０７に接続されている。なお、カメラ１０６、刺激発生部１１０、ＨＭＤ１３０のそれぞれに固有のＩ／Ｆを設けるようにしても良い。
【００５４】
１４０８は上述の各部を繋ぐバスである。
【００５５】
＜人体と現実物体との衝突について＞
次に、人体と現実物体とが衝突した場合に、人体に対して生じる振動状況について説明する。以下の説明では、人体の一例として「手」を用いるが、以下の説明は、部位が如何なるものであっても実質的に同様である。
【００５６】
図２は、手２０１と現実物体３０４とが衝突した場合における、手２０１への振動状況を説明する図である。同図においてＰ０は、手２０１と現実物体３０４とが衝突した箇所（衝突点）を示す。衝突点Ｐ０は手２０１のひらの小指側の縁であり、点Ｐ１は手２０１のひら中央、点Ｐ２は親指部分である。
【００５７】
更に同図には、手２０１と現実物体３０４とが衝突点Ｐ０において衝突した場合における各点Ｐ０、Ｐ１、Ｐ２における皮膚の振動状況を、横軸を時刻、縦軸を加速度としてそれぞれ示している。グラフ中で、時刻ｔ０が手２０１と現実物体３０４とが衝突した時刻を示す。衝突点Ｐ０では、時刻ｔ０で衝突による皮膚振動が発生する。また、時刻ｔ０から遅れた時刻ｔ１では点Ｐ１で振動が発生し、それよりも遅れた時刻ｔ２では点Ｐ２で皮膚表面の振動が発生する。
【００５８】
このように、現実物体との衝突時には、衝突点の位置のみならず、その周囲に衝突の衝撃が伝搬している。また、衝突点位置周囲の振動は、所定時間の遅れと、振動の減衰を伴う。振動の発生の遅れは、衝突点位置からの距離により決まる。図２では、点Ｐ０から点Ｐ１、点Ｐ２と遠くなるにつれて、振動の開始時刻がｔ１、ｔ２と遅れている。一方、振動強度についても、衝突点Ｐ０から離れるに従って、振動強度が減衰している。図２では、点Ｐ０から点Ｐ１、点Ｐ２と遠くなるにつれて、振動の強度（振幅）が小さくなっている。
【００５９】
図２では、衝突時の基本的な振動伝達について示したが、実際には、人体各部位での振動の起こりやすさや、振動の伝達しやすさにより伝達時間や振動強度に変化が生じる。従って、より正確には、衝突点からの距離に加え、人体各部位の特性を考慮する方が良い。また、衝突時の衝撃は、衝突時の人体または物体の速度・加速度、さらに物体の硬さなどの特性により変化する。
【００６０】
以上のことを鑑み、本実施形態では、ユーザの仮想人体と仮想物体との衝突時における衝撃を、複数の刺激発生部１１０を用いて模倣することにより、よりリアルな衝突感覚をユーザに与えることを目的とする。
【００６１】
以下の説明では、ユーザの手１と、仮想物体との衝突を例に取り説明するが、ユーザの他の部位と仮想物体との衝突についても同様の説明が当てはまる。
【００６２】
＜仮想人体と仮想物体との衝突について＞
先ず、仮想人体と仮想物体との衝突の検知について説明する。係る検知は上述の通り、位置判定部１０８により行われる。上述の通り、位置検出部１０７は、手１を含むユーザの各部位の位置姿勢を求める。そして、求めた各部位の位置姿勢に、各部位を模した仮想物体を配置する処理を行う。従って当然、ユーザの手１の位置姿勢には、手１を模した仮想人体が配置されていることになる。
【００６３】
位置判定部１０８は、この手１を模した仮想人体と仮想物体との干渉判定処理を行う。そして干渉していると判定した場合には、その干渉している箇所（衝突点）の位置を特定する。
【００６４】
また、手１には上述の通り複数の刺激発生部１１０が配されており、その配されている位置は、予め測定されている。従って、手１を模した仮想人体上における刺激発生部１１０の位置は特定できる。
【００６５】
従って、制御部１０３は、衝突点の位置と、それぞれの刺激発生部１１０の位置とを用いて、どの刺激発生部１１０に対してどのような駆動制御を行うのかを決定する。
【００６６】
図９は、手１を模した仮想人体上における衝突点の位置と、複数の刺激発生部１１０の位置との関係に基づく、複数の刺激発生部１１０の制御について説明する図である。
【００６７】
同図において９００は、手１を模した仮想人体である。１６、１７、１８、１９は何れも、手１に配された刺激発生部を示す。なお、同図では、刺激発生部１６〜１９は以下の説明のために示しているものであり、仮想人体９００上に配置されているものではない。
【００６８】
刺激発生部１９は、手の甲側に配置された刺激発生部である。以下の説明では、衝突点の位置を、刺激発生部１６の位置であるとして説明するが、以下の説明は、衝突点の位置が如何なる位置であったとしても実質的には同じである。
【００６９】
先ず制御部１０３は、衝突点の位置１６と、各刺激発生部１６〜１９の位置との間の距離を求める。係る距離は、２点間の直線距離として求めても良いし、仮想人体９００に沿って求めてもよい。仮想人体に沿った距離を求める方法では、仮想物体を予め複数の部位に分割し、複数の部位にまたがる点間の距離を求める場合には、部位間の接合点を介した距離を求めれば良い。例えば、仮想人体９００に沿った距離を求める方法について説明する。衝突点の位置１６と刺激発生部１６との距離は０である。衝突点の位置１６と、刺激発生部１７との距離は、２点間の直線距離からａである。衝突点の位置１６と刺激発生部１８との距離は、まず、衝突点の位置１６から手のひらと親指の接合点までの距離ｂ１を求める。さらに、接合点から刺激発生部１８までの距離ｂ２を求め、この合計である距離ｂを衝突点の位置１６と刺激発生部１８との距離とする。衝突点の位置１６と刺激発生部１９との距離は、仮想人体９００の内部を貫通する方向に距離を求めれば良いので、同図ではｃとなる。上記の例では、手のひら部分と親指部分に分割したが、関節ごとに部位を分割しても良い。
【００７０】
そして制御部１０３は、衝突点の位置１６から各刺激発生部への距離に基づいて、各刺激発生部による刺激を制御すべく、各刺激発生部の駆動制御を行う。以下では、制御部１０３による各刺激発生部への制御例について説明する。
【００７１】
＜刺激制御について＞
図３は、手１を模した仮想人体３０１と仮想物体２との衝突について示す図である。同図において１１０ａ、１１０ｂ、１１０ｃはそれぞれ、手１に配された刺激発生部である。刺激発生部１１０ａは手１のひらの小指側の縁にあり、刺激発生部１１０ｂは手１のひら中央にあり、刺激発生部１１０ｃは親指部分にある。
【００７２】
ここで、仮想人体３０１上における刺激発生部１１０ａの位置と、仮想物体２とが衝突したとする。この場合、衝突点の位置（刺激発生部１１０ａの位置）からの距離は、刺激発生部１１０ｂ、刺激発生部１１０ｃの順に近い。
【００７３】
このような状況において、各刺激発生部１１０ａ〜１１０ｃに対する制御例を幾つか以下に示す。
【００７４】
＜刺激制御例１＞
図４は、衝突点からの距離に応じた、各刺激発生部１１０ａ〜１１０ｃにおける刺激の発生タイミングを示す図である。図４（ａ）は、刺激発生部１１０ａにおける刺激の発生タイミングを示すグラフを示している。図４（ｂ）は、刺激発生部１１０ｂにおける刺激の発生タイミングを示すグラフを示している。図４（ｃ）は、刺激発生部１１０ｃにおける刺激の発生タイミングを示すグラフを示している。何れのグラフも、横軸に時刻、縦軸に加速度（ここでの刺激発生部１１０ａ〜１１０ｃは、機械的な振動刺激を発生するもので振動などの動作を行うため）をとっている。
【００７５】
同図に示す如く、衝突点に位置する刺激発生部１１０ａは、衝突の発生と共に（衝突時刻に）振動を開始するのに対し、衝突点から離れている刺激発生部１１０ｂは、衝突時刻から所定の時間が経過してから振動を開始する。そして更に衝突点から離れている刺激発生部１１０ｃは、刺激発生部１１０ｂによる振動開始タイミングよりも更に所定時間経過してから振動を開始する。
【００７６】
このように、各刺激発生部１１０ａ〜１１０ｃは、衝突点からの距離が遠いほど、衝突時刻から遅れて振動を開始する。これにより、衝突点からの振動の広がりを、それぞれの刺激発生部１１０ａ〜１１０ｃにより表現することができる。
【００７７】
従って、制御部１０３は、衝突点に位置する刺激発生部１１０ａに対しては、衝突の発生と共に（衝突時刻に）振動を開始させるよう、駆動制御する。そして所定時間の経過後、刺激発生部１１０ｂを駆動制御し、刺激発生部１１０ｂによる振動を開始させる。そして更に所定時間の経過後、刺激発生部１１０ｃを駆動制御し、刺激発生部１１０ｃによる振動を開始させる。
【００７８】
＜刺激制御例２＞
図５は、衝突点からの距離に応じた、各刺激発生部１１０ａ〜１１０ｃにおける刺激の強度を示す図である。図５（ａ）は、刺激発生部１１０ａにおける刺激の強度を示すグラフを示しており、図５（ｂ）は、刺激発生部１１０ｂにおける刺激の強度を示すグラフを示しており、図５（ｃ）は、刺激発生部１１０ｃにおける刺激の強度を示すグラフを示している。何れのグラフも、横軸に時刻、縦軸に加速度をとっている。
【００７９】
同図に示す如く、衝突点は、最も衝突の影響を受けている。従って、衝突点に設けられた刺激発生部１１０ａによる振動は、衝突点以外の地点に設けられた刺激発生部１１０ｂ、１１０ｃよりも大きいものとなる。更に、刺激発生部１１０ｃよりも刺激発生部１１０ｂの方が、衝突点に近いので、刺激発生部１１０ｂによる振動は、刺激発生部１１０ｃよりも大きいものとなる。
【００８０】
このように、各刺激発生部１１０ａ〜１１０ｃによる振動は、衝突点からの距離（手１の表面上を経路とした場合における距離）が遠いほど、その振動は小さい。
【００８１】
従って、制御部１０３は、衝突点に位置する刺激発生部１１０ａに対しては、ある決められた強度の刺激を発生させるべく、振動幅を大きくする。刺激発生部１１０ｂについては刺激発生部１１０ａによる刺激の強度よりも小さい強度の刺激を発生させるべく、振動幅を刺激発生部１１０ａよりも小さくする。刺激発生部１１０ｃについては刺激発生部１１０ｂによる刺激の強度よりも小さい強度の刺激を発生させるべく、振動幅を刺激発生部１１０ｂよりも小さくする。
【００８２】
＜刺激制御例３＞
図４、５では、機械的刺激（振動刺激）の場合について説明したが、電気的刺激や、温度刺激等でも、刺激タイミングや刺激強度を変化させる制御を行うことで、同様の効果を得ることができる。その一例として、各刺激発生部１１０ａ〜１１０ｃに入力する駆動波形を変更させることで、それぞれの刺激発生部１１０ａ〜１１０ｃによる駆動を異ならせる場合について説明する。
【００８３】
図６は、それぞれの刺激発生部１１０ａ〜１１０ｃに対する制御部１０３からの駆動制御信号の波形を示す図である。図６（ａ）は、刺激発生部１１０ａに対する入力信号の波形を示すグラフで、図６（ｂ）は、刺激発生部１１０ｂに対する入力信号の波形を示すグラフで、図６（ｃ）は、刺激発生部１１０ｃに対する入力信号の波形を示すグラフである。何れのグラフも、横軸に時刻、縦軸に信号レベルをとっている。
【００８４】
同図に示す如く、刺激発生部１１０ａは衝突点に位置するものであるので、衝突時刻に駆動する必要がある。従って同図では、刺激発生部１１０ａに対しては衝突時刻に立ち上がるパルス信号を入力信号として入力する。また、刺激発生部１１０ｂは、衝突点から離れていることから、刺激発生部１１０ｂに対する入力信号において衝突時刻における立ち上がりは刺激発生部１１０ａにおける入力信号よりも緩やかとなっている。同様に、信号レベルの減衰についても、刺激発生部１１０ａにおける入力信号よりも緩やかとなっている。更に、刺激発生部１１０ｃについては、更に衝突点から離れているので、衝突時刻における立ち上がりは刺激発生部１１０ｂよりも更に緩やかとなっている。同様に、信号レベルの減衰についても、刺激発生部１１０ｂにおける入力信号よりも緩やかとなっている。
【００８５】
なお、係る入力信号を受ける刺激発生部１１０ａ〜１１０ｃは何れもどのような刺激を提示するものであっても良い。即ち、刺激発生部１１０ａ〜１１０ｃがどのような刺激を与えるものであったとしても、入力信号の形状をこのように異ならせることにより、刺激発生部による刺激の増減パターンを制御することができる。
【００８６】
なお、図４〜図６に示したグラフにおける波形の形状や振動回数については説明上図示したものであり、本実施形態はこれに限定するものではない。従って、例えば、手への衝突時における各箇所の振動波形を予め計測しておき、その計測した波形が再現されるように、各刺激発生部１１０ａ〜１１０ｃを制御しても良い。
【００８７】
＜刺激発生部１１０の駆動制御について＞
次に、衝突点と、各刺激発生部１１０ａ〜１１０ｃとの距離関係に基づいた、各刺激発生部１１０ａ〜１１０ｃの駆動制御について、簡単な例を挙げて説明する。
【００８８】
図７は、人体上において直線上に３つの刺激発生部１１０ａ〜１１０ｃが配されている場合における、この３つの刺激発生部１１０ａ〜１１０ｃに対する駆動制御について説明する図である。更に同図では、「×」で示した箇所が、仮想人体と仮想物体との衝突点であるとしている。
【００８９】
また、同図を用いた説明では、刺激発生部１１０ａ〜１１０ｃの制御例として、衝突点からの距離に応じて、各刺激発生部１１０ａ〜１１０ｃによる刺激強度を変更させる。なお、刺激開始タイミングや入力信号の波形をそれぞれの刺激発生部１１０ａ〜１１０ｃで異ならせる場合における各刺激発生部１１０ａ〜１１０ｃの制御例は、以下の説明を適宜変更すればよい。
【００９０】
先ず制御部１０３は、衝突点の位置（衝突位置）から、それぞれの刺激発生部１１０ａ〜１１０ｃの位置までの距離を算出する。同図の場合、衝突位置から刺激発生部１１０ａまでの距離は４センチ、衝突位置から刺激発生部１１０ｂまでの距離は２センチ、衝突位置から刺激発生部１１０ｃまでの距離は６センチとなっている。即ち、刺激発生部１１０ｂ、刺激発生部１１０ａ、刺激発生部１１０ｃの順に衝突位置に近い。
【００９１】
そこで、刺激発生部１１０ｂ、刺激発生部１１０ａ、刺激発生部１１０ｃの順に、発生する刺激が強いように、それぞれの刺激発生部１１０ａ〜１１０ｃを駆動制御する。例えば、刺激発生部が振動モータにより構成されている場合、係る振動モータをより早く回転させることで、より強い刺激を人体に対して与えることができる。また、刺激発生部が空気圧力により皮膚表面を圧迫することで人体に刺激を与えるものである場合には、この空気圧力をより大きくすることで、より強い刺激を人体に対して与えることができる。
【００９２】
即ち、衝突位置からｒの距離に位置する刺激発生部によって発生させる刺激強度Ｉ（例えば振動波形の最大振幅）は、単調減少関数ｆを用いてＩ＝ｆ（ｒ）と表される。
【００９３】
なお、図７には、衝突位置に衝突時の速度あるいは加速度を考慮して決定した刺激強度（仮想的な最大振動強度）を点線で示している。
【００９４】
図８は、人体上において直線上に３つの刺激発生部１１０ａ〜１１０ｃが配されている場合における、この３つの刺激発生部１１０ａ〜１１０ｃに対する駆動制御の別の形態について説明する図である。更に同図では、「×」で示した箇所が、仮想人体と仮想物体との衝突点であるとしている。
【００９５】
また、同図を用いた説明では、刺激発生部１１０ａ〜１１０ｃの制御例として、衝突点からの距離に応じて、各刺激発生部１１０ａ〜１１０ｃによる刺激強度を変更させる。なお、刺激開始タイミングや入力信号の波形をそれぞれの刺激発生部１１０ａ〜１１０ｃで異ならせる場合における各刺激発生部１１０ａ〜１１０ｃの制御例は、以下の説明を適宜変更すればよい。これにより、衝突点に対してより近い位置への刺激を行うことが出来る。
【００９６】
先ず制御部１０３は、衝突点の位置（衝突位置）から、それぞれの刺激発生部１１０ａ〜１１０ｃの位置までの距離を算出する。同図の場合、衝突位置から刺激発生部１１０ａまでの距離は４センチ、衝突位置から刺激発生部１１０ｂまでの距離は２センチ、衝突位置から刺激発生部１１０ｃまでの距離は６センチとなっている。即ち、刺激発生部１１０ｂ、刺激発生部１１０ａ、刺激発生部１１０ｃの順に衝突位置に近い。そこで、刺激発生部１１０ｂの位置を基準位置とし、この基準位置に仮想の刺激強度を設定する。そして、この基準位置からの距離が近い順に、発生する刺激が強いように、周囲の刺激発生部１１０ａ、１１０ｃを駆動制御する。即ち、基準位置（刺激発生部１１０ｂの位置）からｒの距離に位置する刺激発生部によって発生させる刺激強度Ｉ（例えば振動波形の最大振幅）は、単調減少関数ｆを用いてＩ＝ｆ（ｒ）と表される。
【００９７】
図８の場合、基準位置（刺激発生部１１０ｂの位置）から刺激発生部１１０ａまでの距離と、基準位置から刺激発生部１１０ｃまでの距離とは同じであるので、この場合刺激発生部１１０ａによる刺激強度と、刺激発生部１１０ｃによる刺激強度は同じにする。
【００９８】
また、上記の方法を組み合わせて用いても良い。例えば、図８を用いて説明したように、衝突位置に最も近い刺激発生部を、衝突の速度または加速度から決定した刺激強度で駆動制御させる。そして、その他の刺激発生部については、図７を用いて説明したように衝突位置からの絶対的な距離に応じた刺激強度で駆動制御させる。これにより、衝突時に必要となる刺激量に応じた刺激を行うことが出来る。
【００９９】
なお、以上の説明では、衝突点の位置と刺激発生部との間の距離に応じて刺激強度を求めた。しかし、予め測定した衝突時の衝撃伝達状況や、皮膚、骨、筋肉などの介在を考慮して、刺激発生部による刺激強度を求めても良い。例えば、予め測定した人体と実物体の衝突時の振動伝搬により、衝突点からの距離と振動の関係を数式や対応表として表し、刺激強度を決定するようにしても良い。また、衝突点位置と刺激発生部との間に介在する皮膚、骨、筋肉の量から、刺激量の伝達を算出しても良い。
【０１００】
例えば皮膚の影響を表す変数ｓ、骨の影響を表す変数ｂ、筋肉の影響を表す変数ｍ、衝突位置から刺激発生部までの距離を表す変数ｒを用いて、この刺激発生部によって発生させる刺激強度Ｉを、関数ｆを用いてＩ＝ｆ（ｒ、ｓ、ｂ、ｍ）としても良い。
【０１０１】
各変数には、衝突点位置から刺激発生部までの経路に介在する皮膚、骨、筋肉の厚さ（距離）を入力し、各人体要素で振動伝搬が減衰する影響を考慮して刺激強度を決定する。人体の衝撃伝達を考慮した要素を加えて、衝突点位置周囲の刺激発生部を制御することにより、さらに感触の向上した衝突感を表現することができるようになる。また、以上では刺激強度を用いて説明したが、同様に刺激発生の遅れ時間なども決定することができる。
【０１０２】
なお、以上説明した例は、手１を模した仮想人体と仮想物体との衝突点から、手１に配した各刺激発生部に対する距離に基づいて、各刺激発生部に対する駆動制御を行うものであった。従って、仮想物体が他の部位（例えば足）を模した仮想人体と衝突した場合には、この衝突点から、足に配した各刺激発生部に対する距離に基づいて、各刺激発生部に対する駆動制御を行う。また、手１に配した全ての刺激発生部について駆動することに限定するものではなく、衝突点からある決められた距離以内の刺激発生部についてのみ、駆動制御対象とするようにしても良い。
【０１０３】
＜情報処理装置１０５が行う処理全般について＞
上述の通り、情報処理装置１０５は、ＨＭＤ１３０に対して仮想空間画像を提示する処理を行うと共に、このＨＭＤ１３０を頭部に装着しているユーザの仮想人体と仮想物体との衝突による刺激を刺激発生部１１０によってユーザに与える処理を行っている。
【０１０４】
図１５は、情報処理装置１０５が仮想空間画像を提示している処理と並行して行う、刺激発生部１１０の駆動制御処理のフローチャートである。なお、同図のフローチャートに従った処理をＣＰＵ１４０１に実行させるためのプログラムやデータは、外部記憶装置１４０６に保存されている。このプログラムやデータは、ＣＰＵ１４０１による制御に従って適宜ＲＡＭ１４０２にロードされる。そしてＣＰＵ１４０１はこのロードされたプログラムやデータを用いて処理を実行するので、情報処理装置１０５は、以下説明する各処理を実行することになる。
【０１０５】
先ずステップＳ１５０１では、ＣＰＵ１４０１は、ユーザの人体の各部位に対応する仮想人体と、仮想物体との衝突があったか否かをチェックする。係る処理は、位置判定部１０８が行うものとして上述した処理に相当する。そして衝突がなかった場合には、同図のフローチャートに従った処理は終了し、仮想空間画像を提示する処理にリターンする。一方、衝突があった場合には、衝突点の位置を特定し、処理をステップＳ１５０２に進める。
【０１０６】
なお、一般に触覚用デバイスの制御は視覚デバイスの制御よりも高速レートが必要である。従って上述したように図１５のフローチャートに従った処理を終える度に仮想空間画像を提示する処理にリターンするのではなく、一定回数又は所定時間図１５のフローチャートの処理を行った後に仮想空間画像を提示する処理にリターンするようにしても良い。また、図１５の処理と、仮想空間画像の処理を並列処理するようにしても良い。
【０１０７】
ステップＳ１５０２では、衝突点の位置と、衝突した部位に装着されている複数の刺激発生部との距離を求める。上述の例では、手１に配されたそれぞれの刺激発生部の、手１を模した仮想人体上における各位置と、手１を模した仮想人体上における衝突点の位置との距離を求める。
【０１０８】
次にステップＳ１５０３では、距離に応じた刺激の提示を行うべく、各刺激発生部の駆動制御を行う。係る制御は、上述の例では、衝突点からの距離が長いほど、刺激開始タイミングを遅らせたり、刺激の強度を弱めたりする制御である。
【０１０９】
＜効果と変形例について＞
刺激発生部に対する駆動制御によって人体に与える刺激の広がりの範囲について説明する。まず、衝突点位置と刺激発生部との位置関係によって刺激強度を変化させる場合、衝突点位置から遠くなるほど刺激強度が弱くなり、ある一定以上離れた刺激発生部では、人体が感じる刺激以下の刺激を発生することになる。またさらに離れた刺激発生部では、刺激の強度がゼロになる、あるいは近似的にゼロになるため刺激発生部は動作しなくなる。このように、衝突点位置と刺激発生部の位置関係によって刺激強度を変化させる場合では、自然に衝突時に刺激を発生させる刺激発生部の範囲が定まる。
【０１１０】
一方、別の制御方法としては、予め刺激発生部を動作させる範囲を定めておいても良い。例えば、仮想物体との衝突点位置が手の範囲内であった場合、少なくとも手に装着した刺激発生部を動作させるようにしても良い。衝突点位置からの距離により、人体が感じる刺激強度以下の刺激が設定された刺激発生部が存在した場合でも、それが手の範囲内に装着されている場合には、所定の刺激量で刺激を発生させるようにする。
【０１１１】
また逆に、所定の範囲内のみの刺激発生部を動作させるように予め定めても良い。例えば、仮想物体との衝突点位置が手の範囲内であった場合、手の範囲のみの刺激発生部を動作させるようにし、それ以上の周囲の刺激発生部は駆動しないようにする。この場合では、衝突点位置が手の範囲であった場合には、腕に装着した刺激発生部は動作しない。
【０１１２】
以上のように衝突時の衝撃伝達を模倣する構成について説明したが、仮想人体と仮想物体との衝突速度・加速度の値が小さい場合には、以上の制御を行わないようにしても良い。仮想人体と仮想物体とがゆっくりと衝突した場合には、衝撃の力も弱いため、周囲の刺激発生部を駆動する必要性は必ずしもない。そのため、仮想人体または仮想物体の速度または加速度を予め設定しておき、その値以上で仮想人体と仮想物体とが衝突した場合には、衝撃感を模倣するため周囲の刺激発生部も駆動するようにする。所定の速度または加速度以下の衝突の場合には、衝突点位置、または衝突点位置近傍の一つの刺激発生部のみを動作させる制御を行う。
【０１１３】
また、衝撃を模倣するために、衝突点位置周囲の複数の刺激発生部を動作させた後、仮想人体と仮想物体の接触が継続している場合には、接触点位置をユーザに知覚させるため、一定の刺激を発生させる。
【０１１４】
図１１は、手１を模した仮想人体３０１と仮想物体との接触を検知した後、それぞれが接触を続けている場合における、上記各刺激発生部１１０ａ〜１１０ｃによる刺激を示す図である。図１１（ａ）は、刺激発生部１１０ａにおける刺激の強度を示すグラフを示しており、図１１（ｂ）は、刺激発生部１１０ｂにおける刺激の強度を示すグラフを示しており、図１１（ｃ）は、刺激発生部１１０ｃにおける刺激の強度を示すグラフを示している。何れのグラフも、横軸に時刻、縦軸に加速度をとっている。
【０１１５】
同図に示す如く、各刺激発生部１１０ａ〜１１０ｃを駆動制御させてから所定時間が経過したり、刺激発生部１１０ｃによる刺激の強度が所定量以下になったりした場合には、刺激提示のための各刺激発生部１１０ａ〜１１０ｃの駆動制御は終了させる。そして、次に、接触が継続していることをユーザに刺激でもって通知するために、例えば、接触点位置に最も近い刺激発生部のみを駆動制御する。どのように駆動制御するのかについては特に限定するものではない。同図では、接触点位置に最も近い位置に刺激発生部１１０ａが位置しているので、刺激発生部１１０ａのみについて、駆動制御している。
【０１１６】
＜変形例２＞
本実施形態は、人体位置を検出する方法と合わせて、実際の人体位置と実空間中に仮想的に存在する仮想物体の位置関係に基づいて、仮想物体表面に接触した感覚を人体に提示する技術に適用することが好適である。ここで、人体位置姿勢（部位）の検出方法としては、マーカとカメラを用いる方法や、カメラで撮影した映像を画像処理することで人体形状や位置を得る方法を用いても良い。また、磁気センサや加速度・角速度センサを用いた方法、光ファイバなどを用いたデータグローブにより手形状を取得する方法など、どのような方法を用いても良い。以上の計測方法によって、人体の動きを仮想人体に反映させることが出来る。
【０１１７】
また、刺激発生部による刺激強度を決定する要素として、衝突時の仮想人体または仮想物体の速度・加速度、さらに物体の硬さなどの特性を加えても良い。例えば、仮想人体と仮想物体との衝突時の仮想人体の動きが早い場合には、強い刺激を発生するように刺激発生部を駆動し、仮想人体の動きが遅い場合には、弱い刺激を発生するように刺激発生部を駆動する。この場合、仮想人体の速度・加速度は、人体位置を検出する方法から算出しても良いし、各部位に速度センサや加速度センサを装着しておき、速度センサや加速度センサの値を用いて各部位の速度や加速度を検出しても良い。
【０１１８】
また、衝突した仮想物体の物性が硬いものであれば、強い刺激を発生するように刺激発生部を駆動し、柔らかいものであれば、弱い刺激を発生するように刺激発生部を駆動する。このようにして決定する刺激強度の増減は、複数の刺激発生部にバイアスをかけることで実現しても良いし、衝突点位置（若しくは最近傍）にある刺激発生部の刺激強度を決定する場合にのみ用いても良い。この場合、仮想物体の硬度に係るパラメータを予め決めておき、外部記憶装置１４０６に保存しておく必要がある。
【０１１９】
また、衝突の速度・加速度または仮想物体の硬さの特性で変化させる刺激のパラメータは強度のみでなく、刺激発生のタイミングを変化させるようにしても良い。例えば、早い速度で衝突した場合や、硬い仮想物体に衝突した場合には、各刺激発生部による刺激発生の開始タイミング差を比較的短い時間にしても良い。
【０１２０】
また、さらに、人体が刺激に対して慣れることを考慮して、刺激強度を変更するようにしても良い。例えば、短時間の内に、何度も仮想人体と仮想物体とが衝突し、刺激発生部による刺激発生が連続的に起こると、人体が刺激に対して慣れてしまい、刺激を十分に感じなくなってしまう恐れがある。このような場合には、それ以前と同じ速度または加速度で仮想物体に衝突したとしても、刺激の強度を強くして、より明確に人体に刺激を感じさせるようにする。
【０１２１】
また、以上説明した制御方法は、単独で用いても良いし、組み合わせて用いても良い。例えば、図４と図５で説明した、刺激発生タイミングを遅らせる制御と刺激強度を減衰させる制御を組み合わせて、衝突位置から離れた場所にある刺激発生部では、刺激のタイミングが遅れるとともに、刺激強度が弱い刺激を与えるようにすればよい。
【０１２２】
また、前述したように皮膚、骨、筋肉などの影響による刺激変化を考慮する場合には、各刺激発生部までの経路中に存在する皮膚、骨、筋肉などの量に基づいた計算を行えばよい。その場合には、予め皮膚、骨、筋肉などと人体形状のモデルを用意しておく必要がある。
【０１２３】
また、特定の人体部位に特有の刺激決定方法を設定するようにしても良い。例えば、指などの人体末端では、衝突時の衝撃伝達により指全体が大きく振動する。皮膚の振動伝達のみでなく、このような衝撃の影響も模倣して人体に提示するために、指先に装着した刺激発生部では、衝突位置から算出された刺激よりも、振動量を大きくしても良い。
【０１２４】
また、衝突点位置と各刺激発生部との位置関係を求める別の方法として、予め人体の各部位の仮想物体を複数の領域に区切っておき、仮想物体の衝突点位置と周囲の刺激発生部との位置関係を、区切った領域に基づいて決定するようにしても良い。
【０１２５】
図１０（ａ）は、手を模した仮想人体の表面をセル状に区切った例を示す図である。図１０（ａ）では、セルの区切りを点線で表している。この例では、四角で各セルを区切っているが、区切る形状はこれに限らず、任意の多角形や、自由形状でも良い。図１０（ａ）では、刺激発生部を装着したセル２１や、空のセル２２があるが、全てのセル上に対応する手の位置に刺激発生部を備えるようにしても良い。
【０１２６】
図１０（ｂ）は、衝突点位置とその周囲における刺激強度の関係の対応表を示す図である。係る対応表では、中心のマス３０が衝突点位置である。
【０１２７】
マス内の１から３の数値は、刺激強度を相対的な値として表している。すなわち、衝突点位置近傍の３マス×３マスに対応するセル内に刺激発生部が存在する場合には、この刺激発生部による刺激の強度を「３」に対応するものとして設定する。同図に示す如く、係る対応表では、衝突点位置から離れるにつれて、刺激強度の値が減少していく。
【０１２８】
対応表に相対的な値を記述しておく方法では、衝突時の速度・加速度により衝突点位置あるいは衝突点位置近傍の刺激発生部による刺激を変化させたい場合に有効である。またこの例では、相対値を１から３の３段階にしているがこの値に限ることはない。また、相対的な値でなく、加速度などの具体的な刺激量を絶対的な値として設定しておいても良い。また、対応表で定める値は、刺激強度に限ることなく、刺激の発生遅れ時間や入力信号における周波数成分、刺激波形などを用いても良い。また、対応表の値は、常に同じ値を用いることなく、衝突時の速度・加速度や衝突位置によって動的に変更するようにしても良い。
【０１２９】
例えば、セル２０で仮想物体との衝突が生じたとする。この場合、衝突点位置に最も近い刺激発生部１４の位置を、マス３０に当てはめ、刺激発生部１４による刺激の強度を「３」に対応するものとして設定する。また、刺激発生部１５は、刺激発生部１４の２つ上のセルに位置しているので、マス３０から２つ上のマスに相当する。従って、刺激発生部１５による刺激の強度は、「２」に対応する刺激の強度に設定する。
【０１３０】
このように、部位を模した仮想人体を複数のセルに分割し、衝突点と各刺激発生部の相対的な位置関係をセル単位で決定する。そして、衝突点の位置近傍における刺激の強度を記した対応表を用いて、衝突点近傍における刺激発生部による刺激の強度を決定する。
【０１３１】
図１０では、どのセルで衝突が生じても同じ対応表を用いる場合について説明したが、各セルに独自の対応表を設けるようにしても良い。各セルに独自の対応表を設定することにより、各セルが存在する人体位置の周囲形状や皮膚、骨、筋肉などの状況に応じて、衝突時の衝撃伝搬を模倣することができるようになる。
【０１３２】
また、以上では人体表面を予め複数の領域に分割しておく方法について説明したが、領域の分割は衝突時に行い、衝突位置や衝突の速度・加速度または衝突の方向などに応じて動的に変化させても良い。
【０１３３】
［第２の実施形態］
本実施形態では、人体の形状の変化に伴って、衝突点と刺激発生部との距離が変化する場合について説明する。
【０１３４】
図１２は、人体の一例としての手の形状が変化した場合における、衝突点と刺激発生部との距離の変化を示す図である。同図において１２００は手を模した仮想人体であり、１２５０、１２５１は、手に配された刺激発生部を示す。
【０１３５】
手を握った状態と開いた状態とでは、手の形状は全く異なる。例えば、図１２（ａ）に示すように、刺激発生部１２５０の位置が衝突点である場合、衝突点から刺激発生部１２５１までの距離は、手を握った状態と、開いた状態とでは異なってしまう。図１２（ａ）では、手を模した仮想人体に沿って、衝突点から刺激発生部１２５１までの距離ｄを求めている。同図ではｄ＝ｄ１＋ｄ２＋ｄ３＋ｄ４＋ｄ５となっている。ここで、ｄ１〜ｄ５はそれぞれ、衝突点の位置から人差し指の仮想人体の根本までの距離、人差し指を構成する各部分の仮想人体の長さに相当する。
【０１３６】
しかし、実際には、衝突点からの刺激は手のひらを介して刺激発生部１２５１の位置に対して伝わるものもあるので、この距離ｄを用いて刺激発生部１２５１を制御すると、刺激の発生タイミングが遅すぎたり、刺激が弱すぎたりする可能性がある。そこで、このような場合には、手のひらから直接指先に伝わる衝撃を提示することが望ましい。
【０１３７】
そこで、図１２（ｂ）に示す如く、人体が相互に接触していることを検知した場合には、その連続性を考慮して衝突点位置からの距離を求めるようにする。図１２（ｂ）では、衝突点から手のひらを介して刺激発生部１２５１の位置までの距離ｅを求めている。そして、この距離ｅを用いて刺激発生部１２５１を制御することで、正確に衝撃伝達を模倣した刺激を発生させることができるようになる。
【０１３８】
なお、手を握っていない状態、すなわち指が手のひらなど他の人体部位に接触していない場合には、第１の実施形態のように人体の自然な形状に沿った方向で距離を求めれば良い。この制御の切り替えは、位置検出部１０７で人体の状態を判定することによって行えばよい。具体的には、人体の状態を判定し、人体同士で接触がある場合には、上記のように接触点を連続的な形状と見なして、衝突点位置から刺激発生部までの距離を求めればよい。
【０１３９】
以上の説明では手の形状が異なる場合について説明したが、本実施形態は、手部分のみに限らず、前腕と上腕、腕と胴体など人体中で接触が起こる部分ならば、どの部分に適用しても良い。
【０１４０】
［第３の実施形態］
本実施形態では、仮想人体と仮想物体が衝突した際、仮想人体と仮想物体との位置関係に基づいて複数の刺激発生部を駆動させることで、衝突点における仮想物体の表面方向をユーザに提示する場合について説明する。
【０１４１】
図１６は、仮想人体の一例としての手と、仮想物体と、が衝突した場合における、衝突点と刺激発生部との位置関係を示す図である。同図において１６１は手を模した仮想人体であり、１６２は仮想物体、１６３、１６４、１６５は、手に配された刺激発生部を示す。仮想人体１６１と仮想物体１６２とが衝突した場合、仮想物体１６２上における衝突点の表面方向は様々である。
【０１４２】
例えば、図１７Ｂに示すように、仮想人体１６１が仮想物体１６２において水平な部分と衝突する場合もあれば、図１７Ａに示すように、仮想人体１６１が仮想物体１６２において傾斜した部分に衝突する場合もある。本実施形態では、図１８に示すように接触点１８１を通過し、仮想物体１６２上（仮想物体上）の接触点における法線１８２を垂線として持つ平面１８３（基準面）を定義する。そして、この平面１８３から各刺激発生部１８４，１８５，１８６までの直線距離ｇ１，ｇ２，ｇ３を求める。
【０１４３】
人体を模した仮想人体や仮想物体として、表面方向の概念が無いボリュームデータ、例えばボクセルを使用している場合もある。このような場合は、ボリュームデータに対して例えば公知のマーチングキューブ法を用いて等値面を再構成することができ、これにより、表面方向を知ることが出来る。
【０１４４】
このようにして求めた距離ｇ１〜ｇ３を用いると、例えば、距離ｇ１〜ｇ３の大きさに比例して対応する刺激発生部１８４〜１８６の刺激開始時間を遅らせる、刺激強度を減衰させる等の制御ができる。以上の制御により、ユーザの手の表面上を仮想物体１６２の表面が通過したような感覚が得られ、面の方向をユーザに提示することが出来る。
【０１４５】
［第４の実施形態］
本実施形態では、仮想人体と仮想物体とが衝突した際の、仮想人体と仮想物体との位置関係に基づいて、複数の刺激発生部を駆動させることで、衝突した仮想物体の形状をユーザに提示する場合について説明する。
【０１４６】
図１９は、仮想人体の一例としての手と、仮想物体が衝突した場合における、衝突点と刺激発生部との距離を説明する図である。同図において１９１は手を模した仮想人体であり、１９２は仮想物体、１９３、１９４、１９５は、手に配された刺激発生部を示す。
【０１４７】
仮想人体１９１と仮想物体１９２とが衝突した場合、第３の実施形態のように、仮想物体の表面方向を提示するだけでなく、詳細な物体形状を示しても良い。本実施形態では、図１９で示すように、「距離」の大きさ（長さ）を、仮想人体１９１の各刺激発生部１９３〜１９５と仮想物体１９２とをそれぞれ結ぶ、仮想人体の移動方向１９６と平行なベクトルの大きさとして定義する。
【０１４８】
図１９の場合、仮想人体１９１と仮想物体１９２とが衝突したとき、各刺激発生部１９３、１９４、１９５のそれぞれと仮想物体１９２との距離ｈ１，ｈ２，ｈ３に応じて刺激発生部で刺激を与える。例えば、距離の大きさに比例して刺激開始時間を遅らせる、刺激強度を減衰させるなどの制御が出来る。移動方向に仮想物体１９２が存在しないと判断する場合、例えば他の仮想物体との距離が所定の大きさ以上となる刺激発生部１９３には、刺激を与えないようにしても良い。以上の制御によって、仮想物体の大きさも含めた、詳細な形状を示すことが出来るようになる。
【０１４９】
また、図２０に示すように、各刺激発生部２００１、２００２、２００３と仮想物体２００４の表面との最短距離となる距離を用いても良い。図２０では、仮想物体２００４から刺激発生部２００１までの距離をi１、刺激発生部２００２までの距離をi２、刺激発生部２００３までの距離をi３としている。このような距離を用いた場合も、何れかの距離が衝突したとされる距離（例えば、０）になるときに、各刺激発生部の距離に応じた刺激を与える。
【０１５０】
また、それぞれの距離計算手段は、刺激によって示したい情報、刺激発生部の種類、刺激発生部の位置などによって、適宜変化させても良い。
【０１５１】
［第５の実施形態］
以上の実施形態では、仮想人体と仮想物体とが接触した時点での制御について述べた。本実施形態では、各刺激発生部と仮想物体との位置関係に基づいて各刺激発生部を駆動することにより、仮想人体が仮想物体内に侵入する時に、係る侵入による仮想人体と仮想物体との干渉から離脱する方向をユーザに提示する。
【０１５２】
図２１は、仮想人体の一例としての手と仮想物体とが干渉した場合における、仮想物体の表面と刺激発生部との位置関係を示す図である。同図において２１０１は手を模した仮想人体であり、２１０２は仮想物体、２１０３、２１０４、２１０５は、手に配された刺激発生部を示す。
【０１５３】
図２１に示す如く、仮想人体２１０１が仮想物体２１０２内に侵入することも生じ得る。そして係る侵入によって、仮想人体２１０１と仮想物体２１０２との間に干渉が生じる。ユーザがこのような干渉状態から離脱するために、本実施形態では各刺激発生部で干渉から離脱する方向を教示する。
【０１５４】
本実施形態で用いる「距離」として、第１乃至４の実施形態のそれぞれで説明した様々な「距離」を用いることができる。以下では、本実施形態に適用可能な「距離」を求めるための処理のいくつかの例について説明する。
【０１５５】
図２２は、本実施形態で用いる「距離」を求める処理を説明する図である。図２２において２２０１は手を模した仮想人体、２２０２は仮想物体、２２０４，２２０５，２２０６は手に配された刺激発生部である。また、２２０３は、仮想人体２２０１において、最も仮想物体２２０２の内部に深く位置する１点を示す。係る点を求めるための処理については周知の通りであるが、例えば、仮想物体２２０２の表面を構成する各点からの距離の平均が最も遠い仮想人体２２０１上の点をこの１点として求める。
【０１５６】
この場合、位置２２０３から各刺激発生部２２０４〜２２０６への直線距離ｊ１〜ｊ３を求める。そしてそれぞれの刺激発生部２２０４〜２２０６に対する制御をそれぞれ距離ｊ１〜ｊ３を用いて行う。
【０１５７】
図２３は、本実施形態で用いる「距離」を求める処理を説明する図である。図２３において２３００は手を模した仮想人体、２３９９は仮想物体、２３０５，２３０６，２３０７は手に配された刺激発生部である。また、２３０１は、仮想人体２３００において、最も仮想物体２３９９の内部に深く位置する１点を示す。係る点を求めるための処理については上述の通りである。また、２３０２は、係る１点２３０１から最短距離となる仮想物体２３９９の表面上の１点を示す。そして係る１点２３０２における仮想物体２３９９上の法線は２３０３で示しており、係る法線２３０３を有し、１点２３０２に接する平面を２３０４で示す。
【０１５８】
この場合、各刺激発生部２３０５〜２３０７の位置から垂直に平面２３０４上におろした線分の長さ（距離）ｋ１〜ｋ３を求める。そしてそれぞれの刺激発生部２３０５〜２３０７に対する制御をそれぞれ距離ｋ１〜ｋ３を用いて行う。
【０１５９】
図２４は、本実施形態で用いる「距離」を求める処理を説明する図である。図２４において２４００は手を模した仮想人体、２４９９は仮想物体、２４０４，２４０５，２４０６は手に配された刺激発生部である。また、２４０１は、仮想人体２４００において、最も仮想物体２４９９の内部に深く位置する１点を示す。係る点を求めるための処理については上述の通りである。また、２４０２は、係る１点２４０１から最短距離となる仮想物体２４９９の表面上の１点を示す。
【０１６０】
この場合、各刺激発生部２４０４〜２４０６の位置から、１点２４０２から１点２４０１に向かうベクトルに沿った方向に延長した場合に、仮想物体２４９９の表面と交差する位置までの距離をそれぞれ、ｌ１，ｌ２，ｌ３として求める。そしてそれぞれの刺激発生部２４０４〜２４０６に対する制御をそれぞれ距離ｌ１〜ｌ３を用いて行う。
【０１６１】
図２５は、本実施形態で用いる「距離」を求める処理を説明する図である。図２５において２５１は手を模した仮想人体、２５２は仮想物体、２５３，２５４，２５５は手に配された刺激発生部である。
【０１６２】
この場合、各刺激発生部２５３〜２５５の位置から、仮想物体２４９９の表面に対する最短距離をそれぞれ、ｍ３，ｍ１，ｍ２として求める。そしてそれぞれの刺激発生部２５３〜２５５に対する制御をそれぞれ距離ｍ３，ｍ１，ｍ２を用いて行う。
【０１６３】
なお、図２２から図２５の何れも、仮想物体内に存在する刺激発生部に対してのみ、制御としている。
【０１６４】
このように、図２２から図２５に示した各距離の大きさに比例して刺激強度を減衰させる、刺激発生時間を距離に応じて遅らせながら、断続的に刺激する、距離が一定以上の場合は刺激にパターンを付加する、もしくは刺激しない、などの制御を行えば良い。
【０１６５】
また、上記各距離計算方法は、仮想人体と仮想物体とが干渉している刺激発生部のみで行い、干渉していない部分の刺激発生部では刺激しないように制御しても良い。以上の制御によって、仮想人体と仮想物体とが干渉を生じたときに、離脱の補助とすることが出来る。
【０１６６】
また、それぞれの距離計算手段は、刺激発生部の種類、刺激発生部の位置などによって、適宜変化させても良い。
【０１６７】
ここで、上記各実施形態において、第２の実施形態は他の実施形態を実施するか否かにかかわらず同時に実施するか、若しくは、人体および人体と仮想物体との位置関係に応じて切り替えることが出来る。また、第１の実施形態、第３の実施形態、第４の実施形態は同時に実施することは出来ないが、示したい刺激の内容によって切り替えても良い。例えば、刺激の広がりを示したい場合は、第１の実施形態を使用する。仮想物体の表面方向を示したい場合は、第３の実施形態を使用する。仮想物体の形状を示したい場合には、第４の実施形態を使用する。
【０１６８】
または、人体と仮想物体との関係に応じて、随時切り替えるなどの使用方法も有効である。例えば、通常は第１の実施形態を用いて仮想物体を見ながら干渉した感覚をよりリアルに表現する。そして、人体と干渉する仮想物体が他の仮想物体の陰に隠れて見えなくなれば、第３、若しくは第４の実施形態に切り替え、干渉した仮想物体の表面方向や形状を把握する等の方法により、仮想環境を用いた作業性検証等をより効果的に行うことが可能となる。
【０１６９】
また、第５の実施形態は、第１の実施形態、第３の実施形態、第４の実施形態と同時に実施することも可能である。しかし、刺激の重畳により刺激強度が必要以上に大きくなってしまうことなどから、人体と仮想物体との干渉の度合いが大きくなった場合に、第１もしくは第３もしくは第４の実施形態、から第５の実施形態に切り替えるなどの方法が望ましい。
【０１７０】
［その他の実施形態］
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコード（コンピュータプログラム）を記録した記録媒体（または記憶媒体）を、システムあるいは装置に供給する。そして、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体（コンピュータ読み取り可能な記録媒体）は本発明を構成することになる。
【０１７１】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１７２】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１７３】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１７４】
【図１】本発明の第１の実施形態に係るシステムの機能構成を示すブロック図である。
【図２】手２０１と現実物体３０４とが衝突した場合における、手２０１への振動状況を説明する図である。
【図３】手１を模した仮想人体３０１と仮想物体２との衝突について示す図である。
【図４】衝突点からの距離に応じた、各刺激発生部１１０ａ〜１１０ｃにおける刺激の発生タイミングを示す図である。
【図５】衝突点からの距離に応じた、各刺激発生部１１０ａ〜１１０ｃにおける刺激の強度を示す図である。
【図６】それぞれの刺激発生部１１０ａ〜１１０ｃに対する制御部１０３からの駆動制御信号の波形を示す図である。
【図７】人体上において直線上に３つの刺激発生部１１０ａ〜１１０ｃが配されている場合における、この３つの刺激発生部１１０ａ〜１１０ｃに対する駆動制御について説明する図である。
【図８】人体上において直線上に３つの刺激発生部１１０ａ〜１１０ｃが配されている場合における、この３つの刺激発生部１１０ａ〜１１０ｃに対する駆動制御の別の形態について説明する図である。
【図９】手１を模した仮想人体上における衝突点の位置と、複数の刺激発生部１１０の位置との関係に基づく、複数の刺激発生部１１０の制御について説明する図である。
【図１０】（ａ）は、手を模した仮想人体の表面をセル状に区切った例を示す図、（ｂ）は、衝突点位置とその周囲における刺激強度の関係の対応表を示す図である。
【図１１】手１を模した仮想人体３０１と仮想物体との接触を検知した後、それぞれが接触を続けている場合における、上記各刺激発生部１１０ａ〜１１０ｃによる刺激を示す図である。
【図１２】人体の一例としての手の形状が変化した場合における、衝突点と刺激発生部との距離の変化を示す図である。
【図１３】従来の振動モータを使用した接触提示装置の機能構成を示すブロック図である。
【図１４】情報処理装置１０５に適用可能なコンピュータのハードウェア構成を示すブロック図である。
【図１５】情報処理装置１０５が仮想空間画像を提示している処理と並行して行う、刺激発生部１１０の駆動制御処理のフローチャートである。
【図１６】仮想人体の一例としての手と、仮想物体と、が衝突した場合における、衝突点と刺激発生部との位置関係を示す図である。
【図１７Ａ】仮想人体１６１と仮想物体１６２との衝突例を示す図である。
【図１７Ｂ】仮想人体１６１と仮想物体１６２との衝突例を示す図である。
【図１８】仮想人体１６１と仮想物体１６２との衝突における表面方向をユーザに提示するための処理について説明する図である。
【図１９】仮想人体の一例としての手と、仮想物体が衝突した場合における、衝突点と刺激発生部との距離を説明する図である。
【図２０】仮想人体の一例としての手と、仮想物体が衝突した場合における、衝突点と刺激発生部との距離を説明する図である。
【図２１】仮想人体の一例としての手と、仮想物体と、が干渉した場合における、仮想物体の表面と、刺激発生部との位置関係を示す図である。
【図２２】本発明の第５の実施形態で用いる「距離」を求める処理を説明する図である。
【図２３】本発明の第５の実施形態で用いる「距離」を求める処理を説明する図である。
【図２４】本発明の第５の実施形態で用いる「距離」を求める処理を説明する図である。
【図２５】本発明の第５の実施形態で用いる「距離」を求める処理を説明する図である。
【図１】
2008134990.tif 000003
【図２】
2008134990.tif 000004
【図３】
2008134990.tif 000005
【図４】
2008134990.tif 000006
【図５】
2008134990.tif 000007
【図６】
2008134990.tif 000008
【図７】
2008134990.tif 000009
【図８】
2008134990.tif 000010
【図９】
2008134990.tif 000011
【図１０】
2008134990.tif 000012
【図１１】
2008134990.tif 000013
【図１２】
2008134990.tif 000014
【図１３】
2008134990.tif 000015
【図１４】
2008134990.tif 000016
【図１５】
2008134990.tif 000017
【図１６】
2008134990.tif 000018
【図１７Ａ】
2008134990.tif 000019
【図１７Ｂ】
2008134990.tif 000020
【図１８】
2008134990.tif 000021
【図１９】
2008134990.tif 000022
【図２０】
2008134990.tif 000023
【図２１】
2008134990.tif 000024
【図２２】
2008134990.tif 000025
【図２３】
2008134990.tif 000026
【図２４】
2008134990.tif 000027
【図２５】
2008134990.tif 000028