(57)【要約】  ロボットの上半身に外力が加えられた場合に、反射制御部（１２３ｄ）が、ジャイロインデックスを用いて反射制御が必要であるか否かを判定し、反射制御が必要と判定した場合には、ＺＭＰの位置、ＺＭＰの位置変化量およびロボットが片脚立ちか両脚立ちかに基づいて適切な反射制御を行う。なお、ジャイロインデックスは、ジャイロセンサによって検出される横向き（ローリング）方向および前後（ピッチング）方向の胴体の回転角度から算出され、ＺＭＰの位置は足裏に設けられた力センサによって検出される力から算出される。
2009040885.tif 000002
【特許請求の範囲】
【請求項１】
ロボットの歩行を制御するロボット制御装置であって、
ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御手段と、
前記歩行動作制御手段による制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御手段と、
を備えたことを特徴とするロボット制御装置。
【請求項２】
前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、所定の安定領域内にない場合には、歩行動作を停止し、ローリング振幅およびＺＭＰフィードバックゲインを増加し、上げている脚を外力により上半身が振られた方向へ移動する制御を実行することを特徴とする請求項１に記載のロボット制御装置。
【請求項３】
前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、片脚立ちである場合には、歩行動作を停止し、上げている脚を外力の方向へ動かして着地し、外力の減少にともなって元の姿勢に復帰する制御を実行することを特徴とする請求項１または２に記載のロボット制御装置。
【請求項４】
前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能である場合には、歩行動作を停止し、上半身を前屈し、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行することを特徴とする請求項１または２に記載のロボット制御装置。
【請求項５】
前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能でない場合には、歩行動作を停止し、上半身を前屈するとともに脚を折り曲げ、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行することを特徴とする請求項１または２に記載のロボット制御装置。
【請求項６】
ロボットの歩行を制御するロボット制御方法であって、
ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御ステップと、
前記歩行動作制御ステップによる制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御ステップと、
を含んだことを特徴とするロボット制御方法。
【請求項７】
ロボットの歩行を制御するロボット制御プログラムであって、
ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御手順と、
前記歩行動作制御手順による制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御手順と、
をコンピュータに実行させることを特徴とするロボット制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ロボットの歩行を制御するロボット制御装置、ロボット制御方法およびロボット制御プログラムに関し、特に、歩行中に上半身に加えられた外力にロボットを対応させることができるロボット制御装置、ロボット制御方法およびロボット制御プログラムに関するものである。
【背景技術】
【０００２】
近年、ヒューマノイドロボット、特にヒューマノイドロボットの歩行は数多くの研究者の注意を引いている。このヒューマノイドロボットの歩行に関する研究の大部分は、ＺＭＰ（Zero  Moment  Point）規範を用いている。このＺＭＰ規範は、支持多角形の内部にＺＭＰを留めるように制御する。このアプローチでは、ヒューマノイドロボットやロボットの周囲環境を正確にモデリングし、微分方程式を解くことになる。ところが、このモデリングはアンノウンな要素がある場合には難しくなる。さらに、微分方程式を解くのに時間がかかるため、リアルタイム制御は困難なものとなる。【０００３】
他のアプローチとして、ＺＭＰ規範を用いない方法がある。例えば、ロボットの可動部の周期運動を利用して、ロボットの姿勢が安定するよう周期運動の位相を調節する従来技術がある（特許文献１を参照）。ここで、可動部とは、ロボットの脚や腕である。【０００４】
また、ヒューマノイドロボットやロボットの周囲環境のモデリングを不要としつつ、ヒューマノイドロボットがさまざまな運動を安定して行うことができるよう効率的に制御する技術が特許文献２に記載されている。【０００５】
【特許文献１】特開２００５−９６０６８号公報
【特許文献２】特開２００７−１７５８０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、かかる従来技術には、歩行中に上半身に外力を受けるとロボットは周期運動を継続することが不可能となり、ロボットを制御下に置くことができなくなるという問題がある。【０００７】
本発明は、上記に鑑みてなされたものであって、歩行中に上半身に加えられた外力にロボットを対応させることができるロボット制御装置、ロボット制御方法およびロボット制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明は、ロボットの歩行を制御するロボット制御装置であって、ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御手段と、前記歩行動作制御手段による制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御手段と、を備えたことを特徴とする。【０００９】
また、本発明は、ロボットの歩行を制御するロボット制御方法であって、ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御ステップと、前記歩行動作制御ステップによる制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御ステップと、を含んだことを特徴とする。【００１０】
また、本発明は、ロボットの歩行を制御するロボット制御プログラムであって、ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成し、ロボットが予め定められた歩行動作を行うように制御する歩行動作制御手順と、前記歩行動作制御手順による制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行する反射制御手順と、をコンピュータに実行させることを特徴とする。【００１１】
かかる発明によれば、ロボットが転倒することなく単独で立っている参照姿勢を少なくとも含む複数の異なる時点の姿勢に基づいて制御情報を生成して、ロボットが予め定められた歩行動作を行うように制御し、制御中にジャイロインデックスの値が所定の閾値より大きいか否かを判定し、所定の閾値より大きい場合に反射制御を実行するよう構成したので、ロボットの上半身に加えられた外力を適切に検出して反射制御を実行することができる。【００１２】
また、本発明は、上記発明において、前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、所定の安定領域内にない場合には、歩行動作を停止し、ローリング振幅およびＺＭＰフィードバックゲインを増加し、上げている脚を外力により上半身が振られた方向へ移動する制御を実行することを特徴とする。【００１３】
本発明によれば、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、所定の安定領域内にない場合には、歩行動作を停止し、ローリング振幅およびＺＭＰフィードバックゲインを増加し、上げている脚を外力により上半身が振られた方向へ移動する制御を実行するよう構成したので、大きな外力に対しても適切に対応することができる。【００１４】
また、本発明は、上記発明において、前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、片脚立ちである場合には、歩行動作を停止し、上げている脚を外力の方向へ動かして着地し、外力の減少にともなって元の姿勢に復帰する制御を実行することを特徴とする。【００１５】
本発明によれば、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、片脚立ちである場合には、歩行動作を停止し、上げている脚を外力の方向へ動かして着地し、外力の減少にともなって元の姿勢に復帰する制御を実行するよう構成したので、外力が大きくない場合には歩行動作を継続することができる。【００１６】
また、本発明は、上記発明において、前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能である場合には、歩行動作を停止し、上半身を前屈し、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行することを特徴とする。【００１７】
本発明によれば、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能である場合には、歩行動作を停止し、上半身を前屈し、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行するよう構成したので、ロボットを安定させることができる。【００１８】
また、本発明は、上記発明において、前記反射制御手段は、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能でない場合には、歩行動作を停止し、上半身を前屈するとともに脚を折り曲げ、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行することを特徴とする。【００１９】
本発明によれば、ジャイロインデックスの値が所定の閾値より大きい場合の反射制御として、ＺＭＰが所定の安定領域内にあるか否かを判定し、ＺＭＰが所定の安定領域内にある場合には片脚立ちであるか否かを判定し、両脚立ちである場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定し、ＺＭＰを所定の安定領域内に維持可能でない場合には、歩行動作を停止し、上半身を前屈するとともに脚を折り曲げ、ジャイロフィードバックの目標値を前屈量に応じて変更する制御を実行するよう構成したので、ロボットをより安定させることができる。
【発明の効果】
【００２０】
本発明によれば、ロボットの上半身に加えられた外力を適切に検出して反射制御を実行するので、ロボットの転倒を防ぎ、安定させることができるという効果を奏する。
【図面の簡単な説明】
【００２１】
【図１】図１は、本実施例に係るロボット歩行を説明する図である。
【図２】図２は、各フレームＰ０〜Ｐ１１の状態遷移図である。
【図３】図３は、本実施例に係るロボットの概略図である。
【図４】図４は、ロボットの歩行運動を説明するタイムチャートである。
【図５】図５は、本実施例に係るロボット制御システムの機能ブロック図である。
【図６】図６は、中央制御部の構成を示す機能ブロック図である。
【図７】図７は、ＺＭＰの軌跡を示す図である。
【図８】図８は、反射制御部によるＺＭＰの計算法を示す図である。
【図９】図９は、反射制御部による反射制御の処理手順を示すフローチャートである。
【図１０】図１０は、第１反射制御の処理手順を示すフローチャートである。
【図１１】図１１は、第２反射制御の処理手順を示すフローチャートである。
【図１２】図１２は、第３反射制御の処理手順を示すフローチャートである。
【図１３】図１３は、第４反射制御の処理手順を示すフローチャートである。
【図１４】図１４は、本実施例に係るロボット制御プログラムを実行するコンピュータの構成を示す機能ブロック図である。
【符号の説明】
【００２２】
１０    ピッチ腰関節
１１Ｒ    右ヨー股関節
１１Ｌ    左ヨー股関節
１２Ｒ    右ロール股関節
１２Ｌ    左ロール股関節
１３Ｒ    右ピッチ股関節
１３Ｌ    左ピッチ股関節
１４Ｒ    右ピッチ膝関節
１４Ｌ    左ピッチ膝関節
１５Ｒ    右ピッチ足首関節
１５Ｌ    左ピッチ足首関節
１６Ｒ    右ロール足首関節
１６Ｌ    左ロール足首関節
２０    胴体
３０Ｒ    右脚
３０Ｌ    左脚
４０    足裏
５０ａ〜５０ｄ，１１５1〜１１５m    力センサ
６０，１１１    ジャイロセンサ
１００    外部端末装置
１１０    ロボット
１１２    ジャイロセンサ制御部
１１３1〜１１３n    関節
１１４1〜１１４n    関節制御部
１１６1〜１１６m    力センサ制御部
１２１    通信インターフェース
１２２    メモリ
１２３    中央制御部
１２３ａ    動作生成部
１２３ｂ    コンプライアンス制御部
１２３ｃ    フィードバック制御部
１２３ｄ    反射制御部
１２３ｅ    補正部
２００    コンピュータ
２１０    ＲＡＭ
２２０    ＣＰＵ
２３０    フラッシュメモリ
２３１    ロボット制御プログラム
２４０    ＵＳＢインターフェース
２５０    ＣＯＭインターフェース
【発明を実施するための最良の形態】
【００２３】
以下に、本発明に係るロボット制御装置、ロボット制御方法およびロボット制御プログラムの実施例を図面に基づいて詳細に説明する。
【実施例】
【００２４】
図１は、本実施例に係るロボット歩行を説明する図である。ここで、ロボットの右脚は実線で、ロボットの左脚は点線で表されている。ここでは、あらかじめロボットの歩行運動中のさまざまな姿勢を定義する複数のフレームＰｉがロボット制御装置に設定される。正確には、フレームはロボットの関節の角度などのパラメータを定義する。【００２５】
図１では、Ｐ０からＰ１１までの１２のフレームが設定されている。ただし、このフレーム数は任意である。フレームＰ０は、ロボットが倒れることなく単独で立っている歩行前の姿勢を表している。フレームＰ１，Ｐ６，Ｐ１１は、ロボットが倒れることなく単独で立って、動かないでいる姿勢である。【００２６】
たとえば、フレームＰ６では、ロボットのリニア速度は０であり、ロボットは左脚のみで立っており、歩幅は０である。フレームＰ１とフレームＰ１１のロボットの状態は同じである。すなわち、これらのフレームＰ１，Ｐ１１においては、ロボットのリニア速度は０であり、ロボットは右脚のみで立っており、歩幅は０となっている。歩幅が０とは、ロボットの両脚が揃っていることを意味する。フレームＰ１，Ｐ６，Ｐ１１においては、ロボットは単独で立っており、また、歩幅は０であるので、これらのフレームをリファレンスフレームと呼ぶこととする。【００２７】
あるフレームから別のフレームへの切り替えは、すべての介在するフレームの姿勢を補間することにより行われる。また、リファレンスフレーム以外のフレームにおける各姿勢は大まかに定義されたものであり、これらの各姿勢は歩行が安定的に行われるように適宜修正される。【００２８】
図２は、各フレームＰ０〜Ｐ１１の状態遷移図である。ロボットの状態は、フレームＰ０からリファレンスフレームＰ１（リファレンスフレームＰ１１と同じ）あるいはリファレンスフレームＰ６に遷移する。また、ロボットの状態は、リファレンスフレームＰ１あるいはリファレンスフレームＰ６からフレームＰ０に遷移することもできる。図１の例では、まず、フレームＰ０からリファレンスフレームＰ１にロボットの状態が遷移する。その後、ロボットの状態は、リファレンスフレームＰ２からリファレンスフレームＰ１０を経由してリファレンスフレームＰ１１に遷移する。【００２９】
このように、ロボットが転倒することなく単独で立っているリファレンスフレームＰ１，Ｐ６，Ｐ１１を含むフレーム情報を取得し、ロボットの動作がリファレンスフレームＰ１，Ｐ６，Ｐ１１の姿勢となるようフレームＰ０〜Ｐ１１の間で姿勢を補間することにより、ロボットの状態が制御される。その結果、たとえロボットの姿勢が不安定になった場合でも、リファレンスフレームでは姿勢が安定な状態となる。すなわち、ロボットは歩行運動を安定して継続することができる。【００３０】
また、リファレンスフレームＰ６，Ｐ１１では、ロボットは歩行を停止し、安定して立っている状態なので、それ以降の歩行の歩幅を変更したり、歩行する方向を変更したり、あるいは、歩行以外の運動を開始したりすることが容易にできる。【００３１】
図３は、本実施例に係るロボットの概略図である。このロボットは、胴体２０、胴体に備えられたジャイロセンサ６０、右脚３０Ｒおよび左脚３０Ｌの２本の脚を有する。また、各脚は６つの関節を有する。すなわち、各脚の自由度は６である。なお、関節の数は任意である。【００３２】
関節は、ピッチ腰関節１０、右ヨー股関節１１Ｒ、左ヨー股関節１１Ｌ、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ピッチ股関節１３Ｒ、左ピッチ股関節１３Ｌ、右ピッチ膝関節１４Ｒ、左ピッチ膝関節１４Ｌ、右ピッチ足首関節１５Ｒ、左ピッチ足首関節１５Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌを含む。各関節には、モータ（図示せず）が組み込まれている。各関節のモータは、それぞれの関節の動きを制御する。また、各関節には位置センサ（図示せず）が組み込まれている。各関節の位置センサは、それぞれの関節の動き、具体的には回転角度を検出する。【００３３】
ピッチ腰関節１０は、胴体２０の前後の動き（ピッチング）を制御する。右ヨー股関節１１Ｒおよび左ヨー股関節１１Ｌは、それぞれの脚の付け根部分におけるロボットの左右に回転する動き（ヨーイング）を生じさせる。【００３４】
右ロール股関節１２Ｒおよび左ロール股関節１２Ｌは、それぞれの脚の付け根部分におけるロボットの横向きの回転（ローリング）を生じさせる。右ピッチ股関節１３Ｒおよび左ピッチ股関節１３Ｌは、それぞれの脚の付け根部分におけるロボットの前後の回転（ピッチング）を生じさせる。【００３５】
また、右ピッチ膝関節１４Ｒおよび左ピッチ膝関節１４Ｌは、それぞれの膝部分におけるロボットの前後の動き（ピッチング）を生じさせる。右ピッチ足首関節１５Ｒおよび左ピッチ足首関節１５Ｌは、それぞれの足首部分におけるロボットの前後の動き（ピッチング）を生じさせる。右ロール足首関節１６Ｒおよび左ロール足首関節１６Ｌは、それぞれの足首部分におけるロボットの横向きの動き（ローリング）を生じさせる。【００３６】
また、それぞれの脚には、足裏が取り付けられている。図３には、左脚３０Ｌに取り付けられた足裏４０が示されている。それぞれの足裏には、４つの力センサが組み込まれている。なお、力センサの数は任意である。図３には、足裏４０に備えられた力センサ５０ａ〜５０ｄが示されている。これらの力センサは、足裏４０が床面から受ける反力を測定する。力センサにより測定された反力は、ロボットの動きのコンプライアンス制御およびフィードバック制御に用いられる。【００３７】
ジャイロセンサ６０は、横向き（ローリング）方向および前後（ピッチング）方向の胴体２０の回転角度を測定する。ジャイロセンサ６０により測定された回転角度は、ロボットの動きのフィードバック制御に用いられる。【００３８】
図４は、ロボットの歩行運動を説明するタイムチャートである。時間ｔ０で、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌは、左脚を持ち上げるため、両脚をロボットの右側に傾けるローリングの動作を行う。この動作を行う場合、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌの動きは、ギアバックラッシュ補償の分だけわずかに異なるものとなる。【００３９】
ローリング動作の振幅は、試行錯誤により決定される。あるいは、ローリング動作の振幅は、胴体２０のローリング角の評価関数が最小となるようにフィードバック制御を行うことにより決定される。【００４０】
時間ｔ１では、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌはローリングの動作を停止する。そして、左脚を持ち上げるため、すなわち、左脚のリフティング操作を行うため、左ピッチ膝関節１４Ｌは、左脚を縮めるように回転し、左ピッチ足首関節１５Ｌは、左足首を縮めるように回転する。【００４１】
時間ｔ２では、左ピッチ膝関節１４Ｌおよび左ピッチ足首関節１５Ｌはリフティングの動作を停止する。そして、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは回転して、胴体２０が前方に移動するようピッチングの動作を行う。【００４２】
時間ｔ２と時間ｔ３の間では、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは、ピッチングの動作を停止する。【００４３】
時間ｔ３では、左ピッチ膝関節１４Ｌは、左脚を床面に着地させるため、左脚を伸ばすように回転し、左ピッチ足首関節１５Ｌは、左足首を伸ばすように回転する。【００４４】
時間ｔ４では、左脚が床面に着地する。加えて、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌは、右脚を持ち上げるため、両脚をロボットの左側に傾けるローリングの動作を行う。さらに、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは、元の状態、すなわち、時間ｔ２における状態に戻るように回転する。さらに、右脚を前方に振り出すため、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは回転して、胴体２０が前方に移動するようピッチングの動作を行う。【００４５】
時間ｔ４と時間ｔ５の間では、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは元の状態に戻るとともに、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌはピッチングの動作を停止する。【００４６】
そして、時間ｔ５では、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌはローリングの動作を停止する。さらに、右脚を持ち上げるため、すなわち、右脚のリフティング操作を行うため、右ピッチ膝関節１４Ｒは、右脚を縮めるように回転し、右ピッチ足首関節１５Ｒは、右足首を縮めるように回転する。【００４７】
時間ｔ６では、右ピッチ膝関節１４Ｒおよび右ピッチ足首関節１５Ｒはリフティングの動作を停止する。さらに、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは、元の状態、すなわち、時間ｔ４における状態に戻るように回転する。その結果、ロボットの姿勢が、リファレンスフレームＰ６で定義される姿勢に設定される。【００４８】
時間ｔ６と時間ｔ７の間では、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは元の状態に復帰する。その結果、ロボットの姿勢が、リファレンスフレームＰ６で定義される姿勢に設定される。すなわち、ロボットのリニア速度は０であり、ロボットは左脚のみで立っており、歩幅は０となる。【００４９】
時間ｔ７では、右脚を前方に振り出すため、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは回転して、胴体２０が前方に移動するようピッチングの動作を行う。【００５０】
時間ｔ７と時間ｔ８の間では、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは、ピッチングの動作を停止する。時間ｔ８では、右脚を床面に着地させるため、右ピッチ膝関節１４Ｒは、右脚を伸ばすように回転し、右ピッチ足首関節１５Ｒは、右足首を伸ばすように回転する。【００５１】
時間ｔ９では、右脚が床面に着地する。加えて、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌは、左脚を持ち上げるため、両脚をロボットの右側に傾けるローリングの動作を行う。さらに、左脚を前方に振り出すため、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは回転して、胴体２０が前方に移動するようピッチングの動作を行う。さらに、左ピッチ股関節１３Ｌおよび左ピッチ足首関節１５Ｌは、元の状態、すなわち、時間ｔ７における状態に戻るように回転する。【００５２】
時間ｔ１０では、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌはローリングの動作を停止する。さらに、左脚を持ち上げるため、すなわち、左脚のリフティング操作を行うため、左ピッチ膝関節１４Ｌは、左脚を縮めるように回転し、左ピッチ足首関節１５Ｌは、左足首を縮めるように回転する。【００５３】
時間ｔ１１では、左ピッチ膝関節１４Ｌおよび左ピッチ足首関節１５Ｌはリフティングの動作を停止する。さらに、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは、元の状態、すなわち、時間ｔ９における状態に戻るように回転する。その結果、ロボットの姿勢が、リファレンスフレームＰ１１で定義される姿勢に設定される。【００５４】
時間ｔ１１以後、右ピッチ股関節１３Ｒおよび右ピッチ足首関節１５Ｒは元の状態に復帰する。その結果、ロボットの姿勢が、リファレンスフレームＰ１１で定義される姿勢に設定される。すなわち、ロボットのリニア速度は０であり、ロボットは右脚のみで立っており、歩幅は０となる。このような動きを繰り返すことにより、ロボットの歩行運動が実現される。【００５５】
図５は、本実施例に係るロボット制御システムの機能ブロック図である。このロボット制御システムは、外部端末装置１００とロボット１１０とを含む。【００５６】
外部端末装置１００は、ロボットの動作を管理するオペレータにより操作されるパーソナルコンピュータなどである。この外部端末装置１００は、ロボット１１０との間で通信を行う。この通信は、さまざまな種類の情報の授受を含むものである。【００５７】
この外部端末装置１００は、あらかじめ設定したロボット１１０のフレーム情報および／またはロボット１１０への指令情報などをロボット１１０に送信したり、ロボット１１０からロボット１１０の状態（姿勢や速度など）に係る情報などを受信する。ロボット１１０から得られた情報は、表示装置（図示せず）に表示される。【００５８】
ロボット１１０は、たとえば２本脚のヒューマノイドロボットである。このロボット１１０は、ジャイロセンサ１１１、ジャイロセンサ制御部１１２、関節１１３1〜１１３n、関節制御部１１４1〜１１４n（ｎは自然数）、力センサ１１５1〜１１５m（ｍは自然数）、力センサ制御部１１６1〜１１６m、通信インターフェース１２１、メモリ１２２、中央制御部１２３を有する。【００５９】
ジャイロセンサ１１１は、図３に示したジャイロセンサ６０と同様の機能を有する。このジャイロセンサ１１１は、ロボット１１０の胴体２０に備えられ、横向き（ローリング）方向および前後（ピッチング）方向の胴体２０の回転角度を測定する。ジャイロセンサ制御部１１２は、ジャイロセンサ１１１の機能を制御するとともに、ジャイロセンサ１１１により測定された回転角度の情報を中央制御部１２３に送信する。【００６０】
関節１１３1〜１１３nは、ロボット１１０をさまざまに動かすものである。モータ（図示せず）がこれらの関節を駆動させる。関節には、図３で説明したピッチ腰関節１０、右ヨー股関節１１Ｒ、左ヨー股関節１１Ｌ、右ロール股関節１２Ｒ、左ロール股関節１２Ｌ、右ピッチ股関節１３Ｒ、左ピッチ股関節１３Ｌ、右ピッチ膝関節１４Ｒ、左ピッチ膝関節１４Ｌ、右ピッチ足首関節１５Ｒ、左ピッチ足首関節１５Ｌ、右ロール足首関節１６Ｒ、左ロール足首関節１６Ｌが含まれる。【００６１】
関節制御部１１４1〜１１４nは、各関節１１３1〜１１３nの動作を制御する。特に、関節制御部１１４1〜１１４nは、関節１１３1〜１１３nが所定の時間に、所定の角速度で所定の角度だけ回転するよう制御する。この角度、角速度、時間は中央制御部１２３により指定される。【００６２】
力センサ１１５1〜１１５mは、ロボット１１０の右脚および左脚の足裏に設けられる。この力センサ１１５1〜１１５mは、床面からの反力を測定する。また、この力センサ１１５1〜１１５mは、図３で説明した力センサ５０ａ〜５０ｄと同様の機能を有する。力センサ制御部１１６1〜１１６mは、力センサ１１５1〜１１５mの機能を制御するとともに、力センサ１１５1〜１１５mにより測定された反力の情報を中央制御部１２３に送信する。【００６３】
通信インターフェース１２１は、外部端末装置１００との間で通信を行う。この通信インターフェース１２１は、外部端末装置１００との間で無線通信および／または有線通信を行う。【００６４】
メモリ１２２は、さまざまな情報を記憶する。たとえば、メモリ１２２は、外部端末装置１００から受信した情報および／または外部端末装置１００に送信される情報を記憶するとともに、中央制御部１２３によりなされた種々の演算の結果に係る情報を記憶する。【００６５】
中央制御部１２３は、ロボット１１０を全体制御する。この中央制御部１２３は、たとえば、外部端末装置１００から受信したフレーム情報を基にして、ロボット１１０が動作する際の各関節１１３1〜１１３nの回転開始時間、角速度、回転角などを算出し、その結果を関節制御部１１４1〜１１４nに送信する。【００６６】
また、中央制御部１２３は、外部端末装置１００から通信インターフェース１２１を介してロボット１１０の動作制御要求を受け付ける。動作制御要求とは、歩幅の変更要求や歩行方向の変更要求、あるいは歩行以外の動作の実行要求を含むものである。【００６７】
中央制御部１２３は、リファレンスフレームＰ１，Ｐ６，Ｐ１１の姿勢が実現された後にのみ、上記要求を実行する。要求を実行する際には、中央制御部１２３は、要求された動作に対応する関節１１３1〜１１３nの回転開始時間、角速度、回転角などの情報を関節制御部１１４1〜１１４nに送信する。リファレンスフレームＰ１，Ｐ６，Ｐ１１においては、ロボット１１０は、片脚で安定して立っているので、ロボット１１０がリファレンスフレームＰ１，Ｐ６，Ｐ１１に対応する姿勢で立っている場合に上記要求を実行することは都合がよいことである。【００６８】
なお、ここでは、中央制御部１２３がさまざまなパラメータを算出することとしているが、外部端末装置１００がそれらを算出し、ロボットを制御する構成を採用することとしてもよい。このような構成を採用する場合には、外部端末装置１００は、回転開始時間、角速度、回転角などの算出に必要な情報をロボット１１０から受信し、受信した情報に基づいて各パラメータを算出する。関節制御部１１４1〜１１４nは、外部端末装置１００から算出結果の情報を受信し、受信した情報に基づいてロボット１１０の動作制御を行う。【００６９】
以下に、中央制御部１２３が行うロボット制御処理について詳細に説明する。図６は、中央制御部１２３の構成を示す機能ブロック図である。同図に示すように、この中央制御部１２３は、動作生成部１２３ａと、コンプライアンス制御部１２３ｂと、フィードバック制御部１２３ｃと、反射制御部１２３ｄと、補正部１２３ｅとを有する。【００７０】
動作生成部１２３ａは、外部端末装置１００から通信インターフェース１２１を介して受信したフレーム情報を基にして、ロボット１１０が動作する際の各関節１１３1〜１１３nの回転開始時間、角速度、回転角などを算出し、補正部１２３ｅに出力する処理部である。また、この動作生成部１２３ａは、ロボット１１０がローリングフェーズ、リフティングフェーズ、着地（ランディング）フェーズうちのどのフェーズにあるかのフェーズ情報をコンプライアンス制御部１２３ｂおよびフィードバック制御部１２３ｃに渡す。【００７１】
コンプライアンス制御部１２３ｂは、力センサ１１５1〜１１５mによって測定された力センサデータおよび動作生成部１２３ａからのフェーズ情報に基づいて着地動作などのコンプライアンス制御を行う処理部であり、コンプライアンス制御量を算出して補正部１２３ｅに出力する。【００７２】
フィードバック制御部１２３ｃは、ジャイロセンサ１１１によって測定されたジャイロセンサデータに基づくジャイロフィードバック制御および力センサ１１５1〜１１５mによって測定された力センサデータに基づくＺＭＰフィードバック制御を行う処理部であり、フィードバック制御量を算出して補正部１２３ｅに出力する。【００７３】
反射制御部１２３ｄは、歩行中のロボット１１０の上半身に加えられた外力を検出し、反射制御を行う処理部であり、力センサ１１５1〜１１５mによって測定された力センサデータ、ジャイロセンサ１１１によって測定されたジャイロセンサデータを用いてロボット１１０が外力に対して安定するように制御する。【００７４】
補正部１２３ｅは、動作生成部１２３ａが各関節１１３1〜１１３nに対して算出した回転開始時間、角速度、回転角などをコンプライアンス制御部１２３ｂ、フィードバック制御部１２３ｃおよび反射制御部１２３ｄの出力で補正し、各関節１１３1〜１１３nのモータに対するコマンドを出力する処理部である。【００７５】
次に、反射制御部１２３ｄによる反射制御の詳細について説明する。ここで、ロボット１１０への外力とは、ロボット１１０が外部から押されるなどによって受ける大きな力のことである。【００７６】
ロボット１１０への外力はジャイロインデックスによって検出される。ここで、ジャイロインデックスとは、ジャイロセンサ１１１によって検出された値を（Gyrox，Gyroy）とし、足裏４０の幅／長さをνとすると
【数１】
2009040885.tif 000003
である。【００７７】
反射制御部１２３ｄは、ジャイロインデックスの値が所定の閾値を越えると、ロボット１１０の歩行動作を停止し、ＺＭＰの位置、ＺＭＰの位置変化量およびロボット１１０が片脚立ちか両脚立ちかに基づいて反射制御を行う。ここで、所定の閾値は、ジャイロフィードバック安定度マージンから決定される。すなわち、所定の閾値は、ジャイロフィードバックによってロボット１１０を安定させることができなくなるときのジャイロインデックスの値である。【００７８】
図７は、ロボット１１０が歩行中に右脚で片脚立ちをしている場合の通常のＺＭＰの軌跡を太い矢印で示している。ロボット１１０が歩行中に上半身に外力を受けると、外力を受けた方向によって、ＺＭＰは通常の軌跡からはずれる。反射制御部１２３ｄは、ＺＭＰが安定領域内であるか否か、ＺＭＰを安定領域内に維持可能か否か、および、ロボット１１０が片脚立ちか両脚立ちかに基づいて反射制御を行う。ここで、安定領域とは、足裏４０が形成する四角形である。【００７９】
反射制御部１２３ｄは、ＺＭＰの位置および変化量を判定するために、力センサデータを用いてＺＭＰを計算する。図８は、反射制御部１２３ｄによるＺＭＰの計算法を示す図である。同図に示すように、反射制御部１２３ｄは、４つの力センサデータＦ1〜Ｆ4および力センサが取り付けられた座標を用いてＺＭＰ(ｘm，ｙm）を計算する。また、反射制御部１２３ｄは、ＺＭＰ(ｘm，ｙm）からＺＭＰの変化量を計算する。また、反射制御部１２３ｄは、左右の足裏４０で検出される力の大きさによって、ロボット１１０が片脚立ちか両足立ちかを判定する。【００８０】
次に、反射制御部１２３ｄによる反射制御の処理手順について説明する。図９は、反射制御部１２３ｄによる反射制御の処理手順を示すフローチャートである。なお、この反射制御処理は一定の時間間隔で起動される。【００８１】
図９に示すように、この反射制御処理では、反射制御部１２３ｄは、ジャイロインデックスが所定の閾値を越えたか否かを判定し（ステップＳ１）、所定の閾値を超えていない場合には、反射制御は不要であるため、処理を終了する。【００８２】
これに対して、ジャイロインデックスが所定の閾値を越えた場合には、ＺＭＰが所定の安定領域内にあるか否かを判定する（ステップＳ２）。その結果、ＺＭＰが所定の安定領域内にない場合には、ロボット１１０の転倒を防ぐための反射制御として第１反射制御を行う（ステップＳ３）。なお、第１反射制御の詳細については後述する。【００８３】
一方、ＺＭＰが所定の安定領域内にある場合には、ロボット１１０が片脚立ちの状態にあるか否かを判定し（ステップＳ４）、片脚立ちの状態にある場合には、ロボットを安定化させるための反射制御として第２反射制御を行う（ステップＳ５）。なお、第２反射制御の詳細については後述する。【００８４】
一方、ロボット１１０が両脚立ちの状態にある場合には、ＺＭＰを所定の安定領域内に維持可能であるか否かを判定する（ステップＳ６）。ここで、ＺＭＰを所定の安定領域内に維持可能であるか否かは、ＺＭＰの変化量が所定の閾値以内であるか否かによって判定する。【００８５】
その結果、ＺＭＰを所定の安定領域内に維持可能である場合には、ロボットを安定化させるための反射制御として第３反射制御を行い（ステップＳ７）、ＺＭＰを所定の安定領域内に維持可能でない場合には、ロボットを安定化させるための反射制御として第４反射制御を行う（ステップＳ８）。なお、第３反射制御および第４反射制御の詳細については後述する。【００８６】
このように、ジャイロインデックス、ＺＭＰの位置、ＺＭＰの位置変化量およびロボット１１０が片脚立ちか両脚立ちかに基づいて反射制御を行うことによって、上半身に加えられた外力に対してロボット１１０を転倒させることなく、安定させることができる。【００８７】
次に、第１反射制御の処理手順について説明する。図１０は、第１反射制御の処理手順を示すフローチャートである。同図に示すように、第１反射制御では、反射制御部１２３ｄは、ロボット１１０の歩行動作を停止し（ステップＳ３１）、ローリング振幅およびＺＭＰフィードッバックゲインを増加する（ステップＳ３２）。なお、ＺＭＰフィードバック制御は足首関節と腰関節または股関節とを制御する。【００８８】
そして、反射制御部１２３ｄは、上半身の振動を抑えるためにジャイロフィードバックのゲインを減少し（ステップＳ３３）、上げている脚を上半身が振られている方向へ動かす（ステップＳ３４）。ここで、上半身が振られている方向は、ＺＭＰの軌跡から算出する。そして、最終姿勢において、ジャイロフィードバックのゲインを増加させる（ステップＳ３５）。【００８９】
このように、ＺＭＰが所定の安定領域内にない場合に、ローリング振幅およびＺＭＰフィードッバックゲインを増加し、上げている脚を上半身が振られている方向へ動かすことによって、ロボット１１０の転倒を防ぐことができる。【００９０】
次に、第２反射制御の処理手順について説明する。図１１は、第２反射制御の処理手順を示すフローチャートである。同図に示すように、第２反射制御では、反射制御部１２３ｄは、ロボット１１０の歩行動作を停止し（ステップＳ５１）、上げている脚を外力の方向へ動かして着地させる（ステップＳ５２）。【００９１】
ここで、上げている脚を動かす距離は、ＺＭＰの現在地と所定の安定領域の中心との距離に比例する。そして、外力が減少するとロボット１１０の姿勢を元の姿勢に復帰する（ステップＳ５３）。【００９２】
このように、片脚立ちの場合に、上げている脚を外力の方向へＺＭＰの現在地と所定の安定領域の中心との距離に比例した距離だけ動かして着地させることによって、ロボット１１０を安定させることができる。【００９３】
次に、第３反射制御の処理手順について説明する。図１２は、第３反射制御の処理手順を示すフローチャートである。同図に示すように、第３反射制御では、反射制御部１２３ｄは、コンプライアンス制御および上半身を安定化するためのジャイロフィードバック制御を行ったままロボット１１０の歩行動作を停止する（ステップＳ７１）。【００９４】
そして、腰関節または股関節と足首関節を動作させて上半身を前に曲げる（ステップＳ７２）。前屈の程度は、上半身に加えられた外力の大きさに依存する。そして、上半身が振動しないように制御するジャイロフィードバックの目標値を前屈の角度に基づいて変更する（ステップＳ７３）。【００９５】
このように、両脚立ちの場合に、上半身を前屈させることによって、ロボット１１０を安定させることができる。【００９６】
次に、第４反射制御の処理手順について説明する。図１３は、第４反射制御の処理手順を示すフローチャートである。同図に示すように、第４反射制御では、反射制御部１２３ｄは、コンプライアンス制御および上半身を安定化するためのジャイロフィードバック制御を行ったままロボット１１０の歩行動作を停止する（ステップＳ８１）。【００９７】
そして、腰関節または股関節と足首関節を動作させて上半身を前に曲げるとともに、脚を折り曲げて重心を下げる（ステップＳ８２）。前屈および脚の折り曲げの程度は、上半身に加えられた外力の大きさに依存する。そして、上半身が振動しないように制御するジャイロフィードバックの目標値を前屈の角度に基づいて変更する（ステップＳ８３）。【００９８】
このように、両脚立ちの場合でＺＭＰを所定の安定領域内に維持することができない場合には、上半身を前屈させるとともに脚を折り曲げて重心を下げることによって、ロボット１１０を安定させることができる。【００９９】
上述してきたように、本実施例では、ロボット１１０の上半身に外力が加えられた場合に、反射制御部１２３ｄが、ジャイロインデックスを用いて反射制御が必要であるか否かを判定し、反射制御が必要と判定した場合には、ＺＭＰの位置、ＺＭＰの位置変化量およびロボット１１０が片脚立ちか両脚立ちかに基づいて適切な反射制御を行うこととしたので、ロボット１１０を転倒させることなく安定させることができる。【０１００】
なお、本実施例では、ロボット制御装置について説明したが、ロボット制御装置が有する構成をソフトウェアによって実現することで、同様の機能を有するロボット制御プログラムを得ることができる。そこで、このロボット制御プログラムを実行するコンピュータについて説明する。【０１０１】
図１４は、本実施例に係るロボット制御プログラムを実行するコンピュータの構成を示す機能ブロック図である。同図に示すように、このコンピュータ２００は、ＲＡＭ２１０と、ＣＰＵ２２０と、フラッシュメモリ２３０と、ＵＳＢインターフェース２４０と、ＣＯＭインターフェース２５０とを有する。【０１０２】
ＲＡＭ２１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、図５に示したメモリ１２２に対応する。ＣＰＵ２２０は、ＲＡＭ２１０からプログラムを読み出して実行する中央処理装置である。フラッシュメモリ２３０は、プログラムやデータを格納する不揮発性メモリであり、ＵＳＢインターフェース２４０は、コンピュータ２００を関節やセンサに接続するためのインターフェースである。ＣＯＭインターフェース２５０は、外部端末装置１００と通信するためのインターフェースであり、図５に示した通信インターフェース１２１に対応するものである。そして、このコンピュータ２００において実行されるロボット制御プログラム２３１は、フラッシュメモリ２３０から読み出されてＣＰＵ２２０によって実行される。
【産業上の利用可能性】
【０１０３】
以上のように、本発明に係るロボット制御装置、ロボット制御方法およびロボット制御プログラムは、ロボットの歩行制御に有用であり、特に、歩行中のロボットの上半身に外力が加えられた場合に適している。
【図１】
2009040885.tif 000004
【図２】
2009040885.tif 000005
【図３】
2009040885.tif 000006
【図４】
2009040885.tif 000007
【図５】
2009040885.tif 000008
【図６】
2009040885.tif 000009
【図７】
2009040885.tif 000010
【図８】
2009040885.tif 000011
【図９】
2009040885.tif 000012
【図１０】
2009040885.tif 000013
【図１１】
2009040885.tif 000014
【図１２】
2009040885.tif 000015
【図１３】
2009040885.tif 000016
【図１４】
2009040885.tif 000017
【国際調査報告】
2009040885.tif 000018
2009040885.tif 000019