以下、図面に基づいて、本願の開示する情報処理装置、情報処理プログラム及び情報処理方法の実施例を詳細に説明する。尚、本実施例により、開示技術が限定されるものではない。また、以下に示す各実施例は、矛盾を起こさない範囲で適宜組み合わせても良い。
図1は、実施例1の情報処理装置の一例を示すブロック図である。図1に示す情報処理装置1は、例えば、慣性センサを内蔵した携帯電話機等の携帯端末である。情報処理装置1は、通信部11と、加速度センサ12と、角速度センサ13と、操作部14と、表示部15と、ワークメモリ16と、プログラム領域17と、メモリストレージ18と、MCU(Micro Controller Unit)19とを有する。
通信部11は、例えば、無線通信を司るインタフェースである。加速度センサ12は、例えば、x軸、y軸及びz軸の3軸の加速度Sを検出するセンサ等の加速度検出部である。角速度センサ13は、例えば、3軸の角速度Gを検出するセンサ等の角速度検出部である。操作部14は、コマンド等の各種情報を入力する。表示部15は、各種情報を表示出力する。ワークメモリ16は、演算に使用するメモリ領域である。プログラム領域17は、各種プログラムが格納された記憶部である。メモリストレージ18は、例えば、一定期間のセンサ情報等の各種情報を記憶する領域である。MCU19は、情報処理装置1全体を制御するプロセッサである。
図2A〜Eは、情報処理装置1を装着した人体のリンクモデルの一例を示す説明図である。例えば、前屈運動、側屈運動やひねり運動等の運動軌跡を演算する場合、利用者の正面胸部に情報処理装置1を装着する。図2Aに示すように、原点を人体の背骨101の腰関節102付近とし、x軸を人体の左手方向、y軸を人体の頭頂方向、z軸を人体の前方方向に設定する。
図2Bの前屈運動は、x軸回りの回転φxが主たる動きである。尚、x軸回りの回転φxは、人体の前方向への傾き度合を示す。図2Cの側屈運動は、z軸回りの回転φzが主な動きである。z軸回りの回転φzは、人体の直立した姿勢から真横に人体を倒す度合を示す。人体が左右対称の場合、z軸回りの回転角の正の方向(人体を直立させたときの回転角を0とした場合、回転角が正の値となる方向)と負の方向(回転角が負の値となる方向)との最大値が略一致する。図2Dのひねり運動は、y軸回りの回転φyが主な動きである。尚、y軸回りの回転φyは、人体のひねり度合を示す。
この際、情報処理装置1の位置と背骨101の位置との間の距離をd1、腰関節102の位置と背骨101の位置との間の距離をh1とした場合、正面胸部に設置された情報処理装置1の初期位置は(0、h1、d1)Tである。尚、情報処理装置1の位置は、情報処理装置1の任意の点の位置である。
また、図2Eに示す足踏み運動の軌跡を演算する場合、利用者の腰関節102付近に情報処理装置1を装着する。この際、情報処理装置1の位置と腰関節102の位置との間の距離をd2、腰関節102と繋がる背骨101の位置と、足首の関節103と繋がる脚骨104の位置との間の距離をh2とした場合、腰関節102付近に装着された情報処理装置1の初期位置は(0、h2、−d2)Tである。
また、MCU19は、角速度センサ13で検出された角速度Gの二乗和pに基づき運動区間Tpを算出する。図3は、角速度の二乗和と時間との関係に基づき運動区間を特定する際の一例を示す説明図である。MCU19は、角速度Gの二乗和pが所定閾値αを超えた時刻を運動区間の開始時刻(始点)T0とする。また、MCU19は、角速度Gの二乗和pが所定閾値α以下のまま、所定時間T1を経過した場合、所定閾値α以下になった時点を運動区間の終了時刻(終点)Tnとする。その結果、MCU19は、始点T0及び終点Tnで運動区間Tpを特定する。
図4は、情報処理装置1の位置座標の一例を示す説明図である。加速度センサ12で検出される加速度Siは、(ax,ay,az)で表現する。角速度センサ13で検出される角速度Giは、(gx、gy、gz)で表現する。
また、プログラム領域17に格納される演算処理には、後述する、第1の演算処理と、第2の演算処理と、第3の演算処理とがある。第1の演算処理は、運動区間を確定し、確定された運動区間内の加速度S及び角速度Gに基づき、往復運動(始点=終点)の運動区間内の運動軌跡を算出する往復運動に適した第1の射的法の演算処理である。第2の演算処理は、始点から角速度Gに基づき推定された終点までの運動区間を確定し、確定された運動区間内の加速度S及び角速度Gに基づき、片道運動(始点≠終点)の運動区間内の運動軌跡を算出する片道運動に適した第2の射的法の演算処理である。第3の演算処理は、始点から加速度S及び角速度Gに基づき運動軌跡を算出するフィードバック積分の演算処理である。
また、図1に示すMCU19は、第1判定部21と、第2判定部22と、第3判定部23と、選択部24と、制御部25とを有する。MCU19は、加速度センサ12及び角速度センサ13の検出結果に基づき運動区間Tpを算出する。
第1判定部21は、運動区間Tp内の始点から運動時間が第1の経過時間Tx1を超えたか否かを判定する。尚、第1の経過時間Tx1は、例えば、1.5秒である。第2判定部22は、運動時間が第2の経過時間Tx2を超えたか否かを判定する。尚、第2の経過時間Tx2は、例えば、5秒である。第3判定部23は、運動区間Tpの始点及び終点が同一、すなわち始点の重力加速度ベクトルGr1及び終点の重力加速度ベクトルGr2が同一の往復運動であるか否かを判定する。
選択部24は、運動時間が第1の経過時間Tx1を超えてない場合、かつ、運動区間Tpの始点及び終点が同一の往復運動の場合、第1の演算処理を選択する。選択部24は、運動時間が第1の経過時間Tx1を超え、かつ、運動時間が第2の経過時間Tx2を超えてない場合、第2の演算処理を選択する。更に、選択部24は、運動時間が第1の経過時間Tx1を超えず、かつ、往復運動でない場合には、第2の演算処理を選択する。また、選択部24は、運動時間が第2の経過時間Tx2を超えた場合、第3の演算処理を選択する。
制御部25は、選択部24によって選択された演算処理に基づき、運動区間内の運動軌跡を算出する。
次に情報処理装置1の動作について説明する。軌跡演算は、微小時間T毎に取得された角速度G及び加速度SをT毎の姿勢R及び位置Pに変換する演算である。T毎に更新される時刻Tは、0、T、2T、3T…と離散的な値である。添え字iを用いて、時刻i・Tの角速度をGi=(gx,gy,gz)T、加速度をSi=(ax,ay,az)T、情報処理装置1の姿勢をRi、情報処理装置1の位置をPi=(x,y,z)Tと表現する。尚、姿勢Riは、ピッチ、ロール及びヨーと呼ばれる三つの角度で表現し、計算の便宜上、ローカル座標をグローバル座標に変換して3×3の回転行列と考える。また、グローバル座標は、情報処理装置1を装着した人の空間の絶対座標であるのに対し、ローカル座標は、情報処理装置1自体に固定された座標である。
図5は、第1の演算処理及び第2の演算処理に関わるMCU19の処理動作の一例を示すフローチャートである。尚、運動区間をi=0,1,2,3…nで表現し、始点をi=0、終点をi=nとした場合、始点の姿勢をR0=I、終点の姿勢をRn=RN、始点の速度をV0=0、終点の速度をVn=VN、始点の位置をP0=0、終点の位置をPn=PNとする。第1の演算処理で使用する第1の射的法は、終点の姿勢RN、速度VN及び位置PNが、始点の姿勢R0、速度V0及び位置P0と等しく、姿勢R0及びRNがI、速度V0及びVNが0、位置P0及びPNが0である往復運動を対象とする。これに対して、第2の演算処理で使用する第2の射的法は、片道運動を対象とし、運動区間の終点の姿勢Rn、速度Vn及び位置Pnを角速度Gnに基づき推定する。
図5においてMCU19の制御部25は、加速度センサ12の検出結果である加速度S=(ax,ay,az)Tの時系列データ及び角速度センサ13の検出結果である角速度G=(gx,gy,gz)Tの時系列データを収集する(ステップS11)。
制御部25は、収集された加速度S及び角速度Gの時系列データから運動区間に対応した加速度S0〜Sn及び角速度G0〜Gnを抽出する(ステップS12)。そして、制御部25は、運動区間に基づき、終点の姿勢RN、速度VN及び位置PNを決定する(ステップS13)。尚、往復運動の場合、始点及び終点が同一値であるため、終点の姿勢RNはI、終点の速度VNは0、終点の位置PNは0である。これに対して、片道運動の場合、始点及び終点が同一値でないため、終点の姿勢RN、速度VN及び位置PNが角速度Gnに基づき推定する。
制御部25は、始点の姿勢R0をI、始点の速度V0を0、始点の位置P0を0に決定する(ステップS14)。制御部25は、オフセット量o=0に設定し(ステップS15)、ループカウンタの値i=1に設定する(ステップS16)。制御部25は、RS=Ri-1・(Gi−o)に基づき絶対座標の回転速度RSを算出する(ステップS17)。
制御部25は、dR=Ri-1×RSで微分値を算出する(ステップS18)。尚、Ri-1は、(ωxT,ωyT,ωzT)とした場合、ωは1×3行列であるため、例えば、dR=((ωx×RS)T,(ωy×RS)T,(ωz×RS)T)となる。そして、制御部25は、微分値dRを時間について積分し、Ri=Ri-1+∫dRdtに基づき姿勢Riを算出する(ステップS19)。
制御部25は、ループカウンタの値iを+1インクリメントし(ステップS20)、ループカウンタの値iがnを超えたか否かを判定する(ステップS21)。尚、ステップS16〜ステップS20までの処理は、姿勢Riを積分する処理である。
制御部25は、値iがnを超えていない場合(ステップS21否定)、回転速度RSを算出すべく、ステップS17に移行する。また、制御部25は、値iがnを超えた場合(ステップS21肯定)、1回目であるか否かを判定する(ステップS22)。
制御部25は、1回目の場合(ステップS22肯定)、RR=RN-1×Rnに基づき、積分値と理想値との誤差RRを算出する(ステップS23)。尚、RN-1とRnとの積RRは、理想的には単位行列になる。しかし、実際には、センサのドリフト等でRRは単位行列にはならず、積分値の誤差、つまり、重力の変化から得られた運動前後の姿勢の変化とセンサを積分して得られた姿勢の変化との間にズレが生じる。従って、射的法では、RRが単位行列となる角速度センサ13のオフセット値oを求める。つまり、誤差RRは、姿勢のズレを示し、姿勢変化RRから回転ベクトル(回転軸)Qと、その変化量である回転量θとを算出する際、回転量θが発生しないようにオフセット値oを求める。
制御部25は、誤差RRに基づき、RRの回転ベクトルQ及び回転量θを算出する(ステップS24)。尚、誤差RRは、回転行列のため3×3行列である。その要素を回転行列の第1段目の横行列をr11、r12及びr13、第2段目の横行列をr21、r22及びr23、第3段目の横行列をr31、r32及びr33とした場合、回転ベクトルは、Q=(r23−r32、r31−r13、r12−r21)Tとなる。更に、その回転量は、θ=cos-1((r11+r22+r33−1)/2)となる。
制御部25は、o=θ/Qdtに基づき、姿勢Rのオフセット量oを算出し(ステップS25)、算出されたオフセット量oをRS=Ri-1・(Gi−o)に代入して回転速度RSを算出すべく、ステップS16を経てステップS17に移行する。その結果、ループカウンタの値iがnを超えた2回目以降は、オフセット量oの代入に応じて誤差RRの回転量θが0となるため、誤差RRが単位行列となる。
制御部25は、1回目でない場合(ステップS22否定)、すなわち2回目以降は誤差RRが単位行列のため、オフセット量o=0に設定し(ステップS26)、ループカウンタの値i=1に設定する(ステップS27)。尚、制御部25は、説明の便宜上、1回目の処理で姿勢RRのオフセット量oが「0」にみなせるものとした。しかしながら、ステップS25のθ/Qdtに「1」よりも小さい正の数をかけ、オフセット量oが「0」とみなされるまで、ステップS16〜ステップS25の処理動作を繰り返す方法もあり得る。制御部25は、Ai=Ri×Si−oに基づき絶対座標上の加速度Aiを算出する(ステップS28)。
制御部25は、加速度Aiを時間で積分して、Vi=Vi-1+∫Aidtに基づき、絶対座標上の速度Viを算出する(ステップS29)。制御部25は、ループカウンタの値iを+1インクリメントし(ステップS30)、値iがnを超えたか否かを判定する(ステップS31)。制御部25は、値iがnを超えなかった場合(ステップS31否定)、値iの加速度Aiを算出すべく、ステップS28に移行する。制御部25は、値iがnを超えた場合(ステップS31肯定)、1回目であるか否かを判定する(ステップS32)。
制御部25は、1回目の場合(ステップS32肯定)、o=(Vn−VN)/dtに基づき、速度Vのオフセット量oを算出し(ステップS33)、値i=1に設定すべく、ステップS27に移行する。
また、制御部25は、1回目でない場合(ステップS32否定)、すなわち2回目以降はオフセット量o=0に設定し(ステップS34)、値i=1に設定する(ステップS35)。尚、制御部25は、説明の便宜上、1回目の演算処理で速度Viのオフセット量oが0になるものとする。
制御部25は、V=Vi−oに基づき速度Vを算出する(ステップS36)。制御部25は、速度Vを時間で積分し、Pi=Pi-1+∫Vdtに基づき、絶対座標上の位置Piを算出する(ステップS37)。制御部25は、ループカウンタの値iを+1インクリメントし(ステップS38)、値iがnを超えたか否かを判定する(ステップS39)。制御部25は、値iがnを超えなかった場合(ステップS39否定)、速度Vを算出すべく、ステップS36に移行する。制御部25は、値iがnを超えた場合(ステップS39肯定)、1回目であるか否かを判定する(ステップS40)。
制御部25は、1回目の場合(ステップS40肯定)、o=(Pn−PN)/dtに基づき、位置Pのオフセット量oを算出し(ステップS41A)、ループカウンタの値i=1に設定すべく、ステップS35に移行する。制御部25は、1回目でない場合(ステップS40否定)、すなわち2回目以降は、図5に示す処理動作を終了する。尚、制御部25は、説明の便宜上、1回目の演算処理で位置Piのオフセット量oが0になるものとする。
第1の演算処理では、運動区間内の始点及び終点が同一と捉え、加速度S及び角速度Gに基づき姿勢Rを算出し、算出された姿勢Rに基づき速度Vを算出し、算出された速度Vに基づき位置Pを算出する。その結果、往復運動の姿勢R及び位置Pに基づき運動区間内の運動軌跡を算出できる。
第2の演算処理では、運動区間内の終点を角速度Gnで推定し、加速度S及び角速度Gに基づき姿勢Rを算出し、算出された姿勢Rに基づき速度Vを算出し、算出された速度Vに基づき位置Pを算出する。その結果、片道運動の姿勢R及び位置Pに基づき運動区間内の運動軌跡を算出できる。尚、第2の演算処理では、運動区間の往路及び復路を区分して片道分の射的法を適用するため、積分しなければならない時間が往復の半分で済み、正しい演算結果が得られる。
また、制御部25は、第3の演算処理を実行する演算処理部25Aを有する。図6は、第3の演算処理に関わる演算処理部25Aの動作の一例を示す説明図である。図6に示す演算処理部25AのLPF(Low Pass Filter)31は、加速度センサ12で検出された加速度S=(ax,ay,az)Tにフィルタ処理を施して重力加速度ベクトルSgを算出する。
演算処理部25Aの第1の回転行列変換部32は、重力加速度ベクトルSgを、ローカル座標から重力方向をy軸とする絶対座標系に変換して回転行列Rgを求める。更に、逆行列変換部33は、回転行列Rgを逆行列(転置行列)RgTに変換する。尚、重力方向の二次元座標からRgTという三次元情報に変換するには情報を一次元に落とす必要がある。今回、運動の軌跡を求める場合、y軸回りで回転しないものとする。
更に、演算処理部25Aの姿勢メモリ34は、回転行列Ri(i=0〜n)の時系列データを格納する。演算処理部25Aの第1の演算部35は、逆行列変換部33の逆行列RgTと、姿勢メモリ34内の回転行列Rとの積で、誤差RRを算出する。ベクトル演算部35Aは、誤差RRから回転軸の回転ベクトルQ及び、その変化量である回転量θを算出する。
演算処理部25Aの第1ゲイン部36は、回転ベクトルQ及び回転量θの積に定数Krをゲイン調整することでオフセット量KrQθを算出する。また、演算処理部25Aの第2の演算部37は、姿勢メモリ34内の回転行列Ri及び、角速度センサ13の検出結果である角速度Giに基づき回転速度RSを算出する。更に、演算処理部25Aの第3の演算部38は、回転速度RSからオフセット量KrQθを減算し、減算結果の回転速度RSを外積演算部39に入力する。外積演算部39は、回転速度RSと前回の姿勢(回転行列)Ri-1とでベクトルの微分値dRを得る。
演算処理部25Aの姿勢積分部40は、ベクトルの微分値dRの積分値∫dRdtを算出する。更に、演算処理部25Aの第4の演算部41は、前回の姿勢(回転行列)Ri-1と積分値∫dRdtとを加算して姿勢Riを算出し、算出した姿勢Riを姿勢メモリ34に更新する。
第5の演算部42A及び第6の演算部42Bは、運動の回転中心から見た情報処理装置1の位置X=(x,y,z)Tと、姿勢メモリ34からの姿勢RXとに基づきXx=RX−Xの演算で、運動開始時点を原点とした場合のリンクモデルの移動量Xxを求める。尚、情報処理装置1の位置Xはメモリ42Cに格納されているものとする。演算処理部25Aの第7の演算部43は、移動量Xxと現在位置メモリ44の現在位置Pとに基づき、Px=P−Xxで位置Pの誤差Pxを算出する。演算処理部25Aの第8の演算部45は、Zにdt(RTPx)を加算することでZを更新する。
演算処理部25Aの第2ゲイン部46は、Zに対して定数Kiを積分ゲインしてKi・Zを得る。演算処理部25Aの第9の演算部47は、S−Ki・Zを算出する。演算処理部25Aの第10の演算部48は、姿勢メモリ34からの回転行列Rと、第9の演算部47からS−Ki・Zとに基づき、R(S−Ki・Z)を算出する。
演算処理部25Aの第3ゲイン部49は、第7の演算部43からの誤差Pxに定数Kpを比例ゲインとしてPx・Kpを算出する。演算処理部25Aの第11の演算部50は、第3ゲイン部49からのPx・Kpと、第10の演算部48からのS−Ki・Zとに基づき、R(S−Ki・Z)−Kp・Pxを算出する。更に、演算処理部25Aの第4ゲイン部51は、現在速度メモリ52で得た速度Vに対して定数Kdを微分ゲインしてKd・Vを算出する。更に、演算処理部25Aの第12の演算部53は、R(S−Ki・Z)−Kp・Px−Kd・Vに基づき、加速度Aを算出する。尚、Kiは積分ゲインの定数,Kdは微分ゲインの定数,Kpは比例ゲインの定数である。R・Sは、例えば、HPF(High Pass Filter)で重力加速度成分を除去しても良い。
演算処理部25Aの第13の演算部54は、速度V及び加速度Aの積分値∫AdtのVi=V+∫Adtに基づき、現在の速度Viを算出し、算出された現在の速度Viを現在速度メモリ52に格納する。演算処理部25Aの第14の演算部55は、現在位置P及び速度Vの積分値∫VdtのPi=P+∫Vdtに基づき、現在の位置Piを算出し、算出された現在のPiを現在位置メモリ44に格納する。
第3の演算処理では、第2の演算処理に比較して長時間の運動軌跡に対応し、現在姿勢Ri及び現在位置Piに基づき運動軌跡を演算できる。また、第3の演算処理では、微分ゲインKdを設けることで比例ゲインKpが大きくできるため、その分、収束を速めることができる。また、第3の演算処理では、積分ゲインKiを設けることで、重力の影響や加速度センサ12の零点ドリフトを抑制できる。
図7は、最適演算処理に関わるMCU19の処理動作の一例を示すフローチャートである。図7に示す最適演算処理は、運動区間の時間及び条件に応じて第1の演算処理、第2の演算処理又は第3の演算処理を実行する処理である。尚、演算精度は、第1の演算処理が一番高く、第2の演算処理が二番目に高く、第3の演算処理が三番目に高い。また、第1の演算処理は、例えば、Tp<1.5秒の運動区間に適し、第2の演算処理は、例えば、1.5秒≦Tp<5秒の運動区間に適し、第3の演算処理は、例えば、5秒≦Tpの運動区間に適している。
MCU19は、加速度センサ12の検出結果である加速度Sにローパスフィルタ処理を施すことで、重力加速度ベクトルGr1を算出すると共に、角速度センサ13の検出結果である角速度Gの二乗和pを算出する(ステップS41)。
MCU19は、二乗和pが所定閾値αを超えた(p>α)か否かを判定する(ステップS42)。MCU19は、二乗和pが所定閾値αを超えた場合(ステップS42肯定)、運動時間の現在時刻を運動区間の開始時刻とする(ステップS43)。
MCU19は、サンプリング時間をt=0に設定し(ステップS44)、加速度S及び角速度Gを抽出し(ステップS45A)、角速度Gの二乗和pを算出する(ステップS45)。MCU19は、角速度Gの二乗和pが所定閾値αを超えたか否かを判定する(ステップS46)。MCU19は、二乗和pが所定閾値αを超えた場合(ステップS46肯定)、サンプリング時間をt=0に設定すべく、ステップS44に移行する。
また、MCU19は、二乗和pが所定閾値αを超えていない場合(ステップS46否定)、サンプリング時間t=0であるか否かを判定する(ステップS47)。MCU19は、サンプリング時間t=0の場合(ステップS47肯定)、現在時刻を運動区間の終了時刻とする(ステップS48)。
MCU19は、終了時刻の重力加速度ベクトルGr2を算出し(ステップS49)、終了時刻からのサンプリング時間tの計時動作を開始し(ステップS50)、サンプリング時間tが所定時間T1以上であるか否かを判定する(ステップS51)。
MCU19は、サンプリング時間tが所定時間T1以上でない場合(ステップS51否定)、現時点の加速度S及び角速度Gを抽出すべく、ステップS45Aに移行する。また、MCU19は、サンプリング時間tが所定時間T1以上の場合(ステップS51肯定)、終了時刻Ts−開始時刻Teに基づき運動区間Tpを算出する(ステップS52)。
MCU19の第1判定部21は、運動区間Tpが第1の経過時間Tx1、例えば、1.5秒を超えた(Tp>1.5秒)か否かを判定する(ステップS53)。第1判定部21は、運動区間Tpが1.5秒を超えていない場合(ステップS53否定)、重力加速度ベクトルGr1と重力加速度ベクトルGr2とがほぼ同一であるか否かを判定する(ステップS54)。
MCU19の制御部25は、重力加速度ベクトルGr1と重力加速度ベクトルGr2とがほぼ同一の場合(ステップS54肯定)、往復運動のため、第1の演算処理を選択して実行し(ステップS55)、図7に示す処理動作を終了する。
また、MCU19の第2判定部22は、運動区間Tpが1.5秒を超えた場合(ステップS53肯定)、又は、重力加速度ベクトルGr1と重力加速度ベクトルGr2とが同一でない場合(ステップS54否定)、運動区間Tpが第2の経過時間Tx2、例えば、5秒以上(Tp≧5秒)か否かを判定する(ステップS56)。
制御部25は、運動区間Tpが5秒以上でない場合(ステップS56否定)、第2の演算処理を選択して実行し(ステップS57)、図7に示す処理動作を終了する。
また、制御部25は、運動区間Tpが5秒以上の場合(ステップS56肯定)、第3の演算処理を選択して実行し(ステップS58)、図7に示す処理動作を終了する。
運動区間が1.5秒を超えず、かつ、運動区間内の始点の重力加速度ベクトルGr1及び終点の重力加速度ベクトルGr2が同一の場合、往復運動に適した第1の演算処理を実行する。また、運動区間が5秒を超えず、かつ、運動区間内の始点の重力加速度ベクトルGr1及び終点の重力加速度ベクトルGr2が異なる場合、片道運動に適した第2の演算処理を実行する。また、運動区間が5秒以上の場合、第3の演算処理を実行する。
実施例1では、運動区間Tpが1.5秒を超えず、かつ、運動区間内の始点及び終点が同一の往復運動の場合、第1の演算処理を実行する。その結果、情報処理装置1では、例えば、1.5秒未満の往復運動の運動軌跡を高精度に演算できる。
また、実施例1では、運動区間Tpが1.5秒を超えず、かつ、運動区間の始点及び終点が異なる片道運動の場合、又は、運動区間Tpが5秒以上でない場合、第2の演算処理を実行する。その結果、情報処理装置1では、例えば、1.5秒≦Tp<5秒の運動軌跡を高精度に演算できる。
また、実施例1では、運動区間Tpが5秒以上の場合、第3の演算処理を実行する。その結果、情報処理装置1では、例えば、5秒以上の長時間の運動軌跡を演算できる。
実施例1では、運動区間の時間及び条件に応じて最適な演算処理を選択して実行する。その結果、利用者の時間及び条件に応じた正確な運動軌跡が得られる。
尚、上記実施例1では、第1の演算処理〜第3の演算処理を区別する閾値として、例えば、1.5秒及び5秒を設定したが、これら数値に限定されるものではなく、適宜変更可能である。
また、側屈運動やひねり運動等の運動では、右方向の片道運動及び左方向の片道運動が連続し、右方向の片道運動が1.49秒、左方向の片道運動が1.5秒の場合がある。この場合、MCU19は、右方向の片道運動で第1の演算処理を選択し、左方向の片道運動で第2の演算処理を選択する。従って、0.01秒の差しかないにもかかわらず、右方向の片道運動及び左方向の片道運動で異なる演算処理を使用することになる。
そこで、このような事態に対処した実施の形態につき、実施例3として以下に説明する。図9は、実施例3の情報処理装置1Aの一例を示すブロック図である。尚、図1に示す情報処理装置1と同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。図9に示す情報処理装置1AのMCU19は、第4判定部26と、第5判定部27と、第6判定部28と、第7判定部29とを有する。
第4判定部26は、運動区間Tpが第3の経過時間Tx3、例えば1.3秒未満、Tp<1.3秒か否かを判定する。第5判定部27は、運動区間Tpが第3の経過時間Tx3と第4の経過時間Tx4、例えば、1.7秒との間の第1の中間時間帯、例えば、1.3秒≦Tp<1.7秒であるか否かを判定する。
第6判定部28は、運動区間Tpが第4の経過時間Tx4と、第4の経過時間Tx4を超えた第5の経過時間Tx5、例えば、4.8秒との間の第2の中間時間帯、例えば、1.7秒≦Tp<4.8秒であるか否かを判定する。第7判定部29は、運動区間Tpが第5の経過時間Tx5と、第5の経過時間Tx5を超えた第6の経過時間Tx6、例えば、5.2秒との間の第3の中間時間帯、例えば、4.8秒≦Tp<5.2秒であるか否かを判定する。
選択部24は、運動区間Tp内の始点及び終点が同一、かつ、運動区間TpがTp<1.3秒の場合、第1の演算処理を選択する。選択部24は、運動区間Tp内の始点及び終点が同一、かつ、運動区間Tpが1.3秒≦Tp<1.7秒の場合、第1の演算処理及び第2の演算処理を混合した演算処理を選択する。尚、選択部24は、1.3秒≦Tp<1.7秒の場合、第1の中間時間帯の全時間に対する1.3秒からTpまでの時間の比率で第1の演算処理を使用する。更に、選択部24は、第1の中間時間帯の全時間に対するTpから1.7秒直前までの時間との比率に応じて第2の演算処理を使用する。つまり、第1の演算処理及び第2の演算処理を混合使用する。
選択部24は、運動区間Tpが1.7秒≦Tp<4.8秒の第2の中間時間帯の場合、第2の演算処理を使用する。また、選択部24は、運動区間Tpが4.8秒≦Tp<5.2秒の第3の中間時間帯の場合、第2の演算処理及び第3の演算処理を混合した演算処理を使用する。尚、選択部24は、運動区間Tpが4.8秒≦Tp<5.2秒の場合、第3の中間時間帯の全時間に対する4.8秒からTpまでの時間の比率に応じて第2の演算処理を使用する。更に、選択部24は、第3の中間時間帯の全時間に対するTpから5.2秒直前までの時間との比率に応じて第3の演算処理を使用する。これら第2の演算処理の使用割合と第3の演算処理の使用割合との使用比率で第2の演算処理及び第3の演算処理を混合使用する。
選択部24は、運動区間Tpが第6の経過時間、例えば、5.2秒以上、すなわちTp≧5.2秒の場合、第3の演算処理を使用する。
次に実施例3の情報処理装置1Aの動作について説明する。図10は、実施例3の最適演算処理に関わるMCU19の処理動作の一例を示すフローチャートである。図10においてMCU19は、運動区間Tp内の加速度Si(S0〜Sn)及び角速度Gi(G0〜Gn)の時系列データを保存し、運動区間Tpの始点及び終点の重力加速度ベクトルGr1,Gr2を保存する(ステップS81)。
MCU19は、第1の演算処理を適用して姿勢の回転行列の時系列情報Raiを生成する(ステップS82)。MCU19は、第2の演算処理を適用して姿勢の回転行列の時系列情報Rbiを生成する(ステップS83)。MCU19は、第3の演算処理を適用して姿勢の回転行列の時系列情報Rciを生成する(ステップS84)。
MCU19は、始点の重力加速度ベクトルGr1と終点の重力加速度ベクトルGr2とがほぼ同一であるか否かを判定する(ステップS85)。MCU19は、Gr1≒Gr2の場合(ステップS85肯定)、運動区間がTp<1.3秒であるか否かを判定する(ステップS86)。
MCU19は、Tp<1.3秒の場合(ステップS86肯定)、第1の演算処理を使用して姿勢RiはRi=Raiとする(ステップS87)。MCU19は、姿勢Ri及び加速度Siに基づき速度Vi及び位置Piを演算する演算処理を実行し(ステップS88)、図10に示す処理動作を終了する。尚、ステップS88の演算処理は、ステップS87で第1の演算処理を使用した場合、第1の演算処理を使用して速度Vi及び位置Piを算出する。
MCU19は、Tp<1.3秒でない場合(ステップS86否定)、運動区間Tpが第1の中間時間帯内、例えば、1.3秒≦Tp<1.7秒であるか否かを判定する(ステップS89)。
MCU19は、1.3秒≦Tp<1.7秒の場合(ステップS89肯定)、姿勢Riを第1の演算処理及び第2の演算処理を混合使用したRi=((1.7−Tp)Rai+(Tp−1.3)Rbi)/0.4を算出する(ステップS90)。そして、MCU19は、ステップS90で算出した姿勢Ri及び加速度Siに基づき速度Vi及び位置Piを演算する演算処理を実行すべく、ステップS88に移行する。尚、ステップS88の演算処理は、ステップS90で第1の演算処理及び第2の演算処理を混合使用した場合、ステップS90と同一の使用比率で第1の演算処理及び第2の演算処理を混合使用して速度Vi及び位置Piを算出する。
MCU19は、1.3秒≦Tp<1.7秒でない場合(ステップS89否定)、運動区間Tpが第2の中間時間帯内、例えば、1.7秒≦Tp<4.8秒であるか否かを判定する(ステップS91)。MCU19は、1.7秒≦Tp<4.8秒の場合(ステップS91肯定)、第2の演算処理を使用して姿勢RiはRi=Rbiとし(ステップS92)、ステップS88に移行する。尚、ステップS88の演算処理は、ステップS92で第2の演算処理を使用した場合、第2の演算処理を使用して速度Vi及び位置Piを算出する。MCU19は、1.7秒≦Tp<4.8秒でない場合(ステップS91否定)、運動区間Tpが第3の中間時間帯内、例えば、4.8秒≦Tp<5.2秒であるか否かを判定する(ステップS93)。
MCU19は、4.8秒≦Tp<5.2秒の場合(ステップS93肯定)、姿勢Riを第2の演算処理及び第3の演算処理を混合使用したRi=((5.2−Tp)Rbi+(Tp−4.8)Rci)/0.4を算出する(ステップS94)。そして、MCU19は、ステップS94で算出した姿勢Ri及び加速度Siに基づき速度Vi及び位置Piを演算する演算処理を実行すべく、ステップS88に移行する。尚、ステップS88の演算処理は、ステップS94で第2の演算処理及び第3の演算処理を混合使用した場合、ステップS94と同一の使用比率で第2の演算処理及び第3の演算処理を混合使用して速度Vi及び位置Piを算出する。
MCU19は、4.8秒≦Tp<5.2秒でない場合(ステップS93否定)、運動区間Tpが5.2秒以上と判断し、第3の演算処理を使用して姿勢RiはRi=Rciとし(ステップS95)、ステップS88に移行する。尚、ステップS88の演算処理は、ステップS95で第3の演算処理を使用した場合、第3の演算処理を使用して速度Vi及び位置Piを算出する。
尚、ステップS90及びステップS94の処理では、模式的な考えで演算方法を表現したが、回転行列の場合、図11に示す処理動作で演算することになる。図11は、演算処理の一例を示すフローチャートである。尚、図11の処理は、第1の演算処理及び第2の演算処理を混合使用した場合の回転行列に対する分配の一例である。
図11においてMCU19は、2列の回転行列の積で誤差RRを算出する(ステップS101)。すなわち、MCU19は、例えば、回転行列Raの逆行列Ra -1と、回転行列Rbとの積で、回転行列Raを回転行列Rbに変換する誤差RRを算出する。MCU19は、算出された誤差RRから回転軸の回転ベクトルQ及び、その変化量である回転量θを算出する(ステップS102)。つまり、回転軸の回転ベクトルQは、回転量θ回転した場合、回転行列Raは回転行列Rbとなる。従って、回転量θが「0」の場合、回転行列Raは回転行列Raのままである。
ここで、MCU19は、0≦k<1のkを用いてφ=kθを算出する(ステップS103)。そして、MCU19は、回転ベクトルQを回転軸としてφ回転させた場合の回転行列QXを算出する(ステップS104)。尚、回転行列QXは、3×3行列である。その要素として回転行列の第1段目の横列は、qx2(1−cp)+cp,qxqy(1−cp)−qzsp,qzqx(1−cp)+qyspである。第2段目の横列は、qxqy(1−cp)+qzsp,qy2(1−cp)+cp,qyqz(1−cp)−qxspである。第3段目の横列は、qzqx(1−cp)−qysp,qyqz(1−cp)+qxsp,qz2(1−cp)+cpである。尚、回転ベクトルQ=(qx,qy,qz)T、sp=sinφ及びcp=cosφである。
そして、MCU19は、算出された回転行列QXと回転行列Raとの積で回転行列の姿勢Riを算出し(ステップS105)、図11に示す処理動作を終了する。その結果、第1の演算処理及び第2の演算処理を混合使用して姿勢Riを算出できる。
尚、図11の例では、第1の演算処理及び第2の演算処理を混合使用する場合について説明したが、第2の演算処理及び第3の演算処理を混合使用する場合にも適用可能である。
実施例3では、運動区間Tpが第1の中間時間帯内の場合、第1の中間時間帯内のTpの比率に応じて第1の演算処理及び第2の演算処理を混合使用し、運動区間Tpの姿勢、速度及び位置を算出し、算出された姿勢及び位置に基づき運動軌跡を算出する。その結果、第1の中間時間帯の運動区間を反映した演算処理を提供できる。
実施例3では、運動区間Tpが第3の中間時間帯内の場合、第3の中間時間帯内のTpの比率に応じて第2の演算処理及び第3の演算処理を混合使用し、運動区間Tpの姿勢、速度及び位置を算出し、算出された姿勢及び位置に基づき運動軌跡を算出する。その結果、第3の中間時間帯の運動区間を反映した演算処理を提供できる。
尚、例えば、第3の経過時間を1.3秒、第4の経過時間を1.7秒、第5の経過時間を4.8秒、第6の経過時間を5.2秒とした。更に、例えば、第1の中間時間帯を1.3秒≦Tp<1.7秒、第2の中間時間帯を1.7秒≦Tp<4.8秒、第3の中間時間帯を4.8秒≦Tp<5.2秒としたが、これら数値に限定されるものではない。
また、上記実施例3では、姿勢を演算する際、演算処理の使用比率を算出し、この使用比率を速度及び位置を演算する際にも使用したが、速度及び位置毎に使用比率を順次算出して割当てるようにしても良い。
また、上記実施例3の図10の処理では、例えば、ステップS87の第1の演算処理に移行する場合でも、ステップS83及びステップS84の処理を実行した。しかしながら、ステップS87の第1の演算処理を実行する場合、ステップS83及びステップS84の処理を実行しないようにしても良い。また、ステップS92の第2の演算処理に移行する場合、ステップS82及びステップS84の処理を実行しないようにしても良い。また、ステップS95の第3の演算処理を実行する場合、ステップS82及びステップS83の処理を実行しないようにしても良い。
また、上記実施例では、MCU19内に第3の演算処理を実行する演算処理部25Aを内蔵するようにしたが、第3の演算処理を実行する演算処理部を別個に設けるようにしても良い。また、演算処理部25Aをハードウェア構成で説明したが、処理プログラムとしてMCU19で実行させるようにしても良い。
また、上記実施例では、加速度センサ12及び角速度センサ13を内蔵した携帯電話機等の情報処理装置を例示して説明したが、タブレット端末等の携帯端末に適用しても良い。
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
更に、各装置で行われる各種処理機能は、MCU19(又はCPU(Central Processing Unit)やMPU(Micro Processing Unit)等のマイクロ・コンピュータ)上で、その全部又は任意の一部を実行するようにしても良い。また、各種処理機能は、MCU(又はCPUやMPU等のマイクロ・コンピュータ)で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良いことは言うまでもない。