(57)【要約】【課題】  踏切って、宙に浮き、着地する動作を実現する脚式ロボットにおいて、宙に浮いている間の実際の運動状態が、目標とする運動状態から大きく外れる場合であっても、着地後の動作を安定して実現することが可能な技術を提供する。【解決手段】  関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットであって、踏切り時の重心速度を検出する手段と、検出された踏切り時の重心速度に基づいて、踏切りから着地までの重心軌道を生成する手段と、生成された踏切りから着地までの重心軌道に基づいて、着地後の重心軌道を生成する手段と、生成された着地後の重心軌道に基づいて、着地までの脚リンクの足先の軌道を生成する手段と、生成された重心軌道と脚リンクの足先の軌道に基づいて、関節角の目標値の経時的データを生成する手段と、生成された関節角の目標値の経時的データに基づいて、関節を回転する手段とを備えている。【選択図】  図３
2006247769.tif 000002
【特許請求の範囲】
【請求項１】
関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットであって、
踏切り時の重心速度を検出する手段と、
検出された踏切り時の重心速度に基づいて、踏切りから着地までの重心軌道を生成する手段と、
生成された踏切りから着地までの重心軌道に基づいて、着地後の重心軌道を生成する手段と、
生成された着地後の重心軌道に基づいて、着地までの脚リンクの足先の軌道を生成する手段と、
生成された着地までの重心軌道と脚リンクの足先の軌道に基づいて、着地までの関節角の目標値の経時的データを生成する手段と、
生成された着地後の重心軌道に基づいて、着地後の関節角の目標値の経時的データを生成する手段と、
生成された関節角の目標値の経時的データに基づいて、関節を回転する手段と、
を備えることを特徴とする脚式ロボット。
【請求項２】
前記着地後の重心軌道を生成する手段は、
踏切りから着地までの重心の鉛直方向軌道に基づいて、着地後の重心の鉛直方向軌道を生成する手段と、
生成された着地後の重心の鉛直方向軌道と、ＺＭＰ方程式を離散化した３項方程式と、着地後の目標とする相対ＺＭＰと、着地の時点と着地後の所定の時点における重心の水平方向速度とに基づいて、着地後の重心の水平方向軌道を計算する手段と、
を備えることを特徴とする請求項１の脚式ロボット。
【請求項３】
前記着地後の重心の水平方向軌道を計算する手段は、着地後の重心の鉛直方向軌道から計算される係数を持つ３重対角行列と、着地後の重心の水平方向軌道の列、着地後の目標とする相対ＺＭＰと着地の時点と着地後の所定の時点における重心の水平方向速度から計算される距離の列との間に成立する連立方程式を解いて、着地後の重心の水平方向軌道を計算する手段をさらに備えることを特徴とする請求項２の脚式ロボット。
【請求項４】
関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットの動作を制御する方法であって、
踏切り時の重心速度を検出する工程と、
検出された踏切り時の重心速度に基づいて、踏切りから着地までの重心軌道を生成する工程と、
生成された踏切りから着地までの重心軌道に基づいて、着地後の重心軌道を生成する工程と、
生成された着地後の重心軌道に基づいて、着地までの脚リンクの足先の軌道を生成する工程と、
生成された着地までの重心軌道と脚リンクの足先の軌道に基づいて、着地までの関節角の目標値の経時的データを生成する工程と、
生成された着地後の重心軌道に基づいて、着地後の関節角の目標値の経時的データを生成する工程と、
生成された関節角の目標値の経時的データに基づいて、関節を回転する工程と、
を備えることを特徴とする脚式ロボットの動作制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、脚式ロボットとその動作を制御する方法に関する。
【背景技術】
【０００２】
少なくとも１つの脚リンクを備え、移動しようとする方向へ脚リンクを振り出し、振り出して接地した脚リンクを支持脚とする動作を繰り返して移動するロボットが開発されている。
上記のような脚式ロボットは、ＺＭＰ（Zero Moment Point）を利用して制御することによって、安定した歩行を実現できることが知られている。ＺＭＰは、ロボットに作用する外力（慣性力を含む）によるモーメントの総和が０となる床上の点を意味する。
１つの脚リンクのみが接地している状態でも、ＺＭＰが支持脚の足平内に存在していれば、ロボットは倒れることがない。例えば２つの脚リンクを備えるロボットの場合、一方の脚リンクを支持脚とし、他方の脚リンクを遊脚として前方に振り出することによって移動する。この片足接地状態の間、ＺＭＰが支持脚の足平内に存在していれば、ロボットは倒れることがない。遊脚としていた脚リンクが接地し、２つの脚リンクが接地している間に、ＺＭＰがそれまで支持脚であった脚リンクの足平内から新たに接地した脚リンクの足平内へ移行すれば、ロボットは倒れることがなく、それまで支持脚であった脚リンクを前方に振り出すことが可能となる。それまで支持脚であった脚リンクを前方に振り出す時に、ＺＭＰが新たな支持脚の足平内に存在していれば、ロボットは倒れることがない。
上記の動作を繰り返すことによって、ロボットは倒れることなく歩行を継続することができる。
【０００３】
ヒトが行う動作には、歩行のほかにも様々な態様が存在する。走ったり、跳躍したり、けんけんでバランスをとったりすることが可能なロボットが待望されている。
上記したような動作は、いずれも空中相（ロボットが空中に浮いている相）を備えている。空中相ではロボットに重力のみが作用しており、ＺＭＰを定義することができない。空中相の前後に亘ってロボットを安定させる技術が必要とされている。
【０００４】
脚式ロボットに、空中相を含む動作を実現させるための技術が開発されている。例えば特許文献１に、空中相の前後の接地相（ロボットが床に接地している相）において、ＺＭＰ方程式（ロボットの姿勢とその時間的変化からＺＭＰを算出する方程式）で算出されるＺＭＰが目標ＺＭＰに一致する重心軌道を算出する技術が開示されている。この技術では、脚リンクの足先の位置・姿勢の軌道を設定し、ロボットの動作を複数の動作区間に分割し、分割された動作区間のそれぞれについて重心軌道を計算する。分割された動作区間のうちで、いずれか１つの脚リンクが接地して支持脚としている相（接地相）においては、（１）ＺＭＰ軌道は加速度を有さない、（２）重心高さは一定である、（３）外モーメントは一定である、という仮定に基づいて導出される重心軌道の解析解を予め用意しておき、その解析解の係数を実時間で付与することによって重心軌道を計算する。重心軌道が計算されると、その重心軌道を実現する関節角目標値が計算され、計算された関節角目標値に基づいて関節を駆動し、脚式ロボットは動作を実現する。
また実際のロボットの運動状態をフィードバックするために、特許文献１に記載の技術では、制御サイクル毎にロボットの実際の運動状態を検出し、ロボットの実際の重心の位置・速度と目標とする重心の位置・速度の偏差を算出し、実際の重心の位置・速度に適合するようにその後の重心軌道を更新する。
なお本明細書で「軌道」とは、位置の経時的な変化を記述するデータのことを言う。
【０００５】
特許文献２にも、ＺＭＰ方程式で算出されるＺＭＰが目標ＺＭＰに一致する重心軌道を算出する技術が開示されている。この技術でも、脚リンクの足先の位置・姿勢の軌道を設定し、ロボットの動作を複数の動作区間に分割し、分割された動作区間のそれぞれについて重心軌道を計算する。重心軌道の計算において、接地相については、（１）ＺＭＰ軌道は加速度を有さない、（２）重心高さは一定である、（３）外モーメントは一定である、という仮定に基づいて導出される重心軌道の解析解を予め用意しておき、その解析解のパラメータを実時間で与える。また無接地状態と接地状態の境界近傍では、上記した解析解を修正し、重心軌道の連続性を確保する。
【特許文献１】特開２００４−１４２０９５号公報
【特許文献２】特開２００４−１６７６７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１および２に記載の技術によれば、空中相を含む動作を実現するロボットにおいて、ロボットの実際の運動状態をフィードバックしてロボットのその後の動作を再計画することによって、安定した動作を実現することができる。
【０００７】
しかしながら、上記した技術は更なる改善の余地を残している。
特許文献１および２に記載の技術では、実際の運動状態に基づいて更新されるのは重心軌道のみであり、脚リンクの足先の位置・姿勢の軌道は更新されない。足先の位置および姿勢の軌道は、実際のロボットの運動状態に関わらず、歩幅・歩行周期・旋回角などの歩容パラメータと、環境形状に基づいて設定されている。このような動作制御は、実際のロボットの運動状態が目標とする運動状態からわずかに外れている場合であっても、ロボットに所望の歩幅・歩行周期・旋回角を実現させることができるという点で有効である。
しかしながら、実際のロボットの運動状態が、目標とする運動状態から大きく外れた場合には、上記した技術ではロボットの動作を安定させることができない。上記した技術では、例えばロボットに予期せぬ外力が作用して、実際の重心軌道が目標とする重心軌道から大きく外れた場合であっても、目標とする足先の位置・姿勢の軌道については変更されない。従ってロボットは無理な体勢であっても目標とする足先の位置・姿勢を実現しようとするため、その後の動作が不安定なものとなりがちである。
上記のような状況は、ロボットが接地相から踏切って跳躍し、宙に浮いた後、着地して再び接地相へ移行する場合に特に顕著に見られる。宙に浮いた状態では、どれだけロボットの関節角を駆動したとしても、ロボットの重心の軌道は変更することができない。実際の軌道が目標とする軌道とずれている場合であっても、着地するまでの間は重心軌道を変更することができない。しかしながら、ロボットが足先を着地させる位置は予め決定されており、実際の重心軌道を反映して変更されることはない。その結果、ロボットは着地後のＺＭＰを目標とする足先位置に維持しようとして無理な姿勢を取り、その後の挙動を不安定なものとしてしまうか、着地後のＺＭＰを目標とする足先位置に維持することができずに、着地した直後に転倒してしまう。
【０００８】
宙に浮いた状態から着地するロボットにおいては、着地の直後における動作の安定性を確保することが極めて重要である。そのためには、宙に浮いた状態におけるロボットの実際の運動状態を計測し、計測された運動状態に基づいて、着地するまでのロボットの重心軌道と足先の位置・姿勢の軌道、および着地後のロボットの重心軌道と足先の位置・姿勢の軌道を更新することが可能な技術が待望されている。
【０００９】
本発明は上記課題を解決する。本発明は踏切って、宙に浮き、着地する動作を実現する脚式ロボットにおいて、宙に浮いている間の実際のロボットの運動状態が、目標とするロボットの運動状態から大きく外れる場合であっても、着地後の動作を安定させることが可能な技術を提供する。
【課題を解決するための手段】
【００１０】
本発明で具現化されるロボットは、関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットである。そのロボットは、踏切り時の重心速度を検出する手段と、検出された踏切り時の重心速度に基づいて踏切りから着地までの重心軌道を生成する手段と、生成された踏切りから着地までの重心軌道に基づいて着地後の重心軌道を生成する手段と、生成された着地後の重心軌道に基づいて着地までの脚リンクの足先の軌道を生成する手段と、生成された着地までの重心軌道と脚リンクの足先の軌道に基づいて着地までの関節角の目標値の経時的データを生成する手段と、生成された着地後の重心軌道に基づいて着地後の関節角の目標値の経時的データを生成する手段と、生成された関節角の目標値の経時的データに基づいて関節を回転する手段とを備えている。
【００１１】
上記した脚式ロボットは、踏切った時点での重心速度を検出し、検出された重心速度に基づいて、踏切りから着地までの重心軌道を生成する。これによって、空中相におけるロボットの実際の動作が、目標としていた動作と大きく異なる場合であっても、実際の重心速度に適合した重心軌道を生成することができる。
そして、上記した脚式ロボットは、生成された踏切りから着地までの重心軌道に基づいて、着地後の重心軌道を生成する。計測された実際の重心速度に基づく重心軌道に基づいて、着地後の重心軌道を生成することから、着地衝撃を緩和するための重心の沈み込みを許容した安定な動作を実現することが可能となる。
そして、上記した脚式ロボットは、生成された着地後の重心軌道に基づいて、着地までの脚リンクの足先の軌道を生成する。これによって、空中相におけるロボットの実際の動作が目標としていた動作と大きく異なる場合であっても、実際の重心速度に適合した空中相における重心軌道と、その重心軌道に適合した着地後の重心軌道から、空中相における脚リンクの足先の軌道が生成される。脚リンクを着地する位置は、実際に計測された重心速度によるときの重心軌道に基づいて生成されるため、ロボットは無理な姿勢を取ることがなく、着地後も安定して動作を継続することができる。
上記した脚式ロボットは、上記のようにして生成された空中相での重心軌道と脚リンクの足先の軌道に基づいて、空中相での各関節の関節角目標値の経時的データを生成し、上記のようにして生成された着地後の重心軌道に基づいて、着地後の各関節の関節角目標値の経時的データを生成し、生成された関節角目標値の経時的データに基づいて、関節を回転する。着地後の接地相においては、脚リンクの足先は接地しており、床に対して移動しないため、脚リンクの足先の軌道の生成は必ずしも必要ではない。
【００１２】
上記した脚式ロボットは、踏切り時に検出される重心速度に基づいて、踏切りから着地までの重心軌道と、着地後の重心軌道を更新し、更新された重心軌道に合わせて着地までの脚リンクの足先の軌道を更新することができる。これによって、空中相での実際の重心軌道が目標とする重心軌道から大きく外れた場合であっても、実際の重心軌道に合わせて脚リンクが着地する位置が更新され、着地後の動作を安定して実現することができる。
【００１３】
上記した脚式ロボットにおいて、前記着地後の重心軌道を生成する手段は、踏切りから着地までの重心の鉛直方向軌道に基づいて、着地後の重心の鉛直方向軌道を生成する手段と、生成された着地後の重心の鉛直方向軌道と、ＺＭＰ方程式を離散化した３項方程式と、着地後の目標とする相対ＺＭＰと、着地の時点と着地後の所定の時点における重心の水平方向速度とに基づいて、着地後の重心の水平方向軌道を計算する手段とを備えることが好ましい。
【００１４】
上記の脚式ロボットは、着地後の重心の鉛直方向軌道を生成する手段を備えており、着地後に沈み込む動作を実現する鉛直方向の動きを規定することができる。本発明の脚式ロボットでは、その鉛直方向軌道を加味してＺＭＰが目標ＺＭＰに一致する水平方向軌道を計算する。鉛直方向軌道が規定され、水平方向軌道を仮定すれば、ロボットの姿勢の経時的変化が規定され、慣性力を計算することができ、ＺＭＰを計算することができる。この関係を活用すると、数学的には、上記関係から計算されるＺＭＰが目標ＺＭＰに一致する水平方向軌道を計算することが可能となる。鉛直方向軌道と水平方向軌道からＺＭＰを計算するには、鉛直方向の加速度と速度と、水平方向の加速度と速度が必要とされる。鉛直方向軌道と水平方向軌道を単位時間間隔で離散化すると、速度は単位時間の開始時と終了時の２つの位置座標から計算できる。加速度は連続する２個の単位時間の開始時と中間時と終了時の３つの位置座標から計算できる。例えば単位時間Δｔで離散化した時刻をｔ１、ｔ２、ｔ３・・・とする。時刻ｔ３における速度は、時刻ｔ２と時刻ｔ３における２つの位置座標から計算できる。時刻ｔ３における加速度は、時刻ｔ１と時刻ｔ２と時刻ｔ３における３つの位置座標から計算できる。もっとも、上記は一例であり、時刻ｔ２における速度を、時刻ｔ２と時刻ｔ３における２つの位置座標から計算してもよいし、時刻ｔ２における加速度を、時刻ｔ１と時刻ｔ２と時刻ｔ３における３つの位置座標から計算してもよい。重要なことは、３つの位置座標からＺＭＰを計算できることである。先の例で言えば、時刻ｔ３におけるＺＭＰは、時刻ｔ１と時刻ｔ２と時刻ｔ３における３つの位置座標から計算できる。あるいは、基準の取り方によっては、時刻ｔ２におけるＺＭＰを時刻ｔ１と時刻ｔ２と時刻ｔ３における３つの位置座標から計算することもできるし、時刻ｔ１におけるＺＭＰを時刻ｔ１と時刻ｔ２と時刻ｔ３における３つの位置座標から計算することもできる。重要なことは、３つの時刻における位置座標からＺＭＰを計算することができるということである。
【００１５】
本明細書では、単位時間で離散化した３つの時刻の位置座標からＺＭＰを計算する式を「ＺＭＰ方程式を離散化した３項方程式」という。この３項方程式を利用すると、目標ＺＭＰと一致するＺＭＰを実現する水平方向軌道を計算することが可能となる。単位時間で離散化した時刻毎の重心の水平位置を計算することが可能となる。
本発明のロボットは、鉛直方向軌道を加味して水平方向軌道を計算する手段を備えており、着地後に沈み込む動作を実現する鉛直方向の動きを規定すれば、その上下動を前提とした重心軌道を計算する。着地後に沈み込む動作を実現する際に、ＺＭＰが目標ＺＭＰからずれてロボットが転倒することを防止することができる。
目標ＺＭＰと一致するＺＭＰを実現する水平方向軌道を計算するためには境界条件を必要とする。本発明では、着地後の接地相の開始時（着地の時点）と完了時（着地後の所定の時点）における重心の水平方向速度を境界条件とする。この境界条件を満たす水平方向軌道が計算され、着地の前後において重心速度が連続する水平方向軌道を計算することができる。
着地後の所定の時点は、着地した脚リンクが着地から継続して支持脚として接地している間であれば、どのような時点であってもよい。例えば、着地後に沈み込む動作を実現する場合、着地後の所定の時点としては沈み込み動作の完了の時点とすることができる。着地後に沈み込む動作を実現する際に、ＺＭＰが目標ＺＭＰからずれてロボットが転倒することを防止することができる。
上記した脚式ロボットによれば、着地衝撃を緩和するために着地後に実施する沈み込む動作を実現する鉛直方向の動きを規定することができる。
【００１６】
上記したように、「ＺＭＰ方程式を離散化した３項方程式」を利用すると、目標ＺＭＰと一致するＺＭＰを実現する水平方向軌道を計算することが可能となる。この場合、着地後の重心の鉛直方向軌道から計算される係数を持つ３重対角行列と、着地後の重心の水平方向軌道の列と、着地後の目標とする相対ＺＭＰと着地の時点と着地後の所定の時点の動作完了時における重心の水平方向速度から計算される距離の列との間に成立する連立方程式を解いて、着地後の重心の水平方向軌道を計算する手段をさらに備えることが好ましい。
【００１７】
３重対角行列を用いて表現される連立方程式に対しては、少ない計算負荷で高速に求解する技術が従来から開発されている。従って、脚式ロボットの重心の水平方向軌道を計算するために、３重対角行列を用いて表現される連立方程式を生成し、その連立方程式を解いて重心の水平方向軌道を計算するようにすると、少ない計算負荷で高速に水平方向軌道を計算することができる。
【００１８】
本発明は脚式ロボットの動作制御方法としても具現化される。
本発明の方法は、関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットの動作を制御する方法である。その方法は、踏切り時の重心速度を検出する工程と、検出された踏切り時の重心速度に基づいて踏切りから着地までの重心軌道を生成する工程と、生成された踏切りから着地までの重心軌道に基づいて着地後の重心軌道を生成する工程と、生成された着地後の重心軌道に基づいて着地までの脚リンクの足先の軌道を生成する工程と、生成された着地までの重心軌道と脚リンクの足先の軌道に基づいて着地までの関節角の目標値の経時的データを生成する工程と、生成された着地後の重心軌道に基づいて着地後の関節角の目標値の経時的データを生成する工程と、生成された関節角の目標値の経時的データに基づいて関節を回転する工程とを備えている。
【発明の効果】
【００１９】
本発明の技術を用いることによって、踏切って、宙に浮き、着地する動作を実現する脚式ロボットにおいて、宙に浮いている間の実際のロボットの運動状態が目標とするロボットの運動状態から大きく外れる場合であっても、着地後の動作を安定して実現することができる。
【発明を実施するための最良の形態】
【００２０】
以下、以下に説明する実施例の主要な特徴を列記する。
（形態１）関節角を変えることによって、踏切り、宙に浮き、着地する動作を実現する脚式ロボットであって、
踏切り時の重心速度と重心まわりの角運動量を検出する手段と、
検出された踏切り時の重心速度に基づいて、踏切りから着地までの重心軌道を生成する手段と、
生成された踏切りから着地までの重心軌道に基づいて、着地後の重心軌道を生成する手段と、
生成された着地後の重心軌道に基づいて、着地までの脚リンクの足先の軌道を生成する手段と、
生成された着地までの重心軌道と脚リンクの足先の軌道と検出された重心まわりの角運動量に基づいて、着地までの関節角の目標値の経時的データを生成する手段と、
生成された着地後の重心軌道に基づいて、着地後の関節角の目標値の経時的データを生成する手段と、
生成された関節角の目標値の経時的データに基づいて、関節を回転する手段と、
を備えることを特徴とする脚式ロボット。
【実施例】
【００２１】
図面を参照しながら、本発明の一実施例に係るロボット２の動作制御技術について説明する。
図１は本実施例のロボット２の概要を示している。ロボット２は体幹４と左脚リンク６と右脚リンク８と制御部１０とコントローラ１２とセンサ１４を備えている。
左脚リンク６は一方の端部を股関節を介して体幹４に揺動可能に接続されている。左脚リンク６はさらに膝関節と足首関節を備え、先端には足平を備えている。
右脚リンク８は股関節を介して体幹４に揺動可能に接続されている。右脚リンク８はさらに膝関節と足首関節を備え、先端には足平を備えている。
ロボット２の各関節はアクチュエータ（図示されない）を備えており、それらのアクチュエータは制御部１０からの指示によって回転駆動する。左脚リンク６と右脚リンク８の足平の中心には、それぞれ基準点Ｌ０、Ｒ０が設けられている。基準点Ｌ０、Ｒ０は、ロボット２の動作パターンを生成する際の基準となる点である。図中Ｇは、ロボット２の重心の位置を示す。
またロボット２の各関節はエンコーダ（図示されない）を備えており、それらのエンコーダは制御部１０に関節角の経時的変化を出力する。
制御部１０はＣＰＵ、ＲＯＭ、ＲＡＭ、ハードディスク等を有するコンピュータ装置である。制御部１０はコントローラ１２と通信可能であり、ユーザーが操作するコントローラ１２から指令値を入力する。制御部１０はユーザーから入力される指令値に基づいて、ロボット２の動作パターンを生成ないし計算する。制御部１０は生成した動作パターンを記憶し、記憶された動作パターンを実現するように各関節を駆動する。制御部１０の詳細については、後に詳述する。
センサ１４は体幹４に位置と姿勢を固定された加速度センサ（図示されない）とジャイロセンサ（図示されない）を備えている。加速度センサは３軸の加速度を計測可能であり、ジャイロセンサは３軸まわりの角速度を計測可能である。加速度センサおよびジャイロセンサの計測点は、ロボット２が直立して静止した状態での重心の位置Ｇとほぼ一致するように、その位置を調整されている。センサ１４は制御部１０に接続されており、制御部１０からの指示に応じて加速度と角速度をそれぞれ計測し、制御部１０へ送信する。
【００２２】
図２は本実施例のロボット２が実現する動作の概要を例示している。本実施例のロボット２は、姿勢Ａ１から左脚リンク６を支持脚とする接地相で動作し、右脚リンク８を前方へ振り出して姿勢Ａ２へ移行する。ロボット２は姿勢Ａ２で踏切り、空中相へ移行する。ロボット２は姿勢Ａ３を経て、姿勢Ａ４で右脚リンク８から着地する。ロボット２は姿勢Ａ４から右脚リンク８を支持脚とする接地相で動作し、左脚リンク６を前方へ振り出して姿勢Ａ５へ移行する。ロボット２は姿勢Ａ５で踏切り、空中相へ移行する。ロボット２は姿勢Ａ６を経て、姿勢Ａ７で左脚リンク６から着地する。ロボット２は姿勢Ａ７から左脚リンク６を支持脚とする接地相で動作し、右脚リンク８を前方へ振り出して姿勢Ａ８へ移行する。姿勢Ａ８で支持脚を左脚リンク６から右脚リンク８へ入れ替えて、姿勢Ａ８から右脚リンク８を支持脚とする接地相で動作し、左脚リンク６を前方へ振り出して姿勢Ａ９へ移行する。
図２の破線は、上記した動作態様におけるロボット２の重心の概略の軌道を示している。ロボット２が跳躍する直前の接地相（すなわち、姿勢Ａ１から姿勢Ａ２までの接地相と、姿勢Ａ４から姿勢Ａ５までの接地相）では、その後の跳躍に備えて重心を沈み込ませている。またロボット２が着地した直後の接地相（すなわち、姿勢Ａ４から姿勢Ａ５までの接地相と、姿勢Ａ７から姿勢Ａ８までの接地相）では、跳躍による着地衝撃を和らげるために重心を沈み込ませている。姿勢Ａ４から姿勢Ａ５までの接地相での動作は、着地衝撃を緩和するための重心の沈み込みと、跳躍の準備のための重心の沈み込みとを兼ねている。
上記した動作態様はあくまでも例示のために示したものであり、本実施例のロボット２は接地相と空中相を組み合わせた様々な動作を実現することができる。ロボット２が実現する動作態様は、ユーザーが任意に設定することが可能である。例えば一本足でけんけんをする動作などが含まれていてもよい。
【００２３】
本実施例のロボット２では、生成しようとする動作の態様を、幾つかの動作区間に分割して、予め各動作区間における動作パターンを生成し、記憶している。本実施例のロボット２では、生成する動作の態様において、支持脚となる脚リンクが接地してその足平内にＺＭＰが位置する時点から、次に支持脚となる脚リンクが接地してその足平内にＺＭＰが位置する時点までを、１つの動作区間とする。このような場合、１つの動作区間は、接地相とそれに続く空中相、又は接地相のみによって構成される。
図２に示す動作態様を扱う場合には、最初の接地相の開始時点（すなわち姿勢Ａ１の時点であり、沈み込み動作の開始する時点）から、その接地相に続く空中相の完了時点（すなわち姿勢Ａ４の時点）までを区間１とし、区間１に続く接地相の開始時点（すなわち姿勢Ａ４の時点）から、その接地相に続く空中相の完了時点（すなわち姿勢Ａ７の時点）までを区間２とし、区間２に続く接地相の開始時点（すなわち姿勢Ａ７の時点）からその接地相の完了時点（すなわち姿勢Ａ８の時点）までを区間３とし、区間３に続く接地相の開始時点（すなわち姿勢Ａ８の時点）からその接地相の完了時点（すなわち姿勢Ａ９の時点）までを区間４とする。
【００２４】
以下では、ロボット２の軌道を表現する座標系として、ロボット２の外部で床に固定された座標系（x, y, z）を用いる。またロボット２上の基準点に固定された座標系を（x'、y'、z'）で表現する。本実施例のロボット２では、図２に示すように、支持脚の足平の中心を座標系（x'、y'、z'）の基準点とする。空中相ではどの脚リンクも接地しておらず、ロボット２を支持する脚リンクは存在していないが、便宜上、着地したときに支持脚となる脚リンクを空中相における支持脚と呼ぶ。本実施例のロボット２では、空中相においても接地相と同じように支持脚の足平の中心の点を基準点とする。空中相ではロボット２の重心だけでなく上記の基準点も床に対して移動する。以下ではロボット２上の基準点に固定された座標系（x', y', z'）で記述された位置、速度、加速度および軌道を、それぞれ相対位置、相対速度、相対加速度および相対軌道と表現する。また、座標系（x', y', z'）で記述されたＺＭＰを相対ＺＭＰと表現する。
【００２５】
本実施例のロボット２は、各動作区間の動作パターンを生成して記憶しており、記憶された動作パターンを逐次読み出して動作を実現していく。
ロボット２の動作中にユーザーから指令値が入力されると、ロボット２はそれ以降の動作パターンを再度生成して、新たに入力された指令値に応じた動作パターンを記憶する。記憶された新たな動作パターンは、それ以降の動作に反映される。
上記のようにして、本発明のロボット２は、ユーザーからの指令値が入力される度に、動作パターンを更新しながら動作を継続する。
また本実施例のロボット２は、接地相から空中相へ切替わるときに、実際の重心速度と重心まわりの角運動量を検出して、それ以降の動作パターンを再度生成し、実際の重心速度と重心まわりの角運動量に応じた動作パターンを記憶する。記憶された動作パターンは、それ以降の動作に反映される。
【００２６】
以下では制御部１０の動作の詳細について、図３のブロック図と、図４および図７のフローチャートを用いて説明する。
図３は制御部１０の機能の構成を示すブロック図である。制御部１０はユーザー指令値記憶部３０２と、空中相重心鉛直軌道生成部３０４と、接地相重心鉛直軌道生成部３０６と、接地相重心水平軌道計算部３０８と、空中相重心水平軌道計算部３１０と、重心相対軌道計算部３１４と、遊脚相対軌道計算部３１６と、関節角目標値演算部３１８と、関節駆動部３２０と、センサ制御部３５４と、目標角運動量更新部３６２を備えている。ここでは重心の軌道を計算して生成することから、計算、生成、演算の語を区別なく用いる。重心の鉛直軌道は、ユーザー指令値から直接的に計算されることから生成の語を用い、重心の水平軌道は後述のＺＭＰ方程式を満足するよう計算されることから計算の語を用いることがあるが、技術的には生成も計算も特に区別するものではない。
【００２７】
ユーザー指令値記憶部３０２は、ユーザーから入力されるユーザー指令値３５２を記憶する。ユーザー指令値記憶部３０２は、（１）動作の態様３２１、（２）空中相における跳躍高さ３２２、（３）動作の切替りにおける重心の高さ３２４、（４）接地相の継続時間３２６、（５）接地相における相対ＺＭＰ軌道３２８、（６）目標角運動量の経時的データ３３０、（７）動作の切替りにおける重心の水平方向速度３３２、（８）踏切り時の遊脚足先の位置および速度３３４、等のデータを記憶している。これらのデータの詳細については後述する。
ロボット２の動作中に新たなユーザー指令値３５２が入力されると、制御部１０はユーザー指令値記憶部３０２に記憶されたユーザー指令値を、新たに入力されたユーザー指令値に置き換える。制御部１０は新たにユーザー指令値が入力されると、それ以降の動作パターンを生成する処理を実施する。ユーザーから入力される新たな指令値は、それ以降のロボット２の動作の生成に反映される。ユーザーは、ロボット２の運動を視認しながら、例えばジョイスティック等のコントローラ１２を用いてユーザー指令値を入力することで、ロボット２の動作をリアルタイムに制御することができる。
【００２８】
空中相重心鉛直軌道生成部３０４と、接地相重心鉛直軌道生成部３０６と、接地相重心水平軌道計算部３０８と、空中相重心水平軌道計算部３１０は、ユーザー指令値記憶部３０２に記憶されているユーザー指令値と、センサ制御部３５４によって計測される踏切り時の重心鉛直速度３５６、踏切り時の重心水平速度３５８に基づいて、各動作区間におけるロボット２の重心の軌道を生成する。ここで生成される重心の軌道は、各動作区間において、ロボット２の外部に固定された座標系（x, y, z）で記述されたものであるが、接地相においてはロボット２の基準点（支持脚の足平に位置する）が床に対して移動しないため、ロボット２の基準点に固定された座標系（x’, y’, z’）で記述されたデータとして扱うことができる。各軌道生成部および計算部で行われる処理の詳細については、後に詳述する。
【００２９】
空中相重心鉛直軌道３３６は、各動作区間におけるロボット２の空中相での重心の鉛直方向軌道を記述するデータであり、動作区間の順序を示す符号と、その動作区間における空中相での重心の鉛直方向軌道が、関連付けられている。空中相重心鉛直軌道生成部３０４で、ある動作区間における重心の鉛直方向軌道が生成されるたびに、空中相重心鉛直軌道３３６は更新されていく。
【００３０】
空中相重心水平軌道３４２も、空中相重心鉛直軌道３３６と同様に、各動作区間におけるロボット２の空中相での重心の水平方向軌道を記述するデータであり、動作区間の順序を示す符号と、その動作区間における空中相での重心の水平方向軌道が、関連付けられている。空中相重心水平軌道計算部３１０で、ある動作区間における重心の水平方向軌道が計算されるたびに、空中相重心水平軌道３４２は更新されていく。
接地相重心鉛直軌道３３８、接地相重心水平軌道３４０も、上記した空中相重心鉛直軌道３３６、空中相重心水平軌道３４２と同様に、各動作区間におけるロボット２の接地相での重心の軌道を記述するデータである。これらのデータは、動作区間の順序を示す符号と、その動作区間における接地相での重心の軌道が、関連付けられている。これらのデータは、対応する軌道生成部ないし計算部で、ある動作区間における重心の軌道が生成されるたびに、更新されていく。
【００３１】
重心相対軌道計算部３１４は、空中相重心鉛直軌道生成部３０４と、接地相重心鉛直軌道生成部３０６と、接地相重心水平軌道計算部３０８と、空中相重心水平軌道計算部３１０で生成されるロボット２の重心の軌道と、遊脚相対軌道計算部３１６で計算される遊脚相対軌道３４８に基づいて、ロボット２の重心相対軌道３４６を計算する。
【００３２】
重心相対軌道３４６は、ロボット２の支持脚の足先に設けられた基準点を原点とする座標系（x', y', z'）で重心の軌道を記述したものである。重心相対軌道３４６は、動作区間の順序を示す符号と、その動作区間における重心の相対軌道が、関連付けられている。重心相対軌道計算部３１４で、ある動作区間における重心の相対軌道が計算されるたびに、重心相対軌道３４６は更新されていく。
【００３３】
遊脚相対軌道計算部３１６は、重心相対軌道計算部３１４で計算されるロボット２の重心相対軌道３４６と、ユーザー指令値記憶部３０２に記憶されているユーザー指令値に基づいて、ロボット２の遊脚の足先の相対軌道３４８を計算する。ここで計算される遊脚の足先の相対軌道３４８は、ロボット２の支持脚の足先に設けられた基準点を原点とする座標系（x', y', z'）で記述されたものである。
遊脚相対軌道３４８は、各動作区間におけるロボット２の遊脚の足先の基準点の相対軌道を記述するデータであって、動作区間の順序を示す符号と、その動作区間における遊脚の足先の基準点の相対軌道が、関連付けられている。遊脚相対軌道計算部３１６で、ある動作区間における遊脚の相対軌道が計算されるたびに、遊脚相対軌道３４８は更新されていく。
【００３４】
関節角目標値演算部３１８は、重心相対軌道計算部３１４で計算されるロボット２の重心相対軌道３４６と、遊脚相対軌道計算部３１６で計算されるロボット２の遊脚の足先の基準点の相対軌道３４８に基づいて、ロボット２の各関節の関節角目標値の経時的データ３５０を演算する。
関節角目標値経時的データ３５０は、ロボット２の各関節の目標関節角の経時的データであって、対応する動作区間の順序を示す符号が関連付けられている。関節角目標値演算部３１８で演算が実施されるたびに、関節角目標値経時的データ３５０は更新されていく。
【００３５】
関節駆動部３２０は、関節角目標値の経時的データ３５０に基づいて、ロボット２の各関節を駆動する。
【００３６】
センサ制御部３５４は、ロボット２が接地相から踏切って空中相へ移行するときに、センサ１４に指示を送信して、踏切りの時点における加速度と角速度の計測を実施させる。センサ１４から加速度および角速度の計測値が入力されると、センサ制御部３５４は踏切り時のロボット２の重心鉛直速度３５６、重心水平速度３５８および重心まわりの角運動量３６０を算出する。
【００３７】
目標角運動量更新部３６２は、センサ制御部３５４から出力される踏切り時の角運動量３６０に基づいて、ユーザー指令値記憶部３０２に記憶された目標角運動量経時的データ３３０を更新する。
【００３８】
図４を参照しながら、本発明のロボット２の制御部１０が行う、動作の生成の処理を説明する。図４の処理は、任意の態様の動作を扱うことができるが、以下では例として図２に示す動作の態様を扱う場合について説明する。
【００３９】
まずステップＳ４０２では、動作を生成する動作区間の番号を示す変数kを１に設定する。
【００４０】
次にステップＳ４０４では、最初の動作区間である区間１の重心の軌道を生成する。
ステップＳ４０４で実施する区間１の重心の軌道の生成は、ステップＳ４０８からステップＳ４２０で後述する一般的な区間kにおける重心の軌道の生成と同様であり、ステップＳ４０４はステップＳ４０８からステップＳ４２０の処理をまとめて表現したものである。重心軌道の生成処理の詳細については後述する。
ステップＳ４０４の処理を実行することによって、区間１における重心の鉛直方向軌道および水平方向軌道が生成される。図２に示すように、区間１は接地相と空中相を備えている。生成された区間１の重心の軌道は、空中相重心鉛直軌道３３６、接地相重心鉛直軌道３３８、接地相重心水平軌道３４０、空中相重心水平軌道３４２に反映される。
【００４１】
ステップＳ４０６では、動作を生成する区間を示す番号kに１を加える。
【００４２】
ステップＳ４０８では、制御部１０はこれから動作を生成する区間kの動作に関するユーザー指令値をユーザー指令値記憶部３０２から読み出す。ユーザー指令値としては、以下のパラメータを与えることができる。
（１）ロボット２の動作の態様３２１
（２）空中相における重心の跳躍高さ３２２
（３）動作の切替りにおける重心の高さ（鉛直方向位置）３２４
（４）接地相の継続時間３２６
（５）接地相における相対ＺＭＰ軌道３２８
（６）接地相および空中相における目標角運動量経時的データ３３０
（７）動作の切替りにおける重心の水平方向速度３３２
（８）踏切りの時点における遊脚足先の位置および速度３３４
【００４３】
上記（１）のロボット２の動作の態様３２１は、各動作区間におけるロボット２の動作の特徴を示している。上記のロボット２の動作の態様３２１は、動作区間の順序を示す符号と、各動作区間における空中相の有無を示す符号と、各動作区間の接地相で支持脚となる脚リンクを識別する符号とを備えており、ユーザーが任意に与えることができる。
【００４４】
上記（２）の空中相における重心の跳躍高さは、ロボット２の動作が空中相を備える場合に、ロボット２の重心が到達する最大の高さであって、ロボット２のアクチュエータの性能が許す範囲内で、ユーザーが任意に与えることができる。
【００４５】
上記（３）の動作の切替りにおける重心の高さ（鉛直方向位置）３２４は、ロボット２の動作が接地相と空中相の間で、あるいは接地相と接地相の間で切り替わるときに、ロボット２の重心が実現する高さであって、ロボット２の機構が幾何学的に許す範囲内で、ユーザーが任意に与えることができる。
【００４６】
上記（４）の接地相の継続時間３２６は、各動作区間において接地相が継続する時間であって、ユーザーが任意に与えることができる。
【００４７】
上記（５）の接地相における相対ＺＭＰ軌道は、接地相における目標ＺＭＰの支持脚の足平の基準点に対する位置の経時的データであって、支持脚となる脚リンクの足平内に存在するという制約のもとで、ユーザーが任意に与えることができる。接地相においては、支持脚となる脚リンクの足平内にＺＭＰが存在していれば、ロボット２は転倒することなく動作を継続することができる。
本実施例のロボット２では、接地相における相対ＺＭＰ軌道を、支持脚の足平の中心に固定するように設定する。このような相対ＺＭＰ軌道が実現される場合、ロボット２は転倒することなく、安定して動作を実現することができる。なお接地相における相対ＺＭＰ軌道は、その接地相の間で足平の内部に維持されていれば、どのような軌道を与えてもよい。例えば接地相の間に支持脚の足平の内部の後方から前方へ移動するような軌道を用いてもよい。このような相対ＺＭＰ軌道が実現される場合も、ロボット２は転倒することなく、安定して動作を実現することができる。
【００４８】
上記（６）の接地相および空中相における目標角運動量経時的データ３３０は、ロボット２が実現する重心まわりの回転運動の角運動量の経時的データであって、アクチュエータの性能が許す範囲内で、ユーザーが任意に与えることができる。ロボット２のロール軸（x'軸）およびピッチ軸（y'軸）まわりの角運動量は、ロボット２が所望の姿勢を実現するように設定することが可能である。ヨー軸（z'軸）まわりの角運動量は、ロボット２が所望の旋回動作を実現するように設定することが可能である。
本実施例のロボット２では、すべての動作区間において、ロール軸、ピッチ軸およびヨー軸まわりの角運動量は０となるように設定する。
【００４９】
上記（７）の動作の切替りにおける重心の水平方向速度３３２は、ロボット２の動作が接地相と空中相の間で切り替わるとき、あるいは接地相と接地相の間で切り替わるときに、ロボット２の重心が実現する水平方向速度であって、ロボット２のアクチュエータの性能が許す範囲内で、ユーザーが任意に与えることができる。
【００５０】
上記（８）の踏切りの時点における遊脚足先の位置および速度３３４は、ロボット２が接地相から空中相に移行する時点における遊脚足先の支持脚足先から見た位置と速度であって、ロボット２の機構が幾何学的に許す範囲で、ユーザーが任意に与えることができる。
【００５１】
図４のステップＳ４１０では、区間kの動作が空中相を備えるか否かを判断する。区間kが空中相を備える場合（ステップＳ４１０でＹＥＳの場合）、区間kの空中相の動作を生成するために、処理はステップＳ４１２へ進む。区間kが空中相を備えない場合（ステップＳ４１０でＮＯの場合）、区間kの接地相の動作を生成するために、処理はステップＳ４１４へ進む。
例えばkが２の場合、区間２の動作は空中相を備えているため、処理はステップＳ４１２へ進む。
【００５２】
ステップＳ４１２では、区間kの空中相における重心の鉛直方向軌道を生成する。
空中相ではロボット２が空中に浮いており、重力のみが外力としてロボット２に作用する。従って、空中相ではロボット２の関節をどのように駆動したとしても、その重心の軌道は以下に示す軌道となる。
【００５３】
【数１】
2006247769.tif 000003
【００５４】
上式のgは重力加速度であり、上式のｖz0は区間kで踏切りの時点での重心の鉛直方向の速度であり、ｚ0は踏切りの時点における重心の鉛直方向の位置である。上記のｖz0，ｚ0を与えることによって、空中相における重心の鉛直方向軌道を生成することができる。
上記のｚ0は、踏切りの時点における重心の高さであり、ステップＳ４０８においてユーザー指令値として与えられている。
また上記のｖz0は、踏切りの時点における重心の鉛直方向速度である。このｖz0は、ステップＳ４０８で与えられるユーザー指令値の跳躍高さから算出することができる。踏切りの時点における重心の鉛直方向の速度ｖz0は、跳躍高さhと重力加速度gを用いて以下によって算出される。
【００５５】
【数２】
2006247769.tif 000004
【００５６】
なお、跳躍高さhをユーザー指令値として入力する代わりに、ｖz0を直接ユーザー指令値として与えてもよい。
【００５７】
ステップＳ４１２を実施することによって、区間kの空中相におけるロボット２の重心の鉛直方向の軌道を生成することができる。
図５の（ａ）はロボット２の重心の鉛直方向軌道を模式的に示している。例えばkが２である場合、ステップＳ４１２では区間２の空中相の鉛直方向軌道１０２が生成される。
またステップＳ４１２で生成された空中相におけるロボット２の重心の鉛直方向軌道１０２から、空中相が継続する時間を算出することができる。算出される空中相の継続時間は、後のステップＳ４２０からステップＳ４２２での処理に用いられる。
【００５８】
ステップＳ４１４では、区間kの接地相における重心の鉛直方向軌道を生成する。区間kの接地相における重心の鉛直方向軌道は、その接地相の前後の動作における重心の鉛直方向軌道と滑らかに接続するように生成する。
【００５９】
区間kの接地相の開始時における重心の鉛直方向位置と速度は、すでに生成されている区間k-1の重心の鉛直方向軌道に基づいて、区間k-1の完了時における重心の鉛直方向位置と位置と速度に一致させる。例えばkが２である場合、すでに生成されている区間１の空中相での重心の鉛直方向軌道１１２に基づいて、区間１の完了時１０８での重心の鉛直方向位置と速度を特定し、特定された位置と速度を区間kの接地相の開始時の条件とする。
また、ステップＳ４０４における区間１の重心の鉛直方向軌道の生成の場合、区間kの接地相の開始時の条件は任意に与えることができる。本実施例のロボット２では、区間１の接地相の開始時の条件として、重心の鉛直方向位置をユーザー指令値である重心高さ３２４として、重心の鉛直方向速度を０とする。
【００６０】
区間kの接地相の完了時における重心の鉛直方向位置と速度は、その後の空中相または接地相の開始時における重心の鉛直方向位置と速度に一致させる。
区間kが空中相を備える場合には、接地相の完了時における重心の鉛直方向の位置と速度は、ステップＳ４１２ですでに生成されている空中相での重心の鉛直方向軌道から設定することができる。例えばkが２である場合、接地相の完了時１１０における重心の鉛直方向位置と速度は、ステップＳ４１２ですでに生成されている空中相での重心の鉛直方向軌道１０２から、空中相の開始時１１０での重心の鉛直方向位置と速度を特定し、特定された位置と速度を接地相の完了時の条件とする。
また区間kが空中相を備えておらず、接地相の完了時が区間k+1の接地相の開始時と接続する場合には、区間kの完了時における重心の鉛直方向位置は、ステップＳ４０８で与えられるユーザー指令値から設定することができる。この場合、重心の鉛直方向速度は任意に与えることができる。例えばkが３である場合、区間３は空中相を備えておらず、接地相の重心の鉛直方向軌道１１４の完了時１１６は次の動作区間である区間４の接地相の重心の鉛直方向軌道１１５（この時点ではまだ生成されていない）と接続する。このような場合、重心の鉛直方向位置は、ユーザー指令値として与えられる重心の高さ３２４をそのまま用いる。重心の鉛直方向速度は、任意に与えることができる。
【００６１】
上記のようにして設定された開始時と完了時の条件をもとに、多項式補間を用いて接地相における重心の鉛直方向軌道を生成する。例えば開始時と完了時の位置と速度を拘束条件として、２次または３次の多項式を用いた補間によって、区間kの接地相における重心の鉛直方向軌道を生成する。この結果、例えば接地相の開始時の鉛直方向速度が０であり、接地相の終了時での鉛直方向速度がｖz0である場合、接地相の間に沈み込んでから上昇し、終了時に鉛直方向速度がｖz0となる鉛直方向速度を生成することができる。
【００６２】
ステップＳ４１４の処理を実施することによって、区間kの接地相における重心の鉛直方向軌道を生成することができる。上記の処理によって生成される重心の鉛直方向軌道は、ロボット２の外部に固定された座標系（x, y, z）で記述されたものである。しかしながら、接地相においてはロボット２上の基準点が存在する支持脚の足平は床に対して移動しないため、上記の軌道はそのまま座標系（x', y', z'）で記述されたものに容易に置き換えることができる。図５の（ａ）では、座標系（x, y, z）で記述された軌道を破線で示し、座標系（x', y', z'）で記述された軌道を実線で示している。
【００６３】
ステップＳ４１６では、区間kの接地相における重心の水平方向軌道を計算する。重心の水平方向軌道は、その接地相での重心の鉛直方向軌道と、目標とする相対ＺＭＰ軌道と、目標とする角運動量の経時的データと、その接地相の開始時と完了時における重心の水平方向速度の条件に基づいて決定される。ステップＳ４１６では、重心の鉛直方向軌道と水平方向軌道を実現したときの実際の相対ＺＭＰ軌道が、目標とする相対ＺＭＰ軌道に一致するように、重心の水平方向軌道を計算する。
区間kの接地相での重心の鉛直方向軌道は、ステップＳ４１４ですでに生成されている。目標とする相対ＺＭＰ軌道と角運動量の経時的データは、ステップＳ４０８でユーザー指令値として与えられている。接地相の開始時における重心の水平方向速度は、すでに生成されている区間k-1の重心軌道から、区間k-1の完了時における重心の水平方向速度を特定することで与えられる。接地相の完了時における重心の水平方向速度は、ステップＳ４０８でユーザー指令値として与えられている。ステップＳ４２０では、これらの条件を満足するように、接地相での重心の水平方向軌道を計算する。
【００６４】
以下では接地相における重心の水平方向軌道の計算について説明する。
ロボット２が実現する相対ＺＭＰ位置（px'，py'）は、ロボット２の相対重心位置（x'，y'，z'）と支持脚の足先を原点とする座標系から見たロボット２の重心まわりの角速度（ωx'，ωy'）から計算することができる。ロボット２の相対重心位置とロボット２の重心まわりの角速度から、実際のＺＭＰを計算する下記の式をＺＭＰ方程式と呼ぶ。
【００６５】
【数３】
2006247769.tif 000005
【００６６】
ここで、（１）は時間tに関する１階微分を示し、（２）は時間tに関する２階微分を示している。また、mはロボット２の質量である。
上式のｚ'およびｚ'（２）は、ロボット２の支持脚の足先を原点とする重心の鉛直方向位置と鉛直方向加速度である。接地相ではロボット２の支持脚の足先は床に対して移動しないため、ｚ'およびｚ'（２）はステップＳ４１４で生成された重心の鉛直方向軌道から特定することができる。
上式のIx'ωx'（１）とIy'ωy'（１）は、ロボット２の回転慣性の影響を示す。本実施例では、すべての動作区間においてロール軸（x'軸）およびピッチ軸（y'軸）まわりの角運動量を０としており、Ix'ωx'（１）とIy'ωy'（１）は０である。
【００６７】
上記のＺＭＰ方程式を離散化することによって、重心の水平方向位置（x'、y'）の経時的データを算出する式を導出することができる。ここで言う離散化は、前述のように、時間tに関して単位時間Δtを用いて行う。例えば重心のx'方向の軌道に関しては、下記の関係式を得る。
【００６８】
【数４】
2006247769.tif 000006
【００６９】
ここでx'iとpx'iは、それぞれ重心のx'方向軌道x'(t)と、x'方向の相対ＺＭＰ軌道px'(t)を離散化した変数である。iは単位時間で区分した時刻の順序を示す。数式４は、時刻iにおけるＺＭＰのx'方向座標px'iが、直前のx'方向座標x'i-1と、そのときのx'方向座標x'iと、直後のx'方向座標x'i+1から計算できることを示している。係数ai，bi，ciは、下記によって算出される係数である。
【００７０】
【数５】
2006247769.tif 000007
【００７１】
上記のΔtはＺＭＰ方程式の離散化に用いる時間幅であり、z'iとz'（２）iはそれぞれ重心の鉛直方向の位置と加速度を離散化した変数である。本実施例では、Δtは接地相の継続時間をn等分する時間幅である。
【００７２】
また係数diは、下記によって算出される係数である。
【００７３】
【数６】
2006247769.tif 000008
【００７４】
ここでIy'ωy'（１）iは、目標とするピッチ軸（y'軸）まわりの角運動量を離散化した変数である。なお本実施例のロボット２では、目標とする角運動量は０としているから、図４に示す処理においてdiは全て０である。
【００７５】
本実施例のロボット２では、接地相の開始時と完了時において、重心の軌道が滑らかに変化するように、ロボット２の動作を計算する。このように動作を計算することで、例えばロボット２が踏切りや着地を行う場合や、支持脚を入れ替える場合であっても、ロボット２の重心位置は滑らかに推移し、ロボット２は安定した動作を実現する。
区間kの開始時の重心のx'方向速度ｖx'0は、分割時間幅Δtと、重心の位置x'0、x'1とを用いて、以下によって表現される。
【００７６】
【数７】
2006247769.tif 000009
【００７７】
上記した区間kの開始時における重心のx'方向速度ｖx'0は、すでに計算されている区間k-1の重心の軌道から設定される。例えばkが２である場合、区間２の開始時１０８での重心の水平方向速度ｖx'0は、区間１の水平方向軌道１２０から、区間１の完了時１０８での重心の水平方向速度として特定する。
【００７８】
同じように、区間kの接地相の完了時における重心のx'方向速度ｖx'n-1は、分割時間幅Δtと、重心の位置x'n-2、x'n-1と、以下の関係がある。
【００７９】
【数８】
2006247769.tif 000010
【００８０】
上記した区間kの完了時における重心のx'方向速度ｖx'n-1は、ステップＳ４０８でユーザー指令値として設定されている。
【００８１】
上記した関係を整理すると、結局のところ、実現される相対ＺＭＰ軌道が目標とする相対ＺＭＰ軌道と等しくなる、区間kの接地相における重心のx'方向軌道（x'0，x'1，・・・，x'n-1）は、以下の三重対角行列で示される方程式（３項方程式）を解くことによって算出することができる。
【００８２】
【数９】
2006247769.tif 000011
【００８３】
上式において、左辺は行列と列ベクトルの積で表現されており、その行列は鉛直方向軌道から計算される係数を持つ３重対角行列である。３重対角行列とは、対角成分とそれに隣接する副対角成分のみが有意な値を備え、それ以外の成分が０である行列のことを言う。左辺の列ベクトルは、重心のx'方向軌道（x'0，x'1，・・・，x'n-1）を示す列ベクトルである。右辺の列ベクトルは、目標とする相対ＺＭＰ軌道に目標とする角運動量に基づく補正を加えたものと、接地相の開始時における重心のx'方向速度ｖx'0に単位時間Δtを乗じて距離に変換した値ｖx'0Δtと、接地相の終了時における重心のx'方向速度ｖx'n-1に単位時間Δtを乗じて距離に変換した値ｖx'n-1Δtとを備える列ベクトルである。
【００８４】
数式８において、左辺の３重対角行列の逆行列を算出し、その逆行列と右辺との積を計算することによって、未知数（x'0，x'1，・・・，x'n-1）を計算することができる。従って、重心のx'方向軌道を計算することができる。
上記した計算では、試行錯誤的に重心の水平方向軌道を計算することなく、直接的に目標とする相対ＺＭＰ軌道を満足する重心の水平方向軌道を計算することができる。上記した計算は少ない計算量で実施することが可能であり、接地相重心水平軌道計算部３０８は高速で計算を実施することができる。
【００８５】
図５の（ｂ）はロボット２の重心の水平方向軌道を示す。例えばkが２である場合、ステップＳ４１６では区間２の接地相の水平方向軌道１１８が計算される。
図６にkが２である場合にステップＳ４１６で計算されるx'方向軌道（x'0，x'1，・・・，x'n-1）の詳細を示す。
【００８６】
区間kの接地相におけるy'方向の重心軌道（y'1，・・・，y'n-1）についても、y'方向の相対ＺＭＰ位置（py'1，・・・，py'n-2）と、目標とするロール軸（x'軸）まわりの角運動量と、区間kの接地相の開始時速度ｖy'0と完了時速度ｖy'n-1から、x'方向の重心軌道（x'0，x'1，・・・，x'n-1）と同様にして算出することができる。
【００８７】
なお上記した水平方向速度ｖx'0，ｖy'0の代わりに、重心が移動する方向を示す水平方向の単位ベクトルnx'，ny'と速度絶対値|ｖ|を指令値としてユーザーが与えてもよい。このような場合、水平方向速度ｖx'0，ｖy'0は、以下によって算出される。
【００８８】
【数１０】
2006247769.tif 000012
【００８９】
ステップＳ４１４とステップＳ４１６の処理を実施することによって、接地相における重心の軌道を生成することができる。例えばkが２である場合、区間２の接地相における重心の軌道を生成することができる。区間２の接地相では、その後に続く区間２の空中相での跳躍に備えて、ロボット２の重心を沈み込ませる動作を実現することができる。また区間２の接地相では、重心を沈み込ませることによって、その直前の区間１の空中相に起因する着地衝撃を緩和する動作も実現している。
上記の処理によって生成される重心の軌道を実現することで、ロボット２はＺＭＰを支持脚の足平の内部に維持しながら、重心を上下動させる動作を実現することができる。
【００９０】
上述した方法によって生成される重心軌道の場合、接地相の開始時と完了時において、ＺＭＰ方程式で計算されるＺＭＰが、目標ＺＭＰに一致することは必ずしも保証されていない。しかしながら、接地相の開始時と完了時において重心速度を滑らかに接続していることと、ＺＭＰ方程式を満足しない期間が非常に短い（ＺＭＰ方程式の離散化に用いる時間幅Δtの２倍程度である）ことから、上記で生成される動作を実現するロボット２は転倒することなく安定した動作をすることができる。
【００９１】
ステップＳ４１８では、区間kの動作が空中相を備えるか否かを判断する。区間kが空中相を備える場合（ステップＳ４１８でＹＥＳの場合）、区間kの空中相の動作を計算するために、処理はステップＳ４２０へ進む。区間kが空中相を備えない場合（ステップＳ４１８でＮＯの場合）、処理はステップＳ４２４へ進む。
例えばkが２の場合、区間２の動作は空中相を備えているため、処理はステップＳ４２０へ進む。
【００９２】
ステップＳ４２０では、区間kの空中相における重心の水平方向軌道を計算する。空中相ではロボット２が空中に浮いており、重力のみが外力としてロボット２に作用する。従って、空中相においてはロボット２の関節をどのように駆動したとしても、ロボット２の重心は以下に示すように水平方向に等速直線運動をする。
【００９３】
【数１１】
2006247769.tif 000013
【００９４】
上式のｖx0，ｖy0はロボット２の踏切りの時点での重心の水平方向の速度であり、x0，y0は踏切の時点での重心の水平方向の位置である。
上記のｖx0，ｖy0は、ロボット２の踏切りの時点での重心の水平方向速度でもあり、ロボット２が着地する時点での重心の水平方向速度でもある。ｖx0，ｖy0は、動作の切替りにおける重心の水平方向速度と等しく、ステップＳ４０８においてユーザー指令値として与えられている。
上記のx0，y0は、ロボット２の踏切りの時点での重心の水平方向の位置であり、ステップＳ４１６ですでに計算されている区間kの接地相の完了時の重心の水平方向位置と等しい。
上述したｖx0，ｖy0，x0，y0を与えることによって、重心の水平方向軌道を計算することができる。
【００９５】
ステップＳ４２２では、区間k-1における重心の相対軌道を計算する。接地相については、支持脚の足先は床に対して移動しないため、ステップＳ４１０からステップＳ４２０で生成された重心軌道を、重心の相対軌道に容易に置き換えることができる。空中相の重心の相対軌道は、重心と支持脚の足先との位置関係から計算される。空中相では支持脚も床に対して移動しているため、重心の相対軌道を計算することは、重心に対する支持脚の足先の軌道を計算することに等しい。空中相における支持脚の足先の軌道は、踏切りの時点および着地の時点において、その空中相の前後の接地相における支持脚の足先の軌道と、滑らかに接続するように計算する必要がある。空中相における重心と支持脚の足先との相対位置は、その後の接地相における重心と支持脚の足先との相対位置と滑らかに接続する必要があるため、区間kの接地相での重心の相対軌道を計算したのちに、区間k-1の空中相の重心の相対軌道を計算する。
例えばkが２である場合、図５の（ａ）および（ｂ）の区間２の接地相での重心の相対軌道１０６、１１８を生成したのちに、区間１の空中相の重心の相対軌道１２８、１２０を計算する。
区間k-1が空中相を備えていない場合、重心の相対軌道はすなわち、重心から見た支持脚の足先の相対軌道であるから、ステップＳ４２２では特に処理を行うことなく、ステップＳ４２４へ進む。
なお、図５の（ａ）および（ｂ）では、接地相から空中相へ切替る時に支持脚が入れ替わっているために、重心の相対軌道（実線で示す曲線）は不連続に変化している。一方で、空中相から接地相へ切替る時には支持脚が入れ替らないため、重心の相対軌道は連続に変化している。しかしながら、ロボット２の外部から見た重心の軌道（図５の破線で示す曲線。接地相では、重心の相対軌道と一致している）および支持脚の足先の軌道は、それぞれ連続した軌道であることに注意されたい。
【００９６】
踏切りの時点において、支持脚は入れ替わる場合もあるし、入れ替わらない場合もある。例えばロボット２が１つの脚リンクを支持脚として踏切り、空中相を経た後に、他の脚リンクを支持脚として着地する場合には、踏切りの時点において支持脚は入れ替わる。上記とは異なり、ロボット２が１つの脚リンクを支持脚として踏切り、空中相を経た後に、同一の脚リンクを支持脚として着地する場合には、踏切りの時点において支持脚は入れ替わらない。
踏切りの時点で支持脚が入れ替わる場合、区間k-1の空中相の開始時における重心から見た支持脚の相対軌道（すなわち重心の相対軌道）は、区間k-1の接地相の完了時における遊脚の重心から見た相対軌道と滑らかに接続するように設定する。区間k-1の接地相の完了時における遊脚の足先の重心から見た位置と速度は、ユーザー指令値の踏切りの時点における遊脚の足先の位置と速度３３４と、区間k-1の接地相の完了時における重心の相対軌道から、算出することができる。
踏切りの時点で支持脚が入れ替わらない場合、区間k-1の空中相の開始時における支持脚の相対軌道（すなわち重心の相対軌道）は、区間k-1の接地相における支持脚の相対軌道（すなわち重心の相対軌道）と滑らかに接続するように設定する。すなわち、区間k-1の接地相における重心の相対軌道から、区間k-1の接地相の完了時における重心の相対位置と速度を特定し、区間k-1の空中相の開始時における重心の相対位置と速度として設定する。
例えばkが２である場合、区間１の空中相の踏切りの時点で支持脚は左脚リンク６から右脚リンク８へ入れ替わる。従って、図５の（ａ）および（ｂ）の区間１の空中相の重心の相対軌道１２８、１２０を計算するにあたっては、その空中相の開始時１２６における重心の相対位置と速度は、ユーザー指令値の踏切りの時点における遊脚の足先の位置と速度３３４と、区間１の接地相の完了時における重心の相対軌道１２２、１２４から算出する。
【００９７】
着地の時点においては、区間kの接地相の開始時における重心の相対軌道と滑らかに接続するように、空中相の重心の相対軌道を計算する。区間kの接地相における重心の相対軌道は、ステップＳ４１４およびステップＳ４１６ですでに与えられている。すなわち、区間kの接地相における重心の相対軌道から、区間kの接地相の開始時における重心の相対位置と速度を特定し、区間k-1の空中相の完了時における重心の相対位置と速度として設定する。
例えばkが２である場合、図５の（ａ）および（ｂ）の区間１の空中相における重心の相対軌道１２８、１２０を計算するにあたっては、その空中相の完了時１０８における重心の相対位置と速度を、区間２の接地相における重心の相対軌道１０６、１１８に基づいて、その接地相の開始時１０８における重心の相対位置と速度に一致させる。
【００９８】
区間k-1の空中相における重心の相対軌道は、上記した開始時と完了時での条件に基づいて、例えば多項式補間を用いることによって、計算することができる。
【００９９】
図４のステップＳ４２４では、区間k-1における遊脚の足先の相対軌道を計算する。
区間k-1における遊脚の足先の相対軌道は、区間k-1の前後における脚リンクの動作と滑らかに接続するように計算する。
【０１００】
区間k-1の接地相の開始時における遊脚の足先の相対位置および速度は、区間k-2における重心の相対軌道（すなわち重心からみた支持脚の相対軌道）と、区間k-2における重心と遊脚のそれぞれの相対軌道に基づいて、区間k-1の開始時で遊脚となっている脚リンクの足先が滑らかに移動するように設定する。kが２である場合には、区間１の接地相の開始時における遊脚の足先の相対位置および速度として、区間１で遊脚となる脚リンクの動作開始時の足先の相対位置および速度を用いる。
【０１０１】
区間k-1の接地相の完了時における遊脚の足先の相対軌道は、区間k-1が空中相を備える場合と備えない場合とで扱いが異なる。
区間k-1が空中相を備える場合、踏切りの時点における遊脚の足先の位置と速度は、ステップＳ４０８でユーザー指令値として与えられている。従って、区間k-1の接地相の完了時における遊脚の足先は、ユーザー指令値と一致するように設定される。
区間k-1が空中相を備えない場合、区間k-1の接地相の完了時は、区間kの接地相の開始時と接続する。接地相から接地相へ移行する場合、支持脚となる脚リンクは入れ替わる。従って、本実施例のロボット２ではこのような場合、区間k-1の接地相の完了時における遊脚の位置と速度は、区間k-1の接地相の完了時における重心の位置と速度と、区間kの開始時における重心の相対位置と速度に基づいて、脚リンクの足先の移動が滑らかなものとなるように設定する。
【０１０２】
区間k-1が空中相を備える場合には、空中相における遊脚の足先の相対軌道は下記によって計算される。空中相における遊脚の足先の相対軌道は、踏切りの時点で支持脚が入れ替わる場合と入れ替わらない場合とで扱いが異なる。
踏切りの時点で支持脚が入れ替わる場合、区間k-1の空中相の開始時における遊脚の足先の重心から見た位置と速度は、区間k-1の接地相の完了時における支持脚の重心から見た位置と速度に一致させる。区間k-1の空中相の完了時における遊脚の足先の位置と速度は、任意に与えることができる。
踏切りの時点で支持脚が入れ替わらない場合、区間k-1の空中相の開始時における遊脚の足先の重心から見た位置と速度は、区間k-1の接地相の完了時における遊脚の重心から見た位置と速度に一致させる。区間k-1の空中相の完了時における遊脚の足先の位置と速度は、任意に与えることができる。
【０１０３】
上記した遊脚の足先の相対軌道の計算は、接地相および必要であれば空中相の開始時と完了時における位置と速度の条件に基づいて、例えば多項式補間を用いることによって、計算することができる。
【０１０４】
ステップＳ４２６では、上述した処理によって計算された重心および遊脚の相対軌道を実現する、関節角の目標値を算出する。関節角の目標値はいわゆる逆キネマティクス演算によって算出することができる。
重心の相対並進運動量Pg、重心の相対角運動量Lg、遊脚足先の相対速度ｖfおよび遊脚足先の角速度ωfは、関節角の角速度θ（１）と、それぞれヤコビ行列Jg（θ）、Kg（θ）、Jf（θ）、Kf（θ）を用いて、以下で表現される。
【０１０５】
【数１２】
2006247769.tif 000014
【０１０６】
上式のうち関節角の角速度θ（１）は関節角の角度θを時間に関して１階微分したものである。関節角の角度θは、以下に示すように、ロボット２の関節角群（θ1、θ2、・・・、θn-1）である。
【０１０７】
【数１３】
2006247769.tif 000015
【０１０８】
重心の相対並進運動量Pg、重心の相対角運動量Lg、遊脚足先の相対速度ｖfおよび遊脚足先の角速度ωfは、それぞれ以下である。
【０１０９】
【数１４】
2006247769.tif 000016
【０１１０】
ただし、上記において（θgx'、θgy'、θgz'）は支持脚の足先に固定された座標系から見た重心の相対回転角であり、（x'f、y'f、z'f）は遊脚の足先の相対位置であり、（θx'f、θy'f、θz'f）は遊脚足先の相対回転角である。
【０１１１】
遊脚足先のヤコビ行列は、遊脚の数だけ存在する。本実施例のロボット２は、２つの脚リンクを備えており、遊脚を１の脚リンクとして関節角の目標値を演算する。
目標とするロボット２の運動Pg、Lg、ｖf、ωfを満たす関節角速度θ（１）は、無数の解を持つ冗長系となっている。本実施例のロボット２では、第１サブタスクとして目標とする重心の相対速度を実現すること、第２サブタスクとして目標とする角運動量を実現すること、第３サブタスクとして目標とする遊脚足先の相対軌道を実現することを条件として、目標関節角の経時的データを演算する。上記したような複数のヤコビ行列で表される拘束条件を、それぞれの条件に優先度をつけながら、冗長度の許す限り最適な解を求める手法は、従来から提案されており、説明を省略する。
【０１１２】
上記のうち、目標とする重心の相対速度は、ステップＳ４２２で与えられている。目標とする角運動量は、ユーザー指令値で与えられている。本実施例のロボット２では、目標とする角運動量は０である。目標とする遊脚足先の相対軌道はステップＳ４２４で与えられている。
【０１１３】
上記した処理を実施することによって、重心の相対軌道、目標とする角運動量、および遊脚足先の相対軌道を拘束条件として、関節角の目標値を演算することができる。これによって、ロボット２の安定な動作パターンを生成することができる。このような手法をとることによって、脚だけでなく腕や胴体などのすべてのロボット２の自由度を用いて動作パターンを生成することが可能となり、より自然で柔軟な動作パターンを作り出すことができる。
ステップＳ４２６で演算される関節角目標値の経時的データ３５０は、制御部１０に記憶される。
【０１１４】
ステップＳ４２８では、全ての動作区間について、重心軌道の生成が終了しているか否かを判断する。この判断は、処理の対象としている動作区間の番号kを、最後の動作区間の番号kmaxと比較することによって行う。本実施例のロボット２では、図２に示す動作態様を想定しており、最後の動作区間の番号kmaxは４である。kがkmax以上の場合（ステップＳ４２８でＹＥＳの場合）、全ての動作区間について、重心軌道の生成が終了したと判断して、処理はステップＳ４３０へ進む。kがkmax未満の場合（ステップＳ４２８でＮＯの場合）、未だ重心軌道を生成していない動作区間について重心軌道を生成するために、処理はステップＳ４０６へ移行し、ステップＳ４０６からステップＳ４２８までの処理を繰返し実施する。
【０１１５】
ステップＳ４３０では、最後の動作区間kについて、重心の相対軌道、遊脚の相対軌道および関節角目標値の経時的データを生成する。ステップＳ４３０で実施する処理は、ステップＳ４２２、Ｓ４２４およびＳ４２６で詳述した処理と同様であるので、説明を省略する。
【０１１６】
上記した図４の処理によって、図２に示す動作の態様を実現する関節角目標値の経時的データ３５０が生成される。生成された関節角目標値の経時的データ３５０は、制御部１０に記憶される。
【０１１７】
ロボット２に実際に動作を開始させると、制御部１０は記憶された関節角目標値の経時的データ３５０に基づいて、関節駆動部３２０でロボット２の各関節を逐次駆動していく。これによって、ロボット２はユーザー指令値に基づいた安定した動作を実現していく。
【０１１８】
本実施例のロボット２において、制御部１０は記憶された関節角目標値の経時的データ３５０を読み出しながら、動作区間の切替わりを看視する。動作区間の切替わりを検出すると、制御部１０は図７に示す動作の更新処理を実施する。
【０１１９】
以下では図７を参照しながら、制御部１０が行う動作の更新処理について説明する。
ステップＳ７０２では、その時点でロボット２が実現している動作の動作区間kを特定する。
ステップＳ７０４では、区間kが空中相を含むか否かを判断する。区間kが空中相を含む場合（ステップＳ７０４でＹＥＳの場合）、処理はステップＳ７０６へ進み、動作パターンの更新処理を実施する。区間kが空中相を含まない場合（ステップＳ７０４でＮＯの場合）、制御部１０は動作パターンを更新することなく、処理を終了する。
【０１２０】
ステップＳ７０６では、区間kの踏切りの時点における重心の速度と、重心まわりの角運動量を計測する。制御部１０は区間kについての接地相重心鉛直軌道３３８に基いてロボット２が踏切るタイミングを特定し、ロボット２が踏切るタイミングにおいてセンサ制御部３５４に重心速度と角運動量の計測を指示する。
【０１２１】
センサ制御部３５４は、ロボット２が実際に動作を開始してから、所定の時間間隔毎に、センサ１４に指示して加速度を計測し、加速度の経時的変化を記憶している。
センサ１４で計測される加速度は、センサ１４の計測点における加速度であって、ロボット２の重心における加速度ではない。センサ制御部３５４はセンサ１４の計測点における加速度から、重心の加速度を算出する。重心の加速度は、例えばエンコーダの出力からロボット２の各関節の関節角の実際の経時的変化を記憶しておき、各関節の関節角の経時的変化から重心とセンサ１４の計測点との相対加速度を算出して、その相対加速度を計測されたセンサ１４の計測点における加速度に加えることによって、算出することができる。
センサ制御部３５４は、上記で算出される重心の加速度の経時的変化を記憶している。またロボット２が実際に動作を開始した時点から現在までの重心の加速度を積分することで、重心速度を算出しその経時的変化を記憶している。
センサ制御部３５４は重心速度の計測を指示されると、その時点での重心速度を踏切り時の重心鉛直速度３５６、踏切り時の重心水平速度３５８として出力する。
【０１２２】
センサ制御部３５４は、角運動量の計測を指示されると、センサ１４に指示して計測点における角速度を計測する。
センサ１４で計測された角速度は、センサ１４の計測点まわりの角速度であって、ロボット２の重心まわりの角速度ではない。センサ制御部３５４はセンサ１４の計測点まわりの角速度から、重心まわりの角速度を算出する。重心まわりの角速度は、例えばエンコーダの出力から各関節の関節角の実際の経時的変化を記憶しておき、重心に対するセンサ１４の計測点の角速度を算出して、その結果に計測されたセンサ１４の計測点まわりの角速度を加えることによって、算出することができる。
センサ制御部３５４は、上記の算出された重心まわりの角速度と、踏切り時の姿勢におけるロボット２の慣性モーメントから、踏切り時の角運動量３６０を決定する。
【０１２３】
またステップＳ７０６では、目標角運動量経時的データ３３０の更新も行う。
ステップＳ７０６では、区間kの空中相に関して、センサ制御部３５４から出力される踏切り時の角運動量３６０を、新たな目標角運動量として設定する。区間k+1以降に関しての目標角運動量は、変更することなく、ユーザー指令値として入力される値をそのまま使用する。
【０１２４】
ステップＳ７０８では、区間kの空中相における重心の鉛直方向軌道を生成する。ステップＳ７０８で行う処理は、図４のステップＳ４１２での処理と同様である。ただし図４のステップＳ４１２では重心の初速度としてユーザー指令値である跳躍高さ３２２から算出される値を用いたが、図７のステップＳ７０８では重心の初速度としてセンサ制御部３５４から出力された実際のロボット２の重心の鉛直方向速度３５６を用いる。
ステップＳ７０８で新たに生成された区間kの空中相における重心の鉛直方向軌道は、記憶されているデータと置き換えられて、その後の動作の生成に利用される。
図８の（ａ）は更新処理を行う前の重心の鉛直方向軌道を示しており、（ｂ）は更新処理を実施した後の重心の鉛直方向軌道を示している。
ステップＳ７０８の処理では、（ａ）に示す空中相における重心の鉛直方向軌道１１２は、図８では矢印８３０で示される実際の重心の鉛直方向速度３５６に基づいて、（ｂ）に示す空中相における重心の鉛直方向軌道８１２に更新される。
【０１２５】
ステップＳ７１０では、区間kの空中相における重心の水平方向軌道を生成する。ステップＳ７１０で行う処理は、図４のステップＳ４２０での処理と同様である。ただし図４のステップＳ４２０では重心の初速度としてユーザー指令値を用いたが、図７のステップＳ７１０では重心の初速度として計測された実際のロボット２の重心の水平方向速度３５８を用いる。
ステップＳ７０８、ステップＳ７１０の処理によって、区間kの空中相において、その後着地するまでの間の重心の軌道が更新される。ステップＳ７１２以降の処理では、着地した後の動作について更新処理を行う。
【０１２６】
ステップＳ７１２では、処理の対象とする区間kを１進める。
ステップＳ７１４からステップＳ７２６までの処理では、区間kにおける重心軌道を再度生成する。区間kにおける重心軌道の生成は、図４のステップＳ４０８からステップＳ４２０までの処理と同様であるから、説明を省略する。
ステップＳ７１４からステップＳ７２６までの処理によって、着地後の区間kにおける重心の軌道が更新される。ステップＳ７２８以降の処理では、区間k-1における脚リンクの足先の軌道の更新を行う。図７の更新処理においてステップＳ７２８以降の処理を最初に実施する場合には、現在ロボット２が実現している動作区間における、着地するまでの間の脚リンクの足先の軌道を更新する処理に相当する。
【０１２７】
ステップＳ７２８では、区間k-1における重心の相対軌道を生成する。またステップＳ７３０では、区間k-1における遊脚の相対軌道を生成する。これらの処理は、図４のステップＳ４２２、ステップＳ４２４の処理と同様であるから、説明を省略する。
【０１２８】
ステップＳ７３２では、区間k-1における関節角目標値を生成する。ステップＳ７３２の処理は、図４のステップＳ４２６と同様であるから、説明を省略する。
【０１２９】
ステップＳ７３４では、全ての動作区間について、重心軌道の更新が終了しているか否かを判断する。この判断では、kをkmaxと比較する。図２に示す動作態様の場合、kmaxは４である。kがkmax以上の場合（ステップＳ７３４でＹＥＳの場合）、全ての動作区間について、重心軌道の更新が終了したと判断して、処理はステップＳ７３６へ進む。kがkmax未満の場合（ステップＳ７３４でＮＯの場合）、さらに重心軌道を更新するために、処理はステップＳＳ７１２へ移行し、ステップＳ７１２からステップＳ７３４までの処理を繰返し実施する。
【０１３０】
ステップＳ７３６では、最後の動作区間kについて、重心の相対軌道、遊脚の相対軌道および関節角目標値の経時的データを生成する。ステップＳ７３４で実施する処理は、ステップＳ７２８、Ｓ７３０およびＳ７３２で詳述した処理と同様であるので、説明を省略する。
【０１３１】
上記した図７の処理によって、ロボット２の動作パターンは更新される。図８の（ａ）は図７の更新処理を実施する前の重心の鉛直方向軌道を示しており、（ｂ）は図７の更新処理を実施した後の重心の鉛直方向軌道を示している。
区間１の踏切り時において、図中矢印８３０で示される計測された実際の重心の鉛直方向速度３５６が、目標とする重心の鉛直方向軌道１１２に適合しない場合であっても、（ｂ）に示すように、矢印８３０で示される計測された重心の鉛直方向速度３５６に適合する重心の鉛直方向軌道８１２に更新される。そして、区間１の空中相における重心の鉛直方向軌道８１２の更新に合わせて、区間２以降の重心の鉛直方向軌道８０２、８０６が更新される。そして、更新された区間２の接地相における重心の鉛直方向軌道８０６に適合するように、区間１の空中相における重心の相対軌道８２８が更新される。空中相における重心の相対軌道は、すなわち空中相における重心に対する支持脚の足先の軌道を示している。
図８には遊脚の足先の相対軌道を図示していないが、遊脚足先の相対軌道についても、重心の相対軌道８２８と同様に、実際のロボット２の運動状態に適合するように更新される。
図８では鉛直方向の軌道について図示しているが、水平方向の軌道についても、同様に更新される。
【０１３２】
上記の処理においては、ロボット２が踏切ってから着地するまでの間に、着地するまでの重心軌道が更新され、着地後の重心軌道が更新されて、着地するまでの脚リンクの足先の軌道が更新される。これによって、脚リンクが着地する位置は、重心の軌道と同様に、実際のロボット２の運動状態に応じて更新される。
従って、ロボット２の実際の運動状態が、目標とする運動状態から大きく外れてしまった場合であっても、ロボット２は無理な姿勢をとることがなく、安定して着地後の動作を実現することができる。
【０１３３】
本実施例では動作区間が切替わるごとに空中相の有無を評価し、予め生成された関節角目標値の経時的データに基づいてロボット２が踏切った時点を検出している。踏切り時点の検出はこれに限らず、例えば、ロボット２の足平に力センサまたは測距センサを配置し、支持脚の足平が床から離れたか否かを検出することによって、ロボット２の踏切り時点を検出してもよい。
【０１３４】
上記の実施例では、体幹４に設けられた加速度センサの計測値と、各関節の関節角の経時的変化から重心の加速度を算出し、重心の加速度を積分することによって重心速度を検出する例を説明した。重心加速度の検出はこれに限らず、例えば複数の加速度センサをロボット２に搭載して、それらの加速度センサの計測点の位置と計測値から、重心の加速度を算出してもよい。また加速度センサの計測値とジャイロセンサの計測値から、重心の加速度を算出してもよい。
【０１３５】
上記ではセンサ１４から計測される加速度に基づいて重心速度を計測する例を説明したが、重心速度の計測はこれに限らない。
例えば位置が既知である対象までの距離を知ることが可能な測距センサを用いてロボット２の代表点の位置を計測し、代表点と重心との相対的な位置関係を各関節の関節角から算出し、重心と代表点の相対位置と計測される代表点の位置とから重心の位置を算出し、その時間変化率を算出することによっても、重心の速度を知ることができる。また、センサ１４としてＧＰＳ受信機を体幹４に搭載し、取得される位置と各関節の関節角から重心の位置を算出し、重心位置の経時的変化から重心速度を算出してもよい。
また、各関節の関節角の経時的変化のみを用いて直接的に重心速度を算出してもよい。
【０１３６】
上記の実施例では、体幹４に設けられた角速度センサを用いて重心まわりの角運動量を検出する例を説明した。重心まわりの角運動量の検出はこれに限らず、例えばエンコーダ等によって各関節の関節角の経時的変化を計測し、直接的に重心まわりの角運動量を算出してもよい。
【０１３７】
上記の実施例では２の脚リンクを備える脚式ロボット２について説明したが、本発明は３以上の脚リンクを備える脚式ロボットとして具現化することもできるし、１の脚リンクのみを備える脚式ロボットとして具現化することもできる。
【０１３８】
以上、本発明の実施形態について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【０１３９】
【図１】図１は本発明のロボット２の概観を示す図である。
【図２】図２は本発明のロボット２の動作の概要を示す図である。
【図３】図３は本発明のロボット２の制御部１０の構成を示すブロック図である。
【図４】図４は本発明のロボット２の制御部１０が実施する動作生成の処理を示すフローチャートである。
【図５】図５は制御部１０で生成されるロボット２の重心の相対軌道を示す図である。
【図６】図６は制御部１０で生成されるロボット２の重心の相対軌道の一部を示す図である。
【図７】図７は制御部１０が実施する動作更新の処理を示すフレーチャートである。
【図８】図８は制御部１０で更新されるロボット２の重心の相対軌道を示す図である。
【符号の説明】
【０１４０】
２・・・脚式ロボット
４・・・体幹
６・・・左脚リンク
８・・・右脚リンク
１０・・・制御部
１２・・・コントローラ
１４・・・センサ
１０２、１０６、１１４、１１５、１２２、１２８・・・重心の鉛直軌道
１０４、１１８、１２０、１２４・・・重心の水平軌道
１０８、１１０、１１６、１２６・・・動作区間の境界
８０２、８０６、８１２、８２８・・・重心の鉛直方向軌道
８３０・・・矢印
【図１】
2006247769.tif 000017
【図２】
2006247769.tif 000018
【図３】
2006247769.tif 000019
【図４】
2006247769.tif 000020
【図５】
2006247769.tif 000021
【図６】
2006247769.tif 000022
【図７】
2006247769.tif 000023
【図８】
2006247769.tif 000024