本発明の実施の形態について図面を参照しながら説明する。なお、以下の説明において各部の大きさやその比、配置等は一例であり、本実施の形態の例は、図示等した大きさや比率、配置に限られるものではない。
本発明の実施の形態の一例に係る制御システム1は、制御装置10と、操作デバイス20とを含んで構成されている。操作デバイス20は、図1,図2に例示するようなものである。図1は操作デバイス20を正面側から見た斜視図であり、図2は操作デバイス20を背面側から見た斜視図である。本実施の形態の一例では、この操作デバイス20は、デバイス本体210と、附属品の一つである固定具220とを含んで構成される。
デバイス本体210は、ユーザにより把持される把持部211と、操作部212とを含む。把持部211は、左側面221及び右側面222を有し、本実施の形態の一例では実質的に多角形柱状をなしている。操作部212は、把持部211から連続して形成されており、図1,2の例では、正面側に親指センサ部231と、ボタン操作部232とを含み、背面側には、第1指センサ233と、ロッキングボタン234と、表示部235とを含む。また把持部211の背面側には、第2指センサ241と、第3指センサ242とが配されている。
デバイス本体210の左側面221または右側面222のいずれか一方側には、附属品としての固定具220が固定される。また、左側面221または右側面222の他方側には、別の附属品としてのバッテリ240が固定されてもよい。本実施の形態の例では、固定具220は可撓性あるベルトを環状としたものである。
この操作デバイス20は、固定具220にユーザの人差指から小指までを通し、デバイス本体210をユーザの親指の付根に当接させた位置に固定して用いる。図1,2の例では、このときには、操作デバイス20の右側面222側がユーザの手の平に押付けられて操作デバイス20が固定される。またこの操作デバイス20の大きさは、ここでユーザが自然にデバイス本体210を把持すると、ユーザの親指末節は操作デバイス20の正面側のボタン操作部232に到達し、ユーザの親指の基節側が親指センサ部231に近接する程度の大きさとする。またこのときユーザの人差指は操作デバイス20背面側のロッキングボタン234に触れる位置となり、ユーザは把持部211を手の平と、中指、薬指、小指とで握りこむようになるものとする。もっとも、この状態からユーザが手を開いても、固定具220により操作デバイス20はユーザの手に固定されるので、操作デバイス20が落下することはない。
親指センサ部231は、例えば、ユーザが自然にデバイス本体210を把持したとき、ユーザの親指の末節側が到達する位置よりやや下方、ユーザの親指の基節側が近接する位置に配される。この親指センサ部231は、操作デバイス20の正面側であって操作デバイス20の表面の法線方向を中心とし、操作デバイス20正面の左側面側から右側面側までの比較的広角の角度範囲を検出可能範囲として、この検出可能範囲においてユーザの親指を検出する。そして当該親指を検出した位置(上記角度範囲内の角度)と、親指センサ部231から、検出したユーザの親指までの距離とを検出し、これらの情報を含む、検出結果情報を制御装置10に出力する。この親指センサ部231は例えば、カメラや、光学センサ、焦電センサ、静電容量センサ等、どのようなものでも構わない。ボタン操作部232は、少なくとも一つのボタンを含み、ユーザの押下操作があったときに、押下操作がされたボタンを特定する情報を制御装置10に出力する。また、ボタン操作部232は、その中央に傾倒操作部材232aを含んでいる。傾倒操作部材232aは、ユーザが親指で任意の方向に傾ける操作(傾倒操作)を行って方向を指示するための操作部材であり、傾倒操作が行われた場合に傾き方向及び傾き量の情報を制御装置10に出力する。
ロッキングボタン234は、操作デバイス20の背面側に突出した第1の位置と、操作デバイス20側へ押し込まれた第2の位置との間で揺動するボタンである。ロッキングボタン234は、ユーザの人差指等で押し込み操作され、その押し込み量を表す情報を制御装置10に出力する。具体的にこのロッキングボタン234は、ポテンショメータ等を含んで構成できるが、押し込み量が検出できれば、この構成に限られるものではない。ロッキングボタン234の構成の具体例については、後に詳しく説明する。
また本実施の形態においてはこのロッキングボタン234に、第1指センサ233が取り付けられる。第1指センサ233は、ロッキングボタン234の表面の法線方向を中心とする操作デバイス20の背面側の所定の角度範囲を検出可能範囲として、この検出可能範囲においてユーザの人差指を検出する。すなわち、当該人差指の位置(上記角度範囲内の角度)と、第1指センサ233から人差指までの距離とを検出し、これらの情報を含む、検出結果情報を制御装置10に出力する。この第1指センサ233は、親指センサ部231同様、光学センサ等の各種のセンサであってよい。
さらに本実施の形態の一例では、ロッキングボタン234には、力覚提示装置が接続されている。この力覚提示装置は、制御装置10から入力される指示に従い、ロッキングボタン234の押し込みに抗する力を提示する。具体的にこの力覚提示装置は、ロッキングボタン234を押し込むときに回転するロータを含むモーターや、ロッキングボタン234の押し込みにより被駆動体が直線的に移動するリニアアクチュエータ等で構成できる。このようにモーター等を用いる場合、力覚提示装置は押し込みによる回転や被駆動体の移動があったときに、当該回転や移動とは逆方向に力を加えるようモーターやアクチュエータを制御する。このような力覚提示装置については広く知られたものを採用できるので、ここでの詳しい説明を省略する。
表示部235は、例えば多色に発光可能なLED(Light Emission Diode)を含む。この表示部235は、制御装置10から入力される指示に従い、LEDを、当該指示された発光態様(指示された色で点灯、あるいは指示された間隔で断続的に点灯するなどの態様)で発光させる。
第2指センサ241は、操作デバイス20の把持部211にユーザの中指がどの程度近接しているかを検出する。そして当該検出の結果を表す情報を、制御装置10に出力する。同様に、第3指センサ242は、操作デバイス20の把持部211にユーザの薬指及び小指のそれぞれがどの程度近接しているかを検出する。そして当該検出の結果を表す情報を、制御装置10に出力する。これら第2指センサ241、第3指センサ242はいずれも、静電容量センサや光学センサ等で構成できる。ここで光学センサは、赤外光を放射する発光部と、赤外光を検出する受光部とを有し、発光部から放射された光が対象物に反射して受光部に入射する割合を測定するものなどがある。このような光学センサによると、光学センサ近傍に対象物が近接するほど、受光部に入射する光の強度を発光部から放射された光の強度で除した割合(比強度と呼ぶ)rが大きくなるので、対象物までの距離が計測できる。また、光学センサは、TOF(Time-of-Flight)方式で対象物までの距離を計測するものでもよい。この場合、発光部から放射された光が対象物に反射して受光部に入射するまでに要する時間から、対象物までの距離を計測する。
また本実施の形態では、操作デバイス20は、左側面221と右側面222とのいずれの側に、所定の附属品である固定具220が固定されているかを検出するセンサ(固定具センサ)を備えている。この固定具センサは具体的には、固定具220を装着したときにオンとなるマイクロスイッチ等を、左側面221と右側面222とにそれぞれ配することで実現できる。このような所定の附属品を取り付けたときに、取り付けた側を検出する構成については、その他広く知られた方法を用いることができるので、ここでの詳しい説明を省略する。本実施の形態では、この固定具センサによる検出の結果は制御装置10に入力される。
また、デバイス本体210は、その筐体内にスピーカー251、マイクロフォン252、及び本体振動機構253を内蔵している。本体振動機構253は、振動アクチュエータ等であって、デバイス本体210を振動させ、操作デバイス20が固定されているユーザの手に振動を伝達する。特に本実施形態において、本体振動機構253は、複数の方向にデバイス本体210を振動させるものとする。具体的に、本体振動機構253は、左右方向(図のX軸方向)、上下方向(図のY軸方向)、及び前後方向(図のZ軸方向)のそれぞれにデバイス本体210を振動させるものであってよい。なお、デバイス本体210には複数の本体振動機構253が内蔵されてもよい。
さらに、操作デバイス20の筐体表面には、表示部235とは別に、ポジショントラッキング用の発光素子が配置されることとする。発光素子は複数個配置されてもよい。制御装置10は、この発光素子が発する光の位置から、操作デバイス20の実空間内における位置を特定する。
ここで、ロッキングボタン234の構成例について、図3A及び図3Bを用いて説明する。図3Aはロッキングボタン234を表側(操作デバイス20の背面側)から見た図であって、図3Bは裏側(操作デバイス20側)から見た図である。これらの図に示されるように、ロッキングボタン234は、ユーザによる操作対象となり、ユーザの指からの圧力によって押し込まれる可動部30と、可動部30内に内蔵されるボタン振動機構31と、可動部30が取り付けられている基台32と、を含んで構成される。また、図3Aに示されるように、可動部30の表面に第1指センサ233が取り付けられている。
可動部30は、回転軸32aを回転中心として回動可能に基台32に取り付けられている。図3A、及び図3Bは、ユーザがロッキングボタン234を操作していない状態(無操作状態)を示しており、この状態において可動部30はデバイス本体210から最も離れた第1の位置にある。ユーザが可動部30を人差指で押し込む押圧操作を行うと、図3Aにおいてブロック矢印で示されるように、可動部30は回転軸32aを回転中心としてデバイス本体210に近づく方向に回転移動する。そのまま移動して可動部30の端部が基台32に当接する位置(第2の位置)に到達すると、それ以上可動部30を押し込むことができなくなる。以下では、この可動部30が最も押し込まれてデバイス本体210に近づいた状態を最大操作状態という。すなわち、可動部30の可動範囲は第1の位置と第2の位置との間であり、この範囲でユーザの操作に応じて回転移動する。操作デバイス20は、定期的に可動部30がこの可動範囲のどの位置にあるかを検出し、検出した位置の情報をユーザのロッキングボタン234に対する操作量を表す情報として制御装置10に対して送信する。これにより制御装置10は、ユーザがどの程度可動部30を押し込む操作を行ったかを把握できる。なお、可動部30は、ユーザが人差指を可動部30から離すと第1の位置に復帰するようにバネ等によって付勢されている。
ボタン振動機構31は、振動アクチュエータ等により構成されており、ロッキングボタン234の可動部30を振動させる。ユーザの人差指が可動部30表面に接触している状態でボタン振動機構31が作動すると、可動部30の振動がユーザの人差指に伝達される。これによりユーザは、デバイス本体210の全体が振動する場合とは異なり、操作中の指だけに振動を感じることになる。そのため、ユーザのロッキングボタン234に対する操作に合わせてボタン振動機構31を作動させることにより、単なるボタン操作時とは異なる操作感をユーザに体験させることができる。
ボタン振動機構31は、少なくともロッキングボタン234の操作方向(すなわち、図3Aにおいてブロック矢印で示される可動部30の回転方向)に沿った向きの振動を発生させることが望ましい。この方向は、可動部30の表面に交差する方向でもある。もともと可動部30は操作方向に沿って回動するように構成されているので、このような向きに振動を発生させることで、可動部30だけを振動させ、ボタン振動機構31による振動がデバイス本体210まで伝達することを抑制できる。これにより、ロッキングボタン234をデバイス本体210と独立に振動させることができる。なお、ボタン振動機構31は、効率的に可動部30を振動させるために、可動部30の回転中心から離れた位置に配置することが望ましい。本実施形態では図3Bに示すように、ボタン振動機構31は、可動部30の長手方向(回転軸32aに直交する方向)の中心よりも回転軸32aから遠い側に配置されている。
制御装置10は、操作デバイス20と通信接続される情報処理装置であって、例えば家庭用ゲーム機やパーソナルコンピュータ等であってよい。また、本実施形態において制御装置10は、表示装置14とも通信接続される。この制御装置10は図4に例示するように、制御部11と、記憶部12と、通信部13とを含んで構成されている。制御部11は、CPU等のプログラム制御デバイスを含み、記憶部12に格納されたプログラムに従って各種の情報処理を実行する。この制御部11の具体的な処理の内容については、後に詳しく述べる。
記憶部12は、メモリデバイス等であり、制御部11によって実行されるプログラムを保持する。このプログラムは、コンピュータ可読かつ、非一時的な記憶媒体に格納されて提供され、この記憶部12に複写されたものであってもよい。またこの記憶部12は、制御部11のワークメモリとしても動作する。
通信部13は、USB(Universal Serial Bus)等のシリアルインタフェースあるいは、ブルートゥース(登録商標)等の無線通信インタフェースを含んで構成される。制御装置10は、この通信部13を介して操作デバイス20と通信可能に接続される。特に本実施形態において、通信部13は、親指センサ部231、第1指センサ233、第2指センサ241、及び第3指センサ242による検出結果の情報や、ボタン操作部232及びロッキングボタン234に対してユーザが行った操作の内容を示す情報を操作デバイス20から受信する。また、通信部13は、制御部11からの指示に従って、ロッキングボタン234に内蔵されるボタン振動機構31やデバイス本体210内の本体振動機構253等を動作させる制御命令を送信する。
さらに通信部13は、表示装置14と有線又は無線で通信するための通信インタフェースを含んでいる。制御装置10は、通信部13を介して、表示装置14が表示すべき映像のデータを表示装置14に対して送信する。
表示装置14は、制御装置10から送信される映像信号に基づく映像を表示する。例えば表示装置14は、ヘッドマウントディスプレイ等のユーザが頭部に装着して使用するタイプのデバイスであってよい。
以下、制御装置10の制御部11の動作について説明する。本実施の形態においてこの制御部11は、機能的には図5に例示するように、アプリケーション実行部41と、デバイス位置特定部42と、指位置特定部43と、振動制御部44と、を含んで構成されている。これらの機能は、制御部11が記憶部12に記憶されたプログラムに従って動作することにより実現される。このプログラムは、インターネット等の通信ネットワークを介して制御装置10に提供されてもよいし、光ディスク等のコンピュータ読み取り可能な情報記憶媒体に格納されて提供されてもよい。
アプリケーション実行部41は、制御部11がゲーム等のアプリケーションプログラムを実行することにより実現される。アプリケーション実行部41は、操作デバイス20に対するユーザの操作内容等に応じて各種の処理を実行し、その処理結果を表示装置14の画面に表示させる。例えばアプリケーション実行部41は、各種の仮想オブジェクトが配置された仮想空間を構築し、その内部の様子を示す画像をユーザに提示してもよい。また、アプリケーション実行部41は、デバイス位置特定部42によって特定される操作デバイス20の位置情報や、指位置特定部43によって特定されるユーザの指の位置情報を利用した処理を実行してもよい。
デバイス位置特定部42は、操作デバイス20のポジショントラッキングを実行する。これは、操作デバイス20の実空間内における位置を特定する処理である。具体的に、デバイス位置特定部42は、操作デバイス20のポジショントラッキングを開始する際に、まず操作デバイス20に指示して、ポジショントラッキング用の発光素子を発光させる。その後、カメラによってその操作デバイス20を含んだ画像を撮影し、得られた撮像画像を解析することによって、撮像画像内から発光素子による光を検出する。この光の撮像画像内における位置を用いることによって、カメラの設置位置を基準とした操作デバイス20の実空間内における位置を特定する。なお、カメラはユーザが操作デバイス20を使用する室内に固定されてもよいし、表示装置14に搭載されてもよい。特に表示装置14がヘッドマウントディスプレイであって、その表示装置14にカメラが搭載される場合、ユーザの頭部を基準とした操作デバイス20の位置を特定することができる。このような処理を繰り返し実行することにより、ユーザが操作デバイス20を装着した手を自由に動かしている間、デバイス位置特定部42はその手の位置を追跡することができる。
指位置特定部43は、操作デバイス20の親指センサ部231、第1指センサ233、第2指センサ241、及び第3指センサ242による検出結果の情報を用いて、操作デバイス20から見たユーザの指の位置を特定する。前述したように、操作デバイス20は固定具220によってユーザの手のひらに固定されるため、ユーザは操作デバイス20を自分の指で把持し続ける必要はなく、操作デバイス20を装着した状態のまま5本の指をある程度自由に動かすことができる。指位置特定部43は、これら5本の指がそれぞれどの位置にあるかを特定する。特に指位置特定部43は、第1指センサ233の検出結果を解析することにより、第1指センサ233が配置された可動部30の表面からユーザの人差指までの距離xを特定する。
振動制御部44は、アプリケーション実行部41からの要求に応じて、ボタン振動機構31及び本体振動機構253を動作させる制御命令を操作デバイス20に対して出力する。これによりアプリケーション実行部41は、ゲーム等の状況に応じて操作デバイス20の本体やロッキングボタン234を振動させることができる。具体的に振動制御部44は、どの振動機構をどのような向きにどの程度の強さで振動させるか、という制御内容を指定する振動制御要求をアプリケーション実行部41から受け付ける。そして、その振動制御要求に応じた内容の制御命令を操作デバイス20に送信することにより、ボタン振動機構31又は本体振動機構253を動作させる。
以下、振動制御部44が操作デバイス20のボタン振動機構31及び本体振動機構253を制御する際に実行する処理の具体例について、説明する。
まず、ボタン振動機構31の動作を開始させるタイミングの制御について、説明する。この例においてアプリケーション実行部41は、ボタン振動機構31による振動を開始すべきタイミングを指定するタイミング指定情報を含んだ振動制御要求を出力することとする。このタイミング指定情報は、ユーザがロッキングボタン234に対する操作を開始するタイミングで振動を開始することを指定するものであってよい。あるいは、ユーザのロッキングボタン234に対する操作量(可動部30の押し込み量)が所与の目標値になるタイミングで振動を開始することを指定するものであってもよい。この例において、振動制御部44がロッキングボタン234に対する操作量の情報を操作デバイス20から受信し、その情報に基づいて振動を開始すべき状態になったことを確認してからボタン振動機構31に対する振動開始を指示することとすると、情報の送受信に伴うタイムラグにより、実際の振動開始がアプリケーション実行部41の指定するタイミングより遅れてしまうことになる。そこで振動制御部44は、可動部30の表面に配置された第1指センサ233の検出結果に基づいて、ユーザの指(ここでは人差指)がロッキングボタン234の操作を行うタイミングを推定し、その推定結果に応じて決まるタイミングでボタン振動機構31の動作開始を指示する。これにより、ユーザの操作量が目標値に到達したタイミング、又はユーザが可動部30に対する操作を開始したタイミングで直ちにボタン振動機構31による振動を開始させることができる。
この振動開始制御の流れの具体例について、図6のフロー図を用いて説明する。まず振動制御部44は、アプリケーション実行部41からタイミング指定情報を含んだ振動制御要求を受け付ける(ステップS1)。
振動制御要求を受け付けると、振動制御部44は、定期的に、可動部30からユーザの人差指までの距離xの情報を指位置特定部43から取得する(ステップS2)。距離xの情報を新たに取得すると、それまでに取得した複数の距離xの情報に基づいて、ユーザの人差指が目標位置に到達するタイミングtxを推定する(ステップS3)。具体例として、ステップS1で受け付けた振動制御要求においてユーザがロッキングボタン234の操作を開始するタイミングが指定されたとする。この場合、ユーザの人差指が可動部30に近づいて距離xが0になったタイミングで振動を開始させることが望ましい。そこで例えば振動制御部44は、これまでの時刻t1における人差指までの距離がx1、時刻t2における距離がx2、時刻t3における距離がx3であった場合、これらの数値から外挿して、距離が0になるタイミングtxを算出する。また、タイミング指定情報としてロッキングボタン234がある程度操作された状態が目標値として指定された場合にも、人差指が可動部30の表面に近づいて接触した後そのまま操作が行われるという想定のもとで操作量が目標値に到達するタイミングtxを推定すればよい。
次いで振動制御部44は、ステップS3で所定基準以上の信頼度でタイミングtxを推定できたか判定する(ステップS4)。所定基準以上の信頼度でタイミングtxが決定されると、振動制御部44はそのタイミングtxの到来時に振動を開始させることができるように、タイミングtxより所定時間だけ早いタイミングでボタン振動機構31を動作させる制御命令を出力する(ステップS5)。ここでの所定時間は、振動制御部44による制御命令の出力から実際にボタン振動機構31が動作を開始するまでの所要時間に応じた時間である。これにより、タイミングtxに可動部30の振動を開始させることができる。
例えばユーザの人差指が可動部30に近づいていない間は、人差指が可動部30に到達するタイミングを推定することはできない。このように、ステップS3で所定基準以上の信頼度でタイミングtxを推定できないとステップS4で判定された場合、振動制御部44はステップS2に戻って新たに距離xの情報を取得する。精度よくタイミングtxを推定できるまでこのような処理を繰り返すことで、振動制御部44はユーザの人差指が可動部30に近づき始めたときに直ちにタイミングtxを推定することができる。
なお、以上の説明ではボタン振動機構31の振動開始タイミングを制御する例について説明したが、振動制御部44は、本体振動機構253を振動させる際の振動開始タイミングについても、同様の手法により制御してもよい。この場合、人差指に限らず、別の指が操作デバイス20本体に近づいて接触するタイミングを推定し、その推定結果に応じて本体振動機構253の振動開始タイミングを決定してもよい。人差指以外の各指が操作デバイス20本体に接触するタイミングは、親指センサ部231、第2指センサ241、及び第3指センサ242の検出結果に基づいて指位置特定部43によって推定できる。また、振動制御部44は、操作デバイス20表面から各指までの距離の時間変化に限らず、例えばロッキングボタン234に対する操作量の時間変化に応じてボタン振動機構31や本体振動機構253の振動開始タイミングを決定してもよい。また、これらの時間変化の情報を組み合わせて用いて、ボタン振動機構31や本体振動機構253の振動開始タイミングを決定してもよい。
次に、ボタン振動機構31と本体振動機構253の双方を同時期に動作させる場合の制御例について、説明する。このような場合、振動制御部44は、ロッキングボタン234に対する操作量に応じて制御内容を変化させることとする。具体的に、ロッキングボタン234が最大操作状態以外の状態にある場合、振動制御部44はアプリケーション実行部41の要求に応じた内容でそれぞれの振動機構を独立に制御する。これに対してロッキングボタン234が最大操作状態にある場合、振動制御部44は、アプリケーション実行部41の要求内容とは異なる制御内容で各振動機構を制御する。
具体的に、振動制御部44は、ロッキングボタン234が最大操作状態にある場合、ボタン振動機構31と本体振動機構253に対して同じタイミングで同じ向きに振動させる共通波形の制御命令を出力する。ロッキングボタン234が最大操作状態にある場合、可動部30がユーザの指に押さえられてデバイス本体210と一体化するため、可動部30をデバイス本体210と独立に振動させることが困難になるためである。あるいは振動制御部44は、ロッキングボタン234が最大操作状態にある場合、二つの振動機構の一方に対してのみ制御命令を出力し、他方には制御命令を出力せずに振動を停止させてもよい。さらにこの場合、二つの振動機構の一方に対する振動の振幅を増加させてもよい。
なお、以上の説明ではロッキングボタン234が最大操作状態にある場合のみ制御内容を変化させることとしたが、ロッキングボタン234の操作量が所定値以上になった場合に制御内容を変化させてもよい。ロッキングボタン234の操作量が最大操作量に近づいた状態では、可動部30を振動させると可動部30が基台32に衝突するおそれが生じる。そこで振動制御部44は、操作量が所定値以上になった場合、ボタン振動機構31に対する制御命令を中止してもよい。また、ボタン振動機構31を振動させる際の振動量を低減させる制御を行ってもよい。なお、このような制御は、ボタン振動機構31に対して単独での振動制御要求があった場合にも実施してよい。
具体的に、振動制御部44は、ロッキングボタン234の操作量に応じて、ボタン振動機構31に対する振動量の補正係数を決定する。そして、その補正係数に応じて補正された振動量でボタン振動機構31を振動させる制御命令を出力する。この場合の補正係数は、例えば図7に示すグラフにより決定される。この図の例では、操作量0が無操作状態、操作量255が最大操作状態に相当する。振動制御部44は、操作量が230を超えるとボタン振動機構31の振動量を抑制する制御を行い、操作量が240を超えた段階で補正係数を0.6とする。この補正係数の数値は、ボタン振動機構31の振動によって生じるノイズ(いわゆるびびり音)が気にならない程度になるように決定される。このような制御によれば、ロッキングボタン234の操作状態にかかわらず、ボタン振動機構31による振動によって生じるノイズを抑えることができる。
次に、力覚提示装置と組み合わせてボタン振動機構31を制御する例について、説明する。この例において振動制御部44は、ロッキングボタン234に接続された力覚提示装置によって、ロッキングボタン234を操作するユーザの指に対して力覚を提示する。ここで、ユーザに提示したい力の強さの目標値が、力覚提示装置によって提示可能な力よりも大きい場合がある。このような場合、振動制御部44は、力覚提示装置が力を提示している間、同時期にボタン振動機構31を振動させる。これにより、ユーザに強い力を感じさせることができる。図8はこのような制御の概要を説明する図である。この図の例では、時間とともに力覚提示装置が提示する力の強さを増加させており、その出力値が最大値Fmaxに達したタイミング(図中の時刻t0)以降、ボタン振動機構31を振動させている。
また、振動制御部44は、ボタン振動機構31によってロッキングボタン234を振動させる際に、その出力が十分でないと想定される場合、併せて力覚提示装置を動作させて可動部30に力を加えてもよい。これにより、ボタン振動機構31だけでは感じさせることができない力をユーザに感じさせることができる。
このように、一つの振動制御要求に基づいてボタン振動機構31と力覚提示装置の双方を動作させる際に制御部11が実行する処理の具体例について、図9を用いて説明する。この例では、振動制御部44は、ボタン振動機構31だけでなく、力覚提示装置の制御も併せて実行することとする。そして、振動制御部44は、機能的に、振動信号解析部44aと、振動命令出力部44bと、力覚提示命令出力部44cと、を含むこととする。
アプリケーション実行部41から力覚提示要求があった場合、力覚提示命令出力部44cは、その要求内容に応じて力覚を提示させる制御命令を、操作デバイス20に対して送信する。この制御命令に応じて力覚提示装置が制御されることで、ユーザに力覚が提示される。
一方、アプリケーション実行部41から振動制御要求があった場合、その内容は、まず振動信号解析部44aによって解析される。ここでは、振動制御要求は、ボタン振動機構31が発生させるべき振動の波形を符号化した波形データを含むものとする。振動データに含まれる波形の振幅が振動の強さを表し、周波数が振動の周期を表す。このような振動データは、音声データと類似するフォーマットで記述されてよい。また、この振動データには、音声データと同様に、複数の周波数の振動が重なった波形が含まれるものとする。振動信号解析部44aは、この波形の周波数及び振幅を解析する。具体的には、波形に含まれる周波数範囲を特定したり、最大振幅を特定したりする。
振動信号解析部44aは、解析の結果、アプリケーション実行部41からの振動制御要求に含まれる振動を実現するためにボタン振動機構31だけでは十分でないと判断される場合、力覚提示命令出力部44cに対して追加振動要求を行う。例えば振動信号解析部44aは、アプリケーション実行部41からの振動制御要求に、所定周波数以上の周波数の振動や所定値を超える振幅の振動が含まれる場合に、力覚提示命令出力部44cに対して追加振動要求を行う。この追加振動要求は、力覚提示装置に対して、振動制御要求に含まれる一部の周波数範囲の振動を提示させる要求である。さらに振動信号解析部44aは、力覚提示命令出力部44cに対する追加振動要求に含めた周波数範囲を除いた振動の波形を含んだ制御命令を、振動命令出力部44bに対して出力する。振動命令出力部44bは、この制御命令に応じて、ボタン振動機構31を振動させる制御命令を操作デバイス20に送信する。
力覚提示命令出力部44cは、振動信号解析部44aから追加振動要求を受け付けた場合、その内容を、アプリケーション実行部41から受け付けている力覚提示要求の内容と合成して、最終的に力覚提示装置に対する制御内容を決定する。そして、合成された制御内容に応じて力覚提示装置を動作させる制御命令を、操作デバイス20に送信する。例えばこの制御命令は、アプリケーション実行部41からの力覚提示要求に応じて決まる位置を中心として、可動部30をその可動方向に沿って振動させるような位置制御を指示するものであってよい。これにより、ボタン振動機構31と力覚提示装置という異なる機構の振動デバイスを連動させることによって、アプリケーション実行部41が要求する振動をユーザに提示することができる。
なお、振動信号解析部44aは、このような振動制御要求の振り分けを実行するか否かを、動作モードに応じて変化させてもよい。具体的に、ユーザの指示等によって振動振り分けを許可するモードで動作している場合には、振動信号解析部44aが振動制御要求の振り分けを行うこととし、振動信号の解析結果に応じて追加振動要求を出力する。一方、振動振り分けを許可しないモードで動作している場合には、振動制御要求の振り分けを行わず、ボタン振動機構31による振動制御だけを行うこととする。また、振動信号解析部44aは、操作デバイス20のバッテリ残量が少なくなっている場合など、省電力モードで動作すべき場合に、振動制御要求の振り分けを中止してもよい。
また、ここでは一つの振動制御要求に基づいて、ボタン振動機構31とロッキングボタン234の位置制御を行う力覚提示装置の双方を動作させる例について、説明した。しかしながらこれに限らず、例えば制御装置10は本体振動機構253とデバイス本体210の動きを制御する力覚提示装置を制御対象として、一つの振動制御要求に含まれる振動をこれらのデバイスに振り分けてもよい。
また、ここでは振動制御要求は振動の波形を符号化した波形データによって振動の内容を指定することとしたが、振動制御要求はそれ以外のデータ形式でボタン振動機構31による振動の内容を指定してもよい。一例として振動制御要求は、振動の強さや長さを数値等によって指定するデータであってもよい。また、ボタン振動機構31が偏心モーター等によって構成される場合、振動制御要求はボタン振動機構31に入力されるべき電圧信号等を含んでもよい。この場合、例えば振動信号解析部44aは、振動制御要求によって指定される振動の強さが所与の閾値を超えるか否かによって、振動制御要求の振り分けを行うか否か決定する。この例では、追加振動要求は、指定される振動の強さと閾値との差分に応じた強さの振動を発生させる要求であってよい。
次に、本体振動機構253に対する振動制御の一例について、説明する。具体的に、ユーザが左右どちらの手に操作デバイス20を装着しているかに応じた制御について説明する。前述したように、本体振動機構253はデバイス本体210を左右方向に振動させることができる。このとき、アプリケーション実行部41はデバイス本体210をユーザの手のひらに向かう方向に力が感じられるように振動させたい場合がある。あるいは、その逆に手のひらから離れる方向に力が感じられるように振動させたい場合もありえる。このような場合、振動制御部44は、ユーザが左右どちらの手に操作デバイス20を装着しているかに応じて、本体振動機構253に対する制御命令の内容を変化させる。
このような制御に先立って、振動制御部44はユーザがどちらの手に操作デバイス20を装着しているのかを特定する必要がある。本実施形態では、前述したように固定具220を左側面221及び右側面222のいずれにも装着可能になっており、さらにどちらの側に固定具220が固定されたかを検出するセンサが設けられている。このセンサの検出結果を参照することで、振動制御部44は固定具220がどちらの側に固定されているかを特定できる。そして、固定具220が右側面222に固定されていればユーザが右手に操作デバイス20を装着しており、左側面221に固定されていれば左手に操作デバイス20を装着していると特定できる。なお、ここでは固定具220の取り付け位置に応じてユーザがどちらの手に操作デバイス20を装着しているか特定するものとしたが、これに限らず振動制御部44は各種の方法でユーザの手の左右を特定してもよい。例えば操作デバイス20にユーザの手のひらを検出する近接センサ等のセンサを設け、その検出結果によってユーザがどちらの手に操作デバイス20を装着しているか特定してもよい。
振動制御部44は、アプリケーション実行部41から手のひら方向、または手のひら方向と逆方向の指定を含んだ振動制御要求を受け付ける。そして、ユーザがどちらの手に操作デバイス20を装着しているかの情報を用いて、本体振動機構253を振動させる向きを決定する。具体的に、ユーザが右手に操作デバイス20を装着しており、かつ手のひら方向の指定を伴う振動制御要求を受けた場合には、X軸正方向に力が加わるように本体振動機構253を振動させ、手のひらと逆方向を指定された場合には、X軸負方向に力が加わるように本体振動機構253を振動させる。また、ユーザが左手に操作デバイス20を装着している場合には、右手に装着している場合とは正負逆に力を生じさせるように本体振動機構253を振動させる。これにより、ユーザが左右どちらの手に操作デバイス20を装着しているかにかかわらず、ユーザの手のひらに同じように振動を感じさせることができる。
次に、本体振動機構253に対する別の振動制御の例について、説明する。この例において振動制御部44は、操作デバイス20が所定の状態にあると判定される場合に、本体振動機構253の振動を強くする制御を行う。具体的に、ユーザが操作デバイス20を握らずに手を開いている場合、及びユーザが操作デバイス20を装着した手のひらを下に向けている場合、操作デバイス20が手のひらに密着しないため、本体振動機構253による振動がユーザにとって弱く感じられる。そこで振動制御部44は、このように操作デバイス20の振動がユーザに伝わりにくい状態にあると判定される場合、アプリケーション実行部41からの振動制御要求に応じて決まる値よりも大きな振幅で本体振動機構253を振動させる。これにより、操作デバイス20の状態に応じて、ユーザに明確に振動を伝達することができる。
この例において、振動制御部44は、操作デバイス20に設けられた各種センサの検出結果に基づいて、操作デバイス20が所定の状態にあるか否かを判定する。例えば振動制御部44は、指位置特定部43によってユーザの複数の指が操作デバイス20に接触していると特定されている場合に、ユーザが操作デバイス20を握っていると判定し、ユーザの複数の指が操作デバイス20から離れていると判定されている場合には、ユーザが手を開いており振動を強化する必要があると判定してもよい。また、操作デバイス20が加速度センサ等の姿勢センサを内蔵している場合、振動制御部44は、そのセンサの検出結果に基づいて特定される操作デバイス20の向きから、ユーザが手のひらを下方に向けていると判定してもよい。
次に、ユーザが左右の手で2個の操作デバイス20を同時に使用する場合の制御例について、説明する。以下の例では、ユーザが左手、及び右手のそれぞれに操作デバイス20を装着しており、制御装置10はこれら2個の操作デバイス20と通信接続されるものとする。
この場合において、振動制御部44は、2個の操作デバイス20が互いに接触していると判定される場合に、各操作デバイス20の本体振動機構253に対する制御内容を変更させる。より具体的に、振動制御部44は、2個の操作デバイス20が接触する際の向きに応じて、制御内容を変更する。すなわち、2個の操作デバイス20が同じ向きで接触していれば、両者が同じ向きで振動するように共通波形の制御命令を出力する。これに対して2個の操作デバイス20が逆向きに接触している場合、両者を共通波形で振動させようとすると、振動の位相が反転し、互いに振動を打ち消してしまう。そこで振動制御部44は、一方の操作デバイス20に対する波形の位相を反転させて、逆向きに振動させる制御命令を出力する。これにより、2個の操作デバイス20を同じように振動させることができる。また、2個の操作デバイス20が接触している場合、振動制御部44は、一方の操作デバイス20の本体振動機構253に対する制御命令を中止して他方の操作デバイス20のみを振動させてもよい。さらにこの場合、他方の操作デバイス20の本体振動機構253に対して、両者が接触していない場合よりも大きな振幅で振動させる制御命令を出力してもよい。また、振動制御部44は、2個の操作デバイス20が接触しているか、又は所定距離以内に近づいた場合には、双方の本体振動機構253に対する制御命令を中止してどちらの振動も抑制することとしてもよい。
なお、振動制御部44は、このような制御に先立って、デバイス位置特定部42による特定結果を用いて2個の操作デバイス20が接触しているか否か、また接触している場合どのような向きで接触しているかを判定する。また、振動制御部44は、マイクロフォン252によって得られる音声信号から2個の操作デバイス20の接触状態を判定してもよい。すなわち、マイクロフォン252によって得られる音声信号に2個の操作デバイス20が接触して生じるノイズが含まれている場合に、両者が接触していると判定してもよい。
次に、ユーザが左右の手で2個の操作デバイス20を同時に使用する場合の第2の制御例として、仮想空間内での仮想オブジェクトに対する操作に操作デバイス20を利用する場合について、説明する。以下の例では、アプリケーション実行部41は仮想空間内にユーザの両手に対応する仮想オブジェクト(右手オブジェクトR及び左手オブジェクトL)と、右手オブジェクトR及び左手オブジェクトLによる操作の対象となるターゲットオブジェクトTを配置する。アプリケーション実行部41は、デバイス位置特定部42によって特定される、ユーザが右手に装着した操作デバイス20の位置、及び指位置特定部43によって特定されるユーザの右手の指の位置に連動して、右手オブジェクトRを仮想空間内で移動させたり、その形状を変化させたりする。同様に左手オブジェクトLについても、ユーザが左手に装着した操作デバイス20の位置や左手の指の位置に連動するように制御する。ユーザは、操作デバイス20を装着した状態で自身の両手、及び指を動かすことで、右手オブジェクトR及び左手オブジェクトLを操作し、仮想空間内のターゲットオブジェクトTに触れたり掴んだりすることができる。
このような状況において、アプリケーション実行部41は、右手オブジェクトR及び左手オブジェクトLのそれぞれがどのターゲットオブジェクトTに触れているか、をフラグ情報として管理する。さらに、ターゲットオブジェクトTに触れたり掴んだりした際の触覚をユーザに提示するために、各操作デバイス20の本体振動機構253やボタン振動機構31を振動させる振動制御要求を出力する。具体的に、ターゲットオブジェクトTが他のオブジェクトにぶつかるなどして振動が生じた場合、アプリケーション実行部41は右手オブジェクトR及び左手オブジェクトLのいずれかがターゲットオブジェクトTに接触しているか否かを、フラグ情報を参照して判定する。そして、接触している方の手に対応する操作デバイス20に対して、振動を伝達するための振動制御要求を出力する。これを受けて振動制御部44は、振動制御要求の対象となった操作デバイス20の本体振動機構253、及び/又はボタン振動機構31に対して制御命令を出力する。
さらに、右手オブジェクトR及び左手オブジェクトLの双方が同じターゲットオブジェクトTに接触している場合、振動制御部44は2個の操作デバイス20のそれぞれを同時に振動させてもよい。図10は、仮想空間内において右手オブジェクトR及び左手オブジェクトLが同時に一つのターゲットオブジェクトTを掴んでいる様子を示している。この場合、アプリケーション実行部41はターゲットオブジェクトTに発生した振動に応じてそれぞれの手に伝わるべき振動の向き、及び大きさを決定する。このときアプリケーション実行部41は、予め定められたターゲットオブジェクトTの剛性や材質などの特性を表す情報を参照して、振動の伝達度合いを決定してもよい。例えばターゲットオブジェクトTが柔らかい物質を表すオブジェクトである場合、振動は伝達しにくく、金属等の固い物質を表すオブジェクトの場合には、強く振動が伝達する。この決定内容に応じて、アプリケーション実行部41は、ユーザが右手に装着した操作デバイス20、及び左手に装着した操作デバイス20のそれぞれに対して振動制御要求を出力する。これに応じて振動制御部44は、各操作デバイス20に対してその本体振動機構253を振動させる制御命令を出力する。これによりユーザは、左右の手にそれぞれ別の操作デバイス20を装着しているにもかかわらず、あたかも一つの物体を両手で持っているかのような感覚を体験することができる。
次に、ユーザの人差指の位置を指位置特定部43が特定した結果に基づいて、アプリケーション実行部41が実行する処理の具体例について、説明する。本実施形態では、前述したようにロッキングボタン234の表面に第1指センサ233が設けられている。アプリケーション実行部41は、この第1指センサ233の検出結果とロッキングボタン234に対してユーザが行った操作量(可動部30の押し込み量)の両方を、ユーザのロッキングボタン234に対する操作内容を表す情報として受け付けてもよい。これにより、単にロッキングボタン234に対する押し込み操作の操作量を使用するだけでは実現できないような、ユーザの操作に応じた処理を実現できる。以下、このような処理の具体例について説明する。
まず第1の例として、ユーザがロッキングボタン234を操作していない(すなわち、ロッキングボタン234の押し込み量が0である)が、人差指をロッキングボタン234に接触させた状態に関する処理について、説明する。この例では、指位置特定部43の特定結果により、ユーザがロッキングボタン234の表面に人差指を接触させた状態が検出される。具体的には、指位置特定部43が第1指センサ233からユーザの人差指までの距離x=0と検出した場合、ユーザが人差指をロッキングボタン234に接触させていると判定される。
ユーザがロッキングボタン234を操作中の場合にも、距離x=0になる。しかしながら、距離x=0であって、かつ、ロッキングボタン234に対する押し込み量が0の場合には、ユーザがロッキングボタン234に人差指をかけてまさにその操作を開始しようとしている状態にあることになる。そこでアプリケーション実行部41は、このような状態になった場合に、表示装置14の画面に所定の案内表示を行うなど、この操作状態に応じた処理を実行する。具体的には、ロッキングボタン234を押し込む操作を行った場合に発生するイベントを事前にユーザに通知するなどの処理を実行してよい。これにより、ユーザは、実際にロッキングボタン234の操作を行う前に、操作を行うと何が起こるかを知ることができる。
なお、以上の説明では距離x=0になったタイミングで案内表示などを行うこととしたが、これに限らず、アプリケーション実行部41は、距離xが所定の閾値以下となったときに、各種の処理を実行してもよい。距離xが所定の閾値以下になったときには、ユーザの人差指がロッキングボタン234に接近しており、ユーザがロッキングボタン234を操作しようとしていると推定できるためである。
第2の例として、指位置特定部43が特定する人差指の位置に関する情報と、ロッキングボタン234に対する押し込み量の情報と、の双方に基づいて算出される値をユーザの操作入力値として受け付ける例について、説明する。ここでは一例として、ロッキングボタン234に対する押し込み量が0〜255までの値をとるものとする。すなわち、無操作状態であれば押し込み量0、最大操作状態で押し込み量255となる。この場合、ロッキングボタン234に対する押し込み量の情報だけを使用すると、ユーザの操作量は0〜255までの256段階で表現されることになる。
この第2の例では、アプリケーション実行部41は、指位置特定部43が特定する人差指の位置までの距離xを、ロッキングボタン234に対する押し込み量とともにユーザの操作量を表す情報として使用する。具体的に、距離xが所定の閾値Th以上の場合には操作量0とし、ユーザが閾値Thより人差指をロッキングボタン234に近づけた場合、その時点でユーザの操作が始まったとみなす。このときユーザの操作量aは、距離xを用いて
a=c(Th−x) (0≦x≦Th)
で表される。ここでcは所与の係数である。例えば係数cは、c・Thが256になるように決定される。この場合、ユーザがロッキングボタン234から人差指を距離Th以上離した状態では操作量0であって、人差指がロッキングボタン234に近づくにつれ操作量は増加し、ロッキングボタン234に人差指を接触させた状態で操作量256の操作があったとみなされる。
そこからさらにユーザがロッキングボタン234を押し込む操作を行った場合、その押し込み量を表す数値を操作量aに加算する。したがって、押し込み量をpで表すと、ユーザの操作量aは全体で以下の計算式により算出される。
a=c(Th−x)+p (0≦x≦Th)
ユーザが最大操作状態までロッキングボタン234を押し込む操作を行った場合、p=255なので、操作量aは511となる。
このように、ロッキングボタン234の押し込み量とロッキングボタン234までの距離xとを組み合わせて用いることにより、押し込み量だけを使用する場合よりも広いダイナミックレンジでユーザの操作量を取得することができる。図11は、この例におけるユーザの操作内容と操作量の関係を模式的に示す図である。図11(a)は人差指がロッキングボタン234から距離Th以上離れた状態を示しており、この状態では操作量a=0である。図11(b)は人差指がロッキングボタン234の表面に接触し、かつ押し込み操作が行われていない状態を示している。この状態では、距離x=0、押し込み量p=0なので、操作量a=c・Th=256である。図11(c)はロッキングボタン234が最大量まで押し込まれた最大操作状態を示しており、この状態では押し込み量p=255なので操作量a=511となる。
以上説明した本実施形態に係る制御システム1によれば、ロッキングボタン234に内蔵されるボタン振動機構31を振動させることにより、ロッキングボタン234を操作しようとするユーザの指に固有の振動を提示することができる。さらに、一つの操作デバイス20が供えるボタン振動機構31と本体振動機構253のそれぞれを振動させたり、2個の操作デバイス20が備える振動機構をそれぞれ制御したりすることで、多様な種類の振動をユーザに提示することができる。
なお、本発明の実施の形態は、以上説明したものに限られない。例えば以上の説明では、デバイス位置特定部42は、操作デバイス20が備える発光素子の光をカメラで撮像することによって操作デバイス20のポジショントラッキングを行うこととしたが、ポジショントラッキングの方法はこのようなものに限られない。例えば操作デバイス20が加速度センサやジャイロスコープ等のモーションセンサを内蔵する場合、デバイス位置特定部42は、これらのセンサの検出結果をポジショントラッキングに利用してもよい。また、以上の説明では表示装置14は頭部装着型のデバイスであるとしたが、これに限らず家庭用テレビ受像機等の据え置き型のデバイスであってもよい。
また、以上の説明では押し込み量を検出可能なロッキングボタン234にボタン振動機構31を搭載することとしたが、これ以外の各種の操作ボタンにボタン振動機構を設け、その操作ボタンを振動させてもよい。これにより、人差指に限らず、操作ボタンを操作する様々な指に固有の振動を提示できる。
また、以上の説明では本体振動機構253はデバイス本体210の筐体内に固定されるものとしたが、本体振動機構253は、ユーザの手のひらが直接接触するデバイス本体210の筐体よりも、剛性の低い部材に取り付けられてもよい。図12は、このように本体振動機構253が配置されたデバイス本体210の構成を模式的に示す図である。
この図12の例では、デバイス本体210の筐体を構成する第1部材254に対して、別体の第2部材255が突出するように取り付けられている。第2部材255は、例えば板金などでよく、第1部材254よりも剛性が低くなっている。ユーザが操作デバイス20を装着した際には、ユーザの身体(ここでは手のひら)が第1部材254の一部分に接触する。この例の本体振動機構253は、振動アクチュエータ等であって、第2部材255に固定されている。本体振動機構253を振動させると、その振動は第2部材255から第1部材254を経由してユーザに伝達される。このような構成によれば、本体振動機構253を第1部材254に直接固定している場合と比較して、本体振動機構253を動作させた際にその内部でのメカ当たり等が発生しにくくなるので、高出力で本体振動機構253を動作させることができる。
また、以上の説明では操作デバイス20とは別個独立の制御装置10がユーザの操作内容や指の位置などを特定し、その内容に応じてボタン振動機構31や本体振動機構253に対する制御命令を出力することとした。しかしながら本発明の実施の形態はこのようなものに限られない。例えば以上の説明において制御装置10が実行することとした処理の一部又は全部は、操作デバイス20に内蔵されるマイクロコンピュータ等の制御装置によって実行されることとしてもよい。