(57)【要約】  アプリケーションプログラムとデバイスの動作センサとのインタフェース。一態様では、アプリケーションプログラムがデバイスで使用可能な複数の異なる種類のアプリケーションを実行する場合、動作検出デバイスで動作するアプリケーションプログラムから高レベルのコマンドを受け取る。高レベルのコマンドは、回転動作センサ及び直線動作センサを含むデバイスの動作センサの出力から得られる高レベルの情報を要求する。コマンドが変換されることで、動作センサによる動作センサデータ出力の低レベルの処理を行い、低レベルの処理はアプリケーションの種類の要求に従い、コマンドに応答して高レベルの情報を判断する。アプリケーションプログラムは、低レベルの処理を無視し、高レベルの情報がアプリケーションプログラムに提供される。【選択図】図１
2011510401.tif 000002
【特許請求の範囲】
【請求項１】
動作検出デバイスに提供される１又はそれ以上のアプリケーション用のインタフェースを提供するための方法であって、前記方法が：
前記動作検出デバイスで動作するアプリケーションプログラムから高レベルのコマンドを受け取るステップであって、前記アプリケーションプログラムが、前記動作検出デバイスで使用し得る複数の異なる種類のアプリケーションのうちの１つを実行し、前記高レベルのコマンドが、前記動作検出デバイスの複数の動作センサの出力から得られる高レベルの情報を要求するステップと；
前記高レベルのコマンドを変換して、前記動作センサによって出力される複数の軸の動作センサデータの低レベルの処理を生じさせるステップであって、前記低レベルの処理が、前記アプリケーションの種類の要求に従い、前記高レベルのコマンドを受け取るのに応じて前記動作センサデータからの前記高レベルの情報をインテリジェントに判定し、前記動作センサが、複数の回転運動センサ及び複数の直線運動センサを有しており、前記アプリケーションプログラムが前記低レベルの処理を無視するステップと；
前記アプリケーションプログラムに前記高レベルの情報を提供するステップと；
を具えることを特徴とする方法。
【請求項２】
前記アプリケーションの種類の要求が、前記動作センサから得られる前記動作センサデータ用の高精度なサンプリングレートを有することを特徴とする請求項１に記載の方法。
【請求項３】
前記動作センサデータが、前記アプリケーションの要求に従う高精度なサンプリングレートで前記動作センサから得られ、
前記動作検出デバイスで使用し得る前記複数の異なる種類のアプリケーションの少なくとも２つが、前記動作センサデータ用の異なるサンプリングレート要求を有することを特徴とする請求項１に記載の方法。
【請求項４】
前記アプリケーションプログラムに前記高レベルの情報を提供するステップが、前記高レベルの情報が前記アプリケーションプログラムによって実行される前記アプリケーションの種類に適したサンプリングレートで前記アプリケーションプログラムによって受け取られるように、前記高レベルの情報を提供するステップを有することを特徴とする請求項１に記載の方法。
【請求項５】
前記高レベルの情報が、前記動作センサデータをサンプリングするよう使用されるサンプリングレートよりも低いサンプリングレートで前記アプリケーションプログラムによって受け取られることを特徴とする請求項１に記載の方法。
【請求項６】
前記動作検出デバイスで使用し得る前記異なる種類のアプリケーションを実行する複数の異なるアプリケーションプログラムが、前記動作検出デバイスで同時に動作することを特徴とする請求項１に記載の方法。
【請求項７】
前記複数の異なるアプリケーションプログラムは、前記高レベルの情報が互いに異なるサンプリングレートで提供されるのを要求し、
前記アプリケーションのうちの１つに関する前記動作センサデータの前記サンプリングレートが、前記アプリケーションのうちの別の１つに関する前記動作センサデータの前記サンプリングレートをフィルタリングすることによって得られることを特徴とする請求項６に記載の方法。
【請求項８】
前記動作検出デバイスで使用し得る前記複数の異なる種類のアプリケーションが、動作検出アプリケーション、画像安定化アプリケーション、及びナビゲーションアプリケーションのうちの少なくとも１つを有することを特徴とする請求項１に記載の方法。
【請求項９】
前記動作センサデータの処理が、前記動作検出デバイスの作動中にバックグラウンドで１又はそれ以上の動作アルゴリズムを実行することを含んでおり、
前記動作アルゴリズムが、１又はそれ以上の条件について前記動作センサデータが適合することをチェックし、合致する場合に前記アプリケーションプログラムに通知することを特徴とする請求項１に記載の方法。
【請求項１０】
さらに、より高いサンプリングレートで取得され高精度なタイミング要求を具える前記動作センサデータをバッファリングするステップと、
バッファリングされた前記動作センサデータを処理するステップと、
より低いサンプリングレート及び緩和されたタイミング要求で、前記アプリケーションプログラムに前記バッファリングされた動作センサデータを提供するステップと、
を具えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記複数の回転運動センサが、３つのジャイロスコープを有しており、
前記複数の直線運動センサが、３つの加速度計を有しており、
前記ジャイロスコープ及び前記加速度計が、６軸の検出を与えることを特徴とする請求項１に記載の方法。
【請求項１２】
前記高レベルの情報が、さらに、前記動作検出デバイスの付加的なセンサから判定され、
前記付加的なセンサが、温度センサ、圧力センサ、及びコンパスのうちの少なく１つを有することを特徴とする請求項１に記載の方法。
【請求項１３】
前記低レベルの処理が、前記動作検出デバイスの全ての前記動作センサの出力の全てを試験して前記高レベルの情報を判定することを有することを特徴とする請求項１に記載の方法。
【請求項１４】
前記低レベルの処理が、前記動作センサの出力の全てを試験した後に、前記アプリケーションの種類用に前記動作センサの軸の一部のみを選択的に使用するよう判定することを特徴とする請求項１３に記載の方法。
【請求項１５】
前記低レベルの処理が、前記アプリケーションの種類によって使用されない動作センサの作動を停止して、消費電力又は処理の帯域幅を節約することを特徴とする請求項１４に記載の方法。
【請求項１６】
前記低レベルの処理が、特定の高レベルのコマンドに基づいて、前記高レベルの情報を判定する際に、前記動作センサのいずれの出力を選択的に使用するのかを判定することを特徴とする請求項１に記載の方法。
【請求項１７】
前記低レベルの処理が、前記動作検出デバイスのアプリケーションプロセッサから区別され且つこれと通信する動作処理ユニットによって、少なくとも一部で実行されることを特徴とする請求項１に記載の方法。
【請求項１８】
動作検出デバイスで動作するアプリケーションプログラムに前記動作検出デバイスの動作センサからの動作センサデータを提供するための方法であって、前記方法が：
第１のサンプリングレートで前記動作センサによって出力される動作センサデータをサンプリングするステップであって、前記動作センサが、複数の回転運動センサ及び複数の直線運動センサを有するステップと；
バッファに前記動作センサデータを記憶するステップと；
前記アプリケーションプログラムによって実行されるアプリケーションによって要求される第２のサンプリングレートで、前記アプリケーションプログラム用にバッファリングされた動作センサデータの少なくとも一部を検索するステップと；
を具えており、
前記第２のサンプリングレートが、前記第１のサンプリングレートよりも低いことを特徴とする方法。
【請求項１９】
前記バッファが、アプリケーションプロセッサとは別個の動作処理ユニットで実装されるハードウェアバッファであることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記バッファが、メモリで実装されるソフトウェアバッファであり、
割り込みルーチンが、前記動作センサデータをサンプリングして、前記アプリケーションプログラムを実行するアプリケーションプロセッサに割り込み、前記バッファリングされた動作センサデータの少なくとも一部を検索することを特徴とする請求項１８に記載の方法。
【請求項２１】
アプリケーションプロセッサとは別個の動作処理ユニットが、記憶された前記動作センサデータをスキャンして、前記アプリケーションプログラムに関連する特性を検出することを特徴とする請求項１８に記載の方法。
【請求項２２】
アプリケーションプロセッサとは別個の動作処理ユニットが、前記アプリケーションプログラムに関連する特徴のセットへと前記バッファ中の前記動作センサデータを減らし、
前記バッファリングされた動作センサデータの検索された部分が、前記特徴のセットであることを特徴とする請求項１８に記載の方法。
【請求項２３】
動作検出デバイスの動作センサからの動作センサデータを処理するための方法であって、前記方法が：
前記動作センサデータを使用して前記動作検出デバイスで第１のアプリケーションを実行する第１のアプリケーションプログラムに情報を提供するように、第１のサンプリングレートで前記動作センサによって出力される動作センサデータをサンプリングするステップであって、前記動作センサが、複数の回転運動センサ及び複数の直線運動センサを有するステップと；
前記第１のサンプリングレートよりも低い第２のサンプリングレートに前記動作センサデータをローパスフィルタリングするステップと；
を具えており、
フィルタリングされた前記動作センサデータを使用して、前記第１のアプリケーションとは異なる前記動作検出デバイスの第２のアプリケーションを実行する第２のアプリケーションプログラムに情報を提供し、
前記第１及び第２のアプリケーションプログラムが、前記動作検出デバイスで同時に動作し、
前記第１のアプリケーションは、動作センサデータが前記第２のサンプリングレートよりも高いサンプリングレートでサンプリングされるのを要求することを特徴とする方法。
【請求項２４】
コンピュータによって実行されるプログラム命令を記憶し、動作検出デバイスで提供される１又はそれ以上のアプリケーション用のインタフェースを提供するためのコンピュータ可読媒体であって、前記プログラム命令が：
前記動作検出デバイスで実行するアプリケーションプログラムから高レベルのコマンドを受け取るステップであって、前記アプリケーションプログラムが、前記動作検出デバイスで使用し得る複数の異なる種類のアプリケーションのうちの１つを実行し、前記高レベルのコマンドが、前記動作検出デバイスの複数の動作センサの出力から得られる高レベルの情報を要求するステップと；
前記高レベルのコマンドを変換して、前記動作センサによって出力される複数の軸の動作センサデータの低レベルの処理を生じさせるステップであって、前記低レベルの処理が、前記アプリケーションの種類の要求に従い、前記高レベルのコマンドを受け取るのに応じて前記動作センサデータからの前記高レベルの情報をインテリジェントに判定し、前記動作センサが、複数の回転運動センサ及び複数の直線運動センサを有しており、前記アプリケーションプログラムが前記低レベルの処理を無視するステップと；
前記アプリケーションプログラムに前記高レベルの情報を提供するステップと；
を具えるステップとを実行することを特徴とするコンピュータ可読媒体。
【請求項２５】
前記アプリケーションの種類の要求が、前記動作センサから得られる前記動作センサデータ用の高精度のサンプリングレートを有することを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項２６】
前記動作センサデータが、前記アプリケーションの要求に従う高精度のサンプリングレートで前記動作センサから得られ、
前記動作検出デバイスで使用し得る前記複数の異なる種類のアプリケーションの少なくとも２つが、前記動作センサデータ用の異なるサンプリングレート要求を有することを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項２７】
前記アプリケーションプログラムに前記高レベルの情報を提供するステップが、前記高レベルの情報が、前記アプリケーションプログラムによって実行される前記アプリケーションの種類に適したサンプリングレートで、前記アプリケーションプログラムによって受け取られるように、前記高レベルの情報を提供するステップを有することを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項２８】
前記動作検出デバイスで使用し得る前記異なる種類のアプリケーションを実行する複数の異なるアプリケーションプログラムが、前記動作検出デバイスで同時に動作することを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項２９】
前記複数の異なるアプリケーションプログラムは、前記高レベルの情報が互いに異なるサンプリングレートで提供されるのを要求し、
前記アプリケーションのうちの１つに関する前記動作センサデータの前記サンプリングレートが、前記アプリケーションのうちの別の１つに関する前記動作センサデータの前記サンプリングレートをフィルタリングすることによって得られることを特徴とする請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
さらに、より高いサンプリングレートで取得され高精度なタイミング要求を具える前記動作センサデータをバッファリングするステップと、
バッファリングされた前記動作センサデータを処理するステップと、
より低いサンプリングレート及び緩和されたタイミング要求で、前記アプリケーションプログラムに前記バッファリングされた動作センサデータを提供するステップと、
を具えることを特徴とする請求項２４に記載のコンピュータ可読媒体。
【請求項３１】
前記動作検出デバイスに提供される１又はそれ以上のアプリケーション用のインタフェースを有する動作検出デバイスであって、前記動作検出デバイスが：
前記動作検出デバイスの動作を検出するための複数の動作センサを有する動作処理ユニットであって、前記動作センサが、複数の回転運動センサ及び複数の直線運動センサを有する動作処理ユニットと；
前記動作処理ユニットに接続されるアプリケーションプロセッサであって、
前記動作検出デバイスで使用し得る複数の異なる種類のアプリケーションのうちの１つを実装するアプリケーションプログラムと；
前記アプリケーションプログラムから高レベルのコマンドを受け取るアプリケーションインタフェースであって、前記高レベルのコマンドが、前記動作検出デバイスの前記動作センサの出力から得られる高レベルの情報を要求するアプリケーションインタフェースと；
を提供するアプリケーションプロセッサと；
を具えており、
前記アプリケーションインタフェースが、前記高レベルのコマンドを変換して、前記動作センサによって出力される動作センサデータの低レベルの処理を生じさせ、前記低レベルの処理が前記アプリケーションの種類の要求に従い、前記高レベルのコマンドを受け取るのに応じて前記高レベルの情報を判定し、前記アプリケーションプログラムが前記低レベルの処理を無視し、前記アプリケーションインタフェースが、前記アプリケーションプログラムに前記高レベルの情報を提供することを特徴とする動作検出デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２００８年１月１８日に出願され「Motion Sensing Application Interface」と題される米国仮特許出願第６１／０２２，１４３号の利益を主張し、２００７年７月６日出願され「Integrated Motion Processing Unit (MPU) With MEMS Inertial Sensing And Embedded Digital Electronics」と題される同時係属の米国実用出願第１１／７７４，４８８号に関連し、いずれも全体として参照することにより本書に盛り込まれている。
【０００２】
本発明は、概略的に動作検出デバイスに関し、特に、デバイスの動作センサのインタフェースアプリケーションプログラムに関する。
【背景技術】
【０００３】
加速度計又はジャイロスコープといった動作センサは、多くの場合、電子デバイスで使用される。直線加速度を測定するために加速度計を使用でき、角速度を測定するためにジャイロスコープを使用し得る。動作センサの市場は、携帯電話、ビデオゲームのコントローラ、ＰＤＡ、携帯インターネット機器（ＭＩＤ）、小型カーナビゲーションデバイス（ＰＮＤ）、デジタルスチルカメラ、デジタルビデオカメラ等に及んでいる。例えば、携帯電話は、加速度計を使用して空間内でのデバイスの傾斜を検出することができ、傾斜に応じた向きにビデオ映像を表示し得る。ビデオゲームのコンソールのコントローラは、加速度計及び／又はジャイロスコープを使用して、ゲームに入力を与えるよう使用するハンドコントローラの動作を検出する。画像及び映像の安定化は、レンズ又は画像センサがジャイロスコープによって測定されるハンドジッタを補償するよう代えられる場合、低価格又は中価格のデジタルカメラにおいても重要な特徴である。全地球測位システム（ＧＰＳ）及び位置情報サービス（ＬＢＳ）での適用は、デバイスの正確な位置の判定に依存し、ＧＰＳ信号が弱かったり又は使用できない場合、又はＧＰＳによる位置の発見の精度を強化するために、動作センサが多くの場合必要となる。
【０００４】
多くの既存の電子デバイスは、「ピーク検出」を具えた加速度計又は定常状態の測定といった、非常に基本的な動作センサのみを使用する傾向にある。例えば、現状の携帯電話は、加速度計を使用してデバイスの傾斜を判定するが、それは定常状態の測定の重力測定を用いて判断し得る。このような単純な判定法は、例えば、ジャイロスコープを用いたより高機能な適用又は正確なタイミング要求を有する他の適用では使用できない。デバイスにジャイロスコープが設けられていない場合、デバイスの傾斜及び加速度が確実に検出されない。これは、多くの場合、非ジャイロスコープ型のナビゲーションデバイスでミスリードする；例えば、「非ジャイロスコープ型」のデッドレコニング態様が、自動車が坂道にある信号機で停止する際に、自動車の位置を数ブロック誤判断する可能性がある。そして、デバイスの動作は地面に対して必ずしも直線的又は平行ではないため、加速度計又はジャイロスコープを用いた動作のいくつかの異なる軸の測定は、より大きな精度を要する。
【０００５】
より高機能な動作センサは、一般に、電子デバイスに使用されない。例えば、画像安定化及びデッドレコニング機能は、ＧＰＳ付きの携帯電話又は高解像度のカメラにとって、いずれも重要な機能であるが、現状の携帯電話市場では利用可能な解決法がない。特定のアプリケーションにおいて、特定の移動に関する動作検出といった、より高機能な動作センサに関するある試みが行われている。しかしながら、これらの取り組みの多くは、失敗しているか又は製品としては十分に強固ではない。これは、動作を取得するための動作センサの使用が複雑なためである。例えば、ジャイロスコープを使用する場合、デバイスの傾斜又は移動を特定することは自明ではない。位置の検出、又は他の高機能な適用について、画像安定化のために動作センサを使用することは、動作センサに関する深い理解を要し、これにより、動作検出設計をより困難なものにしている。
【０００６】
また、動作検出設計の困難さは、１つのシステムから別のシステムに設計を移植する際の難しさによる。動作センサからの大部分の生データは集められ、デバイスで動作するアプリケーションソフトウェアのレベルで処理されるが、他のアプリケーションは同じセンサ出力を利用できない。さらに、動作検出設計は、一般に、非常にシステムに依存し、ある特定のアプリケーションを対象としているため、他のシステムに移植するのが妨げられる。例えば、画像安定化ソフトウェアは、一般に、使用し得る画像の解像度及びズーム範囲といった、ソフトウェアが使用されるデジタルカメラの特定のハードウェアに非常に依存する。
【０００７】
したがって、様々なアプリケーションで利用可能であり、動作センサデータの収集がより簡単に規定できてユーザによって使用され、様々なハードウェア要件に関する動作検出設計のより簡単な移植及びメンテナンスが可能な、単純なアプリケーションインタフェース（ＡＰＩ）を提供するシステム及び方法が、多くのアプリケーションにおいて望まれている。
【発明の概要】
【０００８】
本出願の発明は、デバイスの動作センサへのアプリケーションプログラムのインタフェーシングに関する。本願発明の一態様では、動作検出デバイスに提供される１又はそれ以上のアプリケーションについてのインタフェースを与えることが、動作検出デバイスで動作するアプリケーションプログラムから高レベルのコマンドを受け取るステップであって、アプリケーションプログラムが、動作検出デバイスで使用し得る複数の異なる種類のアプリケーションのうちの１つを実行するステップを有する。高レベルのコマンドが、回転運動センサ及び直線運動センサを有する動作検出デバイスの動作センサの出力から得られる高レベルの情報を要求する。高レベルのコマンドを変換して、動作センサによって出力される動作センサデータの低レベルの処理を発生させ、低レベルの処理が、アプリケーションの種類の要求に従い、高レベルのコマンドを受け取るのに応じて高レベルの情報を判定する。アプリケーションプログラムが低レベルの処理を無視し、高レベルの情報がアプリケーションプログラムに提供される。
【０００９】
本発明の別の態様では、動作検出デバイスで動作するアプリケーションプログラムに動作センサからの動作センサデータを提供するための方法が、第１のサンプリングレートで動作センサによって出力される動作センサデータをサンプリングするステップを有しており、動作センサが、回転運動センサ及び直線運動センサを有する。動作センサデータはバッファに記憶され、アプリケーションプログラムによって実行されるアプリケーションによって要求される第２のサンプリングレートでアプリケーションプログラムに関するバッファリングされた動作センサデータの少なくとも一部が検索され、第２のサンプリングレートが第１のサンプリングレートよりも低い。
【００１０】
本発明の別の態様では、動作検出デバイスの動作センサからの動作センサデータを処理するための方法が、動作センサデータを使用して、動作検出デバイスの第１のアプリケーションを実行する第１のアプリケーションプログラムに情報を提供するように、第１のサンプリングレートで動作センサによって出力される動作センサデータをサンプリングするステップを有する。動作センサは回転運動センサ及び直線運動センサを有する。動作センサデータは、第１のサンプリングレートよりも低い第２のサンプリングレートにローパスフィルタリングされ、フィルタリングされた動作センサデータを使用して、第１のアプリケーションとは異なる動作検出デバイスの第２のアプリケーションを実行する第２のアプリケーションプログラムに情報を提供する。第１及び第２のアプリケーションプログラムは動作検出デバイスで同時に動作し、第１のアプリケーションは、第２のサンプリングレートよりも大きいサンプリングレートでサンプリングされる動作センサデータを要求する。
【００１１】
本発明の態様は、動作検出デバイスで動作するアプリケーションで使用し得るアプリケーションプログラムのインタフェースを提供する。インタフェースにより、動作センサを有するデバイスの複雑な動作センサデータを使用したアプリケーションプログラムの容易な開発が可能となり、アプリケーションプログラムを様々なハードウェア及びオペレーティングシステムを有する様々な動作検出デバイスに移植し様々な動作検出デバイスから移植することができ、より簡単なシステムのメンテナンスを与える。本発明の他の態様は、サンプリングレート要求を緩和し、アプリケーションプログラムのための処理を減らして、検出データに関する情報をサンプリングし、要求をサンプリングする様々な検出データを具えたアプリケーションプログラムが可能となり、動作検出デバイスで同時に動作する。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明での使用に適した動作検出デバイスのブロック図である。
【図２】図２は、本発明での使用に適した動作処理ユニットの一実施例のブロック図である。
【図３】図３は、本発明のソフトウェア階層の一例を示すブロック図である。
【図４】図４は、アプリケーションプロセッサで動作する図３のソフトウェア層の例を示すブロック図である。
【図５】図５は、動作検出デバイスで実行されるＡＰＩにアクセスするアプリケーションプログラムの本発明の方法を示すフローチャートである。
【図６】図６は、動作検出デバイスで実行される他のソフトウェア層とインタフェースを取るＡＰＩの本発明の方法を示すフローチャートである。
【図７】図７は、動作検出デデバイスで同時に動作する様々なアプリケーションに関するデータを同時に処理するための本発明の方法を示すフローチャートである。
【図８Ａ】図８Ａは、動作検出出力を受け取る際にバッファリングを与えてアプリケーションプロセッサの処理を減らすための本発明の方法を示すフローチャートである。
【図８Ｂ】図８Ｂは、動作検出出力を受け取る際にバッファリングを与えてアプリケーションプロセッサの処理を減らすための本発明の方法を示すフローチャートである。
【図８Ｃ】図８Ｃは、動作検出出力を受け取る際にバッファリングを与えてアプリケーションプロセッサの処理を減らすための本発明の方法を示すフローチャートである。
【図８Ｄ】図８Ｄは、動作検出出力を受け取る際にバッファリングを与えてアプリケーションプロセッサの処理を減らすための本発明の方法を示すフローチャートである。
【発明を実施するための形態】
【００１３】
本発明は、概略的に動作検出デバイスに関し、特に、デバイスの動作センサとアプリケーションプログラムとの間でインタフェースを取ることに関する。以下の説明は、当業者が本発明を作成及び使用することができるよう与えられており、特許出願及びその要件に照らして与えられる。ここに記載された好適な実施例及び一般的原理及び態様に対する様々な変更は、当業者にとって容易に明らかであろう。このため、本発明は、示された実施例に限定することを意図するものではなく、ここで説明される原理及び態様に合致する最も広い範囲と一致する。
【００１４】
本発明の態様をより具体的に説明するために、以下の説明とともに図１乃至図８Ｄを参照されたい。
【００１５】
図１は、本発明の使用に適した動作検出システム又はデバイス１０のブロック図である。デバイス１０を、ユーザによって空間を移動させ空間でのその動き及び／又は向きによって検出し得る携帯型デバイスといったデバイス又は装置として提供し得る。このような携帯型デバイスは、携帯電話、携帯情報端末（ＰＤＡ）、ビデオゲーム機、ビデオゲームコントローラ、ナビゲーションデバイス、携帯インターネット機器（ＭＩＤ）、パーソナルナビゲーションシステム（ＰＮＤ）、デジタルスチルカメラ、デジタルビデオカメラ、双眼鏡、望遠レンズ、又は他の携帯機器、又はこれらのデバイスの１又はそれ以上の組み合わせとすることができる。他の実施例では、デバイス１０のある部分を携帯型又は可動型デバイスに提供し得る一方、他の部分をデスクトップのコンピュータ、卓上型電子機器、サーバコンピュータ等といった、ネットワーク接続を介して可動型又は携帯型の部分と通信し得る非携帯型デバイスに提供し得る。
【００１６】
デバイス１０は、アプリケーションプロセッサ１２、メモリ１４、インタフェースデバイス１６、動作処理ユニット２０、アナログセンサ２２、及びデジタルセンサ２４を有する。アプリケーションプロセッサ１２は、１又はそれ以上のマイクロプロセッサ、中央処理装置（ＣＰＵ）、又はデバイス１０のために様々なソフトウェアプログラムを実行する他のプロセッサとすることができる。例えば、メニューナビゲーションソフトウェア、ゲーム、カメラ機能制御、ナビゲーションソフトウェア、及び電話又はその他の機能インタフェースといった様々なソフトウェアアプリケーションプログラムを提供し得る。ある実施例では、１つのデバイス１０に複数の異なるアプリケーションを提供することができ、これらの実施例のいくつかは、複数のアプリケーションがデバイス１０で同時に実行される。アプリケーションプロセッサで実行されるソフトウェアの例を、図３及び図４を参照して以下に詳細に説明する。
【００１７】
また、デバイス１０は、アプリケーションプロセッサ１２を補助するためのメモリ１４（ＲＡＭ、ＲＯＭ、フラッシュ、等）といった要素を有する。インタフェースデバイス１６は、ディスプレイスクリーン、音響スピーカ、ボタン、タッチパネル、ジョイスティック、スライダ、プリンタ、スキャナ、カメラ等といったユーザに入力及び／又は出力を与える様々な異なるデバイスとすることができる。メモリ１４及びインタフェースデバイス１６を、バス１８によってアプリケーションプロセッサ１２に接続し得る。
【００１８】
また、デバイス１０は、動作処理ユニット（ＭＰＵＴＭ）２０を有する。ＭＰＵは、空間内のデバイス１０（又はその一部）の動きを測定し得る動作センサを含むデバイスである。例えば、ＭＰＵは、１又はそれ以上の回転軸及び１又はそれ以上の加速軸を測定し得る。ある実施例では、これらの機構を実行するための要素が１つのパッケージに一体化される。ＭＰＵ２０は、アプリケーションプロセッサ１２が接続されたインタフェースバス２１に運動検出データを送信し得る。一実施例では、プロセッサ１２は、バス２１のコントローラ又はマスタである。例えばある実施例では、インタフェースバス２１は、Ｉ２Ｃ又はシリアル周辺インタフェース（ＳＰＩ）バスといった基準に従って実行されるデジタルシリアルインタフェースバスとすることができる。ある実施例は、インタフェースバス２１と同じバスであるバス１８を提供し得る。
【００１９】
ＭＰＵ２０は、１又はそれ以上の回転運動センサ２６及び１又はそれ以上の直線運動センサ２８を含む動作センサを有する。例えばある実施例では、回転運動センサはジャイロスコープであり、直線運動センサは加速度計である。ジャイロスコープ２６は、ジャイロスコープ２６を収容するデバイス１０（又はその一部）の角速度を測定し得る。特定の実施例において検出を必要とする運動に応じて、一般に１乃至３のジャイロスコープを提供し得る。加速度計２８は、加速度計２８を収容するデバイス１０（又はその一部）の直線加速度を測定し得る。特定の実施例において検出を必要とする運動に応じて、一般に１乃至３の加速度計を提供し得る。例えば、３つのジャイロスコープ２６及び３つの加速度計２８を使用する場合、全部で６の自由度を検出する６軸の検出装置が設けられる。
【００２０】
ある実施例では、マイクロマシン技術（ＭＥＭＳ）としてジャイロスコープ２６及び／又は加速度計２８を実施し得る。また、動作センサ２６及び２８からのデータのための記憶レジスタといったサポートハードウェアを提供し得る。
【００２１】
ある実施例では、ＭＰＵ２０はまた、ハードウェア処理ブロック３０を含め得る。ハードウェア処理ブロック３０は、ロジック又はコントローラを含んでおり、ハードウェアの動作センサのデータ処理を提供し得る。ある実施例では、例えば、運動アルゴリズム又はアルゴリズムの部分をブロック３０によって実行し得る。ある実施例は、ブロック３０にハードウェアバッファを含めて、動作センサ２６及び２８から検索された検出データを保存し得る。例えば、ここで説明するある実施例では、図８Ａ乃至図８Ｄを参照して以下に詳細に説明するように、ハードウェアバッファが、運動アルゴリズムによってサンプリングされる検出データを記憶する。
【００２２】
ＭＰＵ２０の一例を図２を参照して以下に説明する。本発明での使用に適したＭＰＵの他の例が、「Integrated Motion Processing Unit (MPU) With MEMS Inertial Sensing and Embedded Digital Electronics」と題され２００７年７月６日に出願された同時係属の米国特許出願第１１／７７４，４８８号に記載されており、参照することにより全体として本明細書に盛り込まれている。デバイス１０のＭＰＵ２０に関する適切な実施例は、Ｉｎｖｅｎｓｅｎｓｅ，Ｉｎｃ．ｏｆ  Ｓａｎｔａ  Ｃｌａｒａ，ＣＡによって市販されている。
【００２３】
また、デバイス１０は、他のタイプのセンサを含め得る。アナログセンサ２２及びデジタルセンサ２４を使用して、デバイス１０が置かれている環境に関する付加的な検出データを提供し得る。例えば、気圧計、コンパス、温度センサ、光センサ（カメラセンサ、赤外線センサ等）、超音波センサ、電波センサ、又は他のタイプのセンサを提供し得る。図示する実施例では、デジタルセンサ２４が、インタフェースバス２１に直接的に検出データを提供し得る一方、アナログセンサが、インタフェースバス２１にデジタル形式で検出データを与えるアナログデジタル変換器（ＡＤＣ）３４に検出データを提供し得る。図１の実施例では、ＡＤＣ３４が変換デジタルデータをＭＰＵ２０のハードウェア処理部３０又はバス２１に出力し得るように、ＡＤＣ３４がＭＰＵ２０に設けられている。他の実施例では、ＡＤＣ３４をデバイス１０の他の場所で実施し得る。
【００２４】
図２は、ここで説明する本発明での使用に適した動作処理ユニット２０の実施例の一例を示す。図２のＭＰＵ２０は、検出データの処理を実行する数値演算ユニット（ＡＬＵ）３６を有する。ＡＬＵ３６を、プログラムＲＡＭ（ランダムアクセスメモリ）３７に記憶されここから検索される１又はそれ以上のプログラムによって知的に制御し得る。ＡＬＵ３６は、温度センサ３９といった他のセンサとともにジャイロスコープ２６及び加速度計２８といった動作センサからＡＬＵ３６又は他の処理ユニットとは独立して検出データを読み出し得る、ダイレクトメモリアクセス（ＤＭＡ）ブロック３８を制御し得る。ＭＰＵ２０又はＭＰＵ２０の外部に、センサのいくつか又は全てを設けることができ、ＭＰＵ２０の外部にある加速度計２８を図２に示す。また、ＤＭＡ３８は、読み出し又は書き込み動作の状態に関する割り込みをＡＬＵに提供し得る。ＤＭＡ３８は、データＲＡＭ４０にセンサからの検出データの読み出しを記憶するために提供し得る。データＲＡＭ４０は、ＡＬＵ３６に処理データを与え、ＡＬＵ３６は保存のためにデータＲＡＭ４０に処理データを含む出力を与える。バス２１（図１にも示す）を、アプリケーションプロセッサ１２がＭＰＵ２０によって読み出され及び／又は処理されるデータを読み出し得るように、データＲＡＭ４０及び／又はＦＩＦＯバッファ４２の出力に接続し得る。
【００２５】
ＦＩＦＯ（先入れ先出し）バッファ４２を、バス２１を介してアプリケーションプロセッサ１２によってアクセスし得る、検出データを記憶するためのハードウェアバッファとして使用し得る。バッファ４２といったハードウェアバッファの使用を、以下のいくつかの実施例で説明する。例えば、マルチプレクサ４４を使用して、ＦＩＦＯバッファ４２に生の検出データを書き込むＤＭＡ３８、又はＦＩＦＯバッファ４２に処理データ（例えば、ＡＬＵ３６によって処理されたデータ）を書き込むデータＲＡＭ４０のいずれかを選択し得る。
【００２６】
このため、図２に示すＭＰＵ２０は、動作センサデータの処理の１又はそれ以上の実行をサポートし得る。例えば、ＭＰＵ２０は、プログラムＲＡＭ３７の中のプログラムがＡＬＵ３６を制御し、検出データを知的に処理してアプリケーションプロセッサ１２及びそこで動作するアプリケーションプログラムに高レベルのデータを提供し得る場合には、生の検出データを完全に処理し得る。あるいは、アプリケーションプログラムが取得する高レベルの情報を与える前に、アプリケーションプロセッサ１２で処理するさらなる低レベルの処理のためにアプリケーションプロセッサ１２によって処理データを検索し得る場合には、ＡＬＵ３６を用いてＭＰＵ２０によって生の検出データを予処理又は部分的に処理し得る。あるいは、アプリケーションプログラムに関する高レベルのデータへの所要の低レベルの処理のために、アプリケーションプロセッサ１２によって生の検出データが検索される場合には、生の検出データをＭＰＵ２０によって単にバッファリングし得る。ある実施例では、同じデバイス１０で動作する様々なアプリケーション又はアプリケーションプログラムが、アプリケーション又はプログラムに最も適したこれらの処理法のうちの様々なものを使用し得る。
【００２７】
図３は、動作検出デバイス１０のアプリケーションプロセッサ１２で実施／実行し得る本発明のソフトウェア階層５０の一例を示すブロック図である。電子メモリ又はハードディスク、光ディスク等のような他の記憶媒体といったコンピュータ可読媒体にソフトウェア階層を提供し得る。
【００２８】
アプリケーションソフトウェア層５２は、１又はそれ以上のアプリケーション開発者によって一般に提供され、アプリケーションプロセッサ１２で動作する１又はそれ以上のアプリケーションプログラムを有する。アプリケーションプログラムは、デバイス１０で特定のアプリケーション（又はその一部）（それは、「モード」とも称される）を実行し、例えば、各アプリケーションは、１又はそれ以上のアプリケーションプログラムによって実行される。アプリケーションプログラムは、カメラの適用におけるカメラのレンズの制御及び画像の表示、ゲームの適用におけるゲームの実行、ナビゲーションの適用におけるデバイス１０の方向及び現在位置の出力といった、それらの適用に特有な適切なユーザインタフェース機能とともに、処理及び入力／出力機能を提供し得る。
【００２９】
アプリケーションソフトウェア層５２は、デバイスのリソースを管理するシステムソフトウェア層５４と通信するが、これはハードウェアとソフトウェア要素との間の通信を含む。内蔵型システムアプリケーションでの動作検出のためのソフトウェア構造を、図３に示すように別個の層で規定し得る。このように、システムソフトウェア５４は、アプリケーションプログラミングインタフェース（ＡＰＩ）層５６と、リアルタイムオペレーティングシステム（ＲＴＯＳ）層５８と、動作アルゴリズム層６０と、センサデバイスドライバ層６２とを有する。また、必要に応じてさらなる層を含めることができる。
【００３０】
ＡＰＩ層５６は、使用するアプリケーションプログラムのために抽象化された高レベルの機能のセットを提供するが、これはアプリケーションプログラム及び動作センサといったデバイス１０の低レベルの要素との間のインタフェース及び通信を大いに簡略化する。ＡＰＩ層は、動作センサデータに関して使用する様々な低レベルの機能又はアルゴリズムの「動作ライブラリ」を提供することによって、デバイス１０の動作検出エンジンへのインタフェースを強化する。ＡＰＩ層５６の中の特定のＡＰＩを規定して、そのようなＡＰＩにアクセスするアプリケーションによって対応するアルゴリズムを使用し得る場合、１又はそれ以上の動作アルゴリズムに対応し得る。
【００３１】
ＡＰＩ層５６は、アプリケーションプログラムによって使用される関連する制御パラメータ又は設定値とともに、所定の高レベルの抽象化コマンドを提供して、デバイス１０の動作センサからサンプリングされた動作センサデータに基づいて、高レベルの情報を含む情報を検索し得る。ＡＰＩ層５６は、高レベルのコマンドをアプリケーションプログラムからコマンドの実行に要される必要な動作アルゴリズムに変換し、これにより、特定のアプリケーション、特定のアプリケーションに必要な処理に関連する情報に関する要求を変換し得る。デバイス１０で動作する各タイプのアプリケーションは、アプリケーションタイプに基づいて、動作に基づく高レベルのデータの特定のセットを要する。例えば、ユーザの動作／アプリケーションのカーソル制御タイプが、デバイス１０の動作に基づいて、２次元又は３次元の座標を要することがある一方、アプリケーションの画像安定化のタイプが、デバイス１０の動作に基づいて輪郭のぼやけ及び関連する情報の表示を要することがある。動作アルゴリズムＡＰＩアクセスは、動作センサデータの低レベルの処理に関連する正確な要求を認知して、高レベルのコマンドに関連するアプリケーションに関して、アプリケーションプログラムによって命令された特定のタイプの高レベルの情報を得る。例えば、動作アルゴリズムは、画像安定化アプリケーション又は機能のために使用されることを示す高レベルのコマンドを受け取った後に、画像安定化アプリケーションのために、５００Ｈｚといった高いサンプリングレートで動作センサから動作センサデータをサンプリングすることが分かっている。
【００３２】
このため、低レベルの処理は、アプリケーションプログラムによって要される高レベルの情報を知的に判断し、アプリケーションプログラムにそれを提供し得る一方、アプリケーションプログラムは、要求された動作センサデータの低レベルの処理、及び高レベルの情報を得るのに必要となるその処理で使用される処理及びタイミング要求を無視し得る。例えば、アプリケーションプログラムの開発者は、生の検出データを収集及び処理するやり方を知る必要なしに、例えば、開発者のアプリケーションに適した処理された動作センサデータを受け取るためのＡＰＩコマンドで問い合わせることのみを必要とする。ＡＰＩ層５６をできる限りオペレーションシステムに独立して規定して、できる限り持ち運びし得るアプリケーションソフトウェアを作成し得る。
【００３３】
ＡＰＩ層５６は、デバイス１０で実行且つ使用し得る１又はそれ以上のタイプのアプリケーションに有用な複数の特定のタイプのＡＰＩを提供し得る。例えば、携帯電話又はゲームでの適用といった特定の適用で使用される特定の動作検出タイプのＡＰＩを提供し得る。複数の異なるタイプのアプリケーションが、デバイス１０で好適に実施され、これらのアプリケーションに関する複数の様々なＡＰＩが提供される。いくつかのタイプのアプリケーションが、特定のタイプのＡＰＩを必要としない。例えば、ナビゲーションでの適用は、画像安定化のＡＰＩの使用を必要としない。
【００３４】
ある実施例では、ＡＰＩを低レベルのＡＰＩ（例えば、生データの取得、較正データの取得、初期化センサ、設定値パラメータ、数学的機能の実行）、中間レベルのＡＰＩ（例えば、横揺れ、縦揺れ、偏揺れ、機首方位、位置、又はぼやけの程度といった処理データの取得）、及び高レベルのＡＰＩ（例えば、１つの命令行でのＤＲカルマンフィルタの実行）にブレークダウンさせ得る。より基本的なアルゴリズム構成要素からアプリケーション開発者自身のアプリケーションの構築を望むアプリケーション開発者によって中間レベルのＡＰＩを使用し得る。他の実施例は、２つのＡＰＩ層のレベルのみを提供し得る。ＡＰＩソフトウェアは、システムの動作中にバックグラウンドで効果的に動作し、いくつかの異なるコンピュータ言語又はフォーマットで層５２のアプリケーションプログラムを提供し得る。このため、ＡＰＩ層５６に関して、他のプログラム言語とともに使用し得る「結合」を形成し得る。
【００３５】
デバイス１０のためのオペレーティングシステムとしてＲＴＯＳ層５８を提供して、リアルタイムでシステムリソースを制御且つ管理することができ、ＡＰＩ層５６、動作アルゴリズム層６０、動作検出ドライバ６２といった他の層とともにアプリケーションソフトウェア５２の機能を可能にする。オペレーティングシステムは、アプリケーションプログラムとデバイス１０の他のソフトウェア及び機能とのインタフェースをとることができる。ＲＴＯＳ層５８は、リアルタイム動作を具えた内蔵型システムに適した様々な利用可能なオペレーティングシステムのうちの任意のものとし得る。ＲＴＯＳ層５８は、ＲＴＯＳ層５８によって提供される機能を用いるアプリケーションソフトウェア５２を含む任意の他の層とやりとりし得る。デバイス１０のための特定のオペレーティングシステム、又は、デバイス１０とともに使用するよう構成されたより一般的なオペレーティングシステムとして、ＲＴＯＳ層５８を実行し得る。
【００３６】
動作アルゴリズム層６０は、動作センサ及び他のセンサから与えられる生の検出データに関する知的で低レベルの処理を与える動作アルゴリズムの「動作ライブラリ」を提供する。層６０のこのようなアルゴリズムは、生の検出データを取得して、高レベルの情報、及び／又はアプリケーションに特有な情報の中のデータを結合及び形成し得る。
【００３７】
例えば、動作アルゴリズムは、いくつかの動作センサから動作センサデータを取得して、デバイスの横揺れ／縦揺れ／偏揺れ、又は２次元のスクリーン上でカーソルを位置決めするためのＸ及びＹ座標といった、特定のアプリケーションに有用な高レベルの情報の中のデータを処理及び／又は結合し得る。あるアルゴリズムは、動作センサから動作センサデータをサンプリングするための正確なタイミング要求を一般に有する。例えば、あるアルゴリズムは、動作センサデータを蓄積し、データ点を統合してデバイス１０の動作角度又は他の動作特性を取得する。さらに、そのアルゴリズムは、動作センサのデータに加えて、１又はそれ以上の他のセンサからのデータを使用し、圧力、温度、及び／又は方向センサといった高レベルの情報を判定し得る。アプリケーションプログラムに高レベルの情報を与えるＡＰＩ層５６によってアルゴリズムの出力を報告又は検索することができ、これにより、動作アルゴリズムによって実行された処理は、アプリケーション開発者によって認識されることを要しない。開発者は、動作センサデータに基づいて所望の高レベルの情報を要求するために、ＡＰＩ層５６で与えられるＡＰＩ機能を使用することのみを要する。
【００３８】
動作アルゴリズムを１又はそれ以上の特定のアプリケーション及び／又はＡＰＩに関連させ得る。例えば、「運動の検出」ＡＰＩは、一連の検出データをチェックして判定されたこのような態様が検出された場合にジェスチャといった「態様」を出力するジェスチャ認識動作アルゴリズムを使用し得る。このようなジェスチャは次に、アプリケーションソフトウェアに対する単純なコマンド、入力又は事象として、ＡＰＩ層５６で規定される。できる限り独立したオペレーションシステムとして動作アルゴリズムを設計することができ、これにより、異なるシステム間でアルゴリズムを移植する際の障害が減る。
【００３９】
検出デバイスドライバ層６２は、デバイス１０のハードウェアセンサへのソフトウェアインタフェースを提供する。ドライバ層６２は、図１を参照して説明されるようなジャイロスコープ２６、加速度計２８、及び他のセンサ２２及び２４を含むデバイス１０の複数のタイプのセンサとのインタフェースを提供する。例えば、動作センサ２６及び２８の検出結果を、ハードウェアによってＭＰＵのレジスタに書くことができ、その後それらのレジスタがデバイスドライバ層６２によってアクセスされる。そして、ドライバ層６２が、処理のために動作アルゴリズム層６０の１又はそれ以上の動作アルゴリズムにアクセス検出データを提供し得る。ある実施例では、デバイスドライバ層６２が、動作アルゴリズムを用いてハードウェア処理がいくつかの検出データを処理する場合、ＭＰＵのハードウェア処理部３０とインタフェースをとる。
【００４０】
図４は、アプリケーションプロセッサ１２で動作する図３のソフトウェア層の例を示すブロック図である。アプリケーションソフトウェア層５２は、複数の様々なアプリケーションプログラムを含めて、様々な異なるタイプのアプリケーションを実行することができる。例えば、メニューナビゲーションとともに電話機能（他の電話に電話をかける、電話を受ける、ユーザにそれらを提供する、等）を実行する１又はそれ以上のアプリケーションプログラム６０によって携帯電話での適用を実施し得る。デバイス１０の２次元ディスプレイスクリーンへのグラフィック画像の表示、デバイス１０の音響スピーカからの音声の出力、及びボタン、取っ手、ジョイスティック、スタイラスペン、タッチパッド又はタッチパネル、マイク、又は他の入力装置を介したユーザの入力に基づく出力の変更といった、１又はそれ以上のゲームでの適用を、様々なビデオゲームを提供するアプリケーションプログラム６２によって実行し得る。ユーザの歩行距離を測定し他の身体的特性を測定する歩数計を制御且つ表示するための健康及び歩数計アプリケーションプログラム６４によって、健康器具での適用を実行し得る。画像安定化、ズーム及び解像度機能等を含むデジタルスチルカメラ又はデジタルビデオカメラを制御するためのアプリケーションプログラム６６によって、デジタルカメラでの適用を実行し得る。小型ナビゲーションシステム（ＰＮＤ）、歩行者デッドレコニング（ＰＤＲ）、又は他のナビゲーション機能のためのアプリケーションプログラム６８によって、ナビゲーションでの適用を実行することができ、これらのデバイスを制御してユーザに現在位置といったナビゲーション結果を出力するためのアプリケーションプログラムを含めることができる。
【００４１】
ＲＴＯＳ層５８が、ＡＰＩ層５６、動作アルゴリズム層６０、及び検出デバイスドライバ層６２を含む他のソフトウェア層を監視する。ＡＰＩ層５６は、様々なタイプのＡＰＩを含めることができ、各ＡＰＩは、デバイス１０によって実行し得る１又はそれ以上のアプリケーションプログラムに有用な特定のタイプの高レベルの情報を特徴とする。図４の例では、ＡＰＩ層５６が、動作検出ＡＰＩ７０、画像安定化ＡＰＩ７２、及びナビゲーションＡＰＩ７４を有する。
【００４２】
動作検出ＡＰＩ７０は、デバイス１０（又はその一部）の動作を説明し又はデバイスの動作によって判断される態様を説明する高レベルの情報を要求するための高レベルのコマンド及び機能を含めることができる。このような高レベルの機能は、ユーザによる特定の動作入力を認識するジェスチャ認識を含めることができ、特定のコマンドを呼び出す。例えば、あるジェスチャが、特定の方向／向き又は一連の特定の方向／向きにデバイス１０を動かし、及び／又は特定の時間、「削除」、「パン撮り」、「ズーム」等のジェスチャに関連する機能を初期化することを含めることができる。ＡＰＩ７０により、開発者が生の動作センサデータを用いたこれらのジェスチャのチェックのやり方又は適切なアルゴリズムを用いたこのような検出データの処理のやり方を認識する必要なしに、アプリケーションプログラム開発者が、特定の予め規定されたジェスチャが検出されたかどうかの要求を簡略化し得る。他の動作センサアプリケーションは、表示又はカーソル制御のスクロール、動作／方向データといったゲームに入力が与えられたことを表示するデータの要求、又は武器の使用又はドアを開けるといったスクリーン上の図形オブジェクトを動かしゲームの中にある機能をアクティブにするためのジェスチャといった、ユーザインタフェース機能に関連する動作データの要求を含む。
【００４３】
ＡＰＩ層５６の様々なＡＰＩのうちの別の例は、画像安定化ＡＰＩ７２である。このようなＡＰＩにより、アプリケーションプログラムが、例えば、デジタルスチルカメラ又はビデオカメラで使用される、高レベルの画像安定化の機能に関するデバイス１０の状態を要求し得る。例えば、このような高レベルの画像安定化機能は、画像取得の間に検出された特定の動作量に基づいてカメラのレンズによって取得された画像の中のぼやけ量及びその度合いの推定を含めることができる。アプリケーションプログラムが生の検出データを用いてこのようなぼやけを計算したり、アルゴリズムで生の検出データを処理する必要がない場合、ＡＰＩ７２により、アプリケーションプログラムが画像のぼやけ量の要求を簡略化し得る。他の高レベルの画像安定化機能は、アプリケーションプログラムが取得画像のデジタル処理を要求し得る画像の再構築を含めることができ、そのような処理自身を実施する必要なしに、元の色又はぼやけた画像の他の特性を補正又は再構築する。他の画像安定化機能は、点広がり関数（ＰＳＦ）、画像融合、又は動作検出に関する（ぼやけといった）特定の特徴についての画像推定を含めることができる。
【００４４】
ＡＰＩ層５６の様々なＡＰＩのうちの別の例は、ナビゲーションＡＰＩ７４である。このＡＰＩにより、アプリケーションプログラムが、例えば、ナビゲーションデバイスで使用される高レベルのナビゲーション機能に関するデバイス１０の状態を要求し得る。例えば、このような高レベルのナビゲーション機能は、デバイス１０のデッドレコニング位置を提供することを含めることができ、このようなデッドレコニング位置推定において重力を補償する。ＡＰＩ７４により、アプリケーションプログラムが、このような補償自身を実行する必要なしに、データにおいて補償されるそのような重力の要求を簡略化し得る。他の高レベルのナビゲーション機能は、検出データにナビゲーションカルマンフィルタを適用することを含めることができ、デバイス１０の位置及び／又は速度について継続的に更新される情報を与える際に、記録位置の誤差を補償し、雑音マトリクス又は処理マトリクスを設定する。
【００４５】
ＡＰＩ層５６の異なるＡＰＩを、アプリケーション層５２で様々な複数のアプリケーションを実行する全て１つのデバイス１０で提供し得る。ＡＰＩの使用し易さにより、各アプリケーション開発者が特定のアプリケーションについて動作センサデータの収集及び処理における専門知識を有するよう要求されることなしに、１つのデバイス１０に幅広く且つ様々なアプリケーションを提供し得る。ある実施例では、デバイス１０で複数のアプリケーションを同時に実行し得る。このようなことを図７を参照して以下に詳細に説明する。
【００４６】
動作アルゴリズム層６０は、ＡＰＩ層５６のＡＰＩによって呼ばれるフィルタといったアルゴリズムを含めることができる。動作アルゴリズムにいくつかは、空間におけるデバイス１０の現在の向きを提供する、又はデバイスが現在空間内を動いているか否かを表示するといった、基本的な機能的アルゴリズムとすることができる。アルゴリズムは、様々なセンサの出力を結合して結果を処理し、生の検出データから得られるより高レベルの情報とともに、より高精度な検出結果を与え得る。
【００４７】
また、特定のアプリケーションのために、より特徴的なアルゴリズムを含めることができる。例えば、動作アルゴリズムプログラムが、動作検出ＡＰＩ７０とともに使用するジェスチャ認識アルゴリズム８０を含めることができ、入力デバイスを有するユーザによって特定のジェスチャが行われたか否かを判断する。このようなアルゴリズムは、ユーザが検出データ等に基づいて「タッピング」ジェスチャ又は他のジェスチャを入力するか否か又は、より「中間レベル」のＡＰＩに関しては、デバイスの横揺れ、縦揺れ及び偏揺れ又はデバイスのＺ回転を提供するか否かを判断することができる。同様に、動作検出ＡＰＩ７０とともにカーソル制御アルゴリズム８２を使用して、ユーザ入力デバイスに関して、生の動作センサデータからアルゴリズムによって判定される横揺れ、縦揺れ及び偏揺れに基づいて、カーソルが表示スクリーン上に表示される場所であるＸ−Ｙ座標を判断し得る。また、ディスプレイスクリーン上のアイコンがセンサ入力に基づいてユーザによって選択されているかどうかを判断するためのものといった、他のユーザインタフェース及び連続的な制御アルゴリズムを使用することができ、カーソル制御の際の手ぶれを補償し、動作センサデータに基づいて１又はそれ以上の表示画像を移動させる。動作検出ＡＰＩ７０とともにゲーム用のアルゴリズム８４を使用して、入力としてアプリケーションがゲーム機能を制御する場合に、特定のジェスチャ又は動作を受けたか否かといった、ゲームの適用に関するデータを提供し得る。
【００４８】
画像安定化アルゴリズムは、ぼやけの推定及び画像再構築アルゴリズムを含めることができる。ぼやけのアルゴリズム８６を使用して、カメラのレンズによって取得される画像といった画像取得の際に動作センサデータに基づいて、画像にぼやけが発生したか否かを判断し得る。例えば、アルゴリズムが点広がり関数（ＰＳＦ）を使用して、ぼやけを判定し得る。画像再構築アルゴリズム８８を使用して、例えば、ぼやけを介して歪められ又は除去された画像の特性を補正又は再構築し得る。同時係属の米国特許出願第１１／７７４，４８８号に、他の画像安定化アルゴリズムが説明されており、参照することにより全体として本書に盛り込まれている。ナビゲーションアルゴリズムは、デッドレコニングが判定された場合に、重力を補償するよう使用し得る、デッドレコニング重力補償アルゴリズム９０と、検出位置の誤差を補償するよう使用し得るナビゲーションカルマンフィルタ９２とを含めることができる。例えば、デッドレコニング位置アルゴリズムは、１又はそれ以上の加速度計からのデータを使用してデバイス１０の位置を判断し、１又はそれ以上のジャイロスコープ２６からのデータを使用してデバイス１０の動作方位又は方向を判断し得る。
【００４９】
デバイスドライバ層６２は、図３を参照して上述したような、デバイス１０のハードウェア動作センサ２６及び２８及び他のセンサ２２及び２４とのソフトウェアインタフェースを提供する。層６２は、図１を参照して説明したような、ジャイロスコープ２６、加速度計２８、気圧計、コンパスセンサ、及び他のセンサ用ドライバを含め得る。
【００５０】
図５は、動作検出デバイス１０で実施されるＡＰＩにアクセスするアプリケーションプログラムの本発明に係る方法２００を示すフローチャートである。本方法２００及びここで説明する他の方法は、特に記載しない限り、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施し得る。プロセッサ又はコンピュータによって実行し得るプログラム命令又はプログラムコードを用いて、本方法を実施することができ、電子メモリ、磁気テープ、磁気ディスク、光ディスク等といったコンピュータ可読な媒体に提供し得る。
【００５１】
方法２００では、アプリケーションプログラムが、アプリケーションプログラムに有用な動作検出機能を提供するＡＰＩ層５６の特定のＡＰＩとインタフェースをとる。ある実施例では、複数のアプリケーションが、１つのＡＰＩとインタフェースをとることができる一方、他のアプリケーションプログラムが専用のＡＰＩを有し得る。また、アプリケーションプログラムは、必要に応じて、複数タイプのＡＰＩにアクセスし得る。ＡＰＩとのインタフェースは、アプリケーションプログラムがそれが要求する情報の実施詳細を無視し得るような高レベルである。このため、例えば、ＡＰＩへの命令は、「デバイスの現在位置を提供する」こと又は「最新の画像に関するぼやけたカーネルを提供する」こと又は「デバイスが現在示す運動のタイプを提供する」ことと等しいものにすることができる。
【００５２】
また、本発明のＡＰＩは、「イベント駆動プログラミング」を使用し得る。例えば、動作検出ＡＰＩを使用する場合、アプリケーションプログラムは、一般に、１０ｍｓ毎の動作センサの入力のチェックを必要としない。その代わりに、アプリケーションプログラムが、特定の動作センサデータから成るジェスチャを探す場合、そのようなジェスチャを検出する（これは、１つの「イベント」である）ときに、それはＡＰＩを要求してアプリケーションプログラムに割り込む。アプリケーションプログラムによる本発明に係るＡＰＩの使用例を、以下の表１及び２に、「ｍｌ」が「動作ライブラリ」を表すものとして示す。
mlInitializeSensors();
mlRegisterGestures (ML_DOUBLE_TAP｜ML_ROLL);
mlGestureCallBack (got Gesture);
・・・
void gotGesture(gesture) {
if (gesture == ML_DOUBLE_TAP) {
[...If the double tap gesture is detected, perform the functions or operations listed here.]
}
else if (gesture==ML_ROLL) {
[...If the roll gesture is detected, perform the functions or operations listed here.]
}
}
表１
ml.Bind(ml.EVT_DOUBLE_TAP, OnDoubleTap) // when a double tap gesture is detected, run the function "OnDoubleTap"
ml.Bind(ml.EVT_ORIENTATION_CHANGE, OnOrientationChange) // when the orientation is changed, run the function "OnOrientationChange"
ml.Bind(ml.EVT_MOTION, OnMotion) // when the portable device moves, run the function "OnMotion"
ml.MainLoop() // Begin an infinite loop, running the engine in the background. Don't run any more of the program unless an event requires it.
def OnDoubleTap():
[...If the double tap gesture is detected, perform the functions or operations listed here.] 
def OnOrientationChange():
[...If an orientation change is detected, perform the functions or operations listed here.] 
def OnMotion():
[...If movement is detected, perform the functions or operations listed here.]
【００５３】
表２
図５の方法２００は２０２で開始し、ステップ２０４で、アプリケーションプログラムが最初にＡＰＩにコマンドを送信して、（フィルタといった）１又はそれ以上のアルゴリズムを設定又は「登録」する設定値を与え、デバイス１０の動作の際の「コールバック機能」としてバックグラウンドで動作する。この設定値は、動作の際に、いずれのタイプの情報をアプリケーションが欲しているのかを特定し得る。このような設定値は、いずれのアルゴリズムが動作して（位置、方向、通知等といった）情報を提供するかをＡＰＩに示し、アプリケーションプログラムに戻る。例えば、アプリケーションプログラムは、デバイス１０がユーザの周りの空間を動く際に、デバイス１０の位置及び方向の連続的な更新を望むことができる。アプリケーションプログラムは、アルゴリズムをセットアップしてアプリケーションプログラムに絶え間なく所望の情報を提供する設定値をＡＰＩに送信し得る。ある実施例では、アプリケーションプログラムが、パラメータを任意に特定して、アプリケーションプログラムがＡＰＩから情報を受け取る設定レート、このような情報をアプリケーションプログラムに送信する時間、通知すべき回数等といった、受け取るための高レベルの情報をカスタマイズし得る。さらに、アプリケーションプログラムは、状態が検出データに基づいて判断されたものに適合する場合に、アプリケーションプログラムに情報を送るための１又はそれ以上の状態を示す設定値を送信し得る。例えば、設定値は、検出された場合に、いずれの特別な動作又はジェスチャがＡＰＩを始動させて動作又はジェスチャの発生のアプリケーションプログラムに通知するか、又は「ダブルタップ」ジェスチャとみなされる２つの検出タップ間の時間を特定し得る。また、アプリケーションプログラムは、データが処理されるアルゴリズム又はフィルタ、又は連続的動作の統合及び／又はデバイスが回転して始動させる角度の特定といった詳細を特定し得る。
【００５４】
ステップ２０６で、アプリケーションプログラムが、高レベルの情報を含む、バックグラウンドで動作するよう要求されたコールバック機能アルゴリズムに基づいてＡＰＩからの情報を検索する。ＡＰＩは、ステップ２０４の情報に基づいて開始しバックグラウンドで動作する適切なアルゴリズムの動作に基づいて、アプリケーションプログラムに所望の情報を提供する。ステップ２０６を、アプリケーションプログラムによって特定される要求にしたがって、又はＡＰＩ及び下層によって実行されるような要求にともなって、連続的に実行し得る。例えば、カメラの適用では、アプリケーションプログラムが過度のハンドジッタが起きたか否かについてユーザに警告信号を発することができる場合に、アプリケーションプログラムが、過度のハンドジッタが起きたか否かを連続的に認識することを必要とする。また、ステップ２０６を、（アプリケーションプログラムによって前もって特定されるような）条件が満たされた場合といった、不等間隔で実行し得る。例えば、アプリケーションプログラムは、デバイス１０が特定の方向に極端に傾いた場合に、ユーザに出力を出してこのような傾きを知らせる必要があるだろう。方法２００の他のステップの実行の際にステップ２０６を実行し得る。
【００５５】
ステップ２０８では、アプリケーションプログラムが、アプリケーションプログラムがそれを実行するための情報を必要か否かをチェックするが、このような情報は、（少なくとも部分的に）デバイス１０の動作センサによって読み込まれる検出データに基づく。例えば、アプリケーションプログラムは、ユーザからのデバイス位置の要求に応じてデバイスの現在位置を認識することを必要とする。ステップ２０８で情報が要求されない場合、処理はステップ２０６に戻って（適切な場合に）情報を検索する。情報を必要としない場合、ステップ２１０でアプリケーションプログラムが、ＡＰＩによって規定される高レベルのコマンドを用いてＡＰＩからの必要な高レベルの情報を要求する。ステップ２１２で、アプリケーションプログラムが、ＡＰＩから要求された情報を検索する。そして、このような処理がステップ２０６に戻る。
【００５６】
図６は、動作検出デバイス１０で実施される他のソフトウェア層とインタフェースをとるＡＰＩの本発明の方法２５０を示すフローチャートである。処理は２５２で開始し、ステップ２５４において、ＡＰＩがアプリケーションプログラムから高レベルのコマンドを受け取り、動作アルゴリズムをセットアップする。高レベルのコマンドは、いずれの高レベルの情報をアプリケーションプログラムが欲しているのかを示す設定値を与え、デバイス１０のセンサによって与えられる動作センサデータに（少なくとも部分的に）基づいて動作アルゴリズムから検索する。図５を参照して上述したように、設定値は、情報のタイプ、情報が送られる速さ、情報が送られる条件等を特定する。ＡＰＩは、関連するアプリケーションの的確な要求にしたがって、例えば、このようなアプリケーションに関する要求されたサンプリングレートで適切なセンサからサンプリングされる動作センサデータを処理することによって、アプリケーションプログラムから要求された情報を与える特定の動作アルゴリズムにコマンド及び設定値を変換する。
【００５７】
ステップ２５６で、ＡＰＩが、受け取ったコマンド及び設定値に基づいて、要求された動作アルゴリズムを開始し、これらのアルゴリズムがデバイス１０の動作の際にバックグラウンドで動作する。ＡＰＩは、アプリケーションプログラムの要求及び設定値を満足する特定のアルゴリズムを動作し得る。ある実施例では、アプリケーションプログラムからのコマンドは、特定のアルゴリズムを特定せずバックグラウンドで動作するのに十分高レベルであり、ＡＰＩは適切なアルゴリズムを受け取ったコマンドと結び付ける。代替的な実施例では、受け取ったコマンドが、特定のアルゴリズムを特定し得る。アルゴリズムは、アプリケーションに要求される正確なタイミングで検出データをサンプリング及び処理することができ、アプリケーションプログラムの要求されたタイミングで、アプリケーションプログラムに受け取った情報を報告する。また、アルゴリズムは、アプリケーションプログラムによって特定される状態をチェックし得る。ある実施例では、ＡＰＩといったより高いソフトウェア層が、このような特定の状態のいくつか又は全てをチェックし得る。
【００５８】
ステップ２５８では、連続的な情報を要求された場合、ＡＰＩがアプリケーションプログラムに高レベルの情報を含む連続的な情報を与える。例えば、ＡＰＩは、動作アルゴリズム層６０の１又はそれ以上のアルゴリズムから処理情報を受け取ることができ、アプリケーションプログラムにこのようなデータを提供する。ＡＰＩ又はアルゴリズムは、好適には情報を提供し、又はアプリケーションプログラムによって実行されるアプリケーションに適した特定の速さでアプリケーションプログラムに情報を検索又はサンプリングさせ得る。
【００５９】
ステップ２６０では、ＡＰＩは、特定の情報に関するアプリケーションプログラムからの要求を受け取るか否かをチェックする。受け取らない場合、以下で説明するようにステップ２６４を開始する。受け取る場合、ステップ２６２で、ＡＰＩがアプリケーションプログラムに要求された情報を与える。このような情報は、適切なアルゴリズムを要求しアルゴリズムから情報を受け取ることによって取得された。そして、この処理がステップ２５８に戻る。ステップ２６４で、ＡＰＩが、アプリケーションプログラムに情報を送り始める事象が起こったか否かをチェックする。例えば、このような事象は、アプリケーションプログラム又は適合するＡＰＩによって特定される１又はそれ以上の状況とすることができる。事象が発生しない場合、処理がステップ２５８に戻る。事象が発生する場合、ステップ２６６で、ＡＰＩがアプリケーションプログラムに始動情報（一般に高レベルの情報）を与える。このような情報は、適切なアルゴリズムから取得された。そして、処理がステップ２５８に戻る。
【００６０】
ある実施例では、動作アルゴリズムの低レベルの処理が、受け取った高レベルのコマンド及びパラメータ又は動作アルゴリズムにＡＰＩによって送られる指示によって示されるような、アプリケーションのタイプに特有な知的な処理を含んでいる。このため、デバイス１０のどのアプリケーションが現状で動作しており、それに応じてこれらのアプリケーションに関する重要な態様となり得るのかを認識するのに十分知的な「内容認識」が提供され得る。例えば、使用される現状の動作アプリケーションが、ゲーム用アプリケーション又はナビゲーション用アプリケーションである場合、ＡＰＩは、読み込むための適切なセンサこれらのセンサを読み込むためのタイミング要求を含むゲーム又はナビゲーションに関する適切な態様、及びユーザへのインタフェース機能及び出力を含む与えられる適切な高レベルの情報及び機能となり得る。
【００６１】
例えば、低レベルの処理は、動作検出デバイスの全ての動作センサの全ての出力の検査を行って、アプリケーションプログラムによって実行されるアプリケーションのタイプに必要な高レベルの情報を判定することを含め得る。アプリケーションのタイプに応じて、低レベルの処理が、全ての動作センサの出力検査の後に、アプリケーションのタイプに必要となる動作センサの軸のサブセットのみを選択的に使用し得る。例えば、６軸のデバイス１０で動作する特定のアプリケーションでは、アルゴリズムが３つのジャイロスコープ全て及び３つの加速度計全てを検査して、デバイス１０が空間内で鉛直に保持され、加速度計からの検出データのみを処理してこのようなアプリケーションに関する高レベルの情報を形成するか；又はデバイスが空間内で水平に保持され、このようなアプリケーションについてジャイロスコープからの検出データのみを処理するかを判定し得る。他の実施例では、ＡＰＩが受け取る高レベルのコマンドが、アプリケーションのタイプに基づいて、高レベルの情報を判定する際に動作センサのいずれの軸及び出力を選択的に使用するかを判定し得る。ある実施例では、高レベルのコマンドが使用する特定の軸及び出力の特定を必要とせず；むしろ、低レベルの処理が、特定の高レベルのコマンドが何であるかに基づいて、いずれのセンサ出力を使用するかを認識することができ、ＡＰＩの処理がこのような高レベルのコマンドに関連する。
【００６２】
ある実施例では、現在動作しているアプリケーションで使用されない動作センサ（又はその特定の軸）の動作又は検出機能を停止することによって、動作センサの軸及び出力のいくつかのみの選択的な使用をさらに使用し得る。これにより、電力消費及び／又はデバイス１０の処理の帯域幅を抑えることができる。
【００６３】
また、動作検出リソースに関する全体的なパワーマネージメントとともに、スリープモード及びウエイクアップモード含むさらなるパワーマネージメント態様をＡＰＩ層に含めることができる。例えば、ＡＰＩ層が、ジャイロスコープ２６への電源を切るアプリケーションプロセッサ１２又はＭＰＵ２０で動作する１又はそれ以上のプログラムを実行することができ、それらがデータを検出していない場合にいつでも、又はそれらのデータが未使用である場合に、他のセンサよりも多くの電力を消費する。一実施例では、デバイス１０のいくつかの動作が他の動作センサによって検出される直後に、ジャイロスコープを「目覚めさせる」ことができる。
【００６４】
本発明に係るＡＰＩで使用され得るＡＰＩコマンドの例を以下に示す。
mlInitializeSensors() 
mlGetRawData() 
mlGetCalibratedData() 
mlGetAugmentedData() 
mlGetHumanMotion() 
mlGetRotationMatrix() 
mlGetQuaternion() 
mlGetRoll 
mlGetPitch() 
mlGetYaw() 
mlHeading() 
mlGetLocation() 
mlGetPSF() 
mlGetBlurAmount() 
mlCalibrate() 
mlUpdateState() 
mlUpdateRotationMatrix() 
mlUpdateHumanMotion() 
mlUpdateGesture() 
mlRegisterGestures() 
mlGestureCallBack() 
mlUpdateKalmanFilter() 
mlUpdateSensorCalibration() 
mlSetNoiseMatrix() 
mlSetProcessMatrix() 
mlGeneratePSF() 
mlBlendlmages() 
mlEvaluateImage()
【００６５】
複数のアプリケーションの同時処理
図７は、１又はそれ以上の連続的に動作するアプリケーションプログラムによる動作検出デバイス１０上で同時に動作する（すなわち、同時に実行される）様々なアプリケーションについてデータを同時に処理するための、本発明に係る方法３００を示すフローチャートである。本方法３００は、複数のアプリケーションが現在動作しており、動作センサデータ又は動作センサデータから得られるデータを要求すると仮定する。いくつかの実施例では、動作アルゴリズム層６０によって本方法３００を実施し得る。
【００６６】
現在動作するアプリケーションのうちの少なくとも２つが、異なる最小サンプリングレートでサンプリングされる動作センサデータを要求する。例えば、画像安定化アプリケーションが、５００Ｈｚといった高速でサンプリングされる動作センサデータを要求する一方、ユーザインタフェースアプリケーションが、５０Ｈｚといった低速でサンプリングされる動作センサデータを要求し得る。
【００６７】
処理が３０２で開始し、ステップ３０４で、第１のサンプリングレートで検出データを受け取る。第１のサンプリングレートは、デバイス１０で現在動作するアプリケーションが要する最低のサンプリングレート（必要とする最低のレートよりも高いサンプリングレートも使用し得る）として決定される。システム１０で使用可能であるが現在動作していない他のアプリケーションプログラムのサンプリングレートは、このような第１のサンプリングレートの決定に関連しない。ステップ３０６で、第１の（最高の）サンプリングレートでサンプリングされる検出データを、デバイス１０で動作する第１のアプリケーションで使用する（又は、２以上のアプリケーションが第１のサンプリングレートで最低速サンプリングされるデータを要求する場合には、複数の第１のアプリケーションで使用する）。上述のように、層６０の動作アルゴリズムが検出データを処理して、ＡＰＩ及び第１のアプリケーションを実行する第１のアプリケーションプログラムに処理された高レベルの情報を提供し得る。
【００６８】
ステップ３０８で、ステップ３０４において第１のサンプリングレートで受け取った検出データにローパスフィルタを使用し、デバイス１０で現在動作する異なる第２のアプリケーションに適しているが第１のアプリケーションで使用するには低過ぎる、より低い第２のサンプリングレートを作り出す。例えば、第２のアプリケーションは、フィルタを用いて第１のサンプリングレートを低くすることができるように、第１のアプリケーションよりも低いレートでサンプリングされる検出データのみを必要とする。ステップ３０８のローパスフィルタは、ポイント移動平均、無限インパルス応答（ＩＩＲ）フィルタ、有限インパルス応答（ＦＩＲ）等といった、様々な異なるタイプのうちの任意のものとし得る。
する。ステップ３１０で、第２のサンプリングレートでサンプリングされた検出データを、第２のアプリケーションで使用する（又は、２以上が第２のサンプリングレートで検出データを使用し得る場合に、複数のアプリケーションで使用する）。本発明３００の他のステップと同時にステップ３１０及び３０６を同時に実行し得る。
【００６９】
さらなるアプリケーションが現在動作しているおり様々なサンプリングレートでデータを使用し得る場合、ステップ３１２で、フィルタリングされた検出データにローパスフィルタを同様に使用して、現在動作しているさらなるアプリケーションについて、適切な場合、より低いサンプリングレートを作り出し、これらのさらなるアプリケーションにサンプリングされたデータを使用する。このようなアプリケーションが動作している場合、ステップ３０８の第２のサンプリングレートは、現在動作するアプリケーションプログラムで要求される２番目に高いサンプリングレートであり、ステップ３１２のサンプリングレートは、ステップ３０８の第２のサンプリングレートよりも低い。例えば、２つのさらなるアプリケーションが、異なった、より低いサンプリングレートを使用し得る場合、第２のサンプリングレートによって与えられるデータをフィルタリングして、アプリケーションのうちの１つに適した第３のサンプリングレートを与え、第３のサンプリングレートのデータをフィルタリングして第４の、他のアプリケーションに対して、より低いサンプリングレートを与える。そして、このような処理が３１４で完了する。
【００７０】
このように、方法３００により、階層フォーマットのデータのローパスフィルタリングによって、様々なサンプリングレート要求を具えた様々なアプリケーションを通常は難しい課題であるデバイス１０で実行し得る。例えば、ぼやけの計算が、５００Ｈｚでサンプリングされる検出データを要求し、ユーザインタフェースアプリケーションが、１００Ｈｚのサンプリングレートを要求し、ナビゲーションアプリケーションが２０Ｈｚのサンプリングレートを要求する。アプリケーションプログラムのレベルでは、ユーザインタフェースディスプレイを１０Ｈｚで更新し得る一方、ナビゲーションデータを１ＨｚでＧＰＳデータと合わせる。このようなアプリケーションを同時に動作させる動作検出エンジンは、様々なサンプリングレートで動作センサデータを同時に受け取って、複数のアプリケーションについての検出データを同時に処理することが可能である必要がある。例えば、ユーザが、動作ジェスチャでカメラユーザインタフェースをコントロールする一方、ぼやけが無い写真を撮りたい可能性がある。同時に、デバイスは、カメラでの適用の際にデバイスの位置が失われないように、デッドレコニングが可能となる。ＧＰＳ機能を有するカメラ付き電話では、ユーザは、写真を撮る度にユーザの位置情報を失いたくない可能性がある。
【００７１】
方法３００で説明される階層フォーマットでのフィルタリングにより、１つの最速のサンプリングレートから抽出される様々なサンプリングレートが可能となる。電子画像安定化に関しては、例えば、２５０Ｈｚのアンチエイリアスフィルタによって５００Ｈｚで生の検出データをサンプリングし得る。ステップ３０８の１０ポイントの移動平均（例えば、使用し得るローパスフィルタの１つのタイプ）は、さらなるアンチエイリアスを与え、５００Ｈｚから５０Ｈｚに帯域幅を減らし、ユーザインタフェースのアプリケーションについて１００Ｈｚのサンプリングレートが可能となる（アプリケーションが、センサのサンプリングレートを最大２倍にするサンプリングレートが可能となる）。別の１０ポイントの移動平均を１００Ｈｚで使用して、２０Ｈｚのナビゲーションフィルタに適した１０Ｈｚの帯域幅を与え得る。これらのフィルタ全ての出力を、ユーザが認識することなしに、それらの各サンプリングレートで更新し得る。これは、画像安定化フィルタのみが最速のサンプリングレートで動作することが必要であるため、アプリケーションの処理時間を最小限にする。
【００７２】
別の例では、画像安定化アプリケーションを、ユーザインタフェースアプリケーションと組み合わせることができる。生の加速度計のデータ又は増大したデータのいずれか（本例では、加速度計２８及びジャイロスコープ２６双方からの検出データから得られる重力加速度）を使用して、カメラの向きを追跡することができ、画像回転（ポートレート又は景色）及び平滑化情報に使用される。同時に、ユーザによってジェスチャもまた入力することができ、例えば、静止カメラモードからビデオカメラモードへの切り替えといったカメラモードを制御し得る。本発明を使用して、ぼやけのデータに使用される高いサンプリングレートのジャイロスコープ検出データが、ジェスチャ認識データに使用される低いサンプリングレートのジャイロスコープ検出データと同時に取得される。
【００７３】
さらに別の実施例では、ナビゲーションをユーザインタフェースアプリケーションと組み合わせることができる。ナビゲーションアプリケーションに関するデッドレコニングアルゴリズムの作動に加えて、携帯型デバイスもまた、地図の回転アルゴリズム及びユーザインタフェースアプリケーションについてのユーザ入力アルゴリズムを作動させることを要求し得る。地図の回転が、効果的なユーザインタフェースのために低遅延を要求するが、ナビゲーションアルゴリズムは、２０Ｈｚで動作することのみを要求するため、本発明を使用して、これらのアルゴリズムが様々なサンプリングレートで同時に動作し得る。
【００７４】
また、本発明によって提供される様々なサンプリングレートを、デバイス１０のパワーマネージメントに使用し得る。ある実施例では、デバイス１０の消費電力を減らすことができ、それは、歩行者ナビゲーションといったハンドヘルド又は携帯型のアプリケーションで重要となり得る。例えば、ナビゲーションのアプリケーションでは、ＧＰＳユニットを、デバイス１０に接続された付加的ユニットとしてデバイスの位置を判断し得る。層６０のデッドレコニングアルゴリズムは、ＧＰＳ受信器と組み合わせて使用され、ＧＰＳ受信器を単独で使用して位置を判断する場合よりも正確に現在位置を判断し得る。デッドレコニングフィルタは、ＧＰＳユニットによって要求される処理を減らし得るという、さらなる利点を有し、これにより電力を減らす。ＧＰＳ位置検索を具えたデッドレコニングを使用する場合、１ＨｚのＧＰＳサンプリングレートを０．１Ｈｚに減らすことができるか、又は衛星追跡が１２個の衛星の代わりに３つの衛星のみを追跡する。デッドレコニングアルゴリズムによって実現される付加的情報によって、ＧＰＳアプリケーションアルゴリズムの誤差をオフセットし得る。
【００７５】
ハードウェア及びソフトウェアバッファリング
ＭＰＵ２０といったハードウェアをデバイス１０で使用する理由は、アプリケーションプロセッサ１２及び／又はデバイス１０の他のプロセッサに負担となる処理を減らすことである。動作センサデータを取得するためのソフトウェアのみを用いることは、プロセッサ／ＣＰＵのオーバーヘッド、タイミング制約、及びコーディング又はカスタマイズ及び移植性の困難さにより、効率が悪い可能性がある。理想的には、動作検出ドライバは、ＣＰＵタイムのわずか１％を使用しなければならず、正確なタイミングの保証が、携帯型デバイスのオペレーティングシステムの中では難しい。しかしながら、ハードウェアは、コストの増加、及び形態の不正確さ及び制限を含む、いくつかの理由のために、全ての検出機能を実行するよう使用されない。例えば、センサ集積回路に必要以上のハードウェア処理部を付け加えることは、ダイエリアを増加させるが、これは、同じ処理がアプリケーションプロセッサ１２のソフトウェアで実行される場合に、不要である。
【００７６】
多くの場合、動作検出のための正確なタイミングは、アルゴリズムへのデータ入力を要するが、ユーザへの出力を要さず、すなわち、タイミング要求は、ユーザへのアプリケーションプログラムの出力について、より緩和される。例えば、ユーザインタフェースのアプリケーションでは、動作検出は多くの場合１００Ｈｚで実行され、正確なタイミングが必要とする動作全てを取得する。しかしながら、アプリケーションによるユーザへの出力は１０Ｈｚでありタイミングは不正確である。
【００７７】
本発明の実施例は、ハードウェア及び／又はソフトウェアを使用して、アプリケーションプログラムの出力についてタイミング制約が緩和された利点を有し、これによりアプリケーションプロセッサの処理時間を減らし得る。ある実施例は、高速プロセッサを有するこれらのシステムに関するソフトウェアでのさらなる処理を提供し得る一方、他の実施例が、より遅いプロセッサ又は他の処理負荷を具えたシステムに関するハードウェアでのさらなる処理を提供し得る。ある実施例では、同じＡＰＩ層５６を使用して、アプリケーションプログラムに得られる高レベルの情報を提供することができ、任意のシステムへの最大限の移植性が可能となる。
【００７８】
図８Ａは、バッファリングを与えて動作検出出力を受け取る際にアプリケーションプロセッサの処理を減らすための、本発明の第１の方法４００を示すフローチャートである。方法４００は、ハードウェアバッファリングを使用し、アプリケーションプロセッサ１２が検出データを取得する際にそのタイミング制約を緩和し得る。
【００７９】
本方法は４０２で開始し、ステップ４０４で、ＭＰＵ２０が高速で動作センサデータをサンプリングし、ハードウェアバッファに検出データを記録する。例えば、ハードウェアバッファは、図１に示すようなＭＰＵ２０のハードウェア処理ブロック３０、又はデバイス１０の様々に接続されたハードウェアとすることができる。ＭＰＵは、特定のアプリケーションに関して動作データを取得するために通常要される高速且つ正確なタイミングで検出データをサンプリングする。
【００８０】
ステップ４０６で、アプリケーションプロセッサ１２は、プロセッサ１２がＭＰＵよりも低速でハードウェアバッファ（及び検出データ）をサンプリングして検出データを記録する場合、最後にバッファを読み込む時からハードウェアバッファに蓄えられた全ての検出データを読み込む。プロセッサは、ハードウェアバッファのこれら全ての検出データポイントを一度に読み込む。
【００８１】
ステップ４０８で、検索された複数の検出データポイントに基づいて、立て続けに動作アルゴリズムを更新し、低いサンプリングレートでアプリケーションプログラムにアルゴリズムを与える。これは、要求される低いサンプリングレートでアプリケーションプログラムに情報を与える。そして、このような処理がステップ４０４に戻る。
【００８２】
バッファ内の検出データの蓄積により、アプリケーションプロセッサ１２のアプリケーションプログラムが、動作情報の喪失なしに、ＭＰＵからのデータのサンプリングに関するタイミング制約を緩和させる。例えば、ＭＰＵハードウェアは、１００Ｈｚの高速でバッファに検出データを記録し得る。アプリケーションプロセッサ１２のアプリケーションプログラムは、わずか１０Ｈｚのサンプリングレートでの動作に基づいてディスプレイスクリーンの更新を必要とする。方法４００を用いて、動作アルゴリズムが、１０Ｈｚの速さで一度にＭＰＵバッファに記憶された全てのデータを読み込み得る。このため、１０のデータ点がバッファにある場合、動作アルゴリズムを立て続けに１０回更新し、動作アルゴリズムによるディスプレイ情報出力が、事実上１０Ｈｚでアプリケーションプログラムに与えられる。これにより、例えば１０Ｈｚの速さ（ディスプレイのリフレッシュ速度）で、必要な場合にのみ、アプリケーションプロセッサ１２がバッファを読み込むことができ、これにより、プロセッサ１２のトータルの処理時間を減らす。動作アルゴリズムは、受け取った動作データの全てのデータ点を用いて平均してより高速で依然として動作するため、このような減少は、大規模でなくともよい。
【００８３】
図８Ｂは、バッファリングを与えて動作検出出力を受け取る際にアプリケーションプロセッサの処理を減らすための、本発明の第２の方法４２０を示すフローチャートである。方法４２０は、ソフトウェアバッファリングを使用し、アプリケーションプロセッサ１２が検出データを取得する際のそのタイミング制約を緩和させ得る。
【００８４】
本方法は４２２で開始し、ステップ４２４で割り込みルーチンが高速で動作センサデータをサンプリングする。割り込みルーチンは、アプリケーションプロセッサ１２上で動作するソフトウェアルーチンであり、例えば、アルゴリズム層６０で提供し得る。割り込みルーチンは、高速で且つ通常要する正確及び厳密なタイミングでＭＰＵ２０から検出データをサンプリングし、アプリケーションに適した動作データを取得する。ステップ４２６で、割り込みルーチンが、データを処理することなしに、ステップ４２４でソフトウェアバッファに読み込まれたデータを記憶する。例えば、ソフトウェアバッファは、アプリケーションプロセッサにアクセス可能なメモリであり、アプリケーションプロセッサ１２（レジスタ、ＲＡＭ等）、デバイス１０のメモリ１４、又は他の使用可能なメモリに提供し得る。
【００８５】
ステップ４２８で、割り込みルーチンがプロセッサ１２に割り込んで、読み込むべき十分な検出データを蓄えていることを示す。ステップ４３０で、アプリケーションプロセッサ１２（例えば、動作アルゴリズム）が、バッファを読み込んだ最後の時からソフトウェアバッファに蓄えられた全ての検出データを読み込む。このため、プロセッサ１２は、検出データをサンプリン且つ記憶するのに使用される割り込みルーチンよりも低速で検出データを読み込む。ステップ４３２で、検索された複数の検出データ点に基づいて、動作アルゴリズムを立て続けに更新し、より低いサンプリングレートでアプリケーションプログラムにアルゴリズムの最終出力を与える。これにより、必要とされるより低いサンプリングレートでアプリケーションプログラムに情報を与える。そして、このような処理がステップ４２４に戻る。
【００８６】
図８Ａのハードウェアバッファの実施例を具えることで、バッファ内の検出データの蓄積により、何らかの動作情報の喪失なしに、アプリケーションプロセッサ１２がアプリケーションプログラムの出力に関するそのタイミング制約を緩和させ得る。例えば、割り込みルーチンタイムは、１００Ｈｚの高速でバッファに検出データをサンプリング且つ記憶し得るが、アプリケーションプログラム１２はソフトウェアバッファに記憶された全てのデータを緩和された速さで一度に読み込み得る。このため、１０Ｈｚのサンプリングレートで、アプリケーションプロセッサがバッファ内の直近の１０データ点を検索することができ、立て続けに１０回ほど動作アルゴリズムを処理し、ディスプレイアプリケーションプログラムが１０Ｈｚでアルゴリズムから適切な情報を検索することができ、１０Ｈｚでその出力を与える。
【００８７】
図８Ｃは、バッファリングを提供して動作検出出力を受け取る際のアプリケーションプロセッサの処理を減らすための、本発明の第３の方法４５０を示すフローチャートである。方法４５０は、ハードウェア割り込みを使用し、アプリケーションプロセッサ１２が検出データを取得する際のそのタイミング制約を減らし得る。
【００８８】
本方法は４５２で開始し、ステップ４５４でＭＰＵ２０が検出データを検索し、検出データがバッファに記憶される。このようなサンプリングは、高速で且つ通常要する正確及び厳密なタイミングで実行され、動作センサデータを取得する。ハードウェアバッファに又はソフトウェアバッファに検出データを記憶し得る。
【００８９】
ステップ４５６で、ＭＰＵがバッファリングされた検出データをスキャンする。ステップ４５８で、ＭＰＵが、何らかの「関心のある」特性がスキャンされた検出データの中に検出されたか否かをチェックする。このような特性は、特定のアルゴリズム又はアプリケーションをアプリケーションプロセッサ１２に報知するように、特定のアルゴリズム又はアプリケーションに関連するデータのパターン又は態様である。例えば、このような特性は、超えている所定の閾値、又は特定の動作タイプを示すデータのパターンを含め得る。例えば、ユーザによってジェスチャが行われる場合に、少なくとも１の検出センサについての閾値を超える可能性がある。あるいは、デバイス１０のカメラのレンズ部分のジッタのレベルを示す特定の閾値が超える可能性がある。ステップ４５８でＭＰＵによって関心のある特性が検出されない場合、処理がステップ４５４に戻る。
【００９０】
１又はそれ以上の関心のある特性が検出された場合、ステップ４６０でＭＰＵがアプリケーションプロセッサに割り込みを送信する。このような割り込みは、関心のある特性が検出されアプリケーションプロセッサによって検査すべきであることを、アプリケーションプロセッサに示すものである。このため、ステップ４６２で、アプリケーションプロセッサ１２がバッファに記憶された検出された関心のある特性を含むデータを検索するが、例えば、ＭＰＵが、プロセッサ１２が読み込み得る様々なバッファ又はバッファの他の領域の関心のある特性データをバッファリングすることができ、又はＭＰＵがメインバッファで読み込む場所を指定し得る。そして、例えば、アルゴリズム層６０のアルゴリズムでデータを処理して減少したサンプリングレートでアプリケーションプログラムにＡＰＩ層５６を介してデータを与えることによって、アプリケーションプロセッサ１２が、アプリケーションに適合するように検索データを分析する。そして、このような処理がステップ４５４に戻る。
【００９１】
検索データの特定の特性をチェックするためのＭＰＵハードウェアの使用は、アプリケーションプロセッサの処理オーバーヘッドを減らし得る。１秒当たり５回の関心のある特性の検出といったことで、ＭＰＵが高速でアプリケーションプロセッサに割り込みを送信したとしても、アプリケーション処理の回数を依然として減らし、アプリケーションプログラム処理は１００Ｈｚから５Ｈｚに動作する必要がある。このような実施例では、アプリケーションプログラム１２に関する全てのソフトウェアについてのタイミング制約が減り、これにより、プロセッサ１２の処理時間もまた減少する。
【００９２】
図８Ｄは、バッファリングを与えて動作検出出力を受け取る際のアプリケーションプロセッサの処理を減らすための、本発明の第４の方法を示すフローチャートである。方法４７０は、ハードウェア予処理のより進んだ方法を使用し、アプリケーションプロセッサ１２が検出データを取得する際のそのタイミング制約を減らし得る。
【００９３】
本方法は４７２で開始し、ステップ４７４でＭＰＵ２０が検出データを検索し、検出データがＭＰＵのハードウェアバッファといったバッファに記憶される。このようなデータは、高速で且つ通常要する正確なタイミングでサンプリング且つ記憶され、動作センサデータを取得する。ステップ４７６で、ＭＰＵが検出データを予処理して、１又はそれ以上のアプリケーションについての関連する態様のセットにデータを減らす。ＭＰＵは、アプリケーションプロセッサソフトウェアの動作アルゴリズム層６０に存在する動作アルゴリズムと同じような動作アルゴリズム又は動作アルゴリズムのサブセットを含め得る。例えば、ある実施例では、ＭＰＵは検出データを処理することによって、特定のジェスチャを検出し得る。このような処理能力により、どの態様がアプリケーションプロセッサ１２で動作するアプリケーションに関連するのかを判断することができ、及び／又はアプリケーションプログラムに関する高レベルの情報を与え得る。例えば、関連する態様は、慣性データの微分値又は積分値から計算されるパラメータとすることができる。
【００９４】
ステップ４７８で、関連する態様のセットが、動作センサデータを取得するのに使用されるサンプリングレートよりも低いサンプリングレートでアプリケーションプロセッサ１２のアプリケーションに与えられる。このため、例えば、検出データを取得するための１００Ｈｚのサンプリングレートを、アプリケーションプロセッサに関連する情報のみを与える５Ｈｚのサンプリングレートに減らすことができる。そして、減少したサンプリングレートで関連する態様をアプリケーションプログラムに（又は減少したサンプリングレートでアプリケーションプログラムに情報を与える、さらなる処理のためのアプリケーション動作アルゴリズムに）与え得る。図８Ｃの実施例と同じように、本実施例では、アプリケーションプロセッサ１２の全てのソフトウェアについてタイミング制約が減少し、これにより、プロセッサ１２の処理時間もまた減少する。
【００９５】
図示する実施例で本発明を説明したが、これらの実施例に対するバリエーションが可能であり、これらのバリエーションは本発明の精神及び範囲から逸脱するものではないことを当業者は容易に理解するであろう。従って、当業者は、添付の特許請求の範囲の精神及び範囲から逸脱せずに多くの改良を行い得る。
【図１】
2011510401.tif 000003
【図２】
2011510401.tif 000004
【図３】
2011510401.tif 000005
【図４】
2011510401.tif 000006
【図５】
2011510401.tif 000007
【図６】
2011510401.tif 000008
【図７】
2011510401.tif 000009
【図８Ａ】
2011510401.tif 000010
【図８Ｂ】
2011510401.tif 000011
【図８Ｃ】
2011510401.tif 000012
【図８Ｄ】
2011510401.tif 000013
【国際調査報告】
2011510401.tif 000014