(57)【要約】      （修正有）【課題】センサからの出力に基づくデータを圧縮して復元する場合にデータの正確性を保持することが可能な情報処理装置を提供する。【解決手段】コントローラは、慣性センサからの出力に基づいて姿勢を算出し、算出した姿勢を表す値が第１条件を満たす場合は、モード２によりデータを圧縮し、第１条件を満たさない場合において第２条件を満たす場合は、モード１によりデータを圧縮し、第２条件を満たさない場合は、モード０によりデータを圧縮する。そして、コントローラは、圧縮したデータを他の装置に送信する。【選択図】図５
2020047978.tif 000002
【特許請求の範囲】
【請求項１】
慣性センサを有する情報処理装置であって、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する第１判定手段と、
前記第１判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する第１データ圧縮手段と、
前記第１判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を前記第１方法とは異なる第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する第２データ圧縮手段と、を備える、情報処理装置。
【請求項２】
前記第１圧縮データ、又は、前記第２圧縮データを他の装置へ送信する送信手段を更に備える、請求項１に記載の情報処理装置。
【請求項３】
前記第１判定手段は、少なくとも、前記第１の値及び前記第２の値の差分に基づいて、前記第１条件を満たすかどうかを判定する、請求項１又は２に記載の情報処理装置。
【請求項４】
前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段をさらに備え、
前記第１判定手段は、前記第１の値及び前記第２の値の平均と、前記第３の値との差分に基づいて、前記第１条件を満たすかどうかを判定する、請求項１から３の何れかに記載の情報処理装置。
【請求項５】
前記第１判定手段は、前記第１条件を満たすかどうかの判定として、前記情報処理装置が静止している状態か否かを判定する、請求項１から４の何れかに記載の情報処理装置。
【請求項６】
前記第１判定手段は、前記第１条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置の変化量が所定値未満か否かを判定する、請求項１から５の何れかに記載の情報処理装置。
【請求項７】
前記第１データ圧縮手段は、前記第１方法として、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１圧縮データを生成する、請求項１から６の何れかに記載の情報処理装置。
【請求項８】
前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段をさらに備え、
前記第１データ圧縮手段は、前記第１の値、前記第２の値及び前記第３の値に基づいて設定される前記第３の値に係るデータを圧縮し、当該圧縮した第３の値に係るデータをさらに含む前記第１圧縮データを生成する、請求項１から７の何れかに記載の情報処理装置。
【請求項９】
前記第１データ圧縮手段は、前記第１方法として、前記第２の値に係るデータのデータ量が前記第１の値に係るデータのデータ量よりも大きくなるように前記第１の値に係るデータ及び前記第２の値に係るデータを圧縮し、さらに、前記第１の値に係るデータよりもデータ量が小さくなるように前記第３の値に係るデータを圧縮し、圧縮した前記第１の値に係るデータ、前記第２の値に係るデータ及び前記第３の値に係るデータを含む前記第１圧縮データを生成する、請求項８に記載の情報処理装置。
【請求項１０】
前記第１データ圧縮手段は、前記圧縮した第２の値に係るデータに前記第２の値を設定し、前記圧縮した第１の値に係るデータに前記第１の値と前記第２の値との差分を設定し、前記圧縮した第３の値に係るデータに、前記第１の値及び前記第２の値の平均と前記第３の値との差分を設定することにより、前記第１圧縮データを生成する、請求項９に記載の情報処理装置。
【請求項１１】
前記第１判定手段によって前記第１条件を満たさないと判定された場合に、少なくとも前記第１の値および前記第２の値に基づいて、前記第１条件とは異なる第２条件を満たすかどうかを判定する第２判定手段をさらに備え、
前記第２データ圧縮手段は、前記第２判定手段によって前記第２条件を満たすと判定された場合に、前記第２圧縮データを生成する、請求項１から１０の何れかに記載の情報処理装置。
【請求項１２】
前記第２判定手段は、前記第２条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置が線形的に変化しているか否かを判定する、請求項１１に記載の情報処理装置。
【請求項１３】
前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段を更に備え、
前記第２判定手段は、前記第１の値、前記第２の値、及び、前記第３の値が線形性を有するか否かに基づいて、前記第２条件を満たすか否かを判定する、請求項１１又は１２に記載の情報処理装置。
【請求項１４】
前記第２判定手段は、少なくとも、前記第１の値及び前記第２の値の平均と、前記第３の値との差分が所定範囲の場合に、前記第２条件を満たすと判定する、請求項１３に記載の情報処理装置。
【請求項１５】
前記第２判定手段は、
前記第１の値、前記第２の値、前記第３の値のうちの何れか１つの値を構成する複数の成分のうち、絶対値が最大となる成分を特定し、
前記第１の値、前記第２の値、前記第３の値のうちの前記何れか１つの値以外の２つの値について、前記特定した成分に対応する成分と、所定の値とを比較し、当該比較結果に基づいて、前記第２条件を満たすか否かを判定する、請求項１３又は１４に記載の情報処理装置。
【請求項１６】
前記第２データ圧縮手段は、前記第２方法として、前記第１の値及び前記第２の値の平均に基づいて前記第３の値の係るデータを設定するとともに、当該第３の値に係るデータを圧縮し、当該圧縮した第３の値に係るデータを含む前記第２圧縮データを生成する、請求項１３から１５の何れかに記載の情報処理装置。
【請求項１７】
前記第１の値、前記第２の値、及び前記第３の値のうちの少なくとも２つの値に基づいて、所定の基準値を算出する算出手段をさらに備え、
前記第２データ圧縮手段は、前記第２方法として、前記基準値に基づいて前記第１の値、前記第２の値、前記第３の値のうちの少なくとも１つの値に係るデータを設定するとともに、当該少なくとも１つの値に係るデータを圧縮し、当該圧縮したデータを含む前記第２圧縮データを生成する、請求項１３から１６の何れかに記載の情報処理装置。
【請求項１８】
前記第２データ圧縮手段は、前記第２方法として、前記第１の値に係るデータ及び前記第２の値に係るデータのデータ量を等しくするとともに、前記第１の値に係るデータ及び前記第２の値に係るデータのデータ量が、前記第３の値に係るデータのデータ量よりも大きくなるように、前記第１の値に係るデータ、前記第２の値に係るデータ及び前記第３の値に係るデータを圧縮する、請求項１３から１７の何れかに記載の情報処理装置。
【請求項１９】
前記第２のタイミングは、前記第１のタイミングの後のタイミングであり、
前記第３のタイミングは、前記第１のタイミングと前記第２のタイミングとの間のタイミングである、請求項４、８から１０、１３から１８のうちの何れかに記載の情報処理装置。
【請求項２０】
前記第２判定手段によって前記第２条件を満たさないと判定された場合に、少なくとも前記第１の値に係るデータ及び前記第２の値に係るデータを、前記第１方法及び前記第２方法とは異なる第３方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第３圧縮データを生成する第３データ圧縮手段をさらに備える、請求項１１から１８の何れかに記載の情報処理装置。
【請求項２１】
前記第１の値および前記第２の値は、複数の成分を含むデータであり、当該複数の成分は所定の関係を有し、
前記第１の値に係るデータおよび前記第２の値に係るデータは、前記複数の成分から少なくとも１つの成分を省略したデータであり、
前記第３圧縮データは、前記第１の値に係るデータの省略された成分を示す情報と、前記第２の値に係るデータの省略された成分を示す情報とを含む、請求項２０に記載の情報処理装置。
【請求項２２】
前記第１のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第１の値を算出する第１算出手段と、
前記第２のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第２の値を算出する第２算出手段と、
前記第１の値及び前記第２の値を含むデータを他の装置に送信する送信手段と、をさらに備える、請求項１から２１の何れかに記載の情報処理装置。
【請求項２３】
慣性センサを有する情報処理装置のプロセッサによって実行されるプログラムであって、前記プロセッサを、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する第１判定手段と、
前記第１判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する第１データ圧縮手段と、
前記第１判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する第２データ圧縮手段として、機能させる、プログラム。
【請求項２４】
慣性センサを有する第１装置と、当該第１装置と通信する第２装置とを含む情報処理システムであって、
前記第１装置は、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記第１装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記第１装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する第１判定手段と、
前記第１判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する第１データ圧縮手段と、
前記第１判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する第２データ圧縮手段と、
前記第１圧縮データ又は前記第２圧縮データを前記第２装置に送信する送信手段と、を備え、
前記第２装置は、
前記送信手段によって送信された前記第１圧縮データ又は前記第２圧縮データを受信する受信手段を備える、情報処理システム。
【請求項２５】
慣性センサを有する情報処理装置において行われる情報処理方法であって、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得ステップと、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得ステップと、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する第１判定ステップと、
前記第１判定ステップで前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する第１データ圧縮ステップと、
前記第１判定ステップで前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する第２データ圧縮ステップと、を含む、情報処理方法。
【請求項２６】
慣性センサを有する情報処理装置であって、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段と、を備える、情報処理装置。
【請求項２７】
慣性センサを有する情報処理装置のプロセッサにおいて実行されるプログラムであって、前記プロセッサを、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定手段と、
前記判定手段によって前記条件を満たすと判定された場合に、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段として機能させる、プログラム。
【請求項２８】
慣性センサを有する第１装置と、当該第１装置と通信する第２装置とを含む情報処理システムであって、
前記第１装置は、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得手段と、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定手段と、
前記判定手段によって前記条件を満たすと判定された場合に、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮手段と、
前記圧縮データを前記第２装置に送信する送信手段と、を備え、
前記第２装置は、
前記送信手段によって送信された前記圧縮データを受信する受信手段を備える、情報処理システム。
【請求項２９】
慣性センサを有する情報処理装置において行われる情報処理方法であって、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する第１取得ステップと、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する第２取得ステップと、
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、所定の条件を満たすかどうかを判定する判定ステップと、
前記判定ステップで前記条件を満たすと判定された場合に、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの少なくとも一方を圧縮するデータ圧縮ステップと、を含む、情報処理方法。
【請求項３０】
慣性センサを有する情報処理装置であって、
第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第１の値を算出する第１算出手段と、
前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置を表す第２の値を算出する第２算出手段と、
前記第１の値及び前記第２の値を含むデータを他の装置に送信する送信手段と、を備える、情報処理装置。
【請求項３１】
前記第１の値及び前記第２の値のうちの少なくとも何れか一方を圧縮する圧縮手段をさらに備え、
前記送信手段は、前記圧縮手段によって圧縮された前記データを前記他の装置に送信する、請求項３０に記載の情報処理装置。
【請求項３２】
前記送信手段は、前記第１のタイミング又は前記第２のタイミングに関する時刻情報を含む前記データを前記他の装置に送信する、請求項３０又は３１に記載の情報処理装置。
【請求項３３】
前記第１の値及び前記第２の値は、前記情報処理装置の姿勢を表すクォータニオンである、請求項３０から３２の何れかに記載の情報処理装置。
【請求項３４】
前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する判定手段と、
前記判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する第１データ圧縮手段と、
前記判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を前記第１方法とは異なる第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する第２データ圧縮手段と、を備える、請求項３０から３３の何れかに記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、センサを備える情報処理装置、情報処理プログラム、情報処理システム、および情報処理方法に関する。
【背景技術】
【０００２】
従来より、センサを備え、センサからのデータを圧縮して他の装置に送信する装置がある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５１２２０３６号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、センサを備える装置において当該センサにより検出されたデータを圧縮する方法に関して、圧縮されたデータを復元する場合にデータの正確性を保持するという観点で改善の余地があった。
【０００５】
それ故、本発明の目的は、センサからの出力に基づくデータを圧縮して復元する場合にデータの正確性を保持することが可能な情報処理装置を提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【０００７】
本発明の情報処理装置は、慣性センサを有する情報処理装置であって、第１取得手段と、第２取得手段と、第１判定手段と、第１データ圧縮手段と、第２データ圧縮手段と、を備える。第１取得手段は、第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する。第２取得手段は、前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する。第１判定手段は、前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定する。第１データ圧縮手段は、前記第１判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成する。第２データ圧縮手段は、前記第１判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を前記第１方法とは異なる第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成する。
【０００８】
上記によれば、装置の姿勢又は位置に関する値に基づいて、第１条件を満たすかどうかを判定し、第１条件を満たす場合には第１方法によりデータを圧縮し、第１条件を満たさない場合には第２方法によりデータを圧縮することができる。これにより、情報処理装置の状態に応じてデータの正確性を保持するための適切な圧縮方法を選択することができる。
【０００９】
他の構成では、前記情報処理装置は、前記第１圧縮データ、又は、前記第２圧縮データを他の装置へ送信する送信手段を更に備えてもよい。
【００１０】
上記によれば、圧縮したデータを他の装置に送信することができ、他の装置においてデータを復元することができる。
【００１１】
他の構成では、前記第１判定手段は、少なくとも、前記第１の値及び前記第２の値の差分に基づいて、前記第１条件を満たすかどうかを判定してもよい。
【００１２】
上記によれば、前記第１の値及び前記第２の値の差分に基づいて第１条件を満たすかどうかを判定することができる。
【００１３】
他の構成では、前記情報処理装置は、前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段をさらに備えてもよい。前記第１判定手段は、前記第１の値及び前記第２の値の平均と、前記第３の値との差分に基づいて、前記第１条件を満たすかどうかを判定してもよい。
【００１４】
上記によれば、前記第１の値及び前記第２の値の平均と、前記第３の値との差分を算出し、当該差分に基づいて第１条件を満たすかどうかを判定することができる。
【００１５】
他の構成では、前記第１判定手段は、前記第１条件を満たすかどうかの判定として、前記情報処理装置が静止している状態か否かを判定してもよい。
【００１６】
上記によれば、情報処理装置が静止している状態である場合に、第１方法によってデータを圧縮することができる。
【００１７】
他の構成では、前記第１判定手段は、前記第１条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置の変化量が所定値未満か否かを判定してもよい。
【００１８】
上記によれば、情報処理装置の姿勢又は位置の変化量が所定値未満である場合に、第１方法によってデータを圧縮することができる。
【００１９】
他の構成では、前記第１データ圧縮手段は、前記第１方法として、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１圧縮データを生成してもよい。
【００２０】
上記によれば、一方のデータ量が他方のデータ量よりも大きくなるように、前記第１圧縮データを生成するため、一方のデータについて失われる情報量を少なくすることができ、圧縮した場合にデータの正確性を保持することができる。
【００２１】
他の構成では、前記情報処理装置は、前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段をさらに備えてもよい。前記第１データ圧縮手段は、前記第１の値、前記第２の値及び前記第３の値に基づいて設定される前記第３の値に係るデータを圧縮し、当該圧縮した第３の値に係るデータをさらに含む前記第１圧縮データを生成してもよい。
【００２２】
上記によれば、第１の値および第２の値に基づいて、第３の値に係るデータを圧縮することができる。
【００２３】
他の構成では、前記第１データ圧縮手段は、前記第１方法として、前記第２の値に係るデータのデータ量が前記第１の値に係るデータのデータ量よりも大きくなるように前記第１の値に係るデータ及び前記第２の値に係るデータを圧縮し、さらに、前記第１の値に係るデータよりもデータ量が小さくなるように前記第３の値に係るデータを圧縮し、圧縮した前記第１の値に係るデータ、前記第２の値に係るデータ及び前記第３の値に係るデータを含む前記第１圧縮データを生成してもよい。
【００２４】
上記によれば、３つの値に係るデータについてそれぞれデータ量を異ならせることで、第２の値に係るデータについて失われる情報量を少なくすることができ、データの正確性を保持することができる。
【００２５】
他の構成では、前記第１データ圧縮手段は、前記圧縮した第２の値に係るデータに前記第２の値を設定し、前記圧縮した第１の値に係るデータに前記第１の値と前記第２の値との差分を設定し、前記圧縮した第３の値に係るデータに、前記第１の値及び前記第２の値の平均と前記第３の値との差分を設定することにより、前記第１圧縮データを生成してもよい。
【００２６】
上記によれば、第２の値に係るデータついては圧縮してそのまま第２の値を、第２の値に係るデータとして設定し、第１の値については、第２の値との差分を第１の値に係るデータとして設定し、第３の値については、上記差分を第３の値に係るデータとして設定することができる。これにより、全体としてデータ量を削減しつつ、３つの値を復元することができる。
【００２７】
他の構成では、前記情報処理装置は、前記第１判定手段によって前記第１条件を満たさないと判定された場合に、少なくとも前記第１の値および前記第２の値に基づいて、前記第１条件とは異なる第２条件を満たすかどうかを判定する第２判定手段をさらに備えてもよい。前記第２データ圧縮手段は、前記第２判定手段によって前記第２条件を満たすと判定された場合に、前記第２圧縮データを生成してもよい。
【００２８】
上記によれば、第１条件を満たさないと判定された場合に、第２条件を満たすかどうかを判定し、第２条件を満たす場合に第２方法によってデータを圧縮することができる。これにより、装置の状態に応じて適切な圧縮方法を選択することができる。
【００２９】
他の構成では、前記第２判定手段は、前記第２条件を満たすかどうかの判定として、前記情報処理装置の姿勢又は位置が線形的に変化しているか否かを判定してもよい。
【００３０】
上記によれば、情報処理装置の姿勢又は位置が線形的に変化している場合に、第２方法によりデータを圧縮することができる。
【００３１】
他の構成では、前記情報処理装置は、前記第１のタイミング及び前記第２のタイミングとは異なる第３のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第３の値を取得する第３取得手段を更に備えてもよい。前記第２判定手段は、前記第１の値、前記第２の値、及び、前記第３の値が線形性を有するか否かに基づいて、前記第２条件を満たすか否かを判定してもよい。
【００３２】
上記によれば、第１の値、第２の値、第３の値が線形的に変化しているかどうかに基づいて、第２条件を満たすかどうかを判定することができる。
【００３３】
他の構成では、前記第２判定手段は、少なくとも、前記第１の値及び前記第２の値の平均と、前記第３の値との差分が所定範囲の場合に、前記第２条件を満たすと判定してもよい。
【００３４】
上記によれば、上記差分が所定範囲の場合に、第２方法によってデータを圧縮することができる。
【００３５】
他の構成では、前記第２判定手段は、前記第１の値、前記第２の値、前記第３の値のうちの何れか１つの値を構成する複数の成分のうち、絶対値が最大となる成分を特定し、前記第１の値、前記第２の値、前記第３の値のうちの前記何れか１つの値以外の２つの値について、前記特定した成分に対応する成分と、所定の値とを比較し、当該比較結果に基づいて、前記第２条件を満たすか否かを判定してもよい。
【００３６】
上記によれば、第１の値、第２の値、第３の値がそれぞれ複数の成分を有する場合、例えば、第３の値における最大成分を特定し、第１の値および第２の値の当該特定した成分と同じ成分と、所定の値との比較結果に基づいて、第２条件を満たすか否かを判定することができる。
【００３７】
他の構成では、前記第２データ圧縮手段は、前記第２方法として、前記第１の値及び前記第２の値の平均に基づいて前記第３の値の係るデータを設定するとともに、当該第３の値に係るデータを圧縮し、当該圧縮した第３の値に係るデータを含む前記第２圧縮データを生成してもよい。
【００３８】
上記によれば、第３の値についてそのまま値を第３の値に係るデータに設定するのではなく、第１の値及び第２の値の平均に基づいてデータを設定するため、第３の値に係るデータに設定される値を比較的小さくすることができる。
【００３９】
他の構成では、前記情報処理装置は、前記第１の値、前記第２の値、及び前記第３の値のうちの少なくとも２つの値に基づいて、所定の基準値を算出する算出手段をさらに備えてもよい。前記第２データ圧縮手段は、前記第２方法として、前記基準値に基づいて前記第１の値、前記第２の値、前記第３の値のうちの少なくとも１つの値に係るデータを設定するとともに、当該少なくとも１つの値に係るデータを圧縮し、当該圧縮したデータを含む前記第２圧縮データを生成してもよい。
【００４０】
上記によれば、例えば、第３の値についてそのまま値を第３の値に係るデータに設定するのではなく、第１の値及び第２の値に基づく基準値に基づいてデータを設定するため、第３の値に係るデータに設定される値を比較的小さくすることができる。
【００４１】
他の構成では、前記第２データ圧縮手段は、前記第２方法として、前記第１の値に係るデータ及び前記第２の値に係るデータのデータ量を等しくするとともに、前記第１の値に係るデータ及び前記第２の値に係るデータのデータ量が、前記第３の値に係るデータのデータ量よりも大きくなるように、前記第１の値に係るデータ、前記第２の値に係るデータ及び前記第３の値に係るデータを圧縮してもよい。
【００４２】
上記によれば、第１の値に係るデータ及び第２の値に係るデータについて圧縮した場合のデータ量を比較的大きくすることにより、失われる情報量を小さくすることができ、データの正確性を保持することができる。
【００４３】
他の構成では、前記第２のタイミングは、前記第１のタイミングの後のタイミングであり、前記第３のタイミングは、前記第１のタイミングと前記第２のタイミングとの間のタイミングであってもよい。
【００４４】
上記によれば、第１のタイミング、第２のタイミング、第３のタイミングの順に慣性センサから出力された情報に基づいて、条件を判定し、データを圧縮することができる。
【００４５】
他の構成では、前記情報処理装置は、第３データ圧縮手段をさらに備えてもよい。前記第３データ圧縮手段は、前記第２判定手段によって前記第２条件を満たさないと判定された場合に、少なくとも前記第１の値に係るデータ及び前記第２の値に係るデータを、前記第１方法及び前記第２方法とは異なる第３方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第３圧縮データを生成してもよい。
【００４６】
上記によれば、第２条件を満たさないと判定された場合に、さらに第３方法によりデータを圧縮することができる。
【００４７】
他の構成では、前記第１の値および前記第２の値は、複数の成分を含むデータであり、当該複数の成分は所定の関係を有してもよい。前記第１の値に係るデータおよび前記第２の値に係るデータは、前記複数の成分から少なくとも１つの成分を省略したデータであり、前記第３圧縮データは、前記第１の値に係るデータの省略された成分を示す情報と、前記第２の値に係るデータの省略された成分を示す情報とを含んでもよい。
【００４８】
上記によれば、第３方法による圧縮では、第１の値と第２の値とで省略する成分を異ならせることができる。
【００４９】
他の構成では、前記情報処理装置は、前記第１のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第１の値を算出する第１算出手段と、前記第２のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す前記第２の値を算出する第２算出手段と、前記第１の値及び前記第２の値を含むデータを他の装置に送信する送信手段と、をさらに備えてもよい。
【００５０】
上記によれば、情報処理装置において慣性センサからの出力に基づいて、装置の姿勢又は位置を表す値を算出し、当該値を圧縮して他の装置に送信することができる。
【００５１】
また、他の発明に係る情報処理装置は、慣性センサを有する情報処理装置であって、第１取得手段と、第２取得手段と、データ圧縮手段とを備える。第１取得手段は、第１のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第１の値を取得する。第２取得手段は、前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記情報処理装置の姿勢又は位置に関する第２の値を取得する。データ圧縮手段は、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるように、前記第１の値に係るデータ及び前記第２の値に係るデータのうちの少なくとも一方を圧縮する。
【００５２】
上記によれば、第１の値に係るデータ及び第２の値に係るデータのうちの何れか一方のデータ量が他方のデータ量よりも大きくなるようにデータを圧縮するため、一方のデータについて失われる情報量を少なくすることができ、データの正確性を保持することができる。
【００５３】
他の発明に係る情報処理装置は、慣性センサを有する情報処理装置であって、第１算出手段と、第２算出手段と、送信手段とを備える。第１算出手段は、第１のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す第１の値を算出する。第２算出手段は、前記第１のタイミングとは異なる第２のタイミングにおける前記慣性センサからの出力に基づいて、前記装置の姿勢又は位置を表す第２の値を算出する。送信手段は、前記第１の値及び前記第２の値を含むデータを他の装置に送信する。
【００５４】
上記によれば、装置において慣性センサからの出力に基づいて装置の姿勢又は位置を表す値を算出し、他の装置に送信することができる。これにより、他の装置において、情報処理装置の姿勢を正確に認識することができる。
【００５５】
他の構成では、前記情報処理装置は、前記第１の値及び前記第２の値のうちの少なくとも何れか一方を圧縮する圧縮手段をさらに備えてもよい。前記送信手段は、前記圧縮手段によって圧縮された前記データを前記他の装置に送信してもよい。
【００５６】
上記によれば、情報処理装置は、第１の値及び第２の値のうちの少なくとも何れか一方を圧縮して他の装置に送信することができる。
【００５７】
他の構成では、前記送信手段は、前記第１のタイミング又は前記第２のタイミングに関する時刻情報を含む前記データを前記他の装置に送信してもよい。
【００５８】
上記によれば、さらに時刻情報を他の装置に送信することができる。
【００５９】
他の構成では、前記第１の値及び前記第２の値は、前記情報処理装置の姿勢を表すクォータニオンであってもよい。
【００６０】
上記によれば、姿勢を表すクォータニオンを情報処理装置で算出して、他の装置に送信することができる。
【００６１】
他の構成では、前記情報処理装置は、判定手段と、第１データ圧縮手段と、第２データ圧縮手段とを更に備えてもよい。判定手段は、前記第１の値及び前記第２の値の少なくとも何れか一方に基づいて、第１条件を満たすかどうかを判定してもよい。第１データ圧縮手段は、前記判定手段によって前記第１条件を満たすと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を第１方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第１圧縮データを生成してもよい。第２データ圧縮手段は、前記判定手段によって前記第１条件を満たさないと判定された場合に、前記第１の値及び前記第２の値の少なくともいずれか一方を前記第１方法とは異なる第２方法によって圧縮し、前記第１の値に係るデータ及び前記第２の値に係るデータを含む第２圧縮データを生成してもよい。
【００６２】
上記によれば、情報処理装置の状態に応じて適切な圧縮方法を選択することができる。
【００６３】
また、他の発明は、上記情報処理装置において実行されるプログラムであってもよいし、情報処理方法であってもよいし、上記情報処理装置と他の装置とを含む情報処理システムであってもよい。
【発明の効果】
【００６４】
本発明によれば、センサからのデータを圧縮して復元する場合にデータの正確性を保持することができる。
【図面の簡単な説明】
【００６５】
【図１】本体装置２に左コントローラ３および右コントローラ４を装着した状態の一例を示す図
【図２】本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図
【図３】本体装置２と右コントローラ４との内部構成の一例を示すブロック図
【図４】姿勢データが右コントローラ４から本体装置２に送信されるときの処理の流れを示す図
【図５】複数のモードの一例を示す図
【図６】式４を概念的に表した図
【図７】第１条件Ｂを概念的に表した図
【図８Ａ】モード２が選択された場合に生成される第１圧縮データのデータ構造の一例を示す図
【図８Ｂ】モード１が選択された場合に生成される第２圧縮データのデータ構造の一例を示す図
【図８Ｃ】モード０が選択された場合に生成される第３圧縮データのデータ構造の一例を示す図
【図９】モード２で姿勢データを圧縮した場合の圧縮前の姿勢データと、圧縮された姿勢データが本体装置に送信されて本体装置に応じて復元された後の姿勢データとの比較を示す図
【図１０】コントローラに記憶されるデータの一例を示す図
【図１１】コントローラにおいて行われる処理の一例を示すフローチャート
【図１２】本体装置２において行われる処理の一例を示すフローチャート
【図１３】コントローラの姿勢の変化と選択されるモードの一例を示す図
【発明を実施するための形態】
【００６６】
以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システム１の一例は、本体装置２と左コントローラ３および右コントローラ４とを含む。
【００６７】
図１は、本体装置２に左コントローラ３および右コントローラ４を装着した状態の一例を示す図である。図１に示すように、左コントローラ３および右コントローラ４は、それぞれ本体装置２に装着されて一体化されている。本体装置２は、情報処理システム１における各種の処理（例えば、ゲーム処理）を実行する装置である。本体装置２は、本体装置２が生成した画像を表示するためのディスプレイを備える。左コントローラ３および右コントローラ４は、ユーザが入力を行うための入力部、コントローラの位置や姿勢を検出するための慣性センサ等を備える情報処理装置である。
【００６８】
図２は、本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図である。図１および図２に示すように、左コントローラ３および右コントローラ４は、本体装置２に着脱可能である。なお、以下において、左コントローラ３および右コントローラ４の総称として「コントローラ」と記載することがある。
【００６９】
図３は、本体装置２と右コントローラ４との内部構成の一例を示すブロック図である。なお、図３では、右コントローラ４の姿勢データの送信に関する部分のみを示し、その他の部分については省略している。また、以下では、右コントローラ４の構成のみを説明し左コントローラ３の構成については省略するが、左コントローラ３の構成も右コントローラ４と同様である。
【００７０】
図３に示すように、本体装置２は、プロセッサ２１と、ＤＲＡＭ２２と、本体装置２がコントローラと通信するためのコントローラ通信部２３と、フラッシュメモリ２４とを備える。また、本体装置２は、左コントローラ３と有線通信を行うための左側端子２５と、右コントローラ４と有線通信を行うための右側端子２６とを備える。また、図示は省略するが、本体装置２は、バッテリを備える。プロセッサ２１は、本体装置２において実行される各種の情報処理を実行する情報処理部であって、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のみから構成されてもよいし、ＣＰＵ機能、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）機能等の複数の機能を含むＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）から構成されてもよい。プロセッサ２１は、記憶部（具体的には、フラッシュメモリ２４等の内部記憶媒体、あるいは、本体装置２のスロットに装着される外部記憶媒体等）に記憶されるプログラム（例えば、ゲームプログラム）を実行することによって、各種の情報処理を実行する。
【００７１】
コントローラ通信部２３は、右コントローラ４との間で、例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った無線通信を行う。同様に、コントローラ通信部２３は、左コントローラ３との間で、例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信を行う。なお、本体装置２とコントローラとは、他の規格（例えば、無線ＬＡＮ）に従って無線通信してもよい。
【００７２】
本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の場合、本体装置２は、コントローラ通信部２３を介して左コントローラ３及び右コントローラ４と無線通信する。例えば、本体装置２は、左コントローラ３及び／又は右コントローラ４から姿勢データ（後述する）を受信し、受信した姿勢データに基づいた各種処理（例えば、ゲーム画像を表示するための仮想カメラの姿勢制御）を行う。
【００７３】
図３に示すように、右コントローラ４は、処理部４１と、メモリ４２と、慣性センサ４３と、フラッシュメモリ４４と、通信制御部４５と、端子４６とを備える。なお、これらの他にも右コントローラ４は、複数のボタン及びアナログスティック（図１参照）等の入力部を備える。
【００７４】
処理部４１は、バスを介してメモリ４２、慣性センサ４３、フラッシュメモリ４４、通信制御部４５、及び、端子４６に接続される。詳細は後述するが、処理部４１は、慣性センサ４３からの出力に基づいて、右コントローラ４の姿勢を算出する。
【００７５】
また、フラッシュメモリ４４は、右コントローラ４を制御するファームウェア、後述する姿勢データを算出するための制御プログラム等を記憶する。
【００７６】
通信制御部４５は、端子４６を介した有線通信と、端子４６を介さない無線通信との両方で本体装置２と通信を行うことが可能である。すなわち、図１に示すように右コントローラ４が本体装置２に装着されている場合、通信制御部４５は、端子４６を介して本体装置２と通信を行う。また、図２に示すように右コントローラ４が本体装置２から外されている場合、通信制御部４５は、本体装置２（具体的には、コントローラ通信部２３）との間で無線通信を行う。
【００７７】
例えば、図２に示すように本体装置２に右コントローラ４が装着されていない場合、処理部４１によって算出された右コントローラ４の姿勢を表す姿勢データは、無線通信により本体装置２に送信される。あるいは、図１に示すように本体装置２に右コントローラ４が装着されている場合、姿勢データは、端子４６を介して有線通信により本体装置２に送信される。また、通信制御部４５は、各入力部（具体的には、各ボタン、アナログスティック等）からの操作情報を取得し、取得した情報（または取得した情報に所定の加工を行った情報）を含む操作データを本体装置２へ送信する。
【００７８】
本体装置２と右コントローラ４との間の通信は、所定時間に１回の割合で繰り返し行われる。この本体装置２と右コントローラ４との間の１回の通信では、各入力部に対する操作に応じた操作データ、及び、慣性センサ４３からの出力に応じた姿勢データが、右コントローラ４から本体装置２に送信される。なお、操作データおよび姿勢データはそれぞれ別のタイミングで送信されてもよい。例えば、あるタイミングにおける本体装置２と右コントローラ４との間の通信において、操作データおよび姿勢データのうちの何れか一方のデータが右コントローラ４から本体装置２に送信され、別のタイミングにおける当該通信において、他方のデータが右コントローラ４から本体装置２に送信されてもよい。
【００７９】
慣性センサ４３は、例えば６軸センサである。具体的には、慣性センサ４３は、加速度センサと角速度センサとを含む。加速度センサは、所定の３軸（例えば、図１に示すｘｙｚ軸）方向に沿った加速度の大きさを検出する。角速度センサは、所定の３軸（例えば、図１に示すｘｙｚ軸）回りの角速度を検出する。処理部４１は、慣性センサ４３からの角速度値に基づいて、右コントローラ４の姿勢を算出する。算出された姿勢に応じた姿勢データは、圧縮されて本体装置２に送信される。なお、処理部４１は、慣性センサ４３からの角速度値に加えて、加速度値に基づいて、コントローラの姿勢を算出してもよい。
【００８０】
なお、図３に示す構成は単なる一例であり、物理的な構成は図３に示す構成とは異なってもよい。例えば、通信制御部４５と処理部４１とメモリ４２とが一体として構成されてもよい。また、コントローラ及び／又は本体装置２は、他のデバイス、センサ、装置を備えてもよい。また、図３では、コントローラは、加速度センサと角速度センサとを含む慣性センサ４３を備えるものとしたが、加速度センサと角速度センサとは別々のセンサであってもよい。
【００８１】
（姿勢データの本体装置２への送信）
次に、コントローラにおいて姿勢データが算出され、算出された姿勢データが本体装置２に送信される場合の処理について説明する。図４は、姿勢データが右コントローラ４から本体装置２に送信されるときの処理の流れを示す図である。
【００８２】
図４に示すように、まず、慣性センサ４３からの加速度値および角速度値が、所定の周波数でサンプリングされる。例えば、加速度値および角速度値のサンプリング周波数は８００Ｈｚであってもよい。次に、サンプリングされた角速度値に基づいて、右コントローラ４の姿勢が算出される。具体的には、慣性センサ４３から出力された角速度値を積分することにより、右コントローラ４の姿勢を表すクォータニオン「ｑ」が算出される。この姿勢の算出は、処理部４１によって行われる。
【００８３】
コントローラの姿勢を表すクォータニオン「ｑ」は、複素数ｉ、ｊ、ｋを用いて以下の式１によって表される。
ｑ＝ｗ＋ｘｉ＋ｙｊ＋ｚｋ        （式１）
【００８４】
ここで、ｉ、ｊ、ｋは以下の関係を満たす。
ｉ２＝ｊ２＝ｋ２＝ｉｊｋ＝−１、
ｉｊ＝−ｊｉ＝ｋ、ｊｋ＝−ｋｊ＝ｉ、ｋｉ＝−ｉｋ＝ｊ
【００８５】
また、ｘ、ｙ、ｚは回転軸を表し、ｗは回転角を表す。クォータニオンｑは、４つの成分（ｗ、ｘ、ｙ、ｚ）を有するベクトルとして見なされる。ここでｑのノルムは１である。すなわち、ｗ、ｘ、ｙ、ｚは以下の式２を満たす。
ｗ２＋ｘ２＋ｙ２＋ｚ２＝１        （式２）
【００８６】
式２から、４つの成分のうちの３つの成分をコントローラから本体装置２に送信すれば、本体装置２は、残り１つの成分を復元することができる。このため、本実施形態では、４つの成分のうちの１の成分を省略して、３つの成分をコントローラから本体装置２に送信する。本実施形態では、省略する成分は、絶対値が最も大きな成分であるとする。コントローラから本体装置２に送信される情報には、省略された成分を示す情報が含まれる。これにより、コントローラから本体装置２に送信するデータ量を削減することができるとともに、本体装置２において、３つの成分を有するベクトルからコントローラの姿勢を表すｑを算出することができる。なお、４つの成分のうちの省略する成分は絶対値が最も大きな成分でなくてもよい。
【００８７】
以下では、コントローラの姿勢を表す４つの成分を有するクォータニオンを「ｑ」と表記する。また、４つの成分のうちの１つを省略した、３つの成分を有するベクトルを「ｆ」と表記することがある。「ｆ」は、コントローラの姿勢を表す姿勢データと言える。
【００８８】
なお、式２から明らかなように、クォータニオンｑの各成分ｗ、ｘ、ｙ、ｚの絶対値はそれぞれ「１」以下の値であるが、本実施形態では、ベクトルｆの各成分については、整数で表現する。例えば、ｑの各成分に１０のｎ乗をかけた値を、ｆの各成分として定義する。
【００８９】
また、時刻ｔにおけるコントローラの姿勢を表すｑ（ｔ）は、以下の漸化式を用いて算出される。
ｑ（ｔ）＝１／２×ｑ（ｔ−１）＊ω×Δｔ        （式３）
ここで、ωは慣性センサ４３からの角速度値である。Δｔは、サンプリング周期である。
【００９０】
本実施形態では、式３によって算出されるクォータニオンｑの各成分（ｗ、ｘ、ｙ、ｚ）は、それぞれ、３２ｂｉｔで表現されるデータである。
【００９１】
姿勢を表すｑが算出されると、間引き処理が行われる。姿勢算出処理では８００Ｈｚ（すなわち、１秒間で８００回）でｑが算出されるところ、間引き処理では、例えば２００Ｈｚでｑが間引かれる。すなわち、姿勢算出処理で算出された時系列に連続する４つのｑのうちの１つが、間引き処理において抽出される。
【００９２】
次に、モード選択が行われる。モード選択は、姿勢データを複数のモードのうちのどのモードで圧縮して本体装置２に送信するかを選択する処理である。各モードによって、姿勢データの圧縮方法が異なる。なお、本実施形態では、モード選択は、コントローラが本体装置２から外された状態（すなわち、コントローラと本体装置２とが無線で接続された状態）において行われる。コントローラが本体装置２に装着された状態でもモード選択が行われてもよい。
【００９３】
モード選択において複数のモードのうちの何れかのモードが選択された場合、選択されたモードに応じて姿勢データが圧縮され、圧縮された姿勢データを含むパケットが通信制御部４５によって生成される。そして、生成されたパケットが無線で本体装置２に送信され、本体装置２において当該パケットが受信される。本外装置２は、受信したパケットから圧縮された姿勢データを取り出し、当該データを伸張して、クォータニオンｑを復元し、復元したｑに基づいて、所定の情報処理を行う。
【００９４】
（各モードの詳細）
次に、各モードの詳細について説明する。図５は、複数のモードの一例を示す図である。
【００９５】
図５に示すように、複数のモードには、モード２と、モード１と、モード０とがある。間引き処理によって取得された３つのクォータニオンに基づいて、条件が満たされるか否かが判定され、その判定結果に応じてモードが選択される。以下では、取得された３つのクォータニオンを、取得された順に「ｑ０」、「ｑ１」、「ｑ２」と表記する。すなわち、時点ｔ０における慣性センサ４３からの出力に基づいて取得されたｑを「ｑ０」と表記し、時点ｔ０の後の時点ｔ１における慣性センサ４３からの出力に基づいて取得されたｑを「ｑ１」と表記し、時点ｔ１の後の時点ｔ２における慣性センサ４３からの出力に基づいて取得されたｑを「ｑ２」と表記する。また、「ｑ０」、「ｑ１」、「ｑ２」のそれぞれ対応する、３つの成分で表されるベクトルｆを、「ｆ０」、「ｆ１」、「ｆ２」とそれぞれ表記する。
【００９６】
具体的には、まず、モード２を適用可能か否かが判定され、モード２を適用可能と判定された場合には、モード２が選択される。モード２を適用不可能と判定された場合には、モード１を適用可能か否かが判定され、モード１を適用可能と判定された場合には、モード１が選択される。そして、モード１を適用不可能と判定された場合には、モード０が選択される。以下、各モードおよび各モードが適用されるための条件について説明する。
【００９７】
（モード２の説明）
モード２は、コントローラが静止している状態のときに選択されるモードである。ここで、「コントローラが静止している状態」とは、コントローラの慣性センサ４３が検出する角速度値が「０」、又は、静止しているとみなせる程度に微小な値をとなる状態をいう。すなわち、「コントローラが静止している状態」とは、少なくともその時点において、コントローラが完全に静止している、または、ほぼ静止していると見なせる程に、慣性センサ４３からの角速度値が「０」又は微小な値を示す状態である。
【００９８】
モード２は、第１条件が満たされている場合に選択される。第１条件が満たされることは、以下の式４が成立し、かつ、式５が成立することである。
ｆ２−ｆ０＜所定値        （式４）（第１条件Ａ）
Δｆ１＜所定値            （式５）（第１条件Ｂ）
【００９９】
ここで、Δｆ１は、以下の式６によって表される。
Δｆ１＝ｆ１−（ｆ２＋ｆ０）／２        （式６）
【０１００】
図６は、式４を概念的に表した図である。すなわち、モード２を選択するための第１条件の１つ（第１条件Ａ）は、ｆ０およびｆ２の差分が所定値未満であることである。図６では、ｆ０、ｆ１、ｆ２の１つの成分を表しており、その１つの成分が所定値未満であることを示している。実際には、ｆ０、ｆ１、ｆ２は、それぞれ３つの成分を有するベクトルであり、「ｆ２−ｆ０」は、ベクトルｆ２とベクトルｆ０との差分ベクトルである。したがって、式４は、この差分ベクトル「ｆ２−ｆ０」のノルムが所定値未満であることを示している。式４（第１条件Ａ）が成立しない場合は、モード２は選択されず、モード１を選択するための第２条件が成立するか否かが判定される。第２条件については後述する。
【０１０１】
第１条件Ａ（式４）が成立している場合、次に、第１条件Ｂが成立しているか否かが判定される。図７は、第１条件Ｂを概念的に表した図である。なお、図７も、図６と同様に、ｆ０、ｆ１、ｆ２の１つの成分を表している。具体的には、コントローラは、ｆ２及びｆ０の平均を算出し、ｆ１と当該平均との差分（差分ベクトル）をΔｆ１として算出する。そして、コントローラは、Δｆ１のノルムが所定値未満であるか否かを判定する。ここで、第１条件Ｂの所定値は、第１条件Ａの所定値と異なっていてもよいし、同じであってもよい。第１条件Ａを満たすと判定され、かつ、第１条件Ｂを満たすと判定された場合、モード２が選択される。
【０１０２】
第１条件Ａが成立するということは、ｆ０とｆ２の各成分の値が近いということである。また、第１条件Ｂが成立するということは、中央のサンプルｆ１が、ｆ０及びｆ２の平均と離れすぎていないということである。このことは、３つのサンプルｆ０、ｆ１、ｆ２の各成分の値を図７に示すようなグラフにプロットした場合に、３つのサンプルが横方向にほぼ直線上に並ぶことを意味する。すなわち、第１条件Ａが成立し、かつ、第１条件Ｂが成立する場合、少なくともこの期間においては、コントローラの姿勢がほぼ変化していない状態を意味し、コントローラが静止している状態であることを意味する。
【０１０３】
モード２が選択された場合、ｆ０、ｆ１、ｆ２が圧縮され、当該圧縮されたデータを含む第１圧縮データが生成される。図８Ａは、モード２が選択された場合に生成される第１圧縮データのデータ構造の一例を示す図である。
【０１０４】
図８Ａに示すように、モード２が選択されたときに生成される第１圧縮データ２１０は、タイムスタンプ（ＴＳ）２００と、モード情報（Ｍ）２０１と、省略情報（Ｄ）２０２とを含む。
【０１０５】
タイムスタンプ２００は時刻情報である。タイムスタンプ２００は、３つのクォータニオンｑ０、ｑ１、ｑ２のうちの何れか算出されたときの時刻情報であってもよい。また、タイムスタンプ２００は、角速度値（ｑ０、ｑ１、ｑ２のうちの何れかの算出に用いられた角速度値）が取得されたときの時刻情報であってもよい。
【０１０６】
モード情報２０１は、３つのモードのうちの何れのモードで姿勢データが圧縮されたかを示す情報である。モード２が選択された場合には、モード情報２０１として、例えば、「２」が設定される。
【０１０７】
また、省略情報２０２は、クォータニオンｑの４つの成分のうち、どの成分が省略されているかを示す情報である。なお、モード２では、コントローラが静止している状態であり、ｑ０、ｑ１、ｑ２はそれぞれ大きく離れていない。このため、省略される成分（絶対値が最も大きな成分）は、ｑ０、ｑ１、ｑ２で共通である。したがって、モード２では、３つのｆ０、ｆ１、ｆ２に共通する１つの省略情報２０２が第１圧縮データ２１０に含められ、本体装置２に送信される。
【０１０８】
また、第１圧縮データ２１０は、Δｆ０（３成分）を格納する姿勢データ部２０３と、Δｆ１（３成分）を格納する姿勢データ部２０４と、ｆ２（３成分）を格納する姿勢データ部２０５とを含む。
【０１０９】
具体的には、ｆ２の各成分に２４ｂｉｔが割り当てられる。すなわち、上述のようにｑ及びｆの各成分は３２ビットのデータで表されるが、ｆ２の各成分は、３２ビットから２４ビットに圧縮される。
【０１１０】
したがって、ｆ２に割り当てられるデータサイズ（姿勢データ部２０５のビット数）は、２４ビット×３成分＝７２ビットである。例えば、ｑ２の４つの成分ｗ、ｘ、ｙ、ｚのうち、ｗの絶対値が最も大きい場合、ｗが省略される（すなわち、圧縮される。）。このためｘ、ｙ、ｚ成分に対して、それぞれ２４ビットが割り当てられ、これら３つの成分の値が、コントローラの姿勢を表す姿勢データｆ２として、本体装置２に送信される。
【０１１１】
また、ｆ２とｆ０との差分（ベクトルｆ２とベクトルｆ０との差分ベクトル）がΔｆ０として算出され、算出されたΔｆ０の各成分には、１３ビットが割り当てられる。具体的には、Δｆ０には、１３ビット×３成分＝３９ビットが割り当てられる。例えば、ｑ０の４つの成分ｗ、ｘ、ｙ、ｚのうちｗが省略される場合、Δｆ０のｘ成分、ｙ成分、ｚ成分に、それぞれ１３ビットが割り当てられる。本体装置２は、コントローラからΔｆ０及びｆ２を受信し、Δｆ０及びｆ２に基づいて、ｆ０の各成分（例えば、ｘ成分、ｙ成分、ｚ成分）を算出する。そして、本体装置２は、ｑ０の省略された成分（例えば、ｗ成分）を、上記式２に基づいて算出することにより、ｑ０を復元する。
【０１１２】
また、式６に基づいて算出されるΔｆ１の各成分に対しては、４ビットが割り当てられる。具体的には、Δｆ１には、４ビット×３成分＝１２ビットが割り当てられる。本体装置２は、コントローラから受信したΔｆ１、ｆ２、及びΔｆ０に基づいて、ｆ１の各成分を算出する。そして、本体装置２は、算出したｆ１の３つの成分に基づいて、省略された成分を算出し、ｑ１を復元する。
【０１１３】
図８Ａに示すモード２の第１圧縮データ２１０の姿勢データ部（Δｆ０、Δｆ１、及びｆ２）のデータサイズは、合計で１３×３＋４×３＋２４×３＝１２３ビットである。一方、圧縮しない場合の姿勢データのサイズは、クォータニオンｑの各成分が３２ビットで表される場合は、３２ビット×３成分×３＝２８８ビットである。このため、モード２の圧縮によって、３つのモードのうちの何れのモードが選択されているかを示すモード情報２０１を付加する必要があるものの、このモード情報２０１は２ビットで表されるため、全データサイズとしては圧縮しない場合に比べてデータサイズを削減することができる。
【０１１４】
図８Ａに示す第１圧縮データ２１０に所定のヘッダが付加されてパケットが生成され、コントローラから本体装置２に送信される。本体装置２は、第１圧縮データ２１０を含むパケットを受信し、受信したΔｆ０、Δｆ１、及びｆ２から、ｆ０、ｆ１、ｆ２を復元し、さらに式２と省略情報２０２とに基づいて、ｑ０、ｑ１、ｑ２を復元する。
【０１１５】
モード２では、Δｆ０及びΔｆ１よりもｆ２により多くのビットが割り当てられる。このため、ｆ２については圧縮前のｆ２（３２ビット）に近い情報量で本体装置２に送信することができ、コントローラの姿勢に関するより正確な情報を本体装置２に送信することができる。例えば、姿勢データの総データ量をモード２の圧縮方法による総データ量（１２３ビット）以下に抑える前提で、ｆ０、ｆ１、ｆ２についてそれぞれ同じビット数で表す場合、後述するモード０のように、ｆ０、ｆ１、ｆ２をそれぞれ１３ビットで表すことになる（１３ビット×３成分×３＝１１７、１４ビット×３成分×３＝１２６であるため）。この場合、ｆ２（ｆ１及びｆ０も）は３２ビットから１３ビットに圧縮されるため、より多くの情報が失われてしまう。そうすると、この圧縮されたｆ０、ｆ１、ｆ２に基づいて、本体装置２においてコントローラの姿勢を正確に復元することができない。例えば、コントローラの姿勢と一致するように本体装置２においてゲームオブジェクトを表示する場合、実際にはコントローラが静止しているにもかかわらず、本体装置２がコントローラの姿勢を正確に復元できないため、ゲームオブジェクトが僅かに揺れているように表示される場合がある。しかしながら、モード２の圧縮方法では、ｆ２により多くのビットを割り当てるため、ｆ２を圧縮したときに失われる情報量をより小さくすることができる。このため、本体装置２においてコントローラの姿勢をより正確に復元することができる。
【０１１６】
また、モード２では、コントローラが静止している状態で選択されるため、ｆ２とｆ０との差分であるΔｆ０については、各成分の値は比較的小さな値となる。このため、比較的小さなデータ量（具体的には１３ビット）であっても、この比較的小さな値を表現することができる。
【０１１７】
同様に、モード２では、ｆ１をそのまま本体装置２に送信するのではなく、ｆ１と、ｆ２及びｆ０の平均との差分であるΔｆ１が、本体装置２に送信される。モード２では、コントローラが静止している状態で選択されるため、このΔｆ１については、各成分の値は比較的小さな値となる。このため、比較的小さなデータ量（具体的には４ビット）であっても、この比較的小さな値を表現することができる。
【０１１８】
（モード１の説明）
図５に戻り、モード１は、コントローラの姿勢が線形的に変化している状態（姿勢が急激に変化していない状態）のときに選択されるモードである。ここでコントローラの姿勢が線形的に変化している状態とは、ｑ０、ｑ１、ｑ２の各成分がほぼ同じ割合で増加しているか、減少している状態である。すなわち、例えば図７において、ｆ０、ｆ１、ｆ２が斜め方向にほぼ一直線上に並んだ状態である。
【０１１９】
具体的には、モード１は、上記第１条件（第１条件Ａおよび第１条件Ｂ）が成立していない場合において、第２条件が成立しているときに選択されるモードである。第２条件が成立することは、次に示す第２条件Ａが成立し、かつ、第２条件Ｂが成立することである。
【０１２０】
すなわち、第２条件の１つ（第２条件Ａと表記する）は、ｑ１の最大成分（絶対値が最大となる成分）と同じｑ０およびｑ２の成分が所定値よりも大きいことである。例えば、ｑ１の最大成分が「ｘ」であった場合に、ｑ０、ｑ２のｘ成分が所定値（０より大きな所定値。例えば、「０．５」）よりも大きい場合、第２条件Ａが成立する。この第２条件Ａは、圧縮対象となるｑの各成分が１未満であることを担保するための条件である。例えば、ｑ１、ｑ０、ｑ２の最大成分がｘである場合、ｑ１、ｑ０、ｑ２のｗ、ｙ、ｚ成分が圧縮対象となる（ｗ、ｙ、ｚ成分を有するベクトルｆ１、ｆ０、ｆ２が圧縮対象となる）。ｑ１、ｑ０、ｑ２の最大成分が所定値より大きいということは、残りの成分は、式２から「１」未満となる。仮に、ｑ１、ｑ０、ｑ２の最大成分が０の場合、残りの成分は「１」（又は「１」近辺）になる場合がある。「１」又は「１」近辺の値を圧縮する場合、圧縮精度が低くなる可能性がある。したがって、ここでは、圧縮精度を担保するため、第２条件Ａが成立するか否かが判定される。なお、実際には、圧縮されるデータはｑの各成分ではなく、ｑを整数化したｆの各成分であるが、ここでは圧縮対象をｑの各成分として説明している。第２条件Ａが成立していない場合は、モード１は選択されず、モード０が選択される。
【０１２１】
第２条件Ａが成立していると判定された場合、次に第２条件Ｂが成立しているか否かが判定される。第２条件Ｂは、式６で算出されるΔｆ１の各成分を８ビットで表現できることである。具体的には、第２条件Ｂは、Δｆ１の各成分の値が−１２８〜１２７の範囲内であることである。Δｆ１の各成分が８ビットで表現できるということは、Δｆ１の各成分は比較的小さな値であると言える。このことは、各成分に関して、中央のサンプルｆ１の値が、ｆ０とｆ２との平均値から離れすぎていないことを意味する。つまり、第２条件（第２条件Ａ及び第２条件Ｂ）が成立するか否かの判定は、ｆ０、ｆ１、ｆ２が線形性を有するか否かの判定と言うことができる。
【０１２２】
Δｆ１の各成分を８ビットで表現できる場合は、モード１が選択される。モード１が選択された場合、上記モード２とは異なる圧縮方法でｆ０、ｆ１、ｆ２が圧縮され、第２圧縮データが生成される。
【０１２３】
図８Ｂは、モード１が選択された場合に生成される第２圧縮データのデータ構造の一例を示す図である。図８Ａと同様に、モード１が選択された場合に生成される第２圧縮データ２２０は、タイムスタンプ２００と、モード情報２０１と、省略情報２０２とを含む。モード１が選択された場合には、モード情報２０１として、例えば、「１」が設定される。
【０１２４】
また、第２圧縮データ２２０は、ｆ０（３成分）を格納する姿勢データ部２０３と、Δｆ１（３成分）を格納する姿勢データ部２０４と、ｆ２（３成分）を格納する姿勢データ部２０５とを含む。
【０１２５】
ｆ０およびｆ２の各成分は、それぞれ３２ビットから１６ビットに圧縮される。具体的には、モード１では、ｆ２には１６ビット×３成分＝４８ビットが割り当てられ、ｆ０にも１６ビット×３成分＝４８ビットが割り当てられる。
【０１２６】
また、ｆ１に関して、コントローラは、上記式６に基づいて算出されたΔｆ１の各成分について、それぞれ３２ビットから８ビットに圧縮する。すなわち、Δｆ１に対しては、８ビット×３成分＝２４ビットが割り当てられる。
【０１２７】
図８Ｂに示すように、モード１の場合も第２圧縮データ２２０にはｆ０、Δｆ１、ｆ２に共通の省略情報２０２が含まれる。モード１は、コントローラの姿勢が線形的に変化している状態である。このため、ｑ０、ｑ１、ｑ２について、４つの成分のうち絶対値が最大となる成分は共通しているため、省略情報２０２は、ｆ０、Δｆ１、ｆ２で共通である。したがって、モード１においても、モード２と同様に、３つのｆ０、ｆ１、ｆ２に共通する１つの省略情報２０２を本体装置２に送信する。
【０１２８】
なお、図８Ｂに示すモード１の第２圧縮データ２２０の姿勢データ部（ｆ０、Δｆ１、ｆ２）のデータサイズは、１６×３＋８×３＋１６×３＝１２０ビットである。
【０１２９】
（モード０の説明）
図５に戻り、モード０は、第１条件（第１条件Ａおよび第１条件Ｂ）及び第２条件（第２条件Ａおよび第２条件Ｂ）が成立していないときに選択されるモードである。すなわち、モード２が選択されず、かつ、モード１も選択されなかった場合に、モード０が選択される。モード０は、コントローラが任意の状態（例えば、コントローラの姿勢が短時間で急激に変化している状態）のときに選択される。モード０が選択された場合、ｆ０、ｆ１、ｆ２が圧縮され、第３圧縮データが生成される。
【０１３０】
図８Ｃは、モード０が選択された場合に生成される第３圧縮データのデータ構造の一例を示す図である。図８Ｃに示すように、モード０が選択された場合の第３圧縮データ２３０は、モード２及びモード１と同様に、タイムスタンプ２００と、モード情報２０１とを含む。モード０が選択された場合には、モード情報２０１として、例えば、「０」が設定される。
【０１３１】
図８Ｃに示すように、モード０の第３圧縮データ２３０には、省略情報２０２ａと、省略情報２０２ｂと、省略情報２０２ｃとが含まれる。省略情報２０２ａは、ｆ０に関する省略情報であり、ｑ０の４つの成分のうちの何れの成分が省略されているかを示す情報である。例えば、４つの成分ｗ、ｘ、ｙ、ｚのうちのｗ成分が省略されている場合は省略情報２０２ａに「０」が格納され、ｘ成分が省略されている場合は省略情報２０２ａに「１」が格納されてもよい。同様に、省略情報２０２ｂは、ｆ１に関する省略情報であり、ｑ１の４つの成分のうちの何れの成分が省略されているかを示す情報である。また、省略情報２０２ｃは、ｆ２に関する省略情報であり、ｑ２の４つの成分のうちの何れの成分が省略されているかを示す情報である。
【０１３２】
モード０は、コントローラが静止しておらず、コントローラの姿勢の変化が線形的でないときに選択されるモードであり、例えば、コントローラの姿勢が急激に変化しているときに選択されるモードである。この場合、ｑ０、ｑ１、ｑ２について、４つの成分のうち最大となる成分はそれぞれ異なる可能性がある。例えば、ｑ０については、絶対値が最大となる成分はｘ成分であり、ｑ１については、絶対値が最大となる成分はｙ成分となる場合がある。このため、モード０が選択された場合には、ｆ０、ｆ１、ｆ２のそれぞれについて、最大成分（絶対値が最大となる成分）が省略される。したがって、ｆ０、ｆ１、ｆ２のそれぞれについて、省略情報２０２が設定される。
【０１３３】
モード０が選択された場合、ｆ０、ｆ１、ｆ２の各成分は、それぞれ３２ビットから１３ビットに圧縮される。具体的には、ｆ０については、１３ビット×３成分＝３９ビットが割り当てられ、ｆ１についても、１３ビット×３成分＝３９ビットが割り当てられ、ｆ２については、１３ビット×３成分＝３９ビットが割り当てられる。
【０１３４】
なお、図８Ｃに示すモード０の第３圧縮データ２２０の姿勢データ部（ｆ０、ｆ１、ｆ２）のデータサイズは、１３×３×３＝１１７ビットである。
【０１３５】
図９は、モード２で姿勢データを圧縮した場合の圧縮前の姿勢データと、圧縮された姿勢データが本体装置に送信されて本体装置に応じて復元された後の姿勢データとの比較を示す図である。
【０１３６】
図９の破線は、コントローラにおいて算出される圧縮前のクォータニオンｑの値（ｑの４成分のうちの１つの成分の値）を示す。また、図９の実線は、本体装置２において復元された後のクォータニオンｑの値（ｑの４成分のうちの１つの成分の値）を示す。
【０１３７】
図９に示すように、コントローラが静止している状態である場合でも、慣性センサ４３は僅かに角速度を検出することがあり、圧縮前の姿勢データ（破線）は僅かに変動する。このコントローラにおいて算出された姿勢データがモード２により圧縮され、本体装置２に送信される。本体装置２は、圧縮された姿勢データを復元する。図９に示すように、この復元した後の姿勢データは、圧縮前の姿勢データと僅かにずれる場合があるものの、本体装置２において復元した後の姿勢データと、コントローラにおいて算出された圧縮前の姿勢データとはほぼ一致する。
【０１３８】
図示は省略するが、仮に、コントローラが静止している状態において、モード２によって姿勢データを圧縮せずに、モード０によって姿勢データを圧縮する場合、圧縮前の姿勢データと復元後の姿勢データとのずれは、図９に示すずれよりも大きくなる。
【０１３９】
また、図示は省略するが、コントローラの姿勢が線形的に変化している場合、モード１によって姿勢データを圧縮した場合の方が、モード０によって姿勢データを圧縮した場合の方よりも、圧縮前の姿勢データと復元後の姿勢データとのずれは小さくなる。
【０１４０】
このように、本実施形態では、コントローラの状態によって姿勢データを異なる方法で圧縮する。具体的には、コントローラの慣性センサ４３からのデータに基づいて判別される状態によって、異なる方法で姿勢データを圧縮する。これにより、本体装置２において正確に姿勢データを復元することができる。
【０１４１】
（コントローラにおける処理の詳細）
次に、コントローラにおいて行われる処理の詳細について説明する。まず、コントローラに記憶されるデータについて説明する。図１０は、コントローラに記憶されるデータの一例を示す図である。
【０１４２】
図１０に示すように、コントローラ（のメモリ４２又はフラッシュメモリ４５）には、制御プログラムと、センサデータと、姿勢データと、圧縮データとが記憶される。
【０１４３】
制御プログラムは、慣性センサ４３からの出力に基づいてコントローラの姿勢を表すｑを算出するためのプログラム、コントローラと本体装置２との間の通信を制御するためのプログラム、上記複数のモードのうちの何れかを選択するためのプログラム、選択したモードでｆを圧縮するためのプログラム、図８Ａ〜図８Ｃに示した圧縮データを生成するためのプログラム、圧縮データを本体装置２に送信するためのプログラム等を含む。
【０１４４】
センサデータは、慣性センサ４３から出力される各軸周りの角速度値を示すデータである。
【０１４５】
姿勢データは、慣性センサ４３からの出力に基づいて算出されたコントローラの姿勢を表すクォータニオンｑを示すデータである。姿勢データは、少なくとも、３つのサンプル（ｑ０、ｑ１、ｑ２）を含む。クォータニオンｑは、ｗ、ｘ、ｙ、ｚの４つの成分を有する。また、姿勢データは、ｑの４成分のうちの１成分を省略したベクトルｆを含み、ｑ０に対応するｆ０、ｑ１に対応するｆ１、ｑ２に対応するｆ２を含む。
【０１４６】
また、圧縮データは、ｆ０、ｆ１、ｆ２を圧縮した後のデータであり、コントローラから本体装置２に送信されるデータである。具体的には、圧縮データは、図８Ａ〜図８Ｃに示すデータである。
【０１４７】
次に、コントローラにおいて行われる処理の詳細について具体的に説明する。図１１は、コントローラにおいて行われる処理の一例を示すフローチャートである。図１１に示す処理は、コントローラの処理部４１が制御プログラムを実行することにより、行われる。なお、図１１では、姿勢データの算出、送信に関する処理のみが示されているが、コントローラはこれらの処理に加えて他の処理（ボタンやアナログスティックに対する操作に応じた操作データに関する処理等）も実行する。
【０１４８】
図１１に示すように、コントローラ（の処理部４１）は、慣性センサ４３から各軸周りの角速度値を取得する（ステップＳ１００）。次に、コントローラは、取得した角速度値に基づいて、コントローラの姿勢を表すクォータニオンｑを算出して取得する（ステップＳ１０１）。
【０１４９】
ステップＳ１０１に続いて、コントローラは、本体装置２と通信するタイミングか否かを判定する（ステップＳ１０２）。本体装置２と通信するタイミングでない場合（ステップＳ１０２：ＮＯ）、コントローラは、ステップＳ１００の処理を再び実行する。本実施形態では、ステップＳ１００〜ステップＳ１０２の処理は、１／８００秒間隔で繰り返し行われる。また、ステップＳ１０２においては、ステップＳ１００〜ステップＳ１０２の処理が４回行われた場合に、ＹＥＳと判定される。すなわち、本実施形態では、慣性センサ４３からの角速度値の取得、及び、姿勢を表す「ｑ」の取得は、１／８００秒間隔で行われ、ステップＳ１０３以降の処理は、１／２００秒間隔で繰り返し行われる。
【０１５０】
ステップＳ１０２でＹＥＳと判定した場合、コントローラは、間引き処理を行う（ステップＳ１０３）。ここでは、コントローラは、ステップＳ１０１で算出した最新のｑを抽出する。
【０１５１】
ステップＳ１０３に続いて、コントローラは、モード２を選択するための第１条件を満たすか否か判定する（ステップＳ１０４）。本実施形態では、第１条件は、第１条件Ａと第１条件Ｂとを含む。第１条件Ａは、ｆ２とｆ０との差分が所定値未満であることである。具体的には、コントローラは、まずクォータニオンｑ１の４つの成分のうち、絶対値が最大の成分（例えば、ｗ成分）を選択し、最大の成分を省略したｆ１（例えば、ｘ、ｙ、ｚの３成分を有するベクトル）を設定する。また、ｑ２、ｑ０について、同じ成分（例えばｗ成分）を省略したｆ２、ｆ０を設定する。そして、コントローラは、ｆ２と、ｆ０との差分ベクトルを算出し、第１条件Ａとして、当該差分ベクトルのノルムが所定値未満か否かを判定する。なお、ｑ２は、ステップＳ１０１で算出した最新のｑであってもよい。また、ｑ１は、ｑ２の直前にステップＳ１０１で算出したｑ（すなわち、１／８００秒前に算出されたｑ）であり、ｑ０は、ｑ１の直前にステップＳ１０１で算出したｑ（すなわち、１／８００秒前に算出されたｑ）であってもよい。また、ｑ２は、ステップＳ１０１で算出した最新のｑであり、ｑ１は、ｑ２より前にステップＳ１０３で抽出したｑ（すなわち、１／２００秒前に算出されたｑ）であり、ｑ０は、ｑ１より前にステップＳ１０３で抽出したｑ（すなわち、１／２００秒前に算出されたｑ）であってもよい。
【０１５２】
コントローラは、第１条件Ａが成立していると判定した場合、ステップＳ１０４においてさらに第１条件Ｂが成立しているか否かを判定する。具体的には、コントローラは、ｆ２とｆ０との平均を算出し、ｆ１と当該平均との差分をΔｆ１として算出する。そして、コントローラは、第１条件Ｂとして、Δｆ１のノルムが所定値未満か否かを判定する。
【０１５３】
第１条件Ａ又は第１条件Ｂが成立していないと判定した場合（ステップＳ１０４：ＮＯ）、コントローラは、モード１を選択するための第２条件を満たすか否かを判定する（ステップＳ１０５）。具体的には、コントローラは、まず、第２条件Ａが成立しているか否かを判定する。第２条件Ａは、ｑ１の最大成分（絶対値）と同じ、ｑ０およびｑ２の成分が所定値より大きいことである。例えば、ｑ１の最大成分（絶対値）がｗである場合、コントローラは、ｑ０およびｑ２のｗ成分が所定値より大きいか否かを判定する。コントローラは、第２条件Ａが成立していないと判定した場合、ステップＳ１０５でＮＯと判定する。一方、コントローラは、第２条件Ａが成立していると判定した場合、さらに第２条件Ｂが成立しているか否かを判定する。第２条件Ｂは、Δｆ１が８ビットで表現可能であること（−１２８〜１２７の範囲内）である。コントローラは、第２条件Ｂが成立していると判定した場合は、ステップＳ１０５でＹＥＳと判定し、第２条件Ｂが成立していないと判定した場合は、ステップＳ１０５でＮＯと判定する。
【０１５４】
ステップＳ１０４でＹＥＳと判定した場合、コントローラは、モード２を選択し、選択したモード２で姿勢データを圧縮する（ステップＳ１０６）。具体的には、コントローラは、上述のように、ｆ２の各成分を２４ビットに圧縮し、ｆ２とｆ０との差であるΔｆ０の各成分を１３ビットに圧縮し、Δｆ１の各成分を４ビットに圧縮する。そして、コントローラは、これら圧縮したデータを含む第１圧縮データを生成する。
【０１５５】
ステップＳ１０５でＹＥＳと判定した場合、コントローラは、モード１を選択し、選択したモード１で姿勢データを圧縮する（ステップＳ１０７）。具体的には、コントローラは、上述のように、ｆ２の各成分を１６ビットに圧縮し、ｆ０の各成分を１６ビットに圧縮し、Δｆ１の各成分を８ビットに圧縮する。そして、コントローラは、これら圧縮したデータを含む第２圧縮データを生成する。
【０１５６】
ステップＳ１０５でＮＯと判定した場合、コントローラは、モード０を選択し、選択したモード０で姿勢データを圧縮する（ステップＳ１０８）。具体的には、コントローラは、上述のように、ｆ０の各成分を１３ビットに圧縮し、ｆ１の各成分を１３ビットに圧縮し、ｆ２の各成分を１３ビットに圧縮する。また、ステップＳ１０８では、コントローラは、ｑ０、ｑ１、ｑ２のそれぞれについて、どの成分を省略するかを示す省略情報２０２ａ〜２０２ｃを設定する。例えば、コントローラは、ｑ０についてはｘ成分を省略すると決定した場合は、省略情報２０２ａに「１」を設定するとともに、ｗ、ｙ、ｚの３成分を有するｆ０を設定し、ｆ０の各成分を１３ビットに圧縮する。また、ｑ１についてはｙ成分を省略すると決定した場合は、省略情報２０２ｂに「２」を設定するとともに、ｗ、ｘ、ｚの３成分を有するｆ１を設定し、ｆ１の各成分を１３ビットに圧縮する。また、ｑ２についてはｚ成分を省略すると決定した場合は、省略情報２０２ｃに「３」を設定するとともに、ｗ、ｘ、ｙの３成分を有するｆ２を設定し、ｆ２の各成分を１３ビットに圧縮する。そして、コントローラは、これら圧縮したｆ０、ｆ１、ｆ２に係るデータと、省略情報とを含む第３圧縮データを生成する。
【０１５７】
ステップＳ１０６〜ステップＳ１０８の何れかの処理を行った場合、コントローラは、圧縮データを含むパケットを生成し、生成したパケットを本体装置２に送信する（ステップＳ１０９）。
【０１５８】
（本体装置２で行われる処理の一例）
次に、本体装置２で行われる処理の一例について説明する。図１２は、本体装置２において行われる処理の一例を示すフローチャートである。なお、図１２に示す処理は、所定の時間間隔（例えば、１／２００秒間隔）で繰り返し実行される。
【０１５９】
図１２に示すように、本体装置２は、コントローラからパケットを受信する（ステップＳ２０１）。コントローラからパケットを受信すると、本体装置２は、受信したパケットから姿勢データｆを復元する（ステップＳ２０２）。具体的には、本体装置２は、受信したパケットを解析し、モード情報２０１に基づいてどのモードで圧縮されたかを判定する。そして、本体装置２は、圧縮されたモードに応じた方法で姿勢データｆ０、ｆ１、ｆ２を復元する。例えば、モード２で圧縮されている場合、本体装置２は、ｆ２の各成分を２４ビットから３２ビットに伸張する。また、この場合、本体装置２は、ｆ２とΔｆ０とに基づいてｆ０を算出し、ｆ０の各成分を３２ビットに伸張する。さらに本体装置２は、ｆ２、ｆ０、Δｆ１に基づいて、ｆ１を復元し、ｆ１の各成分を３２ビットに伸張する。
【０１６０】
次に、本体装置２は、姿勢データｆからｑを算出する（ステップＳ２０３）。具体的には、本体装置２は、パケットに含まれる省略情報２０２に基づいて、どの成分が省略されているかを判定し、省略されている成分を算出して、クォータニオンｑを復元する。例えば、姿勢データがモード２又はモード１で圧縮されている場合、ｆ０、ｆ１、ｆ２に共通の省略情報２０２に基づいて、省略されている成分を算出して、ｑ０、ｑ１、ｑ２を復元する。また、姿勢データがモード０で圧縮されている場合、本体装置２は、ｆ０に対応する省略情報２０２ａに基づいて、省略されているｆ０の成分を算出し、ｑ０を復元する。同様に、本体装置２は、ｆ１に対応する省略情報２０２ｂに基づいて、省略されているｆ１の成分を算出し、ｑ１を復元する。また、本体装置２は、ｆ２に対応する省略情報２０２ｃに基づいて、省略されているｆ２の成分を算出し、ｑ２を復元する。
【０１６１】
そして、本体装置２は、復元した姿勢データｑに基づく処理を実行する（ステップＳ２０４）。例えば、姿勢データｑに基づく処理として、仮想空間内の仮想カメラを制御する処理が行われてもよい。また、姿勢データｑに基づく処理として、仮想空間内のユーザオブジェクトを制御する処理が行われてもよい。
【０１６２】
なお、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容は適宜変更されてもよい。また、各処理や判定において用いられた値は変更されてもよい。
【０１６３】
図１３は、コントローラの姿勢の変化と選択されるモードの一例を示す図である。図１３の横軸は時間を示し、縦軸は姿勢を表すｑ（ｑの４成分のうちの１つの成分）を示す。また、図中の上部には、上述した方法により選択されたモードを示す太線が示されている。具体的には、図中の上部には、上、中、下に並ぶ３つの太線が示されている。３つの太線のうち、下の太線はモード２が選択された状態を示し、中間の太線は、モード１が選択された状態を示し、上の太線は、モード０が選択された状態を示す。
【０１６４】
例えば、時点Ｔ１までは、コントローラは静止している状態であり、ｑの値はほぼ「０」である。この時点Ｔ１までは、モード２が選択される。時点Ｔ１においてコントローラがユーザによって振られた場合、コントローラの姿勢が変化し、図１３に示すようにｑの値が変化する。時点Ｔ１からＴ２までは、比較的ゆっくりとコントローラが振られ、この間、モード１が選択される。また、時点Ｔ２においては、一瞬、コントローラが静止している状態として検出され、モード２が選択される。時点Ｔ２から時点Ｔ３までは、再びコントローラがゆっくりと振られ、モード１が選択される。次に、時点Ｔ３〜Ｔ４においてコントローラが激しく振られた場合、コントローラの姿勢が急激に変化する。このＴ３〜Ｔ４の間、モード０が選択される。さらに、時点Ｔ４〜Ｔ５の間は、再びコントローラがゆっくりと振られ、モード１が選択される。時点Ｔ５においてコントローラが激しく振られた場合、モード０が選択される。
【０１６５】
このように、本実施形態では、コントローラと本体装置２との通信が行われる毎に、その時点のコントローラの状態（具体的には慣性センサ４３からの出力に基づいて判別される状態）に応じて、複数のモードのうちの何れかが選択される。
【０１６６】
以上のように、本実施形態では、コントローラの状態（具体的にはその時点において慣性センサ４３から出力される角速度値）に応じて複数のモードのうちの何れかのモードが選択され、選択されたモードに応じた方法で姿勢データが圧縮される。具体的には、コントローラが静止している状態か、コントローラの姿勢が線形的に変化している状態か、あるいは何れの状態でもないかに応じて、モードが選択される。
【０１６７】
例えば、コントローラが静止している状態の場合、モード２が選択され、３つの姿勢データのうちの１つの姿勢データのデータサイズが他の姿勢データのデータサイズよりも大きくなるように、３つのデータが圧縮されて第１圧縮データが生成される。そして、生成された第１圧縮データが本体装置２に送信される。モード２が選択されなかった場合、コントローラの姿勢が線形的に変化している状態か否かが判定され、コントローラの姿勢が線形的に変化している状態と判定された場合、モード１が選択され、当該モード１に応じた方法で３つの姿勢データが圧縮される。
【０１６８】
具体的には、本実施形態のコントローラは、第１のタイミングにおける慣性センサ４３からの出力に基づいて、コントローラの姿勢に関する第１の値（例えばｆ０）を取得する。また、コントローラは、第１のタイミングとは異なる第２のタイミングにおける慣性センサ４３からの出力に基づいて、コントローラの姿勢に関する第２の値（例えばｆ２）を取得する。そして、コントローラは、第１条件（例えば上記式４及び式５）を満たすかどうかを判定し、第１条件を満たすと判定した場合に、第１の値（例えばｆ０）及び第２の値（例えばｆ２）の少なくとも何れか一方を第１方法（モード２の方法）によって圧縮する。また、第１条件を満たさないと判定した場合、コントローラは、第１の値及び第２の値を第１方法とは異なる第２方法（モード１の方法、又は、モード０の方法）によって圧縮する。
【０１６９】
このように、本実施形態のコントローラは、第１条件を満たすか否かによって異なる方法でデータを圧縮することにより、コントローラの状態に応じて、動的に適切な圧縮方法を選択し、姿勢に関するデータを圧縮することができる。具体的には、第１の値に係るデータ（例えばｆ０又はｑ０）及び第２の値に係るデータ（例えばｆ２又はｑ２）のうちの何れか一方のデータ量が、他方のデータ量よりも大きくなるように、第１の値に係るデータ及び第２の値に係るデータが圧縮される。言い換えると、一方のデータの圧縮率が他方のデータの圧縮率よりも低くなるように、姿勢に関するデータが圧縮される。これにより、一方のデータについて他方のデータよりも失われる情報量を少なくすることができ、全体として本体装置２に送信されるデータのデータ量を削減しつつ、本体装置２においてコントローラの姿勢を正確に復元することができる。
【０１７０】
また、コントローラは、第１条件を満たさないと判定した場合、第１条件とは異なる第２条件（第２条件Ａ及び第２条件Ｂ）を満たすか否かを判定し、第２条件を満たすと判定した場合には、第２方法によってデータを圧縮する。第２方法では、コントローラは、第１の値に係るデータ、及び、第２の値に係るデータを同じ圧縮率で圧縮する。また、コントローラは、第１及び第２のタイミングと異なる第３のタイミングにおける慣性センサ４３からの出力に基づく第３の値に係るデータ（ｑ１）を、第１の値に係るデータ及び第２の値に係るデータよりもデータ量が小さくなるように圧縮する。第２条件を満たす場合は、第１の値、第２の値及び第３の値は、線形性を有する。これらの値が線形性を有するため、本体装置２において２つの値が分かれば、残り１つの値を正確に推測することができる。したがって、この場合、第１の値に係るデータ及び第２の値に係るデータを比較的低い圧縮率で圧縮し、第３のタイミング（より具体的には、第１及び第２のタイミングの間のタイミング）における第３の値に係るデータについては比較的高い圧縮率で圧縮する。これにより、全体としてのデータ量を削減しつつ、本体装置２においてコントローラの姿勢を正確に復元することができる。
【０１７１】
また、本実施形態では、コントローラが角速度値に基づいてコントローラの姿勢を算出し、算出した姿勢を本体装置２に送信するため、コントローラから本体装置２へのパケットが落ちた場合でも誤差を低減することができる。例えば、慣性センサ４３によって検出された角速度値がコントローラから本体装置２に送信される場合、本体装置は、受信した角速度値を積分することにより、コントローラの姿勢を算出する。この場合において、パケットが落ちると本体装置側ではコントローラの姿勢を算出することができず、パケットが落ちる毎に誤差が累積してしまう。これに対して、上記実施形態のようにコントローラ側で姿勢を算出して、算出した姿勢を本体装置２に送信する場合には、パケット落ちがあったとしても誤差は累積しない。本体装置２は、コントローラにおいて算出された姿勢を受信することで、仮にパケット落ちが発生した場合でも、パケットを受信した時点におけるコントローラの正確な姿勢を知ることができる。
【０１７２】
また、本実施形態では、コントローラから本体装置２に送信される圧縮データには、時刻情報が含まれる。このため、仮にパケット落ちが発生した場合でも、本体装置２は、コントローラにおいて姿勢が算出された時点の時刻情報を正確に知ることができる。
【０１７３】
また、本実施形態では、コントローラが８００Ｈｚでサンプリングされた角速度値に基づいて姿勢を算出し、算出した姿勢を２００Ｈｚで本体装置２に送信した。これにより、本体装置２は、本体装置２とコントローラとの間の通信の頻度を上げることなく、本体装置側で姿勢を算出する場合よりも、高い精度でコントローラの姿勢を取得することができる。例えば、角速度値のサンプリング周波数が８００Ｈｚであり、かつ、本体装置２とコントローラとの間の通信の周波数が２００Ｈｚである場合を想定する。この場合において、慣性センサ４３からの角速度値を本体装置２に送信し、本体装置側において姿勢を算出する場合、コントローラは、８００Ｈｚでサンプリングされた４つの角速度値のうちの１つを本体装置２に送信するか、８００Ｈｚでサンプリングされた４つの角速度値を平均して本体装置２に送信することが考えられる。何れの場合でも２００Ｈｚで姿勢が算出されるため、本体装置側で算出されるコントローラの姿勢の精度にはある程度の限界がある。一方、本実施形態では、コントローラが８００Ｈｚで姿勢を算出するため、本体装置側で高い精度でコントローラの姿勢を取得することができる。
【０１７４】
（変形例）
以上、本実施形態の姿勢データの圧縮方法ついて説明したが、上記実施形態において以下のような変形が加えられてもよい。
【０１７５】
例えば、上記実施形態では、第１のタイミングにおける慣性センサ４３からの出力に基づいて取得される第１の値は、慣性センサ４３からの角速度値に基づいて計算される、コントローラの姿勢を表すクォータニオンｑ０（又はｆ０）であるとした。第１の値は、慣性センサ４３から出力される角速度値そのものであってもよい。第２のタイミングにおける慣性センサ４３からの出力に基づいて取得される第２の値、及び、第３のタイミングにおける慣性センサ４３からの出力に基づいて取得される第３の値についても同様である。
【０１７６】
また、上記実施形態では、コントローラの姿勢を表すクォータニオンｑの４つの成分のうちの３成分を有するベクトルｆに基づいて、第１条件、第２条件を満たすか否かが判定され、モードが選択された。そして、選択されたモードでｆが圧縮されて、コントローラから本体装置２に送信された。他の実施形態では、４つの成分を有するｑに基づいて、第１条件、第２条件を満たすか否かが判定され、選択されたモードでｑが圧縮されて、コントローラから本体装置２に送信されてもよい。また、モードを選択するための条件の判定については、ｑに基づいて行い、選択されたモードでｆを圧縮および送信してもよい。
【０１７７】
また、上記実施形態では、コントローラの姿勢をｑ（回転軸を表す３つの成分、及び、回転角を表す１つの成分を有するベクトル）で表すものとしたが、他の実施形態では、コントローラの姿勢を他の形式で表現してもよい。例えば、コントローラの姿勢をオイラー角を用いて表現し、オイラー角を用いて表現された姿勢に関する姿勢データを上述した複数のモードのうちの何れかのモードに応じた方法で圧縮し、本体装置２に送信してもよい。
【０１７８】
また、上記実施形態では、１番目に取得された値（ｆ０）と、２番目に取得された値（ｆ１）と、３番目に取得された値（ｆ２）とに基づいて、Δｆ１が算出された（上記式６）。そして、Δｆ１は、各モードの判定に用いられた。例えば、ｆ０、ｆ１、ｆ２が線形性を有するか否かの判定（第２条件Ｂを満たすか否かの判定）において、Δｆ１の各成分が所定の範囲内か否かが判定された。他の実施形態では、ｆ０、ｆ１、ｆ２が線形性を有するか否かについて他の方法で判定してもよい。
【０１７９】
ここでいう線形性とは、１番目に取得された値（ｆ０）と、２番目に取得された値（ｆ１）と、３番目に取得された値（ｆ２）とが、ほぼ一定の割合で増加または減少していることである。例えば、姿勢を表すｆがｘ、ｙ、ｚ軸成分を有する場合、ｘ、ｙ、ｚ軸成分のそれぞれの値が一定の割合で増加又は減少していることである。これらの値が線形性を有するか否かは、上記式６を用いなくても判定することができる。例えば、１番目に取得された値（ｆ０の各成分の値）及び２番目に取得された値（ｆ１の各成分の値）を結ぶ直線と、３番目に取得された値（ｆ２の各成分の値）との距離が所定値未満か否かにより判定することができる。
【０１８０】
また、上記実施形態では、モード２を選択するための第１条件は、上記式４および式５が成立することとしたが、第１条件はこれに限らない。例えば、第１の値（ｆ０）と、第２の値（ｆ２）との比較に基づいて、第１条件Ａが満たされるか否かが判定されてもよい。また、コントローラの姿勢の変化量が所定値未満である場合に第１条件を満たすと判定してもよい。コントローラの姿勢の変化量が所定値未満であることの判定は、式４に限らず他の方法で行われてもよい。例えば、取得された各軸周りの角速度値の絶対値が所定値未満（０又はごく小さな値）である場合、第１条件を満たすと判定してもよい。この場合、ある時点において慣性センサ４３から出力された角速度値に基づいて、第１条件を満たすか否かを判定することができる。すなわち、上記実施形態では、少なくとも、第１のタイミングと第２のタイミングの両方における慣性センサ４３からの出力に基づいて第１条件を満たすか否かが判定されたが、他の実施形態では、第１のタイミング及び第２のタイミングの少なくとも一方における慣性センサ４３からの出力に基づいて第１条件を満たすか否かを判定してもよい。
【０１８１】
例えば、ある時点におけるコントローラの姿勢が算出された場合、その後に取得される慣性センサ４３からの３つの軸に関する角速度値がほぼ「０」である場合、コントローラはほぼ静止していると判断することができる。したがって、コントローラは、モード２を適用可能か否かを、式４および式５に基づかずに、慣性センサ４３からの角速度値に基づいて判定することができる。
【０１８２】
また、モード２を選択するための第１条件は、コントローラが静止している状態であることに限らず、コントローラの状態が所定の状態であることであってもよい。
【０１８３】
また、モード１を選択するための第２条件は、コントローラの姿勢が線形的に変化しているか否かを判定するための条件であれば、どのようなものでもよい。コントローラの姿勢が線形的に変化しているか否かは、上記に限らず、他の方法で判定することができる。例えば、あるタイミングにおける慣性センサ４３からの各軸の角速度値と、次のタイミングにおける慣性センサ４３からの各軸の角速度値との差が、「０」又は所定の範囲内の場合には、コントローラの姿勢は一定の割合で変化していると判断することができ、コントローラの姿勢が線形的に変化していると判定することができる。
【０１８４】
また、上記実施形態では、慣性センサ４３から判別されるコントローラの状態に応じて、複数のモードから何れかのモードが選択された。他の実施形態では、慣性センサ４３からの出力以外から判別されるコントローラの状態に応じて、複数のモードから何れかのモードが選択されてもよい。例えば、カメラからの画像に基づいて、コントローラの状態が判別され、判別されたコントローラの状態に応じて、複数のモードから何れかのモードが選択されてもよい。
【０１８５】
また、上記実施形態では、モード２が選択された場合、ｆ２を２４ビットに圧縮し、ｆ２とｆ０との差分をΔｆ０として算出して当該Δｆ０を１３ビットに圧縮し、さらにΔｆ１（上記式６）を算出して当該Δｆ１を４ビットに圧縮した。このモード２が選択された場合の圧縮方法は単なる一例であり、圧縮後の各データのサイズはこれに限らない。また、モード２が選択された場合、３つのデータを他の圧縮方法により圧縮してもよい。例えば、ｆ２を圧縮せずに３２ビットとし、Δｆ０及び／又はΔｆ１を上記よりも少ないビット数に圧縮してもよい。また、モード２が選択された場合、例えばｆ０を２４ビットに圧縮し（又はｆ０を圧縮せず）、ｆ０とｆ２との差分であるΔｆ２を１３ビット（又はこれより小さいビット数）に圧縮し、Δｆ１を４ビット（又はこれより小さいビット数）に圧縮してもよい。そして、これらｆ０、Δｆ１、Δｆ２を含む圧縮データを本体装置２に送信してもよい。また、Δｆ０、Δｆ１を算出せずに、ｆ０、ｆ１をそれぞれ圧縮してもよい。すなわち、モード２が選択された場合、ｆ０、ｆ１、ｆ２のうちの１つのデータを他のデータよりもデータ量が大きくなるように、これら３つのデータが圧縮されてもよい。
【０１８６】
また、上記実施形態では、モード１が選択された場合、ｆ０及びｆ２を１６ビットに圧縮し、Δｆ１を８ビットに圧縮した。このモード１が選択された場合の圧縮方法は単なる一例であり、圧縮後の各データのサイズはこれに限らない。また、モード１が選択された場合、３つのデータを他の圧縮方法により圧縮してもよい。例えば、ｆ０及びｆ１を１６ビットに圧縮し、Δｆ２を算出して、Δｆ２を８ビットに圧縮してもよい。このΔｆ２は、ｆ０、ｆ１、ｆ２に基づいて算出され、例えば、ｆ０及びｆ１の線形性に基づいて推測されるｆ２の値と、実際に角速度値に基づいて算出されたｆ２との差異を表すデータであってもよい。そして、これらｆ０、ｆ１、Δｆ２を含む圧縮データを本体装置２に送信してもよい。
【０１８７】
また、上記実施形態では、モード２又はモード１が選択された場合、ｆ０及びｆ２の平均と、ｆ１との差分をΔｆ１として算出し、当該算出したΔｆ１を圧縮して本体装置２に送信した。他の実施形態では、ｆ０及びｆ２の平均に限らず、ｆ０（又はｑ０）、ｆ１（又はｑ１）、ｆ２（又はｑ２）のうちの少なくとも２つに基づいて、所定の基準値を算出してもよい。そして、算出した基準値に基づいて、ｆ０（又はｑ０）、ｆ１（又はｑ１）、ｆ２（又はｑ２）のうちの少なくとも１つに係るデータを設定するとともに当該少なくとも１つのデータを圧縮してもよい。例えば、算出した基準値からｆ０、ｆ１、ｆ２がどれくらい離れているかを示す値を設定し、設定した値を示すデータを圧縮して、本体装置２に送信してもよい。
【０１８８】
また、上記実施形態では、１番目に取得されたデータ（ｆ０）と、２番目に取得されたデータ（ｆ１）と、３番目に取得されたデータ（ｆ２）とに基づいて、モード０〜２の何れを選択するかを判定し、判定結果に応じたモードでこれら３つのデータを圧縮して本体装置２に送信した。他の実施形態では、２つのデータに基づいて、モード０〜２の何れを選択するかを判定し、２つのデータを圧縮して送信してもよい。
【０１８９】
また、他の実施形態では、複数のモードは３つに限らず、２つでもよいし、４つ以上でもよい。
【０１９０】
また、上記実施形態では、コントローラは、慣性センサからの角速度値に基づいて、コントローラの姿勢に関する値を算出し、コントローラの状態に応じてモードを選択し、モードに応じた方法で姿勢に関するデータを圧縮して送信することとした。他の実施形態では、慣性センサからの加速度値に基づいて、コントローラの位置（各軸方向への移動量）に関する値を算出し、コントローラの状態に応じてモードを選択し、モードに応じた方法で位置に関するデータを圧縮して送信してもよい。コントローラは、慣性センサからの加速度値を積分することにより、コントローラの各軸方向の速度を算出し、算出した速度から、各軸方向の位置（移動量）を算出することができる。この場合、上述した姿勢を表すｑやｆは、位置を表すベクトルに置き換えられ、モードを選択するための各条件（第１条件Ａ、第１条件Ｂ、第２条件Ａ、第２条件Ｂ）も、位置を表すベクトルに基づいて判定される。
【０１９１】
また、上記実施形態では、コントローラと本体装置２とが無線で接続されている場合に、コントローラの状態に応じてモードを選択し、選択したモードに応じた圧縮方法でコントローラの姿勢に関するデータを圧縮して、本体装置２に送信することとした。上記モードの選択及び選択されたモードに応じたデータの圧縮は、コントローラと本体装置２とが有線で接続されている場合（すなわち、コントローラが本体装置２に装着されている場合）に行われもよい。
【０１９２】
また、上記実施形態では、コントローラから本体装置に姿勢に関するデータを圧縮して送信するものとした。他の実施形態では、コントローラに限らず他の任意の装置において上述したモードの選択およびデータの圧縮を行い、他の装置にデータを送信してもよい。例えば、スマートフォン、タブレット端末、ノートパソコン、ウェアラブル端末、センサ等の任意の装置において、上述したモードの選択およびデータの圧縮を行い、他の装置にデータを送信してもよい。
【０１９３】
また、上記実施形態では、コントローラと本体装置２とがローカルで接続されることを前提としたが、他の実施形態では、コントローラ等の任意の装置と他の装置とがリモートで接続されてもよい。任意の装置において、上述したモードの選択および選択されたモードに応じたデータの圧縮が行われ、圧縮されたデータが当該任意の装置から、例えばインターネットを介して他の装置に送信されてもよい。
【０１９４】
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。
【符号の説明】
【０１９５】
１  情報処理システム
２  本体装置
３  左コントローラ
４  右コントローラ
２１  プロセッサ
２３  コントローラ通信部
４１  処理部
４３  慣性センサ
４５  通信制御部
【図１】
2020047978.tif 000003
【図２】
2020047978.tif 000004
【図３】
2020047978.tif 000005
【図４】
2020047978.tif 000006
【図５】
2020047978.tif 000007
【図６】
2020047978.tif 000008
【図７】
2020047978.tif 000009
【図８Ａ】
2020047978.tif 000010
【図８Ｂ】
2020047978.tif 000011
【図８Ｃ】
2020047978.tif 000012
【図９】
2020047978.tif 000013
【図１０】
2020047978.tif 000014
【図１１】
2020047978.tif 000015
【図１２】
2020047978.tif 000016
【図１３】
2020047978.tif 000017