(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-26
(45)【発行日】2023-07-04
(54)【発明の名称】情報処理装置、情報処理プログラム、情報処理システム、および情報処理方法
(51)【国際特許分類】
H03M 7/30 20060101AFI20230627BHJP
A63F 13/211 20140101ALI20230627BHJP
A63F 13/23 20140101ALI20230627BHJP
A63F 13/71 20140101ALI20230627BHJP
【FI】
H03M7/30 Z
A63F13/211
A63F13/23
A63F13/71
(21)【出願番号】P 2018172478
(22)【出願日】2018-09-14
【審査請求日】2021-07-19
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】ヤノス ブデ
(72)【発明者】
【氏名】フランソワ・ザビエ パスキエ
(72)【発明者】
【氏名】ジル プリカン
(72)【発明者】
【氏名】大泉 敏貴
(72)【発明者】
【氏名】竹中 紳二
【審査官】齊藤 晶
(56)【参考文献】
【文献】特開2011-192198(JP,A)
【文献】特開2018-084854(JP,A)
【文献】国際公開第2018/030258(WO,A1)
【文献】特開平09-297061(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 7/30
A63F 13/211
A63F 13/23
A63F 13/71
(57)【特許請求の範囲】
【請求項1】
慣性センサを有する情報処理装置であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値および前記第2の値に基づいて所定の計算を行うことにより、計算値を算出する算出手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値又は前記第2の値と、前記計算値とについて、前記計算値を圧縮することを含む第1方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値について、前記第1の値及び前記第2の値の少なくともいずれか一方を圧縮することを含む前記第1方法とは異なる第2方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、を備える、情報処理装置。
【請求項2】
慣性センサを有する情報処理装置であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、第3方法によって復元可能な第1方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、前記第3方法とは異なる第4方法によって復元可能な、前記第1方法とは異なる第2方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、を備える、情報処理装置。
【請求項3】
前記第1圧縮データ、又は、前記第2圧縮データを他の装置へ送信する送信手段を更に備える、請求項1又は2に記載の情報処理装置。
【請求項4】
前記第1判定手段は、少なくとも、前記第1の値及び前記第2の値の差分に基づいて、前記第1条件を満たすかどうかを判定する、請求項1から3の何れかに記載の情報処理装置。
【請求項5】
前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段をさらに備え、
前記第1判定手段は、
前記第1条件を満たすかどうかの判定として、さらに前記第1の値及び前記第2の値の平均と、前記第3の値との差分
が所定の条件を満たすか否かを判定する、請求項1から4の何れかに記載の情報処理装置。
【請求項6】
前記第1条件は、前記情報処理装置が静止しているときに満たされる条件である、請求項1から5の何れかに記載の情報処理装置。
【請求項7】
前記第1判定手段は、前記第1条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置の変化量が所定値未満か否かを判定する、請求項1から6の何れかに記載の情報処理装置。
【請求項8】
前記第1データ圧縮手段は、前記第1方法として、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1圧縮データを生成する、請求項1から7の何れかに記載の情報処理装置。
【請求項9】
前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段をさらに備え、
前記第1データ圧縮手段は、前記第1の値、前記第2の値及び前記第3の値に基づいて前記第3の値に係るデータを生成し、前記第3の値に係るデータをさらに含む前記第1圧縮データを生成する、請求項1から8の何れかに記載の情報処理装置。
【請求項10】
前記第1データ圧縮手段は、前記第1方法として、前記第2の値に係るデータのデータ量が前記第1の値に係るデータのデータ量よりも大きくなるようにし、さらに、前記第1の値に係るデータのデータ量よりも前記第3の値に係るデータのデータ量が小さくなるように、前記第1の値に係るデータ、前記第2の値に係るデータ及び前記第3の値に係るデータを含む前記第1圧縮データを生成する、請求項9に記載の情報処理装置。
【請求項11】
前記第1データ圧縮手段は、前記第2の値に基づいて前記第2の値に係るデータを設定し、前記第1の値と前記第2の値との差分に基づいて前記第1
の値に係るデータを設定し、前記第1の値及び前記第2の値の平均と前記第3の値との差分に基づいて前記第3の値に係るデータを設定することにより、前記第1圧縮データを生成する、請求項10に記載の情報処理装置。
【請求項12】
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、少なくとも前記第1の値および前記第2の値に基づいて、前記第1条件とは異なる第2条件を満たすかどうかを判定する第2判定手段をさらに備え、
前記第2データ圧縮手段は、前記第2判定手段によって前記第2条件を満たすと判定された場合に、前記第2圧縮データを生成する、請求項1から11の何れかに記載の情報処理装置。
【請求項13】
前記第2条件は、前記情報処理装置の姿勢又は位置が線形的に変化しているときに満たされる条件である、請求項12に記載の情報処理装置。
【請求項14】
前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段を更に備え、
前記第2判定手段は、前記第1の値、前記第2の値、及び、前記第3の値が線形性を有するか否かに基づいて、前記第2条件を満たすか否かを判定する、請求項12又は13に記載の情報処理装置。
【請求項15】
前記第2判定手段は、少なくとも、前記第1の値及び前記第2の値の平均と、前記第3の値との差分が所定範囲の場合に、前記第2条件を満たすと判定する、請求項14に記載の情報処理装置。
【請求項16】
前記第2判定手段は、
前記第1の値、前記第2の値、前記第3の値のうちの何れか1つの値を構成する複数の成分のうち、絶対値が最大となる成分を特定し、
前記第1の値、前記第2の値、前記第3の値のうちの前記何れか1つの値以外の2つの値について、前記特定した成分に対応する成分と、所定の値とを比較し、当該比較結果に基づいて、前記第2条件を満たすか否かを判定する、請求項14又は15に記載の情報処理装置。
【請求項17】
前記第2データ圧縮手段は、前記第2方法として、前記第1の値及び前記第2の値の平均に基づいて前記第3の値の係るデータを生成し、前記第3の値に係るデータを含む前記第2圧縮データを生成する、請求項14から16の何れかに記載の情報処理装置。
【請求項18】
前記第1の値、前記第2の値、及び前記第3の値のうちの少なくとも2つの値に基づいて、所定の基準値を算出する基準値算出手段をさらに備え、
前記第2データ圧縮手段は、前記第2方法として、前記基準値に基づいて前記第1の値、前記第2の値、前記第3の値のうちの少なくとも1つの値に係るデータを設定するとともに、当該少なくとも1つの値に係るデータを圧縮し、当該圧縮したデータを含む前記第2圧縮データを生成する、請求項14から17の何れかに記載の情報処理装置。
【請求項19】
前記第2データ圧縮手段は、前記第2方法として、前記第1の値に係るデータ及び前記第2の値に係るデータのデータ量を等しくするとともに、前記第1の値に係るデータ及び前記第2の値に係るデータのデータ量が、前記第3の値に係るデータのデータ量よりも大きくなるように、前記第1の値に係るデータ、前記第2の値に係るデータ及び前記第3の値に係るデータを圧縮する、請求項14から18の何れかに記載の情報処理装置。
【請求項20】
前記第2のタイミングは、前記第1のタイミングの後のタイミングであり、
前記第3のタイミングは、前記第1のタイミングと前記第2のタイミングとの間のタイミングである、請求項5、9から11、14から19のうちの何れかに記載の情報処理装置。
【請求項21】
前記第2判定手段によって前記第2条件を満たさないと判定された場合に、少なくとも前記第1の値に係るデータ及び前記第2の値に係るデータを、前記第1方法及び前記第2方法とは異なる第3方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第3圧縮データを生成する第3データ圧縮手段をさらに備える、請求項12から19の何れかに記載の情報処理装置。
【請求項22】
前記第1の値および前記第2の値は、複数の成分を含むデータであり、当該複数の成分は所定の関係を有し、
前記第1の値に係るデータおよび前記第2の値に係るデータは、前記複数の成分から少なくとも1つの成分を省略したデータであり、
前記第3圧縮データは、前記第1の値に係るデータの省略された成分を示す情報と、前記第2の値に係るデータの省略された成分を示す情報とを含む、請求項21に記載の情報処理装置。
【請求項23】
前記第1取得手段は、前記第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す前記第1の値を算出し、
前記第2取得手段は、前記第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す前記第2の値を算出する、請求項1から22の何れかに記載の情報処理装置。
【請求項24】
慣性センサを有する情報処理装置のプロセッサによって実行されるプログラムであって、前記プロセッサを、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値および前記第2の値に基づいて所定の計算を行うことにより、計算値を算出する算出手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値又は前記第2の値と、前記計算値とについて、前記計算値を圧縮することを含む第1方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値について、前記第1の値及び前記第2の値の少なくともいずれか一方を圧縮することを含む前記第1方法とは異なる第2方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段として、機能させる、プログラム。
【請求項25】
慣性センサを有する第1装置と、当該第1装置と通信する第2装置とを含む情報処理システムであって、
前記第1装置は、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記第1装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記第1装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値および前記第2の値に基づいて所定の計算を行うことにより、計算値を算出する算出手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値又は前記第2の値と、前記計算値とについて、前記計算値を圧縮することを含む第1方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値について、前記第1の値及び前記第2の値の少なくともいずれか一方を圧縮することを含む第2方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、
前記第1圧縮データ又は前記第2圧縮データを前記第2装置に送信する送信手段と、を備え、
前記第2装置は、
前記送信手段によって送信された前記第1圧縮データ又は前記第2圧縮データを受信する受信手段を備える、情報処理システム。
【請求項26】
慣性センサを有する情報処理装置において行われる情報処理方法であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得ステップと、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得ステップと、
前記第1の値および前記第2の値に基づいて所定の計算を行うことにより、計算値を算出する算出ステップと、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定ステップと、
前記第1判定ステップで前記第1条件を満たすと判定された場合に、前記第1の値又は前記第2の値と、前記計算値とについて、前記計算値を圧縮することを含む第1方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮ステップと、
前記第1判定ステップで前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値について、前記第1の値及び前記第2の値の少なくともいずれか一方を圧縮することを含む前記第1方法とは異なる第2方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮ステップと、を含む、情報処理方法。
【請求項27】
慣性センサを有する情報処理装置であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段と、を備える、情報処理装置。
【請求項28】
慣性センサを有する情報処理装置のプロセッサにおいて実行されるプログラムであって、前記プロセッサを、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値及び前記第2の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定手段と、
前記判定手段によって前記条件を満たすと判定された場合に、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段として機能させる、プログラム。
【請求項29】
慣性センサを有する第1装置と、当該第1装置と通信する第2装置とを含む情報処理システムであって、
前記第1装置は、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記第1装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記第1装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値及び前記第2の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定手段と、
前記判定手段によって前記条件を満たすと判定された場合に、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段と、
前記データ圧縮手段によって圧縮されたデータを前記第2装置に送信する送信手段と、を備え、
前記第2装置は、
前記送信手段によって送信された前記圧縮
されたデータを受信する受信手段を備える、情報処理システム。
【請求項30】
慣性センサを有する情報処理装置において行われる情報処理方法であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得ステップと、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得ステップと、
前記第1の値及び前記第2の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定ステップと、
前記判定ステップで前記条件を満たすと判定された場合に、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮ステップと、を含む、情報処理方法。
【請求項31】
慣性センサを有する情報処理装置であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第1の値を算出する第1算出手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第2の値を算出する第2算出手段と、
前記第1の値および前記第2の値に基づいて所定の計算を行うことにより、計算値を算出する第3算出手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値又は前記第2の値と、前記計算値とについて、前記計算値を圧縮することを含む第1方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値について、前記第1の値及び前記第2の値の少なくともいずれか一方を圧縮することを含む前記第1方法とは異なる第2方法による圧縮を行うことにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、
前記第1圧縮データ又は前記第2圧縮データを他の装置に送信する送信手段と、を備える、情報処理装置。
【請求項32】
慣性センサを有する情報処理装置であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第1の値を算出する第1算出手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第2の値を算出する第2算出手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、第3方法によって復元可能な第1方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、前記第3方法とは異なる第4方法によって復元可能な、前記第1方法とは異なる第2方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、
前記第1圧縮データ又は前記第2圧縮データを含むデータを他の装置に送信する送信手段と、を備える、情報処理装置。
【請求項33】
前記送信手段は、前記第1のタイミング又は前記第2のタイミングに関する時刻情報を含む前記データを前記他の装置に送信する、請求項31又は32に記載の情報処理装置。
【請求項34】
前記第1の値及び前記第2の値は、前記情報処理装置の姿勢を表すクォータニオンである、請求項31から33の何れかに記載の情報処理装置。
【請求項35】
慣性センサを有する情報処理装置のプロセッサによって実行されるプログラムであって、前記プロセッサを、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、第3方法によって復元可能な第1方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、前記第3方法とは異なる第4方法によって復元可能な、前記第1方法とは異なる第2方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段として、機能させる、プログラム。
【請求項36】
慣性センサを有する第1装置と、当該第1装置と通信する第2装置とを含む情報処理システムであって、
前記第1装置は、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記
第1装置の姿勢又は位置に関する第1の値を取得する第1取得手段と、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記
第1装置の姿勢又は位置に関する第2の値を取得する第2取得手段と、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定手段と、
前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、第3方法によって復元可能な第1方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮手段と、
前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、前記第3方法とは異なる第4方法によって復元可能な、前記第1方法とは異なる第2方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮手段と、
前記第1圧縮データ又は前記第2圧縮データを前記第2装置に送信する送信手段と、を備え、
前記第2装置は、
前記送信手段によって送信された前記第1圧縮データ又は前記第2圧縮データを受信する受信手段を備える、情報処理システム。
【請求項37】
慣性センサを有する情報処理装置において行われる情報処理方法であって、
第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する第1取得ステップと、
前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する第2取得ステップと、
前記第1の値及び前記第2の値に基づいて、第1条件を満たすかどうかを判定する第1判定ステップと、
前記第1判定ステップで前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、第3方法によって復元可能な第1方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する第1データ圧縮ステップと、
前記第1判定ステップで前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を、前記第3方法とは異なる第4方法によって復元可能な、前記第1方法とは異なる第2方法によって圧縮することにより、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する第2データ圧縮ステップと、を含む、情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、センサを備える情報処理装置、情報処理プログラム、情報処理システム、および情報処理方法に関する。
【背景技術】
【0002】
従来より、センサを備え、センサからのデータを圧縮して他の装置に送信する装置がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、センサを備える装置において当該センサにより検出されたデータを圧縮する方法に関して、圧縮されたデータを復元する場合にデータの正確性を保持するという観点で改善の余地があった。
【0005】
それ故、本発明の目的は、センサからの出力に基づくデータを圧縮して復元する場合にデータの正確性を保持することが可能な情報処理装置を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【0007】
本発明の情報処理装置は、慣性センサを有する情報処理装置であって、第1取得手段と、第2取得手段と、第1判定手段と、第1データ圧縮手段と、第2データ圧縮手段と、を備える。第1取得手段は、第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する。第2取得手段は、前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する。第1判定手段は、前記第1の値及び前記第2の値の少なくとも何れか一方に基づいて、第1条件を満たすかどうかを判定する。第1データ圧縮手段は、前記第1判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を第1方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成する。第2データ圧縮手段は、前記第1判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を前記第1方法とは異なる第2方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成する。
【0008】
上記によれば、装置の姿勢又は位置に関する値に基づいて、第1条件を満たすかどうかを判定し、第1条件を満たす場合には第1方法によりデータを圧縮し、第1条件を満たさない場合には第2方法によりデータを圧縮することができる。これにより、情報処理装置の状態に応じてデータの正確性を保持するための適切な圧縮方法を選択することができる。
【0009】
他の構成では、前記情報処理装置は、前記第1圧縮データ、又は、前記第2圧縮データを他の装置へ送信する送信手段を更に備えてもよい。
【0010】
上記によれば、圧縮したデータを他の装置に送信することができ、他の装置においてデータを復元することができる。
【0011】
他の構成では、前記第1判定手段は、少なくとも、前記第1の値及び前記第2の値の差分に基づいて、前記第1条件を満たすかどうかを判定してもよい。
【0012】
上記によれば、前記第1の値及び前記第2の値の差分に基づいて第1条件を満たすかどうかを判定することができる。
【0013】
他の構成では、前記情報処理装置は、前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段をさらに備えてもよい。前記第1判定手段は、前記第1の値及び前記第2の値の平均と、前記第3の値との差分に基づいて、前記第1条件を満たすかどうかを判定してもよい。
【0014】
上記によれば、前記第1の値及び前記第2の値の平均と、前記第3の値との差分を算出し、当該差分に基づいて第1条件を満たすかどうかを判定することができる。
【0015】
他の構成では、前記第1判定手段は、前記第1条件を満たすかどうかの判定として、前記情報処理装置が静止している状態か否かを判定してもよい。
【0016】
上記によれば、情報処理装置が静止している状態である場合に、第1方法によってデータを圧縮することができる。
【0017】
他の構成では、前記第1判定手段は、前記第1条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置の変化量が所定値未満か否かを判定してもよい。
【0018】
上記によれば、情報処理装置の姿勢又は位置の変化量が所定値未満である場合に、第1方法によってデータを圧縮することができる。
【0019】
他の構成では、前記第1データ圧縮手段は、前記第1方法として、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1圧縮データを生成してもよい。
【0020】
上記によれば、一方のデータ量が他方のデータ量よりも大きくなるように、前記第1圧縮データを生成するため、一方のデータについて失われる情報量を少なくすることができ、圧縮した場合にデータの正確性を保持することができる。
【0021】
他の構成では、前記情報処理装置は、前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段をさらに備えてもよい。前記第1データ圧縮手段は、前記第1の値、前記第2の値及び前記第3の値に基づいて設定される前記第3の値に係るデータを圧縮し、当該圧縮した第3の値に係るデータをさらに含む前記第1圧縮データを生成してもよい。
【0022】
上記によれば、第1の値および第2の値に基づいて、第3の値に係るデータを圧縮することができる。
【0023】
他の構成では、前記第1データ圧縮手段は、前記第1方法として、前記第2の値に係るデータのデータ量が前記第1の値に係るデータのデータ量よりも大きくなるように前記第1の値に係るデータ及び前記第2の値に係るデータを圧縮し、さらに、前記第1の値に係るデータよりもデータ量が小さくなるように前記第3の値に係るデータを圧縮し、圧縮した前記第1の値に係るデータ、前記第2の値に係るデータ及び前記第3の値に係るデータを含む前記第1圧縮データを生成してもよい。
【0024】
上記によれば、3つの値に係るデータについてそれぞれデータ量を異ならせることで、第2の値に係るデータについて失われる情報量を少なくすることができ、データの正確性を保持することができる。
【0025】
他の構成では、前記第1データ圧縮手段は、前記圧縮した第2の値に係るデータに前記第2の値を設定し、前記圧縮した第1の値に係るデータに前記第1の値と前記第2の値との差分を設定し、前記圧縮した第3の値に係るデータに、前記第1の値及び前記第2の値の平均と前記第3の値との差分を設定することにより、前記第1圧縮データを生成してもよい。
【0026】
上記によれば、第2の値に係るデータついては圧縮してそのまま第2の値を、第2の値に係るデータとして設定し、第1の値については、第2の値との差分を第1の値に係るデータとして設定し、第3の値については、上記差分を第3の値に係るデータとして設定することができる。これにより、全体としてデータ量を削減しつつ、3つの値を復元することができる。
【0027】
他の構成では、前記情報処理装置は、前記第1判定手段によって前記第1条件を満たさないと判定された場合に、少なくとも前記第1の値および前記第2の値に基づいて、前記第1条件とは異なる第2条件を満たすかどうかを判定する第2判定手段をさらに備えてもよい。前記第2データ圧縮手段は、前記第2判定手段によって前記第2条件を満たすと判定された場合に、前記第2圧縮データを生成してもよい。
【0028】
上記によれば、第1条件を満たさないと判定された場合に、第2条件を満たすかどうかを判定し、第2条件を満たす場合に第2方法によってデータを圧縮することができる。これにより、装置の状態に応じて適切な圧縮方法を選択することができる。
【0029】
他の構成では、前記第2判定手段は、前記第2条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置が線形的に変化しているか否かを判定してもよい。
【0030】
上記によれば、情報処理装置の姿勢又は位置が線形的に変化している場合に、第2方法によりデータを圧縮することができる。
【0031】
他の構成では、前記情報処理装置は、前記第1のタイミング及び前記第2のタイミングとは異なる第3のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第3の値を取得する第3取得手段を更に備えてもよい。前記第2判定手段は、前記第1の値、前記第2の値、及び、前記第3の値が線形性を有するか否かに基づいて、前記第2条件を満たすか否かを判定してもよい。
【0032】
上記によれば、第1の値、第2の値、第3の値が線形的に変化しているかどうかに基づいて、第2条件を満たすかどうかを判定することができる。
【0033】
他の構成では、前記第2判定手段は、少なくとも、前記第1の値及び前記第2の値の平均と、前記第3の値との差分が所定範囲の場合に、前記第2条件を満たすと判定してもよい。
【0034】
上記によれば、上記差分が所定範囲の場合に、第2方法によってデータを圧縮することができる。
【0035】
他の構成では、前記第2判定手段は、前記第1の値、前記第2の値、前記第3の値のうちの何れか1つの値を構成する複数の成分のうち、絶対値が最大となる成分を特定し、前記第1の値、前記第2の値、前記第3の値のうちの前記何れか1つの値以外の2つの値について、前記特定した成分に対応する成分と、所定の値とを比較し、当該比較結果に基づいて、前記第2条件を満たすか否かを判定してもよい。
【0036】
上記によれば、第1の値、第2の値、第3の値がそれぞれ複数の成分を有する場合、例えば、第3の値における最大成分を特定し、第1の値および第2の値の当該特定した成分と同じ成分と、所定の値との比較結果に基づいて、第2条件を満たすか否かを判定することができる。
【0037】
他の構成では、前記第2データ圧縮手段は、前記第2方法として、前記第1の値及び前記第2の値の平均に基づいて前記第3の値の係るデータを設定するとともに、当該第3の値に係るデータを圧縮し、当該圧縮した第3の値に係るデータを含む前記第2圧縮データを生成してもよい。
【0038】
上記によれば、第3の値についてそのまま値を第3の値に係るデータに設定するのではなく、第1の値及び第2の値の平均に基づいてデータを設定するため、第3の値に係るデータに設定される値を比較的小さくすることができる。
【0039】
他の構成では、前記情報処理装置は、前記第1の値、前記第2の値、及び前記第3の値のうちの少なくとも2つの値に基づいて、所定の基準値を算出する算出手段をさらに備えてもよい。前記第2データ圧縮手段は、前記第2方法として、前記基準値に基づいて前記第1の値、前記第2の値、前記第3の値のうちの少なくとも1つの値に係るデータを設定するとともに、当該少なくとも1つの値に係るデータを圧縮し、当該圧縮したデータを含む前記第2圧縮データを生成してもよい。
【0040】
上記によれば、例えば、第3の値についてそのまま値を第3の値に係るデータに設定するのではなく、第1の値及び第2の値に基づく基準値に基づいてデータを設定するため、第3の値に係るデータに設定される値を比較的小さくすることができる。
【0041】
他の構成では、前記第2データ圧縮手段は、前記第2方法として、前記第1の値に係るデータ及び前記第2の値に係るデータのデータ量を等しくするとともに、前記第1の値に係るデータ及び前記第2の値に係るデータのデータ量が、前記第3の値に係るデータのデータ量よりも大きくなるように、前記第1の値に係るデータ、前記第2の値に係るデータ及び前記第3の値に係るデータを圧縮してもよい。
【0042】
上記によれば、第1の値に係るデータ及び第2の値に係るデータについて圧縮した場合のデータ量を比較的大きくすることにより、失われる情報量を小さくすることができ、データの正確性を保持することができる。
【0043】
他の構成では、前記第2のタイミングは、前記第1のタイミングの後のタイミングであり、前記第3のタイミングは、前記第1のタイミングと前記第2のタイミングとの間のタイミングであってもよい。
【0044】
上記によれば、第1のタイミング、第2のタイミング、第3のタイミングの順に慣性センサから出力された情報に基づいて、条件を判定し、データを圧縮することができる。
【0045】
他の構成では、前記情報処理装置は、第3データ圧縮手段をさらに備えてもよい。前記第3データ圧縮手段は、前記第2判定手段によって前記第2条件を満たさないと判定された場合に、少なくとも前記第1の値に係るデータ及び前記第2の値に係るデータを、前記第1方法及び前記第2方法とは異なる第3方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第3圧縮データを生成してもよい。
【0046】
上記によれば、第2条件を満たさないと判定された場合に、さらに第3方法によりデータを圧縮することができる。
【0047】
他の構成では、前記第1の値および前記第2の値は、複数の成分を含むデータであり、当該複数の成分は所定の関係を有してもよい。前記第1の値に係るデータおよび前記第2の値に係るデータは、前記複数の成分から少なくとも1つの成分を省略したデータであり、前記第3圧縮データは、前記第1の値に係るデータの省略された成分を示す情報と、前記第2の値に係るデータの省略された成分を示す情報とを含んでもよい。
【0048】
上記によれば、第3方法による圧縮では、第1の値と第2の値とで省略する成分を異ならせることができる。
【0049】
他の構成では、前記情報処理装置は、前記第1のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第1の値を算出する第1算出手段と、前記第2のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第2の値を算出する第2算出手段と、前記第1の値及び前記第2の値を含むデータを他の装置に送信する送信手段と、をさらに備えてもよい。
【0050】
上記によれば、情報処理装置において慣性センサからの出力に基づいて、装置の姿勢又は位置を表す値を算出し、当該値を圧縮して他の装置に送信することができる。
【0051】
また、他の発明に係る情報処理装置は、慣性センサを有する情報処理装置であって、第1取得手段と、第2取得手段と、データ圧縮手段とを備える。第1取得手段は、第1のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第1の値を取得する。第2取得手段は、前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第2の値を取得する。データ圧縮手段は、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第1の値に係るデータ及び前記第2の値に係るデータのうちの少なくとも一方を圧縮する。
【0052】
上記によれば、第1の値に係るデータ及び第2の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるようにデータを圧縮するため、一方のデータについて失われる情報量を少なくすることができ、データの正確性を保持することができる。
【0053】
他の発明に係る情報処理装置は、慣性センサを有する情報処理装置であって、第1算出手段と、第2算出手段と、送信手段とを備える。第1算出手段は、第1のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す第1の値を算出する。第2算出手段は、前記第1のタイミングとは異なる第2のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す第2の値を算出する。送信手段は、前記第1の値及び前記第2の値を含むデータを他の装置に送信する。
【0054】
上記によれば、装置において慣性センサからの出力に基づいて装置の姿勢又は位置を表す値を算出し、他の装置に送信することができる。これにより、他の装置において、情報処理装置の姿勢を正確に認識することができる。
【0055】
他の構成では、前記情報処理装置は、前記第1の値及び前記第2の値のうちの少なくとも何れか一方を圧縮する圧縮手段をさらに備えてもよい。前記送信手段は、前記圧縮手段によって圧縮された前記データを前記他の装置に送信してもよい。
【0056】
上記によれば、情報処理装置は、第1の値及び第2の値のうちの少なくとも何れか一方を圧縮して他の装置に送信することができる。
【0057】
他の構成では、前記送信手段は、前記第1のタイミング又は前記第2のタイミングに関する時刻情報を含む前記データを前記他の装置に送信してもよい。
【0058】
上記によれば、さらに時刻情報を他の装置に送信することができる。
【0059】
他の構成では、前記第1の値及び前記第2の値は、前記情報処理装置の姿勢を表すクォータニオンであってもよい。
【0060】
上記によれば、姿勢を表すクォータニオンを情報処理装置で算出して、他の装置に送信することができる。
【0061】
他の構成では、前記情報処理装置は、判定手段と、第1データ圧縮手段と、第2データ圧縮手段とを更に備えてもよい。判定手段は、前記第1の値及び前記第2の値の少なくとも何れか一方に基づいて、第1条件を満たすかどうかを判定してもよい。第1データ圧縮手段は、前記判定手段によって前記第1条件を満たすと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を第1方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第1圧縮データを生成してもよい。第2データ圧縮手段は、前記判定手段によって前記第1条件を満たさないと判定された場合に、前記第1の値及び前記第2の値の少なくともいずれか一方を前記第1方法とは異なる第2方法によって圧縮し、前記第1の値に係るデータ及び前記第2の値に係るデータを含む第2圧縮データを生成してもよい。
【0062】
上記によれば、情報処理装置の状態に応じて適切な圧縮方法を選択することができる。
【0063】
また、他の発明は、上記情報処理装置において実行されるプログラムであってもよいし、情報処理方法であってもよいし、上記情報処理装置と他の装置とを含む情報処理システムであってもよい。
【発明の効果】
【0064】
本発明によれば、センサからのデータを圧縮して復元する場合にデータの正確性を保持することができる。
【図面の簡単な説明】
【0065】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図3】本体装置2と右コントローラ4との内部構成の一例を示すブロック図
【
図4】姿勢データが右コントローラ4から本体装置2に送信されるときの処理の流れを示す図
【
図8A】モード2が選択された場合に生成される第1圧縮データのデータ構造の一例を示す図
【
図8B】モード1が選択された場合に生成される第2圧縮データのデータ構造の一例を示す図
【
図8C】モード0が選択された場合に生成される第3圧縮データのデータ構造の一例を示す図
【
図9】モード2で姿勢データを圧縮した場合の圧縮前の姿勢データと、圧縮された姿勢データが本体装置に送信されて本体装置に応じて復元された後の姿勢データとの比較を示す図
【
図10】コントローラに記憶されるデータの一例を示す図
【
図11】コントローラにおいて行われる処理の一例を示すフローチャート
【
図12】本体装置2において行われる処理の一例を示すフローチャート
【
図13】コントローラの姿勢の変化と選択されるモードの一例を示す図
【発明を実施するための形態】
【0066】
以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システム1の一例は、本体装置2と左コントローラ3および右コントローラ4とを含む。
【0067】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、情報処理システム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、本体装置2が生成した画像を表示するためのディスプレイを備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための入力部、コントローラの位置や姿勢を検出するための慣性センサ等を備える情報処理装置である。
【0068】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0069】
図3は、本体装置2と右コントローラ4との内部構成の一例を示すブロック図である。なお、
図3では、右コントローラ4の姿勢データの送信に関する部分のみを示し、その他の部分については省略している。また、以下では、右コントローラ4の構成のみを説明し左コントローラ3の構成については省略するが、左コントローラ3の構成も右コントローラ4と同様である。
【0070】
図3に示すように、本体装置2は、プロセッサ21と、DRAM22と、本体装置2がコントローラと通信するためのコントローラ通信部23と、フラッシュメモリ24とを備える。また、本体装置2は、左コントローラ3と有線通信を行うための左側端子25と、右コントローラ4と有線通信を行うための右側端子26とを備える。また、図示は省略するが、本体装置2は、バッテリを備える。プロセッサ21は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ21は、記憶部(具体的には、フラッシュメモリ24等の内部記憶媒体、あるいは、本体装置2のスロットに装着される外部記憶媒体等)に記憶されるプログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0071】
コントローラ通信部23は、右コントローラ4との間で、例えば、Bluetooth(登録商標)の規格に従った無線通信を行う。同様に、コントローラ通信部23は、左コントローラ3との間で、例えば、Bluetooth(登録商標)の規格に従った通信を行う。なお、本体装置2とコントローラとは、他の規格(例えば、無線LAN)に従って無線通信してもよい。
【0072】
本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の場合、本体装置2は、コントローラ通信部23を介して左コントローラ3及び右コントローラ4と無線通信する。例えば、本体装置2は、左コントローラ3及び/又は右コントローラ4から姿勢データ(後述する)を受信し、受信した姿勢データに基づいた各種処理(例えば、ゲーム画像を表示するための仮想カメラの姿勢制御)を行う。
【0073】
図3に示すように、右コントローラ4は、処理部41と、メモリ42と、慣性センサ43と、フラッシュメモリ44と、通信制御部45と、端子46とを備える。なお、これらの他にも右コントローラ4は、複数のボタン及びアナログスティック(
図1参照)等の入力部を備える。
【0074】
処理部41は、バスを介してメモリ42、慣性センサ43、フラッシュメモリ44、通信制御部45、及び、端子46に接続される。詳細は後述するが、処理部41は、慣性センサ43からの出力に基づいて、右コントローラ4の姿勢を算出する。
【0075】
また、フラッシュメモリ44は、右コントローラ4を制御するファームウェア、後述する姿勢データを算出するための制御プログラム等を記憶する。
【0076】
通信制御部45は、端子46を介した有線通信と、端子46を介さない無線通信との両方で本体装置2と通信を行うことが可能である。すなわち、
図1に示すように右コントローラ4が本体装置2に装着されている場合、通信制御部45は、端子46を介して本体装置2と通信を行う。また、
図2に示すように右コントローラ4が本体装置2から外されている場合、通信制御部45は、本体装置2(具体的には、コントローラ通信部23)との間で無線通信を行う。
【0077】
例えば、
図2に示すように本体装置2に右コントローラ4が装着されていない場合、処理部41によって算出された右コントローラ4の姿勢を表す姿勢データは、無線通信により本体装置2に送信される。あるいは、
図1に示すように本体装置2に右コントローラ4が装着されている場合、姿勢データは、端子46を介して有線通信により本体装置2に送信される。また、通信制御部45は、各入力部(具体的には、各ボタン、アナログスティック等)からの操作情報を取得し、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。
【0078】
本体装置2と右コントローラ4との間の通信は、所定時間に1回の割合で繰り返し行われる。この本体装置2と右コントローラ4との間の1回の通信では、各入力部に対する操作に応じた操作データ、及び、慣性センサ43からの出力に応じた姿勢データが、右コントローラ4から本体装置2に送信される。なお、操作データおよび姿勢データはそれぞれ別のタイミングで送信されてもよい。例えば、あるタイミングにおける本体装置2と右コントローラ4との間の通信において、操作データおよび姿勢データのうちの何れか一方のデータが右コントローラ4から本体装置2に送信され、別のタイミングにおける当該通信において、他方のデータが右コントローラ4から本体装置2に送信されてもよい。
【0079】
慣性センサ43は、例えば6軸センサである。具体的には、慣性センサ43は、加速度センサと角速度センサとを含む。加速度センサは、所定の3軸(例えば、
図1に示すxyz軸)方向に沿った加速度の大きさを検出する。角速度センサは、所定の3軸(例えば、
図1に示すxyz軸)回りの角速度を検出する。処理部41は、慣性センサ43からの角速度値に基づいて、右コントローラ4の姿勢を算出する。算出された姿勢に応じた姿勢データは、圧縮されて本体装置2に送信される。なお、処理部41は、慣性センサ43からの角速度値に加えて、加速度値に基づいて、コントローラの姿勢を算出してもよい。
【0080】
なお、
図3に示す構成は単なる一例であり、物理的な構成は
図3に示す構成とは異なってもよい。例えば、通信制御部45と処理部41とメモリ42とが一体として構成されてもよい。また、コントローラ及び/又は本体装置2は、他のデバイス、センサ、装置を備えてもよい。また、
図3では、コントローラは、加速度センサと角速度センサとを含む慣性センサ43を備えるものとしたが、加速度センサと角速度センサとは別々のセンサであってもよい。
【0081】
(姿勢データの本体装置2への送信)
次に、コントローラにおいて姿勢データが算出され、算出された姿勢データが本体装置2に送信される場合の処理について説明する。
図4は、姿勢データが右コントローラ4から本体装置2に送信されるときの処理の流れを示す図である。
【0082】
図4に示すように、まず、慣性センサ43からの加速度値および角速度値が、所定の周波数でサンプリングされる。例えば、加速度値および角速度値のサンプリング周波数は800Hzであってもよい。次に、サンプリングされた角速度値に基づいて、右コントローラ4の姿勢が算出される。具体的には、慣性センサ43から出力された角速度値を積分することにより、右コントローラ4の姿勢を表すクォータニオン「q」が算出される。この姿勢の算出は、処理部41によって行われる。
【0083】
コントローラの姿勢を表すクォータニオン「q」は、複素数i、j、kを用いて以下の式1によって表される。
q=w+xi+yj+zk (式1)
【0084】
ここで、i、j、kは以下の関係を満たす。
i2=j2=k2=ijk=-1、
ij=-ji=k、jk=-kj=i、ki=-ik=j
【0085】
また、x、y、zは回転軸を表し、wは回転角を表す。クォータニオンqは、4つの成分(w、x、y、z)を有するベクトルとして見なされる。ここでqのノルムは1である。すなわち、w、x、y、zは以下の式2を満たす。
w2+x2+y2+z2=1 (式2)
【0086】
式2から、4つの成分のうちの3つの成分をコントローラから本体装置2に送信すれば、本体装置2は、残り1つの成分を復元することができる。このため、本実施形態では、4つの成分のうちの1の成分を省略して、3つの成分をコントローラから本体装置2に送信する。本実施形態では、省略する成分は、絶対値が最も大きな成分であるとする。コントローラから本体装置2に送信される情報には、省略された成分を示す情報が含まれる。これにより、コントローラから本体装置2に送信するデータ量を削減することができるとともに、本体装置2において、3つの成分を有するベクトルからコントローラの姿勢を表すqを算出することができる。なお、4つの成分のうちの省略する成分は絶対値が最も大きな成分でなくてもよい。
【0087】
以下では、コントローラの姿勢を表す4つの成分を有するクォータニオンを「q」と表記する。また、4つの成分のうちの1つを省略した、3つの成分を有するベクトルを「f」と表記することがある。「f」は、コントローラの姿勢を表す姿勢データと言える。
【0088】
なお、式2から明らかなように、クォータニオンqの各成分w、x、y、zの絶対値はそれぞれ「1」以下の値であるが、本実施形態では、ベクトルfの各成分については、整数で表現する。例えば、qの各成分に10のn乗をかけた値を、fの各成分として定義する。
【0089】
また、時刻tにおけるコントローラの姿勢を表すq(t)は、以下の漸化式を用いて算出される。
q(t)=1/2×q(t-1)*ω×Δt (式3)
ここで、ωは慣性センサ43からの角速度値である。Δtは、サンプリング周期である。
【0090】
本実施形態では、式3によって算出されるクォータニオンqの各成分(w、x、y、z)は、それぞれ、32bitで表現されるデータである。
【0091】
姿勢を表すqが算出されると、間引き処理が行われる。姿勢算出処理では800Hz(すなわち、1秒間で800回)でqが算出されるところ、間引き処理では、例えば200Hzでqが間引かれる。すなわち、姿勢算出処理で算出された時系列に連続する4つのqのうちの1つが、間引き処理において抽出される。
【0092】
次に、モード選択が行われる。モード選択は、姿勢データを複数のモードのうちのどのモードで圧縮して本体装置2に送信するかを選択する処理である。各モードによって、姿勢データの圧縮方法が異なる。なお、本実施形態では、モード選択は、コントローラが本体装置2から外された状態(すなわち、コントローラと本体装置2とが無線で接続された状態)において行われる。コントローラが本体装置2に装着された状態でもモード選択が行われてもよい。
【0093】
モード選択において複数のモードのうちの何れかのモードが選択された場合、選択されたモードに応じて姿勢データが圧縮され、圧縮された姿勢データを含むパケットが通信制御部45によって生成される。そして、生成されたパケットが無線で本体装置2に送信され、本体装置2において当該パケットが受信される。本外装置2は、受信したパケットから圧縮された姿勢データを取り出し、当該データを伸張して、クォータニオンqを復元し、復元したqに基づいて、所定の情報処理を行う。
【0094】
(各モードの詳細)
次に、各モードの詳細について説明する。
図5は、複数のモードの一例を示す図である。
【0095】
図5に示すように、複数のモードには、モード2と、モード1と、モード0とがある。間引き処理によって取得された3つのクォータニオンに基づいて、条件が満たされるか否かが判定され、その判定結果に応じてモードが選択される。以下では、取得された3つのクォータニオンを、取得された順に「q0」、「q1」、「q2」と表記する。すなわち、時点t0における慣性センサ43からの出力に基づいて取得されたqを「q0」と表記し、時点t0の後の時点t1における慣性センサ43からの出力に基づいて取得されたqを「q1」と表記し、時点t1の後の時点t2における慣性センサ43からの出力に基づいて取得されたqを「q2」と表記する。また、「q0」、「q1」、「q2」のそれぞれ対応する、3つの成分で表されるベクトルfを、「f0」、「f1」、「f2」とそれぞれ表記する。
【0096】
具体的には、まず、モード2を適用可能か否かが判定され、モード2を適用可能と判定された場合には、モード2が選択される。モード2を適用不可能と判定された場合には、モード1を適用可能か否かが判定され、モード1を適用可能と判定された場合には、モード1が選択される。そして、モード1を適用不可能と判定された場合には、モード0が選択される。以下、各モードおよび各モードが適用されるための条件について説明する。
【0097】
(モード2の説明)
モード2は、コントローラが静止している状態のときに選択されるモードである。ここで、「コントローラが静止している状態」とは、コントローラの慣性センサ43が検出する角速度値が「0」、又は、静止しているとみなせる程度に微小な値をとなる状態をいう。すなわち、「コントローラが静止している状態」とは、少なくともその時点において、コントローラが完全に静止している、または、ほぼ静止していると見なせる程に、慣性センサ43からの角速度値が「0」又は微小な値を示す状態である。
【0098】
モード2は、第1条件が満たされている場合に選択される。第1条件が満たされることは、以下の式4が成立し、かつ、式5が成立することである。
f2-f0<所定値 (式4)(第1条件A)
Δf1<所定値 (式5)(第1条件B)
【0099】
ここで、Δf1は、以下の式6によって表される。
Δf1=f1-(f2+f0)/2 (式6)
【0100】
図6は、式4を概念的に表した図である。すなわち、モード2を選択するための第1条件の1つ(第1条件A)は、f0およびf2の差分が所定値未満であることである。
図6では、f0、f1、f2の1つの成分を表しており、その1つの成分が所定値未満であることを示している。実際には、f0、f1、f2は、それぞれ3つの成分を有するベクトルであり、「f2-f0」は、ベクトルf2とベクトルf0との差分ベクトルである。したがって、式4は、この差分ベクトル「f2-f0」のノルムが所定値未満であることを示している。式4(第1条件A)が成立しない場合は、モード2は選択されず、モード1を選択するための第2条件が成立するか否かが判定される。第2条件については後述する。
【0101】
第1条件A(式4)が成立している場合、次に、第1条件Bが成立しているか否かが判定される。
図7は、第1条件Bを概念的に表した図である。なお、
図7も、
図6と同様に、f0、f1、f2の1つの成分を表している。具体的には、コントローラは、f2及びf0の平均を算出し、f1と当該平均との差分(差分ベクトル)をΔf1として算出する。そして、コントローラは、Δf1のノルムが所定値未満であるか否かを判定する。ここで、第1条件Bの所定値は、第1条件Aの所定値と異なっていてもよいし、同じであってもよい。第1条件Aを満たすと判定され、かつ、第1条件Bを満たすと判定された場合、モード2が選択される。
【0102】
第1条件Aが成立するということは、f0とf2の各成分の値が近いということである。また、第1条件Bが成立するということは、中央のサンプルf1が、f0及びf2の平均と離れすぎていないということである。このことは、3つのサンプルf0、f1、f2の各成分の値を
図7に示すようなグラフにプロットした場合に、3つのサンプルが横方向にほぼ直線上に並ぶことを意味する。すなわち、第1条件Aが成立し、かつ、第1条件Bが成立する場合、少なくともこの期間においては、コントローラの姿勢がほぼ変化していない状態を意味し、コントローラが静止している状態であることを意味する。
【0103】
モード2が選択された場合、f0、f1、f2が圧縮され、当該圧縮されたデータを含む第1圧縮データが生成される。
図8Aは、モード2が選択された場合に生成される第1圧縮データのデータ構造の一例を示す図である。
【0104】
図8Aに示すように、モード2が選択されたときに生成される第1圧縮データ210は、タイムスタンプ(TS)200と、モード情報(M)201と、省略情報(D)202とを含む。
【0105】
タイムスタンプ200は時刻情報である。タイムスタンプ200は、3つのクォータニオンq0、q1、q2のうちの何れか算出されたときの時刻情報であってもよい。また、タイムスタンプ200は、角速度値(q0、q1、q2のうちの何れかの算出に用いられた角速度値)が取得されたときの時刻情報であってもよい。
【0106】
モード情報201は、3つのモードのうちの何れのモードで姿勢データが圧縮されたかを示す情報である。モード2が選択された場合には、モード情報201として、例えば、「2」が設定される。
【0107】
また、省略情報202は、クォータニオンqの4つの成分のうち、どの成分が省略されているかを示す情報である。なお、モード2では、コントローラが静止している状態であり、q0、q1、q2はそれぞれ大きく離れていない。このため、省略される成分(絶対値が最も大きな成分)は、q0、q1、q2で共通である。したがって、モード2では、3つのf0、f1、f2に共通する1つの省略情報202が第1圧縮データ210に含められ、本体装置2に送信される。
【0108】
また、第1圧縮データ210は、Δf0(3成分)を格納する姿勢データ部203と、Δf1(3成分)を格納する姿勢データ部204と、f2(3成分)を格納する姿勢データ部205とを含む。
【0109】
具体的には、f2の各成分に24bitが割り当てられる。すなわち、上述のようにq及びfの各成分は32ビットのデータで表されるが、f2の各成分は、32ビットから24ビットに圧縮される。
【0110】
したがって、f2に割り当てられるデータサイズ(姿勢データ部205のビット数)は、24ビット×3成分=72ビットである。例えば、q2の4つの成分w、x、y、zのうち、wの絶対値が最も大きい場合、wが省略される(すなわち、圧縮される。)。このためx、y、z成分に対して、それぞれ24ビットが割り当てられ、これら3つの成分の値が、コントローラの姿勢を表す姿勢データf2として、本体装置2に送信される。
【0111】
また、f2とf0との差分(ベクトルf2とベクトルf0との差分ベクトル)がΔf0として算出され、算出されたΔf0の各成分には、13ビットが割り当てられる。具体的には、Δf0には、13ビット×3成分=39ビットが割り当てられる。例えば、q0の4つの成分w、x、y、zのうちwが省略される場合、Δf0のx成分、y成分、z成分に、それぞれ13ビットが割り当てられる。本体装置2は、コントローラからΔf0及びf2を受信し、Δf0及びf2に基づいて、f0の各成分(例えば、x成分、y成分、z成分)を算出する。そして、本体装置2は、q0の省略された成分(例えば、w成分)を、上記式2に基づいて算出することにより、q0を復元する。
【0112】
また、式6に基づいて算出されるΔf1の各成分に対しては、4ビットが割り当てられる。具体的には、Δf1には、4ビット×3成分=12ビットが割り当てられる。本体装置2は、コントローラから受信したΔf1、f2、及びΔf0に基づいて、f1の各成分を算出する。そして、本体装置2は、算出したf1の3つの成分に基づいて、省略された成分を算出し、q1を復元する。
【0113】
図8Aに示すモード2の第1圧縮データ210の姿勢データ部(Δf0、Δf1、及びf2)のデータサイズは、合計で13×3+4×3+24×3=123ビットである。一方、圧縮しない場合の姿勢データのサイズは、クォータニオンqの各成分が32ビットで表される場合は、32ビット×3成分×3=288ビットである。このため、モード2の圧縮によって、3つのモードのうちの何れのモードが選択されているかを示すモード情報201を付加する必要があるものの、このモード情報201は2ビットで表されるため、全データサイズとしては圧縮しない場合に比べてデータサイズを削減することができる。
【0114】
図8Aに示す第1圧縮データ210に所定のヘッダが付加されてパケットが生成され、コントローラから本体装置2に送信される。本体装置2は、第1圧縮データ210を含むパケットを受信し、受信したΔf0、Δf1、及びf2から、f0、f1、f2を復元し、さらに式2と省略情報202とに基づいて、q0、q1、q2を復元する。
【0115】
モード2では、Δf0及びΔf1よりもf2により多くのビットが割り当てられる。このため、f2については圧縮前のf2(32ビット)に近い情報量で本体装置2に送信することができ、コントローラの姿勢に関するより正確な情報を本体装置2に送信することができる。例えば、姿勢データの総データ量をモード2の圧縮方法による総データ量(123ビット)以下に抑える前提で、f0、f1、f2についてそれぞれ同じビット数で表す場合、後述するモード0のように、f0、f1、f2をそれぞれ13ビットで表すことになる(13ビット×3成分×3=117、14ビット×3成分×3=126であるため)。この場合、f2(f1及びf0も)は32ビットから13ビットに圧縮されるため、より多くの情報が失われてしまう。そうすると、この圧縮されたf0、f1、f2に基づいて、本体装置2においてコントローラの姿勢を正確に復元することができない。例えば、コントローラの姿勢と一致するように本体装置2においてゲームオブジェクトを表示する場合、実際にはコントローラが静止しているにもかかわらず、本体装置2がコントローラの姿勢を正確に復元できないため、ゲームオブジェクトが僅かに揺れているように表示される場合がある。しかしながら、モード2の圧縮方法では、f2により多くのビットを割り当てるため、f2を圧縮したときに失われる情報量をより小さくすることができる。このため、本体装置2においてコントローラの姿勢をより正確に復元することができる。
【0116】
また、モード2では、コントローラが静止している状態で選択されるため、f2とf0との差分であるΔf0については、各成分の値は比較的小さな値となる。このため、比較的小さなデータ量(具体的には13ビット)であっても、この比較的小さな値を表現することができる。
【0117】
同様に、モード2では、f1をそのまま本体装置2に送信するのではなく、f1と、f2及びf0の平均との差分であるΔf1が、本体装置2に送信される。モード2では、コントローラが静止している状態で選択されるため、このΔf1については、各成分の値は比較的小さな値となる。このため、比較的小さなデータ量(具体的には4ビット)であっても、この比較的小さな値を表現することができる。
【0118】
(モード1の説明)
図5に戻り、モード1は、コントローラの姿勢が線形的に変化している状態(姿勢が急激に変化していない状態)のときに選択されるモードである。ここでコントローラの姿勢が線形的に変化している状態とは、q0、q1、q2の各成分がほぼ同じ割合で増加しているか、減少している状態である。すなわち、例えば
図7において、f0、f1、f2が斜め方向にほぼ一直線上に並んだ状態である。
【0119】
具体的には、モード1は、上記第1条件(第1条件Aおよび第1条件B)が成立していない場合において、第2条件が成立しているときに選択されるモードである。第2条件が成立することは、次に示す第2条件Aが成立し、かつ、第2条件Bが成立することである。
【0120】
すなわち、第2条件の1つ(第2条件Aと表記する)は、q1の最大成分(絶対値が最大となる成分)と同じq0およびq2の成分が所定値よりも大きいことである。例えば、q1の最大成分が「x」であった場合に、q0、q2のx成分が所定値(0より大きな所定値。例えば、「0.5」)よりも大きい場合、第2条件Aが成立する。この第2条件Aは、圧縮対象となるqの各成分が1未満であることを担保するための条件である。例えば、q1、q0、q2の最大成分がxである場合、q1、q0、q2のw、y、z成分が圧縮対象となる(w、y、z成分を有するベクトルf1、f0、f2が圧縮対象となる)。q1、q0、q2の最大成分が所定値より大きいということは、残りの成分は、式2から「1」未満となる。仮に、q1、q0、q2の最大成分が0の場合、残りの成分は「1」(又は「1」近辺)になる場合がある。「1」又は「1」近辺の値を圧縮する場合、圧縮精度が低くなる可能性がある。したがって、ここでは、圧縮精度を担保するため、第2条件Aが成立するか否かが判定される。なお、実際には、圧縮されるデータはqの各成分ではなく、qを整数化したfの各成分であるが、ここでは圧縮対象をqの各成分として説明している。第2条件Aが成立していない場合は、モード1は選択されず、モード0が選択される。
【0121】
第2条件Aが成立していると判定された場合、次に第2条件Bが成立しているか否かが判定される。第2条件Bは、式6で算出されるΔf1の各成分を8ビットで表現できることである。具体的には、第2条件Bは、Δf1の各成分の値が-128~127の範囲内であることである。Δf1の各成分が8ビットで表現できるということは、Δf1の各成分は比較的小さな値であると言える。このことは、各成分に関して、中央のサンプルf1の値が、f0とf2との平均値から離れすぎていないことを意味する。つまり、第2条件(第2条件A及び第2条件B)が成立するか否かの判定は、f0、f1、f2が線形性を有するか否かの判定と言うことができる。
【0122】
Δf1の各成分を8ビットで表現できる場合は、モード1が選択される。モード1が選択された場合、上記モード2とは異なる圧縮方法でf0、f1、f2が圧縮され、第2圧縮データが生成される。
【0123】
図8Bは、モード1が選択された場合に生成される第2圧縮データのデータ構造の一例を示す図である。
図8Aと同様に、モード1が選択された場合に生成される第2圧縮データ220は、タイムスタンプ200と、モード情報201と、省略情報202とを含む。モード1が選択された場合には、モード情報201として、例えば、「1」が設定される。
【0124】
また、第2圧縮データ220は、f0(3成分)を格納する姿勢データ部203と、Δf1(3成分)を格納する姿勢データ部204と、f2(3成分)を格納する姿勢データ部205とを含む。
【0125】
f0およびf2の各成分は、それぞれ32ビットから16ビットに圧縮される。具体的には、モード1では、f2には16ビット×3成分=48ビットが割り当てられ、f0にも16ビット×3成分=48ビットが割り当てられる。
【0126】
また、f1に関して、コントローラは、上記式6に基づいて算出されたΔf1の各成分について、それぞれ32ビットから8ビットに圧縮する。すなわち、Δf1に対しては、8ビット×3成分=24ビットが割り当てられる。
【0127】
図8Bに示すように、モード1の場合も第2圧縮データ220にはf0、Δf1、f2に共通の省略情報202が含まれる。モード1は、コントローラの姿勢が線形的に変化している状態である。このため、q0、q1、q2について、4つの成分のうち絶対値が最大となる成分は共通しているため、省略情報202は、f0、Δf1、f2で共通である。したがって、モード1においても、モード2と同様に、3つのf0、f1、f2に共通する1つの省略情報202を本体装置2に送信する。
【0128】
なお、
図8Bに示すモード1の第2圧縮データ220の姿勢データ部(f0、Δf1、f2)のデータサイズは、16×3+8×3+16×3=120ビットである。
【0129】
(モード0の説明)
図5に戻り、モード0は、第1条件(第1条件Aおよび第1条件B)及び第2条件(第2条件Aおよび第2条件B)が成立していないときに選択されるモードである。すなわち、モード2が選択されず、かつ、モード1も選択されなかった場合に、モード0が選択される。モード0は、コントローラが任意の状態(例えば、コントローラの姿勢が短時間で急激に変化している状態)のときに選択される。モード0が選択された場合、f0、f1、f2が圧縮され、第3圧縮データが生成される。
【0130】
図8Cは、モード0が選択された場合に生成される第3圧縮データのデータ構造の一例を示す図である。
図8Cに示すように、モード0が選択された場合の第3圧縮データ230は、モード2及びモード1と同様に、タイムスタンプ200と、モード情報201とを含む。モード0が選択された場合には、モード情報201として、例えば、「0」が設定される。
【0131】
図8Cに示すように、モード0の第3圧縮データ230には、省略情報202aと、省略情報202bと、省略情報202cとが含まれる。省略情報202aは、f0に関する省略情報であり、q0の4つの成分のうちの何れの成分が省略されているかを示す情報である。例えば、4つの成分w、x、y、zのうちのw成分が省略されている場合は省略情報202aに「0」が格納され、x成分が省略されている場合は省略情報202aに「1」が格納されてもよい。同様に、省略情報202bは、f1に関する省略情報であり、q1の4つの成分のうちの何れの成分が省略されているかを示す情報である。また、省略情報202cは、f2に関する省略情報であり、q2の4つの成分のうちの何れの成分が省略されているかを示す情報である。
【0132】
モード0は、コントローラが静止しておらず、コントローラの姿勢の変化が線形的でないときに選択されるモードであり、例えば、コントローラの姿勢が急激に変化しているときに選択されるモードである。この場合、q0、q1、q2について、4つの成分のうち最大となる成分はそれぞれ異なる可能性がある。例えば、q0については、絶対値が最大となる成分はx成分であり、q1については、絶対値が最大となる成分はy成分となる場合がある。このため、モード0が選択された場合には、f0、f1、f2のそれぞれについて、最大成分(絶対値が最大となる成分)が省略される。したがって、f0、f1、f2のそれぞれについて、省略情報202が設定される。
【0133】
モード0が選択された場合、f0、f1、f2の各成分は、それぞれ32ビットから13ビットに圧縮される。具体的には、f0については、13ビット×3成分=39ビットが割り当てられ、f1についても、13ビット×3成分=39ビットが割り当てられ、f2については、13ビット×3成分=39ビットが割り当てられる。
【0134】
なお、
図8Cに示すモード0の第3圧縮データ220の姿勢データ部(f0、f1、f2)のデータサイズは、13×3×3=117ビットである。
【0135】
図9は、モード2で姿勢データを圧縮した場合の圧縮前の姿勢データと、圧縮された姿勢データが本体装置に送信されて本体装置に応じて復元された後の姿勢データとの比較を示す図である。
【0136】
図9の破線は、コントローラにおいて算出される圧縮前のクォータニオンqの値(qの4成分のうちの1つの成分の値)を示す。また、
図9の実線は、本体装置2において復元された後のクォータニオンqの値(qの4成分のうちの1つの成分の値)を示す。
【0137】
図9に示すように、コントローラが静止している状態である場合でも、慣性センサ43は僅かに角速度を検出することがあり、圧縮前の姿勢データ(破線)は僅かに変動する。このコントローラにおいて算出された姿勢データがモード2により圧縮され、本体装置2に送信される。本体装置2は、圧縮された姿勢データを復元する。
図9に示すように、この復元した後の姿勢データは、圧縮前の姿勢データと僅かにずれる場合があるものの、本体装置2において復元した後の姿勢データと、コントローラにおいて算出された圧縮前の姿勢データとはほぼ一致する。
【0138】
図示は省略するが、仮に、コントローラが静止している状態において、モード2によって姿勢データを圧縮せずに、モード0によって姿勢データを圧縮する場合、圧縮前の姿勢データと復元後の姿勢データとのずれは、
図9に示すずれよりも大きくなる。
【0139】
また、図示は省略するが、コントローラの姿勢が線形的に変化している場合、モード1によって姿勢データを圧縮した場合の方が、モード0によって姿勢データを圧縮した場合の方よりも、圧縮前の姿勢データと復元後の姿勢データとのずれは小さくなる。
【0140】
このように、本実施形態では、コントローラの状態によって姿勢データを異なる方法で圧縮する。具体的には、コントローラの慣性センサ43からのデータに基づいて判別される状態によって、異なる方法で姿勢データを圧縮する。これにより、本体装置2において正確に姿勢データを復元することができる。
【0141】
(コントローラにおける処理の詳細)
次に、コントローラにおいて行われる処理の詳細について説明する。まず、コントローラに記憶されるデータについて説明する。
図10は、コントローラに記憶されるデータの一例を示す図である。
【0142】
図10に示すように、コントローラ(のメモリ42又はフラッシュメモリ45)には、制御プログラムと、センサデータと、姿勢データと、圧縮データとが記憶される。
【0143】
制御プログラムは、慣性センサ43からの出力に基づいてコントローラの姿勢を表すqを算出するためのプログラム、コントローラと本体装置2との間の通信を制御するためのプログラム、上記複数のモードのうちの何れかを選択するためのプログラム、選択したモードでfを圧縮するためのプログラム、
図8A~
図8Cに示した圧縮データを生成するためのプログラム、圧縮データを本体装置2に送信するためのプログラム等を含む。
【0144】
センサデータは、慣性センサ43から出力される各軸周りの角速度値を示すデータである。
【0145】
姿勢データは、慣性センサ43からの出力に基づいて算出されたコントローラの姿勢を表すクォータニオンqを示すデータである。姿勢データは、少なくとも、3つのサンプル(q0、q1、q2)を含む。クォータニオンqは、w、x、y、zの4つの成分を有する。また、姿勢データは、qの4成分のうちの1成分を省略したベクトルfを含み、q0に対応するf0、q1に対応するf1、q2に対応するf2を含む。
【0146】
また、圧縮データは、f0、f1、f2を圧縮した後のデータであり、コントローラから本体装置2に送信されるデータである。具体的には、圧縮データは、
図8A~
図8Cに示すデータである。
【0147】
次に、コントローラにおいて行われる処理の詳細について具体的に説明する。
図11は、コントローラにおいて行われる処理の一例を示すフローチャートである。
図11に示す処理は、コントローラの処理部41が制御プログラムを実行することにより、行われる。なお、
図11では、姿勢データの算出、送信に関する処理のみが示されているが、コントローラはこれらの処理に加えて他の処理(ボタンやアナログスティックに対する操作に応じた操作データに関する処理等)も実行する。
【0148】
図11に示すように、コントローラ(の処理部41)は、慣性センサ43から各軸周りの角速度値を取得する(ステップS100)。次に、コントローラは、取得した角速度値に基づいて、コントローラの姿勢を表すクォータニオンqを算出して取得する(ステップS101)。
【0149】
ステップS101に続いて、コントローラは、本体装置2と通信するタイミングか否かを判定する(ステップS102)。本体装置2と通信するタイミングでない場合(ステップS102:NO)、コントローラは、ステップS100の処理を再び実行する。本実施形態では、ステップS100~ステップS102の処理は、1/800秒間隔で繰り返し行われる。また、ステップS102においては、ステップS100~ステップS102の処理が4回行われた場合に、YESと判定される。すなわち、本実施形態では、慣性センサ43からの角速度値の取得、及び、姿勢を表す「q」の取得は、1/800秒間隔で行われ、ステップS103以降の処理は、1/200秒間隔で繰り返し行われる。
【0150】
ステップS102でYESと判定した場合、コントローラは、間引き処理を行う(ステップS103)。ここでは、コントローラは、ステップS101で算出した最新のqを抽出する。
【0151】
ステップS103に続いて、コントローラは、モード2を選択するための第1条件を満たすか否か判定する(ステップS104)。本実施形態では、第1条件は、第1条件Aと第1条件Bとを含む。第1条件Aは、f2とf0との差分が所定値未満であることである。具体的には、コントローラは、まずクォータニオンq1の4つの成分のうち、絶対値が最大の成分(例えば、w成分)を選択し、最大の成分を省略したf1(例えば、x、y、zの3成分を有するベクトル)を設定する。また、q2、q0について、同じ成分(例えばw成分)を省略したf2、f0を設定する。そして、コントローラは、f2と、f0との差分ベクトルを算出し、第1条件Aとして、当該差分ベクトルのノルムが所定値未満か否かを判定する。なお、q2は、ステップS101で算出した最新のqであってもよい。また、q1は、q2の直前にステップS101で算出したq(すなわち、1/800秒前に算出されたq)であり、q0は、q1の直前にステップS101で算出したq(すなわち、1/800秒前に算出されたq)であってもよい。また、q2は、ステップS101で算出した最新のqであり、q1は、q2より前にステップS103で抽出したq(すなわち、1/200秒前に算出されたq)であり、q0は、q1より前にステップS103で抽出したq(すなわち、1/200秒前に算出されたq)であってもよい。
【0152】
コントローラは、第1条件Aが成立していると判定した場合、ステップS104においてさらに第1条件Bが成立しているか否かを判定する。具体的には、コントローラは、f2とf0との平均を算出し、f1と当該平均との差分をΔf1として算出する。そして、コントローラは、第1条件Bとして、Δf1のノルムが所定値未満か否かを判定する。
【0153】
第1条件A又は第1条件Bが成立していないと判定した場合(ステップS104:NO)、コントローラは、モード1を選択するための第2条件を満たすか否かを判定する(ステップS105)。具体的には、コントローラは、まず、第2条件Aが成立しているか否かを判定する。第2条件Aは、q1の最大成分(絶対値)と同じ、q0およびq2の成分が所定値より大きいことである。例えば、q1の最大成分(絶対値)がwである場合、コントローラは、q0およびq2のw成分が所定値より大きいか否かを判定する。コントローラは、第2条件Aが成立していないと判定した場合、ステップS105でNOと判定する。一方、コントローラは、第2条件Aが成立していると判定した場合、さらに第2条件Bが成立しているか否かを判定する。第2条件Bは、Δf1が8ビットで表現可能であること(-128~127の範囲内)である。コントローラは、第2条件Bが成立していると判定した場合は、ステップS105でYESと判定し、第2条件Bが成立していないと判定した場合は、ステップS105でNOと判定する。
【0154】
ステップS104でYESと判定した場合、コントローラは、モード2を選択し、選択したモード2で姿勢データを圧縮する(ステップS106)。具体的には、コントローラは、上述のように、f2の各成分を24ビットに圧縮し、f2とf0との差であるΔf0の各成分を13ビットに圧縮し、Δf1の各成分を4ビットに圧縮する。そして、コントローラは、これら圧縮したデータを含む第1圧縮データを生成する。
【0155】
ステップS105でYESと判定した場合、コントローラは、モード1を選択し、選択したモード1で姿勢データを圧縮する(ステップS107)。具体的には、コントローラは、上述のように、f2の各成分を16ビットに圧縮し、f0の各成分を16ビットに圧縮し、Δf1の各成分を8ビットに圧縮する。そして、コントローラは、これら圧縮したデータを含む第2圧縮データを生成する。
【0156】
ステップS105でNOと判定した場合、コントローラは、モード0を選択し、選択したモード0で姿勢データを圧縮する(ステップS108)。具体的には、コントローラは、上述のように、f0の各成分を13ビットに圧縮し、f1の各成分を13ビットに圧縮し、f2の各成分を13ビットに圧縮する。また、ステップS108では、コントローラは、q0、q1、q2のそれぞれについて、どの成分を省略するかを示す省略情報202a~202cを設定する。例えば、コントローラは、q0についてはx成分を省略すると決定した場合は、省略情報202aに「1」を設定するとともに、w、y、zの3成分を有するf0を設定し、f0の各成分を13ビットに圧縮する。また、q1についてはy成分を省略すると決定した場合は、省略情報202bに「2」を設定するとともに、w、x、zの3成分を有するf1を設定し、f1の各成分を13ビットに圧縮する。また、q2についてはz成分を省略すると決定した場合は、省略情報202cに「3」を設定するとともに、w、x、yの3成分を有するf2を設定し、f2の各成分を13ビットに圧縮する。そして、コントローラは、これら圧縮したf0、f1、f2に係るデータと、省略情報とを含む第3圧縮データを生成する。
【0157】
ステップS106~ステップS108の何れかの処理を行った場合、コントローラは、圧縮データを含むパケットを生成し、生成したパケットを本体装置2に送信する(ステップS109)。
【0158】
(本体装置2で行われる処理の一例)
次に、本体装置2で行われる処理の一例について説明する。
図12は、本体装置2において行われる処理の一例を示すフローチャートである。なお、
図12に示す処理は、所定の時間間隔(例えば、1/200秒間隔)で繰り返し実行される。
【0159】
図12に示すように、本体装置2は、コントローラからパケットを受信する(ステップS201)。コントローラからパケットを受信すると、本体装置2は、受信したパケットから姿勢データfを復元する(ステップS202)。具体的には、本体装置2は、受信したパケットを解析し、モード情報201に基づいてどのモードで圧縮されたかを判定する。そして、本体装置2は、圧縮されたモードに応じた方法で姿勢データf0、f1、f2を復元する。例えば、モード2で圧縮されている場合、本体装置2は、f2の各成分を24ビットから32ビットに伸張する。また、この場合、本体装置2は、f2とΔf0とに基づいてf0を算出し、f0の各成分を32ビットに伸張する。さらに本体装置2は、f2、f0、Δf1に基づいて、f1を復元し、f1の各成分を32ビットに伸張する。
【0160】
次に、本体装置2は、姿勢データfからqを算出する(ステップS203)。具体的には、本体装置2は、パケットに含まれる省略情報202に基づいて、どの成分が省略されているかを判定し、省略されている成分を算出して、クォータニオンqを復元する。例えば、姿勢データがモード2又はモード1で圧縮されている場合、f0、f1、f2に共通の省略情報202に基づいて、省略されている成分を算出して、q0、q1、q2を復元する。また、姿勢データがモード0で圧縮されている場合、本体装置2は、f0に対応する省略情報202aに基づいて、省略されているf0の成分を算出し、q0を復元する。同様に、本体装置2は、f1に対応する省略情報202bに基づいて、省略されているf1の成分を算出し、q1を復元する。また、本体装置2は、f2に対応する省略情報202cに基づいて、省略されているf2の成分を算出し、q2を復元する。
【0161】
そして、本体装置2は、復元した姿勢データqに基づく処理を実行する(ステップS204)。例えば、姿勢データqに基づく処理として、仮想空間内の仮想カメラを制御する処理が行われてもよい。また、姿勢データqに基づく処理として、仮想空間内のユーザオブジェクトを制御する処理が行われてもよい。
【0162】
なお、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容は適宜変更されてもよい。また、各処理や判定において用いられた値は変更されてもよい。
【0163】
図13は、コントローラの姿勢の変化と選択されるモードの一例を示す図である。
図13の横軸は時間を示し、縦軸は姿勢を表すq(qの4成分のうちの1つの成分)を示す。また、図中の上部には、上述した方法により選択されたモードを示す太線が示されている。具体的には、図中の上部には、上、中、下に並ぶ3つの太線が示されている。3つの太線のうち、下の太線はモード2が選択された状態を示し、中間の太線は、モード1が選択された状態を示し、上の太線は、モード0が選択された状態を示す。
【0164】
例えば、時点T1までは、コントローラは静止している状態であり、qの値はほぼ「0」である。この時点T1までは、モード2が選択される。時点T1においてコントローラがユーザによって振られた場合、コントローラの姿勢が変化し、
図13に示すようにqの値が変化する。時点T1からT2までは、比較的ゆっくりとコントローラが振られ、この間、モード1が選択される。また、時点T2においては、一瞬、コントローラが静止している状態として検出され、モード2が選択される。時点T2から時点T3までは、再びコントローラがゆっくりと振られ、モード1が選択される。次に、時点T3~T4においてコントローラが激しく振られた場合、コントローラの姿勢が急激に変化する。このT3~T4の間、モード0が選択される。さらに、時点T4~T5の間は、再びコントローラがゆっくりと振られ、モード1が選択される。時点T5においてコントローラが激しく振られた場合、モード0が選択される。
【0165】
このように、本実施形態では、コントローラと本体装置2との通信が行われる毎に、その時点のコントローラの状態(具体的には慣性センサ43からの出力に基づいて判別される状態)に応じて、複数のモードのうちの何れかが選択される。
【0166】
以上のように、本実施形態では、コントローラの状態(具体的にはその時点において慣性センサ43から出力される角速度値)に応じて複数のモードのうちの何れかのモードが選択され、選択されたモードに応じた方法で姿勢データが圧縮される。具体的には、コントローラが静止している状態か、コントローラの姿勢が線形的に変化している状態か、あるいは何れの状態でもないかに応じて、モードが選択される。
【0167】
例えば、コントローラが静止している状態の場合、モード2が選択され、3つの姿勢データのうちの1つの姿勢データのデータサイズが他の姿勢データのデータサイズよりも大きくなるように、3つのデータが圧縮されて第1圧縮データが生成される。そして、生成された第1圧縮データが本体装置2に送信される。モード2が選択されなかった場合、コントローラの姿勢が線形的に変化している状態か否かが判定され、コントローラの姿勢が線形的に変化している状態と判定された場合、モード1が選択され、当該モード1に応じた方法で3つの姿勢データが圧縮される。
【0168】
具体的には、本実施形態のコントローラは、第1のタイミングにおける慣性センサ43からの出力に基づいて、コントローラの姿勢に関する第1の値(例えばf0)を取得する。また、コントローラは、第1のタイミングとは異なる第2のタイミングにおける慣性センサ43からの出力に基づいて、コントローラの姿勢に関する第2の値(例えばf2)を取得する。そして、コントローラは、第1条件(例えば上記式4及び式5)を満たすかどうかを判定し、第1条件を満たすと判定した場合に、第1の値(例えばf0)及び第2の値(例えばf2)の少なくとも何れか一方を第1方法(モード2の方法)によって圧縮する。また、第1条件を満たさないと判定した場合、コントローラは、第1の値及び第2の値を第1方法とは異なる第2方法(モード1の方法、又は、モード0の方法)によって圧縮する。
【0169】
このように、本実施形態のコントローラは、第1条件を満たすか否かによって異なる方法でデータを圧縮することにより、コントローラの状態に応じて、動的に適切な圧縮方法を選択し、姿勢に関するデータを圧縮することができる。具体的には、第1の値に係るデータ(例えばf0又はq0)及び第2の値に係るデータ(例えばf2又はq2)のうちの何れか一方のデータ量が、他方のデータ量よりも大きくなるように、第1の値に係るデータ及び第2の値に係るデータが圧縮される。言い換えると、一方のデータの圧縮率が他方のデータの圧縮率よりも低くなるように、姿勢に関するデータが圧縮される。これにより、一方のデータについて他方のデータよりも失われる情報量を少なくすることができ、全体として本体装置2に送信されるデータのデータ量を削減しつつ、本体装置2においてコントローラの姿勢を正確に復元することができる。
【0170】
また、コントローラは、第1条件を満たさないと判定した場合、第1条件とは異なる第2条件(第2条件A及び第2条件B)を満たすか否かを判定し、第2条件を満たすと判定した場合には、第2方法によってデータを圧縮する。第2方法では、コントローラは、第1の値に係るデータ、及び、第2の値に係るデータを同じ圧縮率で圧縮する。また、コントローラは、第1及び第2のタイミングと異なる第3のタイミングにおける慣性センサ43からの出力に基づく第3の値に係るデータ(q1)を、第1の値に係るデータ及び第2の値に係るデータよりもデータ量が小さくなるように圧縮する。第2条件を満たす場合は、第1の値、第2の値及び第3の値は、線形性を有する。これらの値が線形性を有するため、本体装置2において2つの値が分かれば、残り1つの値を正確に推測することができる。したがって、この場合、第1の値に係るデータ及び第2の値に係るデータを比較的低い圧縮率で圧縮し、第3のタイミング(より具体的には、第1及び第2のタイミングの間のタイミング)における第3の値に係るデータについては比較的高い圧縮率で圧縮する。これにより、全体としてのデータ量を削減しつつ、本体装置2においてコントローラの姿勢を正確に復元することができる。
【0171】
また、本実施形態では、コントローラが角速度値に基づいてコントローラの姿勢を算出し、算出した姿勢を本体装置2に送信するため、コントローラから本体装置2へのパケットが落ちた場合でも誤差を低減することができる。例えば、慣性センサ43によって検出された角速度値がコントローラから本体装置2に送信される場合、本体装置は、受信した角速度値を積分することにより、コントローラの姿勢を算出する。この場合において、パケットが落ちると本体装置側ではコントローラの姿勢を算出することができず、パケットが落ちる毎に誤差が累積してしまう。これに対して、上記実施形態のようにコントローラ側で姿勢を算出して、算出した姿勢を本体装置2に送信する場合には、パケット落ちがあったとしても誤差は累積しない。本体装置2は、コントローラにおいて算出された姿勢を受信することで、仮にパケット落ちが発生した場合でも、パケットを受信した時点におけるコントローラの正確な姿勢を知ることができる。
【0172】
また、本実施形態では、コントローラから本体装置2に送信される圧縮データには、時刻情報が含まれる。このため、仮にパケット落ちが発生した場合でも、本体装置2は、コントローラにおいて姿勢が算出された時点の時刻情報を正確に知ることができる。
【0173】
また、本実施形態では、コントローラが800Hzでサンプリングされた角速度値に基づいて姿勢を算出し、算出した姿勢を200Hzで本体装置2に送信した。これにより、本体装置2は、本体装置2とコントローラとの間の通信の頻度を上げることなく、本体装置側で姿勢を算出する場合よりも、高い精度でコントローラの姿勢を取得することができる。例えば、角速度値のサンプリング周波数が800Hzであり、かつ、本体装置2とコントローラとの間の通信の周波数が200Hzである場合を想定する。この場合において、慣性センサ43からの角速度値を本体装置2に送信し、本体装置側において姿勢を算出する場合、コントローラは、800Hzでサンプリングされた4つの角速度値のうちの1つを本体装置2に送信するか、800Hzでサンプリングされた4つの角速度値を平均して本体装置2に送信することが考えられる。何れの場合でも200Hzで姿勢が算出されるため、本体装置側で算出されるコントローラの姿勢の精度にはある程度の限界がある。一方、本実施形態では、コントローラが800Hzで姿勢を算出するため、本体装置側で高い精度でコントローラの姿勢を取得することができる。
【0174】
(変形例)
以上、本実施形態の姿勢データの圧縮方法ついて説明したが、上記実施形態において以下のような変形が加えられてもよい。
【0175】
例えば、上記実施形態では、第1のタイミングにおける慣性センサ43からの出力に基づいて取得される第1の値は、慣性センサ43からの角速度値に基づいて計算される、コントローラの姿勢を表すクォータニオンq0(又はf0)であるとした。第1の値は、慣性センサ43から出力される角速度値そのものであってもよい。第2のタイミングにおける慣性センサ43からの出力に基づいて取得される第2の値、及び、第3のタイミングにおける慣性センサ43からの出力に基づいて取得される第3の値についても同様である。
【0176】
また、上記実施形態では、コントローラの姿勢を表すクォータニオンqの4つの成分のうちの3成分を有するベクトルfに基づいて、第1条件、第2条件を満たすか否かが判定され、モードが選択された。そして、選択されたモードでfが圧縮されて、コントローラから本体装置2に送信された。他の実施形態では、4つの成分を有するqに基づいて、第1条件、第2条件を満たすか否かが判定され、選択されたモードでqが圧縮されて、コントローラから本体装置2に送信されてもよい。また、モードを選択するための条件の判定については、qに基づいて行い、選択されたモードでfを圧縮および送信してもよい。
【0177】
また、上記実施形態では、コントローラの姿勢をq(回転軸を表す3つの成分、及び、回転角を表す1つの成分を有するベクトル)で表すものとしたが、他の実施形態では、コントローラの姿勢を他の形式で表現してもよい。例えば、コントローラの姿勢をオイラー角を用いて表現し、オイラー角を用いて表現された姿勢に関する姿勢データを上述した複数のモードのうちの何れかのモードに応じた方法で圧縮し、本体装置2に送信してもよい。
【0178】
また、上記実施形態では、1番目に取得された値(f0)と、2番目に取得された値(f1)と、3番目に取得された値(f2)とに基づいて、Δf1が算出された(上記式6)。そして、Δf1は、各モードの判定に用いられた。例えば、f0、f1、f2が線形性を有するか否かの判定(第2条件Bを満たすか否かの判定)において、Δf1の各成分が所定の範囲内か否かが判定された。他の実施形態では、f0、f1、f2が線形性を有するか否かについて他の方法で判定してもよい。
【0179】
ここでいう線形性とは、1番目に取得された値(f0)と、2番目に取得された値(f1)と、3番目に取得された値(f2)とが、ほぼ一定の割合で増加または減少していることである。例えば、姿勢を表すfがx、y、z軸成分を有する場合、x、y、z軸成分のそれぞれの値が一定の割合で増加又は減少していることである。これらの値が線形性を有するか否かは、上記式6を用いなくても判定することができる。例えば、1番目に取得された値(f0の各成分の値)及び2番目に取得された値(f1の各成分の値)を結ぶ直線と、3番目に取得された値(f2の各成分の値)との距離が所定値未満か否かにより判定することができる。
【0180】
また、上記実施形態では、モード2を選択するための第1条件は、上記式4および式5が成立することとしたが、第1条件はこれに限らない。例えば、第1の値(f0)と、第2の値(f2)との比較に基づいて、第1条件Aが満たされるか否かが判定されてもよい。また、コントローラの姿勢の変化量が所定値未満である場合に第1条件を満たすと判定してもよい。コントローラの姿勢の変化量が所定値未満であることの判定は、式4に限らず他の方法で行われてもよい。例えば、取得された各軸周りの角速度値の絶対値が所定値未満(0又はごく小さな値)である場合、第1条件を満たすと判定してもよい。この場合、ある時点において慣性センサ43から出力された角速度値に基づいて、第1条件を満たすか否かを判定することができる。すなわち、上記実施形態では、少なくとも、第1のタイミングと第2のタイミングの両方における慣性センサ43からの出力に基づいて第1条件を満たすか否かが判定されたが、他の実施形態では、第1のタイミング及び第2のタイミングの少なくとも一方における慣性センサ43からの出力に基づいて第1条件を満たすか否かを判定してもよい。
【0181】
例えば、ある時点におけるコントローラの姿勢が算出された場合、その後に取得される慣性センサ43からの3つの軸に関する角速度値がほぼ「0」である場合、コントローラはほぼ静止していると判断することができる。したがって、コントローラは、モード2を適用可能か否かを、式4および式5に基づかずに、慣性センサ43からの角速度値に基づいて判定することができる。
【0182】
また、モード2を選択するための第1条件は、コントローラが静止している状態であることに限らず、コントローラの状態が所定の状態であることであってもよい。
【0183】
また、モード1を選択するための第2条件は、コントローラの姿勢が線形的に変化しているか否かを判定するための条件であれば、どのようなものでもよい。コントローラの姿勢が線形的に変化しているか否かは、上記に限らず、他の方法で判定することができる。例えば、あるタイミングにおける慣性センサ43からの各軸の角速度値と、次のタイミングにおける慣性センサ43からの各軸の角速度値との差が、「0」又は所定の範囲内の場合には、コントローラの姿勢は一定の割合で変化していると判断することができ、コントローラの姿勢が線形的に変化していると判定することができる。
【0184】
また、上記実施形態では、慣性センサ43から判別されるコントローラの状態に応じて、複数のモードから何れかのモードが選択された。他の実施形態では、慣性センサ43からの出力以外から判別されるコントローラの状態に応じて、複数のモードから何れかのモードが選択されてもよい。例えば、カメラからの画像に基づいて、コントローラの状態が判別され、判別されたコントローラの状態に応じて、複数のモードから何れかのモードが選択されてもよい。
【0185】
また、上記実施形態では、モード2が選択された場合、f2を24ビットに圧縮し、f2とf0との差分をΔf0として算出して当該Δf0を13ビットに圧縮し、さらにΔf1(上記式6)を算出して当該Δf1を4ビットに圧縮した。このモード2が選択された場合の圧縮方法は単なる一例であり、圧縮後の各データのサイズはこれに限らない。また、モード2が選択された場合、3つのデータを他の圧縮方法により圧縮してもよい。例えば、f2を圧縮せずに32ビットとし、Δf0及び/又はΔf1を上記よりも少ないビット数に圧縮してもよい。また、モード2が選択された場合、例えばf0を24ビットに圧縮し(又はf0を圧縮せず)、f0とf2との差分であるΔf2を13ビット(又はこれより小さいビット数)に圧縮し、Δf1を4ビット(又はこれより小さいビット数)に圧縮してもよい。そして、これらf0、Δf1、Δf2を含む圧縮データを本体装置2に送信してもよい。また、Δf0、Δf1を算出せずに、f0、f1をそれぞれ圧縮してもよい。すなわち、モード2が選択された場合、f0、f1、f2のうちの1つのデータを他のデータよりもデータ量が大きくなるように、これら3つのデータが圧縮されてもよい。
【0186】
また、上記実施形態では、モード1が選択された場合、f0及びf2を16ビットに圧縮し、Δf1を8ビットに圧縮した。このモード1が選択された場合の圧縮方法は単なる一例であり、圧縮後の各データのサイズはこれに限らない。また、モード1が選択された場合、3つのデータを他の圧縮方法により圧縮してもよい。例えば、f0及びf1を16ビットに圧縮し、Δf2を算出して、Δf2を8ビットに圧縮してもよい。このΔf2は、f0、f1、f2に基づいて算出され、例えば、f0及びf1の線形性に基づいて推測されるf2の値と、実際に角速度値に基づいて算出されたf2との差異を表すデータであってもよい。そして、これらf0、f1、Δf2を含む圧縮データを本体装置2に送信してもよい。
【0187】
また、上記実施形態では、モード2又はモード1が選択された場合、f0及びf2の平均と、f1との差分をΔf1として算出し、当該算出したΔf1を圧縮して本体装置2に送信した。他の実施形態では、f0及びf2の平均に限らず、f0(又はq0)、f1(又はq1)、f2(又はq2)のうちの少なくとも2つに基づいて、所定の基準値を算出してもよい。そして、算出した基準値に基づいて、f0(又はq0)、f1(又はq1)、f2(又はq2)のうちの少なくとも1つに係るデータを設定するとともに当該少なくとも1つのデータを圧縮してもよい。例えば、算出した基準値からf0、f1、f2がどれくらい離れているかを示す値を設定し、設定した値を示すデータを圧縮して、本体装置2に送信してもよい。
【0188】
また、上記実施形態では、1番目に取得されたデータ(f0)と、2番目に取得されたデータ(f1)と、3番目に取得されたデータ(f2)とに基づいて、モード0~2の何れを選択するかを判定し、判定結果に応じたモードでこれら3つのデータを圧縮して本体装置2に送信した。他の実施形態では、2つのデータに基づいて、モード0~2の何れを選択するかを判定し、2つのデータを圧縮して送信してもよい。
【0189】
また、他の実施形態では、複数のモードは3つに限らず、2つでもよいし、4つ以上でもよい。
【0190】
また、上記実施形態では、コントローラは、慣性センサからの角速度値に基づいて、コントローラの姿勢に関する値を算出し、コントローラの状態に応じてモードを選択し、モードに応じた方法で姿勢に関するデータを圧縮して送信することとした。他の実施形態では、慣性センサからの加速度値に基づいて、コントローラの位置(各軸方向への移動量)に関する値を算出し、コントローラの状態に応じてモードを選択し、モードに応じた方法で位置に関するデータを圧縮して送信してもよい。コントローラは、慣性センサからの加速度値を積分することにより、コントローラの各軸方向の速度を算出し、算出した速度から、各軸方向の位置(移動量)を算出することができる。この場合、上述した姿勢を表すqやfは、位置を表すベクトルに置き換えられ、モードを選択するための各条件(第1条件A、第1条件B、第2条件A、第2条件B)も、位置を表すベクトルに基づいて判定される。
【0191】
また、上記実施形態では、コントローラと本体装置2とが無線で接続されている場合に、コントローラの状態に応じてモードを選択し、選択したモードに応じた圧縮方法でコントローラの姿勢に関するデータを圧縮して、本体装置2に送信することとした。上記モードの選択及び選択されたモードに応じたデータの圧縮は、コントローラと本体装置2とが有線で接続されている場合(すなわち、コントローラが本体装置2に装着されている場合)に行われもよい。
【0192】
また、上記実施形態では、コントローラから本体装置に姿勢に関するデータを圧縮して送信するものとした。他の実施形態では、コントローラに限らず他の任意の装置において上述したモードの選択およびデータの圧縮を行い、他の装置にデータを送信してもよい。例えば、スマートフォン、タブレット端末、ノートパソコン、ウェアラブル端末、センサ等の任意の装置において、上述したモードの選択およびデータの圧縮を行い、他の装置にデータを送信してもよい。
【0193】
また、上記実施形態では、コントローラと本体装置2とがローカルで接続されることを前提としたが、他の実施形態では、コントローラ等の任意の装置と他の装置とがリモートで接続されてもよい。任意の装置において、上述したモードの選択および選択されたモードに応じたデータの圧縮が行われ、圧縮されたデータが当該任意の装置から、例えばインターネットを介して他の装置に送信されてもよい。
【0194】
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。
【符号の説明】
【0195】
1 情報処理システム
2 本体装置
3 左コントローラ
4 右コントローラ
21 プロセッサ
23 コントローラ通信部
41 処理部
43 慣性センサ
45 通信制御部