(57)【特許請求の範囲】
【請求項１】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いて、当該筐体を携帯するユーザの歩数を算出する装置のコンピュータで実行される歩数算出プログラムであって、
前記コンピュータを、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
前記第１歩数および前記第２歩数を比較して、大きい一方をユーザの歩数として選択する歩数選択手段として機能させ、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出プログラム。
【請求項２】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いて、当該筐体を携帯するユーザの歩数を算出する装置のコンピュータで実行される歩数算出プログラムであって、
前記コンピュータを、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
所定の条件に基づいて、前記第１歩数および前記第２歩数の一方をユーザの歩数として選択する歩数選択手段として機能させ、
前記歩数選択手段は、
前記重力方向加速度が増減する第１振幅を検出する第１振幅検出手段と、
前記水平方向加速度が増減する第２振幅を検出する第２振幅検出手段と、
前記第１振幅と前記第２振幅との比率を算出する比率算出手段とを含み、
前記歩数選択手段は、前記第１振幅が前記第２振幅の所定比率より大きければ前記第１歩数を選択して採用し、前記第１振幅が前記第２振幅の所定比率以下であれば前記第２歩数を選択して採用し、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出プログラム。
【請求項３】
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体における重力方向を算出する重力方向算出手段として、さらに前記コンピュータを機能させ、
前記重力方向加速度算出手段は、前記重力方向算出手段が算出した重力方向に基づいて、前記加速度データ取得手段が取得した加速度データが示す加速度の重力方向の成分を前記重力方向加速度として算出し、
前記水平方向加速度算出手段は、前記重力方向算出手段が算出した重力方向に基づいて、前記加速度データ取得手段が取得した加速度データが示す加速度の水平方向の成分を前記水平方向加速度として算出する、請求項１または２に記載の歩数算出プログラム。
【請求項４】
前記第１歩数算出手段は、前記重力方向加速度が増減する周期に応じて、前記第１歩数を算出し、
前記第２歩数算出手段は、前記水平方向加速度が増減する周期に応じて、前記第２歩数を算出する、請求項３に記載の歩数算出プログラム。
【請求項５】
前記第１歩数算出手段は、前記重力方向加速度が増減する周期に基づいて算出された単位時間あたりの歩数に、所定の割合で追従する歩数を前記第１歩数として算出し、
前記第２歩数算出手段は、前記水平方向加速度が増減する周期に基づいて算出された単位時間あたりの歩数に、所定の割合で追従する歩数を前記第２歩数として算出する、請求項４に記載の歩数算出プログラム。
【請求項６】
前記第１歩数算出手段は、前記重力方向加速度が増減する周期が所定の閾値より長い場合、前回の処理で算出された前記第１歩数を減衰させる第１減衰手段を含み、
前記第２歩数算出手段は、前記水平方向加速度が増減する周期が所定の閾値より長い場合、前回の処理で算出された前記第２歩数を減衰させる第２減衰手段を含む、請求項４に記載の歩数算出プログラム。
【請求項７】
前記第１歩数算出手段は、前記重力方向加速度が増減する極大値を検出する第１極大値検出手段を含み、
前記第２歩数算出手段は、前記水平方向加速度が増減する極大値を検出する第２極大値検出手段を含み、
前記第１歩数算出手段は、前記第１極大値検出手段が検出した極大値間の時間間隔に応じて、前記第１歩数を算出し、
前記第２歩数算出手段は、前記第２極大値検出手段が検出した極大値間の時間間隔に応じて、前記第２歩数を算出する、請求項４に記載の歩数算出プログラム。
【請求項８】
前記第１歩数算出手段は、前記第１の係数を前記第１極大値検出手段が検出した極大値間の時間間隔で除算することによって前記第１歩数を算出し、
前記第２歩数算出手段は、前記第２の係数を前記第２極大値検出手段が検出した極大値間の時間間隔で除算することによって前記第２歩数を算出し、
前記第２の係数は、前記第１の係数の２倍である、請求項７に記載の歩数算出プログラム。
【請求項９】
前記第１極大値検出手段は、前記重力方向加速度の絶対値が増減する極大値を検出し、
前記第２極大値検出手段は、前記水平方向加速度の大きさが増減する極大値を検出する、請求項７に記載の歩数算出プログラム。
【請求項１０】
前記第１極大値検出手段は、前記重力方向加速度が増減する極大値のうち所定の基準値以上のもののみを検出し、
前記第２極大値検出手段は、前記水平方向加速度が増減する極大値のうち所定の基準値以上のもののみを検出する、請求項７に記載の歩数算出プログラム。
【請求項１１】
前記第１歩数算出手段は、
前記重力方向加速度が増減する極大値を検出する第１極大値検出手段と、
前記重力方向加速度の大きさに応じて、前記第１極大値検出手段が極大値を直前に検出した時点から次の極大値を検出するまでの時間間隔を予測する第１時間間隔予測手段とを含み、
前記第２歩数算出手段は、
前記水平方向加速度が増減する極大値を検出する第２極大値検出手段と、
前記水平方向加速度の大きさに応じて、前記第２極大値検出手段が極大値を直前に検出した時点から次の極大値を検出するまでの時間間隔を予測する第２時間間隔予測手段とを含み、
前記第１歩数算出手段は、前記第１時間間隔予測手段が予測した時間間隔に応じて、前記第１歩数を算出し、
前記第２歩数算出手段は、前記第２時間間隔予測手段が予測した時間間隔に応じて、前記第２歩数を算出する、請求項４に記載の歩数算出プログラム。
【請求項１２】
前記第１時間間隔予測手段は、前記第１極大値検出手段が直前に検出した極大値の大きさと、前記重力方向加速度の値の変化量とを用いて、前記時間間隔を予測し、
前記第２時間間隔予測手段は、前記第２極大値検出手段が直前に検出した極大値の大きさと、前記水平方向加速度の値の変化量とを用いて、前記時間間隔を予測する、請求項１１に記載の歩数算出プログラム。
【請求項１３】
前記歩数選択手段は、選択して採用した前記第１歩数または前記第２歩数を順次累積して累積歩数を算出する累積歩数算出手段を含む、請求項１乃至３の何れか１つに記載の歩数算出プログラム。
【請求項１４】
前記重力方向算出手段は、前記加速度データ取得手段が取得した加速度データが示す加速度ベクトルに所定の割合で追従するベクトルの方向を、前記筐体における重力方向として算出する、請求項３に記載の歩数算出プログラム。
【請求項１５】
前記重力方向加速度算出手段は、前記重力方向算出手段が算出した重力方向に基づいて、前記加速度データ取得手段が取得した加速度データが示す加速度ベクトルから前記追従するベクトルを減算した後の重力方向の成分を前記重力方向加速度として算出し、
前記水平方向加速度算出手段は、前記重力方向算出手段が算出した重力方向に基づいて、前記加速度データ取得手段が取得した加速度データが示す加速度ベクトルから前記追従するベクトルを減算した後の水平方向の成分を前記水平方向加速度として算出する、請求項１４に記載の歩数算出プログラム。
【請求項１６】
携帯するユーザの歩数を算出する歩数算出装置であって、
装置本体に加わる加速度を検出して加速度データを出力する加速度センサと、
前記装置本体に設けられた表示部と、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記装置本体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記装置本体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
前記第１歩数および前記第２歩数を比較して、大きい一方をユーザの歩数として選択する歩数選択手段と、
前記歩数選択手段が選択した歩数に応じた情報を前記表示部に表示する表示制御手段とを備え、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出装置。
【請求項１７】
携帯するユーザの歩数を算出する歩数算出装置であって、
装置本体に加わる加速度を検出して加速度データを出力する加速度センサと、
前記装置本体に設けられた表示部と、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記装置本体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記装置本体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
所定の条件に基づいて、前記第１歩数および前記第２歩数の一方をユーザの歩数として選択する歩数選択手段と、
前記歩数選択手段が選択した歩数に応じた情報を前記表示部に表示する表示制御手段とを備え、
前記歩数選択手段は、
前記重力方向加速度が増減する第１振幅を検出する第１振幅検出手段と、
前記水平方向加速度が増減する第２振幅を検出する第２振幅検出手段と、
前記第１振幅と前記第２振幅との比率を算出する比率算出手段とを含み、
前記歩数選択手段は、前記第１振幅が前記第２振幅の所定比率より大きければ前記第１歩数を選択して採用し、前記第１振幅が前記第２振幅の所定比率以下であれば前記第２歩数を選択して採用し、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出装置。
【請求項１８】
ユーザによって携帯可能な携帯機と、有線または無線通信を介して当該携帯機と接続される本体機とを含み、当該携帯機を携帯するユーザの歩数を算出する歩数算出システムであって、
前記携帯機本体に加わる加速度を検出して加速度データを出力する加速度センサと、
前記加速度センサから前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記携帯機における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記携帯機における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
前記第１歩数および前記第２歩数を比較して、大きい一方をユーザの歩数として選択する歩数選択手段と、
前記歩数選択手段が選択した歩数に応じた情報を表示装置に表示する表示制御手段とを備え、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出システム。
【請求項１９】
ユーザによって携帯可能な携帯機と、有線または無線通信を介して当該携帯機と接続される本体機とを含み、当該携帯機を携帯するユーザの歩数を算出する歩数算出システムであって、
前記携帯機本体に加わる加速度を検出して加速度データを出力する加速度センサと、
前記加速度センサから前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記携帯機における重力方向に作用する重力方向加速度を算出する重力方向加速度算出手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記携帯機における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出手段と、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出手段と、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出手段と、
所定の条件に基づいて、前記第１歩数および前記第２歩数の一方をユーザの歩数として選択する歩数選択手段と、
前記歩数選択手段が選択した歩数に応じた情報を表示装置に表示する表示制御手段とを備え、
前記歩数選択手段は、
前記重力方向加速度が増減する第１振幅を検出する第１振幅検出手段と、
前記水平方向加速度が増減する第２振幅を検出する第２振幅検出手段と、
前記第１振幅と前記第２振幅との比率を算出する比率算出手段とを含み、
前記歩数選択手段は、前記第１振幅が前記第２振幅の所定比率より大きければ前記第１歩数を選択して採用し、前記第１振幅が前記第２振幅の所定比率以下であれば前記第２歩数を選択して採用し、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出システム。
【請求項２０】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いて、当該筐体を携帯するユーザの歩数を算出する歩数算出方法であって、
前記加速度データを繰り返し取得する加速度データ取得ステップと、
前記加速度データ取得ステップにおいて取得された加速度データを用いて、前記筐体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出ステップと、
前記加速度データ取得ステップにおいて取得された加速度データを用いて、前記筐体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出ステップと、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出ステップと、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出ステップと、
前記第１歩数および前記第２歩数を比較して、大きい一方をユーザの歩数として選択する歩数選択ステップとを含み、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出方法。
【請求項２１】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いて、当該筐体を携帯するユーザの歩数を算出する歩数算出方法であって、
前記加速度データを繰り返し取得する加速度データ取得ステップと、
前記加速度データ取得ステップにおいて取得された加速度データを用いて、前記筐体における重力方向に作用する重力方向加速度を算出する重力方向加速度算出ステップと、
前記加速度データ取得ステップにおいて取得された加速度データを用いて、前記筐体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する水平方向加速度算出ステップと、
第１の係数を用いて前記重力方向加速度の変化に応じた第１歩数を算出する第１歩数算出ステップと、
第２の係数を用いて前記水平方向加速度の変化に応じた第２歩数を算出する第２歩数算出ステップと、
所定の条件に基づいて、前記第１歩数および前記第２歩数の一方をユーザの歩数として選択する歩数選択ステップとを含み、
前記歩数選択ステップは、
前記重力方向加速度が増減する第１振幅を検出する第１振幅検出ステップと、
前記水平方向加速度が増減する第２振幅を検出する第２振幅検出ステップと、
前記第１振幅と前記第２振幅との比率を算出する比率算出ステップとを含み、
前記歩数選択ステップでは、前記第１振幅が前記第２振幅の所定比率より大きければ前記第１歩数が選択されて採用され、前記第１振幅が前記第２振幅の所定比率以下であれば前記第２歩数が選択されて採用され、
前記第１の係数および前記第２の係数は、前記水平方向加速度の増減する周期が前記重力方向加速度の増減する周期の２倍であることにしたがって決められる値である、歩数算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、歩数算出プログラム、歩数算出装置、歩数算出システム、および歩数算出方法に関し、より特定的には、ユーザの歩数を算出する歩数算出プログラム、歩数算出装置、歩数算出システム、および歩数算出方法に関する。
【背景技術】
【０００２】
従来、歩数計は、ユーザの身体に装着され、ユーザから受ける振動に応じて歩数を計測する。このような歩数計の一例として、加速度センサを内蔵する体動検出装置が開示されている（例えば、特許文献１参照）。上記特許文献１に記載されている体動検出装置は、検出する加速度方向がそれぞれ異なる複数の加速度センサを内蔵している。そして、当該体動検出装置は、それぞれの加速度センサから得られた信号を用いて、装置の姿勢を判定し、当該姿勢に基づいてユーザの体動（歩数）を検出している。例えば、当該体動検出装置では、加速度の波形を分析し、当該加速度が上閾値を越えた後に下閾値より低下することにより、ユーザが１歩進んだという判定を行っている。
【特許文献１】特開２００４−１４１６６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記特許文献１で開示された体動検出装置では、ユーザの携帯の方法によって正しい歩数が計測できないことがある。具体的には、ユーザが体動検出装置を衣服に装着したり、カバンに入れたりして歩いた場合、ユーザが歩くことにより生じる身体の上下振動による加速度を検出することによって歩数の検出が可能となる。一方、ユーザが体動検出装置を手に持って歩いた場合、ユーザが腕を振ることにより生じる前後振動による加速度を検出するために、歩数の検出が正確にできなくなる。つまり、身体の上下振動によって生じる加速度の波形の１周期に対応するユーザの歩数と、腕を振ることによる前後振動によって生じる加速度の波形の１周期に対応するユーザの歩数とが異なっているために、正しい歩数が検出できない。ユーザは、必ずしも身体の上下振動によって生じる加速度が生じるように体動検出装置を携帯するとは限らないため、歩数を誤検出することが考えられる。また、ユーザにとっても、正確な歩数を検出するためには体動検出装置の携帯方法が制限されてしまうため、装置の使い勝手が悪くなることがある。
【０００４】
それ故に、本発明の目的は、加速度センサから出力されるデータを用いて、ユーザの歩数を正確に判定する歩数算出プログラム、歩数算出装置、歩数算出システム、および歩数算出方法を提供することである。
【課題を解決するための手段】
【０００５】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００６】
第１の発明は、所定の筐体（７１）に加わる加速度（ａｃｃＸ、ａｃｃＹ、ａｃｃＺ）を検出する加速度センサ（７０１）から出力される加速度データ（Ｄａ）を用いて、当該筐体を携帯するユーザの歩数を算出する装置（５）のコンピュータ（１０）で実行される歩数算出プログラムである。歩数算出プログラムは、加速度データ取得手段（ステップ４２、ステップ１２２を実行するＣＰＵ１０；以下、単にステップ番号のみ記載する）、重力方向加速度算出手段（Ｓ８１、Ｓ１４１）、水平方向加速度算出手段（Ｓ１００、Ｓ１６０）、第１歩数算出手段（Ｓ４５、Ｓ１２５）、第２歩数算出手段（Ｓ４６、Ｓ１２６）、および歩数選択手段（Ｓ４７、Ｓ１２７、Ｓ１２８）として、コンピュータを機能させる。加速度データ取得手段は、加速度データを繰り返し取得する。重力方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体における重力方向に作用する重力方向加速度（Ｖｗ、Ｖｗａ）を算出する。水平方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体における重力方向に対して垂直な水平方向に作用する水平方向加速度（Ｈｖｅｃ、Ｈｗａ）を算出する。第１歩数算出手段は、第１の係数（Ｍ）を用いて重力方向加速度の変化に応じた第１歩数（Ｖｓｄ、Ｖｓ）を算出する。第２歩数算出手段は、第１の係数とは異なる第２の係数（Ｎ）を用いて水平方向加速度の変化に応じた第２歩数（Ｈｓｄ、Ｈｖ）を算出する。歩数選択手段は、所定の条件に基づいて、第１歩数および第２歩数の一方をユーザの歩数として選択する。
【０００７】
第２の発明は、上記第１の発明において、重力方向算出手段（Ｓ４３、Ｓ８０）として、さらにコンピュータを機能させる。重力方向算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体における重力方向（ｖｅｃｇ）を算出する。重力方向加速度算出手段は、重力方向算出手段が算出した重力方向に基づいて、加速度データ取得手段が取得した加速度データが示す加速度の重力方向の成分を重力方向加速度として算出する。水平方向加速度算出手段は、重力方向算出手段が算出した重力方向に基づいて、加速度データ取得手段が取得した加速度データが示す加速度の水平方向の成分を水平方向加速度として算出する。
【０００８】
第３の発明は、上記第２の発明において、第１歩数算出手段は、重力方向加速度が増減する周期（Ｖｔ）に応じて、第１歩数を算出する。第２歩数算出手段は、水平方向加速度が増減する周期（Ｈｔ）に応じて、第２歩数を算出する。
【０００９】
第４の発明は、上記第３の発明において、第１の係数および第２の係数は、水平方向加速度の増減する周期が重力方向加速度の増減する周期の２倍（図１５Ａ、図１５Ｂ）であることにしたがって決められる値である。
【００１０】
第５の発明は、上記第３の発明において、第１歩数算出手段は、重力方向加速度が増減する周期に基づいて算出された単位時間あたりの歩数（Ｖｓｄ）に、所定の割合で追従する歩数（Ｖｓ）を第１歩数として算出する。第２歩数算出手段は、水平方向加速度が増減する周期に基づいて算出された単位時間あたりの歩数（Ｈｓｄ）に、所定の割合で追従する歩数（Ｈｓ）を第２歩数として算出する。
【００１１】
第６の発明は、上記第３の発明において、第１歩数算出手段は、第１減衰手段（Ｓ９４、Ｓ１５６）を含む。第１減衰手段は、重力方向加速度が増減する周期が所定の閾値（Ｖｔｍａｘ）より長い場合（Ｓ９３、Ｓ１５５）、前回の処理で算出された第１歩数を減衰させる。第２歩数算出手段は、第２減衰手段（Ｓ１１３、Ｓ１７５）を含む。第２減衰手段は、水平方向加速度が増減する周期が所定の閾値（Ｈｔｍａｘ）より長い場合（Ｓ１１２、Ｓ１７４）、前回の処理で算出された第２歩数を減衰させる。
【００１２】
第７の発明は、上記第３の発明において、第１歩数算出手段は、第１極大値検出手段（Ｓ８６、Ｓ１４６）を含む。第１極大値検出手段は、重力方向加速度が増減する極大値を検出する。第２歩数算出手段は、第２極大値検出手段（Ｓ１０５、Ｓ１６５）を含む。第２極大値検出手段は、水平方向加速度が増減する極大値を検出する。第１歩数算出手段は、第１極大値検出手段が検出した極大値間の時間間隔に応じて、第１歩数を算出し。第２歩数算出手段は、第２極大値検出手段が検出した極大値間の時間間隔に応じて、第２歩数を算出する。
【００１３】
第８の発明は、上記第７の発明において、第１歩数算出手段は、第１の係数を第１極大値検出手段が検出した極大値間の時間間隔で除算することによって第１歩数を算出する。第２歩数算出手段は、第２の係数を第２極大値検出手段が検出した極大値間の時間間隔で除算することによって第２歩数を算出する。第２の係数は、第１の係数の２倍である。
【００１４】
第９の発明は、上記第７の発明において、第１極大値検出手段は、重力方向加速度の絶対値が増減する極大値（Ｖｗａ）を検出する。第２極大値検出手段は、水平方向加速度の大きさ（Ｈｗａ）が増減する極大値を検出する。
【００１５】
第１０の発明は、上記第７の発明において、第１極大値検出手段は、重力方向加速度が増減する極大値のうち所定の基準値（Ａ）以上のもののみを検出する（Ｓ８５、Ｓ１４５）。第２極大値検出手段は、水平方向加速度が増減する極大値のうち所定の基準値（Ｂ）以上のもののみを検出する（Ｓ１０４、Ｓ１６４）。
【００１６】
第１１の発明は、上記第３の発明において、第１歩数算出手段は、第１極大値検出手段および第１時間間隔予測手段（Ｓ１５０、Ｓ１５１）を含む。第１極大値検出手段は、重力方向加速度が増減する極大値を検出する。第１時間間隔予測手段は、重力方向加速度の大きさに応じて、第１極大値検出手段が極大値を直前に検出した時点から次の極大値を検出するまでの時間間隔（ＶＴ）を予測する。第２歩数算出手段は、第２極大値検出手段および第２時間間隔予測手段（Ｓ１６９、Ｓ１７０）を含む。第２極大値検出手段は、水平方向加速度が増減する極大値を検出する。第２時間間隔予測手段は、水平方向加速度の大きさに応じて、第２極大値検出手段が極大値を直前に検出した時点から次の極大値を検出するまでの時間間隔（ＨＴ）を予測する。第１歩数算出手段は、第１時間間隔予測手段が予測した時間間隔に応じて、第１歩数を算出する。第２歩数算出手段は、第２時間間隔予測手段が予測した時間間隔に応じて、第２歩数を算出する。
【００１７】
第１２の発明は、上記第１１の発明において、第１時間間隔予測手段は、第１極大値検出手段が直前に検出した極大値の大きさ（Ｖｈ）と、重力方向加速度の値の変化量（｜ｄ｜）とを用いて、時間間隔を予測する。第２時間間隔予測手段は、第２極大値検出手段が直前に検出した極大値の大きさ（Ｈｈ）と、水平方向加速度の値の変化量（｜ｅ｜）とを用いて、時間間隔を予測する。
【００１８】
第１３の発明は、上記第１または第２の発明において、歩数選択手段は、第１歩数および第２歩数を比較して、大きい一方を選択して採用する（Ｓ４７）。
【００１９】
第１４の発明は、上記第１または第２の発明において、歩数選択手段は、第１振幅検出手段（Ｓ１２７）、第２振幅検出手段（Ｓ１２７）、および比率算出手段（Ｓ１２７）を含む。第１振幅検出手段は、重力方向加速度が増減する第１振幅を検出する。第２振幅検出手段は、水平方向加速度が増減する第２振幅を検出する。比率算出手段は、第１振幅と第２振幅との比率（ｒ）を算出する。歩数選択手段は、第１振幅が第２振幅の所定比率（Ｋ）より大きければ第１歩数を選択して採用し、第１振幅が第２振幅の所定比率以下であれば第２歩数を選択して採用する。
【００２０】
第１５の発明は、上記第１または第２の発明において、歩数選択手段は、累積歩数算出手段（Ｓ４８、Ｓ４９、Ｓ１２９、Ｓ１３０）を含む。累積歩数算出手段は、選択して採用した第１歩数または第２歩数を順次累積して累積歩数（Ｓｔ）を算出する。
【００２１】
第１６の発明は、上記第２の発明において、重力方向算出手段は、加速度データ取得手段が取得した加速度データが示す加速度ベクトル（ａｃｃ）に所定の割合で追従するベクトル（ａｃｃｆ）の方向を、筐体における重力方向として算出する。
【００２２】
第１７の発明は、上記第１６の発明において、重力方向加速度算出手段は、重力方向算出手段が算出した重力方向に基づいて、加速度データ取得手段が取得した加速度データが示す加速度ベクトルから追従するベクトルを減算（Ｓ４４、Ｓ１２４）した後の重力方向の成分を重力方向加速度として算出する。水平方向加速度算出手段は、重力方向算出手段が算出した重力方向に基づいて、加速度データ取得手段が取得した加速度データが示す加速度ベクトルから追従するベクトルを減算（Ｓ４４、Ｓ１２４）した後の水平方向の成分を水平方向加速度として算出する。
【００２３】
第１８の発明は、携帯するユーザの歩数を算出する歩数算出装置である。歩数算出装置は、加速度センサ、表示部、加速度データ取得手段、重力方向加速度算出手段、水平方向加速度算出手段、第１歩数算出手段、第２歩数算出手段、歩数選択手段、および表示制御手段を備える。加速度センサは、装置本体に加わる加速度を検出して加速度データを出力する。表示部は、装置本体に設けられる。加速度データ取得手段は、加速度データを繰り返し取得する。重力方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、装置本体における重力方向に作用する重力方向加速度を算出する。水平方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、装置本体における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する。第１歩数算出手段は、第１の係数を用いて重力方向加速度の変化に応じた第１歩数を算出する。第２歩数算出手段は、第１の係数とは異なる第２の係数を用いて水平方向加速度の変化に応じた第２歩数を算出する。歩数選択手段は、所定の条件に基づいて、第１歩数および第２歩数の一方をユーザの歩数として選択する。表示制御手段は、歩数選択手段が選択した歩数に応じた情報を表示部に表示する。
【００２４】
第１９の発明は、ユーザによって携帯可能な携帯機（７）と、有線または無線通信を介して当該携帯機と接続される本体機（５）とを含み、当該携帯機を携帯するユーザの歩数を算出する歩数算出システムである。歩数算出システムは、加速度センサ、加速度データ取得手段、重力方向加速度算出手段、水平方向加速度算出手段、第１歩数算出手段、第２歩数算出手段、歩数選択手段、および表示制御手段（Ｓ５０、Ｓ１３１）を備える。加速度センサは、携帯機本体に加わる加速度を検出して加速度データを出力する。加速度データ取得手段は、加速度センサから加速度データを取得する。重力方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、携帯機における重力方向に作用する重力方向加速度を算出する。水平方向加速度算出手段は、加速度データ取得手段が取得した加速度データを用いて、携帯機における重力方向に対して垂直な水平方向に作用する水平方向加速度を算出する。第１歩数算出手段は、第１の係数を用いて重力方向加速度の変化に応じた第１歩数を算出する。第２歩数算出手段は、第１の係数とは異なる第２の係数を用いて水平方向加速度の変化に応じた第２歩数を算出する。歩数選択手段は、所定の条件に基づいて、第１歩数および第２歩数の一方をユーザの歩数として選択する。表示制御手段は、歩数選択手段が選択した歩数に応じた情報を表示装置（２）に表示する。なお、加速度データ取得手段、重力方向加速度算出手段、水平方向加速度算出手段、第１歩数算出手段、第２歩数算出手段、歩数選択手段、および表示制御手段は、携帯機および本体機の何れに設けられてもかまわない。例えば、これら全てが本体機に設けられてもいいし、これらの一部が携帯機に設けられてもかまわない。
【発明の効果】
【００２５】
上記第１の発明によれば、加速度センサから出力されるデータを用いて、ユーザの歩数を正確に判定することができる。例えば、ユーザの身体の上下の移動に応じた加速度が主に生じるような部位に筐体を装着する場合や、ユーザが腕を振ることによる加速度が主に生じるような部位に筐体を把持している場合等でも、ユーザの単位時間あたりの歩数を正確に算出することができ、ユーザが筐体を携帯する方法が制限されずに自由に筐体を取り扱うことができる。
【００２６】
上記第２の発明によれば、筐体に生じる重力方向の加速度成分と、水平方向の加速度成分とにそれぞれ分けて歩数を算出することによって、ユーザが筐体を携帯している方法に応じた歩数を算出することができる。
【００２７】
上記第３の発明によれば、加速度が増減する周期を利用して、容易に筐体を携帯するユーザの歩数を算出することができる。
【００２８】
上記第４の発明によれば、水平方向に生じる加速度の増減する周期が重力方向に生じる加速度の増減する周期の２倍であることを考慮した係数を用いることによって、それぞれの周期の特性に応じた適切な歩数を算出することができる。
【００２９】
上記第５の発明によれば、突発的な加速度の変化を無効にして正確な歩数を算出することができる。
【００３０】
上記第６の発明によれば、ユーザが歩行を停止したときに徐々に歩数が減衰するため、例えば当該歩数に応じてプレイヤキャラクタが動作するようなゲームを表示する場合、その動作が自然に見える。
【００３１】
上記第７の発明によれば、加速度変化の極大値間の時間間隔を用いることによって、加速度変化の周期を容易に算出することができる。
【００３２】
上記第８の発明によれば、水平方向に生じる加速度の増減する周期が重力方向に生じる加速度の増減する周期の２倍であることを考慮した係数を設定することによって、係数を極大値間の時間間隔で除算する数式を用いて容易に歩数を算出することができる。
【００３３】
上記第９の発明によれば、検出される極大値の数が増加するため、歩数算出精度が向上する。
【００３４】
上記第１０の発明によれば、ユーザが歩行していないような弱い加速度変化を除外することができるため、正確な歩数を算出することができる。
【００３５】
上記第１１の発明によれば、次の極大値までの時間を予測する簡易な方法で、加速度変化の周期を算出することができる。
【００３６】
上記第１２の発明によれば、加速度の単位時間あたりの変化量と、前回検出した極大値の大きさとを用いて、容易に次の極大値までの時間を予測することができる。
【００３７】
上記第１３の発明によれば、第１歩数および第２歩数の大きさ比較を用いて、自動的に歩数算出方法を切り替えることができる。
【００３８】
上記第１４の発明によれば、重力方向に生じる加速度の振幅と、水平方向に生じる加速度の振幅の大きさ比較を用いて、自動的に歩数算出方法を切り替えることができる。また、両者の比率を用いて切り替えることによって、例えばユーザの身体の上下の移動に応じた加速度が主に生じるような部位に筐体を装着する場合や、ユーザが腕を振ることによる加速度が主に生じるような部位に筐体を把持している場合等の加速度特性を考慮した判定が可能となる。
【００３９】
上記第１５の発明によれば、ユーザの歩数を累積した値を用いた処理が可能となる。
【００４０】
上記第１６の発明によれば、筐体の重力方向を容易に算出することができる。
【００４１】
上記第１７の発明によれば、筐体に生じる重力加速度を除去することができるため、さらに正確な歩数算出が可能となる。
【００４２】
本発明の歩数算出装置および歩数算出システムによれば、上述した歩数算出プログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００４３】
図１を参照して、本発明の一実施形態に係る歩数算出プログラムを実行する歩数算出装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体５を含むゲームシステムについて説明する。なお、図１は据置型のゲーム装置３を含むゲームシステム１の外観図であり、図２はゲーム装置本体５のブロック図である。以下、当該ゲームシステム１について説明する。
【００４４】
図１において、ゲームシステム１は、表示手段の一例の家庭用テレビジョン受像機（以下、モニタと記載する）２と、当該モニタ２に接続コードを介して接続する据置型のゲーム装置３とから構成される。モニタ２は、ゲーム装置３から出力された音声信号を音声出力するためのスピーカ２ａを備える。また、ゲーム装置３は、本願発明の歩数算出プログラムの一例のゲームプログラムを記録した光ディスク４と、当該光ディスク４のゲームプログラムを実行してゲーム画面をモニタ２に表示出力させるためのコンピュータを搭載したゲーム装置本体５と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体５に与えるためのコントローラ７とを備えている。
【００４５】
また、ゲーム装置本体５は、無線コントローラモジュール１９（図２参照）を内蔵する。無線コントローラモジュール１９は、コントローラ７から無線送信されるデータを受信し、ゲーム装置本体５からコントローラ７へデータを送信して、コントローラ７とゲーム装置本体５とを無線通信によって接続する。さらに、ゲーム装置本体５には、当該ゲーム装置本体５に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。
【００４６】
また、ゲーム装置本体５には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ１７（図２参照）が搭載される。ゲーム装置本体５は、光ディスク４に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ２に表示する。また、ゲームプログラム等は、光ディスク４に限らず、フラッシュメモリ１７に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体５は、フラッシュメモリ１７に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４７】
コントローラ７は、無線コントローラモジュール１９を内蔵するゲーム装置本体５へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて操作情報等の送信データを無線送信する。コントローラ７は、主にモニタ２の表示画面に表示されるオブジェクト等を操作するための操作手段である。コントローラ７は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン（十字キーやスティック等を含む）とが設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって例えば赤外光を出力する。また、コントローラ７は、ゲーム装置本体５の無線コントローラモジュール１９から無線送信された送信データを通信部７５で受信して、当該送信データに応じた音や振動を発生させることもできる。
【００４８】
次に、図２を参照して、ゲーム装置本体５の内部構成について説明する。図２は、ゲーム装置本体５の構成を示すブロック図である。ゲーム装置本体５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ／Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１３、ディスクドライブ１４、およびＡＶ−ＩＣ（Ａｕｄｉｏ  Ｖｉｄｅｏ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）１５等を有する。
【００４９】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムＬＳＩ１１の内部構成については、後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体５の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ３５または外部メインメモリ１２に読み出したデータを書き込む。
【００５０】
また、システムＬＳＩ１１には、入出力プロセッサ３１、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）３２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３３、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３４、および内部メインメモリ３５が設けられる。図示は省略するが、これらの構成要素３１〜３５は、内部バスによって互いに接続される。
【００５１】
ＧＰＵ３２は、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ３４は、ＧＰＵ３２がグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ３２は、ＶＲＡＭ３４に記憶されたデータを用いて画像データを作成する。
【００５２】
ＤＳＰ３３は、オーディオプロセッサとして機能し、内部メインメモリ３５や外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００５３】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、ＡＶコネクタ１６を介して、読み出した画像データをモニタ２に出力するとともに、読み出した音声データをモニタ２に内蔵されるスピーカ２ａに出力する。これによって、画像がモニタ２に表示されるとともに音がスピーカ２ａから出力される。
【００５４】
入出力プロセッサ（Ｉ／Ｏプロセッサ）３１は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ３１は、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５５】
入出力プロセッサ３１は、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ３１は、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介して当該データをネットワークに送信する。また、入出力プロセッサ３１は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２、および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０は、ゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体５と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体５を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５６】
また、入出力プロセッサ３１は、アンテナ２３および無線コントローラモジュール１９を介して、コントローラ７から送信される操作データ等を受信し、内部メインメモリ３５または外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。なお、内部メインメモリ３５には、外部メインメモリ１２と同様に、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、ＣＰＵ１０のワーク領域やバッファ領域として用いられてもかまわない。
【００５７】
さらに、入出力プロセッサ３１には、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ３１は、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５８】
また、ゲーム装置本体５（例えば、前部主面）には、当該ゲーム装置本体５の電源ボタン２４、ゲーム処理のリセットボタン２５、光ディスク４を脱着する投入口、およびゲーム装置本体５の投入口から光ディスク４を取り出すイジェクトボタン２６等が設けられている。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置本体５の各構成要素に対して、図示しないＡＣアダプタを経て電力が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体５の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５９】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００６０】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００６１】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００６２】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００６３】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置本体５が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６４】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置本体５の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６５】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール１９からコントローラ７へ、複数のＬＥＤ７０２のうち、上記コントローラ種別に対応するＬＥＤを点灯させるための信号が送信される。
【００６６】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５に示すスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６７】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６８】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６９】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（操作ボタン７２ａが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されていない側面）方向をＸ軸正方向とする。
【００７０】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００７１】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の動きを良好な感度でゲーム装置本体５等が判定することができる。
【００７２】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体５から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００７３】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置本体５から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００７４】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００７５】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００７６】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００７７】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、少なくとも２軸方向に沿った直線加速度を検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて、加速度センサ７０１が提供されてもよい。
【００７８】
加速度センサ７０１に用いられるような加速度検出手段は、加速度センサ７０１の持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、それら３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００７９】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）等のコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【００８０】
例えば、加速度センサ７０１を搭載するコントローラ７が静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサ７０１によって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラ７が現実に静的な状態であれば、検出された加速度に基づいてコントローラ７の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ７０１の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に１Ｇ（重力加速度）が作用しているか否かだけでコントローラ７が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ７が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ７０１の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ７がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ７０１からの出力に基づいて、おおよそのコントローラ７の傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢、または位置を判定することができる。
【００８１】
一方、加速度センサ７０１が動的な状態であることを前提とする場合には、当該加速度センサ７０１が重力加速度成分に加えて加速度センサ７０１の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ７の動き方向等を知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７の様々な動きおよび／または位置を算出することができる。なお、加速度センサ７０１が動的な状態であることを前提とする場合であっても、加速度センサ７０１の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ７の傾きを知ることが可能である。
【００８２】
他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ７０１が静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。加速度センサ７０１でそれぞれ検知された加速度を示すデータは、通信部７５に出力される。
【００８３】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体５からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体５から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体５から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００８４】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置本体５の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置本体５で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置本体５のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００８５】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、本ゲーム装置本体５で行うゲームの概要について説明する。図８に示すように、コントローラ７は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム１でコントローラ７を用いてゲームをプレイするためには、プレイヤが身体にコントローラ７を装着または手に把持した状態で、その場で足踏みする。そして、プレイヤがウォーキング、ジョギング、ランニング等を模した足踏みをすることによって、その歩数に応じた操作入力がゲーム装置本体５に与えられる。
【００８６】
ここで、本実施形態におけるゲームでは、プレイヤがコントローラ７を衣服等に装着したりポケットに入れたりして足踏みしてもいいし、プレイヤが手にコントローラ７を把持して足踏みしてもかまわない。何れの状態でコントローラ７を扱っても、プレイヤの歩数を正確にカウントすることができる。なお、図８においては、プレイヤが腰位置にコントローラ７を装着して足踏みしている様子をコントローラ７ａで示している。プレイヤが身体に装着したコントローラ７ａには、プレイヤの足踏みに応じた上下の揺れ（以下、縦揺れと記載する）が主に生じる。また、図８においては、コントローラ７を手に把持して足踏みしている様子をコントローラ７ｂで示している。プレイヤが手に把持したコントローラ７ｂには、プレイヤの足踏みにおける腕の振りに応じた前後の揺れ（以下、横揺れと記載する）が主に生じる。このようなコントローラ７ａや７ｂに生じる縦揺れや横揺れをゲーム装置本体５が区別し、その周期や振幅等を利用してゲーム処理が行われる。
【００８７】
プレイヤがコントローラ７を縦揺れまたは横揺れで動かす動作では、コントローラ７からその揺れ方向へ加速する際の加速度や遠心力、動作を停止するために減速する際の加速度や遠心力等に応じた動的な操作情報（具体的には、Ｘ、Ｙ、およびＺ軸方向加速度データ）がゲーム装置本体５に与えられる。このようなコントローラ７に加わる加速度の変化は、加速度センサ７０１によって検出できるため、加速度センサ７０１から出力されるＸ、Ｙ、およびＺ軸方向加速度データに対して追加の処理を行うことによって、コントローラ７の縦揺れおよび横揺れの区別やその揺れ周期を算出することができる。
【００８８】
例えば、図９Ａに示すように、コントローラ７に縦揺れが生じる場合、コントローラ７に作用する重力方向の加速度に注目すると、一例としてプレイヤの足踏みの１歩毎に１周期の加速度の波形が生じる。これは、プレイヤが足を床に接地する毎に身体に上下振動が主に生じるためである。一方、図９Ｂに示すように、コントローラ７に横揺れが生じる場合、コントローラ７に作用する重力方向に垂直な平面方向（すなわち、水平。以下、水平方向と記載する）の加速度に注目すると、プレイヤの足踏みの２歩毎に１周期の加速度の波形が生じる。つまり、プレイヤが同じ歩数で足踏みしている場合、横揺れにおける水平方向の加速度波形の周期は、縦揺れにおける重力方向の加速度波形の周期の２倍となる。これは、プレイヤが一方の足を床に接地するときにコントローラ７を把持する腕を前に振り、他方の足を床に接地するときに当該腕を後ろに振る前後振動が主に生じるためである。なお、以下の説明において、加速度センサ７０１の特性として、加速度センサ７０１から出力される加速度データは、当該加速度センサ７０１に加えられる加速度（つまり実際に加速する方向や減速する方向）とは真逆方向の加速度を示すデータが出力されるものとする。すなわち、加速度センサ７０１の加速による慣性力に応じた加速度データが出力されるものである。また、コントローラ７の加速度センサ７０１に加わる重力加速度は、重力方向と同じ方向の加速度データとして出力されることになる。
【００８９】
図１０は、上記足踏み動作に応じてモニタ２に表示されるゲーム画像の一例を示す図である。ゲーム処理の一例として、モニタ２に表示されるプレイヤキャラクタＰＣが上記足踏みの歩数に応じて、仮想ゲーム空間内を移動する処理を行う。
【００９０】
例えば、図１０においては、仮想ゲーム空間内をウォーキング、ジョギング、またはランニングするプレイヤキャラクタＰＣが表示されている。そして、プレイヤは、コントローラ７を装着または把持して、ウォーキング、ジョギング、またはランニングするように足踏みする。この場合、プレイヤが足踏みする歩数に応じた速度で、プレイヤキャラクタＰＣが仮想ゲーム空間内を移動する。
【００９１】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１１を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１１は、ゲーム装置本体５の外部メインメモリ１２および／または内部メインメモリ３５（以下、２つのメインメモリを総称して、単にメインメモリと記載する）に記憶される主なデータを示す図である。
【００９２】
図１１に示すように、メインメモリには、加速度データＤａ、追従加速度ベクトルデータＤｂ、追従成分除去ベクトルデータＤｃ、重力方向ベクトルデータＤｄ、重力方向成分データＤｅ、重力方向成分の絶対値データＤｆ、最終の絶対値データＤｇ、絶対値変化量データＤｈ、最終の絶対値変化量データＤｉ、縦揺れの山からの経過時間データＤｊ、縦揺れの目標値データＤｋ、縦揺れスピードデータＤｌ、水平方向成分ベクトルデータＤｍ、水平方向成分ベクトルの大きさデータＤｎ、最終の大きさデータＤｏ、大きさ変化量データＤｐ、最終の大きさ変化量データＤｑ、横揺れの山からの経過時間データＤｒ、横揺れの目標値データＤｓ、横揺れスピードデータＤｔ、歩数データＤｕ、プレイヤキャラクタ位置データＤｖ、縦揺れタイマーデータＤｗ、横揺れタイマーデータＤｘ、および画像データＤｙ等が記憶される。なお、メインメモリには、図１１に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタＰＣ以外の他のオブジェクト等に関するデータ（位置データ等）や仮想ゲーム空間に関するデータ（背景のデータ等）等、ゲーム処理に必要なデータが記憶される。
【００９３】
加速度データＤａは、コントローラ７に生じた加速度を示すデータであり、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データが格納される。この加速度データＤａには、加速度センサ７０１がＸ軸成分に対して検出した加速度ａｃｃＸを示すＸ軸方向加速度データＤａ１、Ｙ軸成分に対して検出した加速度ａｃｃＹを示すＹ軸方向加速度データＤａ２、およびＺ軸成分に対して検出した加速度ａｃｃＺを示すＺ軸方向加速度データＤａ３が含まれる。なお、ゲーム装置本体５に備える無線コントローラモジュール１９は、コントローラ７から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた加速度データがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に読み出されて、メインメモリの加速度データＤａが更新される。
【００９４】
このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。この場合、一例として、後述する各ステップにおいて、それぞれ何回か処理を繰り返すことによって複数の時点に受信した操作情報を全て処理した後に次のステップに進める態様がある。また、他の例として後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを常に用いて処理して、次のステップに進める態様がある。なお、後述する処理の説明においては、説明を簡単にするために当該複数時点の操作情報のうち、最新の操作情報のみを用いる態様を用いる。
【００９５】
また、後述する処理フローでは、加速度データＤａがゲーム処理周期である１フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ７からの送信周期毎に加速度データＤａを更新し、当該更新された加速度データをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度データＤａに記憶する加速度データＤａ１〜Ｄａ３を更新する周期と、ゲーム処理周期とが異なることになる。
【００９６】
追従加速度ベクトルデータＤｂは、加速度ベクトルａｃｃに所定の割合で追従する追従加速度ベクトルａｃｃｆを示すデータが格納される。例えば、追従加速度ベクトルデータＤｂは、追従加速度ベクトルａｃｃｆのＸ軸成分、Ｙ軸成分、およびＺ軸成分を示すデータを含む。
【００９７】
追従成分除去ベクトルデータＤｃは、加速度ベクトルａｃｃから追従加速度ベクトルａｃｃｆを減算した追従成分除去ベクトルｖｅｃを示すデータが格納される。例えば、追従成分除去ベクトルデータＤｃは、追従成分除去ベクトルｖｅｃのＸ軸成分ｖｅｃＸ、Ｙ軸成分ｖｅｃＹ、およびＺ軸成分ｖｅｃＺを示すデータを含む。
【００９８】
重力方向ベクトルデータＤｄは、コントローラ７に生じている重力の方向を表す重力方向ベクトルｖｅｃｇを示すデータが格納される。例えば、重力方向ベクトルｖｅｃｇは、追従加速度ベクトルａｃｃｆを正規化することによって得られる。また、重力方向ベクトルデータＤｄは、重力方向ベクトルｖｅｃｇのＸ軸成分ｖｅｃｇＸ、Ｙ軸成分ｖｅｃｇＹ、およびＺ軸成分ｖｅｃｇＺを示すデータを含む。
【００９９】
重力方向成分データＤｅは、追従成分除去ベクトルｖｅｃの重力方向成分Ｖｗを示すデータが格納される。重力方向成分の絶対値データＤｆは、重力方向成分Ｖｗの絶対値Ｖｗａを示すデータが格納される。最終の絶対値データＤｇは、処理に用いた絶対値Ｖｗａを、次回の処理に用いるために一時的に記憶した最終の絶対値Ｖｗａｌを示すデータが格納される。絶対値変化量データＤｈは、最終の絶対値Ｖｗａｌに対する絶対値Ｖｗａの変化量（絶対値変化量Ｖｗａｈ）を示すデータが格納される。最終の絶対値変化量データＤｉは、処理に用いた絶対値変化量Ｖｗａｈを、次回の処理に用いるために一時的に記憶した最終の絶対値変化量Ｖｗａｈｌを示すデータが格納される。
【０１００】
縦揺れの山からの経過時間データＤｊは、直前に判定された絶対値Ｖｗａのピーク（縦揺れの山）からの経過時間Ｖｔを示すデータが格納される。縦揺れの目標値データＤｋは、縦揺れの周期から得られる縦揺れスピードＶｓの目標値Ｖｓｄを示すデータが格納される。また、縦揺れスピードデータＤｌは、縦揺れの周期から得られる単位時間あたりの歩数（縦揺れスピードＶｓ）を示すデータが格納される。
【０１０１】
水平方向成分ベクトルデータＤｍは、追従成分除去ベクトルｖｅｃの水平方向成分を表す水平方向成分ベクトルＨｖｅｃを示すデータが格納される。水平方向成分ベクトルの大きさデータＤｎは、水平方向成分ベクトルＨｖｅｃの大きさＨｗａを示すデータが格納される。最終の大きさデータＤｏは、処理に用いた大きさＨｗａを、次回の処理に用いるために一時的に記憶した最終の大きさＨｗａｌを示すデータが格納される。大きさ変化量データＤｐは、最終の大きさＨｗａｌに対する大きさＨｗａの変化量（大きさ変化量Ｈｗａｈ）を示すデータが格納される。最終の大きさ変化量データＤｑは、処理に用いた大きさ変化量Ｈｗａｈを、次回の処理に用いるために一時的に記憶した最終の大きさ変化量Ｈｗａｈｌを示すデータが格納される。
【０１０２】
横揺れの山からの経過時間データＤｒは、直前に判定された大きさＨｗａのピーク（横揺れの山）からの経過時間Ｈｔを示すデータが格納される。横揺れの目標値データＤｓは、横揺れの周期から得られる横揺れスピードＨｓの目標値Ｈｓｄを示すデータが格納される。また、横揺れスピードデータＤｔは、横揺れの周期から得られる単位時間あたりの歩数（横揺れスピードＨｓ）を示すデータが格納される。
【０１０３】
歩数データＤｕは、縦揺れスピードＶｓおよび／または横揺れスピードＨｓを累積して算出されるプレイヤの歩数Ｓｔを示すデータが格納される。プレイヤキャラクタ位置データＤｖは、仮想ゲーム空間におけるプレイヤキャラクタＰＣの位置を示すデータが格納される。
【０１０４】
縦揺れタイマーデータＤｗは、後述する処理ループ毎に更新される縦揺れタイマーのカウント値であり、縦揺れの山からの経過時間Ｖｔを取得するためのデータである。横揺れタイマーデータＤｘは、後述する処理ループ毎に更新される横揺れタイマーのカウント値であり、横揺れの山からの経過時間Ｈｔを取得するためのデータである。
【０１０５】
画像データＤｙは、プレイヤキャラクタ画像データＤｙ１および背景画像データＤｙ２等を含んでいる。プレイヤキャラクタ画像データＤｙ１は、仮想ゲーム空間にプレイヤキャラクタＰＣを配置してゲーム画像を生成するためのデータである。背景画像データＤｙ２は、仮想ゲーム空間に背景を配置してゲーム画像を生成するためのデータである。
【０１０６】
次に、図１２〜図１４を参照して、ゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図１２は、ゲーム装置本体５において実行されるゲーム処理の流れの一例を示すフローチャートである。図１３は、図１２におけるステップ４５の縦揺れスピードＶｓを算出する処理の一例の詳細な動作を示すサブルーチンである。図１４は、図１２におけるステップ４６の横揺れスピードＨｓを算出する処理の一例の詳細な動作を示すサブルーチンである。なお、図１２〜図１４に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ７を装着または把持して足踏みすることに応じて、その歩数をカウントする処理について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１２〜図１４では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１０７】
ゲーム装置本体５の電源が投入されると、ゲーム装置本体５のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１２〜図１４に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１０８】
図１２において、ＣＰＵ１０は、ゲーム処理の初期化を行い（ステップ４１）、次のステップに処理を進める。例えば、上記ステップ４１におけるゲーム処理初期化では、仮想ゲーム空間の設定やプレイヤキャラクタＰＣの配置等の初期設定を行う。また、上記ステップ４１におけるゲーム処理初期化では、プレイヤの歩数を算出するための各パラメータを初期化する。例えば、ＣＰＵ１０は、上述したメインメモリに格納される各データが示すパラメータをそれぞれ０に設定する。ただし、ＣＰＵ１０は、経過時間ＶｔおよびＨｔについては、それぞれ０でない値（例えば、４０）に設定して初期化する。
【０１０９】
次に、ＣＰＵ１０は、加速度ａｃｃＸ、ａｃｃＹ、およびａｃｃＺを取得して（ステップ４２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、コントローラ７から受信した操作情報を用いて、当該操作情報に含まれる最新の加速度データが示す加速度を加速度ａｃｃＸ、ａｃｃＹ、およびａｃｃＺとして加速度データＤａに格納する。具体的には、コントローラ７から受信した最新の操作情報に含まれるＸ軸方向の加速度データが示す加速度が、加速度ａｃｃＸとしてＸ軸方向加速度データＤａ１に格納される。また、最新の操作情報に含まれるＹ軸方向の加速度データが示す加速度が、加速度ａｃｃＹとしてＹ軸方向加速度データＤａ２に格納される。そして、最新の操作情報に含まれるＺ軸方向の加速度データが示す加速度が、加速度ａｃｃＺとしてＺ軸方向加速度データＤａ３に格納される。
【０１１０】
次に、ＣＰＵ１０は、追従加速度ベクトルａｃｃｆを算出し（ステップ４３）、次のステップに処理を進める。例えば、ＣＰＵ１０は、Ｘ軸方向加速度データＤａ１に格納された加速度ａｃｃＸ、Ｙ軸方向加速度データＤａ２に格納された加速度ａｃｃＹ、およびＺ軸方向加速度データＤａ３に格納された加速度ａｃｃＺを参照して、加速度ベクトルａｃｃを取得する。そして、ＣＰＵ１０は、追従加速度ベクトルデータＤｂに既に格納されている追従加速度ベクトルａｃｃｆのＸ軸成分、Ｙ軸成分、およびＺ軸成分とを参照する。そして、ＣＰＵ１０は、新たな追従加速度ベクトルａｃｃｆを、
ａｃｃｆ←ａｃｃｆ＋（ａｃｃ−ａｃｃｆ）＊Ｃ
で算出し、追従加速度ベクトルデータａｃｃｆを更新する。ここで、Ｃは追従係数であり、例えばＣ＝０．１５に設定される。このように、追従加速度ベクトルａｃｃｆは、現時点の加速度ベクトルａｃｃの各軸成分値（ａｃｃＸ、ａｃｃＹ、ａｃｃＺ）に、所定の割合でそれぞれ追従させた各軸成分値を有しており、現時点の加速度ベクトルａｃｃに所定の割合で逐次追従させたものである。上記算出式によって、追従加速度ベクトルａｃｃｆは、加速度ベクトルａｃｃに追従するベクトルとして算出されているが、追従係数Ｃが非常に小さな値であるため、加速度ベクトルａｃｃのＸ軸成分ａｃｃＸ、Ｙ軸成分ａｃｃＹ、およびＺ軸成分ａｃｃＺを平滑化したようなベクトルとなる。また、追従加速度ベクトルａｃｃｆは、常にコントローラ７に作用している重力加速度等の静的加速度成分を示すパラメータとしても扱うことができる。
【０１１１】
次に、ＣＰＵ１０は、追従成分除去ベクトルｖｅｃを算出し（ステップ４４）、次のステップに処理を進める。例えば、ＣＰＵ１０は、加速度データＤａに格納された加速度ベクトルａｃｃと、上記ステップ４３で算出された追従加速度ベクトルａｃｃｆとを参照する。そして、ＣＰＵ１０は、追従成分除去ベクトルｖｅｃを
ｖｅｃ←ａｃｃ−ａｃｃｆ
で算出し、追従成分除去ベクトルデータＤｃを更新する。上記算出式から明らかなように、追従成分除去ベクトルｖｅｃは、加速度ベクトルａｃｃから追従加速度ベクトルａｃｃｆが減算されている。
【０１１２】
次に、ＣＰＵ１０は、プレイヤの単位時間あたりの歩数を示す縦揺れスピードＶｓを算出する処理を行って（ステップ４５）、処理を次のステップに進める。以下、図１３を参照して、上記ステップ４５で行う縦揺れスピードＶｓ算出処理について説明する。
【０１１３】
図１３において、ＣＰＵ１０は、重力方向ベクトルｖｅｃｇを算出し（ステップ８０）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、追従加速度ベクトルデータＤｂに格納されている追従加速度ベクトルａｃｃｆを、長さ１のベクトルに正規化することによって重力方向ベクトルｖｅｃｇを算出する。そして、ＣＰＵ１０は、算出された重力方向ベクトルｖｅｃｇを用いて、重力方向ベクトルデータＤｄを更新する。
【０１１４】
次に、ＣＰＵ１０は、追従成分除去ベクトルｖｅｃの重力方向成分Ｖｗを算出し（ステップ８１）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、追従成分除去ベクトルデータＤｃに格納されている追従成分除去ベクトルｖｅｃおよび重力方向ベクトルデータＤｄに格納されている重力方向ベクトルｖｅｃｇを参照して、重力方向成分Ｖｗを
Ｖｗ←ｖｅｃｇＸ＊ｖｅｃＸ＋ｖｅｃｇＹ＊ｖｅｃＹ＋ｖｅｃｇＺ＊ｖｅｃＺ
で算出する。そして、ＣＰＵ１０は、算出された重力方向成分Ｖｗを用いて重力方向成分データＤｅを更新する。
【０１１５】
次に、ＣＰＵ１０は、重力方向成分Ｖｗの絶対値Ｖｗａを算出し（ステップ８２）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、算出された重力方向成分Ｖｗの絶対値Ｖｗａを用いて、絶対値データＤｆを更新する。
【０１１６】
次に、ＣＰＵ１０は、絶対値変化量Ｖｗａｈを算出し（ステップ８３）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、上記ステップ８２で算出された絶対値Ｖｗａから最終の絶対値Ｖｗａｌを減算して絶対値変化量Ｖｗａｈを算出し、算出された絶対値変化量Ｖｗａｈを用いて、絶対値変化量データＤｈを更新する。後述により明らかとなるが、最終の絶対値Ｖｗａｌは、最終の絶対値データＤｇに格納されており、前回の処理において算出された絶対値Ｖｗａである。
【０１１７】
次に、ＣＰＵ１０は、直前に判定された縦揺れの山からの経過時間Ｖｔを取得し（ステップ８４）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、縦揺れタイマーデータＤｗに格納された縦揺れタイマーのカウント値を参照し、当該カウント値を経過時間Ｖｔとして取得する。そして、ＣＰＵ１０は、取得した経過時間Ｖｔを用いて、縦揺れの山からの経過時間データＤｊを更新する。
【０１１８】
次に、ＣＰＵ１０は、絶対値Ｖｗａが閾値Ａより大きいか否かを判断する（ステップ８５）。そして、ＣＰＵ１０は、絶対値Ｖｗａが閾値Ａより大きい場合、次のステップ８６に処理を進める。一方、ＣＰＵ１０は、絶対値Ｖｗａが閾値Ａ以下の場合、次のステップ９３に処理を進める。ここで、閾値Ａは、絶対値Ｖｗａがピーク（縦揺れの山）であることを判定する際の条件の１つであり、例えば閾値Ａ＝０．５に設定される。つまり、絶対値Ｖｗａが変動していたとしても、閾値Ａ以下であればピークと判定されないことになる。
【０１１９】
ステップ８６において、ＣＰＵ１０は、最終の絶対値変化量Ｖｗａｈｌが０以上で、かつ、絶対値変化量Ｖｗａｈが０より小さいか否かを判断する。そして、ＣＰＵ１０は、Ｖｗａｈｌ≧０、かつ、Ｖｗａｈ＜０の場合、絶対値Ｖｗａが縦揺れの山であると判定して、次のステップ８７に処理を進める。一方、ＣＰＵ１０は、Ｖｗａｈｌ＜０、または、Ｖｗａｈ≧０の場合、絶対値Ｖｗａが縦揺れの山ではないと判定して、次のステップ９３に処理を進める。後述により明らかとなるが、最終の絶対値変化量Ｖｗａｈｌは、最終の絶対値変化量データＤｉに格納されており、前回の処理において算出された絶対値変化量Ｖｗａｈである。つまり、上記ステップ８５およびステップ８６においては、絶対値Ｖｗａが閾値Ａより大きく、かつ、絶対値Ｖｗａが増加から減少に変化した極大値を示した場合に、絶対値Ｖｗａが縦揺れの山であると判定している。
【０１２０】
ステップ８７において、ＣＰＵ１０は、縦揺れタイマーデータＤｗに記述されたカウント値を０に初期化する。そして、ＣＰＵ１０は、上記ステップ８４で取得した経過時間Ｖｔが最短時間Ｖｔｍｉｎ（例えば、Ｖｔｍｉｎ＝４）より短いか否かを判断する（ステップ８８）。そして、ＣＰＵ１０は、経過時間Ｖｔが最短時間Ｖｔｍｉｎより短い場合、最短時間Ｖｔｍｉｎの値によって経過時間Ｖｔの値を置き換え、縦揺れの山からの経過時間データＤｊを更新して（ステップ８９）、次のステップ９０に処理を進める。一方、ＣＰＵ１０は、経過時間Ｖｔが最短時間Ｖｔｍｉｎ以上の場合、そのまま次のステップ９０に処理を進める。
【０１２１】
ステップ９０において、ＣＰＵ１０は、縦揺れスピードＶｓの目標値Ｖｓｄを算出して、次のステップに処理を進める。例えば、ＣＰＵ１０は、縦揺れの山からの経過時間データＤｊに格納されている経過時間Ｖｔを参照して、目標値Ｖｓｄを
Ｖｓｄ＝Ｍ／Ｖｔ
で算出する。ここで、Ｍは、第１の係数であり、例えばＭ＝０．２５である。そして、ＣＰＵ１０は、算出した目標値Ｖｓｄを用いて縦揺れの目標値データＤｋを更新する。
【０１２２】
次に、ＣＰＵ１０は、縦揺れスピードＶｓを算出して（ステップ９１）、次のステップに処理を進める。例えば、ＣＰＵ１０は、縦揺れの目標値データＤｋに格納されている縦揺れスピードＶｓの目標値Ｖｓｄおよび縦揺れスピードデータＤｌに格納されている縦揺れスピードＶｓを参照して、新たな縦揺れスピードＶｓを
Ｖｓ←Ｖｓ＋（Ｖｓｄ−Ｖｓ）＊０．３
で算出する。そして、ＣＰＵ１０は、算出した新たな縦揺れスピードＶｓを用いて、縦揺れスピードデータＤｌを更新する。
【０１２３】
次に、ステップ９２において、ＣＰＵ１０は、重力方向成分の絶対値データＤｆに格納されている現時点の絶対値Ｖｗａの値によって最終の絶対値Ｖｗａｌの値を置き換え、最終の絶対値データＤｇを更新する。また、ＣＰＵ１０は、絶対値変化量データＤｈに格納されている現時点の絶対値変化量Ｖｗａｈの値によって最終の絶対値変化量Ｖｗａｈｌの値を置き換え、最終の絶対値変化量データＤｉを更新して、当該サブルーチンによる処理を終了する。
【０１２４】
一方、ステップ９３において、ＣＰＵ１０は、上記ステップ８４で取得した経過時間Ｖｔが最長時間Ｖｔｍａｘ（例えば、Ｖｔｍａｘ＝２０）より長いか否かを判断する。そして、ＣＰＵ１０は、経過時間Ｖｔが最長時間Ｖｔｍａｘより長い場合、次のステップ９４に処理を進める。一方、ＣＰＵ１０は、経過時間Ｖｔが最長時間Ｖｔｍａｘ以下の場合、上記ステップ９１に処理を進める。
【０１２５】
ステップ９４において、ＣＰＵ１０は、縦揺れスピードＶｓを減衰させて、上記ステップ９２に処理を進める。例えば、ＣＰＵ１０は、縦揺れスピードデータＤｌに格納されている縦揺れスピードＶｓを参照して、新たな縦揺れスピードＶｓを
Ｖｓ←Ｖｓ＊０．９
で減衰させる。そして、ＣＰＵ１０は、減衰させた新たな縦揺れスピードＶｓを用いて、縦揺れスピードデータＤｌを更新する。
【０１２６】
図１２に戻り、ＣＰＵ１０は、ステップ４５の縦揺れスピードＶｓを算出する処理の後、プレイヤの単位時間あたりの歩数を示す横揺れスピードＨｓを算出する処理を行って（ステップ４６）、処理を次のステップに進める。以下、図１４を参照して、上記ステップ４６で行う横揺れスピードＨｓ算出処理について説明する。
【０１２７】
図１４において、ＣＰＵ１０は、追従成分除去ベクトルｖｅｃの水平方向成分ベクトルＨｖｅｃを算出し（ステップ１００）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、追従成分除去ベクトルデータＤｃに格納されている追従成分除去ベクトルｖｅｃ、重力方向ベクトルデータＤｄに格納されている重力方向ベクトルｖｅｃｇ、および重力方向成分データＤｅに格納されている重力方向成分Ｖｗを参照して、水平方向成分ベクトルＨｖｅｃを
Ｈｖｅｃ←ｖｅｃ−ｖｅｃｇ＊Ｖｗ
で算出する。そして、ＣＰＵ１０は、算出された水平方向成分ベクトルＨｖｅｃを用いて水平方向成分ベクトルデータＤｍを更新する。
【０１２８】
次に、ＣＰＵ１０は、水平方向成分ベクトルＨｖｅｃの大きさＨｗａを算出し（ステップ１０１）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、水平方向成分ベクトルデータＤｍを参照して、水平方向成分ベクトルＨｖｅｃの大きさＨｗａを算出し、算出された大きさＨｗａを用いて、水平方向成分ベクトルの大きさデータＤｎを更新する。
【０１２９】
次に、ＣＰＵ１０は、大きさ変化量Ｈｗａｈを算出し（ステップ１０２）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、上記ステップ１０１で算出された大きさＨｗａから最終の大きさＨｗａｌを減算して大きさ変化量Ｈｗａｈを算出し、算出された大きさ変化量Ｈｗａｈを用いて、大きさ変化量データＤｐを更新する。後述により明らかとなるが、最終の大きさＨｗａｌは、最終の大きさデータＤｏに格納されており、前回の処理において算出された大きさＨｗａである。
【０１３０】
次に、ＣＰＵ１０は、直前に判定された横揺れの山からの経過時間Ｈｔを取得し（ステップ１０３）、処理を次のステップに進める。具体的には、ＣＰＵ１０は、横揺れタイマーデータＤｘに格納された横揺れタイマーのカウント値を参照し、当該カウント値を経過時間Ｈｔとして取得する。そして、ＣＰＵ１０は、取得した経過時間Ｈｔを用いて、横揺れの山からの経過時間データＤｒを更新する。
【０１３１】
次に、ＣＰＵ１０は、大きさＨｗａが閾値Ｂより大きいか否かを判断する（ステップ１０４）。そして、ＣＰＵ１０は、大きさＨｗａが閾値Ｂより大きい場合、次のステップ１０５に処理を進める。一方、ＣＰＵ１０は、大きさＨｗａが閾値Ｂ以下の場合、次のステップ１１２に処理を進める。ここで、閾値Ｂは、大きさＨｗａがピーク（横揺れの山）であることを判定する際の条件の１つであり、例えば閾値Ｂ＝３．０に設定される。つまり、大きさＨｗａが変動していたとしても、閾値Ｂ以下であればピークと判定されないことになる。なお、閾値Ｂは、上述した閾値Ａより大きな値に設定されることが好ましい。これは、縦揺れおよび横揺れに対する揺れの大きさ（コントローラ７を把持した横揺れの方が揺れの大きさが大きい）や揺れの周期（縦揺れの周期は横揺れの半分となる）の違いを考慮したものであり、閾値ＡおよびＢは、揺れを判定する感度に応じてそれぞれ適切な値に設定すればよい。
【０１３２】
ステップ１０５において、ＣＰＵ１０は、最終の大きさ変化量Ｈｗａｈｌが０以上で、かつ、大きさ変化量Ｈｗａｈが０より小さいか否かを判断する。そして、ＣＰＵ１０は、Ｈｗａｈｌ≧０、かつ、Ｈｗａｈ＜０の場合、大きさＨｗａが横揺れの山であると判定して、次のステップ１０６に処理を進める。一方、ＣＰＵ１０は、Ｈｗａｈｌ＜０、または、Ｈｗａｈ≧０の場合、大きさＨｗａが横揺れの山ではないと判定して、次のステップ１１２に処理を進める。後述により明らかとなるが、最終の大きさ変化量Ｈｗａｈｌは、最終の大きさ変化量データＤｑに格納されており、前回の処理において算出された大きさ変化量Ｈｗａｈである。つまり、上記ステップ１０４およびステップ１０５においては、大きさＨｗａが閾値Ｂより大きく、かつ、大きさＨｗａが増加から減少に変化した極大値を示した場合に、大きさＨｗａが横揺れの山であると判定している。
【０１３３】
ステップ１０６において、ＣＰＵ１０は、横揺れタイマーデータＤｘに記述されたカウント値を０に初期化する。そして、ＣＰＵ１０は、上記ステップ１０３で取得した経過時間Ｈｔが最短時間Ｈｔｍｉｎ（例えば、Ｈｔｍｉｎ＝８）より短いか否かを判断する（ステップ１０７）。そして、ＣＰＵ１０は、経過時間Ｈｔが最短時間Ｈｔｍｉｎより短い場合、最短時間Ｈｔｍｉｎの値によって経過時間Ｈｔの値を置き換え、横揺れの山からの経過時間データＤｒを更新して（ステップ１０８）、次のステップ１０９に処理を進める。一方、ＣＰＵ１０は、経過時間Ｈｔが最短時間Ｈｔｍｉｎ以上の場合、そのまま次のステップ１０９に処理を進める。
【０１３４】
ステップ１０９において、ＣＰＵ１０は、横揺れスピードＨｓの目標値Ｈｓｄを算出して、次のステップに処理を進める。例えば、ＣＰＵ１０は、横揺れの山からの経過時間データＤｒに格納されている経過時間Ｈｔを参照して、目標値Ｈｓｄを
Ｈｓｄ＝Ｎ／Ｈｔ
で算出する。ここで、Ｎは、第２の係数であり、例えばＮ＝０．５である。そして、ＣＰＵ１０は、算出した目標値Ｈｓｄを用いて横揺れの目標値データＤｓを更新する。
【０１３５】
次に、ＣＰＵ１０は、横揺れスピードＨｓを算出して（ステップ１１０）、次のステップに処理を進める。例えば、ＣＰＵ１０は、横揺れの目標値データＤｓに格納されている横揺れスピードＨｓの目標値Ｈｓｄおよび横揺れスピードデータＤｔに格納されている横揺れスピードＨｓを参照して、新たな横揺れスピードＨｓを
Ｈｓ←Ｈｓ＋（Ｈｓｄ−Ｈｓ）＊０．３
で算出する。そして、ＣＰＵ１０は、算出した新たな横揺れスピードＨｓを用いて、横揺れスピードデータＤｔを更新する。
【０１３６】
次に、ステップ１１１において、ＣＰＵ１０は、水平方向成分ベクトルの大きさデータＤｎに格納されている現時点の大きさＨｗａの値によって最終の大きさＨｗａｌの値を置き換え、最終の大きさデータＤｏを更新する。また、ＣＰＵ１０は、大きさ変化量データＤｐに格納されている現時点の大きさ変化量Ｈｗａｈの値によって最終の大きさ変化量Ｈｗａｈｌの値を置き換え、最終の大きさ変化量データＤｑを更新して、当該サブルーチンによる処理を終了する。
【０１３７】
一方、ステップ１１２において、ＣＰＵ１０は、上記ステップ１０３で取得した経過時間Ｈｔが最長時間Ｈｔｍａｘ（例えば、Ｈｔｍａｘ＝４０）より長いか否かを判断する。そして、ＣＰＵ１０は、経過時間Ｈｔが最長時間Ｈｔｍａｘより長い場合、次のステップ１１３に処理を進める。一方、ＣＰＵ１０は、経過時間Ｈｔが最長時間Ｈｔｍａｘ以下の場合、上記ステップ１１０に処理を進める。
【０１３８】
ステップ１１３において、ＣＰＵ１０は、横揺れスピードＨｓを減衰させて、上記ステップ９２に処理を進める。例えば、ＣＰＵ１０は、横揺れスピードデータＤｔに格納されている横揺れスピードＨｓを参照して、新たな横揺れスピードＨｓを
Ｈｓ←Ｈｓ＊０．９
で減衰させる。そして、ＣＰＵ１０は、減衰させた新たな横揺れスピードＨｓを用いて、横揺れスピードデータＤｔを更新する。
【０１３９】
ここで、図１５Ａおよび図１５Ｂを用いて、上述した縦揺れスピードＶｓ算出処理および横揺れスピードＨｓにおける基本原理について説明する。なお、図１５Ａは、コントローラ７に縦揺れが生じている状態における重力方向成分Ｖｗの絶対値Ｖｗａの変化の一例を示すグラフである。また、図１５Ｂは、コントローラ７に横揺れが生じている状態における水平方向成分ベクトルＨｖｅｃの大きさＨｗａの変化の一例を示すグラフである。
【０１４０】
図１５Ａにおいて、重力方向成分Ｖｗは、コントローラ７に生じる加速度における重力方向成分を示すパラメータである。また、重力方向成分Ｖｗの絶対値Ｖｗａは、当該重力方向成分Ｖｗの負成分の正負が反転する。つまり、結果的に重力方向成分Ｖｗの絶対値Ｖｗａの変化周期は、図９Ａで示したコントローラ７に作用する重力方向の加速度の変化周期（図１５Ａでは破線で示す）の半分となる。したがって、絶対値Ｖｗａの周期に注目すると、プレイヤの足踏みの１歩毎に２周期の絶対値Ｖｗａのピークが生じる。そして、絶対値Ｖｗａのピーク間の時間間隔（経過時間Ｖｔ）がプレイヤの半歩分の時間であるとして目標値Ｖｓｄを算出する際の分子である第１の係数Ｍを例えば０．２５とし、プレイヤの単位時間あたりの歩数を示す縦揺れスピードＶｓが算出される。
【０１４１】
一方、図１５Ｂにおいて、水平方向成分ベクトルＨｖｅｃは、コントローラ７に生じる加速度における重力方向に垂直な平面方向成分（水平方向成分）を示すパラメータである。また、水平方向成分ベクトルＨｖｅｃの大きさＨｗａは、負の大きさが存在しないため、図９Ｂで示した水平方向の加速度の負成分の正負が反転したような変化となる。つまり、結果的に水平方向成分ベクトルＨｖｅｃの大きさＨｗａの変化周期は、図９Ｂで示したコントローラ７に作用する水平方向の加速度の変化周期（図１５Ｂでは破線で示す）の半分となる。したがって、大きさＨｗａの周期に注目すると、プレイヤの足踏みの１歩毎に１周期の大きさＨｗａのピークが生じる。そして、大きさＨｗａのピーク間の時間間隔（経過時間Ｈｔ）がプレイヤの１歩分の時間であるとして、目標値Ｈｓｄを算出する際の分子である第２の係数Ｎを第１の係数Ｍとは異なる値（例えば、Ｎ＝０．５）とし、プレイヤの単位時間あたりの歩数を示す横揺れスピードＨｓが算出される。
【０１４２】
このように、縦揺れスピードＶｓにおいては正の値のみとなる絶対値Ｖｗａの極大値が生じたタイミングに注目し、横揺れスピードＨｓにおいては正の値のみとなる大きさＨｗａの極大値が生じたタイミングに注目して、当該極大値間隔から算出されている。これによって、図９Ａおよび図９Ｂに示した加速度変化の極大値を用いるよりも、２倍の頻度で出現する極大値を用いることができ、縦揺れスピードＶｓおよび横揺れスピードＨｓを算出する精度が向上する。また、重力方向成分Ｖｗの変化をそのまま用いた場合、重力方向成分Ｖｗの極小値を検出する処理が必要となるが、双方共に極大値のみを検出することによって処理が単純となって非常に効率的である。なお、これらの効果を期待しない場合、重力方向成分Ｖｗの変化をそのまま用いて縦揺れスピードＶｓを算出してもかまわない。
【０１４３】
また、上記ステップ９１の縦揺れスピードＶｓを算出する処理においては、縦揺れスピードＶｓが目標値Ｖｓｄに少しずつ近づく計算をしている。また、上記ステップ１１０の横揺れスピードＨｓを算出する処理においては、横揺れスピードＨｓが目標値Ｈｓｄに少しずつ近づく計算をしている。これは、短期的な周期変化（すなわち、経過時間Ｖｔおよび経過時間Ｈｔの変化）が、縦揺れスピードＶｓおよび横揺れスピードＨｓの算出結果に影響することを低減するためである。このような効果を期待しない場合、上記ステップ９１における縦揺れスピードＶｓを算出する処理において、目標値Ｖｓｄをそのまま縦揺れスピードＶｓにしてもかまわない。また、上記ステップ１１０における横揺れスピードＨｓを算出する処理において、目標値Ｈｓｄをそのまま横揺れスピードＨｓにしてもかまわない。
【０１４４】
図１２に戻り、ＣＰＵ１０は、ステップ４６の横揺れスピードＨｓを算出する処理の後、縦揺れスピードＶｓが横揺れスピードＨｓより大きいか否かを判断する（ステップ４７）。具体的には、ＣＰＵ１０は、縦揺れスピードデータＤｌに格納されている縦揺れスピードＶｓと、横揺れスピードデータＤｔに格納されている横揺れスピードＨｓとを比較して、縦揺れスピードＶｓが横揺れスピードＨｓより大きいか否かを判断する。そして、ＣＰＵ１０は、Ｖｓ＞Ｈｓの場合、処理を次のステップ４８に進める。一方、ＣＰＵ１０は、Ｖｓ≦Ｈｓの場合、処理を次のステップ４９に進める。
【０１４５】
ステップ４８において、ＣＰＵ１０は、縦揺れスピードＶｓを歩数Ｓｔに加算して、次のステップ５０に処理を進める。具体的には、ＣＰＵ１０は、縦揺れスピードデータＤｌに格納された縦揺れスピードＶｓと、歩数データＤｕに格納された歩数Ｓｔとを参照して、新たな歩数Ｓｔを
Ｓｔ←Ｓｔ＋Ｖｓ
で算出する。そして、ＣＰＵ１０は、算出された新たな歩数Ｓｔを用いて、歩数データＤｕを更新する。
【０１４６】
一方、ステップ４９において、ＣＰＵ１０は、横揺れスピードＨｓを歩数Ｓｔに加算して、次のステップ５０に処理を進める。具体的には、ＣＰＵ１０は、横揺れスピードデータＤｔに格納された横揺れスピードＨｓと、歩数データＤｕに格納された歩数Ｓｔとを参照して、新たな歩数Ｓｔを
Ｓｔ←Ｓｔ＋Ｈｓ
で算出する。そして、ＣＰＵ１０は、算出された新たな歩数Ｓｔを用いて、歩数データＤｕを更新する。
【０１４７】
このように、上記ステップ４７〜ステップ４９の処理では、縦揺れスピードＶｓと横揺れスピードＨｓとを比較して、速度が速い方を歩数Ｓｔに加算することによって新たな歩数Ｓｔを算出している。例えば、プレイヤがコントローラ７を腰等に装着している場合、コントローラ７の横揺れがほとんど検出されないため、横揺れスピードＨｓが小さくなって、縦揺れスピードＶｓが歩数Ｓｔに加算される対象に採用される可能性が高くなる。一方、プレイヤがコントローラ７を手に把持している場合、コントローラ７の大きな横揺れが検出されるため、横揺れスピードＨｓが大きくなって、横揺れスピードＨｓが歩数Ｓｔに加算される対象に採用される可能性が高くなる。
【０１４８】
ステップ５０において、ＣＰＵ１０は、ステップ４８またはステップ４９で加算された歩数Ｓｔを用いて、プレイヤキャラクタＰＣを仮想ゲーム空間内で移動させ、モニタ２に表示して、処理を次のステップに進める。具体的には、ＣＰＵ１０は、歩数データＤｕに格納された歩数Ｓｔを参照し、当該歩数Ｓｔに応じた歩数でプレイヤキャラクタＰＣを動作／移動させる。また、ＣＰＵ１０は、仮想ゲーム空間におけるプレイヤキャラクタＰＣの位置を決定して、プレイヤキャラクタ位置データＤｖを更新する。そして、ＣＰＵ１０は、プレイヤキャラクタＰＣが配置された仮想ゲーム空間をモニタ２に表示する（図１０参照）。
【０１４９】
次に、ＣＰＵ１０は、縦揺れタイマーデータＤｗに格納されているカウント値および横揺れタイマーデータＤｘに格納されているカウント値にそれぞれ１を加算して、縦揺れタイマーデータＤｗおよび横揺れタイマーデータＤｘを更新する（ステップ５１）。そして、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ５２）。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合に上記ステップ４２に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【０１５０】
このように、上述したゲーム処理によれば、コントローラ７に内蔵された加速度センサ７０１から出力されるデータを用いて、当該コントローラ７を装着または把持するプレイヤの歩数を正確に判定することができる。例えば、プレイヤの身体の上下の移動に応じた加速度が主に生じるような部位にコントローラ７を装着する場合や、プレイヤが腕を振ることによる加速度が主に生じるような部位にコントローラ７を把持している場合等でも、プレイヤの正しい歩数を算出することができ、プレイヤの携帯方法が制限されずに自由にコントローラ７を取り扱うことができる。
【０１５１】
なお、上述したゲーム処理では、縦揺れスピードＶｓと横揺れスピードＨｓとを比較して、コントローラ７に与えられる揺れが、縦揺れ主体なのか横揺れ主体なのかを判断しているが、他のパラメータを比較して判断してもかまわない。以下、図１６を用いて、他のパラメータを比較して判断するゲーム処理を説明する。なお、図１６は、ゲーム装置本体５において実行されるゲーム処理の流れの他の例を示すフローチャートである。
【０１５２】
図１６において、ステップ１２１〜ステップ１２６の処理は、図１２を用いて説明した上記ステップ４１〜ステップ４６の処理と同様であるため、詳細な説明を省略する。ステップ１２６の横揺れスピードＨｓを算出する処理の後、ＣＰＵ１０は、次のステップ１２７に処理を進める。
【０１５３】
ステップ１２７において、ＣＰＵ１０は、横揺れスピードＨｓの振幅に対する縦揺れスピードＶｓの振幅の比ｒを算出し、処理を次のステップに進める。例えば、ＣＰＵ１０は、重力方向成分Ｖｗの絶対値Ｖｗａの変化における直前の極大値を、縦揺れスピードＶｓの振幅ａｍｐＶとして取得する。また、ＣＰＵ１０は、水平方向成分ベクトルＨｖｅｃの大きさＨｗａの変化における直前の極大値を、横揺れスピードＨｓの振幅ａｍｐＨとして取得する。そして、ＣＰＵ１０は、縦揺れスピードＶｓの振幅ａｍｐＶと、横揺れスピードＨｓの振幅ａｍｐＨとを用いて、比ｒを
ｒ＝ａｍｐＶ／ａｍｐＨ
で算出する。
【０１５４】
次に、ＣＰＵ１０は、上記ステップ１２７で算出した比ｒが係数Ｋより大きいか否かを判断する（ステップ１２８）。例えば、プレイヤがコントローラ７を装着して足踏みする場合の比ｒと、コントローラ７を把持して足踏みする場合の比ｒとを、それぞれ実験的に求め、それらの比ｒを区別可能な閾値が係数Ｋとして予め設定される。そして、ＣＰＵ１０は、ｒ＞Ｋの場合、処理を次のステップ１２９に進める。一方、ＣＰＵ１０は、ｒ≦Ｋの場合、処理を次のステップ１３０に進める。
【０１５５】
ステップ１２９〜ステップ１３３の処理は、図１２を用いて説明した上記ステップ４８〜ステップ５２の処理と同様であるため、詳細な説明を省略する。
【０１５６】
このように、ゲーム処理の他の例では、縦揺れスピードＶｓの振幅ａｍｐＶと横揺れスピードＨｓの振幅ａｍｐＨとの比を用いて、振幅比が所定値以上の方を歩数Ｓｔに加算することによって新たな歩数Ｓｔを算出している。例えば、プレイヤがコントローラ７を腰等に装着している場合、コントローラ７の横揺れがほとんど検出されないため、横揺れスピードＨｓの振幅ａｍｐＨが小さくなって、縦揺れスピードＶｓが歩数Ｓｔに加算される対象に採用される可能性が高くなる。一方、プレイヤがコントローラ７を手に把持している場合、コントローラ７の大きな横揺れが検出されるため、横揺れスピードＨｓの振幅ａｍｐＨが大きくなって、横揺れスピードＨｓが歩数Ｓｔに加算される対象に採用される可能性が高くなる。
【０１５７】
また、上述したゲーム処理では、重力方向成分Ｖｗの絶対値Ｖｗａの極大値間隔を用いて縦揺れスピードＶｓを算出し、水平方向成分ベクトルＨｖｅｃの大きさＨｗａの極大値間隔を用いて横揺れスピードＨｓを算出しているが、他の方法によって縦揺れスピードＶｓおよび横揺れスピードＨｓを算出してもかまわない。以下、図１７および図１８を参照して、縦揺れスピードＶｓおよび横揺れスピードＨｓを算出する処理の他の例を説明する。なお、図１７は、図１２におけるステップ４５または図１６におけるステップ１２５の縦揺れスピードＶｓを算出する処理の他の例の詳細な動作を示すサブルーチンである。図１８は、図１２におけるステップ４６または図１６におけるステップ１２６の横揺れスピードＨｓを算出する処理の他の例の詳細な動作を示すサブルーチンである。
【０１５８】
図１７において、ステップ１４０〜ステップ１４９の処理は、図１３を用いて説明した上記ステップ８０〜ステップ８９の処理と同様であるため、詳細な説明を省略する。ステップ１４８で経過時間Ｖｔが最短時間Ｖｔｍｉｎ以上と判断された後、またはステップ１４９で最短時間Ｖｔｍｉｎの値によって経過時間Ｖｔの値を置き換えられた後、ＣＰＵ１０は、次のステップ１５０に処理を進める。
【０１５９】
ステップ１５０において、ＣＰＵ１０は、縦揺れの山の高さＶｈを取得し、処理を次のステップに進める。具体的には、ＣＰＵ１０は、前回の処理で算出されている最終の絶対値Ｖｗａｌの値を用いて、縦揺れの山の高さＶｈとして取得する。
【０１６０】
次に、ＣＰＵ１０は、縦揺れの山の時間間隔ＶＴを予測して（ステップ１５１）、処理を次のステップに進める。例えば、図１９に示すように、ＣＰＵ１０は、絶対値Ｖｗａの変化が直線的な波形であると仮定して、上記ステップ１５１において直前の絶対値Ｖｗａの極大値から次に到来する絶対値Ｖｗａの極大値までの時間間隔ＶＴを予測する。例えば、ＣＰＵ１０は、時間間隔ＶＴを、
ＶＴ＝Ｖｈ＊２／｜ｄ｜
で算出する。ここで、ｄは、現時点の絶対値Ｖｗａと最後の絶対値Ｖｗａｌとの差分値（すなわち、１フレームあたりの絶対値Ｖｗａの変化量）である。図１９から明らかなように、時間間隔ＶＴに対する絶対値Ｖｗａの変化量は、縦揺れの山の高さＶｈの２倍となる。つまり、｜ｄ｜＊ＶＴ＝２＊Ｖｈとなるため、上記数式を用いて時間間隔ＶＴを求めることができる。
【０１６１】
次に、ＣＰＵ１０は、縦揺れスピードＶｓの目標値Ｖｓｄを算出して（ステップ１５２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、縦揺れの山からの経過時間データＤｊに格納されている経過時間Ｖｔを参照して、目標値Ｖｓｄを
Ｖｓｄ＝Ｍ／Ｖｔ
で算出する。ここで、Ｍは、第１の係数であり、例えばＭ＝０．２５である。そして、ＣＰＵ１０は、算出した目標値Ｖｓｄを用いて、縦揺れの目標値データＤｋを更新する。
【０１６２】
次に、ＣＰＵ１０は、縦揺れスピードＶｓを算出して（ステップ１５３）、次のステップに処理を進める。例えば、ＣＰＵ１０は、縦揺れの目標値データＤｋに格納されている縦揺れスピードＶｓの目標値Ｖｓｄおよび縦揺れスピードデータＤｌに格納されている縦揺れスピードＶｓを参照して、新たな縦揺れスピードＶｓを
Ｖｓ←Ｖｓ＋（Ｖｓｄ−Ｖｓ）＊０．１
で算出する。そして、ＣＰＵ１０は、算出した新たな縦揺れスピードＶｓを用いて、縦揺れスピードデータＤｌを更新する。
【０１６３】
上記ステップ１５３における縦揺れスピードＶｓを算出する処理においては、上記ステップ９１と同様に、縦揺れスピードＶｓが目標値Ｖｓｄに少しずつ近づく計算をしている。これは、短期的な周期変化（すなわち、時間間隔ＶＴの変化）が、縦揺れスピードＶｓの算出結果に影響することを低減するためである。また、図１９に示すように時間間隔ＶＴの予測において、絶対値Ｖｗａが直線的な変化をする仮定をしているため、実際の変化波形と異なり極大値付近での算出誤差が大きくなるが、目標値Ｖｓｄに少しずつ近づく計算をすることによって当該誤差を吸収することができる。なお、このような効果を期待しない場合、上記ステップ１５３における縦揺れスピードＶｓを算出する処理においても、目標値Ｖｓｄをそのまま縦揺れスピードＶｓにしてもかまわない。
【０１６４】
次に、ステップ１５４において、ＣＰＵ１０は、重力方向成分の絶対値データＤｆに格納されている現時点の絶対値Ｖｗａの値によって最終の絶対値Ｖｗａｌの値を置き換え、最終の絶対値データＤｇを更新する。また、ＣＰＵ１０は、絶対値変化量データＤｈに格納されている現時点の絶対値変化量Ｖｗａｈの値によって最終の絶対値変化量Ｖｗａｈｌの値を置き換え、最終の絶対値変化量データＤｉを更新して、当該サブルーチンによる処理を終了する。
【０１６５】
一方、絶対値Ｖｗａが閾値Ａ以下の場合（ステップ１４５でＮｏ）、または絶対値Ｖｗａが最終の絶対値Ｖｗａｌ以上の場合（ステップ１４６でＮｏ）、ステップ１５５の処理が行われる。ステップ１５５において、ＣＰＵ１０は、上記ステップ１４４で取得した経過時間Ｖｔが最長時間Ｖｔｍａｘ（例えば、Ｖｔｍａｘ＝２０）より長いか否かを判断する。そして、ＣＰＵ１０は、経過時間Ｖｔが最長時間Ｖｔｍａｘより長い場合、次のステップ１５６に処理を進める。一方、ＣＰＵ１０は、経過時間Ｖｔが最長時間Ｖｔｍａｘ以下の場合、上記ステップ１５１に処理を進める。
【０１６６】
ステップ１５６において、ＣＰＵ１０は、縦揺れスピードＶｓを減衰させて、上記ステップ１５４に処理を進める。例えば、ＣＰＵ１０は、縦揺れスピードデータＤｌに格納されている縦揺れスピードＶｓを参照して、新たな縦揺れスピードＶｓを
Ｖｓ←Ｖｓ＊０．９
で減衰させる。そして、ＣＰＵ１０は、減衰させた新たな縦揺れスピードＶｓを用いて、縦揺れスピードデータＤｌを更新する。
【０１６７】
図１８において、ステップ１６０〜ステップ１６８の処理は、図１６を用いて説明した上記ステップ１００〜ステップ１０８の処理と同様であるため、詳細な説明を省略する。ステップ１６７で経過時間Ｈｔが最短時間Ｈｔｍｉｎ以上と判断された後、またはステップ１６８で最短時間Ｈｔｍｉｎの値によって経過時間Ｈｔの値を置き換えられた後、ＣＰＵ１０は、次のステップ１６９に処理を進める。
【０１６８】
ステップ１６９において、ＣＰＵ１０は、横揺れの山の高さＨｈを取得し、処理を次のステップに進める。具体的には、ＣＰＵ１０は、前回の処理で算出されている最終の大きさＨｗａｌの値を用いて、横揺れの山の高さＨｈとして取得する。
【０１６９】
次に、ＣＰＵ１０は、横揺れの山の時間間隔ＨＴを予測して（ステップ１７０）、処理を次のステップに進める。例えば、ＣＰＵ１０は、絶対値Ｖｗａと同様に、大きさＨｗａの変化が直線的な波形であると仮定して、上記ステップ１７０において直前の大きさＨｗａの極大値から次に到来する大きさＨｗａの極大値までの時間間隔ＨＴを予測する。例えば、ＣＰＵ１０は、時間間隔ＨＴを、
ＨＴ＝Ｈｈ＊２／｜ｅ｜
で算出する。ここで、ｅは、現時点の大きさＨｗａと最後の大きさＨｗａｌとの差分値（すなわち、１フレームあたりの大きさＨｗａの変化量）である。
【０１７０】
次に、ＣＰＵ１０は、横揺れスピードＨｓの目標値Ｈｓｄを算出して（ステップ１７１）、次のステップに処理を進める。例えば、ＣＰＵ１０は、横揺れの山からの経過時間データＤｒに格納されている経過時間Ｈｔを参照して、目標値Ｈｓｄを
Ｈｓｄ＝Ｎ／Ｈｔ
で算出する。ここで、Ｎは、第２の係数であり、例えばＮ＝０．５である。そして、ＣＰＵ１０は、算出した目標値Ｈｓｄを用いて、横揺れの目標値データＤｓを更新する。
【０１７１】
次に、ＣＰＵ１０は、横揺れスピードＨｓを算出して（ステップ１７２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、横揺れの目標値データＤｓに格納されている横揺れスピードＨｓの目標値Ｈｓｄおよび横揺れスピードデータＤｔに格納されている横揺れスピードＨｓを参照して、新たな横揺れスピードＨｓを
Ｈｓ←Ｈｓ＋（Ｈｓｄ−Ｈｓ）＊０．１
で算出する。そして、ＣＰＵ１０は、算出した新たな横揺れスピードＨｓを用いて、横揺れスピードデータＤｔを更新する。
【０１７２】
上記ステップ１７２における横揺れスピードＨｓを算出する処理においては、上記ステップ１１０と同様に、横揺れスピードＨｓが目標値Ｈｓｄに少しずつ近づく計算をしている。これは、短期的な周期変化（すなわち、時間間隔ＨＴの変化）が、横揺れスピードＨｓの算出結果に影響することを低減するためである。また、時間間隔ＨＴの予測においても、大きさＨｗａが直線的な変化をする仮定をしているため、実際の変化波形と異なり極大値付近での算出誤差が大きくなるが、目標値Ｈｓｄに少しずつ近づく計算をすることによって当該誤差を吸収することができる。なお、このような効果を期待しない場合、上記ステップ１７２における横揺れスピードＨｓを算出する処理においても、目標値Ｈｓｄをそのまま横揺れスピードＨｓにしてもかまわない。
【０１７３】
次に、ステップ１７３において、ＣＰＵ１０は、水平方向成分ベクトルの大きさデータＤｎに格納されている現時点の大きさＨｗａの値によって最終の大きさＨｗａｌの値を置き換え、最終の大きさデータＤｏを更新する。また、ＣＰＵ１０は、大きさ変化量データＤｐに格納されている現時点の大きさ変化量Ｈｗａｈの値によって最終の大きさ変化量Ｈｗａｈｌの値を置き換え、最終の大きさ変化量データＤｑを更新して、当該サブルーチンによる処理を終了する。
【０１７４】
一方、大きさＨｗａが閾値Ｂ以下の場合（ステップ１６４でＮｏ）、または大きさＨｗａが最終の大きさＨｗａｌ以上の場合（ステップ１６５でＮｏ）、ステップ１７４の処理が行われる。ステップ１７４において、ＣＰＵ１０は、上記ステップ１６３で取得した経過時間Ｈｔが最長時間Ｈｔｍａｘ（例えば、Ｈｔｍａｘ＝４０）より長いか否かを判断する。そして、ＣＰＵ１０は、経過時間Ｈｔが最長時間Ｈｔｍａｘより長い場合、次のステップ１７５に処理を進める。一方、ＣＰＵ１０は、経過時間Ｈｔが最長時間Ｈｔｍａｘ以下の場合、上記ステップ１７０に処理を進める。
【０１７５】
ステップ１７５において、ＣＰＵ１０は、横揺れスピードＨｓを減衰させて、上記ステップ１７３に処理を進める。例えば、ＣＰＵ１０は、横揺れスピードデータＤｔに格納されている横揺れスピードＨｓを参照して、新たな横揺れスピードＨｓを
Ｈｓ←Ｈｓ＊０．９
で減衰させる。そして、ＣＰＵ１０は、減衰させた新たな横揺れスピードＨｓを用いて、横揺れスピードデータＤｔを更新する。
【０１７６】
このように、上述した処理では、重力方向成分Ｖｗの絶対値Ｖｗａの極大値を用いて極大値間の時間間隔ＶＴを予測して縦揺れスピードＶｓを算出している。また、水平方向成分ベクトルＨｖｅｃの大きさＨｗａの極大値を用いて極大値間の時間間隔ＨＴを予測して横揺れスピードＨｓを算出している。このような極大値を利用した周期予測を用いても、縦揺れスピードＶｓおよび横揺れスピードＨｓを算出することができる。
【０１７７】
なお、上述した歩数算出処理においては、縦揺れの山を検出した際の経過時間Ｖｔが最長時間Ｖｔｍａｘより長い場合や、横揺れの山を検出した際の経過時間Ｈｔが最長時間Ｈｔｍａｘより長い場合、縦揺れスピードＶｓおよび横揺れスピードＨｓをそれぞれ減衰させる処理をしている。これは、直前の縦揺れの山や横揺れの山を検出してから次の縦揺れの山や横揺れの山が検出されるまでの時間が長くなったとき、プレイヤがコントローラ７を装着または把持して足踏みしていないと判断するための処理であり、最長時間ＶｔｍａｘおよびＨｔｍａｘの値は処理周期等に応じて当該判断の閾値を設定すればよい。上述した値の設定例（Ｖｔｍａｘ＝２０、Ｈｔｍａｘ＝４０）は、極大値を検出する処理が１／２００秒毎に行われる場合の一例である。
【０１７８】
また、上述した歩数算出処理においては、縦揺れの山を検出した際の経過時間Ｖｔが最短時間Ｖｔｍｉｎより短い場合や、横揺れの山を検出した際の経過時間Ｈｔが最短時間Ｈｔｍｉｎより短い場合、経過時間ＶｔおよびＨｔをそれぞれ最短時間ＶｔｍｉｎおよびＨｔｍｉｎに変更して処理している。これは、プレイヤがコントローラ７を装着または把持して足踏みする状態を前提にするとあり得ない極大値が検出された場合の対応であり、最短時間ＶｔｍｉｎおよびＨｔｍｉｎの値は処理周期等に応じて当該対応の閾値を設定すればよい。上述した値の設定例（Ｖｔｍｉｎ＝４、Ｈｔｍｉｎ＝８）は、極大値を検出する処理が１／２００秒毎に行われる場合の一例である。
【０１７９】
また、上述した歩数算出処理で算出される歩数Ｓｔは、仮想ゲーム空間におけるプレイヤキャラクタＰＣが２歩移動するモーション（例えば、プレイヤキャラクタＰＣが右足を踏み出してから左足を踏み出して再び右足を踏み出すまでのモーション）を１Ｓｔとしたパラメータである。そして、この歩数Ｓｔの定義に応じて、目標値ＶｓｄおよびＨｓｄを算出する際の第１の係数Ｍおよび第２の係数Ｎも設定される。したがって、目標値ＶｓｄおよびＨｓｄを算出する際の第１の係数Ｍおよび第２の係数Ｎは、それぞれ上記歩数Ｓｔの定義に応じて設定すればよい。例えば、仮想ゲーム空間におけるプレイヤキャラクタＰＣが１歩移動するモーションを１Ｓｔとする場合、目標値Ｖｓｄを算出する際の第１の係数Ｍを０．５、目標値Ｈｓｄを算出する際の第２の係数Ｎを１．０に設定すればよい。
【０１８０】
また、上述した歩数算出処理においては、加速度センサ７０１から得られる３軸方向の加速度をそれぞれ示す加速度データを用いているが、２軸方向の加速度をそれぞれ示す加速度データを用いてもかまわない。この場合、当該２軸方向に対して垂直方向へ生じる加速度に対する分析ができなくなるが、当該垂直方向のみに加速度が生じるような状態が非常に希であるために、２軸方向の加速度データを用いても同様の処理が可能となる。
【０１８１】
また、上述した歩数算出処理では、プレイヤがコントローラ７を装着または把持した状態で足踏みする歩数を計測する例を用いた。しかしながら、本発明の歩数算出処理は、コントローラ７を装着または把持した状態で、プレイヤが現実に歩行、ジョギング、ランニング等をする歩数を計測できることは言うまでもない。
【０１８２】
また、上述した歩数算出処理は、算出された歩数Ｓｔがゲームパラメータに利用されてプレイヤキャラクタＰＣが移動する例を示したが、他の処理に利用されてもかまわない。例えば、上述した歩数算出処理で算出された歩数Ｓｔの値をプレイヤの累積歩数として所定の表示装置に表示すれば、単純な歩数計として利用できる。また、上述した歩数算出処理で算出された歩数Ｓｔや単位時間あたりの歩数を示す縦揺れスピードＶｓおよび横揺れスピードＨｓを、プレイヤキャラクタＰＣの動作に関する他のゲームパラメータとして用いてもかまわない。
【０１８３】
また、上述した説明では、据置型のゲーム装置本体５で歩数算出処理を行う例を説明したが、携帯ゲーム装置にも適用することができる。例えば、携帯ゲーム装置の本体に加速度センサを搭載し、当該本体をユーザが装着または把持して足踏み、歩行、ジョギング、ランニング等をときに、当該加速度センサの出力を用いて歩数算出処理を実行する。そして、算出された歩数Ｓｔの値を携帯ゲーム装置に設けられた表示装置に表示したり、歩数Ｓｔを用いたゲーム処理を携帯ゲーム装置で行ったりする。このように本願発明を適用することで、携帯ゲーム装置等を歩数計として用いたり、ゲームを行ったりするには好適である。
【０１８４】
また、上述した説明では、ゲーム装置本体５へ別体のコントローラ７から加速度データを送信し、ゲーム装置本体５内で当該加速度データを用いてリアルタイムに歩数を算出する例を示したが、他の態様で歩数を算出してもかまわない。例えば、コントローラ７内に加速度データを時系列順に所定時間分記録する記録手段を搭載し、コントローラ７の記録手段に蓄積された所定時間分の加速度データを適宜ゲーム装置本体５に読み出して歩数算出処理を行ってもかまわない。このように、コントローラ７に所定時間分の加速度データを記録可能に構成することによって、ユーザがコントローラ７を持ち出し、その持ち出した際の加速度データを後でゲーム装置本体５内に読み込むことによって、持ち出した際のユーザの歩数等を算出することが可能となる。
【０１８５】
また、上述した説明では、コントローラ７からゲーム装置本体５へ加速度データを送信する例を示したが、他のデータをゲーム装置本体５へ送信してもかまわない。例えば、コントローラ７内で歩数Ｓｔや歩数Ｓｔを算出するまでの途中の情報を算出し、当該算出された情報を示すデータをゲーム装置本体５へ送信してもかまわない。また、上述したようにコントローラ７に所定時間分のデータが記録可能に構成されている場合、上記歩数Ｓｔや歩数Ｓｔを算出するまでの途中の情報をコントローラ７内に記録すれば、同様にゲーム装置本体５で適宜情報を読み出す歩数算出処理が可能となる。
【０１８６】
また、上述した説明では、据置型や携帯型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置や加速度センサが搭載された本体を有する情報処理装置にも適用することができる。例えば、前者の情報処理装置では、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が入力装置を装着または把持しているユーザの歩数を算出する等、入力装置に生じる加速度に基づいて様々な歩数算出処理を行うことができる。また、後者の情報処理装置は、本体に加わる加速度を検出する加速度センサを搭載し、当該加速度センサから出力される加速度データに応じた歩数算出処理を実行する情報処理装置であればよく、例えば一般的なパーソナルコンピュータ、携帯電話機、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）等のデバイスにも適用することができる。
【０１８７】
例えば、他の電話機との間で無線通信する通信部を備えた携帯電話機の場合には、携帯電話機本体に加速度センサが搭載される。そして、携帯電話機を装着または把持してユーザが足踏み、歩行、ジョギング、ランニング等をしたときに、携帯電話機に搭載された加速度センサからの出力値を用いて歩数算出処理を実行する。このように本願発明を適用することで、携帯電話機等を携帯するユーザの歩数を計測するには好適である。
【０１８８】
また、上述した説明では、コントローラ７とゲーム装置本体５とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置本体５とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置本体５の接続端子に接続する。
【０１８９】
また、上述したコントローラ７の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数、判定値、数式、処理順序等は、単なる一例に過ぎず他の値や数式や処理順序であっても、本発明を実現できることは言うまでもない。
【０１９０】
また、本発明の歩数算出プログラムは、光ディスク４等の外部記憶媒体を通じてゲーム装置本体５に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体５に供給されてもよい。また、歩数算出プログラムは、ゲーム装置本体５内部の不揮発性記憶装置に予め記録されていてもよい。なお、歩数算出プログラムを記憶する情報記憶媒体としては、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【０１９１】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【０１９２】
本発明に係る歩数算出プログラム、歩数算出装置、および歩数算出システムは、加速度センサから出力されるデータを用いてユーザの歩数を正確に判定することができ、ゲームコントローラ等の入力装置に与えられる動作に応じてゲーム処理、歩数計測、および他の情報処理等を行うプログラム、装置、およびシステムや、本体に与えられる動作に応じてゲーム処理、歩数計測、および他の情報処理等を行うプログラム、装置、およびシステムとして有用である。
【図面の簡単な説明】
【０１９３】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図４のコントローラ７の下筐体を外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】図３のコントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図９Ａ】コントローラ７に縦揺れが生じる場合にコントローラ７に作用する重力方向の加速度の波形の一例を示す図
【図９Ｂ】コントローラ７に横揺れが生じる場合にコントローラ７に作用する水平方向の加速度の波形の一例を示す図
【図１０】プレイヤの足踏み動作に応じてモニタ２に表示されるゲーム画像の一例を示す図
【図１１】ゲーム装置本体５のメインメモリに記憶される主なデータを示す図
【図１２】ゲーム装置本体５において実行されるゲーム処理の流れの一例を示すフローチャート
【図１３】図１２におけるステップ４５の縦揺れスピードＶｓを算出する処理の一例の詳細な動作を示すサブルーチン
【図１４】図１２におけるステップ４６の横揺れスピードＨｓを算出する処理の一例の詳細な動作を示すサブルーチン
【図１５Ａ】コントローラ７に縦揺れが生じている状態における重力方向成分Ｖｗの絶対値Ｖｗａの変化の一例を示すグラフ
【図１５Ｂ】コントローラ７に横揺れが生じている状態における水平方向成分ベクトルＨｖｅｃの大きさＨｗａの変化の一例を示すグラフ
【図１６】ゲーム装置本体５において実行されるゲーム処理の流れの他の例を示すフローチャート
【図１７】図１２におけるステップ４５または図１６におけるステップ１２５の縦揺れスピードＶｓを算出する処理の他の例の詳細な動作を示すサブルーチン
【図１８】図１２におけるステップ４６または図１６におけるステップ１２６の横揺れスピードＨｓを算出する処理の他の例の詳細な動作を示すサブルーチン
【図１９】直前の絶対値Ｖｗａの極大値から次に到来する絶対値Ｖｗａの極大値までの時間間隔ＶＴを予測する一例を示す図
【符号の説明】
【０１９４】
１…ゲームシステム
２…モニタ
２ａ、７０６…スピーカ
３…ゲーム装置
４…光ディスク
５…ゲーム装置本体
１０…ＣＰＵ
１１…システムＬＳＩ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２、２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３１…入出力プロセッサ
３２…ＧＰＵ
３３…ＤＳＰ
３４…ＶＲＡＭ
３５…内部メインメモリ
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
８…マーカ
【図１】
0005131908.tif 000002
【図２】
0005131908.tif 000003
【図３】
0005131908.tif 000004
【図４】
0005131908.tif 000005
【図５】
0005131908.tif 000006
【図６】
0005131908.tif 000007
【図７】
0005131908.tif 000008
【図８】
0005131908.tif 000009
【図９Ａ】
0005131908.tif 000010
【図９Ｂ】
0005131908.tif 000011
【図１０】
0005131908.tif 000012
【図１１】
0005131908.tif 000013
【図１２】
0005131908.tif 000014
【図１３】
0005131908.tif 000015
【図１４】
0005131908.tif 000016
【図１５Ａ】
0005131908.tif 000017
【図１５Ｂ】
0005131908.tif 000018
【図１６】
0005131908.tif 000019
【図１７】
0005131908.tif 000020
【図１８】
0005131908.tif 000021
【図１９】
0005131908.tif 000022