(57)【要約】  前方後方到達逆運動学計算を用いたスケルトンモデルの姿勢の決定結果の妥当性を向上できるスケルトンモデル更新装置、スケルトンモデル更新方法及びプログラムを提供する。姿勢データ取得部（５２）は、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する。初期位置決定部（５４）は、姿勢データに基づいてターゲットノードが移動すべき位置を決定する。初期位置決定部（５４）は、前方後方到達逆運動学計算におけるターゲットノードの親のノードの初期位置を、当該ターゲットノードが移動すべき位置と、スケルトンモデルの所与の姿勢と、に基づいて決定する。姿勢更新部（５６）は、ターゲットノードが移動すべき位置と親のノードの初期位置とに基づいて、当該親のノードの新たな位置の決定を含む前方後方到達逆運動学計算を実行することで、スケルトンモデルの姿勢を更新する。
2020070928.tif 000002
【特許請求の範囲】
【請求項１】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する位置決定部と、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する初期位置決定部と、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項２】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、
前記姿勢データに基づいて、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定する回転特定部と、
前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する回転決定部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項３】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する第１姿勢更新部と、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する第２姿勢更新部と、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する第３姿勢更新部と、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する第４姿勢更新部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項４】
前記姿勢データに基づいて軸足を推定する推定部と、
前記前方後方到達逆運動学計算における腰部のノードの初期位置を、前記軸足の位置に基づいて決定する決定部と、をさらに含む、
ことを特徴とする請求項１から３のいずれか一項に記載のスケルトンモデル更新装置。
【請求項５】
前記推定部は、さらに、ユーザが着座姿勢であるか立ち姿勢であるかを推定し、
前記推定部は、前記ユーザが立ち姿勢であると推定された場合に、前記軸足を推定する、
ことを特徴とする請求項４に記載のスケルトンモデル更新装置。
【請求項６】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得するステップと、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定するステップと、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定するステップと、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項７】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得するステップと、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新するステップと、
前記姿勢データに基づいて、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定するステップと、
前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項８】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得するステップと、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新するステップと、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新するステップと、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新するステップと、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項９】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する手順、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する手順、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する手順、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する手順、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１０】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する手順、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する手順、
前記姿勢データに基づいて、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定する手順、
前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する手順、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１１】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する手順、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する手順、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する手順、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する手順、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する手順、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケルトンモデル更新装置、スケルトンモデル更新方法及びプログラムに関する。
【背景技術】
【０００２】
ユーザが装着する複数のトラッカーの姿勢を示すデータに基づいて、当該ユーザに対応付けられるスケルトンモデルの姿勢を決定する技術が知られている。【０００３】
当該技術においては、例えばスケルトンモデルに含まれる複数のノードのうちの一部に対応付けられるトラッカーの姿勢を示すデータが繰り返し取得される。そして当該データに基づいて、複数のノード及び複数のボーンが含まれる木構造のスケルトンモデルの姿勢が繰り返し決定される。【０００４】
また、逆運動学（ＩＫ）計算の一種である前方後方到達逆運動学（ＦＡＢＲＩＫ）計算の技術が知られている。図４及び図５には、４個のノードを含むノード群に対するＦＡＢＲＩＫ計算の一例が模式的に示されている。【０００５】
ＦＡＢＲＩＫ計算では、まず、前方到達フェーズの処理が実行される。図４に示すように、前方到達フェーズの処理では、まず、位置Ｐ（ｃ１）にあるノードが、当該ノードに対応付けられるトラッカーの姿勢を示すデータに基づいて特定される、当該ノードが移動すべき位置Ｔ１に移動する。以下、トラッカーに対応付けられるノードをターゲットノードと呼ぶこととする。図４では移動後のターゲットノードの位置がＰ（ｃ２）と示されている。そして当該ターゲットノードの親のノードが、位置Ｐ（ｐ１）から位置Ｐ（ｐ２）に移動する。ここで位置Ｐ（ｐ２）は、位置Ｐ（ｃ２）から位置Ｐ（ｐ１）に向かう方向に、位置Ｐ（ｃ２）から、位置Ｐ（ｐ１）と位置Ｐ（ｃ１）との間の長さｄ１だけ離れた位置である。そのため当該２つのノードの間の長さは一定に保たれる。以下、同様にして、位置Ｐ（ｏ１）にあるノードが位置Ｐ（ｏ２）に移動し、位置Ｐ（ｎ１）にあるノードが位置Ｐ（ｎ２）に移動する。【０００６】
その後、後方到達フェーズの処理が実行される。図５に示すように、後方到達フェーズの処理では、ターゲットノードからいちばん離れたノードが、位置Ｐ（ｎ２）から位置Ｐ（ｎ３）に移動する。ここで位置Ｐ（ｎ３）は、ＦＡＢＲＩＫ計算の開始時における当該ノードの位置Ｐ（ｎ１）と同じ位置である。そして当該ノードの子のノードが、位置Ｐ（ｏ２）から位置Ｐ（ｏ３）に移動する。ここで位置Ｐ（ｏ３）は、位置Ｐ（ｎ３）から位置Ｐ（ｏ２）に向かう方向に、位置Ｐ（ｎ３）から、位置Ｐ（ｏ１）と位置Ｐ（ｎ１）との間の長さｄ３だけ離れた位置である。そのため当該２つのノードの間の長さは一定に保たれる。以下、同様にして、位置Ｐ（ｐ２）にあるノードが位置Ｐ（ｐ３）に移動し、位置Ｐ（ｃ２）にあるノードが位置Ｐ（ｃ３）に移動する。【０００７】
そして当該ターゲットノードの位置と位置Ｔ１との間の長さが所定の閾値以下になるまで、前方到達フェーズと後方到達フェーズとが繰り返し実行される。なお当該ターゲットノードの位置と位置Ｔ１との間の長さが所定の閾値以下にならなくても、前方到達フェーズと後方到達フェーズとが所定回数（例えば１０回）繰り返し実行されるとＦＡＢＲＩＫ計算は終了される。【０００８】
以上のようにＦＡＢＲＩＫ計算では、ターゲットノードが移動すべき位置、各ノードの現在の位置、及び、所与のノード間の長さに基づく簡易なアルゴリズムによってスケルトンモデルの姿勢が決定される。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のように、ＦＡＢＲＩＫ計算では簡易なアルゴリズムによってスケルトンモデルの姿勢が決定されるものの、その結果、関節が自然な方向に曲がらず、人体ではありえないような姿勢が決定されることがある。【００１０】
またＦＡＢＲＩＫ計算による姿勢の決定では、トラッカーから腕方向を軸とした手の回転の情報を取得できるにも関わらず、この情報が腕方向を軸とした肘の回転に反映されない。【００１１】
また木構造のスケルトンモデルに対するＦＡＢＲＩＫ計算では、複数のターゲットノードのそれぞれを起点とした、当該ターゲットノードを含むノード群に対して独立した前方到達フェーズの処理を実行する必要がある。そのため例えば胸から肩までのような、全体としての姿勢が大きくゆがむべきではない、木構造のスケルトンモデルの結節点の近傍の複数のノードの全体としての姿勢が、前方到達フェーズの処理により大きくゆがむことがある。【００１２】
本発明は上記課題に鑑みてなされたものであって、その目的の１つは、前方後方到達逆運動学計算を用いたスケルトンモデルの姿勢の決定結果の妥当性を向上できるスケルトンモデル更新装置、スケルトンモデル更新方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明に係るスケルトンモデル更新装置は、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する位置決定部と、前記ターゲットノードが移動すべき位置と当該ノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する初期位置決定部と、前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、を含む。【００１４】
また、本発明に係る別のスケルトンモデル更新装置は、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、前記姿勢データに基づいて、前記ターゲットノードと当該ノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定する回転特定部と、前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する回転決定部と、を含む。【００１５】
また、本発明に係るさらに別のスケルトンモデル更新装置は、木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する第１姿勢更新部と、前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する第２姿勢更新部と、前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する第３姿勢更新部と、前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する第４姿勢更新部と、を含む。【００１６】
また、本発明の一態様では、前記姿勢データに基づいて軸足を推定する推定部と、前記前方後方到達逆運動学計算における腰部のノードの初期位置を、前記軸足の位置に基づいて決定する決定部と、をさらに含む。【００１７】
この態様では、前記推定部は、さらに、ユーザが着座姿勢であるか立ち姿勢であるかを推定し、前記推定部は、前記ユーザが立ち姿勢であると推定された場合に、前記軸足を推定してもよい。【００１８】
また、本発明に係るスケルトンモデル更新方法は、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得するステップと、前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定するステップと、前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定するステップと、前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新するステップと、を含む。【００１９】
また、本発明に係る別のスケルトンモデル更新方法は、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得するステップと、前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新するステップと、前記姿勢データに基づいて、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定するステップと、前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定するステップと、を含む。【００２０】
また、本発明に係るさらに別のスケルトンモデル更新方法は、木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得するステップと、前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新するステップと、前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新するステップと、前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新するステップと、前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新するステップと、を含む。【００２１】
また、本発明に係るプログラムは、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する手順、前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する手順、前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する手順、前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する手順、をコンピュータに実行させる。【００２２】
また、本発明に係る別のプログラムは、木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する手順、前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する手順、前記姿勢データに基づいて、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転を特定する手順、前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する手順、をコンピュータに実行させる。【００２３】
また、本発明に係るさらに別のプログラムは、木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する手順、前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する手順、前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する手順、前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する手順、前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する手順、をコンピュータに実行させる。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施形態に係るエンタテインメントシステムの一例を示す構成図である。
【図２】本発明の一実施形態に係るエンタテインメント装置の一例を示す構成図である。
【図３】スケルトンモデルの一例を示す図である。
【図４】ＦＡＢＲＩＫ計算における前方到達フェーズの一例を模式的に示す図である。
【図５】ＦＡＢＲＩＫ計算における後方到達フェーズの一例を模式的に示す図である。
【図６】本発明の一実施形態に係るエンタテインメント装置で実装される機能の一例を示す機能ブロック図である。
【図７】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【図８】ノードの初期位置の決定の一例を説明する図である。
【図９】ノードの初期位置の決定の一例を説明する図である。
【図１０】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【図１１】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【図１２】ノードの回転の決定の一例を説明する図である。
【図１３】ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルの学習の一例を示す図である。
【図１４】図１３に示す学習済の機械学習モデルを用いた、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定の一例を示す図である。
【図１５】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【図１６】ユーザがゲームをプレイしている様子の一例を示す模式図である。
【発明を実施するための形態】
【００２５】
図１は、本発明の一実施形態に係るエンタテインメントシステム１０の構成の一例を示す図である。図２は、本実施形態に係るエンタテインメント装置１４の構成の一例を示す図である。
【００２６】
図１に示すように、本実施形態に係るエンタテインメントシステム１０は、複数のトラッカー１２（図１の例ではトラッカー１２ａ〜１２ｅ）とエンタテインメント装置１４と中継装置１６とディスプレイ１８とカメラマイクユニット２０とを含んでいる。
【００２７】
本実施形態に係るトラッカー１２は、例えば、当該トラッカー１２の位置や向きを追跡するためのデバイスである。ここでトラッカー１２が、例えばカメラ、慣性センサ（ＩＭＵ）、地磁気センサ（方位センサ）、加速度センサ、モーションセンサ、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）モジュールなどといった各種センサを備えていてもよい。そしてトラッカー１２は、当該トラッカー１２が備えるセンサによる計測結果であるセンシングデータに基づいて、当該トラッカー１２の姿勢を特定してもよい。
【００２８】
また例えば、後述するカメラマイクユニット２０に含まれるカメラ２０ａが撮影する、トラッカー１２の像が含まれる画像に基づいて、当該トラッカー１２の姿勢が特定されてもよい。
【００２９】
本実施形態ではトラッカー１２ａ、トラッカー１２ｂ、トラッカー１２ｃ、トラッカー１２ｄ、トラッカー１２ｅは、それぞれ、ユーザの頭部、左手、右手、左足、右足に装着される。ここで図１に示すようにトラッカー１２ｂやトラッカー１２ｃはユーザによって手で把持されるものであってもよい。本実施形態ではトラッカー１２ａ、トラッカー１２ｂ、トラッカー１２ｃ、トラッカー１２ｄ、トラッカー１２ｅによって特定される姿勢は、それぞれ、ユーザの頭部、左手、右手、左足、右足の姿勢に相当する。このように本実施形態では複数のトラッカー１２によって、ユーザの体に含まれる複数の部位の姿勢が特定されることとなる。
【００３０】
本実施形態に係るエンタテインメント装置１４は、例えばゲームコンソール、ＤＶＤプレイヤ、Ｂｌｕ−ｒａｙ（登録商標）プレイヤなどといったコンピュータである。本実施形態に係るエンタテインメント装置１４は、例えば記憶されている、あるいは、光ディスクに記録された、ゲームプログラムの実行やコンテンツの再生などによって映像や音声を生成する。そして本実施形態に係るエンタテインメント装置１４は、生成される映像を表す映像信号や生成される音声を表す音声信号を、中継装置１６を経由してディスプレイ１８に出力する。
【００３１】
本実施形態に係るエンタテインメント装置１４には、例えば図２に示すように、プロセッサ３０、記憶部３２、通信部３４、入出力部３６が含まれる。
【００３２】
プロセッサ３０は、例えばエンタテインメント装置１４にインストールされるプログラムに従って動作するＣＰＵ等のプログラム制御デバイスである。本実施形態に係るプロセッサ３０には、ＣＰＵから供給されるグラフィックスコマンドやデータに基づいてフレームバッファに画像を描画するＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）も含まれている。
【００３３】
記憶部３２は、例えばＲＯＭやＲＡＭ等の記憶素子やハードディスクドライブなどである。記憶部３２には、プロセッサ３０によって実行されるプログラムなどが記憶される。また、本実施形態に係る記憶部３２には、ＧＰＵにより画像が描画されるフレームバッファの領域が確保されている。
【００３４】
通信部３４は、例えば無線ＬＡＮモジュールなどの通信インタフェースなどである。
【００３５】
入出力部３６は、ＨＤＭＩ（登録商標）（Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）ポート、ＵＳＢポートなどの入出力ポートである。
【００３６】
本実施形態に係る中継装置１６は、エンタテインメント装置１４から出力される映像信号や音声信号を中継してディスプレイ１８に出力するコンピュータである。
【００３７】
本実施形態に係るディスプレイ１８は、例えば液晶ディスプレイ等であり、エンタテインメント装置１４から出力される映像信号が表す映像などを表示させる。
【００３８】
本実施形態に係るカメラマイクユニット２０は、例えば被写体を撮像した画像をエンタテインメント装置１４に出力するカメラ２０ａ及び周囲の音声を取得して当該音声を音声データに変換してエンタテインメント装置１４に出力するマイク２０ｂを含んでいる。また本実施形態に係るカメラ２０ａはステレオカメラである。
【００３９】
トラッカー１２と中継装置１６とは、例えば、無線によるデータの送受信が互いに可能になっている。エンタテインメント装置１４と中継装置１６とは、例えば、ＨＤＭＩケーブルやＵＳＢケーブルなどを介して接続されており、データの送受信が互いに可能になっている。中継装置１６とディスプレイ１８とは、例えば、ＨＤＭＩケーブルなどを介して接続されている。エンタテインメント装置１４とカメラマイクユニット２０とは、例えば、ＡＵＸケーブルなどを介して接続されている。
【００４０】
本実施形態では例えば、エンタテインメント装置１４によってゲームプログラムが実行されている際に、図３に示すスケルトンモデル４０における、ユーザの体に含まれる複数の部位の姿勢に応じたゲーム処理等の各種の処理が実行される。そして当該処理の結果に応じた映像が例えばディスプレイ１８に表示される。例えばスケルトンモデル４０の姿勢に応じたプレイヤオブジェクトのポリゴンモデルの映像がディスプレイ１８に表示される。
【００４１】
図３に示すように、本実施形態に係るスケルトンモデル４０には、頭部ノード４２ａ、左手ノード４２ｂ、右手ノード４２ｃ、左足ノード４２ｄ、右足ノード４２ｅが含まれている。頭部ノード４２ａは、トラッカー１２ａが装着されるユーザの頭部に相当する。左手ノード４２ｂは、トラッカー１２ｂが装着されるユーザの左手に相当する。右手ノード４２ｃは、トラッカー１２ｃが装着されるユーザの右手に相当する。左足ノード４２ｄは、トラッカー１２ｄが装着されるユーザの左足に相当する。右足ノード４２ｅは、トラッカー１２ｅが装着されるユーザの右足に相当する。
【００４２】
またスケルトンモデル４０には、上記のノード４２の他に、骨盤ノード４２ｆ、第１脊柱ノード４２ｇ、第２脊柱ノード４２ｈ、第３脊柱ノード４２ｉ、首ノード４２ｊが含まれる。本実施形態では例えば、骨盤ノード４２ｆが、スケルトンモデル４０全体におけるルートノードの役割を担う。また本実施形態では例えば、骨盤ノード４２ｆが、腰部のノードに相当する。
【００４３】
またスケルトンモデル４０には、さらに、左鎖骨ノード４２ｋ、左上腕ノード４２ｌ、左前腕ノード４２ｍ、右鎖骨ノード４２ｎ、右上腕ノード４２ｏ、右前腕ノード４２ｐが含まれている。
【００４４】
またスケルトンモデル４０には、さらに、左大腿部ノード４２ｑ、左ふくらはぎノード４２ｒ、左母指球ノード４２ｓ、右大腿部ノード４２ｔ、右ふくらはぎノード４２ｕ、右母指球ノード４２ｖが含まれている。
【００４５】
ここで図３に示すように、骨盤ノード４２ｆと第１脊柱ノード４２ｇとの間はボーン４４ａで接続されている。また第１脊柱ノード４２ｇと第２脊柱ノード４２ｈとの間はボーン４４ｂで接続されている。また第２脊柱ノード４２ｈと第３脊柱ノード４２ｉとの間はボーン４４ｃで接続されている。また第３脊柱ノード４２ｉと首ノード４２ｊとの間はボーン４４ｄで接続されている。また首ノード４２ｊと頭部ノード４２ａとの間はボーン４４ｅで接続されている。
【００４６】
そして第３脊柱ノード４２ｉと左鎖骨ノード４２ｋとの間はボーン４４ｆで接続されている。また左鎖骨ノード４２ｋと左上腕ノード４２ｌとの間はボーン４４ｇで接続されている。また左上腕ノード４２ｌと左前腕ノード４２ｍとの間はボーン４４ｈで接続されている。また左前腕ノード４２ｍと左手ノード４２ｂとの間はボーン４４ｉで接続されている。
【００４７】
そして第３脊柱ノード４２ｉと右鎖骨ノード４２ｎとの間はボーン４４ｊで接続されている。また右鎖骨ノード４２ｎと右上腕ノード４２ｏとの間はボーン４４ｋで接続されている。また右上腕ノード４２ｏと右前腕ノード４２ｐとの間はボーン４４ｌで接続されている。また右前腕ノード４２ｐと右手ノード４２ｃとの間はボーン４４ｍで接続されている。
【００４８】
そして骨盤ノード４２ｆと左大腿部ノード４２ｑとの間はボーン４４ｎで接続されている。また左大腿部ノード４２ｑと左ふくらはぎノード４２ｒとの間はボーン４４ｏで接続されている。また左ふくらはぎノード４２ｒと左足ノード４２ｄとの間はボーン４４ｐで接続されている。また左足ノード４２ｄと左母指球ノード４２ｓとの間はボーン４４ｑで接続されている。
【００４９】
そして骨盤ノード４２ｆと右大腿部ノード４２ｔとの間はボーン４４ｒで接続されている。また右大腿部ノード４２ｔと右ふくらはぎノード４２ｕとの間はボーン４４ｓで接続されている。また右ふくらはぎノード４２ｕと右足ノード４２ｅとの間はボーン４４ｔで接続されている。また右足ノード４２ｅと右母指球ノード４２ｖとの間はボーン４４ｕで接続されている。
【００５０】
図３には、初期状態におけるスケルトンモデル４０である、基本姿勢の（ここでは例えば、脚を開き腕を斜め下に下した、いわゆるＡポーズの）スケルトンモデル４０が示されている。
【００５１】
そして本実施形態では例えば、複数のトラッカー１２について特定される姿勢に基づくボディトラッキングが行える。ここでは例えば、スケルトンモデル４０に含まれる複数のノード４２のそれぞれについての、初期状態における基準の位置に対する位置及び初期状態における基準の向きに対する向きの決定が実行される。またスケルトンモデル４０に含まれる複数のボーン４４のそれぞれについての、初期状態における基準の向きに対する向きの決定が実行される。
【００５２】
ここで例えば、トラッカー１２ａについて特定される姿勢を示すデータに基づいて、頭部ノード４２ａの姿勢は決定できる。同様に、トラッカー１２ｂについて特定される姿勢を示すデータに基づいて、左手ノード４２ｂの姿勢は決定できる。また、トラッカー１２ｃについて特定される姿勢を示すデータに基づいて、右手ノード４２ｃの姿勢は決定できる。また、トラッカー１２ｄについて特定される姿勢を示すデータに基づいて、左足ノード４２ｄの姿勢は決定できる。また、トラッカー１２ｅについて特定される姿勢を示すデータに基づいて、右足ノード４２ｅの姿勢は決定できる。
【００５３】
また、骨盤ノード４２ｆの姿勢の決定も、例えば決定される頭部ノード４２ａの姿勢に基づいて可能である。ここで例えば、トラッカー１２ａ〜トラッカー１２ｅについて特定される姿勢に基づいて、学習済の機械学習モデルを用いた骨盤ノード４２ｆの姿勢の推定が実行されてもよい。また同様に、第３脊柱ノード４２ｉの姿勢の決定も可能である。
【００５４】
そして以上の決定結果や推定結果に基づいて、前方後方到達逆運動学（ＦＡＢＲＩＫ）計算によって、残りのノード４２の位置及び向きやボーン４４の向きを決定することが考えられる。ここでは例えば、頭部ノード４２ａ、左手ノード４２ｂ、右手ノード４２ｃ、左足ノード４２ｄ、及び、右足ノード４２ｅが、ＦＡＢＲＩＫにおけるエフェクタに相当することとなる。そしてエフェクタの運動に応じて、スケルトンモデル４０に含まれるノード４２の位置及び向きやボーン４４の向きが決定される。
【００５５】
図４、及び、図５は、ＦＡＢＲＩＫ計算の一例を模式的に示す図である。図４、及び、図５では、一例として、右手ノード４２ｃ、右鎖骨ノード４２ｎ、右上腕ノード４２ｏ、及び、右前腕ノード４２ｐについて実行されるＦＡＢＲＩＫ計算が示されている。
【００５６】
図４では、スケルトンモデル４０における右手ノード４２ｃ、右鎖骨ノード４２ｎ、右上腕ノード４２ｏ、及び、右前腕ノード４２ｐの現在の位置がそれぞれＰ（ｃ１）、Ｐ（ｎ１）、Ｐ（ｏ１）、Ｐ（ｐ１）と示されている。またボーン４４ｍ、ボーン４４ｌ、ボーン４４ｋ、ボーン４４ｊの長さは、それぞれｄ１、ｄ２、ｄ３であることとする。
【００５７】
この状況でトラッカー１２ｃの計測結果に基づいて、右手ノード４２ｃが移動すべき位置Ｔ１が特定されたとする。
【００５８】
以下、ＦＡＢＲＩＫ計算における前方到達フェーズについて図４を参照しながら説明する。
【００５９】
前方到達フェーズでは、まず、右手ノード４２ｃが位置Ｔ１に移動する。図４では移動後の右手ノード４２ｃの位置がＰ（ｃ２）と示されている。そして右前腕ノード４２ｐが、位置Ｐ（ｃ２）から位置Ｐ（ｐ１）に向かう方向に、位置Ｐ（ｃ２）から長さｄ１だけ離れた位置Ｐ（ｐ２）に移動する。そして右上腕ノード４２ｏが、位置Ｐ（ｐ２）から位置Ｐ（ｏ１）に向かう方向に、位置Ｐ（ｐ２）から長さｄ２だけ離れた位置Ｐ（ｏ２）に移動する。そして右鎖骨ノード４２ｎが、位置Ｐ（ｏ２）から位置Ｐ（ｎ１）に向かう方向に、位置Ｐ（ｏ２）から長さｄ３だけ離れた位置Ｐ（ｎ２）に移動する。
【００６０】
このように、ＦＡＢＲＩＫ計算における前方到達フェーズの処理には、トラッカー１２に対応付けられるノード４２が移動すべき位置と当該ノード４２の親のノード４２の現在の位置とに基づく当該親のノード４２の新たな位置の決定が含まれている。また当該決定は、トラッカー１２に対応付けられるノード４２と当該親のノード４２との間の長さを一定に保つという条件で実行される。以下、トラッカー１２に対応付けられるノード４２をターゲットノードと呼ぶこととする。
【００６１】
以下、ＦＡＢＲＩＫ計算における後方到達フェーズについて図５を参照しながら説明する。
【００６２】
まず、右鎖骨ノード４２ｎが、位置Ｐ（ｎ２）から位置Ｐ（ｎ３）に移動する。ここで図５に示す位置Ｐ（ｎ３）は、ＦＡＢＲＩＫ計算の開始時における右鎖骨ノード４２ｎの位置Ｐ（ｎ１）と同じ位置である。そして右上腕ノード４２ｏが、位置Ｐ（ｎ３）から位置Ｐ（ｏ２）に向かう方向に、位置Ｐ（ｎ３）から長さｄ３だけ離れた位置Ｐ（ｏ３）に移動する。そして右前腕ノード４２ｐが、位置Ｐ（ｏ３）から位置Ｐ（ｐ２）に向かう方向に、位置Ｐ（ｏ３）から長さｄ２だけ離れた位置Ｐ（ｐ３）に移動する。そして右手ノード４２ｃが、位置Ｐ（ｐ３）から位置Ｐ（ｃ２）に向かう方向に、位置Ｐ（ｐ３）から長さｄ１だけ離れた位置Ｐ（ｃ３）に移動する。
【００６３】
そして右手ノード４２ｃの位置と位置Ｔ１との間の長さが所定の閾値以下になるまで、前方到達フェーズと後方到達フェーズとが繰り返し実行される。なお右手ノード４２ｃの位置と位置Ｔ１との間の長さが所定の閾値以下にならなくても、前方到達フェーズと後方到達フェーズとが所定回数（例えば１０回）繰り返し実行されるとＦＡＢＲＩＫ計算は終了される。
【００６４】
このように、ＦＡＢＲＩＫ計算では簡易なアルゴリズムによってスケルトンモデル４０の姿勢が決定される。しかしその結果、関節が自然な方向に曲がらず、人体ではありえないようなスケルトンモデル４０の姿勢が決定されることがある。
【００６５】
またＦＡＢＲＩＫ計算による姿勢の決定では、トラッカー１２ｂやトラッカー１２ｃから腕方向を軸とした手の回転の情報を取得できるにも関わらず、この情報が腕方向を軸とした肘の回転に反映されない。
【００６６】
また木構造のスケルトンモデル４０に対するＦＡＢＲＩＫ計算では、複数のターゲットノードのそれぞれを起点とした、当該ターゲットノードを含むノード群に対して独立した前方到達フェーズの処理を実行する必要がある。そのため例えば胸から肩までのような、全体としての姿勢が大きくゆがむべきではない、木構造のスケルトンモデル４０の結節点の近傍の複数のノード４２の全体としての姿勢が、前方到達フェーズの処理により大きくゆがむことがある。
【００６７】
以上のように、ＦＡＢＲＩＫ計算を用いたスケルトンモデル４０の姿勢の決定において、妥当性が低い結果が得られることがあった。
【００６８】
このことを踏まえ本実施形態では以下のようにして、ＦＡＢＲＩＫ計算を用いたスケルトンモデル４０の姿勢の決定結果の妥当性を向上できるようにした。
【００６９】
以下、本実施形態に係るエンタテインメント装置１４の機能、及び、本実施形態に係るエンタテインメント装置１４で実行される処理についてさらに説明する。
【００７０】
図６は、本実施形態に係るエンタテインメント装置１４の機能の一例を示す機能ブロック図である。なお、本実施形態に係るエンタテインメント装置１４で、図６に示す機能のすべてが実装される必要はなく、また、図６に示す機能以外の機能が実装されていても構わない。
【００７１】
図６に示すように、本実施形態に係るエンタテインメント装置１４には、機能的には例えば、スケルトンモデルデータ記憶部５０、姿勢データ取得部５２、初期位置決定部５４、姿勢更新部５６、が含まれる。
【００７２】
スケルトンモデルデータ記憶部５０は、記憶部３２を主として実装される。姿勢データ取得部５２は、プロセッサ３０及び入出力部３６を主として実装される。初期位置決定部５４、姿勢更新部５６は、プロセッサ３０を主として実装される。
【００７３】
以上の機能は、コンピュータであるエンタテインメント装置１４にインストールされた、以上の機能に対応する指令を含むプログラムをプロセッサ３０で実行することにより実装されてもよい。このプログラムは、例えば、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ読み取り可能な情報記憶媒体を介して、あるいは、インターネットなどを介してエンタテインメント装置１４に供給されてもよい。
【００７４】
スケルトンモデルデータ記憶部５０は、本実施形態では例えば、スケルトンモデル４０の姿勢を示すスケルトンモデルデータを記憶する。スケルトンモデルデータには、例えば、複数のノード４２のそれぞれの位置を示すデータが含まれていてもよい。またスケルトンモデルデータにはノード４２の向きを示すデータが含まれていてもよい。ここで向きを示すデータは例えば三軸方向それぞれについての回転量を示すデータであってもよい。またスケルトンモデルデータには、ボーン４４の位置及び向きを示すデータが含まれていてもよい。ボーン４４の位置及び向きは、当該ボーン４４の両端のノード４２の位置に基づいて一意に定まる。
【００７５】
また本実施形態では、スケルトンモデルデータ記憶部５０には、最新のスケルトンモデル４０の姿勢を示すスケルトンモデルデータが記憶されていることとする。またスケルトンモデルデータ記憶部５０には、Ａポーズなどの基本姿勢をとる初期状態のスケルトンモデル４０の姿勢を示すスケルトンモデルデータも記憶されていることとする。
【００７６】
姿勢データ取得部５２は、本実施形態では例えば、所定のサンプリングレートで特定されるトラッカー１２ａ〜１２ｅの位置及び向きを示す姿勢データを取得する。ここで例えば、所定のサンプリングレートでトラッカー１２が、当該トラッカー１２の位置及び向きを示す姿勢データを生成してもよい。そして生成に応じてトラッカー１２が、当該トラッカー１２が生成した姿勢データを、中継装置１６経由でエンタテインメント装置１４に送信してもよい。また例えば、カメラマイクユニット２０が、所定のサンプリングレートでトラッカー１２ａ〜１２ｅの位置及び向きを示す姿勢データを生成してもよい。そして生成に応じてカメラマイクユニット２０が、当該カメラマイクユニット２０が生成した姿勢データを、エンタテインメント装置１４に送信してもよい。
【００７７】
初期位置決定部５４は、本実施形態では例えば、姿勢データ取得部５２が取得する姿勢データに基づいて、いくつかのノード４２の初期位置を決定する。
【００７８】
姿勢更新部５６は、本実施形態では例えば、スケルトンモデル４０の姿勢を更新する。ここでは例えば、スケルトンモデルデータ記憶部５０に記憶されているスケルトンモデルデータが更新される。姿勢更新部５６は、姿勢データ取得部５２が取得する姿勢データ、及び、初期位置決定部５４が決定する初期位置に基づいて、前方後方到達逆運動学（ＦＡＢＲＩＫ）計算によりスケルトンモデル４０の姿勢を更新してもよい。
【００７９】
ここで、本実施形態に係るエンタテインメント装置１４で行われる処理の流れの一例を、図７に例示するフロー図を参照しながら説明する。
【００８０】
まず、姿勢データ取得部５２が、トラッカー１２によって生成される最新の特定タイミングにおける当該トラッカー１２の位置及び向きを示す姿勢データを取得する（Ｓ１０１）。ここでは例えば、姿勢データ取得部５２は、トラッカー１２ａ〜１２ｅのそれぞれについての、当該トラッカー１２の位置及び向きを示す姿勢データを取得する。
【００８１】
そして、姿勢更新部５６が、Ｓ１０１に示す処理で取得された姿勢データに基づいて、骨盤ノード４２ｆの位置及び向きを推定する（Ｓ１０２）。ここで例えば骨盤ノード４２ｆの代わりに、第３脊柱ノード４２ｉの位置及び向きが推定されてもよい。また例えば、骨盤ノード４２ｆ及び第３脊柱ノード４２ｉの位置及び向きが推定されてもよい。
【００８２】
そして姿勢更新部５６が、Ｓ１０２に示す処理の推定結果に基づいて、スケルトンモデルデータを更新する（Ｓ１０３）。Ｓ１０３に示す処理では例えば、最新のスケルトンモデル４０及び初期状態のスケルトンモデル４０を回転させる処理が実行される。
【００８３】
そして初期位置決定部５４が、スケルトンモデル４０に含まれる一部のノード４２の初期位置を決定する（Ｓ１０４）。
【００８４】
ここでは例えば図８に示すように、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ｃの位置に基づいて、ターゲットノードである右手ノード４２ｃが移動すべき位置Ｔ２及び右手ノード４２ｃが向くべき向きＡ２が特定される。そして、向きＡ２に沿った、向きＡ２とは逆の向きに、位置Ｔ２から長さｄ１だけ離れた位置Ｐ２が、右手ノード４２ｃの親のノード４２である右前腕ノード４２ｐの初期位置として決定される。ここで長さｄ１は、上述のようにボーン４４ｍの長さである。
【００８５】
なおここで右前腕ノード４２ｐの現在の位置と位置Ｐ２とを所定の重みにより補間した位置が右前腕ノード４２ｐの初期位置として決定されてもよい。
【００８６】
また当該重みが、トラッカー１２ｃの速度に対応付けられる、右手ノード４２ｃの現在の位置と位置Ｔ２との間の長さに基づいて、決定されてもよい。例えば右手ノード４２ｃの現在の位置と位置Ｔ２との間の長さが短いほど、右前腕ノード４２ｐの現在の位置に近い位置が右前腕ノード４２ｐの初期位置として決定されるようにしてもよい。このようにすれば例えばプレイヤが手首だけを回転させた場合にプレイヤオブジェクトの肘が大きく動いてしまう事態を避けることができる。
【００８７】
また図９に示すように、例えば、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ｅの位置に基づいて、ターゲットノードである右足ノード４２ｅが移動すべき位置Ｔ３及び右足ノード４２ｅが向くべき向きＡ３が特定される。そして向きＡ３を基準の向きとした際の左右方向を軸として所定の角度（例えば９０度）回転させた方向に、位置Ｔ３から長さｄ４だけ離れた位置Ｐ３が、右足ノード４２ｅの親のノード４２である右ふくらはぎノード４２ｕの初期位置として決定される。ここで長さｄ４は、ボーン４４ｔの長さである。
【００８８】
なお上述の例と同様に右ふくらはぎノード４２ｕの現在の位置と位置Ｐ３とを補間した位置が右ふくらはぎノード４２ｕの初期位置として決定されてもよい。
【００８９】
同様にして例えば、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ｂの位置に基づいて、ターゲットノードである左手ノード４２ｂが移動すべき位置及び左手ノード４２ｂが向くべき向きが特定される。また、同様にして例えば、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ｄの位置に基づいて、ターゲットノードである左足ノード４２ｄが移動すべき位置及び左足ノード４２ｄが向くべき向きが特定される。そして、同様にして例えば、左前腕ノード４２ｍ、左ふくらはぎノード４２ｒ、などといった他のノード４２の初期位置が決定される。
【００９０】
そして姿勢更新部５６が、頭部ノード４２ａ、左手ノード４２ｂ、右手ノード４２ｃ、左足ノード４２ｄ、右足ノード４２ｅのリストを引数ＴＮｓとする、図１０のＳ２０１〜Ｓ２０８に示す処理を実行する（Ｓ１０５）。
【００９１】
ノード４２のリストＴＮｓを引数とするＳ１０５に示す処理では、ＴＮｓに含まれるすべての要素ｎｉに対して、以下で説明するＳ２０１〜Ｓ２０６に示す処理が繰り返し実行される。
【００９２】
まず、姿勢更新部５６が、ｎｉがルートノード（骨盤ノード４２ｆ）であるか否かを確認する（Ｓ２０１）。ｎｉがルートノードである場合は（Ｓ２０１：Ｙ）、Ｓ２０１〜Ｓ２０６に示す処理のループから抜ける。
【００９３】
ｎｉがルートノードでない場合は（Ｓ２０１：Ｎ）、姿勢更新部５６が、Ｓ２０１〜Ｓ２０６に示す処理の今回のループにおける、前方到達ノード群を表すリストＦＮｓにｎｉを追加する（Ｓ２０２）。
【００９４】
そして姿勢更新部５６が、ｎｉを、ｎｉの親のノード４２に更新する（Ｓ２０３）。
【００９５】
そして姿勢更新部５６が、ｎｉが子のノード４２の数が２以上であるノード４２、又は、ルートノードである骨盤ノード４２ｆであるか否かを確認する（Ｓ２０４）。
【００９６】
ｎｉが子のノード４２の数が２以上であるノード４２でもルートノードでもない場合は（Ｓ２０４：Ｎ）、Ｓ２０２に示す処理に戻る。
【００９７】
ｎｉが子のノード４２の数が２以上であるノード４２、又は、ルートノードである場合は（Ｓ２０５：Ｙ）、姿勢更新部５６が、サブルートノード群を表すリストＲＮｓにｎｉを追加する（Ｓ２０５）。
【００９８】
そして姿勢更新部５６が、ＦＮｓに含まれるノード４２に対して、図４を参照して説明したＦＡＢＲＩＫの前方到達フェーズの処理を実行する（Ｓ２０６）。
【００９９】
ＴＮｓに含まれるすべての要素ｎｉに対して、Ｓ２０１〜Ｓ２０６に示す処理が実行されると、姿勢更新部５６が、リストＲＮｓに含まれるノード４２があるか否かを確認する（Ｓ２０７）。
【０１００】
リストＲＮｓに含まれるノード４２がある場合は（Ｓ２０７：Ｙ）、姿勢更新部５６が、リストＲＮｓを次のループにおけるリストＴＮｓに設定して（Ｓ２０８）、Ｓ２０１に示す処理に戻る。この場合、次にＳ２０２に示す処理が実行される際には、新たなリストＦＮｓにｎｉが追加されることとなる。
【０１０１】
Ｓ２０７に示す処理でリストＲＮｓに含まれるノード４２がないことが確認された場合は（Ｓ２０７：Ｎ）、Ｓ１０５に示す処理は終了となる。
【０１０２】
以上の処理により図３に示すスケルトンモデル４０については、Ｓ２０１〜Ｓ２０８に示す処理の初回のループにおいて、前方到達ノード群を表すリストＦＮｓが５個生成される。１番目のＦＮｓには例えば、頭部ノード４２ａ、及び、首ノード４２ｊが含まれることとなる。２番目のＦＮｓには例えば、左手ノード４２ｂ、左前腕ノード４２ｍ、左上腕ノード４２ｌ、及び、左鎖骨ノード４２ｋが含まれることとなる。３番目のＦＮｓには例えば、右手ノード４２ｃ、右前腕ノード４２ｐ、右上腕ノード４２ｏ、及び、右鎖骨ノード４２ｎが含まれることとなる。４番目のＦＮｓには例えば、左足ノード４２ｄ、左ふくらはぎノード４２ｒ、及び、左大腿部ノード４２ｑが含まれることとなる。５番目のＦＮｓには例えば、右足ノード４２ｅ、右ふくらはぎノード４２ｕ、及び、右大腿部ノード４２ｔが含まれることとなる。
【０１０３】
そしてＳ２０１〜Ｓ２０８に示す処理の初回のループにおけるサブルートノード群のリストＲＮｓには、ルートノードである骨盤ノード４２ｆ、及び、第３脊柱ノード４２ｉが含まれる。これらのノード４２は、スケルトンモデル４０における結節点のノード４２である。
【０１０４】
そしてＳ２０１〜Ｓ２０８に示す処理の２回目のループでは前方到達ノード群のリストＦＮｓが１個生成される。当該リストＦＮｓには、骨盤ノード４２ｆ、第１脊柱ノード４２ｇ、第２脊柱ノード４２ｈ、及び、第３脊柱ノード４２ｉが含まれる。そしてＳ２０１〜Ｓ２０８に示す処理の２回目のループではサブルートノード群のリストＲＮｓは空となる。
【０１０５】
Ｓ１０５に示す処理が終了すると、姿勢更新部５６が、図１１のＳ３０１〜Ｓ３０９に示す処理を実行する（Ｓ１０６）。
【０１０６】
Ｓ１０６に示す処理では、Ｓ２０１〜Ｓ２０８に示す処理の初回のループにおけるリストＲＮｓに含まれるすべてのノード４２（サブルートノード）のそれぞれを引数とする、Ｓ３０１〜Ｓ３０９に示す処理が実行される。ここで上述のようにＲＮｓに含まれるノード４２の数が２である場合は、Ｓ３０１〜Ｓ３０９に示す処理は２回実行されることとなる。なおＳ３０１〜Ｓ３０９に示す処理は、Ｓ１０５に示す処理が実行されたノード４２に対して実行される。そのため例えば、左母指球ノード４２ｓ、及び、右母指球ノード４２ｖについてはスケルトンモデル４０に含まれないこととして、Ｓ３０１〜Ｓ３０９に示す処理は実行される。
【０１０７】
まず、姿勢更新部５６が、引数であるサブルートノードを要素ｎに設定する（Ｓ３０１）。
【０１０８】
そして、姿勢更新部５６が、後方到達ノード群を表すリストＢＮｓにｎを追加する（Ｓ３０２）。
【０１０９】
そして、姿勢更新部５６が、ｎが子のノード４２の数が１であるノード４２であるか否かを確認する（Ｓ３０３）。
【０１１０】
ｎが子のノード４２の数が１であるノード４２である場合は（Ｓ３０３：Ｙ）、姿勢更新部５６が、ｎを、ｎの子のノード４２に更新して（Ｓ３０４）、Ｓ３０２に示す処理に戻る。
【０１１１】
ｎが子のノード４２の数が１であるノード４２でない場合は（Ｓ３０３：Ｎ）、姿勢更新部５６が、ＢＮｓに含まれるノード４２に対して、図５を参照して説明したＦＡＢＲＩＫの後方到達フェーズの処理を実行する（Ｓ３０５）。なおここでＢＮｓに含まれるノード４２の数が１である場合は、後方到達フェーズの処理は実行されない。
【０１１２】
そして、姿勢更新部５６が、ｎが子のノード４２の数が２以上であるノード４２であるか否かを確認する（Ｓ３０６）。
【０１１３】
ｎが子のノード４２の数が２以上であるノード４２である場合は（Ｓ３０６：Ｙ）、姿勢更新部５６が、ルートトランスフォームの処理を実行する（Ｓ３０７）。
【０１１４】
Ｓ３０７に示すルートトランスフォームの処理とは、例えば、スケルトンモデル４０に含まれる一部のノード４２の姿勢を更新する処理を指す。ｎが子のノード４２の数が２以上であるノード４２である場合は、ｎはスケルトンモデル４０に含まれる結節点のノード４２であることとなる。ここで例えば、当該結節点のノード４２を含む複数のノード４２の位置及び向きが、基本姿勢における相対的な位置及び向きと合致するよう更新されてもよい。
【０１１５】
ここで例えば第３脊柱ノード４２ｉを基準にして、第３脊柱ノード４２ｉ、左鎖骨ノード４２ｋ、及び、右鎖骨ノード４２ｎの姿勢が更新されるようにしてもよい。ここで例えば、左上腕ノード４２ｌの位置に基づいて、第３脊柱ノード４２ｉと第２脊柱ノード４２ｈとを接続するボーン４４ｃを軸とした、基本姿勢を基準とした左上腕ノード４２ｌの回転が特定されてもよい。また例えば、右上腕ノード４２ｏの位置に基づいて、ボーン４４ｃを軸とした、基本姿勢を基準とした右上腕ノード４２ｏの回転が特定されてもよい。そしてこのようにして特定される２つの回転に基づいて、クォータニオンの球面線形補間を実行することで、第３脊柱ノード４２ｉ、左鎖骨ノード４２ｋ、及び、右鎖骨ノード４２ｎの姿勢が更新されるようにしてもよい。また同様に、骨盤ノード４２ｆを基準にして、骨盤ノード４２ｆ、左大腿部ノード４２ｑ、及び、右大腿部ノード４２ｔの姿勢が更新されるようにしてもよい。
【０１１６】
そして、初期位置決定部５４が、スケルトンモデル４０に含まれるいくつかのノード４２についての初期位置を決定する（Ｓ３０８）。例えば、Ｓ３０７に示す処理で第３脊柱ノード４２ｉ、左鎖骨ノード４２ｋ、及び、右鎖骨ノード４２ｎの姿勢が更新されたとする。この場合、更新後のこれらのノード４２の姿勢、及び、スケルトンモデル４０の基本姿勢に基づいて、右上腕ノード４２ｏ、左上腕ノード４２ｌ、首ノード４２ｊ、及び、第２脊柱ノード４２ｈの初期位置が決定される。ここで例えば基本姿勢におけるサブルートノードである第３脊柱ノード４２ｉを基準とする位置や向きとなるよう、これらのノード４２の初期位置が決定されてもよい。また例えば、Ｓ３０７に示す処理で骨盤ノード４２ｆ、左大腿部ノード４２ｑ、及び、右大腿部ノード４２ｔの姿勢が更新されたとする。この場合、更新後のこれらのノード４２の姿勢、及び、スケルトンモデル４０の基本姿勢に基づいて、第１脊柱ノード４２ｇの初期位置が決定されてもよい。例えば基本姿勢におけるサブルートノードである骨盤ノード４２ｆを基準とする位置や向きとなるよう、第１脊柱ノード４２ｇの初期位置が決定されてもよい。
【０１１７】
そして、ｎの子のノード４２である要素ｎｃｉのすべてについて、ｎｃｉを次のサブルートノードとした、Ｓ３０１以降の処理が再帰的に繰り返し実行される（Ｓ３０９）。
【０１１８】
Ｓ３０６に示す処理でｎが子のノード４２の数が２以上であるノード４２でないことが確認された場合は（Ｓ３０６：Ｎ）、当該サブルートノードにおけるＳ３０９に示す処理が終了される。すなわちｎが、Ｓ３０１〜Ｓ３０９に示す処理が実行されるスケルトンモデル４０における末端のノード４２である場合は、当該サブルートノードにおけるＳ３０９に示す処理が終了される。
【０１１９】
そして、Ｓ３０９に示す処理が実行される要素ｎｃｉがなくなった際に、Ｓ１０６に示す処理は終了される。
【０１２０】
Ｓ１０６に示す処理では例えば、骨盤ノード４２ｆ、左大腿部ノード４２ｑ、左ふくらはぎノード４２ｒ、及び、左足ノード４２ｄに対して後方到達フェーズの処理が実行される。
【０１２１】
また、骨盤ノード４２ｆ、右大腿部ノード４２ｔ、右ふくらはぎノード４２ｕ、及び、右足ノード４２ｅに対して後方到達フェーズの処理が実行される。
【０１２２】
また、骨盤ノード４２ｆ、第１脊柱ノード４２ｇ、第２脊柱ノード４２ｈ、及び、第３脊柱ノード４２ｉに対して後方到達フェーズの処理が実行される。
【０１２３】
また、第３脊柱ノード４２ｉ、首ノード４２ｊ、及び、頭部ノード４２ａに対して後方到達フェーズの処理が実行される。
【０１２４】
また、第３脊柱ノード４２ｉ、左鎖骨ノード４２ｋ、左上腕ノード４２ｌ、左前腕ノード４２ｍ、及び、左手ノード４２ｂに対して後方到達フェーズの処理が実行される。
【０１２５】
また、第３脊柱ノード４２ｉ、右鎖骨ノード４２ｎ、右上腕ノード４２ｏ、右前腕ノード４２ｐ、及び、右手ノード４２ｃに対して後方到達フェーズの処理が実行される。
【０１２６】
Ｓ１０６に示す処理が終了すると、姿勢更新部５６が、ターゲットノードにおける位置の誤差が所定の閾値以下であるか否かを確認する（Ｓ１０７）。ここでは例えば、ノード４２の位置と、トラッカー１２の計測結果に基づいて特定される当該ノード４２が移動すべき位置と、の間の長さの合計が所定の閾値以下であるか否かが確認される。
【０１２７】
ターゲットノードにおける位置の誤差が所定の閾値以下でない場合は（Ｓ１０７：Ｎ）、姿勢更新部５６が、Ｓ１０５に示す処理と同様の処理を実行する（Ｓ１０８）。そして、姿勢更新部５６が、Ｓ１０６に示す処理と同様の処理を実行する（Ｓ１０９）。そして、Ｓ１０７に示す処理に戻る。Ｓ１０８及びＳ１０９に示す処理では、上述のリストが再利用されるようにしてもよい。
【０１２８】
Ｓ１０７に示す処理において、ターゲットノードにおける位置の誤差が所定の閾値以下であることが確認された場合は（Ｓ１０７：Ｙ）、姿勢更新部５６は、姿勢が未決定であるノード４２の姿勢を更新する（Ｓ１１０）。なお、Ｓ１０８に示す処理、及び、Ｓ１０９に示す処理が、所定回数実行された場合に、ターゲットノードにおける位置の誤差が所定の閾値以下でなくてもＳ１１０に示す処理が実行されるようにしてもよい。
【０１２９】
Ｓ１１０に示す処理では例えば、左母指球ノード４２ｓ、及び、右母指球ノード４２ｖの姿勢が更新される。この場合、左母指球ノード４２ｓの姿勢は、左足ノード４２ｄの姿勢を基準とした相対的な姿勢が基本姿勢における当該相対的な姿勢となるよう更新されてもよい。また右母指球ノード４２ｖの姿勢は、右足ノード４２ｅの姿勢を基準とした相対的な姿勢が基本姿勢における当該相対的な姿勢となるよう更新されてもよい。
【０１３０】
そして、姿勢更新部５６が、ボーン４４の向き、及び、ノード４２の回転を更新して（Ｓ１１１）、Ｓ１０１に示す処理に戻る。そして新たに取得される最新の特定タイミングにおけるトラッカー１２の位置及び向きを示す姿勢データに基づく、Ｓ１０１〜Ｓ１１１に示す処理が実行される。このようにしてＳ１０１〜Ｓ１１１に示す処理は繰り返し実行されることとなる。
【０１３１】
ここでは例えば、ボーン４４の向きは、当該ボーン４４の両端のノード４２の位置に基づいて一意に特定可能である。ところが、ボーン４４を軸とした回転については、ボーン４４の両端のノード４２の位置からはわからない。
【０１３２】
そこでＳ１１１に示す処理では例えば、姿勢更新部５６が、姿勢データが示すトラッカー１２ｂやトラッカー１２ｃの回転を、腕に対する手首の曲がりの成分、基本姿勢に対する腕の回転の成分、及び、腕の方向を軸とした回転の成分に分離する。図１２には、右手ノード４２ｃにおけるボーン４４ｍに沿った方向を軸とした回転の成分がＱｒｏｌｌ１として示されている。
【０１３３】
そして姿勢更新部５６が、腕の方向を軸とした回転に基づいて、上腕や前腕の回転を決定する。ここでは例えば、右手ノード４２ｃについてのボーン４４ｍを軸とした回転の成分が、右前腕ノード４２ｐの腕の方向を軸とした回転Ｑｒｏｌｌ２、及び、右上腕ノード４２ｏの腕の方向を軸とした回転Ｑｒｏｌｌ３として決定される。同様に、左手ノード４２ｂについてのボーン４４ｉを軸とした回転の成分が、左前腕ノード４２ｍ、及び、左上腕ノード４２ｌの腕の方向を軸とした回転として決定される。
【０１３４】
ここで例えば、Ｑｒｏｌｌ１とＱｒｏｌｌ２との差や、Ｑｒｏｌｌ２とＱｒｏｌｌ３の差に、例えば６０度などの上限が予め設定されていてもよい。またＱｒｏｌｌ２の値として、Ｑｒｏｌｌ１の値に１以下の所定の係数を乗じた値が設定されてもよい。またＱｒｏｌｌ３の値として、Ｑｒｏｌｌ２の値に１以下の所定の係数を乗じた値が設定されてもよい。
【０１３５】
以上のように、本実施形態では例えば、Ｓ１０１に示す処理において姿勢データ取得部５２が、木構造のスケルトンモデル４０に含まれるターゲットノードの姿勢を示す姿勢データを取得する。そしてＳ１０４に示す処理において、初期位置決定部５４が、姿勢データに基づいてターゲットノードが移動すべき位置を決定する。そしてＳ１０４に示す処理において、初期位置決定部５４が、ＦＡＢＲＩＫ計算における当該ターゲットノードの親のノード４２の初期位置を、当該ターゲットノードが移動すべき位置と、スケルトンモデル４０の所与の姿勢に基づいて決定する。またＳ３０８に示す処理において、初期位置決定部５４が、いくつかのノード４２の初期位置を、ターゲットノードが移動すべき位置と、スケルトンモデル４０の所与の姿勢に基づいて決定する。
【０１３６】
上述の例では例えば、向きＡ２に沿った向きＡ２とは逆の向きに、右手ノード４２ｃが移動すべき位置Ｔ２から長さｄ１だけ離れた位置が、右前腕ノード４２ｐの初期位置についての所与の姿勢に相当する。また例えば、向きＡ３を基準の向きとした際の左右方向を軸として所定の角度（例えば９０度）回転させた方向に、位置Ｔ３から長さｄ４だけ離れた位置が、右ふくらはぎノード４２ｕの初期位置についての所与の姿勢に相当する。
【０１３７】
また基本姿勢におけるルートノードを基準とする所与の位置や向きが、右上腕ノード４２ｏ、左上腕ノード４２ｌ、首ノード４２ｊ、第２脊柱ノード４２ｈ、及び、第１脊柱ノード４２ｇの初期位置についての所与の姿勢に相当する。
【０１３８】
また、Ｓ１０５〜Ｓ１１１に示す処理において、姿勢更新部５６が、ターゲットノードが移動すべき位置と当該ターゲットノードの親のノード４２の初期位置とに基づいて、当該親のノード４２の新たな位置の決定を含むＦＡＢＲＩＫ計算を実行する。その結果、スケルトンモデル４０の姿勢が更新される。
【０１３９】
このようにして本実施形態によれば、ＦＡＢＲＩＫ計算を用いた姿勢の決定においても、関節が自然な方向に曲がらず、人体ではありえないような妥当性を欠く姿勢が決定されるおそれが下がる。その結果、スケルトンモデル４０の姿勢の決定結果の妥当性を向上できることとなる。
【０１４０】
また本実施形態では例えば、Ｓ１０１に示す処理において、姿勢データ取得部５２が、木構造のスケルトンモデル４０に含まれるターゲットノードの姿勢を示す姿勢データを取得する。そしてＳ１０２〜Ｓ１０９に示す処理において、姿勢更新部５６が、当該ターゲットノードの親のノード４２の新たな位置の決定を含むＦＡＢＲＩＫ計算を実行することで、スケルトンモデル４０の姿勢を更新する。そしてＳ１１１に示す処理において、姿勢更新部５６が、姿勢データに基づいて、ターゲットノードと当該ターゲットノードの親のノード４２とを接続するボーン４４を軸とした当該ターゲットノードの回転を特定する。そしてＳ１１１に示す処理において、姿勢更新部５６が、ターゲットノードの回転に基づいて、当該ターゲットノードの親のノード４２の回転を決定する。
【０１４１】
このようにして本実施形態によれば、トラッカー１２による計測結果に基づく腕方向を軸とした回転の決定が行えることとなる。その結果、スケルトンモデル４０の姿勢の決定結果の妥当性を向上できることとなる。
【０１４２】
また本実施形態では例えば、Ｓ１０１に示す処理において、姿勢データ取得部５２が、木構造のスケルトンモデル４０に含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードを含む複数のノード４２の姿勢を示す姿勢データを取得する。
【０１４３】
そしてＳ２０７に示す処理において、姿勢更新部５６が、姿勢データに基づいて、第１のターゲットノードを含む互いに接続された第１のノード群に対して、ＦＡＢＲＩＫ計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する。また同じくＳ２０７に示す処理において、姿勢更新部５６が、第２のターゲットノードを含む互いに接続された第２のノード群に対して、ＦＡＢＲＩＫ計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する。
【０１４４】
そしてＳ３０７に示す処理において、姿勢更新部５６が、第１のノード群及び第２のノード群の更新の後に、複数のノード４２の姿勢を更新する。ここでは例えば、当該複数のノード４２には、第１のノード群に含まれる、スケルトンモデル４０に含まれる結節点に最も近いノード４２と、第２のノード群に含まれる、スケルトンモデル４０に含まれる結節点に最も近いノード４２と、が含まれる。
【０１４５】
またＳ３０４に示す処理において、姿勢更新部５６が、ＦＡＢＲＩＫ計算における後方到達フェーズの処理によりスケルトンモデル４０の姿勢を更新する。
【０１４６】
本実施形態ではこのようにして、例えば胸から肩までのような、全体としての姿勢が大きくゆがむべきではない、木構造のスケルトンモデル４０の結節点の近傍の複数のノード４２の全体としての姿勢が大きくゆがむことを防ぐことができる。その結果、スケルトンモデル４０の姿勢の決定結果の妥当性を向上できることとなる。
【０１４７】
また、本実施形態のＳ１０２に示す処理において、姿勢更新部４６が、Ｓ１０１に示す処理で取得される姿勢データに基づいて、軸足を推定してもよい。
【０１４８】
以下の説明では、姿勢データが示す位置について、水平面上の座標値をＸＹ座標値と呼び、高さ方向の座標値をＺ座標値と呼ぶこととする。なお、Ｚ座標値は位置が上にあるほど大きな値であることとする。
【０１４９】
例えば、姿勢更新部４６が、Ｓ１０１に示す処理で取得された姿勢データが示す、左足に相当するトラッカー１２ｄのＺ座標値と、右足に相当するトラッカー１２ｅのＺ座標値と、を比較してもよい。
【０１５０】
そして、姿勢更新部４６が、Ｚ座標値の差が所定値よりも大きい場合に、下の方にある足、すなわち、Ｚ座標値が小さな方に対応する足を軸足と推定してもよい。例えば、Ｚ座標値の差が所定値よりも大きく、トラッカー１２ｄのＺ座標値の方がトラッカー１２ｅのＺ座標値よりも小さい場合は、左足が軸足と推定されてもよい。逆に、Ｚ座標値の差が所定値よりも大きく、トラッカー１２ｅのＺ座標値の方がトラッカー１２ｄのＺ座標値よりも小さい場合は、右足が軸足と推定されてもよい。
【０１５１】
そして姿勢更新部４６は、軸足の位置に基づいて、ＦＡＢＲＩＫ計算における骨盤ノード４２ｆ（腰部のノード）の初期位置を決定してもよい。
【０１５２】
例えば姿勢更新部４６は、軸足のＸＹ座標値と同じＸＹ座標値を、Ｓ１０２に示す処理における骨盤ノード４２ｆのＦＡＢＲＩＫ計算の初期位置におけるＸＹ座標値と決定してもよい。
【０１５３】
また例えば、Ｚ座標値の差が所定値より小さい場合などには、姿勢更新部４６は、いずれの足も軸足と推定しなくてもよい。この場合、姿勢更新部４６は、例えば、トラッカー１２ｄの位置とトラッカー１２ｅの位置を通る楕円上の位置のうち、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ａの位置を通る鉛直線に最も近い位置のＸＹ座標値を特定してもよい。そして特定されるＸＹ座標値が、Ｓ１０２に示す処理における骨盤ノード４２ｆのＦＡＢＲＩＫ計算の初期位置におけるＸＹ座標値と決定されてもよい。ここで当該楕円は、長軸方向の長さがトラッカー１２ｄの位置とトラッカー１２ｅの位置との間の長さであり、短軸方向の長さが所定の長さである楕円であってもよい。
【０１５４】
また、軸足のＸＹ座標値と同じＸＹ座標値と、トラッカー１２ｄの位置とトラッカー１２ｅの位置を通る楕円上の上述の位置のＸＹ座標値と、を線形補間したＸＹ座標値が、骨盤ノード４２ｆの初期位置におけるＸＹ座標値と決定されてもよい。
【０１５５】
線形補間における重みは、例えば、トラッカー１２ｄのＺ座標値と、トラッカー１２ｅのＺ座標値と、の差に基づいて決定されてもよい。例えば、当該Ｚ座標値の差が小さいほど、上述の楕円上の位置のＸＹ座標値に近いＸＹ座標値が、骨盤ノード４２ｆの初期位置におけるＸＹ座標値と決定されてもよい。そして、当該Ｚ座標値の差が大きいほど、軸足のＸＹ座標値と同じＸＹ座標値に近いＸＹ座標値が、骨盤ノード４２ｆの初期位置におけるＸＹ座標値と決定されてもよい。
【０１５６】
また、姿勢更新部４６は、以上のようにして決定される骨盤ノード４２ｆの初期位置におけるＸＹ座標値を、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ａの位置に基づいて補正してもよい。例えば、軸足あるいは両足の中心の位置からトラッカー１２ａの位置に向かう向きとは逆の向きに、骨盤ノード４２ｆの初期位置が水平面に沿って移動するよう、骨盤ノード４２ｆの初期位置におけるＸＹ座標値が補正されてもよい。例えば、軸足あるいは両足の中心の位置よりもトラッカー１２ａの位置が前にある場合は、骨盤ノード４２ｆの初期位置が後ろに移動するよう、骨盤ノード４２ｆの初期位置におけるＸＹ座標値が補正されてもよい。また、軸足あるいは両足の中心の位置よりもトラッカー１２ａの位置が後ろにある場合は、骨盤ノード４２ｆの初期位置が前に移動するよう、骨盤ノード４２ｆの初期位置におけるＸＹ座標値が補正されてもよい。
【０１５７】
そして、トラッカー１２ａの位置及び向きに基づいて、ボーン４４ｅ、ボーン４４ｄ、ボーン４４ｃ、ボーン４４ｂ、ボーン４４ａの初期位置、及び、骨盤ノード４２ｆのＦＡＢＲＩＫ計算の初期位置におけるＺ座標値が決定されてもよい。
【０１５８】
また、本実施形態において、姿勢更新部４６が、以下のようにして、学習済の機械学習モデルを用いてユーザが着座姿勢にあるか立ち姿勢にあるかを推定してもよい。そして、ユーザが立ち姿勢であると推定される場合に、上述のようにして軸足の推定処理、及び、軸足の推定結果に基づくＦＡＢＲＩＫ計算における骨盤ノード４２ｆ（腰部のノード）の初期位置の決定が行われるようにしてもよい。
【０１５９】
図１３は、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルの学習の一例を示す図である。図１３に示すように、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルには、入力層６０と、中間ブロック６２と、第１中間層６４と、第２中間層６６と、出力層６８と、が含まれている。
【０１６０】
本実施形態では例えば、図１３に示す機械学習モデルの学習において、それぞれ互いに異なるタイミングに対応付けられる、当該タイミングにおける、腰部（骨盤ノード４２ｆ）の回転によりオフセットされた（腰部の向きを基準とした）、頭部の向き、右足の位置を基準とした頭の位置、左足の位置を基準とした頭の位置を示す部位データを複数含む学習データが取得される。
【０１６１】
ここで例えば、例えば、頭部、右足、左足、腰部のそれぞれにトラッカー１２を装着したユーザが着座姿勢で様々な動きをした際の、これらのトラッカー１２から出力されるセンシングデータに基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。また例えば、着座姿勢で様々な動きをするユーザを外部のカメラから撮影した動画像に基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。また、このような動画像を見ているオペレータによる操作に基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。
【０１６２】
そして例えば、上述の着座姿勢に対応する一連の部位データと、値に１が設定された教師データと、を含む学習データが生成されてもよい。
【０１６３】
また例えば、頭部、右足、左足、腰部のそれぞれにトラッカー１２を装着したユーザが立ち姿勢で様々な動きをした際の、これらのトラッカー１２から出力されるセンシングデータに基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。また例えば、立ち姿勢で様々な動きをするユーザを外部のカメラから撮影した、ｔ個のフレームを含む動画像に基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。また、このような動画像を見ているオペレータによる操作に基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。
【０１６４】
そして例えば、上述の立ち姿勢に対応する一連の部位データと、値に０が設定された教師データと、を含む学習データが生成されてもよい。
【０１６５】
そして、入力層６０に、対応付けられるタイミングが古いものから順次、当該学習データに含まれる部位データが入力される。ここでは例えば、部位データには、腰部の回転によりオフセットされた、頭部の向きを示す頭部向きデータＤ１、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置を示す右足基準頭部位置データＤ２、及び、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置を示す左足基準頭部位置データＤ３が含まれていることとする。
【０１６６】
ここでは例えば、対応付けられるタイミングがｓ番目に古い頭部向きデータがＤ１（ｓ）と表現されている。また、対応付けられるタイミングがｓ番目に古い右足基準頭部位置データがＤ２（ｓ）と表現されている。また、対応付けられるタイミングがｓ番目に古い左足基準頭部位置データがＤ３（ｓ）と表現されている。ここで値ｓは、１以上ｔ以下の整数である。
【０１６７】
また本実施形態では図１３に示すように、頭部向きデータＤ１（ｓ）には、それぞれ、ｘ、ｙ、ｚといった、３個の要素が含まれている。当該３個の要素は、それぞれ、胸部の回転によりオフセットされた、頭部の向きを表すベクトルのｘ座標値、ｙ座標値、ｚ座標値に相当する。ここで胸部の回転によりオフセットされた、頭部の向きを表すベクトルは、例えば、胸部の回転によりオフセットされた、頭部（頭部ノード４２ａ）の向き（例えば頭部における視線方向）を表す単位ベクトルであってもよい。なお、胸部の回転によりオフセットされた、頭部の向きを表すベクトルが、首（首ノード４２ｊ）の位置を基準とした頭部（頭部ノード４２ａ）の位置を表すベクトルであってもよい。この場合、学習データに含まれる部位データは、頭部、右足、左足、腰部、首のそれぞれにトラッカー１２を装着したユーザが様々な動きをした際の、これらのトラッカー１２から出力されるセンシングデータに基づいて、生成されてもよい。
【０１６８】
また本実施形態では図１３に示すように、右足基準頭部位置データＤ２（ｓ）には、それぞれ、ｘ、ｙ、ｚといった３個の要素が含まれている。当該３個の要素は、それぞれ、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置のｘ座標値、ｙ座標値、ｚ座標値に相当する。
【０１６９】
また本実施形態では図１３に示すように、左足基準頭部位置データＤ３（ｓ）には、それぞれ、ｘ、ｙ、ｚといった３個の要素が含まれている。当該３個の要素は、それぞれ、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置のｘ座標値、ｙ座標値、ｚ座標値に相当する。
【０１７０】
本実施形態では、入力層６０に、９個（３×３）の要素を含む部位データが入力されることとなる。
【０１７１】
そして入力層６０に入力された部位データが直前の入力に応じた中間ブロック６２の出力と結合された入力データが、中間ブロック６２に入力される。中間ブロック６２は、本実施形態では例えば、ＬＳＴＭ（Long short-term memory）が実装されたＲＮＮ（Recurrent Neural Network）（ＬＳＴＭブロック）である。
【０１７２】
ここで中間ブロック６２の出力は、部位データが位置、姿勢、又は動きを示す体の部位についての位置、姿勢、又は動きの時系列推移の特徴を示すデータである。以下、中間ブロック６２が出力するデータを特徴データと呼ぶこととする。例えばＬＳＴＭの状態変数が当該特徴データに相当する。
【０１７３】
ここで例えば、中間ブロック６２に、あるタイミングに対応付けられる部位データと、当該タイミングよりも前における上述の時系列推移の特徴を示す特徴データと、を含む入力データが入力されるとする。この場合、中間ブロック６２は、当該タイミングまでの上述の時系列推移の特徴を示す特徴データを出力する。例えば中間ブロック６２に、ｓ番目の部位データと、（ｓ−１）番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データと、を含む入力データが入力されるとする。この場合、中間ブロック６２は、ｓ番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データを出力する。以下、ｓ番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データをｓ番目の特徴データと呼ぶこととする。
【０１７４】
そして最後の部位データ（ｔ番目の部位データ）を含む入力データの入力に対する中間ブロック６２の出力であるｔ番目の特徴データが、第１中間層６４に入力される。そして第１中間層６４からの出力が第２中間層６６に入力される。第１中間層６４及び第２中間層６６は、例えば正規化線形関数（ＲｅＬＵ）を活性化関数とする全結合層である。
【０１７５】
そして第２中間層６６からの出力が出力層６８に入力される。出力層６８は、例えば線形関数を活性化関数とする層である。そして出力層６８からは、最新のタイミング（ｔ番目のタイミング）における、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定結果に相当する着座確率データＤ４（ｔ）が出力７０として出力される。着座確率データは、例えば０以上１以下の実数で表現されるデータである。着座確率データの値が大きいほど、ユーザが着座姿勢にある可能性が高く、着座確率データの値が小さいほど、ユーザが着座姿勢にある可能性が低い。
【０１７６】
そして本実施形態では例えば、推定結果を示す着座確率データＤ４（ｔ）に基づいて、中間ブロック６２、第１中間層６４、第２中間層６６、出力層６８の学習が実行される。ここで例えば、上述の一連の部位データを含む学習データに含まれる教師データと推定結果を示す着座確率データＤ４（ｔ）との差が特定されてもよい。そして特定される差に基づいて、中間ブロック６２、第１中間層６４、第２中間層６６、及び、出力層６８のパラメータの値が更新される教師あり学習が実行されてもよい。
【０１７７】
本実施形態では例えば、１番目の部位データからｔ番目の部位データまでのｔ個の部位データを含む学習データによる学習が行われる。ここで例えば、１番目の部位データからｔ番目の部位データまでのｔ個の部位データ、及び、当該ｔ個の部位データに対応付けられる上述の教師データ、を含む学習データによる学習が行われてもよい。そして例えば着座姿勢に対応する互いに異なる複数の学習データ、及び、立ち姿勢に対応する互いに異なる複数の学習データによる学習が行われた学習済の機械学習モデルを用いて、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定が実行される。
【０１７８】
図１４は、学習済の機械学習モデルを用いた、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定の一例を示す図である。
【０１７９】
上述のように本実施形態では例えば、所定のサンプリングレートでトラッカー１２ａ〜１２ｅのそれぞれについて、当該トラッカー１２の位置及び向きの特定が行われる。そしてトラッカー１２の位置及び向きの特定に応じて、当該トラッカー１２の位置及び向きを示すデータが、エンタテインメント装置１４に送信される。
【０１８０】
そしてこのようにして送信されるトラッカー１２の位置及び向きを示すデータに基づいて、上述の部位データが生成されることとする。このようにして本実施形態では例えば、部位データが繰り返し生成されることとなる。
【０１８１】
ここでは上述のように、部位データには、腰部の回転によりオフセットされた、頭部の向きを示す頭部向きデータＤ１、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置を示す右足基準頭部位置データＤ２、及び、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置を示す左足基準頭部位置データＤ３が含まれていることとする。なお、頭部向きデータＤ１が、首（首ノード４２ｊ）の位置を基準とした頭部（頭部ノード４２ａ）の位置を表すベクトルである場合は、首ノード４２ｊ及び頭部ノード４２ａの最新の位置に基づいて、頭部向きデータＤ１が生成されてもよい。
【０１８２】
そして本実施形態では例えば、入力層６０に、最新の部位データ（最後に生成された部位データ）が入力される。図１４には、最新の部位データに含まれる頭部向きデータがＤ１（ｕ）と表現されている。また、最新の部位データに含まれる右足基準頭部位置データがＤ２（ｕ）と表現されている。また、最新の部位データに含まれる左足基準頭部位置データがＤ３（ｕ）と表現されている。
【０１８３】
上述のように、頭部向きデータＤ１（ｕ）には、ｘ、ｙ、ｚといった、３個の要素が含まれている。また、右足基準頭部位置データＤ２（ｕ）には、ｘ、ｙ、ｚといった３個の要素が含まれている。また、左足基準頭部位置データＤ３（ｕ）には、ｘ、ｙ、ｚといった３個の要素が含まれている。
【０１８４】
そして入力層６０に入力された９個（３×３）の要素を含む部位データが直前の入力に応じた中間ブロック６２の出力である特徴データと結合された入力データが、中間ブロック６２に入力される。
【０１８５】
そして中間ブロック６２の出力である特徴データが、第１中間層６４に入力される。そして第１中間層６４からの出力が第２中間層６６に入力される。
【０１８６】
そして第２中間層６６からの出力が出力層６８に入力される。そして出力層６８からは、当該タイミングにおける、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定結果に相当する着座確率データＤ４（ｕ）が出力７０として出力される。
【０１８７】
ここで例えば、着座確率データＤ４（ｕ）の値が０．５以上である場合に、ユーザが着座姿勢であると推定し、そうでない場合に、ユーザが立ち姿勢であると推定されてもよい。
【０１８８】
そして、ユーザが立ち姿勢であると推定された場合に、上述のようにして軸足の推定処理、及び、軸足の推定結果に基づく骨盤ノード４２ｆの初期位置の決定が行われるようにしてもよい。
【０１８９】
なお、機械学習モデルを用いて、ユーザが着座姿勢であるか立ち姿勢であるかが推定される必要はない。例えば、作成された所与のロジックを用いてユーザが着座姿勢であるか立ち姿勢であるかが推定されてもよい。
【０１９０】
また、右足基準頭部位置データＤ２の値、及び、左足基準頭部位置データＤ３の値として、身体サイズを基準とした相対値、すなわち、足の位置を基準とした頭の位置の座標値を身体サイズで割った値が用いられてもよい。
【０１９１】
ここで身体サイズは、ユーザにより予め入力されたものであってもよいし、例えば、以下のようにして、ユーザが着座姿勢であるか立ち姿勢であるかの推定が行われる度に、トラッカー１２の位置に基づいて逐次推定されるものであってもよい。
【０１９２】
ここで、本実施形態に係るエンタテインメント装置１４で行われる身体サイズ推定処理の流れの一例を、図１５に例示するフロー図、及び、図１６に示す模式図を参照しながら説明する。図１６は、ユーザがゲームをプレイしている様子の一例を示す模式図である。本処理例では、以下のＳ４０１〜Ｓ４１３に示す処理が所定のサンプリングレートで繰り返し実行される。本処理例に示す処理は、例えば、上述の軸足の推定処理が実行される直前に実行されるようにしてもよい。また以下の説明では、ユーザの前後方向がＸ軸方向であり、左右方向がＹ軸方向であり、高さ方向がＺ軸方向であることとする。
【０１９３】
また、以下の説明では、図１６に示すように、Ｓ１０１に示す処理で取得された姿勢データが示すトラッカー１２ａ、トラッカー１２ｂ、トラッカー１２ｃ、トラッカー１２ｄ、トラッカー１２ｅの位置をそれぞれＴ１、Ｔ２、Ｔ３、Ｔ４、Ｔ５と表現する。
【０１９４】
また、以下の説明では、スケルトンモデルデータ記憶部５０に、ユーザの身体サイズを示す身体サイズデータが記憶されていることとする。ここで例えば身体サイズデータの初期値として所定値が設定されるようにしてもよい。あるいは、身体サイズデータの初期値としてユーザの年齢に応じた値が設定されるようにしてもよい。後述のように身体サイズデータが示す身体サイズは次第に大きくなるよう当該身体サイズデータは更新されていくので、身体サイズデータの初期値としては、ユーザの一般的な身体サイズを示す値よりも少し小さな値が設定されるようにすることが望ましい。
【０１９５】
なお、スケルトンモデルデータ記憶部５０は、ユーザの身長を示す身長データを記憶してもよい。また、スケルトンモデルデータ記憶部５０は、ユーザの腕の長さを示す腕長さデータを記憶してもよい。また、スケルトンモデルデータ記憶部５０は、ユーザの左右方向の身体サイズを示す左右身体サイズデータを記憶してもよい。
【０１９６】
まず、姿勢更新部５６は、位置Ｔ１のＺ座標値ｈ１に所定のオフセット値ｌｏを加えた値を頭頂部のＺ座標値ｈｔとして算出する（Ｓ４０１）。
【０１９７】
そして姿勢更新部５６は、位置Ｔ４のＺ座標値と位置Ｔ５のＺ座標値との差が所定の閾値ｔ１以下であるか否かを確認する（Ｓ４０２）。
【０１９８】
位置Ｔ４のＺ座標値と位置Ｔ５のＺ座標値との差が閾値ｔ１以下であることが確認された場合は（Ｓ４０２：Ｙ）、姿勢更新部５６は、位置Ｔ４のＺ座標値と位置Ｔ５のＺ座標値の平均値であるＺ座標値ｈ４を算出する（Ｓ４０３）。
【０１９９】
そして姿勢更新部５６は、Ｓ４０１に示す処理で算出された頭頂部のＺ座標値ｈｔとＳ４０３に示す処理で算出されたＺ座標値ｈ４との差を、身長の推定値ｌｔとして算出する（Ｓ４０４）。
【０２００】
そして姿勢更新部５６は、Ｓ４０４に示す処理で算出された身体サイズの推定値ｌｔが、スケルトンモデルデータ記憶部５０に記憶されている身長データが示す身長の値よりも大きいか否かを確認する（Ｓ４０５）。
【０２０１】
値ｌｔがスケルトンモデルデータ記憶部５０に記憶されている身長データが示す身長の値よりも大きいことが確認されたとする（Ｓ４０５：Ｙ）。この場合は、姿勢更新部５６は、Ｓ４０４に示す処理で算出された身体サイズの推定値ｌｔを示すようスケルトンモデルデータ記憶部５０に記憶されている身長データを更新する（Ｓ４０６）。
【０２０２】
そして姿勢更新部５６は、ユーザの肩の位置を推定する（Ｓ４０７）。ここでは例えば、位置Ｔ１を示す値に所定のオフセット値ｐｓｒｏを加えることで右肩の位置ｐｓｒを示す値が推定されるようにしてもよい。また例えば、位置Ｔ１を示す値に別の所定のオフセット値ｐｓｌｏを加えることで左肩の位置ｐｓｌを示す値が推定されるようにしてもよい。なお、Ｓ４０３に示す処理で位置Ｔ４のＺ座標値と位置Ｔ５のＺ座標値との差が閾値ｔ１以下でないことが確認された場合も（Ｓ４０２：Ｎ）、Ｓ４０７に示す処理が実行される。この場合は、位置Ｔ４を示す値や位置Ｔ５を示す値がエラーに基づく異常値である可能性が高いため、Ｓ４０３〜Ｓ４０６に示す処理がスキップされる。また、Ｓ４０５に示す処理で値ｌｔがスケルトンモデルデータ記憶部５０に記憶されている身長データが示す身長の値よりも大きくないことが確認された場合も（Ｓ４０５：Ｎ）、Ｓ４０７に示す処理が実行される。
【０２０３】
そして姿勢更新部５６は、Ｓ４０７に示す処理で推定された右肩の位置ｐｓｒと左肩の位置ｐｓｌとの間の長さを肩幅ｌｓとして算出する（Ｓ４０８）。
【０２０４】
そして姿勢更新部５６は、位置Ｔ２と位置ｐｓｌとの間の長さと、位置Ｔ３と位置ｐｓｒとの間の長さと、の差が所定の閾値ｔ２以下であるか否かを確認する（Ｓ４０９）。
【０２０５】
位置Ｔ２と位置ｐｓｌとの間の長さｌａ１と、位置Ｔ３と位置ｐｓｒとの間の長さｌａ２と、の差が所定の閾値ｔ２以下であることが確認されたとする（Ｓ４０９：Ｙ）。この場合は、姿勢更新部５６が、位置Ｔ２と位置ｐｓｒとの間の長さｌａ１を示す値と位置Ｔ３と位置ｐｓｌとの間の長さｌａ２を示す値との平均値を腕の長さの推定値ｌａとして算出する（Ｓ４１０）。
【０２０６】
そして姿勢更新部５６が、Ｓ４１０に示す処理で算出された推定値ｌａが、スケルトンモデルデータ記憶部５０に記憶されている腕長さデータが示す腕の長さの値よりも大きいか否かを確認する（Ｓ４１１）。
【０２０７】
値ｌａがスケルトンモデルデータ記憶部５０に記憶されている腕長さデータの値よりも大きいことが確認されたとする（Ｓ４１１：Ｙ）。この場合は、姿勢更新部５６は、Ｓ４１０に示す処理で算出された腕の長さの推定値ｌａを示すようスケルトンモデルデータ記憶部５０に記憶されている腕長さデータを更新する（Ｓ４１２）。
【０２０８】
そして姿勢更新部５６が、腕長さデータの値の２倍と上述の肩幅ｌｓの値との和を示すようスケルトンモデルデータ記憶部５０に記憶されている左右身体サイズデータを更新する（Ｓ４１３）。そして、Ｓ４０１に示す処理に戻る。
【０２０９】
なお、Ｓ４０９に示す処理で、位置Ｔ２と位置ｐｓｌとの間の長さと、位置Ｔ３と位置ｐｓｒとの間の長さと、の差が所定の閾値ｔ２以下でないことが確認された場合も（Ｓ４０９：Ｎ）、Ｓ４０１に示す処理に戻る。この場合は、位置Ｔ２を示す値や位置Ｔ３を示す値がエラーに基づく異常値である可能性が高いため、Ｓ４１０〜Ｓ４１３に示す処理がスキップされる。また、Ｓ４１１に示す処理で値ｌａが、スケルトンモデルデータ記憶部５０に記憶されている腕長さデータが示す腕の長さの値よりも大きくないことが確認された場合も（Ｓ４１１：Ｎ）、Ｓ４０１に示す処理に戻る。
【０２１０】
例えば、右足基準頭部位置データＤ２の値、及び、左足基準頭部位置データＤ３の値として、足の位置を基準とした頭の位置の座標値を、スケルトンモデルデータ記憶部５０に記憶されている、身長サイズデータの値、腕長さデータの値、又は、左右身体サイズデータの値のいずれかで割った値が用いられてもよい。
【０２１１】
また、図１３に示す機械学習モデルの学習においても、上述のＳ４０１〜Ｓ４１３に示す処理が実行されるようにしてもよい。そして、右足基準頭部位置データＤ２の値、及び、左足基準頭部位置データＤ３の値として、足の位置を基準とした頭の位置の座標値を、上述の身長サイズデータの値、腕長さデータの値、又は、左右身体サイズデータの値のいずれかで割った値が用いられてもよい。
【０２１２】
なお、本発明は上述の実施形態に限定されるものではない。
【０２１３】
例えば本発明の適用範囲は、トラッカー１２の実際の動きに応じたリアルタイムでのスケルトンモデル４０の姿勢の更新には限定されない。例えば本発明が、エンタテインメント装置１４に予め記録された、一連の姿勢データの時系列に基づいて、スケルトンモデル４０や当該スケルトンモデル４０に応じたプレイヤオブジェクトが動く様子を再生する場面に適用されてもよい。
【０２１４】
また例えばトラッカー１２ａは、ヘッドマウントディスプレイ（ＨＭＤ）であってもよい。この場合に、ユーザに含まれる複数の部位の位置又は向きに応じたゲーム処理等の各種の処理の結果に応じた映像が例えばＨＭＤの表示部に表示されるようにしてもよい。
【０２１５】
また例えば、図６に示す機能の一部又は全部がトラッカー１２によって実装されてもよい。
【０２１６】
また、上記の具体的な文字列や数値及び図面中の具体的な文字列や数値は例示であり、これらの文字列や数値には限定されない。
【図１】
2020070928.tif 000003
【図２】
2020070928.tif 000004
【図３】
2020070928.tif 000005
【図４】
2020070928.tif 000006
【図５】
2020070928.tif 000007
【図６】
2020070928.tif 000008
【図７】
2020070928.tif 000009
【図８】
2020070928.tif 000010
【図９】
2020070928.tif 000011
【図１０】
2020070928.tif 000012
【図１１】
2020070928.tif 000013
【図１２】
2020070928.tif 000014
【図１３】
2020070928.tif 000015
【図１４】
2020070928.tif 000016
【図１５】
2020070928.tif 000017
【図１６】
2020070928.tif 000018
【手続補正書】
【提出日】令和2年12月3日(2020.12.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する位置決定部と、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する初期位置決定部と、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、を含み、
前記初期位置決定部は、前記ターゲットノードが移動すべき位置から前記ターゲットノードの現在の位置と当該ターゲットノードの親のノードの現在の位置との間の長さだけ離れた位置、又は、当該位置と前記親のノードの現在の位置とを補間した位置を、当該親のノードの初期位置に決定する、
ことを特徴とするスケルトンモデル更新装置。
【請求項２】
前記初期位置決定部は、前記ターゲットノードが移動すべき位置から前記ターゲットノードの現在の位置と当該ターゲットノードの親のノードの現在の位置との間の長さだけ離れた位置と、前記親のノードの現在の位置とを、前記ターゲットノードの現在の位置と当該ターゲットノードが移動すべき位置との間の長さに基づいて決定される重みで補間した位置を、当該親のノードの初期位置に決定する、
ことを特徴とする請求項１に記載のスケルトンモデル更新装置。
【請求項３】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新部と、
前記姿勢データが示す回転を、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転の成分を含む３つの成分に分離する分離部と、
前記３つの成分のうちの１つである、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する回転決定部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項４】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得部と、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する第１姿勢更新部と、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する第２姿勢更新部と、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する第３姿勢更新部と、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する第４姿勢更新部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項５】
前記姿勢データに基づいて軸足を推定する推定部と、
前記前方後方到達逆運動学計算における腰部のノードの初期位置を、前記軸足の位置に基づいて決定する決定部と、をさらに含む、
ことを特徴とする請求項１から４のいずれか一項に記載のスケルトンモデル更新装置。
【請求項６】
前記推定部は、さらに、ユーザが着座姿勢であるか立ち姿勢であるかを推定し、
前記推定部は、前記ユーザが立ち姿勢であると推定された場合に、前記軸足を推定する、
ことを特徴とする請求項５に記載のスケルトンモデル更新装置。
【請求項７】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得ステップと、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する位置決定ステップと、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する初期位置決定ステップと、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新ステップと、を含み、
前記初期位置決定ステップでは、前記ターゲットノードが移動すべき位置から前記ターゲットノードの現在の位置と当該ターゲットノードの親のノードの現在の位置との間の長さだけ離れた位置、又は、当該位置と前記親のノードの現在の位置とを補間した位置を、当該親のノードの初期位置に決定する、
ことを特徴とするスケルトンモデル更新方法。
【請求項８】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得するステップと、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新するステップと、
前記姿勢データが示す回転を、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転の成分を含む３つの成分に分離するステップと、
前記３つの成分のうちの１つである、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項９】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得するステップと、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新するステップと、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新するステップと、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新するステップと、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項１０】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する姿勢データ取得手順、
前記姿勢データに基づいて前記ターゲットノードが移動すべき位置を決定する位置決定手順、
前記ターゲットノードが移動すべき位置と当該ターゲットノードの親のノードの現在の位置とに基づいて、当該ターゲットノードと当該親のノードとの間の長さを一定に保つという条件での前記親のノードの新たな位置の決定を含む前方後方到達逆運動学計算における当該親のノードの初期位置を、前記ターゲットノードが移動すべき位置と、前記スケルトンモデルの所与の姿勢と、に基づいて決定する初期位置決定手順、
前記ターゲットノードが移動すべき位置と前記親のノードの初期位置とに基づく当該親のノードの新たな位置の決定を含む前記前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する姿勢更新手順、をコンピュータに実行させ、
前記初期位置決定手順では、前記ターゲットノードが移動すべき位置から前記ターゲットノードの現在の位置と当該ターゲットノードの親のノードの現在の位置との間の長さだけ離れた位置、又は、当該位置と前記親のノードの現在の位置とを補間した位置を、当該親のノードの初期位置に決定する、
ことを特徴とするプログラム。
【請求項１１】
木構造のスケルトンモデルに含まれるターゲットノードの姿勢を示す姿勢データを取得する手順、
前方後方到達逆運動学計算を実行することで、前記スケルトンモデルの姿勢を更新する手順、
前記姿勢データが示す回転を、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転の成分を含む３つの成分に分離する手順、
前記３つの成分のうちの１つである、前記ターゲットノードと当該ターゲットノードの親のノードとを接続するボーンを軸とした前記ターゲットノードの回転に基づいて、前記親のノードの回転を決定する手順、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１２】
木構造のスケルトンモデルに含まれる第１のターゲットノードの姿勢、及び、第２のターゲットノードの姿勢を示す姿勢データを取得する手順、
前記姿勢データに基づいて、前記第１のターゲットノードを含む互いに接続された第１のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第１のノード群の姿勢を更新する手順、
前記姿勢データに基づいて、前記第２のターゲットノードを含む互いに接続された第２のノード群に対して、前方後方到達逆運動学計算における前方到達フェーズの処理により当該第２のノード群の姿勢を更新する手順、
前記第１のノード群及び前記第２のノード群の更新の後に、前記第１のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、前記第２のノード群に含まれる、前記スケルトンモデルに含まれる結節点に最も近いノードと、を含む複数のノードの姿勢を更新する手順、
前方後方到達逆運動学計算における後方到達フェーズの処理により前記スケルトンモデルの姿勢を更新する手順、
をコンピュータに実行させることを特徴とするプログラム。
【国際調査報告】
2020070928.tif 000019
2020070928.tif 000020
2020070928.tif 000021
2020070928.tif 000022