【課題】移動体に搭乗する利用者に提供されているバーチャル空間で衝突イベントが発生した場合に、弾性体との衝突感覚を利用者に提示することができる衝突感覚提示システム及びプログラムを提供する。
【解決手段】移動体のサスペンションを振動させることにより、移動体に搭乗する利用者に衝突感覚を提示する衝突感覚提示装置と、バーチャル空間における物体同士の衝突の発生が予測される場合に、衝突の発生に合わせて、バーチャル空間における衝突による物体の変位量、又は物体同士の弾性の差分に応じた振幅でサスペンションを振動させるように、移動体の各部を駆動制御する駆動制御装置と、を備えた衝突感覚提示システムとする。
【発明を実施するための形態】
【0011】
以下、図面を参照して本発明の実施の形態の一例を詳細に説明する。
【0012】
<第1の実施の形態>
(衝突感覚提示システム)
まず、衝突感覚提示システムの概略を簡単に説明する。
図1は本発明の第1の実施の形態に係る衝突感覚提示システムの概略を示す概略図である。
図1に示すように、本実施の形態に係る衝突感覚提示システムでは、サスペンションを備えた移動体44をモーション・プラットホーム(MP)として利用して、ユーザ12にバーチャル空間で発生するイベントを体験させるバーチャル・リアリティ・コンテンツ(VRコンテンツ)を提供する。サスペンションを備えた移動体44としては、車両、電動車椅子等が挙げられる。
【0013】
ユーザ12は、ヘッド・マウント・ディスプレイ(HMD)50を装着して移動体44に搭乗している。HMD50は、バーチャル空間の映像や音声をユーザ12に提示する。移動体44は、衝突、移動、傾斜、温度変化等、バーチャル空間で発生するイベントに応じて駆動される。これにより、移動体44に搭乗しているユーザ12に、イベントに応じた感覚が提示される。人間は複数の感覚を統合することで、身の周りで起きる現象を認識している。このため、映像(視覚)と他の感覚とが同時に提示されることで、ユーザ12がバーチャル空間の情報は事実だと錯覚し、VRコンテンツの臨場感が高まるのである。
【0014】
本実施の形態では、移動体44をMPとして利用して、衝突イベントに応じた衝突感覚を提示する場合について説明する。本実施の形態に係る衝突感覚提示システムは、バーチャル空間において物体同士の衝突イベントが発生する場合に、移動体44を駆動して衝突イベントに応じた衝突感覚をユーザ12に提示すると共に、HMD50を介して衝突イベントを反映させた映像や音声をユーザ12に提示する。
【0015】
次に、衝突感覚提示システムの構成について説明する。
図2は本発明の第1の実施の形態に係る衝突感覚提示システムの構成の一例を示すブロック図である。
図2に示すように、衝突感覚提示システムは、VRコンテンツ再生装置10と、感覚提示装置群40とを備えている。
【0016】
VRコンテンツ再生装置10は、VRコンテンツ記憶部11、衝突解析部14、及び情報更新部16を備えている。衝突解析部14は、衝突イベント検出部18と衝撃生成部20とを備えている。感覚提示装置群40には、移動体44、映像表示装置46、及び音声出力装置48が含まれている。なお、後述する通り、本実施の形態では、HMD50が、映像表示装置46と音声出力装置48とを備えている。
【0017】
VRコンテンツ記憶部11には、VRコンテンツが記憶されている。衝突解析部14は、VRコンテンツ記憶部11から次に再生するVR映像情報を読み出す。衝突イベント検出部18は、VR映像情報から衝突イベントを検出する。衝突イベントが検出された場合、衝撃生成部20は、衝突イベント検出部18から衝突情報を取得し、取得された衝突情報から衝突イベントに応じた駆動情報を生成する。ここで「駆動情報」とは、駆動対象を駆動制御する駆動制御値の経時変化を表す「駆動パターン」である。駆動パターンは、アクセル電圧の波形パターン等、駆動対象毎に求められる。
【0018】
情報更新部16は、駆動情報に基づいて所定時間毎に(例えば、0.01秒毎に)駆動制御値を取得して、取得した駆動制御値を「制御情報」として移動体44に出力する。駆動制御値(制御情報)は、所定時間毎に更新される。移動体44は、得られた「制御情報」に基づいて駆動制御される。移動体44が駆動されて、衝突イベントに応じた衝突感覚がユーザ12に提示される。
【0019】
衝撃生成部20は、衝突イベントに応じた駆動情報を生成すると共に、衝突イベントを反映させた映像情報及び音声情報も生成する。映像情報及び音声情報は、制御情報を出力するタイミングで、HMD50(映像表示装置46と音声出力装置48)に出力される。これにより、映像及び音声が、移動体44の動きと同期して切り替わる。HMD50を介して衝突イベントを反映させた映像や音声がユーザ12に提示される。
【0020】
ここで、VRコンテンツ再生装置10の電気的構成について説明する。
図3はVRコンテンツ再生装置の電気的構成の一例を示すブロック図である。
VRコンテンツ再生装置10は、コンピュータとして構成されている。即ち、VRコンテンツ再生装置10は、CPU10A、ROM10B、RAM10C、不揮発性のメモリ10D、及び入出力部(I/O)10Eを備えている。これら各部は、バス10Fを介して互いに接続されている。CPU10Aは、ROM10Bに記憶されたプログラム等を読み出し、RAM10Cをワークエリアとして使用してプログラムを実行する。
【0021】
I/O10Eには、外部装置と通信を行う通信部21、ユーザからの操作を受け付ける操作部23、ユーザに情報を表示する表示部25、及び情報を記憶する記憶部27が接続されている。また、VRコンテンツ再生装置10のI/O10Eには、移動体44及びHMD50が接続されている。通信部21、操作部23、表示部25、記憶部27、移動体44、及びHMD50の各々は、VRコンテンツ再生装置10により制御されており、VRコンテンツ再生装置10との間で情報をやり取りする。
【0022】
なお、HMD50は、映像表示装置46と音声出力装置48の他に、ユーザ12の頭部の動きを検出する頭動作検出装置49を備えている。頭動作検出装置49は、3軸又は6軸の加速度センサなどで構成されている。また、移動体44及びHMD50の各々が、コンピュータを内蔵する通信可能な電子機器である場合は、通信部21を介して、移動体44及びHMD50の各々と情報をやり取りしてもよい。
【0023】
また、移動体44をMPとして使用する場合の、移動体44の駆動制御系について説明する。
図4は移動体44の駆動制御系の一例を示すブロック図である。ここでは、移動体44が「車両」である場合について説明する。
図4に示すように、移動体44は、操作部26、車速計28等の計測部、駆動部30、駆動対象32、及びタイヤ42を備えている。
【0024】
操作部26としては、ペダル26A、26D、レバー26B、ハンドル26C、リモコン26Eが例示されている。駆動部30としては、D/Aコンバータ30A、インターフェイス(I/O)30B、30E、モータ30C、30Dが例示されている。駆動対象32としては、アクセル32A、シフト(シフトレバー)32B、ステアリング32C、ブレーキ32D、エアサスペンション32Eが例示されている。
【0025】
移動体44がVRコンテンツ再生装置10に接続されている場合には、実線で図示するように、VRコンテンツ再生装置10は、操作部26の操作を模擬して駆動パターンを生成し、駆動パターンに基づいて移動体44を駆動制御するための制御情報を生成する。そして、VRコンテンツ再生装置10は、得られた制御情報を、移動体44に出力する。移動体44では、入力された制御情報に応じて、駆動部30を介して駆動対象32が駆動制御される。即ち、移動体44はMPとして利用される。
【0026】
例えば、ユーザ12に衝突による衝撃を体感させたい場合には、「シフトをDに切り替えて、アクセルをオンにした後に、アクセルをオフにする」など、操作部26の操作を模擬して駆動パターンを生成し、生成された駆動パターンに応じてシフトやアクセルを駆動制御する制御情報を移動体44に出力する。なお、駆動パターンは、予め用意しておいてもよいし、動的に生成してもよい。ここで、動的とは、シナリオに沿って進まない、インタラクティブなVRコンテンツに応じてという意味である。
【0027】
図4では移動体44の一部として「エアサスペンション32E」を例示するが、サスペンション自体を駆動する(振動させる)ことはできない。エアサスペンションは、コイルバネを空気バネに置き換えたもので、サスペンションの固さ(バネの強さ)を調整することができる。移動体44は通常のサスペンションを備えていてもよいが、エアサスペンションを備える場合には、後述する弾性体との衝突感覚の表現が多様化する。
【0028】
また、移動体44が暴走しないように安全装置を設けることが好ましい。例えば、VRコンテンツ再生装置10が故障した場合には、移動体44とVRコンテンツ再生装置10との接続を遮断するようにしてもよい。
【0029】
なお、移動体44は通常の移動体(例えば、車両)として利用される場合は、移動体44が移動体制御用コンピュータ(図示せず)と接続される。この場合には、点線で図示するように、操作部26をインターフェイスとして駆動対象32を駆動制御する。例えば、ブレーキペダルを踏めばブレーキが作動するというように、操作部26を操作することにより制御情報が生成される。移動体制御用コンピュータは、生成された制御情報に応じて駆動対象32を駆動制御する。駆動対象32は、駆動部30を介して駆動制御される。
【0030】
(弾性体との衝突の模擬)
次に、弾性体との衝突について説明する。
図5(A)及び(B)は物体同士の衝突の一例を説明する図である。物体Aが物体Bに衝突する場合について考える。物体A及び物体Bは、バーチャル空間に存在する物体である。物体Aは、移動体44または移動体44に搭乗しているユーザ12のアバターを表す物体である。以下では、「ユーザ12を表す物体A」と称する場合がある。物体Aは、弾性が低い(固い)物体である。ここで「弾性」とは、外力によって変形した物体が、その外力が除かれたときに元の形に戻ろうとする性質である。また、「弾性体」は、弾性を備えた物体である。
【0031】
図5(A)に示す例では、物体Bは弾性の高い(柔らかい)物体である。物体Bの弾性が高い場合は、物体Aが物体Bにぶつかると、物体Aが物体Bに少しめり込んだ後、物体Bにより反対方向にボヨンと押し返される。即ち、バーチャル空間において物体Bは弾性が高い弾性体と設定されている。
【0032】
一方、
図5(B)に示す例では、物体Bは弾性の低い(固い)壁である。物体Bの弾性が低い場合は、物体Aが物体Bにぶつかると、ガンと即座に押し止められる。即ち、バーチャル空間において物体Bは弾性が低い非弾性体と設定されている。なお、物体Aの弾性が、物体Bの弾性に比べて低い場合は、物体Aが振動する。
【0033】
本実施の形態では、バーチャル空間での衝突イベントに応じて衝突感覚を提示する際に、衝突に関与する物体の弾性を模擬するように、移動体44のサスペンションを振動させる。サスペンションの振動により、移動体44及びユーザ12が揺動されて、弾性体との衝突感覚がユーザ12に提示される。
【0034】
次に、サスペンションを振動(伸縮)させる理由について説明する。
図6(A)は弾性を表す模式図である。
図6(A)に示すように、「弾性」または「弾性体」は、並列に接続されたバネBとダンパDとで表現される。
図6(B)は弾性体との衝突の一例を表す模式図である。
図6(B)に示すように、物体Aが、弾性体である物体Bに衝突する際の、物体A及び物体B各々のバーチャル空間での変位量は計算で求められる。ここでは、ユーザ12を表す物体Aの変位を表す。
【0035】
図6(C)は移動体の構造の一例を表す模式図である。
図6(C)に示すように、移動体44に搭載されるサスペンション60、62は、バネとダンパで構成される弾性体である。したがって、バーチャル空間で衝突に関与する物体の弾性を模擬するように、サスペンション60、62を振動させると、移動体44に搭乗しているユーザ12が、バーチャル空間の物体と同様に揺動されて、弾性体との衝突感覚をユーザに提示することができる。
【0036】
サスペンションは駆動対象ではなく、サスペンションを振動させる等の駆動制御を行うことはできない。しかしながら、例えば、前側サスペンション60は、移動体44を前進させた直後に後進させるなど、移動体44を駆動して荷重移動させることで振動させることができる。サスペンションにかかる荷重の大小によって、サスペンションの振動の振幅と周波数が変化する。なお、移動体44の駆動方法については後述する。
【0037】
次に、弾性を模擬する手法について説明する。
図7(A)及び
図7(B)は、バーチャル空間で衝突に関与する物体の衝突時の変位の時間変化の一例を表すグラフである。以下、物体の変位の時間変化(揺動)を「揺動パターン」という。
図7(A)及び
図7(B)は、物体Aが物体Bに衝突する際の、ユーザ12を表す物体Aの変位の時間変化を表す。
【0038】
物体Aが非弾性体であり、物体Bが弾性体である(柔らかい)場合は、
図7(A)に示すように、衝突時の物体Aの変位は大きく、時間をかけてゆっくりと変化する。これに対し、物体Aは非弾性体であり、物体Bも非弾性体である(固い)場合は、
図7(B)に示すように、衝突時の物体Aの変位は小さく、短時間で変化する。
【0039】
図8(A)及び
図8(B)は、サスペンションが振動する様子を示す模式図である。サスペンションの振動の振幅が大きいほど、復元に時間がかかり、サスペンションの振動の振幅が小さいほど、素早く復元する。サスペンションの振幅が大きい場合には、
図8(A)に示すように、移動体44は、上下方向に大きく揺動され、時間をかけてゆっくりと揺動される。ここで、サスペンションの振動の「振幅」とは、いわゆる「サスペンションの沈み込み量」であり、移動体44への衝撃を吸収してサスペンションのバネが縮んだときの「伸縮量」に相当する。
【0040】
一方、サスペンションの振動の振幅が小さい場合には、
図8(B)に示すように、移動体44は、上下方向に小さく揺動され、短時間で揺動が収まる。なお、
図8(A)及び
図8(B)は、移動体44が上下方向に動くことを模式的に表すものであり、前輪タイヤが上下方向に動くものではない。
【0041】
したがって、物体Aが非弾性体であり、物体Bが弾性体である(柔らかい)場合は、
図7(A)に示すように衝突時の物体Aの変位が大きくなるので、サスペンションの振動の振幅を大きくして、
図8(A)に示すように、移動体44をゆっくりと大きく揺動する。また、物体Aが非弾性体であり、物体Bも非弾性体である(固い)場合は、
図7(B)に示すように衝突時の物体Aの変位は小さいので、サスペンションの振動の振幅を小さくして、
図8(B)に示すように、移動体44を短時間で小さく揺動する。
【0042】
この通り、物体Aが非弾性体であり、物体Bが弾性体の場合はサスペンションの振動の振幅を大きく、物体Aが非弾性体であり、物体Bも非弾性体の場合にはサスペンションの振動の振幅を小さくする等、バーチャル空間で衝突に関与する物体の「弾性」に応じてサスペンションの振動の振幅を変えることで、衝突に関与する物体の弾性が模擬されて、移動体44に搭乗しているユーザに弾性体との衝突感覚が提示される。
【0043】
(移動体の駆動手順)
次に、移動体の駆動手順について説明する。
サスペンションは、移動体44を駆動することで振動させることができる。例えば、走行中にブレーキをかけると荷重が前方に寄り、移動体44が停止すると、荷重が後方に寄る。本実施の形態では、この荷重移動によりサスペンションを振動させる。
【0044】
図9(A)から
図9(D)は、サスペンションを振動させるための移動体の駆動手順の一例を説明する模式図である。最初は、
図9(A)に示すように、移動体44は停止している。次に、
図9(B)に示すように、シフトチェンジ後のアクセルオンにより、停止している移動体44をF1の力で駆動する。移動体44は加速度a1で一方向に移動する。例えば、シフトをドライブ(D)に切り替え、アクセル電圧を正の方向に増加させて、移動体44を前方に移動させる(前進)。
【0045】
次に、
図9(C)に示すように、シフトチェンジ後のアクセルオン、ブレーキなどにより、移動体44にF1とは逆方向の力F2をかける。移動体44は加速度a2で逆方向に移動する。例えば、シフトをリバース(R)に切り替え、アクセル電圧を負の方向に増加させて、移動体44を後方に移動させる(後進)。
【0046】
また、逆方向の力F2が掛かると、上記の荷重移動により、移動体44の前側サスペンション60のバネが縮む。サスペンションの伸縮量、即ち、サスペンションの振動の振幅は、力F1と力F2の大きさと、各力を掛ける時間とにより調整される。最後は、
図9(D)に示すように、バネの復元力により、前側サスペンション60が伸びる。なお、ダンパは、サスペンションの振動の減衰を遅らせる役割を担う。
【0047】
なお、上記の駆動手順は一例であり、例えば、エアサスペンションで移動体の高さを変える、路面に設置された凸部または凹部を通過するように駆動する等、他の駆動手順によっても荷重移動によりサスペンションを振動させることができる。
【0048】
(衝突イベント検出処理)
次に、「衝突イベント検出処理」について説明する。
図10は本発明の第1の実施の形態に係る「衝突イベント検出処理」の流れの一例を示すフローチャートである。「衝突イベント検出処理」は、
図2の衝突イベント検出部18の動作を表す。「衝突イベント検出処理」のプログラムは、ROM10Bから読み出され、CPU10Aにより実行される。「衝突イベント検出処理」のプログラムの実行は、VRコンテンツの再生開始と共に開始される。
【0049】
まず、ステップ100で、次に再生する映像情報を先に取得する(先取り)。映像情報は、予め定めた時間分ずつ取得される(例えば、
図12のサンプル期間Δt)。次に、ステップ102で、当たり判定処理を実行する。当たり判定処理は、注目する物体から所定距離内の監視範囲内に他の物体が存在する場合に「衝突あり」と判定し、監視範囲内に他の物体が存在しない場合に「衝突なし」と判定する処理である。次に、ステップ104で、判定結果に基づいて衝突があるか否かを判断する。衝突ありの場合は、ステップ106に進み、ステップ106で衝突イベントを発行する。衝突なしの場合は、ステップ106を飛ばしてステップ108に進む。
【0050】
次に、ステップ108で、移動体44による感覚提示を、HMD50による感覚提示と同期して行えるか否かを判断する。移動体44の駆動に時間がかかるので、バーチャル空間での「衝突」を先取りできないと、移動体44による感覚提示を同期して行えない。例えば、バーチャル空間で衝突に関与する物体の速度が、所定速度より速い場合は、現在の監視範囲では当たり判定処理で「衝突」を先取りできないので、感覚提示を同期して行えないと判断する。同期して行えない場合は、ステップ110に進み、ステップ110で当たり判定の「範囲」を調整する。同期して行える場合は、ステップ110を飛ばしてステップ112に進む。
【0051】
次に、ステップ112で、所定時間が経過したか否かを判断する。所定時間が経過した場合は、ステップ114に進む。所定時間が経過していない場合は、ステップ112の判断を繰り返し行う。次に、ステップ114で、次の映像情報があるか否か判断する。次の映像情報が無い場合は、ルーチンを終了する。次の映像情報がある場合は、ステップ100に戻る。
【0052】
なお、VRコンテンツがシナリオに沿って進む場合は、シナリオから衝突イベントを検出してもよい。
図11は「衝突イベント検出処理」の流れの他の一例を示すフローチャートである。
図12はVRコンテンツのシナリオの一例を示すタイムチャートである。
【0053】
まず、
図11のステップ200で、次に再生する映像のシナリオ情報を取得する。シナリオ情報は、予め定めた時間分ずつ取得される。次に、ステップ202で、シナリオ判定処理を実行する。シナリオ判定処理は、シナリオから衝突イベントを検出する処理である。
図12に示すように、シナリオには、衝突の種類が発生時間に応じて予め登録されている。
図12には、衝突の種類として「衝突A」、「衝突B」、「衝突C」が例示されている。図示した例では、サンプル期間Δt分のシナリオ情報が取得されている。したがって、サンプル期間Δt内にある「衝突B」に対応する衝突イベントと、「衝突C」に対応する衝突イベントとが検出される。
【0054】
次に、ステップ204で、衝突があるか否かを判断する。衝突ありの場合は、ステップ206に進み、ステップ206で衝突イベントを発行する。検出された「衝突B」と「衝突C」とについて、衝突イベントが発行される。衝突なしの場合は、ステップ206を飛ばしてステップ208に進む。
【0055】
次に、ステップ208で、所定時間が経過したか否かを判断する。所定時間が経過した場合は、ステップ210に進む。所定時間が経過していない場合は、ステップ208の判断を繰り返し行う。次に、ステップ210で、次のシナリオ情報があるか否か判断する。次のシナリオ情報が無い場合は、ルーチンを終了する。次のシナリオ情報がある場合は、ステップ200に戻る。
【0056】
(衝撃生成処理/駆動パターン生成処理)
次に、「衝撃生成処理」について説明する。
図13は「衝撃生成処理」の流れの一例を示すフローチャートである。「衝撃生成処理」は、
図2の衝撃生成部20の動作を表す。「衝撃生成処理」のプログラムは、ROM10Bから読み出され、CPU10Aにより実行される。「衝撃生成処理」のプログラムの実行は、VRコンテンツの再生開始と共に開始される。
【0057】
まず、ステップ300で、衝突イベントの発行を検知したか否かを判断する。検知した場合は、ステップ302に進み、ステップ302で衝突情報を取得する。検知していない場合は、ステップ300の判断を繰り返し行う。
【0058】
次に、ステップ304で、移動体44を駆動する駆動パターンを取得する「駆動パターンの取得処理」を実行する。続けて、ステップ306で、衝突が反映された映像情報及び音声情報を生成する。なお、映像情報及び音声情報の生成は、「駆動パターンの取得処理」と並列に行ってもよい。次に、ステップ308で、更新時間が到来したか否かを判定する。更新時間が到来した場合は、ステップ310に進む。更新時間が到来していない場合は、ステップ308の判断を繰り返し行う。
【0059】
次に、ステップ310で、更新時間に応じた制御情報を移動体44に出力する。また、更新時間に応じた映像情報及び音声情報をHMD50に出力する。制御情報と映像情報及び音声情報とは、同期して出力される。これにより、制御情報と、映像情報及び音声情報とが同時に更新される。例えば、映像や音声は0.01秒毎等の短時間で切り替わり、映像や音声の切り替えに同期して制御情報が更新される。次に、ステップ312で、駆動パターンによる駆動制御が終了したか否かを判断する。終了した場合は、ルーチンを終了する。終了していない場合は、ステップ300に戻る。
【0060】
なお、「駆動パターン」とは、駆動対象を駆動制御する駆動制御値の予め定めた期間に亘る経時変化を表すパターンである。駆動パターンは、駆動対象毎に求められる。例えば、シフトとアクセルとを駆動対象とする場合は、シフトを駆動する駆動制御値の波形パターンと、アクセルを駆動する駆動制御値の波形パターンとが取得される。また、「制御情報」とは、駆動パターンにより与えられる更新時間に応じた駆動制御値のことである。予め定めた期間分の制御情報が出力されると、駆動パターンによる駆動制御が終了する。
【0061】
ここで「駆動パターン取得処理」について説明する。
図14は本発明の第1の実施の形態に係る「駆動パターン取得処理」の流れの一例を示すフローチャートである。第1の実施の形態では、衝突情報は、バーチャル空間での衝突に関与する物体の物理量である。これらは、衝突に関与する物体の「弾性」を表現するのにも使用される。具体的には、物理量として、物体の重さ、物体の固さ、物体の速度等を求める。
【0062】
先ず、ステップ400で、衝突に関与する物体の物理量を取得する。次に、ステップ402で、取得された物理量を用いて、ユーザ12を表す物体Aの、バーチャル空間での衝突時の変位の時間変化(揺動パターン)を動的に計算する。ここで、動的とは、シナリオに沿って進まない、インタラクティブなVRコンテンツに応じてという意味である。次に、ステップ404で、揺動パターンから移動体44のサスペンションを振動させる駆動パターンを取得して、ルーチンを終了する。
【0063】
次に、揺動パターンと駆動パターンの相関関係について説明する。
図15(A)及び(B)は揺動パターンと駆動パターンの相関関係を示す模式図である。
図15(A)に示すパターンの前提となる衝突状況は、
図5(A)に示すように、ユーザ12を表す物体A(非弾性体)が、物体B(弾性体)に衝突する場合である。揺動パターンは、
図7(A)に示す例と同じである。
図15(B)に示すパターンの前提となる衝突状況は、
図5(B)に示すように、ユーザ12を表す物体A(非弾性体)が、物体B(非弾性体)に衝突する場合である。揺動パターンは、
図7(B)に示す例と同じである。
【0064】
また、
図9(A)から
図9(D)に示す駆動手順で移動体44を駆動する。
図15(A)及び(B)に示す「駆動パターン」は、アクセル電圧の波形パターンで表されている。アクセル電圧は、アクセルの駆動制御値であり、いわゆる、アクセル踏み量と称される値である。波形パターンに従って、アクセル電圧を経時変化させる。なお、シフトの駆動制御値の波形パターンについては、図示を省略する。
【0065】
まず、シフトをドライブ(D)に切り替え、アクセル電圧を正の方向にV
1まで増加させ、時間t
1の間はアクセル電圧をV
1に保持する。移動体44は加速されて、前方に移動する(前進)。次に、シフトをリバース(R)に切り替え、アクセル電圧を負の方向にV
2まで増加させ、時間t
2の間はアクセル電圧をV
2に保持する。移動体44は逆方向に加速されて、後方に移動する(後進)。時間t
2の経過後、アクセル電圧をゼロにすると、移動体44が減速して停止する。
【0066】
揺動パターンと駆動パターンの相関関係の傾向を簡単に説明する。
揺動パターンでの変位が大きい場合には、アクセル電圧V
1、アクセル電圧V
2の値は大きくなる。また、時間t
1、時間t
2も長くなる。また、アクセル電圧V
1と時間t
1とで決まる領域Aの面積(V
1t
1)と、アクセル電圧V
2と時間t
2とで決まる領域Bの面積(V
2t
2)との差が小さくなる。一方、揺動パターンで変位が小さい場合には、アクセル電圧V
1、アクセル電圧V
2の値は小さくなる。また、時間t
1、時間t
2は短くなる。また、領域Aの面積(V
1t
1)と領域Bの面積(V
2t
2)との差が大きくなる。
【0067】
図9(A)から
図9(D)を参照して説明した通り、移動体44には、F1の力がかけられた後、F1とは逆方向の力F2がかけられる。サスペンションの振動の振幅は、力F1と力F2の大きさと、各力をかける時間とにより調整される。サスペンションの振動の振幅を大きくするには、大きな衝撃を与えて移動体44を大きく揺動させるように力F1と力F2とをかける。領域Aの面積(V
1t
1)は、力F1の大きさと力F1をかける時間とを表す。領域Bの面積(V
2t
2)は、力F2の大きさと力F2をかける時間とを表す。移動体44を大きく揺動させるには、領域Aの面積(V
1t
1)を大きくすると共に、領域Aの面積(V
1t
1)と釣り合うように、領域Bの面積(V
2t
2)を大きくする。
【0068】
揺動パターンは、バーチャル空間で物体Bに衝突する物体Aの変位Dの時間変化を表す。
図15(A)及び(B)に示す揺動パターンは、変位を開始する時点、即ち、衝突する時点を、時間=0として表示する。衝突イベントが検知されてから衝突までの時間をT
0とする。バーチャル空間における衝突による物体Aの変位Dの最大値をD
peakとする。衝突してから物体Aの変位Dが最大になるまでの時間をT
1とする。なお、物体Aの変位Dが最大になる点は、変位Dの時間変化を表す曲線の第1の変極点とする。変極点とは、dD/dt=0となる点である。
【0069】
次に、揺動パターンからアクセル電圧の波形パターンを取得する計算方法の一例について説明する。
図15(A)及び(B)に示す例では、アクセル電圧の波形パターンは、アクセル電圧V
1、アクセル電圧V
2、時間t
1、時間t
2の各値で決まる。本実施の形態では、時間t
1は、衝突イベントが検知されてから衝突までの時間T
0と等しいと定義する。また、時間t
2は、衝突してから物体Aの変位Dが最大になるまでの時間T
1衝突までの時間T
0と等しいと定義する。したがって、アクセル電圧V
1及びアクセル電圧V
2の各値を揺動パターンから計算で求める。
【0070】
ここで、固さ調整ゲインSというパラメータを設定する。固さ調整ゲインSは、下記式(1)で表されるパラメータである。固さ調整ゲインSは、衝突する物体同士の弾性の差分が大きいほど大きい値になる。固さ調整ゲインSは、0≦S≦1の範囲の数値であり、衝突する物体同士の弾性の差分が大きいほど「1」に近づく。
【0072】
上記式(1)において、「D
max」は、予め定められたサスペンションの最大変位(即ち、振幅の上限値)を表す。また、「G」は、予め定められたサスペンションの調整ゲインを表す。サスペンションの調整ゲインGは、0≦G≦1の範囲の数値である。バーチャル空間に存在する物体同士の弾性の差分が最も大きい物体同士の衝突時に、(G×D
peak)=D
maxという条件を満たすように設定する。
【0073】
アクセル電圧V
1は、下記式(2)を用いて、サスペンションの調整ゲインG、揺動パターンにおける物体Aの変位Dの最大値D
peak、時間t
1(=衝突までの時間T
0)から求められる。
【0075】
また、領域Bの面積(V
2t
2)は、下記式(3)で表されるように、固さ調整ゲインSを用いると、領域Aの面積(V
1t
1)のS分の1になる。固さ調整ゲインS=1のとき、領域Aの面積(V
1t
1)と領域Bの面積(V
2t
2)とが等しくなる。
【0077】
上記式(3)を変形すると、アクセル電圧V
2は、下記式(4)で表される。なお、固さ調整ゲインS=0のときは、衝突による物体Aの変位Dの最大値D
peak=0であり、アクセル電圧V
2=0でよい。
【0079】
上記の計算方法は一例である。揺動パターンに応じて上記の揺動パターンと駆動パターンの相関関係の傾向を再現できれば、他の計算方法でアクセル電圧の波形パターンを取得してもよい。また、揺動パターンを求めることなく、物体の重さ、物体の固さ、物体の速度等の衝突情報から、直接、アクセル電圧の波形パターンを取得してもよい。
【0080】
<第2の実施の形態>
第2の実施の形態は、衝突情報と「駆動パターン取得処理」以外は、第1の実施の形態と同様であるため説明を省略する。第2の実施の形態では、衝突情報は、衝突する物体の物体名と相対速度である。
【0081】
図16は本発明の第2の実施の形態に係る「駆動パターン取得処理」の流れの一例を示すフローチャートである。
図17は衝突の種類に応じて揺動パターンと駆動パターンとを予め関連付けるテーブルの一例を示す図表である。
【0082】
第2の実施の形態に係る「駆動パターン取得処理」では、
図16に示すように、まず、ステップ400で、衝突する物体の物体名と相対速度とを取得する。次に、ステップ402で、衝突する物体の物体名と相対速度とに対応する「衝突の種類」を特定する。
【0083】
バーチャル空間に存在する物体は、物体A、物体Bというように、予め登録されている。そこで、「衝突の種類」を、衝突する2つの物体の物体名と、2つの物体の衝突時の相対速度とに応じて予めテーブル等で記憶しておいて、テーブル等に基づいて、衝突する物体の物体名と相対速度とから「衝突の種類」を特定する。なお、「衝突の種類」は、衝突する物体同士の弾性の差分と相対速度とに基づいて決定される。
【0084】
例えば、非弾性体である物体Aと弾性体である物体Bとが相対速度Xで衝突した場合は「衝突A(変位は大きい)」、非弾性体である物体Aと弾性体である物体Bとが相対速度Y(<X)で衝突した場合は「衝突B(変位は中くらい)」、非弾性体である物体Aと弾性体である物体Bとが相対速度Z(<Y)で衝突した場合は「衝突C(変位は小さい)」と特定する。また、非弾性体である物体Aと非弾性体である物体Bとが衝突した場合には、相対速度にかかわらず「衝突C(変位は小さい)」と特定する。
【0085】
次に、ステップ404で、特定された「衝突の種類」に応じた「駆動パターン」を取得する。
図17に示すテーブルでは、衝突の種類は、衝突A、衝突B、衝突Cと複数種類がある。衝突A、衝突B、及び衝突Cの各々には、「揺動パターン」と「駆動パターン」とが関連付けられている。したがって、衝突Aならこの駆動パターンというように、ライブラリ方式で「衝突の種類」に応じた「駆動パターン」が取得される。なお、「揺動パターン」を利用しない場合は、
図17に示すテーブルにおいて「揺動パターン」を省略してもよい。
【0086】
<第3の実施の形態>
第3の実施の形態は、VRコンテンツがシナリオに沿って進む場合である。「衝突の種類」、「揺動パターン」及び「駆動パターン」がシナリオに含まれている。第3の実施の形態は、衝突情報と「駆動パターン取得処理」以外は、第1の実施の形態と同様であるため説明を省略する。第3の実施の形態では、衝突情報は、シナリオから特定される衝突の種類である。
【0087】
図18は本発明の第3の実施の形態に係る「駆動パターン取得処理」の流れの一例を示すフローチャートである。
図19は衝突の種類、揺動パターン、及び駆動パターンが予め登録されたシナリオの一例を示す図表である。
【0088】
本実施の形態では、
図19に示すように、衝突の種類、揺動パターン、及び駆動パターンの各々が、VRコンテンツのシナリオに予め登録されている。したがって、第3の実施の形態に係る「駆動パターン取得処理」では、
図18に示すように、ステップ500で、シナリオから特定された「衝突の種類」に対応する「駆動パターン」をシナリオから取得して、ルーチンを終了する。
【0089】
<変形例>
なお、上記実施の形態で説明した衝突感覚提示システム及びプログラムの構成は一例であり、本発明の主旨を逸脱しない範囲内においてその構成を変更してもよいことは言うまでもない
【0090】
上記の実施の形態では、駆動パターンとしてアクセル電圧の波形パターンを求めたが、駆動パターンは、駆動対象を駆動制御する駆動制御値の予め定めた期間に亘る経時変化を表すパターンであり、アクセル電圧の波形パターンには限定されない。駆動パターンは、駆動対象毎に求められる。駆動対象が複数ある場合は、駆動情報は複数の駆動パターンの組合せとなる。
【0091】
複数の駆動制御値の波形パターンを含んでいてもよい。例えば、アクセル電圧の波形パターンとブレーキの駆動制御値(いわゆる、ブレーキ踏み量)の波形パターンとを組み合わせてもよい。また、エアサスペンション駆動制御値の波形パターンを、他の駆動制御値の波形パターンに組み合わせてもよい。