(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-30
(45)【発行日】2023-09-07
(54)【発明の名称】振動制御システム
(51)【国際特許分類】
G06F 3/01 20060101AFI20230831BHJP
A63F 13/285 20140101ALI20230831BHJP
【FI】
G06F3/01 560
A63F13/285
(21)【出願番号】P 2021029824
(22)【出願日】2021-02-26
【審査請求日】2022-01-27
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】青木 孝文
【審査官】菅原 浩二
(56)【参考文献】
【文献】特開2020-107320(JP,A)
【文献】特開2015-053038(JP,A)
【文献】特開2014-002729(JP,A)
【文献】特開2017-221631(JP,A)
【文献】特開2019-121399(JP,A)
【文献】特開2015-056183(JP,A)
【文献】特開2019-153322(JP,A)
【文献】特開2002-027028(JP,A)
【文献】特開2018-102610(JP,A)
【文献】特表2018-523863(JP,A)
【文献】米国特許出願公開第2021/0052980(US,A1)
【文献】国際公開第2016/136934(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/01
A63F 13/285
(57)【特許請求の範囲】
【請求項1】
アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信する受信部と、
前記偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスと、
前記受信した偏心モータ駆動データに基づいて、前記振動デバイスを振動させるための振動データを生成する振動データ生成部と、
を備え、
前記振動データ生成部は、その変化の傾向が前記偏心モータ駆動データ
に基づいて前記偏心モータ型振動デバイスを振動
させたときに前記偏心モータ型振動デバイスの振動が示す
であろう第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す前記振動データを生成する、振動制御システム。
【請求項2】
前記振動データ生成部は、
前記偏心モータ駆動データに基づいて、時
刻における振幅を算出し、
算出された前記振幅を、所定範囲の数値に正規化し、
前記所定範囲の数値と、所定の周波数を示す情報とを含む、前記振動データを生成する、請求項1に記載の振動制御システム。
【請求項3】
前記振動データは、振幅を示す情報と、周波数を示す情報とを含み、
前記周波数は、前記振動デバイス
の共振周波数
の70%~130%の範囲の周波数に設定されている、請求項1または2に記載の振動制御システム。
【請求項4】
前記周波数は
、主として
前記共振周波数の70%~130%の範囲で
あって、かつ、当該共振周波数を除いて変化するように設定されている、請求項3に記載の振動制御システム。
【請求項5】
前記偏心モータ駆動データを有するアプリケーションから第1周期で当該偏心モータ駆動データを受信し、当該第1周期よりも高周期である第2周期で当該偏心モータ駆動データを前記受信部に出力する、頻度上昇部をさらに備える、請求項1から4のいずれかに記載の振動制御システム。
【請求項6】
偏心モータ型振動デバイスをさらに備え、
前記偏心モータ駆動データに基づいて、前記偏心モータ型振動デバイスを振動させるように構成されている、請求項1から5のいずれかに記載の振動制御システム。
【請求項7】
偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスの振動を制御する方法であって、
アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信するステップと、
前記受信した偏心モータ駆動データに基づいて、その変化の傾向が前記偏心モータ駆動データ
に基づいて前記偏心モータ型振動デバイスを振動
させたときに前記偏心モータ型振動デバイスの振動が示す
であろう第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す、振動データを生成するステップと、
前記振動データに基づいて、前記振動デバイスを振動させるステップと、
を備えている、振動制御方法。
【請求項8】
偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスの振動を制御する制御プログラムであって、
コンピュータに、
アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信するステップと、
前記受信した偏心モータ駆動データに基づいて、その変化の傾向が前記偏心モータ駆動データ
に基づいて前記偏心モータ型振動デバイスを振動
させたときに前記偏心モータ型振動デバイスの振動が示す
であろう第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す、振動データを生成するステップと、
前記振動データに基づいて、前記振動デバイスを振動させるステップと、
を実行させる、振動制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、振動制御システム、振動制御方法、及び振動制御プログラムに関する。
【背景技術】
【0002】
特許文献1には、アプリケーションプログラムから読み込まれる振動データ(振動波形を示すアナログデータや、振動波形そのものの信号や、振動波形をデジタル化したものや、周波数を示す値と振幅を示す値の組など)に基づいて、異なる複数の装置の振動デバイスを振動させるにあたって、それぞれの装置の特性に応じて振動データを調整することが開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、振動子として偏心モータを備えた装置が公知である。偏心モータは、その機構上、周波数と振幅とを個別に制御できず、回転速度に応じた所定の周波数および振幅の組となる振動が出力される。そのため、このような偏心モータを制御するにあたっては、上記のような振動データは適さず、アプリケーションプログラムからは偏心モータの駆動データ(ON/OFF信号や、駆動電圧値(強弱のみの指定を含む)や、ON時間など)が読み込まれ、これに基づいて偏心モータを制御するのが一般的である。したがって、偏心モータ型の振動デバイスを備えた装置を用いて操作されることが想定されたアプリケーションのプログラムには、当該振動デバイスを振動させるにあたって、偏心モータの駆動データを含んでいる。
【0005】
ここで、上記のようなアプリケーションを、振動データに基づいて振動する振動デバイスを備えた装置を用いて操作する場合、当該アプリケーションプログラムが含む偏心モータ用の駆動データではそもそも振動させることができない。その一方で、そのような振動データを別途一から作成することは、アプリケーション製作者にとって負担となりうる。
【0006】
本開示は、上記問題を解決するためになされたものであり、新たな振動データを一から生成することなく、偏心モータ用の駆動データに基づいて、振動データを生成して振動デバイスの振動を制御することができる、振動制御システム、振動制御方法、及び振動制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本開示に係る振動制御システムは、アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信する受信部と、前記偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスと、前記受信した偏心モータ駆動データに基づいて、前記振動デバイスを振動させるための振動データを生成する振動データ生成部と、を備え、前記振動データ生成部は、その変化の傾向が前記偏心モータ駆動データによって振動される前記偏心モータ型振動デバイスの振動が示す第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す前記振動データを生成する。
【0008】
本開示が対象とする振動デバイスと偏心モータ型振動デバイスとでは、構造が相違するため、偏心モータの振動を、この振動デバイスで再現する場合、本発明者によると、偏心モータの振動波形ではなく、この振動波形(第1波形)の包絡線を、振動デバイスの振動波形(第2波形)の包絡線によって再現すると、より偏心モータの振動に近い体感が得られうるということが分かった。そこで、本開示においては、その変化の傾向が偏心モータ駆動データによって振動される偏心モータ型振動デバイスの振動が示す第1波形の包絡線の変化の傾向と相関する包絡線を有し、第1波形よりも周波数の高い第2波形を示す振動データを生成するように構成している。このように、偏心モータ型振動デバイスを振動させるための駆動データに基づいて、振動データを生成することができるため、振動データを別途作成する必要がなく、その結果、アプリケーション製作者の負荷を軽減することができる。
【0009】
上記振動制御システムにおいて、前記振動データ生成部は、前記偏心モータ駆動データに基づいて、時刻tにおける振幅を算出し、算出された前記振幅を、所定範囲の数値に正規化し、前記所定範囲の数値と、所定の周波数を示す情報とを含む、前記振動データを生成するように構成することができる。
【0010】
上記振動制御システムにおいて、前記振動データは、振幅を示す情報と、周波数を示す情報とを含み、前記周波数は、前記振動デバイスの実質的な共振周波数に設定することができる。
【0011】
この構成によれば、振動データに含まれる周波数を振動デバイスの実質的な共振周波数にすることで、振動デバイスが振動しやすくなり、強い振動を付与することができる。
【0012】
上記振動制御システムにおいて、前記周波数は、前記振動デバイスの共振周波数以外の周波数であり、且つ、前記周波数が、主として当該共振周波数の70%~130%の範囲で変化するように設定することができる。
【0013】
振動デバイスを振動させる周波数を、振動デバイスの共振周波数に一致させると、振動デバイスを含む筐体等のびびり振動が生じるおそれがある。そこで、振動デバイスを振動させる周波数を、主として共振周波数の70%~130%の範囲とすれば、びびり振動の発生を抑制することができる。さらに、この周波数が一定ではなく経時的に変化するように構成すると、振動制御システムを操作する操作者に違和感を与える可能性を抑制することができる。なお、「主として共振周波数の70%~130%の範囲」とは、振動中に用いられる全ての周波数がこの範囲に含まれていなくてもよく、大半がこの範囲であれば、一部が範囲外であってもよいことを意味する。
【0014】
上記振動制御システムにおいては、前記偏心モータ駆動データを有するアプリケーションから第1周期で当該偏心モータ駆動データを受信し、当該第1周期よりも高周期である第2周期で当該偏心モータ駆動データを前記受信部に出力する、頻度上昇部をさらに備えることができる。
【0015】
偏心モータ型振動デバイスと、本開示に係る振動デバイスとは仕様が相違するため、偏心モータ駆動データにおけるデータの更新周期も、本開示に係る振動デバイスの振動データにおけるデータの更新周期と相違する。ここで、偏心モータ駆動データにおけるデータの更新周期に合わせて、本開示に係る振動デバイスの振動データにおけるデータの更新周期を調整することも考えられるが、その更新周期を正確に取得することは難しい。
【0016】
そこで、頻度上昇部では、偏心モータ駆動データにおける更新周期である第1周期で偏心モータ駆動データを受信し、この第1周期よりも高周期である第2周期で受信部に偏心モータ駆動データを出力するようにしている。これにより、偏心モータ駆動データにおける第1周期に関わらず、第2周期で出力するため、偏心モータ駆動データにおける第1周期の正確なタイミングを把握する必要がない。特に、頻度上昇部では、第2周期を第1周期より高く設定しているため、よりスムーズな振動を付与することができる。
【0017】
上記振動制御システムにおいては、偏心モータ型振動デバイスをさらに備え、前記偏心モータ駆動データに基づいて、前記偏心モータ型振動デバイスを振動させるように構成することができる。
【0018】
本開示に係る振動制御方法は、偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスの振動を制御する方法であって、アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信するステップと、前記受信した偏心モータ駆動データに基づいて、その変化の傾向が前記偏心モータ駆動データによって振動される前記偏心モータ型振動デバイスの振動が示す第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す、振動データを生成するステップと、前記振動データに基づいて、前記振動デバイスを振動させるステップと、を備えている。
【0019】
本開示に係る振動制御プログラムは、偏心モータ型振動デバイスよりも共振周波数が高く、振幅と周波数とを制御可能な振動デバイスの振動を制御する制御プログラムであって、コンピュータに、アプリケーション用のプログラムに含まれる、偏心モータ型振動デバイスを振動させるための偏心モータ駆動データを受信するステップと、前記受信した偏心モータ駆動データに基づいて、その変化の傾向が前記偏心モータ駆動データによって振動される前記偏心モータ型振動デバイスの振動が示す第1波形の包絡線の変化の傾向と相関する包絡線を有し、前記第1波形よりも周波数の高い第2波形を示す、振動データを生成するステップと、前記振動データに基づいて、前記振動デバイスを振動させるステップと、を実行させる。
【発明の効果】
【0020】
本開示によれば、新たな振動データを一から生成することなく、偏心モータ用の駆動データに基づいて、振動データを生成して振動デバイスの振動を制御することができる。
【図面の簡単な説明】
【0021】
【
図1】本体装置に左コントローラおよび右コントローラ装着した状態のゲームシステムの一例を示す図である。
【
図2】本体装置から左コントローラおよび右コントローラをそれぞれ外した状態のゲームシステムの一例を示す図である。
【
図4】
図1の左コントローラの一例を示す六面図である。
【
図5】
図1の右コントローラの一例を示す六面図である。
【
図6】
図1の本体装置の内部構成の一例を示すブロック図である。
【
図7】
図1の本体装置と左コントローラおよび右コントローラとの内部構成の一例を示すブロック図である。
【
図8】
図1のゲームシステムにおける振動制御のための機能構成を示すブロック図である。
【
図9】偏心モータの振動波形の一例を示す図である。
【
図11】偏心モータ駆動データに基づいて、リニア振動モータを振動させるための振動データを生成する処理を示すフローチャートである。
【
図12】頻度上昇部の機能を示すブロック図である。
【
図13】偏心モータの振動波形とリニア振動モータの振動波形の例を示す図である。
【
図14】実測した偏心モータの振動波形とその包絡線を示す図である。
【
図15】偏心モータの振動波形の包絡線のモデル化の例を示す図である。
【
図16】包絡線をモデル化するためのアルゴリズムを示す図である。
【
図17】偏心モータ駆動データから包絡線を再現した例を示す図である。
【
図18】偏心モータ駆動データから包絡線を再現した例を示す図である。
【
図19】偏心モータ駆動データから包絡線を再現した例を示す図である。
【
図20】包絡線をモデル化するためのアルゴリズムを示す図である。
【
図21】生成された包絡線に基づく、リニア振動モータ用の振動波形を示す図である。
【発明を実施するための形態】
【0022】
以下、本開示に係る振動制御システムを、ゲームシステムに適用した場合の一実施形態について説明する。
【0023】
<1.ゲームシステムのハードウエア構成>
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウエア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0024】
<1-1.本体装置>
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0025】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0026】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0027】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0028】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0029】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0030】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0031】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0032】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0033】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0034】
<1-2.左コントローラ>
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、
図1および
図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0035】
左コントローラ3は、アナログスティック32を備える。
図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
【0036】
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33~36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および-(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0037】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0038】
<1-3.右コントローラ>
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。ここで、説明の便宜のため、右コントローラ4のハウジング51の外面を次のように規定することする。すなわち、ハウジング51は概ね直方体状に形成されており、上下方向を長手方向とする長方形状の第1主面、及びこれとは反対側の第2主面を備えている。そして、ハウジング51において、これら主面の長手方向の上端面が第1端面を構成し、下端面が第2端面を構成する。また、両主面の短手方向の右側面が第1側端面を構成し、左側面が第2側端面を構成する。但し、第1端面は、左端部に長手方向の上方を向く平坦な面を有しているが、右側にいくにしたがって下方に湾曲するように構成され、第1側端面の上端に連結されている。そして、この第1端面には、後述するように、湾曲した第1Rボタン60が配置されている。同様に、第2端面は、左端部に長手方向の下方を向く平坦な面を有しているが、右側にいくにしたがって上方に湾曲するように構成され、第1側端面の下端に連結されている。そして、この第2端面に後述する赤外撮像部123及び赤外発光部124が配置されている。
【0039】
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53~56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。これら右コントローラ4の第1主面に設けられたる操作ボタン53~58及びアナログスティック32が、本発明の第1操作部の一例となる。また、右コントローラ4は、ハウジング51の第1端面に湾曲した第1Rボタン60を備える。また、第1Rボタン60の背面側には、背面側に突出するとともに、上方から押し込み可能なZRボタン61が設けられている。そして、このZRボタン61の下方には隆起部500が形成されている。この隆起部500は、第2主面から膨出する部位でありZRボタン61から下方にいくにしたがって第2主面に向かう傾斜面を有している。ここで、第1Rボタン60が本発明の第2操作部の一例となり、ZRボタン61及び隆起部500が第3操作部の一例となる。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
【0040】
また、ハウジング51の第2端面には、窓部68が設けられる。詳細は後述するが、右コントローラ4は、ハウジング51の内部に配置される赤外撮像部123および赤外発光部124を備えている。赤外撮像部123は、右コントローラ4の下方向(
図5に示すy軸負方向)を撮像方向として、窓部68を介して右コントローラ4の周囲を撮像する。赤外発光部124は、右コントローラ4の下方向(
図5に示すy軸負方向)を中心とする所定範囲を照射範囲として、赤外撮像部123が撮像する撮像対象に窓部68を介して赤外光を照射する。窓部68は、赤外撮像部123のカメラのレンズや赤外発光部124の発光体等を保護するためのものであり、当該カメラが検知する波長の光や当該発光体が照射する光を透過する材質(例えば、透明な材質)で構成される。なお、窓部68は、ハウジング51に形成された孔であってもよい。なお、本実施形態においては、カメラが検知する光(本実施形態においては、赤外光)以外の波長の光の透過を抑制するフィルタ部材を赤外撮像部123自身が有する。ただし、他の実施形態においては、窓部68がフィルタの機能を有していてもよい。
【0041】
また、詳細は後述するが、右コントローラ4は、NFC通信部122を備える。NFC通信部122は、NFC(Near Field Communication)の規格に基づく近距離無線通信を行う。NFC通信部122は、近距離無線通信に用いられるアンテナ122aと、アンテナ122aから送出すべき信号(電波)を生成する回路(例えばNFCチップ)とを有する。なお、NFC通信部122は、NFCの規格に基づく近距離無線通信を行う代わりに、任意の近接通信(非接触通信とも言う)で近距離無線通信を行うようにしてもよい。ここで、NFCの規格は、近接通信(非接触通信)に用いることができるものであり、「任意の近接通信で近距離無線通信を行うようにしてもよい」とは、NFCの規格による近接通信を除いた他の近接通信で近距離無線通信を行ってもよいことを意図している。
【0042】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0043】
<1-4.本体装置の内部構成>
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0044】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0045】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0046】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0047】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0048】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0049】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0050】
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0051】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0052】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0053】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0054】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0055】
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、
図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
【0056】
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、
図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
【0057】
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
【0058】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0059】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0060】
<1-5.コントローラの内部構成>
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0061】
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。
図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
【0062】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0063】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(
図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0064】
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、
図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、
図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
【0065】
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0066】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0067】
左コントローラ3は、振動によってユーザに通知を行うための振動デバイス107を備える。本実施形態においては、振動デバイス107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動デバイス107を駆動させる。ここで、左コントローラ3は、コーデック部106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号をコーデック部106へ出力する。コーデック部106は、通信制御部101からの制御信号から振動デバイス107を駆動させるための駆動信号、つまり振動データを生成して振動デバイス107へ与える。これによって振動デバイス107が動作する。
【0068】
振動デバイス107は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅および周波数で振動をさせることができる。本実施形態において、本体装置2から左コントローラ3に送信される振動データは、単位時間ごとに周波数と振幅とを表す値の組からなるデジタル信号であってよい。別の実施形態においては、本体装置2から振動波形(アナログ信号の波形)を示すデータ、波形そのものを示す信号(振動信号)、あるいは振動波形をデジタル化したデータを送信するようにしてもよいが、振幅および周波数だけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅および周波数の数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅および周波数の値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動デバイス107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動デバイス107を振動させる振幅および周波数を制御することができる。なお、本体装置2から左コントローラ3に送信される振幅および周波数は、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動デバイス107を制御する電圧の波形を生成することができる。
【0069】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0070】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0071】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0072】
また、右コントローラ4は、振動デバイス117およびコーデック部116を備える。振動デバイス117およびコーデック部116は、左コントローラ3の振動デバイス107およびコーデック部106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、コーデック部116を用いて振動デバイス117を動作させる。
【0073】
右コントローラ4は、NFCの規格に基づく近距離無線通信を行うNFC通信部122を備える。NFC通信部122は、いわゆるNFCリーダ・ライタの機能を有する。ここで、本明細書において近距離無線通信とは、一方の装置(ここでは、右コントローラ4)からの電波によって(例えば電磁誘導によって)他方の装置(ここでは、アンテナ122aと近接する装置)に起電力を発生させる通信方式が含まれる。他方の装置は、発生した起電力によって動作することが可能であり、電源を有していてもよいし有していなくてもよい。NFC通信部122は、右コントローラ4(アンテナ122a)と通信対象とが接近した場合(典型的には、両者の距離が十数センチメートル以下となった場合)に当該通信対象との間で通信可能となる。通信対象は、NFC通信部122との間で近距離無線通信が可能な任意の装置であり、例えばNFCタグやNFCタグの機能を有する記憶媒体である。ただし、通信対象は、NFCのカードエミュレーション機能を有する他の装置であってもよい。
【0074】
また、右コントローラ4は、第2端面に赤外撮像部123を備える。赤外撮像部123は、右コントローラ4の周囲を撮像する赤外線カメラを有する。一例として、本体装置2および/または右コントローラ4は、撮像された情報(例えば、撮像された撮像画像における少なくとも一部の領域全体を分割した複数のブロックの輝度に関連する情報等)を算出し、当該情報に基づいて、右コントローラ4の周囲変化を判別する。また、赤外撮像部123は、環境光によって撮像を行ってもよいが、本実施形態においては、赤外線を照射する赤外発光部124を有する。赤外発光部124は、例えば、赤外線カメラが画像を撮像するタイミングと同期して、赤外線を照射する。そして、赤外発光部124によって照射された赤外線が撮像対象によって反射され、当該反射された赤外線が赤外線カメラによって受光されることで、赤外線の画像が取得される。これによって、赤外撮像部123は、より鮮明な赤外線画像を得ることができる。なお、赤外撮像部123と赤外発光部124とは、それぞれ別のデバイスとして右コントローラ4内に設けられてもよいし、同じパッケージ内に設けられた単一のデバイスとして右コントローラ4内に設けられてもよい。また、本実施形態においては、赤外線カメラを有する赤外撮像部123が用いられるが、他の実施形態においては、撮像手段として、赤外線カメラに代えて可視光カメラ(可視光イメージセンサを用いたカメラ)が用いられてもよい。
【0075】
右コントローラ4は、処理部121を備える。処理部121は、通信制御部111に接続される。また、処理部121は、NFC通信部122、赤外撮像部123、および赤外発光部124に接続される。処理部121は、本体装置2からの指令に応じて、NFC通信部122に対する管理処理を実行する。例えば、処理部121は、本体装置2からの指令に応じてNFC通信部122の動作を制御する。また、処理部121は、NFC通信部122の起動を制御したり、通信対象(例えば、NFCタグ)に対するNFC通信部122の動作(具体的には、読み出しおよび書き込み等)を制御したりする。また、処理部121は、通信制御部111を介して通信対象に送信されるべき情報を本体装置2から受信してNFC通信部122へ渡したり、通信対象から受信された情報をNFC通信部122から取得して通信制御部111を介して本体装置2へ送信したりする。
【0076】
また、処理部121は、CPUやメモリ等を含み、右コントローラ4に備えられた図示しない記憶装置(例えば、不揮発性メモリ等)に記憶された所定のプログラム(例えば、画像処理や各種演算を行うためのアプリケーションプログラム)に基づいて、本体装置2からの指令に応じて赤外撮像部123に対する管理処理を実行する。例えば、処理部121は、赤外撮像部123に撮像動作を行わせたり、撮像結果に基づく情報(撮像画像の情報、あるいは、当該情報から算出される情報等)を取得および/または算出して通信制御部111を介して本体装置2へ送信したりする。また、処理部121は、本体装置2からの指令に応じて赤外発光部124に対する管理処理を実行する。例えば、処理部121は、本体装置2からの指令に応じて赤外発光部124の発光を制御する。なお、処理部121が処理を行う際に用いるメモリは、処理部121内に設けられてもいいし、メモリ112であってもよい。
【0077】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0078】
<2.ゲームシステムの振動制御のための機能構成>
次に、上記のように構成されたゲームシステムにおける振動制御のための機能構成(ソフトウエア構成)について説明する。
図8は、本実施形態に係るゲームシステムにおける振動制御のための機能構成の一例である。ゲームシステムのプロセッサ81は、フラッシュメモリ84、あるいはスロット23に装着された外部記憶媒体に記憶されたゲームプログラムをDRAM85に展開する。そして、プロセッサは、DRAM85に展開された情報処理プログラムを解釈及び実行して、各機能構成要素を制御する。これにより、本実施形態に係るゲームシステムは、頻度上昇部811、受信部812、及び振動データ生成部813をソフトウエアモジュール800として備えるコンピュータとして機能する。以下では、まず、本実施形態で制御すべき振動の対象に対いて説明し、その後、振動の具体的な制御方法について説明する。
【0079】
<2-1.振動制御の対象>
本実施形態に係るゲームシステムおいては、偏心モータ型振動デバイスを振動させることを想定して生成されたゲームプログラムを実行するものとする。したがって、このゲームプログラムには、偏心モータ型振動デバイスを駆動するための偏心モータ駆動データが含まれている。ところが、上記ゲームシステムで用いられている振動デバイス107,117は、リニア振動モータであるため、偏心モータ駆動データによって直接的にリニア振動モータを駆動することはできない。
【0080】
そこで、本実施形態においては、上述した頻度上昇部811、受信部812、及び振動データ生成部813によって、偏心モータ駆動データから、リニア振動モータ用の振動データを生成し、リニア振動モータ107,117を駆動するようにしている。
【0081】
まず、偏心モータ及びリニア振動モータについて説明する。一般的な、偏心モータは、例えば、半円状の振動子(錘)が回転軸に固定されている。このように、振動子の重心が回転軸からずれているため、回転している振動子の遠心力によって、振動が発生する。そして、この偏心モータを駆動するための偏心モータ駆動データには、例えば、所定の電圧を印加するためのON/OFF信号が含まれていてもよい。
図9に、この偏心モータによる経時的に変化する加振力の波形を示す。
図9に示すように、この偏心モータでは、ON信号が入力され電圧が印加されると、徐々に加振力(振幅)が大きくなり、OFF信号が入力され電圧の印加が停止されると、徐々に加振力(振幅)が小さくなって振動が停止する。
【0082】
また、この偏心モータでは、周波数と振幅とは独立して制御できない。例えば、偏心モータでは、印加電圧に応じて振動子が回転すると、その回転数の上昇に応じて周波数も上昇する。そして、この回転によって生じる遠心力は、振動子の重さ及び周波数の2乗に比例する。この遠心力が振動を生じさせるための加振力となり、この加振力が振動の振幅となる。
【0083】
次に、リニア振動モータについて説明する。
図10は、一般的なリニア振動モータの概略図である。なお、上述した2つのリニア振動モータ107,117は実質的に同様の構成を有しているため、以下では、リニア振動モータ107について説明する。
図10に示すように、リニア振動モータ107は、一対のバネ107b,107cの間に支持された振動子107aを有し、これらバネ107b,107cの間で振動子107aが磁力によって移動することで、振動が発生する。このとき、リニア振動モータ107に入力される振動データには、周波数を示すデータと、振幅を示すデータとが含まれており、これらのデータに基づいて経時的に変化する印加電圧が逐次生成される。そして、印加電圧が大きくなると、振動子107aの振幅が大きくなり、入力された周波数で振動子107aが振動する。このリニア振動モータでは、振動データにより電圧の印加がなされると、即座に振動が開始し、電圧の印加が停止されると(あるいは、振動データの未入力)、即座に振動が停止する。
【0084】
上記のように、偏心モータとリニア振動モータとは物理的な構造が相違するため、振動子の特性や制御方式が相違する。そのため、偏心モータ駆動データに基づいてリニア振動モータ用の振動データを生成するためには、例えば以下の点のいずれかまたは全てを考慮する必要がある。
(1)振動子の周波数特性の相違
(2)振動子の応答性の相違
(3)振動値を設定するAPIの相違
以下、これら(1)~(3)について検討する。
【0085】
<2-1-1.振動子の周波数特性の相違>
偏心モータは、一般的には、低周波数域、例えば、40Hz付近にモータが一番振動しやすい周波数が存在するため、この周波数で駆動させるのが一般的である。これに対して、ある種のリニア振動モータでは、比較的高い周波数域、例えば、160Hz付近に、モータが振動しやすい周波数が存在するため、この周波数で駆動させるのが一般的である。したがって、リニア振動モータを、40Hzといった低周波数で駆動させようとすると、振動が弱すぎてゲームには、適さない可能性がある。したがって、リニア振動モータの種類によっては、偏心モータに適した周波数よりも高い周波数で振動させる必要がある。
【0086】
<2-1-2.振動子の応答性の相違>
図9で示したように、偏心モータは、電圧が印加されてから徐々に加振力(振幅)が大きくなり、電圧の印加が停止されてから徐々に加振力(振幅)が小さくなって振動が停止する。したがって、入力に対する応答性が低いという特徴を有している。一方、リニア振動モータは、電圧の印加がなされると、即座に振動を開始し、電圧の印加が停止されると、即座に振動が停止する。したがって、入力に対する応答性が高いという特徴を有している。例えば、偏心モータを駆動するアプリケーションに、「101010101010」という電圧の印加と停止を示すON/OFF信号が入力されると、応答性の低さから、ON信号が入力されてから振幅が最大となる前にOFF信号が入力され、振幅が0になる前に再びON信号が入力されることが起こりうる。そのため、このようなデータが入力されると、偏心モータは、振幅の最大値の約50%の大きさの振幅で振動を続けることになりうる。すなわち、ある偏心モータにおいては、「101010101010」のようにON信号とOFF信号の切り替えによって振動の振幅が調整される。
【0087】
一方、リニア振動モータに、上記のような「101010101010」という信号が入力されると、応答性の高さから、ON信号である「1」の回数だけ、つまり6回の振動が断続的に発生する可能性がある。そのため、リニア振動モータに、「101010101010」という信号を入力すると、上記のように偏心モータで想定されるような振動を発生させることができないおそれがある。したがって、このような応答性の相違からも、偏心モータ駆動データをリニア振動モータに直接適用することはできない可能性がある。
【0088】
<2-1-3.振動値を設定するAPIの相違>
偏心モータの振動値を設定するAPI(Application Programming Interface)では、例えば、以下のような振動値が指定される。時系列に並ぶこのような振動値に応じて経時的に電圧が印加されることで、偏心モータには加振力(振幅)が生じる。
(1)ON/OFF信号(1/0)の2値信号での指定
(2)所定の数値範囲(例えば、0.0~1.0)の数値の指定
(3)Weak,Strongなどのラベルでの指定
【0089】
(1)は所定の振幅を生じさせるための電圧を示すON信号と、電圧が0のOFF信号を示す。(2)は電圧が0となる0.0と、最大の振幅を生じさせるための電圧を示す1.0との間で電圧を示す数値(浮動小数点数)を指定する。(3)は弱い振幅(Weak)と強い振幅(Strong)をそれぞれ生じさせるための所定の電圧を示す。なお、偏心モータの振動値の指定の方法はこれらに限られず、例えば、所定の電圧が印加される時間(ON時間)を指定するといった方法でもよい。
【0090】
偏心モータの制御は、上記のような振動値が時系列に並ぶことで所望の加振力(振幅)を実現するものであるが、リニア振動モータの制御は、上記のように振幅(あるいは振幅を示す電圧値)と周波数とを別個に指定するものである。したがって、偏心モータ駆動データから、リニア振動モータ用に、振幅及び周波数を示すデータを生成する必要がある。
【0091】
また、偏心モータ用の振動値からリニア振動モータ用の振動値を生成するにあたって、偏心モータ用の振動値がどの程度の時間継続されるべきものであるかは正確に把握されることが望ましい。しかし、例えば、ゲームプログラムによっては、30Hzで振動値を出力するもの、60Hzで振動値を出力するものがあるが、30Hzで「010」の振動値を出力する場合と、60Hzで「010」の振動値を出力する場合とでは、「1」で示されるONの時間が2倍相違することになる。あるいは、可変周期で二値情報が出力されることがある。したがって、ゲームプログラムの更新周期を取得できないシステムにおいて、ON時間やOFF時間がどの程度続いているかを正確に把握することは難しい。
【0092】
本実施形態においては、以上の3つの相違点を考慮し、上述した頻度上昇部811、受信部812、及び振動データ生成部813では、以下のように、偏心モータ駆動データに基づいて、リニア振動モータを駆動するための振動データを生成する。この点について、
図11のフローチャートも参照しつつ説明する。
【0093】
<2-2.頻度上昇部>
上記のように、ゲームプログラムから出力される二値情報等の更新周期を正確に把握すること、つまり、振動のON時間やOFF時間を正確に把握することは難しい。そこで、頻度上昇部811では、ゲームプログラムからの更新周期(第1周期)にかかわらず、これよりも高い周期(第2周期)で偏心モータ駆動データを出力するようにしている。
【0094】
例えば、
図12に示すように、頻度上昇部811は、ゲームプログラムから第1周期で二値情報が出力されると(ステップS101)、これを第2周期でサンプリングし(ステップS102)、受信部812へ出力する。ここでは、一例として、第1周期を60Hzとし、第2周期を200Hzとする。より詳細に説明すると、ゲームプログラムから「010」の信号が60Hzで出力される場合、頻度上昇部811は、アプリケーションから最初に「0」の信号を受信し、次の「1」の情報が受信されるまでの間は、200Hzでサンプリングすることで、「0000」の信号を出力する。続いて、アプリケーションから「1」の信号を受信し、次の「0」の情報が受信されるまでの間は、200Hzでサンプリングすることで、「111」の信号を出力する。
【0095】
ここで、アプリケーションから出力される最初の「0」に対する頻度上昇部811の出力は「0000」であるため、第2周期が200Hzであることから、5msec*4=20msecの間、「0」が続くようにゲームプログラムからの出力が再現されたことになる。そして、次の「1」に対する頻度上昇部811の出力は「111」であるため、5msec*3=15msecの間、「1」が続くようにゲームプログラムからの出力が再現されたことになる。上述したように、ゲームプログラムからの二値情報の更新周期は、一定でないことがあるところ、頻度上昇部811は、受信した情報を所定の第2周期でサンプリングすることで、信号が出力される時間を再現するようにしている。
【0096】
なお、上記の例では第2周期を200Hzとしているが、特には限定されない。しかし、第2周期が高いほど、後述する振幅が算出される周期が短くなるため、より詳細な制御が可能となる。このほか、リニア振動モータに入力される振動データの周期に応じて第2周期を設定することができる。例えば、上述した本体装置2とコントローラ3,4とが200Hzの周期でデータ通信しているとすると、コントローラ3,4のリニア振動モータには、最大200Hzの周期で振動データが入力される。したがって、リニア振動モータが設けられたコントローラ等のデバイスの通信を考慮して、例えば、その通信の最大の周期になるように第2周期を設定することができる。
【0097】
<2-3.受信部>
受信部812は、頻度上昇部811から第2周期で出力される偏心モータ駆動データを受信し、これを同じ第2周期で次に説明する振動データ生成部813に出力する。
【0098】
<2-4.振動データ生成部>
次に、振動データ生成部813について説明する。上記のように、リニア振動モータを駆動するためには、振幅を示すデータと周波数を示すデータとを含む振動データが必要である。以下、振動データ生成部813の機能、つまり、上記のように第2周期でサンプリングされた偏心モータ駆動データに基づいて、振幅を示すデータと周波数を示すデータの生成方法について説明する。
【0099】
<2-4-1.周波数を示すデータの設定>
上記のように、偏心モータとリニア振動モータとでは、振動しやすい周波数が相違する場合がある。そこで、振動データ生成部813では、リニア振動モータを筐体に組み込んだ状態で振動しやすい周波数を、モータの駆動周波数として設定することとする。このような駆動周波数としては、例えば、リニア振動モータの実質的な共振周波数とすることができる。実質的な共振周波数とは、共振周波数の近傍の周波数であり、例えば、共振周波数の70%~130%の範囲の周波数とすることができる。但し、駆動周波数を共振周波数と同一とすると、例えば、コントローラ3,4の筐体でびびり振動が生じる可能性があるため、共振周波数以外の上記範囲に設定してもよい。
【0100】
また、振動の周波数が常に一定であると、コントローラ3,4を把持するユーザが違和感を覚える可能性があるため、例えば、駆動周波数を上記範囲において変化させることもできる。例えば、共振周波数が170Hzである場合、駆動周波数を146~154Hzの間で、150Hzを中心として20Hzの周期で変化させることができる。但し、これは一例であり、駆動周波数の範囲、及び駆動周波数を変化させる周期は適宜変更可能である。以上のような駆動周波数を、次に説明する振幅を示すデータと組にして、所定の周期でリニア振動モータに入力すると、リニア振動モータを振動させることができる。
【0101】
<2-4-2.振幅を示すデータの設定>
偏心モータの振動をリニア振動モータで再現する場合、本実施形態におけるリニア振動モータの応答性の高さや共振周波数を考慮して、偏心モータの振動波形をリニア振動モータの振動波形そのものではなくその包絡線(ここでは、時間と振幅との関係を示す振動波形において、各波の振幅の頂点を、正側及び負側でそれぞれ結んだ線を示す)で再現することが考えられる。しかしながら、発明者が検討したところによると、偏心モータの振動波形を、リニア振動モータの包絡線で再現するよりも、偏心モータの振動波形の包絡線をリニア振動モータの包絡線で再現した方が、振動の体感としては、偏心モータの振動に近いことが分かった。すなわち、
図13に示すように、偏心モータの振動波形ではなく、この振動波形(第1波形)の包絡線(点線)をリニア振動モータの振動波形(第2波形)の包絡線によって再現する方が、より偏心モータの振動に近い体感が得られうるということである。なお、
図13のグラフでは、横軸は時間、縦軸は振幅を示しているが、単に2つのモータの振動波形を上下に並べたものであり、2つのモータの振幅の大小を比較したものではない。
【0102】
ここでいう偏心モータの振動波形の包絡線とは、以下のものが想定される。
(1)本実施形態のアプリケーションと同内容のゲームが実施されるアプリケーションを、偏心モータが搭載されたゲームシステムにおいて実行した場合に、その偏心モータが振動したときの包絡線。
(2)本実施形態に係るゲームシステムに、例えば、偏心モータが搭載されたコントローラを接続した場合に、その偏心モータが振動したときの包絡線。
【0103】
なお、上述した包絡線での「再現」とは、振幅や周波数が全く同一である必要はない。すなわち、振幅についてはリニア振動モータの性能によって出力可能な範囲は制限されるため、リニア振動モータの包絡線の振幅は偏心モータの振動波形の包絡線における振幅よりも小さくなる可能性がある。したがって、「再現」とは、偏心モータの包絡線の振幅の変化の傾向とリニア振動モータの包絡線の振幅の変化の傾向とを合わせる(相関させる)ことをいう。具体的には、偏心モータの包絡線を振幅方向に正規化したものを、アプリケーションで設定したリニア振動モータの振幅値に乗算することで、リニア振動モータ用の包絡線を生成することができる。なお、変化の傾向を合わせる手法はこれに限らない。また、変化の傾向(例えば増減)が全く同一でなくともよい。
【0104】
例えば、
図14に示すような偏心モータの振動を生成する場合、この包絡線を再現する包絡線をモデル化する。以下では、偏心モータ駆動データとして、1/0(ON/OFF信号)の二値情報が入力された場合のモデル化について説明する。
【0105】
上述したように、偏心モータは応答性が低い場合があるため、
図14に示すように、振動波形の包絡線は、ON信号が入力されると、時間の経過にしたがって、徐々に振幅が大きくなり、その後、OFF信号が入力されると、徐々に振幅が小さくなる。そこで、本発明者は、いくつかの振動の実測値を参照することで、包絡線のモデル化を行った。
【0106】
図15はモデル化された振幅の経時的な変化であり、これが偏心モータの振動波形の包絡線を再現したものである。また、
図16は、この包絡線を構成する振幅を算出するためのアルゴリズムの一例である。なお、ここでは説明の便宜のため、正側の振幅のみ示している。上記のように頻度上昇部811において200Hzでサンプリングされた偏心モータ駆動データの1/0(ON/OFF信号)の二値情報が受信部812から振動データ生成部813に入力される場合、二値情報は、5msec(1/200sec)毎に入力され、以下のように包絡線上の点を示す振幅値の算出が行われる(ステップS103)。以下では、この振幅値を仮想振幅値と称することとする。
【0107】
まず、この例では、仮想振幅値の最大値が13~14の間の所定値に設定されている。そして、
図16に示すアルゴリズムでは、ある時刻t0において、「1」が入力されたときには(isEnable)、現在の振幅(current)に0.93を乗じ、さらに1.0が加算された値(next)が次の時刻t1(tの5msec後)の振幅となる。一方、「0」が入力されたときには(else)、現在の振幅(current)に0.93を乗じた値(next)が次の時刻t1の振幅となる。このような演算を行うことで、
図15に示すように、「1(ON信号)」が入力されている間は、振幅が徐々に大きくなり、所定時間経過後には振幅がほぼ一定になる。そして、「0(またはOFF信号)」が入力されている間は、振幅が徐々に小さくなり、0に近づいていく。このように、
図16のアルゴリズムを用いると、偏心モータの振動波形の包絡線の変化の傾向に、その変化の傾向が相関する包絡線を生成することができる。その結果、例えば、
図15に示すような偏心モータの振動波形の包絡線に形状が近似や相似する包絡線を有する振動波形を生成することができる。
【0108】
但し、
図15及び
図16で示すモデル化のためのアルゴリズムは一例であり、例えば、0.93や1.0という数値や、上述した仮想振幅値の最大値は、振動の実測値に基づいてチューニングされた値である。したがって、これらの値は偏心モータやリニア振動モータの種類や構造に応じて調整することができる。また、そもそも、包絡線に沿うような振幅の計算方法は、
図15及び
図16に限られず、「1(ON信号)」が入力されているときに、振幅が徐々に大きくなり、「0(OFF信号)」が入力されているときに、振幅が徐々に小さくなるように構成されていればよい。したがって、
図15及び
図16の例では、「1」が所定時間入力されたときに振幅が所定の値に収束するようになっているが、このように収束せず、例えば、変化し続けるようにしてもよい。
【0109】
以上のような
図16のアルゴリズムを用いると、例えば、
図17~
図19のような包絡線も生成することができる。
図17の例では、「1(ON信号)」が所定時間入力された後、「0(OFF信号)」が所定時間入力されている(例えば、「111・・・111000000」)。これにより、振幅が徐々に大きくなった後、振幅が所定の値に収束して概ね一定となり、その後、振幅が徐々に小さくなるような、偏心モータ特有の応答性の低い包絡線が再現されている。
【0110】
図18の例では、「1」と「0」とが交互に入力されている。これにより、最大振幅の約50%で振幅が推移するような包絡線が再現されている。すなわち、偏心モータの応答性の低さがよく再現できている。偏心モータでは、1が入力されてもすぐに振幅は最大値にはならずに徐々に上昇し、反対にOが入力されてもすぐには振幅は0にはならず,徐々に低下する。したがって、1と0の入力が繰り返されると、最大振幅の約50%の振幅が続くように振動する。
【0111】
図19の例では、最初に所定回数「1」が入力された後、所定回数「0」が続き、「0」の入力の所定回数毎に「1」が1回入力されている(例えば、「1111000000100000010000001000000」)。最初に所定回数「1」が入力されることにより、振幅は徐々に上昇するが、「0」が所定回数続くことで、振幅は徐々に低下している。但し、振幅の低下の途中で、所定時間おきに「1」が入力されるため、その度に振幅が上昇している。この包絡線も、偏心モータの応答性の低さをよく再現できている。
【0112】
なお、以上の例は、上述した偏心モータのAPIの振動値の設定が(1)である場合に相当する。その他の(3)については、2値情報と同等であるので、(1)と同様に処理することができる。一方、(2)が設定値である場合、つまり、振動値が0.0~1.0のように所定の範囲の数値が指定される場合には、例えば、
図20に示すようなアルゴリズムを用いることができる。この場合、valueには、入力された0.0~1.0の間の数値が入力される。
【0113】
次に、5msec毎に算出された仮想振幅値を0~1の値に正規化する(ステップS104)。例えば、仮想振幅値を、その最大値(上記の例では、13~14の間の所定値)で除すると、仮想振幅値が0~1の値に正規化され、リニア振動モータを制御するための振幅値のデータとして使用可能となる。
【0114】
次に、必要に応じて正規化された振幅値の調整を行ってもよい(ステップS105)。例えば、算出された振幅値をx乗する調整を行う。x=2の場合、正規化された振幅値が0.5であれば、調整後の振幅値は0.25となる。したがって、調整前の振幅値が大きければ、2乗することで小さい振幅値がさらに小さくなり、大きい振幅値がさらに大きくなる。すなわち、この調整により、強い振動と弱い振動との区別をはっきりさせることができる。
【0115】
これに続いて、調整が行われた振幅値が、コントローラ3、4に設けられたリニア振動モータへ入力され、リニア振動モータを振動させる(ステップS106)。こうして、偏心モータ駆動データの二値情報の処理が、アプリケーションからの出力が終了するまで、5msec毎に行われる(ステップS107のNO)。
【0116】
以上の説明では、包絡線の正側の生成について説明したが、同様に負側も生成する。結果として、
図21に示すような偏心モータの振動波形を模した包絡線が生成された上で、上述した駆動周波数で、この包絡線を有するような振動波形を示す振動データが生成され、これによってリニア振動モータが駆動される。
【0117】
<3.特徴>
以上のように、本実施形態によれば、偏心モータ駆動データに含まれる二値情報等に基づいて、周波数を示すデータと振幅を示すデータとが含まれた振動データが生成され、これによってリニア振動モータの振動が行われる。したがって、偏心モータ型振動デバイスを振動させるための駆動データに基づいて、振動データを生成することができるため、リニア振動モータ用の振動データを一から作成する必要がなく、その結果、アプリケーション製作者の負荷を軽減できる。
【0118】
<4.変形例>
以上、本発明の実施形態について説明したが、本発明は上記各実施形態に限定されるものではなく、その趣旨を逸脱しない限りにおいて、種々の変更が可能である。例えば、以下の変更が可能である。また、以下の変形例は、適宜組み合わせることができる。
【0119】
(1)上記実施形態では、偏心モータ駆動データを処理する際に頻度上昇部において、データの更新周期を高い周期で処理したが、頻度上昇部は必須の構成ではなく、偏心モータ駆動データを受信部で直接受信した後、これを、例えば、同じ周期、あるいは所定の周期で振動データ生成部に出力することができる。
【0120】
(2)上記ゲームシステムのハードウエア構成は一例であり、少なくとも、振動デバイスとしてリニア振動モータが設けられ、上記のような制御を行うことができるコンピュータが搭載されていればよい。したがって、上記のように本体装置2とコントローラ3,4とが分離可能なシステムでもよいし、これらが一体化したゲームシステムであってもよい。また、ゲームプログラムは、無線でゲームシステムに送信されてもよい。
【0121】
(3)上記実施形態では、生成されるリニア振動モータ用の振動データは、周波数を示す値および振幅を示す値の組についてのデータであるが、振動信号(振動波形)そのものを振動データとすることもできる。
【0122】
(4)上記実施形態では、ゲームシステムに、リニア振動モータを設けているが、偏心モータを設け、これを振動させることもできる。これにより、リニア振動モータ用の振動データを生成することなく、偏心モータ用駆動データを用いて偏心モータを振動させることができる。
【0123】
(5)上記実施形態では、
図1~
図7に示すゲームシステム用の振動データを生成した例を示したが、このゲームシステムに対して、付属のコントローラ以外の各種コントローラを用いてゲームが行われることもある。コントローラとしては、例えば、片手で使用されるもの、両手で使用されるもの、複数の振動デバイスが設けられたものなどがあり、コントローラの種類に応じた振動が要求される場合がある。このような場合を考慮して、振動データ生成部813では、コントローラの特性に応じた振動データの補正を行うことができ、このような補正を行った後の振動データを各種コントローラに送信することができる。
【0124】
なお、このような補正を含めた上述した頻度上昇部811、受信部812、及び振動データ生成部813の処理は、ゲームシステム1の本体装置2及びコントローラ3,4等のいずれで行われてもよい。また、これらの処理を行うためのプログラムを、ゲームプログラムとともに、外部記憶媒体に記憶してもよい。また、ゲームプログラムも、外部記憶媒体ではなく、ゲームシステム1の内部記憶媒体に記憶されていてもよい。あるいは、上記処理のためのプログラム及びゲームプログラムを、接続可能なネットワーク上のサーバに記憶してもよい。
【0125】
(6)上記実施形態では、実際に振動させる対象となるモータをリニア振動モータとしているが、これに限定されるものではなく、圧電素子またはボイスコイルを用いた振動デバイスに対しても適用することができる。
【0126】
(7)本開示に係る振動制御システムは、ゲームシステムに限られず、上述したような振動デバイスと上記の処理が可能なコンピュータが搭載されたシステム全般に適用することができる。
【符号の説明】
【0127】
1 ゲームシステム(振動制御システム)
107 振動デバイス
117 振動デバイス
811 頻度上昇部
812 受信部
813 振動データ生成部