(57)【要約】【課題】新規なゲームコントローラを提供する。【解決手段】本発明によるゲームコントローラは、ユーザにより把持される右側把持部２１２ａ、左側把持部２１２ｂと、ユーザにより把持部を把持された状態でユーザに操作入力を行わせるために筐体背面に設けられた下側操作ボタン２３０ａ、２３０ｂと、下側操作ボタンを介して入力された操作入力をゲーム装置に伝送する伝送部とを備える。下側操作ボタン２３０ａ、２３０ｂは、回動可能に構成されて、そのボタン表面に突起部２４０ａ、２４０ｂが設けられる。【選択図】図１５
2007289529.tif 000002
【特許請求の範囲】
【請求項１】
ユーザによる操作入力をゲーム装置に伝送するゲームコントローラであって、
ユーザにより把持される把持部と、
ユーザにより前記把持部を把持された状態でユーザに操作入力を行わせるために筐体背面に設けられた入力ボタンと、
前記入力ボタンを介して入力された操作入力をゲーム装置に伝送する伝送部と、を備え、
前記入力ボタンは、回動可能に構成されて、その入力ボタン表面に突起部が設けられることを特徴とするゲームコントローラ。
【請求項２】
前記入力ボタンが回動して筐体内に収容される際に、前記突起部は筐体の外表面に接触して回動動作を制限することを特徴とする請求項１に記載のゲームコントローラ。
【請求項３】
前記入力ボタンは、前記筐体背面において長手方向の左右対称な位置にそれぞれ設けられることを特徴とする請求項１または２に記載のゲームコントローラ。
【請求項４】
前記入力ボタンは、前記筐体背面の長手方向に実質的に平行に設けられた回転軸により回動可能に支持され、前記突起部は、前記回転軸よりも筐体裏面側に配置されることを特徴とする請求項１から３のいずれかに記載のゲームコントローラ。
【請求項５】
前記入力ボタンは、前記筐体背面の長手方向に実質的に垂直に設けられた回転軸により回動可能に支持され、前記突起部は、前記回転軸よりも筐体側面側に配置されることを特徴とする請求項１から３のいずれかに記載のゲームコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲーム操作に用いられるゲームコントローラに関する。
【背景技術】
【０００２】
ゲーム機と、ユーザにより操作されるゲーム機用のコントローラはケーブルにより接続されるのが一般的であったが、近年、ゲーム機とコントローラとを無線接続するゲームシステムが提案されるようになった。無線コントローラを採用することにより、ユーザは比較的自由な姿勢でゲームを楽しむことができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
近年の技術進歩により、ゲームシステムのハードウェアスペックが飛躍的に向上している。これにより、ゲームコントローラからの操作入力を多様な形態でリアルタイムで処理することが可能となり、今後は様々な種類のゲームアプリケーションの開発が予測される。このような事情のもと、ユーザに操作入力を容易に行わせることができるゲームコントローラの開発が切望されている。
【０００４】
そこで本発明は、新規なゲームコントローラを提供することを目的とする。また、そのようなゲームコントローラを用いて実現される新たなアプリケーションを提供することも目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明のある態様のゲームコントローラは、ユーザによる操作入力をゲーム装置に伝送するゲームコントローラであって、ユーザにより把持される把持部と、ユーザにより把持部を把持された状態でユーザに操作入力を行わせるために筐体背面に設けられた入力ボタンと、入力ボタンを介して入力された操作入力をゲーム装置に伝送する伝送部とを備える。入力ボタンは、回動可能に構成されて、その入力ボタン表面に突起部が設けられる。
【発明の効果】
【０００６】
本発明によると、新規なゲームコントローラを提供することができる。また、そのようなゲームコントローラを用いて実現される新たなアプリケーションを提供することができる。
【発明を実施するための最良の形態】
【０００７】
（実施例１）
図１は、本発明の実施例にかかるゲームシステムの使用環境を示す。ゲームシステム１は、撮像装置２、画像表示装置３、音声出力装置４、ゲーム装置１０およびコントローラ２０を備える。撮像装置２、画像表示装置３、音声出力装置４およびコントローラ２０は、ゲーム装置１０に接続される。
【０００８】
コントローラ２０は、ユーザが操作入力を行うための操作入力装置であり、またゲーム装置１０は、コントローラ２０における操作入力をもとにゲームアプリケーションを処理して、ゲームアプリケーションの処理結果を示す画像信号を生成する処理装置である。なお、本実施例に示す技術は、ゲームアプリケーションに限らず、他の種類のアプリケーションを実行する処理装置を備えたエンタテインメントシステムにおいても実現できる。以下では、エンタテインメントシステムを代表して、ゲームアプリケーションを実行するゲームシステム１について説明する。
【０００９】
撮像装置２は、ＣＣＤ撮像素子またはＣＭＯＳ撮像素子などから構成されるビデオカメラであり、実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。たとえば、撮像装置２の撮像速度は３０枚／秒として、画像表示装置３のフレームレートと一致させてもよい。撮像装置２は、ＵＳＢ（Universal Serial Bus）あるいはその他のインタフェースを介してゲーム装置１０と接続する。
【００１０】
画像表示装置３は画像信号を出力するディスプレイであって、ゲーム装置１０において生成された画像信号を受けて、ゲーム画面を表示する。音声出力装置４は音声を出力するスピーカであって、ゲーム装置１０において生成された音声信号を受けて、ゲーム音声を出力する。画像表示装置３および音声出力装置４は、ゲームシステム１における出力装置を構成する。
【００１１】
ゲーム装置１０と画像表示装置３は、有線により接続されてもよく、また無線により接続されてもよい。ゲーム装置１０と画像表示装置３とはＡＶケーブルによって接続されてもよい。またゲーム装置１０と画像表示装置３との間には、ネットワーク（ＬＡＮ）ケーブルやワイヤレスＬＡＮなどで構築したホームネットワークが構築されてもよい。
【００１２】
コントローラ２０は、ユーザによる操作入力をゲーム装置１０に伝送する機能をもち、本実施例ではゲーム装置１０との間で無線通信可能な無線コントローラとして構成される。コントローラ２０とゲーム装置１０は、Bluetooth（ブルートゥース）（登録商標）プロトコルを用いて無線接続を確立してもよい。ゲーム装置１０は、複数のコントローラ２０との無線接続を可能とし、すなわちゲームシステム１においては、ゲーム装置１０とコントローラ２０の１対Ｎ接続を実現できる。ゲーム装置１０は親機すなわちマスタとして機能し、コントローラ２０は子機すなわちスレーブとして機能する。なおコントローラ２０は、無線コントローラに限らず、ゲーム装置１０とケーブルを介して接続される有線コントローラであってもよい。
【００１３】
コントローラ２０は、図示しないバッテリにより駆動され、ゲームを進行させる操作入力を行うための複数のボタンやキーを有して構成される。ユーザがコントローラ２０のボタンやキーを操作すると、その操作入力が無線によりゲーム装置１０に送信される。ゲーム装置１０は、コントローラ２０からゲームアプリケーションに関する操作入力を受信し、操作入力に応じてゲーム進行を制御して、ゲーム画像信号およびゲーム音声信号を生成する。生成されたゲーム画像信号およびゲーム音声信号は、それぞれ画像表示装置３および音声出力装置４により出力される。またゲーム装置１０は、ゲームアプリケーションの進行状況に応じて、コントローラ２０を振動させる振動制御信号をコントローラ２０に送信する機能ももつ。コントローラ２０は振動子を有し、振動制御信号を受信すると振動子を振動させる。
【００１４】
本実施例のゲームシステム１において、コントローラ２０は、複数の発光素子を有して構成される。複数の発光素子はそれぞれ同色のＬＥＤであって、ゲームアプリケーションで設定されるコントローラ番号を表現するインジケータとしての役割をもつ。ゲームアプリケーションにおけるコントローラ番号は、たとえばゲーム開始時にゲームキャラクタを選択する際などにユーザに利用されるため、ユーザに何らかの手段でコントローラ番号を通知する必要がある。そのためコントローラ２０では、複数のＬＥＤのうち、たとえば１番目のＬＥＤが点灯していればコントローラ番号が１であり、また２番目のＬＥＤが点灯していればコントローラ番号が２であるとしてユーザにコントローラ番号を知らしめる。なお、複数のＬＥＤの組合わせによりコントローラ番号を表現することも可能である。
【００１５】
コントローラ２０が有線コントローラである場合には、コントローラ２０から延びるケーブルコネクタをゲーム装置１０のポートに差し込んだ位置でコントローラ番号を決定することも可能である。しかしながら、複数のポートを備えたマルチポート装置をゲーム装置１０に外付けして使用するような場合には、ユーザはすぐにコントローラ番号を知ることはできないため、複数のＬＥＤを用いてユーザにコントローラ番号を通知することが好ましい。
【００１６】
ゲームシステム１においては、コントローラ２０のＬＥＤを、コントローラ番号のインジケータとしてだけではなく、ゲームアプリケーションの進行に影響を与えるゲーム入力としても利用する。この場合、ＬＥＤの制御は、インジケータとして点灯するのではなく、ゲームアプリケーションへの入力としての点灯に切り替えられる。撮像装置２はコントローラ２０のＬＥＤを撮像し、フレーム画像を生成してゲーム装置１０に供給する。ゲーム装置１０は、フレーム画像を取得して、フレーム画像におけるＬＥＤ画像の位置からコントローラ２０のフレーム画像中の位置や姿勢を推定して取得し、取得した位置情報および／または姿勢情報をゲームアプリケーションの処理に反映する。すなわち、本実施例のゲーム装置１０は、コントローラ２０において入力された操作入力だけでなく、取得したコントローラ２０の位置情報や姿勢情報も用いてゲームアプリケーションを処理して、その処理結果を示す画像信号を生成する機能をもつ。
【００１７】
図２は、コントローラの外観構成を示す。コントローラ２０には、方向キー２１、アナログスティック２７と、４種の操作ボタン２６が設けられている。方向キー２１、アナログスティック２７、操作ボタン２６は、筐体上面３０に設けられた入力部である。４種のボタン２２〜２５には、それぞれを区別するために、異なる色で異なる図形が記されている。すなわち、○ボタン２２には赤色の丸、×ボタン２３には青色のバツ、□ボタン２４には紫色の四角形、△ボタン２５には緑色の三角形が記されている。コントローラ２０の筐体背面２９には、複数のＬＥＤが設けられている。
【００１８】
ユーザは左手で左側把持部２８ａを把持し、右手で右側把持部２８ｂを把持して、コントローラ２０を操作する。方向キー２１、アナログスティック２７、操作ボタン２６は、ユーザが左側把持部２８ａ、右側把持部２８ｂを把持した状態で操作可能なように、筐体上面３０上に設けられる。
【００１９】
筐体上面３０には、ＬＥＤ付きボタン３１も設けられる。ＬＥＤ付きボタン３１は、たとえば画像表示装置３にメニュー画面を表示させるためのボタンとして利用される。また、ＬＥＤの発光状態によりユーザへのメールの着信の知らせや、コントローラ２０のバッテリの充電状態などを示す機能ももつ。たとえば充電中は赤色、充電が終了すると緑色に点灯し、充電残存量が残り少ないときには赤色を点滅させるようにＬＥＤを点灯させる。
【００２０】
ユーザは画像表示装置３に表示されるゲーム画面を見ながらゲームを行うため、画像表示装置３は、矢印Ａで示すコントローラ２０の前方に存在している。そのため、通常は、画像表示装置３に対して、ＬＥＤを配置された筐体背面２９が向き合うことになる。本実施例において撮像装置２は、ゲームアプリケーションの実行中にＬＥＤを撮像する必要があるため、その撮像範囲が画像表示装置３と同じ方向を向くように配置されて、コントローラ２０の筐体背面２９と向き合うことが好ましい。一般にユーザは画像表示装置３の正面でゲームをプレイすることが多いため、撮像装置２は、その光軸の方向が画像表示装置３の正面方向と一致するように配置される。具体的に、撮像装置２は、画像表示装置３の近傍において、画像表示装置３の表示画面をユーザが視認可能な位置を撮像範囲に含むように配置されることが好ましい。これにより、撮像装置２は、ユーザの身体およびコントローラ２０を撮像できる。
【００２１】
図３は、コントローラの背面側の外観構成を示す。図３では、コントローラ２０の筐体上面３０における方向キー２１や操作ボタン２６などの図示を省略している。筐体背面２９にはＬＥＤ配設領域４２が設けられ、ＬＥＤ配設領域４２内に第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄが配置される。以下、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄを総称する場合には、「ＬＥＤ４０」と表記する。ＬＥＤ配設領域４２は、筐体背面２９における中央領域に形成される。ＬＥＤ配設領域４２の中央部には、ＵＳＢコネクタ４６が設けられる。ＵＳＢコネクタ４６には、ゲーム装置１０から延びるＵＳＢケーブルが接続されて、コントローラ２０の充電処理を行うことができる。なおＵＳＢケーブルが接続されると、コントローラ２０を有線コントローラとして利用することも可能である。
【００２２】
筐体背面２９側には、操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄがＬＥＤ配設領域４２を挟んで左右に設けられる。操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄは、ユーザが左側把持部２８ａ、右側把持部２８ｂを把持した状態でも人差指の先端で操作可能な位置に設けられる。これにより、操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄの操作時に、ＬＥＤ４０は人差指によって隠れない。
【００２３】
ＬＥＤ４０は、コントローラ番号を表現するインジケータとして利用されるが、コントローラ２０を使用しているユーザからすると、一度確認できれば十分であって、常に見える筐体上面３０に配置することは好ましくない。一方、他のユーザが存在する場合には、ＬＥＤ４０を筐体背面２９に配置することで、他のユーザから見えやすくなるという利点がある。また筐体上面３０にはＬＥＤ付きボタン３１が存在するため、ＬＥＤ４０を配置するとユーザが区別しづらくなる。そのため、コントローラ２０は、ＬＥＤ４０を筐体背面２９に配置して構成される。
【００２４】
撮像装置２は、各画素におけるＲＧＢの輝度値を取得する。発光したＬＥＤ４０を正確に検出するためには、ＬＥＤ４０とＬＥＤ４０周辺の領域とのコントラストが大きいことが好ましい。そのためＬＥＤ配設領域４２は、その隣接する筐体色よりも明度の低い色をもち、たとえば黒色の配色を施される。ＬＥＤ配設領域４２は、黒色の半透明板として構成され、ＬＥＤ４０は、その背後すなわち筐体内部側に設けられる。これにより、ＬＥＤ４０は点灯していなければ撮像装置２からは見えず、点灯したときのみ撮像される。黒色半透明板は、光を拡散してＬＥＤ４０の狭指向性を広指向性に変える役割ももつ。ＬＥＤ４０をＬＥＤ配設領域４２に設けることで、発光したＬＥＤ４０とのコントラストを高めることができ、後の画像処理において、フレーム画像からＬＥＤ画像を効果的に抽出することが可能となる。
【００２５】
第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄは、所定の２次元パターンで配設される。たとえば第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄは、矩形の頂点を構成する位置に配設される。ゲーム装置１０は、この位置関係を予め把握しており、ＬＥＤ画像の抽出処理に利用する。なお各ＬＥＤ４０の近傍には、数字が刻印または印刷されており、ユーザは点灯したＬＥＤ４０の近傍の数字をみて、コントローラ番号を知ることができる。
【００２６】
図４は、コントローラの内部構成を示す。コントローラ２０は、無線通信モジュール５８、処理部６０、ＬＥＤ４０および振動子４４を備える。無線通信モジュール５８は、ゲーム装置１０の無線通信モジュールとの間でデータを送受信する機能をもつ。処理部６０は、コントローラ２０における所期の処理を実行する。
【００２７】
処理部６０は、メイン制御部５０、入力受付部５２、ＰＷＭ制御部５４および駆動部５６を有する。メイン制御部５０は、無線通信モジュール５８との間で必要なデータの送受を行う。
【００２８】
入力受付部５２は、方向キー２１、操作ボタン２６、アナログスティック２７などの入力部からの入力情報を受け付け、メイン制御部５０に送る。メイン制御部５０は、受け取った入力情報を無線通信モジュール５８に供給し、無線通信モジュール５８は、所定のタイミングでゲーム装置１０に送信する。また、無線通信モジュール５８はゲーム装置１０から振動制御信号を受け取ると、メイン制御部５０に供給し、メイン制御部５０は、振動制御信号をもとに振動子４４を振動させる駆動部５６を動作させる。駆動部５６は、振動子４４を駆動するためのスイッチとして構成されてもよく、また供給電圧のデューティ比を可変とするＰＷＭ制御部として構成されてもよい。
【００２９】
本実施例において、ＰＷＭ制御部５４は、第１ＰＷＭ制御部５４ａ、第２ＰＷＭ制御部５４ｂ、第３ＰＷＭ制御部５４ｃおよび第４ＰＷＭ制御部５４ｄから構成される。第１ＰＷＭ制御部５４ａ、第２ＰＷＭ制御部５４ｂ、第３ＰＷＭ制御部５４ｃおよび第４ＰＷＭ制御部５４ｄは、それぞれ第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄの点灯を制御するために設けられる。ＰＷＭ制御部５４は、ＬＥＤ４０に印加する電圧をＰＷＭ（パルス幅変調）により制御する。たとえば、ＰＷＭ制御部５４は、数ｋＨｚの高周波で印加電圧をＰＷＭ制御することで、ＬＥＤ４０の輝度を調整することができる。またＰＷＭ制御部５４は、数Ｈｚ〜１００Ｈｚ程度の低周波で印加電圧をＰＷＭ制御することで、撮像装置２においてＬＥＤ４０の点灯のオンオフを認識させることができる。
【００３０】
本実施例のゲームシステム１において、まず、ゲームシステム１に参加を希望するユーザのコントローラ２０が、ゲーム装置１０との間で通信を確立する。このとき、コントローラ２０の識別情報、たとえばブルートゥースアドレスがゲーム装置１０に受け渡され、以後の通信は、このブルートゥースアドレスをもとに行われる。なお、通信プロトコルとしてブルートゥースを利用しない場合には、ＭＡＣアドレスなどの機器アドレスが利用されてもよい。接続確立後、ユーザはゲームアプリケーションに参加できる。
【００３１】
このときコントローラ２０には、ゲーム装置１０からコントローラ番号を指示する情報が送信される。メイン制御部５０は、この番号指示情報をもとに、設定されたコントローラ番号に対応するＬＥＤ４０のみを点灯させる。これによりユーザは、自身のコントローラ２０のコントローラ番号を知ることができる。なお、番号指示情報の代わりに、コントローラ番号に対応するＬＥＤ４０の点灯を指示する制御信号がゲーム装置１０から送信されてもよい。このようにメイン制御部５０は、任意のＬＥＤ４０を点灯させることができる。
【００３２】
本実施例のゲームシステム１において、ゲーム装置１０は、全てのＬＥＤ４０ａ〜４０ｄを点灯した状態で撮像されたフレーム画像をもとに、コントローラ２０の位置および姿勢を推定する。推定した位置および姿勢は、実行するゲームアプリケーションの入力として利用される。またゲーム装置１０は、コントローラ２０の方向キー２１や操作ボタン２６などの操作入力も受け付ける。これらの入力情報をもとに、ゲーム装置１０は、ゲームアプリケーションのゲームパラメータを生成し、ゲームを進行制御して、ゲーム画像およびゲーム音声のＡＶデータを生成する。ＡＶデータは、画像表示装置３および音声出力装置４において出力される。ユーザは、ゲーム画面を見ながら、コントローラ２０を実空間上で動かし、さらには方向キー２１や操作ボタン２６を操作入力してゲームを行う。以下に、ゲーム装置１０における処理を説明する。
【００３３】
図５は、ゲーム装置の構成を示す。ゲーム装置１０は、入力部１００、画像処理部１０２、位置推定部１０４、点滅指示部１０６、無線通信モジュール１０８、アプリケーション処理部１１０および出力部１１２を備える。本実施例におけるゲーム装置１０の処理機能は、ＣＰＵ、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、ゲーム装置１０に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、ゲーム装置１０のＣＰＵが、画像処理部１０２、位置推定部１０４、点滅指示部１０６、アプリケーション処理部１１０としての機能をもつ。なお、ハードウェアの構成上、ゲーム装置１０は複数のＣＰＵを有してもよい。このような場合、１つのＣＰＵがゲームアプリケーションを実行するアプリケーション処理部１１０として機能し、他のＣＰＵが、撮像装置２による撮影画像を処理する画像処理部１０２、位置推定部１０４、点滅指示部１０６として機能してもよい。
【００３４】
無線通信モジュール１０８は、コントローラ２０の無線通信モジュール５８との間で無線通信を確立する。同期確立フェーズにおいては、無線通信モジュール１０８が、周辺のコントローラ２０を含む端末機器に対して接続照会すなわち「問い合わせ」処理を行う。具体的には、無線通信モジュール１０８が、近くにいる端末機器に対してＩＱ（問い合わせ）パケットをブロードキャストする。ＩＱパケットを受信したコントローラ２０の無線通信モジュール５８は、BluetoothアドレスとBluetoothクロック情報を含むＦＨＳ（Frequency Hop Synchronization）パケットをゲーム装置１０に返信する。この時点における送受信では、周波数ホッピングパターンに関する同意がゲーム装置１０とコントローラ２０との間で確立していないので、問い合わせ専用に定義された固定ホッピングパターンが用いられる。
【００３５】
無線通信モジュール１０８は、コントローラ２０からＦＨＳパケットを受け取り、どのようなコントローラ２０が存在するかを把握した後、特定のコントローラ２０に対してＩＤパケットを送信する。これは無線通信モジュール１０８による「呼び出し」処理である。特定のコントローラ２０からＩＤパケットに対する応答が返ると、無線通信モジュール１０８はＦＨＳパケットをコントローラ２０に送信し、自分のアドレスとクロックをコントローラ２０に知らせる。これにより、ゲーム装置１０とコントローラ２０は、同一のホッピングパターンを共有できるようになる。
【００３６】
「呼び出し」を行うと、コントローラ２０とゲーム装置１０との間にピコネットが形成され、「接続」状態に入る。ピコネットとは、Bluetooth端末同士を近づけたときに、端末の間で一時的に形成されるネットワークを意味し、最大で８台のBluetooth端末が１つのピコネットに参加することができる。接続したコントローラ２０は、無線通信モジュール１０８からスレーブ識別子、つまり接続中のコントローラ２０に与えられる３ビットのアドレス（１〜７）を割り振られる。このスレーブ識別子は、AM_ADDR（アクティブメンバーアドレス）と呼ばれる。「接続」状態になると、通信リンク設定のための制御パケットが送受信され、これにより「データ転送」が可能となる。
【００３７】
接続状態になり、コントローラ２０がゲームアプリケーションに参加すると、アプリケーション処理部１１０は、コントローラ２０のコントローラ番号を割り当て、コントローラ番号を指示する番号指示情報を生成する。無線通信モジュール１０８は、番号指示情報をコントローラ２０に送信する。コントローラ２０は、番号指示情報を受信すると、対応するＬＥＤ４０を点灯させる。なお、無線通信モジュール１０８は、番号指示情報の代わりに、コントローラ番号に対応するＬＥＤ４０の点灯を指示する制御信号をコントローラ２０に送信してもよい。
【００３８】
ゲームアプリケーションが開始されると、点滅指示部１０６は、コントローラ２０に対して所定の周期で点滅するように点滅パターンを指示する制御信号を生成する。この点滅制御信号は、無線通信モジュール１０８からコントローラ２０に送信される。
【００３９】
入力部１００はＵＳＢインタフェースとして構成され、撮像装置２から所定の撮像速度（たとえば３０フレーム／秒）でフレーム画像を取得する。画像処理部１０２は、後述するＬＥＤ抽出アルゴリズムにしたがって、フレーム画像からＬＥＤ画像を抽出する。位置推定部１０４は、抽出されたＬＥＤ画像からＬＥＤ画像の位置情報を取得し、コントローラ２０の位置や姿勢を推定する。位置推定部１０４は、ＬＥＤ画像の位置情報を取得することから、位置取得部として機能してもよい。なおコントローラ２０の位置は、４つのＬＥＤ画像の重心位置に定められてよい。
【００４０】
点灯する４つのＬＥＤ４０の位置や姿勢から推定されるコントローラ２０の位置情報および／または姿勢情報は、ゲームアプリケーションの入力として利用される。そのため位置推定部１０４で推定されたコントローラ２０の位置情報および姿勢情報は、アプリケーション処理部１１０に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部１１０には、ユーザがコントローラ２０の方向キー２１などを操作した入力も無線通信モジュール１０８を介して送信される。アプリケーション処理部１１０は、コントローラ２０の位置・姿勢情報と、コントローラ２０における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。画像信号および音声信号は出力部１１２からそれぞれ画像表示装置３および音声出力装置４に送られ、出力される。
【００４１】
図６は、画像処理部の構成を示す。画像処理部１０２は、フレーム画像取得部１３０、現フレームバッファ１３２、前フレームバッファ１３４、差分画像生成部１３６、２値化画像生成部１３８、論理演算部１４０およびＬＥＤ画像抽出部１４２を備える。
【００４２】
フレーム画像取得部１３０は、入力部１００からフレーム画像データを取得し、現フレームバッファ１３２に一時記憶させる。前フレームバッファ１３４には、一つ前のフレーム画像データが記憶されている。差分画像生成部１３６は、現フレームバッファ１３２に記憶されている現フレームデータと、前フレームバッファ１３４に記憶されている前フレームデータとの差分画像を生成する。フレーム画像中の座標（ｘ，ｙ）における前フレームデータのＲ画素値をＰｒ、Ｇ画素値をＰｇ、Ｂ画素値をＰｂとし、現フレームデータのＲ画素値をＣｒ、Ｇ画素値をＣｇ、Ｂ画素値をＣｂとしたとき、差分画像関数Ｆ（ｘ，ｙ）は、以下の数式で表現される。
【００４３】
【数１】
2007289529.tif 000003
【００４４】
ここでＴｈは、所定の閾値である。Ｆ（ｘ，ｙ）が０より大きければ、座標（ｘ，ｙ）の画素値が“１”に符号化され、表示上、その画素は白色とされる。一方、Ｆ（ｘ，ｙ）が０以下であれば、画素値が“０”に符号化され、表示上、その画素は黒色とされる。このように差分画像生成部１３６で生成される差分画像は、２値化処理された画像となる。差分画像を生成することで、前フレーム画像と現フレーム画像との間で動きのないオブジェクトの影響を取り除くことができる。
【００４５】
２値化画像生成部１３８は、現フレームデータを所定の閾値を用いて２値化処理して、２値化された画像を生成する。２値化画像生成部１３８は、所定の閾値より大きい輝度を保持する画素の画素値を“１”に符号化し、所定の閾値以下の輝度を保持する画素の画素値を“０”に符号化する。現フレーム画像の２値化画像を生成することで、現フレーム画像において明るいオブジェクトのみを抽出することができる。
【００４６】
論理演算部１４０は、差分画像生成部１３６で生成された差分画像と、２値化画像生成部１３８で生成された２値化画像とを論理演算した論理演算画像を生成する。詳細には、論理演算部１４０は、画素ごとに、差分画像の画素値と２値化画像の画素値との論理積演算を行うことで、論理積画像を生成する。これは、差分画像と２値化画像の対応する画素同士の画素値を数学的に論理積演算することで生成される。
【００４７】
図７（ａ）は、現フレーム画像を示す。現フレーム画像では、ユーザがコントローラ２０を把持してゲームをプレイし、右側には照明が点灯している状態が撮像されている。このときコントローラ２０の全ＬＥＤ４０が点灯している。なお、全てのＬＥＤ４０は、同一の点灯パターンにより、同一輝度で発光している。
図７（ｂ）は、現フレーム画像と前フレーム画像の差分画像を示す。前フレーム画像の位置からコントローラ２０を動かすと、数式（１）により差分画像が生成される。この例では、コントローラ２０や、コントローラ２０と一緒に動く体の少なくとも一部の領域が、白色画像（画素値が“１”になる）として取得される。なお、常にこのような白色画像が取得されるわけではなく、図７（ｂ）は、あくまでも数式（１）を満足したときに生成される差分画像の一例である。このとき、照明は動かないため、差分画像には含まれない。なお、ユーザがコントローラ２０を動かさなければ、コントローラ２０の白色画像は取得されない。
【００４８】
図８（ａ）は、現フレーム画像の２値化画像を示す。２値化画像では、図７（ａ）における高輝度領域、すなわち発光しているＬＥＤと、照明のランプとが２値化されて白色画像に変換される。他のノイズを防ぐために、２値化処理する際に設定する閾値は、ＬＥＤの発光輝度から所定のマージン値を減じた輝度値に設定されていることが好ましい。
図８（ｂ）は、論理積画像を示す。論理積画像は、図７（ｂ）に示す差分画像と、図８（ａ）に示す２値化画像との論理積演算を行う。差分画像および２値化画像において、白色画素の画素値は“１”であり、黒色画素の画素値は“０”である。したがって、両方の画像において白色画素として存在している画素のみが、論理積画像において白色画素として生成されることになる。
【００４９】
このように差分画像と２値化画像の論理積をとることで、ＬＥＤ画像を抽出しやすい論理積画像を生成できる。論理積画像は、ＬＥＤ画像抽出部１４２に送られる。
【００５０】
論理積画像が生成されると、前フレームバッファ１３４に保持されている前フレームデータは、現フレームバッファ１３２に保持されている現フレームデータにより上書きされる。この上書き処理は、前フレームバッファ１３４が差分画像生成部１３６に読み出された直後に行われてもよい。その後、現フレームバッファ１３２に保持されている現フレームデータは、次のフレームデータにより上書きされて、次のフレームにおける論理積画像の生成処理を実行する。
【００５１】
ＬＥＤ画像抽出部１４２は、論理積画像からＬＥＤ画像を抽出する。ＬＥＤ画像を抽出するためには、まず、ＬＥＤ画像の候補を検出する。続いて、任意の候補を第１ＬＥＤ４０ａと仮定し、その周辺領域を探索して、第２ＬＥＤ４０ｂとなりうるＬＥＤ画像候補があるか調査する。第２ＬＥＤ４０ｂが見つかれば、また第１ＬＥＤ４０ａの周辺領域を探索して、第３ＬＥＤ４０ｃとなりうるＬＥＤ画像候補があるか調査する。第３ＬＥＤ４０ｃが見つかれば、その周辺領域を探索して、第４ＬＥＤ４０ｄとなりうるＬＥＤ画像候補があるか調査する。この際、ＬＥＤ画像抽出部１４２は、複数のＬＥＤ４０により形成される２次元パターンを予め認識しており、この２次元パターンを利用して、ＬＥＤ画像の抽出処理を行う。以下では、説明の便宜上、コントローラ２０の筐体背面２９において、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃ、第４ＬＥＤ４０ｄが正方形の頂点を構成するように配置されている場合を例にとる。
【００５２】
なおＬＥＤ画像抽出部１４２は、論理積画像を用いずに、２値化画像からＬＥＤ画像を抽出することも可能である。２値化画像には、ＬＥＤ画像以外のノイズも含まれることになるが、たとえば差分画像においてＬＥＤ画像を取得できない場合には、２値化画像を利用することで、ＬＥＤ画像の位置および姿勢を検出できる。以下に示す処理手順は、論理積画像および２値化画像のいずれを用いても実行できるが、論理積画像にはＬＥＤ画像以外のノイズ成分が少ないため、論理積画像を利用する方が処理速度は速い。
【００５３】
図９は、ＬＥＤ画像候補の検出処理の処理手順を示すフローチャートである。ＬＥＤ画像抽出部１４２は、論理積画像において、白色画素（画素値が“１”になっている画素）が連続して存在する領域を１つの連結領域として取得する（Ｓ１００）。次に、ＬＥＤ画像抽出部１４２は、白色画素連結領域の縁部分を抽出して、短辺および長辺を決定する（Ｓ１０２）。
【００５４】
ＬＥＤ画像抽出部１４２は、短辺が所定画素数Ｍａ以上の画素で構成されているか否かを判定する（Ｓ１０４）。短辺が画素数Ｍａより少ない画素で構成されている場合（Ｓ１０４のＮ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像ではないとして、この白色画素連結領域の処理を終了する。短辺が画素数Ｍａ以上の画素で構成されている場合（Ｓ１０４のＹ）、ＬＥＤ画像抽出部１４２は、長辺が所定画素数Ｍｂ以下の画素で構成されているか否かを判定する（Ｓ１０６）。長辺が画素数Ｍｂより多い画素で構成されている場合（Ｓ１０６のＮ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像ではないとして、この白色画素連結領域の処理を終了する。長辺が画素数Ｍｂ以下の画素で構成されている場合（Ｓ１０６のＹ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像の候補であるとして、白色画素連結領域を構成する画素数を取得する（Ｓ１０８）。このＬＥＤ画像候補検出処理は、全ての白色画素連結領域に対して繰り返される。これにより、論理積画像に含まれるＬＥＤ画像候補を検出できる。なお、ＬＥＤ画像候補の座標は、連結領域の重心に設定する。
【００５５】
図１０は、ＬＥＤ抽出処理の処理手順を示すフローチャートである。ＬＥＤ画像抽出部１４２は、検出されたＬＥＤ画像候補のうち、任意のＬＥＤ画像候補を第１ＬＥＤ４０ａであると仮定する（Ｓ１２０）。次に、第１ＬＥＤ４０ａに対して、第２ＬＥＤ４０ｂとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２２）。第２ＬＥＤ４０ｂとなるＬＥＤ画像候補が存在すれば（Ｓ１２２のＹ）、第１ＬＥＤ４０ａおよび第２ＬＥＤ４０ｂに対して、第３ＬＥＤ４０ｃとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２４）。第３ＬＥＤ４０ｃとなるＬＥＤ画像候補が存在すれば（Ｓ１２４のＹ）、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂおよび第３ＬＥＤ４０ｃに対して、第４ＬＥＤ４０ｄとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２６）。第４ＬＥＤ４０ｄとなるＬＥＤ画像候補が存在すれば（Ｓ１２６のＹ）、コントローラ２０の第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄを抽出したことになる。なお、第２ＬＥＤ画像候補が存在しない場合（Ｓ１２２のＮ）、第３ＬＥＤ画像候補が存在しない場合（Ｓ１２４のＮ）、第４ＬＥＤ画像候補が存在しない場合（Ｓ１２６のＮ）は、別のＬＥＤ画像候補を第１ＬＥＤ４０ａと仮定して、図８の処理を再実行する。
【００５６】
ＬＥＤ抽出処理においては、処理負荷を軽減するために、コントローラ２０の姿勢が所定角度以上傾いていないことを処理条件として設定してもよい。ＬＥＤ４０は比較的指向性が強いため、コントローラ２０を傾けすぎると、撮像装置２において受光が難しくなる。このＬＥＤ４０の指向性を利用して、ＬＥＤ画像候補を探索する際に、第１ＬＥＤ４０ａから所定角度（たとえば４５°）よりも傾いていないことを条件としてＬＥＤ画像の抽出処理を行うことで、処理負荷を大幅に軽減することが可能となる。
【００５７】
本実施例では、前フレーム画像と現フレーム画像の差分画像を利用するため、コントローラ２０に動きがない場合は、ＬＥＤ４０の画像は差分画像から除かれる。そのため、差分画像を用いる場合には、図１０に示すＬＥＤ抽出処理により、必ずＬＥＤ画像が見つかるわけではない。位置推定部１０４は、図１０に示すＬＥＤ抽出処理によりＬＥＤ画像が見つからなかった場合は、コントローラ２０が前フレームの位置から動いていないものと推定し、前フレームにおけるコントローラ２０の位置情報および姿勢情報を取得する。このとき位置推定部１０４は、２値化画像を用いてＬＥＤ画像を抽出してもよい。
【００５８】
図１１は、図１０のＳ１２２に示す第２ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１４０）。これは、ＬＥＤ画像であれば、大きさや形は第１ＬＥＤ４０ａと大きく変わらないという事実に基づいている。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１４０のＹ）、そのＬＥＤ画像候補が第１ＬＥＤ４０ａの右方に存在するか否かを判定する（Ｓ１４２）。右方であるか否かの判断は、第１ＬＥＤ４０ａの右上４５°から右下４５°の範囲内に存在するか否かにより決定される。第１ＬＥＤ４０ａの右方にある場合（Ｓ１４２のＹ）、第１ＬＥＤ４０ａとＬＥＤ画像候補との距離Ｄ１２が、Ｄａ以上であって且つＤｂ以下であるか否かを判定する（Ｓ１４４）。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第２ＬＥＤ４０ｂとして相応しくないことを判定している。距離Ｄ１２がＤａ以上であって且つＤｂ以下である場合（Ｓ１４４のＹ）、そのＬＥＤ画像候補が第２ＬＥＤ４０ｂとなりうることが判断され、第２ＬＥＤ４０ｂの存在が確認される（Ｓ１４６）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１４０のＮ）、ＬＥＤ４０ａの右方に存在しない場合（Ｓ１４２のＮ）、距離Ｄ１２が所定の範囲内にない場合（Ｓ１４４のＮ）には、そのＬＥＤ画像候補が第２ＬＥＤ４０ｂでないと判断される。
【００５９】
図１２は、図１０のＳ１２４に示す第３ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１６０）。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１６０のＹ）、そのＬＥＤ画像候補が第１ＬＥＤ４０ａの下方に存在するか否かを判定する（Ｓ１６２）。下方であるか否かの判断は、第１ＬＥＤ４０ａの左下４５°から右下４５°の範囲内に存在するか否かにより決定される。第１ＬＥＤ４０ａの下方にある場合（Ｓ１６２のＹ）、第１ＬＥＤ４０ａとＬＥＤ画像候補との距離が、１／√２×Ｄ１２以上であって且つ√２Ｄ１２以下であるか否かを判定する（Ｓ１６４）。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第３ＬＥＤ４０ｃとして相応しくないことを判定している。距離が１／√２×Ｄ１２以上であって且つ√２Ｄ１２以下である場合（Ｓ１６４のＹ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂまでの線分と、第１ＬＥＤ４０ａからＬＥＤ画像候補までの線分の角度が所定の範囲内であるか否かが判定される（Ｓ１６６）。このとき、所定の範囲内にあれば（Ｓ１６６のＹ）、そのＬＥＤ画像候補が第３ＬＥＤ４０ｃとなりうることが判断され、第３ＬＥＤ４０ｃの存在が確認される（Ｓ１６８）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１６０のＮ）、ＬＥＤ４０ａの下方に存在しない場合（Ｓ１６２のＮ）、第１ＬＥＤ４０ａとの距離が所定の範囲内にない場合（Ｓ１６４のＮ）、角度が所定の範囲内にない場合（Ｓ１６６のＮ）には、そのＬＥＤ画像候補が第３ＬＥＤ４０ｃでないと判断される（Ｓ１７０）。
【００６０】
図１３は、図１０のＳ１２６に示す第４ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１８０）。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１８０のＹ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値以下であるか否かを判定する（Ｓ１８２）。第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値以下であれば（Ｓ１８２のＹ）、第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値以下あるか否かを判定する（Ｓ１８４）。第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値以下であれば（Ｓ１８４のＹ）、そのＬＥＤ画像候補が第４ＬＥＤ４０ｄとなりうることが判断され、第４ＬＥＤ４０ｄの存在が確認される（Ｓ１８６）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１８０のＮ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値を超える場合（Ｓ１８２のＮ）、第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値を超える場合は（Ｓ１８４のＮ）、そのＬＥＤ画像候補が第４ＬＥＤ４０ｄでないと判断される（Ｓ１８８）。
【００６１】
以上により、ＬＥＤ画像抽出部１４２は、論理積画像から第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像を抽出することができる。抽出された第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像の位置情報は、位置推定部１０４に送られる。
【００６２】
位置推定部１０４は、コントローラ２０におけるＬＥＤ４０の２次元配置に基づき、第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像のフレーム画像における位置情報を取得する。位置推定部１０４は、抽出した第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄのアフィン変換を求めて、実空間における位置および姿勢を算出する。実空間における位置は、直交座標系における座標（Ｘ，Ｙ，Ｚ）であり、実空間における姿勢は、Ｘ軸、Ｙ軸、Ｚ軸における回転角である。３軸における座標および回転角を求めることで、位置推定部１０４は、撮像装置２からの距離も含めた空間内での位置を推定できる。位置推定部１０４は、アフィン変換を求めることで、コントローラ２０のフレーム画像中の位置を推定してもよい。たとえば、ＸＹＺ空間のうちのＸＹ座標をとることでフレーム画像中の位置を取得することができる。位置推定部１０４は、推定したコントローラ２０の位置や姿勢をアプリケーション処理部１１０に送る。
【００６３】
ＬＥＤ４０の誤認識を回避するために、位置推定部１０４は、前回取得したＬＥＤ画像の位置と、今回取得したＬＥＤ画像の位置の変化量が所定値を超える場合、今回取得したＬＥＤ画像の位置をエラーとして処理する。すなわち、１フレームの間に、位置や姿勢が所定値以上変化する場合は、外乱的な要素により他のオブジェクトをＬＥＤ４０として誤認識した可能性があるため、抽出したＬＥＤ４０の位置情報を破棄する。
【００６４】
しかしながら、そのような場合であっても、実際に大きな変化量でコントローラ２０が移動することもあり得るため、位置推定部１０４は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得したＬＥＤ画像の位置を正常なものとして処理してもよい。
【００６５】
位置推定部１０４は、たとえば現フレーム画像や、論理積画像をもとに、ＬＥＤ４０の移動方向や速度を推定することも可能である。たとえば撮像装置２のシャッタースピードを落とすと、ＬＥＤ４０の画像が楕円や直方体として撮像されることになる。そこで、ＬＥＤ画像の形状から、移動方向のみならず、移動速度も推定することが可能である。たとえば移動方向および速度が推定できれば、撮像装置２において突然見えなくなった場合でも、コントローラ２０の位置や姿勢を予測できる。全てのＬＥＤ４０の形状が同じ方向に偏っているような場合に、コントローラ２０の移動方向と速度を推定してもよい。
【００６６】
アプリケーション処理部１１０は、推定されたコントローラ２０の位置や姿勢を、ゲーム入力としてゲームアプリケーションの処理に反映する。この反映の手法は様々考えられるが、最も直観的には、推定したコントローラ２０の位置に対応したゲーム画像中の位置に、仮想オブジェクトを追従させて表示する。ユーザが撮像装置２に対してコントローラ２０を動かすと、その動きに追従してゲーム画像内の仮想オブジェクトを動かすことができる。
【００６７】
なお、理想的な状態であればフレーム画像ごとにＬＥＤ４０の位置や姿勢を求めてゲーム画像に反映していけばよいが、一方で、コントローラ２０の向きや周辺光の環境などにより、フレーム画像においてＬＥＤ４０の位置や姿勢を求められない状況も発生しうる。そのような状況が続いた後に、突然、ＬＥＤ４０の位置や姿勢が求められると、停止していた仮想オブジェクトが新たな位置にいきなり移動することになり、ユーザに違和感を与える。そのため、論理積画像からＬＥＤ４０の位置や姿勢を検出できたとしても、ゲーム画像としては、仮想オブジェクトを取得した位置まで移動させるのではなく、仮に情報落ちがあった場合であっても、スムーズな動きを実現できるように追従処理を行わせることとする。
【００６８】
図１４（ａ）、図１４（ｂ）は、コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。説明の便宜上、仮想オブジェクトの位置変化について説明するが、姿勢変化についても同様のアルゴリズムを適用することができる。
【００６９】
位置推定部１０４において、アフィン変換を求めることで導出された位置パラメータが、Ｐｉ−１、Ｐｉ、Ｐｉ＋１（Ｐの添字は、ゲーム画面フレームの番号を示す）とする。まず、フレーム画像が切り替り、ＰｉからＰｉ＋１に位置パラメータが変化する場合を考える。
新たな位置パラメータ（Ｐｉ＋１）が得られたとき、ゲーム画面に反映する位置パラメータは、以下の式で求められる。
Ｑｉ＋１＝（Ｑｉ＋Ｐｉ＋１）／２
すなわち、新たな位置パラメータＰｉ＋１に直接移動するのではなく、前フレームのゲーム画面における位置パラメータと、現フレームの新たな位置パラメータＰｉ＋１との中点を、ゲーム画面における新たな位置パラメータとして設定する。なお、位置パラメータＱｉ＋１は、位置パラメータＱｉと位置パラメータＰｉ＋１の中点である必要はなく、位置パラメータＱｉと位置パラメータＰｉ＋１の間の線分をＡ：Ｂに分割する点であってもよい。
【００７０】
図１２（ｂ）は、位置パラメータとしてＰｉ＋１が取得できなかった場合の例である。このような場合は、本アルゴリズムの効果を発揮できる。この場合は、最新の位置パラメータがＰｉ＋１の代わりに利用される。ここで最新の位置パラメータはＰｉであり、
Ｑｉ＋１＝（Ｑｉ＋Ｐｉ）／２
として求められる。
本アルゴリズムによりゲーム画像における位置パラメータＱを取得すると、空間内のコントローラ２０が大きく変位したり、また論理積画像から抽出できない場合であっても、仮想オブジェクトは常に少しずつ移動できる。そのため、ゲーム画像中で仮想オブジェクトが急に動かなくなったり、また急に動いたりする状況の発生を回避でき、コントローラ２０に対して円滑な追従処理を実現できる。
【００７１】
以上、本発明を実施例１をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７２】
本実施例では、コントローラ２０を撮像装置２で撮像して、フレーム画像からコントローラ２０の位置や姿勢を推定し、その位置情報や姿勢情報をゲームアプリケーションの処理に反映させることとした。コントローラ２０のＬＥＤ４０は、たとえばゲームアプリケーションの進行状況に応じて点灯パターンを変更してもよい。
【００７３】
ユーザがゲームアプリケーションに参加した直後に、ゲーム装置１０は、コントローラ２０に対して所定の低周波で４つのＬＥＤ４０を点灯させる制御信号を送信してもよい。点滅指示部１０６は、コントローラ２０に対して所定の低周波での点滅パターンを指示する制御信号を生成する。この低周波点滅制御信号は、無線通信モジュール１０８からコントローラ２０に送信される。なお、複数のコントローラ２０が存在する場合には、コントローラ２０ごとに点滅周波数が設定される。
【００７４】
コントローラ２０は、指定された低周波でＬＥＤ４０を点灯し、撮像装置２は、３０枚／秒の撮像速度でフレーム画像を撮像する。ゲーム装置１０は、複数のフレーム画像から、所定の周期で点灯をオンオフしているＬＥＤ画像を抽出する。ゲームシステム１内に複数のコントローラ２０が存在する場合は、コントローラ２０ごとに点灯の周期を設定する。これにより、コントローラ２０の位置を確認できるとともに、それぞれのコントローラ２０を区別して認識することもできる。この処理は、理想的にはゲームアプリケーションに参加後、１回行われればよいが、実空間内ではコントローラ２０が撮像装置２から突然見えなくなることもある。そのため、数秒ごとなどの所定の周期で、各コントローラ２０は、コントローラごとに設定された低周波でＬＥＤ４０を点滅させてもよい。
【００７５】
たとえば４つのＬＥＤ４０が低周波で点灯と消灯を行う場合には、ＬＥＤ４０を撮像できるフレームと、撮像できないフレームとが所定の周期で切り替わることになる。撮像周期（３０フレーム／秒）に対して、ＬＥＤ４０を４５Ｈｚで点灯制御すると、連続した２枚のフレームで撮像され、次は撮像されない、という状況が繰り返される。フレーム画像に撮像される場合と撮像されない場合とがあるため、ＬＥＤ４０が静止した状態であっても、位置情報を取得できる。
【００７６】
ここで低周波点灯とは、撮像周期に対して、ＬＥＤ発光が撮像されるフレームと撮像されないフレームとが存在しうるような周波数での点灯を意味する。一方、高周波点灯とは、撮像装置２の撮像周期（３０フレーム／秒）に対して常にフレーム画像に撮像されるような周波数での点灯を意味する。たとえば、１ｋＨｚでＬＥＤ４０を点灯した場合であっても、たとえば撮像装置２の撮像周期が非常に高ければ、ＬＥＤ発光が撮像されるフレームと撮像されないフレームとが出現するため、ＬＥＤ４０が静止した状態であっても、位置情報を取得できる。
【００７７】
高周波点灯するＬＥＤ４０の位置や姿勢は、ゲームアプリケーションの入力として利用される。そのため、位置推定部１０４で推定されたコントローラ２０の位置情報は、アプリケーション処理部１１０に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部１１０には、ユーザがコントローラ２０の方向キー２１などを操作した入力も無線通信モジュール１０８を介して送信される。アプリケーション処理部１１０は、コントローラ２０の位置・姿勢情報と、コントローラ２０における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。
【００７８】
また、変形例として、４つのＬＥＤ４０のうちの１つを他のＬＥＤ４０とは異なる点滅パターンで点灯させることで、特定のＬＥＤ４０を認識することも可能となる。たとえば３つのＬＥＤは高周波点灯を行い、１つのＬＥＤに低周波点灯を行わせることで、たとえばフレーム画像中の第１ＬＥＤ４０ａがどれであるのかを確認することも可能となる。
【００７９】
実空間におけるコントローラ２０の位置や姿勢を検出してゲームアプリケーションの処理に反映することで、新たなゲームアプリケーションを実現できる。テニスゲームを例にとると、フレーム画像におけるコントローラ２０の高さをテニスボールの打点高さとし、コントローラ２０の向きをボールの打球方向、コントローラ２０を動かす速度を、ボールを打ち込む強さとして、コントローラ２０を動かすことでゲームを進行させることができる。これらの動きは、実際のラケットを振る動きに近似しているため、テニスを実際にプレイするのに近い感覚をユーザに与えることができる。このとき、コントローラ２０のボタンやキーをゲーム入力としてそのまま利用できるようにすることで、従来のゲーム操作入力を維持しながら、感覚的に斬新なゲーム入力を行わせることができる。このように、コントローラ２０にインジケータとして設けたＬＥＤを有効に活用することで、ゲームアプリケーションの幅を一層広げることができる。
【００８０】
たとえば、ボールを打ち込む強さをコントローラ２０のボタン操作により定めてもよい。従来型のボタン操作と、斬新なゲーム入力とを組み合わせることで、新しい遊技性を実現できる。たとえば、相手のコートにボールを落とす位置をコントローラ２０の向きで指定しながら、ボタン入力を行うことでボールを上げ、さらにコントローラ２０を動かすことで、強いサーブを打てるようなテニスゲームを作ることも可能である。
【００８１】
ゲームアプリケーションとしては、たとえばオートバイのドライブゲームで、コントローラ２０の姿勢を操作することで、オートバイをコントロールするゲーム入力として利用してもよい。このとき、スピードはコントローラ２０を動かす速度で決定してもよく、またボタン入力で決定してもよい。このように、従来型のボタン入力と、コントローラ２０の位置や姿勢による静的な入力と、またコントローラ２０の移動速度などの状態変化をもとにした動的な入力とを組み合わせて利用することで、ゲームアプリケーションの操作性を向上できる。
【００８２】
たとえば、コントローラ２０が画像表示装置３の画面からフレームアウトしそうな場合、アプリケーション処理部１１０は、コントローラ２０の位置情報をもとに、ユーザに対してフレームアウトしそうな旨を通知する処理を行ってもよい。たとえば、コントローラ２０がフレームアウトしそうな場合に、コントローラ２０に対して振動子を振動させるための振動制御信号を生成して、無線通信モジュール１０８より送信させてもよい。また、コントローラ２０の動きに追従する仮想オブジェクトをゲーム画像として表示させている場合には、ユーザに目立つように仮想オブジェクトを動かすことで、フレームアウトしそうなことをユーザに伝えてもよい。フレームアウトしそうであるか否かは、たとえばフレーム画像の位置で決定してもよく、フレーム画像の縁部に近い位置にコントローラ２０の位置が推定される場合に、この通知処理を行ってもよい。
【００８３】
実施例において開示された発明の特徴は、次の項目によって規定されてもよい。
（項目１）
入力されるフレーム画像から発光体画像の位置を取得する画像処理装置であって、
前フレーム画像と現フレーム画像の差分画像を生成する差分画像生成部と、
現フレーム画像を所定の閾値を用いて２値化処理して２値化画像を生成する２値化画像生成部と、
前記差分画像と前記２値化画像とを論理演算した論理演算画像を生成する論理演算部と、
前記論理演算画像から発光体画像を抽出する抽出部と、
発光体画像のフレーム画像における位置を取得する位置取得部と、
を備えることを特徴とする画像処理装置。
（項目２）
前記論理演算部は、画素ごとに、前記差分画像の画素値と前記２値化画像の画素値との論理積演算を行うことで、論理演算画像を生成することを特徴とする項目１に記載の画像処理装置。
（項目３）
前記抽出部は、複数の発光体により形成される２次元パターンを予め認識しており、当該２次元パターンを利用して、発光体画像の抽出処理を行うことを特徴とする項目１または２に記載の画像処理装置。
（項目４）
前記位置取得部は、前回取得した発光体画像の位置と今回取得した発光体画像の位置の変化量が所定値を超える場合、今回取得した発光体画像の位置を、エラーとして処理することを特徴とする項目１から３のいずれかに記載の画像処理装置。
（項目５）
前記位置取得部は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得した発光体画像の位置を正常なものとして処理することを特徴とする項目４に記載の画像処理装置。
【００８４】
（実施例２）
図１５は、実施例２にかかるコントローラの背面側の外観構成を示す。コントローラ２００の筐体背面２９には、複数のＬＥＤが設けられている。筐体背面側からみて、筐体上面右方には方向キー２１が設けられ、上面左方には操作ボタン２６が設けられる。また、方向キー２１および操作ボタン２６の内側には、２つのアナログスティック２７が設けられる。
【００８５】
実施例２のコントローラ２００において、第１ＬＥＤ２１０ａ、第２ＬＥＤ２１０ｂ、第３ＬＥＤ２１０ｃおよび第４ＬＥＤ２１０ｄが、筐体背面２９の上方且つ長手方向中央から右よりの位置に横一列に設けられる。以下、第１ＬＥＤ２１０ａ、第２ＬＥＤ２１０ｂ、第３ＬＥＤ２１０ｃおよび第４ＬＥＤ２１０ｄを総称する場合には、「ＬＥＤ２１０」と表記する。また、筐体背面２９の中央部には、ＵＳＢコネクタ４６が設けられる。ＵＳＢコネクタ４６には、ゲーム装置１０から延びるＵＳＢケーブルが接続されて、コントローラ２００の充電処理を行うことができる。なおＵＳＢケーブルが接続されると、コントローラ２００を有線コントローラとして利用することも可能である。
【００８６】
筐体背面２９側には、上側操作ボタン２２０ａ、上側操作ボタン２２０ｂ、下側操作ボタン２３０ａ、下側操作ボタン２３０ｂが筐体背面長手方向の左右対称な位置にそれぞれ設けられる。上側操作ボタン２２０ａおよび上側操作ボタン２２０ｂは、ユーザが右側把持部２１２ａ、左側把持部２１２ｂを把持した状態で、それぞれ右手および左手の人差指の先端で操作される位置に形成され、下側操作ボタン２３０ａおよび下側操作ボタン２３０ｂは、それぞれ右手および左手の中指の先端で操作される位置に形成される。これによって、ユーザが上側操作ボタン２２０ａ、上側操作ボタン２２０ｂ、下側操作ボタン２３０ａ、下側操作ボタン２３０ｂを操作する際、ＬＥＤ２１０が人差指または中指によって隠れない。
【００８７】
ＬＥＤ２１０の近傍には数字が刻印または印刷されており、ＬＥＤ２１０は、ゲームキャラクタと紐付けされたコントローラ番号を表現するインジケータとして利用されるが、コントローラ２００を使用しているユーザからすると、一度確認できれば十分であって、常に見える筐体上面に配置することは好ましくない。一方、他のユーザが存在する場合には、ＬＥＤ２１０を筐体背面２９に配置することで、他のユーザから見えやすくなるという利点がある。また筐体上面にはＬＥＤ付きボタンが存在するため、上面にＬＥＤ２１０を配置するとユーザが区別しづらくなる。そのため、コントローラ２００は、ＬＥＤ２１０を筐体背面２９に配置して構成される。
【００８８】
実施例２のコントローラ２００において、上側操作ボタン２２０ａおよび上側操作ボタン２２０ｂは、プッシュ式のボタンとして構成される。上側操作ボタン２２０からの入力は、押下されることで実行され、オンオフのデジタル入力を可能とする。一方、下側操作ボタン２３０ａおよび下側操作ボタン２３０ｂは、回動支持されたトリガー式のボタンとして構成される。下側操作ボタン２３０は、回動可能な入力インタフェースであって、回動量に応じたアナログ入力を可能とする。なお、上側操作ボタン２２０についても同様にアナログ入力を可能とする入力インタフェースとして構成されてもよい。下側操作ボタン２３０は、回動軸により回動可能に支持された状態で、ばねなどにより筐体外向きに付勢されている。これにより、ユーザから押下されない状態では、下側操作ボタン２３０が筐体から離れる方向に付勢され、その位置を維持する。
【００８９】
図１５に示すコントローラ２００において、下側操作ボタン２３０は、筐体背面２９の長手方向に実質的に平行に設けられた回転軸により回動可能に支持されて構成される。下側操作ボタン２３０は、その上側部分を回動支持され、ユーザは下側操作ボタン２３０の表面の下側を押下することで、下側操作ボタン２３０を筐体内に収容する方向に回動させることができる。下側操作ボタン２３０の表面の下端部には、回動軸から離れる向き、具体的には下向きないしは斜め下向きに張り出した突起部２４０が形成される。したがって突起部２４０は、回転軸よりも筐体裏面側に配置される。下側操作ボタン２３０ａには突起部２４０ａが形成され、下側操作ボタン２３０ｂには突起部２４０ｂが形成される。突起部２４０は、他の表面領域に対して筐体外向きに反る方向に形成されてもよい。このように突起部２４０を下側操作ボタン２３０の表面の一部を構成するように設けることで、ユーザが下側操作ボタン２３０を回動させる際に、最も効率的に力をかけられる位置に中指をガイドし、中指とのかかり具合を良好にして、中指が滑ってしまう状況を回避する。
【００９０】
下側操作ボタン２３０は、筐体内部から外部に露出して構成されるが、下側操作ボタン２３０の表面下端部に設けられた突起部２４０は、背面視において、その周囲の筐体部分よりも下方（裏面側）に張り出してもよい。中指を下側操作ボタン２３０に載せる際、中指をコントローラ２００の裏面を這わせて下側操作ボタン２３０に到達させるユーザは少なくないと考えられる。このとき、突起部２４０が筐体よりも張り出してコントローラ２００の外郭の一部を構成することで、裏面に沿って移動させられる中指が下側操作ボタン２３０に自然に到達できるようになる。
【００９１】
下側操作ボタン２３０の回動量検出手段として、静電容量式のセンサが採用されてもよい。静電容量式センサは、２つの電極間における静電容量の変化を検出して、下側操作ボタン２３０の回動量を検知することができる。コントローラ２００において、電極間の静電容量をアナログ値として取得する検出手段が設けられ、検出手段により取得されたアナログ値が、回動量に応じたデジタル値に変換される。これにより、コントローラ２００は、回動量に応じた入力値を取得することが可能となる。
【００９２】
他の例として、下側操作ボタン２３０の回動量検出手段に、抵抗変化を検出するセンサを採用してもよい。たとえば、筐体内部に所定の抵抗値で２端子間を導通している回路パターンを用意し、下側操作ボタン２３０の回動方向端部に導電ゴムを設ける。下側操作ボタン２３０が回動されると、回動方向端部に設けられた導電ゴムが筐体内部の回路パターンに接触する。導電ゴムは、回動量に応じて回路パターンとの接触面積が変化するように変形可能に形成され、これにより回動量に応じて２端子間の抵抗値が変化する。この抵抗値を検出することで、回動量を検出することができ、これによりコントローラ２００は、回動量に応じた入力値を取得することが可能となる。
【００９３】
図１６（ａ）および図１６（ｂ）は、実施例２にかかるコントローラ２００の側面側の外観構成を示す。なお図１６は、コントローラ２００の右側面から見える下側操作ボタン２３０ａを示しているが、左側面から見える下側操作ボタン２３０ｂについても同様の構造を有している。
【００９４】
図１６（ａ）は、下側操作ボタン２３０ａを回動しない状態を示し、図１６（ｂ）は、下側操作ボタン２３０ａを最大に回動した状態を示す。下側操作ボタン２３０ａの表面２３４ａには、回動軸２３２ａから離れる向きに張り出した突起部２４０ａが形成されている。表面２３４ａはなだらかな曲面として形成されてもよく、突起部２４０ａは、指のひっかかり部分を構成するように、わずかに反る方向（筐体外向き）に傾斜する曲面を構成してもよい。
【００９５】
また突起部２４０ａの先端部は、下側操作ボタン２３０ａが筐体内に押し込まれるときに収容される本体部分２３６ａの外郭部２３７ａよりも、回動軸２３２ａからの距離を長く設定される。本体部分２３６ａは筐体に設けられた開口部から筐体内に収容されるが、突起部２４０ａは、開口部に当接するように表面２３４ａを延設して形成される。これにより、図１６（ｂ）に示すように、突起部２４０ａは、回動されると、筐体の外表面、具体的には開口部の縁部に接触して回動動作を制限するストッパとして機能する。突起部２４０ａを設けずに、下側操作ボタン２３０ａを回動して全体を筐体内部に押し込んだ場合には、下側操作ボタン２３０ａと開口部との間に異物が入り込んだようなとき、下側操作ボタン２３０ａが引き出せないような状況が発生しうる。また、他の理由で下側操作ボタン２３０ａの全体が開口部から引き出せないような状況も発生しうる。一方、実施例２のコントローラ２００のように、ストッパとして機能する突起部２４０ａを設けることで、下側操作ボタン２３０ａが筐体内部に完全に押し込まれないため、そのような状況を回避できるという利点がある。なお図示するように、開口部を形成する筐体外郭部分を下方に向けて傾斜させることで、下側操作ボタン２３０の回動量すなわちストローク量を大きくすることができる。ストローク量を大きくすることで、入力可能なアナログ値の範囲を増やすことができる。
【００９６】
コントローラ２００は、その裏面２１３ａの曲面を滑らかに形成されることが好ましい。図１６に示す側面図において、筐体裏面における右側把持部２１２ａはＳ字状の曲面を有して構成されているが、中指を下側操作ボタン２３０ａの表面２３４ａに置くときに、中指を筐体裏面に沿わせて移動させるような場合には、筐体裏面をなだらかに形成しておくことで、中指を移動させやすくできる。このとき、下側操作ボタン２３０ａ近傍の裏面２１３ａから中指をスムーズに下側操作ボタン２３０ａに移動可能とするために、下側操作ボタン２３０ａ近傍の裏面の延長線上に、ばねにより筐体外向きに付勢された状態の突起部２４０ａが配置されるようにしてもよい。
【００９７】
図１７は、コントローラ２００の裏面側の外観構成を示す。裏面において、右側把持部２１２ａおよび左側把持部２１２ｂと、筐体裏面中央部分との間はなだらかに構成され、把持部と中央部分との間の接続部に段差を設けないことが好ましい。これにより、前記したように、指の移動をスムーズに行うことが可能となる。また、右側把持部２１２ａおよび左側把持部２１２ｂに挟まれる中央部分は、全体として平坦に形成される。またコントローラ２００はバッテリを内蔵しており、裏面にはバッテリ用蓋２１６が設けられる。バッテリはバッテリ用蓋２１６を取り外して交換することができる。
【００９８】
図１８は、実施例２におけるコントローラ２００の変形例を示す。図１５に示すコントローラ２００と比較すると、下側操作ボタン２３０ａ、２３０ｂを、図１８に示すコントローラ２００ではそれぞれ下側操作ボタン２６０ａ、２６０ｂに置き換えており、他の構造は図１５に示す構造と同一である。なお下側操作ボタン２６０は、下側操作ボタン２３０と同様にトリガー式のボタンとして構成されており、その基本構造は下側操作ボタン２３０に関連して説明したとおりである。
【００９９】
下側操作ボタン２６０ａおよび下側操作ボタン２６０ｂは、筐体背面長手方向の左右対称な位置にそれぞれ設けられる。ユーザが右側把持部２１２ａ、左側把持部２１２ｂを把持した状態で、下側操作ボタン２６０ａおよび下側操作ボタン２６０ｂは、それぞれ右手および左手の中指で操作される位置に形成される。
【０１００】
下側操作ボタン２６０は、回動可能な入力インタフェースであって、回動量に応じたアナログ入力を可能とする。下側操作ボタン２６０は、回動軸により回動可能に支持された状態で、ばねなどにより筐体外向きに付勢されている。これにより、ユーザから押下されない状態では、下側操作ボタン２３０が筐体から離れる方向に付勢され、その位置を維持する。
【０１０１】
図１８に示すコントローラ２００において、下側操作ボタン２６０は、筐体背面２９の長手方向に実質的に垂直に設けられた回転軸により回動可能に支持されて構成される。下側操作ボタン２６０は、筐体長手方向における内側部分を回動支持され、ユーザは下側操作ボタン２６０の表面の外側を押下することで、下側操作ボタン２６０を筐体内に収容する方向に回動させることができる。下側操作ボタン２６０の表面の外側端部には、回動軸から離れる向きに張り出した突起部２６２が形成される。したがって突起部２６２は、回転軸よりも筐体側面側に配置される。下側操作ボタン２６０ａには突起部２６２ａが形成され、下側操作ボタン２６０ｂには突起部２６２ｂが形成される。突起部２６２は、他の表面領域に対して筐体外向きに反る方向に形成されてもよい。このように突起部２４０を下側操作ボタン２３０の表面の一部を構成するように設けることで、ユーザが下側操作ボタン２３０を回動させる際に、中指とのかかり具合を良好にし、中指が滑ってしまう状況を回避する。
【０１０２】
また突起部２６２の先端部は、下側操作ボタン２６０が筐体内に押し込まれるときに本体部分が収容される開口部に当接するように下側操作ボタン２６０の外表面を延設して形成される。これにより、突起部２６２は、回動されると、筐体の外表面、具体的には開口部の縁部に接触して回動動作を制限するストッパとして機能する。
【０１０３】
この変形例においては、下側操作ボタン２６０の突起部２６２を、筐体背面２９長手方向の外向きに張り出すようにしたことで、手の小さい子供であっても容易に下側操作ボタン２６０を操作できるようになる。
【０１０４】
図４に示すコントローラの内部構成に加えて、コントローラ２００は、さらに３軸方向の加速度センサおよびジャイロセンサを有してもよい。
図１９は、実施例２にかかるコントローラ２００の内部構成を示す。図１９では、図４に示す入力受付部５２、ＰＷＭ制御部５４、駆動部５６などの構成の図示は省略している。コントローラ２００は、ＸＹＺの３軸方向の加速度成分を検出する３軸加速度センサ３００と、筐体水平面（ＸＺ平面）における角速度を検出するジャイロセンサ３０２を備える。なお、ここでは、筐体の長手方向をＸ軸、高さ方向をＹ軸、短手方向（奥行き方向）をＺ軸と設定している。ジャイロセンサ３０２は、筐体内中央領域に配置され、たとえば図２に示す筐体上面図におけるＬＥＤ付きボタン３１の下方近傍に配置される。また３軸加速度センサ３００も同様に筐体中央付近に配置されるのが好ましい。３軸加速度センサ３００およびジャイロセンサ３０２による検出値は所定の周期でメイン制御部５０から無線通信モジュール５８に供給される。無線通信モジュール５８は、３軸加速度センサ３００およびジャイロセンサ３０２による検出値を、方向キー２１や操作ボタン２６などの操作入力とともに、所定の周期でゲーム装置１０の無線通信モジュール１０８に送信する。
【０１０５】
図２０は、実施例２にかかるゲーム装置１０の構成を示す。ゲーム装置１０は、無線通信モジュール１０８にて、コントローラ２００において３軸加速度センサ３００およびジャイロセンサ３０２により計測された３軸方向の加速度成分および筐体水平面（ＸＺ平面）に垂直な方向（Ｙ軸方向）回りの角速度成分を取得する。３軸加速度成分および角速度成分は、無線通信モジュール１０８から位置推定部２５０に供給される。位置推定部２５０は、取得した３軸加速度成分および角速度成分をもとに、コントローラ２００の位置や姿勢を推定できる。具体的に位置推定部２５０は、３軸加速度成分をもとに、コントローラ２００の姿勢を取得できる。また、３軸加速度成分を１回積分することで移動速度を取得することができ、また２回積分することで位置を取得することができる。
【０１０６】
なお実施例２のコントローラ２００では、Ｙ軸方向回りの角速度成分をジャイロセンサ３０２により検出している。したがって位置推定部２５０は、ジャイロセンサ３０２による検出値をもとに、コントローラ２００の水平面における回転状態すなわち回転姿勢を推定してもよい。なお、３軸加速度センサ３００が高精度に３軸加速度成分を取得できる場合には、コントローラ２００の水平面における回転状態を３軸加速度成分から推定できるようにしてもよい。
【０１０７】
以上のように、コントローラ２００が３軸加速度センサ３００およびジャイロセンサ３０２を備えることによって、撮像装置２によるフレーム画像の解析を行わなくても、コントローラ２００の位置および姿勢を取得することが可能となる。なお、実施例１に関連して説明した撮像装置２によるフレーム画像の解析結果を更に利用して、コントローラ２００の位置および姿勢の推定精度を高めるようにしてもよい。実施例２においてもゲーム装置１０は、３軸加速度センサ３００などを備えたコントローラ２００の位置および姿勢を推定できるため、実施例１で説明したように、コントローラ２００の位置および姿勢情報をゲームアプリケーションの処理に反映することが可能となる。したがって、実施例１において例示したゲームアプリケーションを、コントローラ２００を採用したゲームシステム１において実現することが可能である。
【０１０８】
以下では、コントローラ２０ないしコントローラ２００の位置および姿勢を取得できることを前提として、実施例１および実施例２にかかるゲームシステムにおいて実施することのできるアプリケーション例を示す。以下、コントローラを代表して、コントローラ２００に関する説明を行う。ゲーム装置１０は、３軸加速度成分および角速度成分をもとにコントローラ２００の姿勢および位置を推定することになるが、実施例１で説明したコントローラ２０に関しても撮像画像から姿勢および位置を推定できるため、以下の内容は、コントローラ２０についても実現可能である。
【０１０９】
まず、コントローラ２００を動かすことでゲーム装置１０に直観的な操作入力を行う例を示す。以下に、ゲームアプリケーションにおいて、ゲームオブジェクト（キャラクタ）を動作させる２つの操作入力例を示す。１つめの例は、ゲームオブジェクトを移動させる場合であり、２つめの例は、ゲームオブジェクトの姿勢を変化させる場合である。
なお上記したように、コントローラ２００において、筐体の長手方向をＸ軸、高さ方向をＹ軸、短手方向（奥行き方向）をＺ軸と設定する。以下、この方向を、それぞれ筐体Ｘ軸、筐体Ｙ軸、筐体Ｚ軸と呼ぶ。またゲームアプリケーションにおいては、画像表示装置３の画面中、横方向をＸ軸、縦方向をＹ軸、奥行き方向をＺ軸と設定している。以下、これらの方向を、それぞれ画面Ｘ軸、画面Ｙ軸、画面Ｚ軸と呼ぶ。
【０１１０】
１つめの例として、ゲームオブジェクトをゲーム空間上で移動させる場合、コントローラ２００を左右に傾けることで、ゲーム装置１０は、ゲームオブジェクトを画面Ｘ軸方向に動かすようにする。このときアプリケーション処理部１１０は、筐体Ｘ軸方向および筐体Ｙ軸方向の加速度成分によりコントローラ２００の左右方向の傾きを測定し、ゲームアプリケーションの処理に反映する。また、コントローラ２００を前後に傾けることで、ゲーム装置１０は、ゲームオブジェクトを画面Ｚ軸方向に動かすようにする。このときアプリケーション処理部１１０は、筐体Ｙ軸方向および筐体Ｚ軸方向の加速度成分によりコントローラ２００の前後方向の傾きを測定し、ゲームアプリケーションの処理に反映する。また、コントローラ２００を瞬間的に前後に傾けて元の姿勢に戻すことで、ゲーム装置１０は、ゲームオブジェクトを画面Ｙ軸方向に動かすようにする。このときアプリケーション処理部１１０は、筐体Ｙ軸方向および筐体Ｚ軸方向の加速度成分の所定時間内の変化によりコントローラ２００の瞬間的な前後方向の傾きを測定し、ゲームアプリケーションの処理に反映する。コントローラ２００の傾きが所定の閾値を超えたことを、ゲームオブジェクトを画面Ｙ軸方向に移動させるトリガとしてもよく、また段階的に設定した閾値と実際の瞬時的な傾き値とを比較して、画面Ｙ軸方向の移動量を決定してもよい。なお、以上は、ゲームオブジェクトを画面中で直接移動させる例であるが、ゲームオブジェクトの背景画像を移動させることで、ゲームオブジェクトが画面中で移動するようにしてもよい。
【０１１１】
２つめの例として、ゲームオブジェクトの姿勢をゲーム空間上で変化させる場合、コントローラ２００を左右に傾けることで、ゲーム装置１０は、ゲームオブジェクトの姿勢を画面Ｘ軸方向で傾けるようにする。このときアプリケーション処理部１１０は、筐体Ｘ軸方向および筐体Ｙ軸方向の加速度成分によりコントローラ２００の左右方向の傾きを測定し、ゲームアプリケーションの処理に反映する。また、コントローラ２００を前後に傾けることで、ゲーム装置１０は、ゲームオブジェクトの姿勢を画面Ｚ軸方向で傾けるようにする。このときアプリケーション処理部１１０は、筐体Ｙ軸方向および筐体Ｚ軸方向の加速度成分によりコントローラ２００の前後方向の傾きを測定し、ゲームアプリケーションの処理に反映する。なお、ゲームオブジェクトの自然な姿勢を保持するという観点から、左右方向または前後方向に傾けられたゲームオブジェクトの姿勢は、コントローラ２００が傾いた姿勢を保持した場合であっても、所定の条件を満足した場合には元に戻してもよい。たとえば、コントローラ２００が所定時間傾いた姿勢を保持したとき、コントローラ２００の姿勢にかかわらず、アプリケーション処理部１１０は、ゲームオブジェクトの姿勢を元に戻してもよい。また、コントローラ２００が所定の閾値を超える角度だけ傾けられた場合には、所定の閾値を超えたことをもって、ゲームオブジェクトの姿勢を元に戻してもよい。
【０１１２】
以上示した２つの直観的な操作入力スキームは、アプリケーションごとに使い分けられる。すなわち、ロールプレイングゲームのようにゲームキャラクタをゲーム空間上で移動させるゲームの場合は、１つめの例として示した操作入力スキームを利用することができる。また、サーキットでオートバイを走らせるゲームのようにゲームキャラクタの姿勢で進行方向を定めるゲームの場合は、２つめの例として示した操作入力スキームを利用することができる。このように、操作入力スキームをゲームアプリケーションごとに設定することで、コントローラ２００を傾けるなどの動作により直観的な操作入力が実現可能となる。
【０１１３】
なお、コントローラ２００の傾き情報をアプリケーションに反映させる程度は、アプリケーションごとに設定されてよい。具体的に、アプリケーションが異なれば、コントローラ２００の傾きに応じてゲームキャラクタを傾ける程度が異なってよい。これは、アプリケーションごとに、コントローラ２００の傾きとゲームキャラクタの傾きとを対応付けるテーブルを設定することで実現される。
【０１１４】
アプリケーション処理部１１０は、コントローラ２００の位置および姿勢情報をゲームアプリケーションの処理に反映させる際、その基準位置および基準姿勢を動的に設定することも可能である。多くの場合、ユーザは、コントローラ２００を実空間にて水平となるようにコントローラ２００を把持すると考えられる。しかしながら、利き手や個人的な癖などにより、コントローラ２００を左右方向に傾けて把持するユーザも存在する。そのような場合に、アプリケーション処理部１１０が、上記した操作入力スキームによりコントローラ２００の位置および姿勢情報を処理すると、たとえばゲームキャラクタが常に画面Ｘ軸方向に移動したり、また画面Ｘ軸方向に傾いたりすることになる。コントローラ２００を前後方向に傾けて把持する場合も同様である。そのため、ユーザの個性による基準位置や基準姿勢をアプリケーション処理部１１０側で把握し、設定できるようにしてもよい。
【０１１５】
たとえばアプリケーション処理部１１０は、コントローラ２００が動かされていない状態が所定時間以上継続して、次に動きを検出した場合に、動かされていない状態における姿勢および位置を、そのコントローラ２００の基準姿勢および基準位置として設定してもよい。コントローラ２００が動かされていない状態とは、３軸加速度成分および角速度成分の変化が所定の閾値以下であるような場合も含む。たとえば、ユーザが、ある場所でゲームプレイをしており、何らかの事情で場所を移動したような場合、プレイ場所が変われば画像表示装置３との距離も変わるため、把持するコントローラ２００の姿勢や位置も変化する。このような場合、所定時間継続して静止しているときのコントローラ２００の姿勢および位置を、そのコントローラ２００の基準姿勢および基準位置として都度設定することで、その基準姿勢および基準位置からの差分として取得されるコントローラ２００の姿勢および位置情報をゲームアプリケーションの操作入力として適切に反映することが可能となる。
【０１１６】
たとえばゲーム開始時にはコントローラ２００を傾けていない状態を基準姿勢としてデフォルト設定しておき、ゲーム途中でその基準姿勢を逐次キャリブレーションすることで、ユーザの状況に応じた基準姿勢を取得できる。長時間のゲームプレイを行う場合、手が疲れてコントローラ２００が前傾することが多いが、そのような場合でも基準姿勢をキャリブレーションすることで、基準姿勢を更新することができる。なお、基準姿勢を取得するタイミングを、操作ボタンの操作によりユーザ側からゲーム装置１０に指示できるようにしてもよい。
【０１１７】
以上の基準姿勢および基準位置の取得処理はアプリケーション処理部１１０で実行するとしたが、コントローラ２００側で実行することも可能である。この場合、コントローラ２００は、自身の基準姿勢および基準位置を演算により導出して、アプリケーション処理部１１０に送信することになる。この演算処理は、メイン制御部５０により実行される。
【０１１８】
なお、以上の基準姿勢および基準位置の取得処理は、コントローラ２００が所定時間の不動状態の後に動かされたことを契機としたが、不動状態が所定時間続いた場合に、コントローラ２００が置かれて放置されたものと判定することも可能である。たとえば、ゲーム中のユーザが所用によりコントローラ２００を置いてゲームを中断するような場合である。このようなときには、アプリケーション処理部１１０は、コントローラ２００が水平に載置されているものと判断して、そのときの位置および姿勢を取得してもよい。このときアプリケーション処理部１１０が、不動状態にある姿勢を、水平状態にあるコントローラ２００の姿勢として取得する。なお、アプリケーション処理部１１０は、以前に取得した姿勢と大きく異なる場合は、水平に置かれていないと判断して、取得した姿勢情報をキャンセルしてもよい。
【０１１９】
アプリケーション処理部１１０は、コントローラ２００が特定の姿勢をとった場合に、その姿勢に応じた処理を実行してもよい。たとえばコントローラ２００が逆さの状態にされたときに、画像表示装置３にメニュー画面を表示させるようにしてもよい。また、ユーザがコントローラ２００を手にとったときに、画像表示装置３にメニュー画面を表示させるようにしてもよい。たとえば、長時間動きのなかったコントローラ２００が動いたことが検出された場合に、コントローラ２００がユーザの手にとられたことが判定されてもよい。
【０１２０】
なお、コントローラ２００が自身の動きを判断して、ゲーム装置１０に動作指示を行うことも可能である。たとえば、コントローラ２００が逆さの状態にされたとき、メイン制御部５０は、３軸加速度センサ３００の検出値によりその状態を検出し、ゲーム装置１０に対してメニュー画面を表示するような指示を生成してもよい。また、ユーザがコントローラ２００を手にとったときに、メイン制御部５０は、３軸加速度センサ３００の検出値によりその状態を検出し、ゲーム装置１０に対してメニュー画面を表示するような指示を生成してもよい。これらの指示は無線通信モジュール５８から送信される。また、別の処理を割り当てることも可能であり、コントローラ２００が逆さの状態にされたとき、メイン制御部５０は、自身のメイン電源を自律的に起動してもよい。この場合、メイン電源がオフであっても、メイン制御部５０が３軸加速度センサ３００の検出値を取得して、特定の姿勢にあることを判断できることが前提となる。
【０１２１】
コントローラ２００は、２軸方向（Ｘ軸、Ｚ軸）のアナログ入力を可能とするアナログスティック２７だけでなく、３軸方向の加速度成分を検出する３軸加速度センサ３００を有することで、これらを用いた操作入力をアプリケーションの様々な処理に反映できる。
【図面の簡単な説明】
【０１２２】
【図１】本発明の実施例にかかるゲームシステムの使用環境を示す図である。
【図２】コントローラの外観構成を示す図である。
【図３】コントローラの背面側の外観構成を示す図である。
【図４】コントローラの内部構成を示す図である。
【図５】ゲーム装置の構成を示す図である。
【図６】画像処理部の構成を示す図である。
【図７】（ａ）は現フレーム画像を示す図であり、（ｂ）は現フレーム画像と前フレーム画像の差分画像を示す図である。
【図８】（ａ）は現フレーム画像の２値化画像を示す図であり、（ｂ）は論理積画像を示す図である。
【図９】ＬＥＤ画像候補の検出処理の処理手順を示すフローチャートである。
【図１０】ＬＥＤ抽出処理の処理手順を示すフローチャートである。
【図１１】図１０のＳ１２２に示す第２ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１２】図１０のＳ１２４に示す第３ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１３】図１０のＳ１２６に示す第４ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１４】コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。
【図１５】実施例２にかかるコントローラの背面側の外観構成を示す図である。
【図１６】実施例２にかかるコントローラの側面側の構成を示す図である。
【図１７】実施例２にかかるコントローラの裏面側の外観構成を示す図である。
【図１８】実施例２にかかるコントローラの背面側構成の変形例を示す図である。
【図１９】実施例２にかかるコントローラの内部構成を示す図である。
【図２０】実施例２にかかるゲーム装置の構成を示す図である。
【符号の説明】
【０１２３】
１・・・ゲームシステム、２・・・撮像装置、３・・・画像表示装置、４・・・音声出力装置、１０・・・ゲーム装置、２０・・・コントローラ、２９・・・筐体背面、３０・・・筐体上面、３１・・・ＬＥＤ付きボタン、４０・・・ＬＥＤ、４０ａ・・・第１ＬＥＤ、４０ｂ・・・第２ＬＥＤ、４０ｃ・・・第３ＬＥＤ、４０ｄ・・・第４ＬＥＤ、４２・・・ＬＥＤ配設領域、５０・・・メイン制御部、５２・・・入力受付部、５４・・・ＰＷＭ制御部、５４ａ・・・第１ＰＷＭ制御部、５４ｂ・・・第２ＰＷＭ制御部、５４ｃ・・・第３ＰＷＭ制御部、５４ｄ・・・第４ＰＷＭ制御部、５６・・・駆動部、５８・・・無線通信モジュール、６０・・・処理部、１００・・・入力部、１０２・・・画像処理部、１０４・・・位置推定部、１０６・・・点滅指示部、１０８・・・無線通信モジュール、１１０・・・アプリケーション処理部、１１２・・・出力部、１３０・・・フレーム画像取得部、１３２・・・現フレームバッファ、１３４・・・前フレームバッファ、１３６・・・差分画像生成部、１３８・・・２値化画像生成部、１４０・・・論理演算部、１４２・・・ＬＥＤ画像抽出部、２００・・・コントローラ、２１０・・・ＬＥＤ、２３０・・・下側操作ボタン、２３２ａ・・・回動軸、２４０・・・突起部、２５０・・・位置推定部、２６０・・・下側操作ボタン、２６２ａ・・・突起部、３００・・・３軸加速度センサ、３０２・・・ジャイロセンサ。
【図１】
2007289529.tif 000004
【図２】
2007289529.tif 000005
【図３】
2007289529.tif 000006
【図４】
2007289529.tif 000007
【図５】
2007289529.tif 000008
【図６】
2007289529.tif 000009
【図７】
2007289529.tif 000010
【図８】
2007289529.tif 000011
【図９】
2007289529.tif 000012
【図１０】
2007289529.tif 000013
【図１１】
2007289529.tif 000014
【図１２】
2007289529.tif 000015
【図１３】
2007289529.tif 000016
【図１４】
2007289529.tif 000017
【図１５】
2007289529.tif 000018
【図１６】
2007289529.tif 000019
【図１７】
2007289529.tif 000020
【図１８】
2007289529.tif 000021
【図１９】
2007289529.tif 000022
【図２０】
2007289529.tif 000023