ロボット及びその制御方法
【課題】 ロボットの重心と速度を合成して、キャプチャポイントを算出し、ロボットの歩行中にキャプチャポイントを制御することによって、安定的に歩行を制御するロボット及びその制御方法を提供する。
【解決手段】 本発明は、6自由度の一対の脚を有する2足ロボットに関する。また、人間の歩行と類似した動作で有限状態機械(FSM)を構成して、自然な歩行動作を可能にし、膝を曲げずに歩行させることで、大きな歩幅の歩行と効率的なエネルギーの使用を可能にする。
【解決手段】 本発明は、6自由度の一対の脚を有する2足ロボットに関する。また、人間の歩行と類似した動作で有限状態機械(FSM)を構成して、自然な歩行動作を可能にし、膝を曲げずに歩行させることで、大きな歩幅の歩行と効率的なエネルギーの使用を可能にする。
【発明の詳細な説明】
【技術分野】
【0001】
トルクサーボによって各関節が動作するロボットの安定的な歩行制御のためのロボット及びその制御方法に関する。
【背景技術】
【0002】
人間の歩行方法に近く二本脚で歩くロボットの歩行制御技術は、ロボットの各構成部分を連結する関節を制御することで実現される。それぞれの関節を制御する方法は、関節の角度を制御するものと、関節のトルクを制御するものとに大別される。
【0003】
関節の角を制御する方法は、ロボットの足と地面とが当接している各点が生成する支持多角形(Support Polygon)内にZMP(Zero Moment Point)が位置するように、それぞれの関節の角度を逆運動学(Inverse Kinematics)を用いて算出したあと、ロボットのそれぞれの関節がその角度を維持するようにする方式で、関節のトルクを制御する方法のうち代表的なものは、動的歩行(Dynamic Walking)に分類されるものとして、ロボットの全体に作用する重力の方向を、ロボットが傾斜面にいるときのように定め、これに基づいてそれぞれの関節に必要なトルクを発生させる方式である。
【0004】
関節の角を制御する方法は、逆運動学を解く過程で膝が曲がらないと値が存在しない。そのため、ロボットが膝を曲げた状態で歩行する場合、歩幅が小さくなり、エネルギー消耗が増加して、歩行効率が低下するという問題点がある。
【0005】
また、動的歩行方法は、ロボットの歩行を3次元空間で解析するには複雑なので2次元歩行を具現するものであるか、または3次元歩行を具現したとしても、安定的でなく、人間の歩行と違って不自然であるという問題点がある。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、上述した問題点を解決するために、膝を伸ばした状態で歩行することができ、3次元歩行を具現しながらも、人間の歩行のように自然で安定した歩行が可能なロボット及びその制御方法を提供する。
【課題を解決するための手段】
【0007】
本発明の一側面に係る、複数の関節部がそれぞれ設けられた複数の脚と、前記脚に連結された上体とを有し、複数の自由度を有するロボットは、前記ロボットの状態情報を測定するセンサ部と;前記センサ部で測定された状態情報を用いて、前記ロボットの現在の姿勢を獲得する運動学計算部;予め設定された有限状態機械(FSM)に基づいて、前記複数の自由度のうち少なくとも一つの自由度に対して目標姿勢を設定する目標設定部と;前記現在の姿勢と目標姿勢とを比較して姿勢エラーを算出し、前記姿勢エラーに基づいて前記少なくとも一つの自由度に対して補償力を算出する補償力算出部と;前記算出された補償力によって前記複数の関節部に必要な仮想重力の大きさ、及び前記ロボットの現在のFSMの状態によって前記複数の関節部に必要な仮想重力の大きさを設定する仮想重力設定部と;前記仮想重力設定部で設定された仮想重力を補償するための重力補償トルクを算出する重力補償トルク算出部と;前記複数の関節部に前記重力補償トルクを出力するサーボ制御部と;を含む。
【0008】
前記センサ部は、前記上体のポーズ角度を検出するポーズ検出部と、前記複数の関節部の角度を検出する角度検出部とを含むことができる。
【0009】
前記運動学計算部は、前記上体のポーズ角度及び複数の関節部の角度に基づいて重心を算出し、前記重心に基づいて前記現在の姿勢を獲得することができる。
【0010】
前記運動学計算部は、前記上体のポーズ角度及び複数の関節部の角度に基づいて重心の位置と速度を算出し、前記重心の位置と速度に基づいて現在のキャプチャポイントを算出することによって、前記現在の姿勢を獲得することができる。
【0011】
前記運動学計算部は、前記上体のポーズ角度及び前記複数の関節部の角度に基づいてヒップや上体の参照点の位置を獲得し、前記参照点の位置に基づいて前記現在の姿勢を獲得することができる。
【0012】
前記目標設定部は、前記少なくとも一つの自由度に対して目標重心を設定し、前記目標重心を用いて前記目標姿勢を設定することができる。
【0013】
前記目標設定部は、前記少なくとも一つの自由度に対して目標キャプチャポイントを設定し、前記目標キャプチャポイントを用いて前記目標姿勢を設定することができる。
【0014】
前記目標設定部は、前記複数の脚に設けられた足の支持領域内の一点が重力方向に通る線上の一点を目標キャプチャポイントとして設定することができる。
【0015】
前記目標設定部は、前記少なくとも一つの自由度に対して前記ロボットのヒップや上体の参照点の目標位置を設定し、前記参照点の目標位置に基づいて前記目標姿勢を設定することができる。
【0016】
前記運動学計算部は、
前記ポーズ角度及び前記複数の関節部の角度に基づいて現在のヒップ高さをさらに獲得し、前記補償力算出部は、前記現在のキャプチャポイントと前記目標キャプチャポイントとを比較してキャプチャポイントエラーを算出し、前記現在のヒップ高さと目標ヒップ高さとを比較してヒップ高さエラーを算出し、前記キャプチャポイントエラーとヒップ高さエラーに基づいて補償力を算出することができる。
【0017】
前記補償力算出部は、前記キャプチャポイントエラーを用いて水平方向の補償力を算出し、前記ヒップ高さエラーを用いて垂直方向の補償力を算出することができる。
【0018】
前記ポーズ検出部で検出するポーズ角度は、前記ロボットのペルヴィスリンクのロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の回転角度のうち少なくとも一つを含み、前記複数の関節部のトルクを測定する関節トルク検出部をさらに含むことができる。
【0019】
前記運動学計算部は、前記ロボットの現在の重心の位置及び前記重心の速度を用いて、前記ロボットの現在のキャプチャポイントの位置を算出することができる。
【0020】
前記ロボットは、前記ロボットの有限状態機械(FSM)を予め格納し、前記ロボットの現在のFSMの状態を判断し、前記ロボットがFSMの状態遷移の条件を満足するか否かによって、次のFSMの状態に遷移するように制御するFSM制御部をさらに含むことができる。
【0021】
前記目標設定部は、前記ロボットの現在のFSMの状態によって目標キャプチャポイントの位置を設定し、前記ロボットの上体が直立姿勢を維持するように目標ポーズ角度を設定することができる。
【0022】
前記ロボットは、前記センサ部で測定したポーズ角度と、前記目標設定部で設定した目標ポーズ角度との間の差を用いて、前記目標ポーズ角度に到達するために補償しなければならない補償モーメントを算出する補償モーメント算出部をさらに含むことができる。
【0023】
前記補償力算出部は、前記運動学計算部で計算した前記ロボットの現在のキャプチャポイントのx方向の位置及びy方向の位置と、前記目標設定部で設定した目標キャプチャポイントのx方向の位置及びy方向の位置との間の差を用いて、x方向及びy方向の補償力を算出し、前記運動学計算部で計算した前記ロボットの現在のヒップ高さと、前記目標設定部で設定した目標ヒップ高さとの間の差を用いて、z軸方向の補償力を算出することができる。
【0024】
前記仮想重力設定部は、前記ロボットのFSMの現在の状態による仮想重力、及び前記補償力算出部で算出した補償力による仮想重力の大きさを設定することができる。
【0025】
前記仮想重力設定部は、前記ロボットの質量をmとし、前記補償力算出部で算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの各関節に必要な第1の仮想重力を設定する第1の仮想重力設定部と、前記ロボットの現在のFSMの状態によって、各関節に必要な第2の仮想重力を設定する第2の仮想重力設定部と、を含むことができる。
【0026】
gf=f/m (2)
前記ロボットは、前記ロボットの重心が地面に投影された点と前記各脚に連結された足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点からより近い脚に、より大きい比率の上体質量を割り当てる重量分配部をさらに含むことができる。
【0027】
前記重力補償トルク算出部は、前記重量分配部で前記各脚に分配した上体の質量を反映して、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、重力補償トルクを算出することができる。
【0028】
前記ロボットは、前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記補償モーメント算出部で算出された補償モーメントを前記複数の脚に分配する補償モーメント分配部をさらに含む。
【0029】
前記ロボットは、前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記複数の脚に分配した補償モーメントから前記複数の脚に必要な第1の目標トルクを算出する目標トルク算出部をさらに含むことができる。
【0030】
前記目標トルク算出部は、前記第1の目標トルクと前記重力補償トルク算出部で算出した重力補償トルクとを合算して、前記ロボットの各関節に必要な第2の目標トルクを算出することができる。
【0031】
前記ロボットは、前記目標トルク算出部で算出された第2の目標トルクに各関節の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出するトルク補償部をさらに含むことができる。
【0032】
本発明の一側面に係る、複数の関節部がそれぞれ設けられた複数の脚と、該脚に連結された上体とを含み、複数の並進運動の自由度及び回転運動の自由度を有するロボットの制御方法は、前記上体のポーズ角度及び前記複数の関節部の角度を検出し;前記検出された複数の関節部の角度に基づいて、前記複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に対する現在の姿勢を獲得し;前記獲得された現在の姿勢と予め設定された目標姿勢との差に基づいて、姿勢エラーを算出し;前記姿勢エラーに基づいて、前記少なくとも一つの並進運動の自由度に対する補償力を算出し;前記少なくとも一つの並進運動の自由度に対する補償力、及び前記ロボットに対して予め設定された有限状態機械(Finite State Machine:FSM)の現在の状態に基づいて、仮想重力を設定し;前記設定された仮想重力を補償するために、前記ロボットの関節部に必要な重力補償トルクを算出し;前記ロボットの関節部のトルクが前記算出された重力補償トルクを含む目標トルクになるように各関節のトルクサーボを制御することを含む。
【0033】
前記姿勢エラーを算出することは、前記検出されたポーズ角度及び前記複数の関節部の角度に基づいて現在の重心の位置を算出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置を算出し、前記算出された現在の重心と予め設定された目標重心とを比較して、前記少なくとも一つの並進運動の自由度に対する重心エラーを算出し、前記重心エラーを姿勢エラーとして用いることを含むことができる。
【0034】
前記姿勢エラーを算出することは、前記検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置と速度を検出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置と速度を検出し、前記検出された現在の重心の位置と速度に基づいて、前記少なくとも一つの並進運動の自由度に対する現在のキャプチャポイントを獲得し、前記獲得された現在のキャプチャポイントと予め設定された目標キャプチャポイントとを比較して、少なくとも一つの並進運動の自由度に対するキャプチャポイントエラーを算出し、前記算出されたキャプチャポイントエラーを前記姿勢エラーとして用いることを含むことができる。
【0035】
前記姿勢エラーを算出することは、前記上体のポーズ角度及び前記複数の関節部の角度を検出し、前記ポーズ角度及び前記複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの参照点の位置を前記少なくとも一つの自由度に対して算出し、前記現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを前記少なくとも一つの自由度に対して算出し、前記参照点位置エラーを前記少なくとも一つの並進運動の自由度の姿勢エラーとして用いることを含むことができる。
【0036】
前記姿勢エラーを算出することは、前記複数の並進運動の自由度のうち残りの並進運動の自由度の姿勢エラーの算出と互いに異なることを含むことができる。
【0037】
前記ロボットの関節部に必要な仮想重力を設定することは、前記ロボットの質量をmとし、前記算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの関節部に必要な第1の仮想重力を設定し、前記ロボットの現在のFSMの状態によって、前記関節部に必要な第2の仮想重力を設定することを含むことができる。
【0038】
gf=f/m (2)
前記重力補償トルクを算出することは、前記第1の仮想重力に対する重力補償トルク及び前記第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、前記ロボットの関節部に提供される重力補償トルクを算出することを含むことができる。
【0039】
前記ロボットの制御方法は、前記ロボットが安定した姿勢を維持するための目標ポーズ角度を設定し、前記目標ポーズ角度と前記測定されたポーズ角度との間の差を補償するための補償モーメントを算出することをさらに含むことができる。
【0040】
前記ロボットの制御方法は、前記算出された補償モーメントを前記ロボットの関節部に提供するために必要な第1の目標トルクを算出し、前記第1の目標トルクと前記重力補償トルクを合算して、第2の目標トルクを算出することをさらに含み、前記目標トルクは、第2の目標トルクであるものとすることができる。
【0041】
前記ロボットは、前記算出された第2の目標トルクに前記関節部の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出することをさらに含み、前記目標トルクは、前記第3の目標トルクであるものとすることができる。
【0042】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記算出された補償モーメントを前記複数の脚に分配することをさらに含むことができる。
【0043】
前記第1の目標トルクを算出することは、前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記ロボットの複数の脚に分配された補償モーメントから前記複数の脚に必要な第1の目標トルクを算出することを含むことができる。
【発明の効果】
【0044】
本発明によるロボット及びその制御方法によれば、重心の位置と速度を合成して得られるキャプチャポイントを歩行中に制御することによって、安全性を維持することができ、左右の脚に重心を移動させたり、または前進のために支持足(support foot)の前へ重心を移すことが可能になる。
【0045】
また、外部から力が作用して、キャプチャポイントが支持足から外れたときにも、キャプチャポイントに向かってスイング足(swing foot)を移して着地することになるので、倒れずに歩行を続けることができる。
【0046】
また、本発明では、地面の傾斜と凹凸にかかわらず、ロボットの上体の姿勢を制御するので、歩行時にも傾斜面と凹凸面によって倒れずに安定的に歩行することができる。
【0047】
また、本発明による歩行動作は、人間の歩行段階を考慮してFSMを構成することができるので、人間の歩行と類似したかかとからつま先(heel-to-toe)動作が可能で、自然な歩行が可能である。
【0048】
また、膝を曲げずに歩行できるので、大きな歩幅の歩行が可能で、歩行に必要なエネルギーを効率的に使用することができる。
【図面の簡単な説明】
【0049】
【図1】本発明の一実施例によるロボットの外観構成図である。
【図2】本発明の一実施例によるロボットの主要関節の構造を示す図である。
【図3】本発明の一実施例によるロボットの制御ブロック図である。
【図4】本発明の一実施例によるロボットのFSMの状態ダイヤグラムである。
【図5】本発明の一実施例によるロボットの各FSMの状態での歩行動作を示す図である。
【図6】本発明の一実施例によるロボットのキャプチャポイントを示す図である。
【図7】本発明の一実施例によるロボットの下体を示す図である。
【図8】本発明の一実施例によるロボットの制御ブロック図である。
【図9】本発明の一実施例によるロボットの歩行制御方法に対するフローチャートである。
【図10】並進運動の自由度に対するロボットの姿勢をキャプチャポイントで表すロボットの歩行制御方法に対するフローチャートである。
【図11】本発明の一実施例による補償モーメントを左右の脚に分配する過程をさらに含むロボットの歩行制御方法に対するフローチャートである。
【発明を実施するための形態】
【0050】
以下、添付の図面を参照して、本発明の実施例を詳細に説明する。
【0051】
図1は、本発明の一実施例によるロボットの外観構成図で、図2は、図1に示したロボットの主要関節の構造を示す図である。
【0052】
図1及び図2を参照すると、本発明の一実施例によるロボット100は、人間と同様に、二つの脚110L、110Rによって直立移動する2足ロボットであって、胴体102、頭104、腕106L、106Rからなる上体101と、二つの脚110L、110Rからなる下体103と、を有する。
【0053】
ロボット100の上体101は、胴体102と、胴体102の上部に首120を介して連結された頭104と、胴体102の上部両側に肩114L、114Rを介して連結された二つの腕106L、106Rと、該二つの腕106L、106Rの末端にそれぞれ連結された手108L、108Rと、からなる。
【0054】
ロボット100の胴体102には、上体101が回転できるように、ヨー(yaw)方向の1自由度を有する腰関節部15が設置される。
【0055】
ロボット100の下体103は、腰関節部15の下側に連結されたペルヴィスリンク16と、ペルヴィスリンク16の下部両側に連結された二つの脚110L、110Rと、二つの脚110L、110Rの末端にそれぞれ連結された足112L、112Rと、からなる。
【0056】
ここで、頭104、二つの腕106L、106R、二つの手108L、108R、二つの脚110L、110R、二つの足112L、112Rはそれぞれ、関節を通じて一定水準の並進運動及び回転運動の自由度を有する。
【0057】
参照符号における“R”と“L”は、それぞれロボット100の右側(right)と左側(left)を表し、COG(Center Of Gravity)は、ロボット100の重心を表す。
【0058】
また、ロボット100の頭104には、周囲を撮影するカメラ41と、ユーザの音声を入力するマイクロフォン42とが設置され得る。
【0059】
頭104は、首関節部280を介して上体101の胴体102と連結される。首関節部280は、ヨー方向(yaw、Z軸回転)の回転関節281、ピッチ方向(pitch、Y軸回転)の回転関節282、及びロール方向(roll、X軸回転)の回転関節283を含み、3自由度を有する。
【0060】
首関節部280のそれぞれの回転関節281、282、283には、頭104の回転のためのモータ(例えば、電気モータ、油圧モータなどのアクチュエータ)が連結される。
【0061】
ロボット100の二つの腕106L、106Rはそれぞれ、上膊リンク31、下膊リンク32及び手33を有する。
【0062】
上膊リンク31は、肩関節部250L、250Rを介して上体101に連結され、上膊リンク31と下膊リンク32は、肘関節部260を介して互いに連結され、下膊リンク32と手33は、手首関節部270を介して互いに連結される。
【0063】
肩関節部250L、250Rは、上体101の胴体102の両側に設置され、二つの腕106L、106Rを上体101の胴体102に連結する。
【0064】
肘関節部260は、ピッチ方向の回転関節261と、ヨー方向の回転関節262とを含み、2自由度を有する。
【0065】
手首関節部270は、ピッチ方向の回転関節271と、ロール方向の回転関節272とを含み、2自由度を有する。
【0066】
手33には5個の指33aが設置される。それぞれの指33aには、モータによって駆動される多数の関節(図示せず)が設置され得る。指33aは、腕106の動きに連動して、物を把持したり、特定方向を指すような多様な動作を行う。
【0067】
そして、胴体102の下側には、二つのヒップ関節部210を有するペルヴィスリンク16が連結される。ペルヴィスリンク16(pelvis link)は人間の骨盤に該当する部分であって、ヒップ関節部210を通じて上体101の胴体102に連結される。
【0068】
そして、ロボット100の二つの脚110L、110Rはそれぞれ、大腿リンク21と下腿リンク22、足112L、112Rを有する。
【0069】
大腿リンク21は人間の太股に該当する部分であって、ヒップ関節部210を介してペルヴィスリンク16に連結され、大腿リンク21と下腿リンク22は、膝関節部220を介して互いに連結され、下腿リンク22と足112L、112Rは、足首関節部230を介して互いに連結される。
【0070】
ヒップ関節部210は、ヨー方向(yaw、Z軸周囲の回転)の回転関節211(ヒップヨージョイント)と、ピッチ方向(pitch、Y軸周囲の回転)の回転関節212(ヒップピッチジョイント)と、ロール方向(roll、X軸周囲の回転)の回転関節213(ヒップロールジョイント)とを含み、3自由度を有する。
【0071】
膝関節部220は、ピッチ方向の回転関節221を含み、1自由度を有する。
【0072】
足首関節部230は、ピッチ方向の回転関節231とロール方向の回転関節232とを含み、2自由度を有する。
【0073】
二つの脚110L、110Rのそれぞれには、ヒップ関節部210、膝関節部220、足首関節部230に対して6個の回転関節が設けられるので、二つの脚110L、110R全体に対しては12個の回転関節が設けられ、本発明の一実施例によるロボットは、6自由度を有する一対の脚を含む。
【0074】
図示されていないが、ロボット100には、各回転関節を駆動するモータなどのようなアクチュエータが設置され、このアクチュエータを適切に制御することによって、ロボット100の多様な動作を具現することができる。アクチュエータの種類には制限がないが、以下で説明する本発明の一実施例では、アクチュエータとしてサーボモータを例に挙げて説明する。
【0075】
ロボット100は、制御動作(Control Action)の実行のために、各制御動作に対応して各関節のトルク指令を算出し、算出されたトルク指令をトルクサーボに出力して、サーボモータを駆動させる。
【0076】
先に検討した情報に基づいて、本発明の一実施例によるロボット100の歩行動作について詳細に説明する。
【0077】
図3には、本発明の一実施例によるロボット100の制御ブロック図が示されている。図3を参照すると、本発明の一実施例によるロボット100の制御は、ロボットの状態を測定するセンサ部300と、ロボットの有限状態機械(Finite State Machine:FSM)を予め格納し、ロボットのFSMの状態を制御するFSM制御部330と、前記センサ部300で測定されたロボットの状態を用いて、ロボットの現在の姿勢を獲得する運動学計算部310と、ロボットの目標姿勢を設定する目標設定部320と、前記設定された目標姿勢と前記獲得された現在の姿勢との間の差を用いて、前記ロボットがバランスを取るために必要な補償力を算出する補償力算出部350と、前記センサ部300で測定された情報を用いて、前記ロボットがバランスを取るために必要な補償モーメントを算出する補償モーメント算出部340と、前記ロボットに対して予め設定された有限状態機械の現在の状態及び補償力算出部350で算出した補償力の大きさを用いて、前記ロボットの各関節に必要な仮想重力の大きさを設定する仮想重力設定部360と、前記仮想重力設定部360で設定された仮想重力と実際の重力に対する重力補償トルクを算出する重力補償トルク算出部390と、前記重力補償トルク算出部390で算出された重力補償トルクと前記補償モーメント算出部340で算出した補償モーメントに対する関節トルクとを合算して、前記ロボットの各関節に必要な目標トルクを算出する目標トルク算出部400と、前記ロボットの各関節のトルク値が、前記目標トルク算出部400で算出した目標トルク値になるように、各関節のトルクサーボを制御するサーボ制御部420と、を含む。
【0078】
センサ部300は、ロボットの各関節部の角度を検出する角度検出部301と、ロボットのポーズ角度を検出するポーズ検出部302と、足112が地面に接触したか否か、または足に加えられる荷重を検出する力/トルク検出部303と、ロボットの各関節のトルクを測定する関節トルク検出部304とを含む。
【0079】
角度検出部301は、ロボットを構成する各関節部の角度を検出するもので、各関節部の各軸に設けられたモータの回転角度を検出する。ここで、各関節部の角度は、モータ(図示せず)の回転数を用いて検出することができ、モータの回転数は、各モータに連結された関節エンコーダ(Encoder、図示せず)を通じて検出可能である。
【0080】
ポーズ検出部302は、IMU17として具現することができ、IMUは、重力方向と慣性系に対するペルヴィスリンク16の相対的角度を検出して、ロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の姿勢情報を発生させる。具体的にIMUは、ロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の3個の軸の回転角度のうち少なくとも一つの回転角度を検出できる。以下、ポーズ検出部302で検出された角度をポーズ角度と称する。但し、IMU17がペルヴィスリンク16の角度を検出することに限定されず、頭や胴体などの他の部位のリンクに対してポーズ角度を検出することも可能である。また、ロボット100の姿勢、特に、上体の姿勢を測定するために、IMUの他にティルティング検出(Tilting Detection)、ジャイロセンサ(Gyro Sensor)などを使用することもできる。
【0081】
力/トルク検出部303は、多軸F/Tセンサ(Multi−Axis Force and Torque Sensor)として具現することができ、多軸F/Tセンサ24は、二つの脚110L、110Rにおいて、足112L、112Rと足首関節部230との間にそれぞれ設置されて、足112L、112Rから伝達される力の3方向成分(Fx、Fy、Fz)及びモーメントの3方向成分(Mx、My、Mz)を測定することによって、足112L、112Rが着地したか否か、または足112L、112Rに加えられる荷重を検出する。足112が地面に接触したか否かを検出するセンサとして、F/Tセンサ24の他に、接触センサまたはこれに相応するセンサを使用することもできる。
【0082】
運動学計算部310は、センサ部300で測定したロボット100の状態情報を用いて、ロボット100の現在の姿勢を獲得する。ロボット100の姿勢は、ロボット100の位置と角度を含むことができ、これは、ロボット100の二つの足の位置、重心の位置と速度、及びキャプチャポイントなどを用いて獲得することができる。
【0083】
通常、ロボットの姿勢は、上体及び下体の全ての関節の角度として表すことができるが、本発明では、次のようにロボットの姿勢を表すことができる。ロボットの姿勢は、作業空間でロボットの並進運動の自由度及び回転運動の自由度に対するロボットの位置と角度として表すことができる。
【0084】
このロボットの位置と角度は、ロボットのいずれか一点の位置と角度を用いて表すことができる。ロボットの位置は、3軸並進運動の自由度に対して順運動学を用いて、基準座標系においてロボットのいずれか一点のx、y、z軸の3次元座標として表すことができる。
【0085】
また、ロボットの角度は、回転運動の自由度に対して順運動学、またはポーズ検出部302を通じて検出されたポーズ角度として表すことができる。したがって、本発明において一つの姿勢を取るために、どの関節でもその角度は唯一に決まるものではない。
【0086】
ここで、ロボットの姿勢を構成する位置と角度のうち、位置を表すいずれか一点は、ロボットの重心であってもよく、またはキャプチャポイントであってもよい。または、脚及び腕を除外した部分に固定された一点を参照点としてロボットの位置を表すことができる。
【0087】
キャプチャポイントに対して定義すれば、キャプチャポイントの通常の意味は、一定の高さを持つ物体が、現在与えられた位置と速度からみるとき、地面のどの地点を踏むと垂直に立つ平衡状態に到達するのかに関する問題におけるソリューションと言える。すなわち、ロボットのキャプチャポイントは、ロボットの現在の位置と速度に照らして、次の動作を行うとき、倒れずに垂直に立つことができる位置のことを意味する。
【0088】
前述したキャプチャポイントの定義によれば、通常、水平面(すなわち、地面)上の点になるが、本発明におけるキャプチャポイントは3次元領域に拡張されることも可能である。3次元領域でのキャプチャポイントは、重心から、重心が移動する速度に比例した距離だけ、重心の移動方向に移動した点と言える。
【0089】
3次元の並進自由度に対してロボットの位置を表す点が重心、キャプチャポイント、参照点のうちいずれか一つに一致する必要はなく、互いに異なる方式で表すこともできる。例えば、2次元水平方向の並進運動の自由度に対するロボットの位置は、キャプチャポイントの2次元水平成分と定義し、1次元垂直方向の並進運動の自由度に対するロボットの位置は、ヒップの高さと定義することができる。
【0090】
運動学計算部310は、各関節の関節エンコーダの瞬時値を読み、予め知っている関節リンクのサイズと重量を用いて、ロボットベース座標系に対する重心の位置、ヒップ高さ、二つの足の位置及び二つの足が置かれた方向を計算できる。ロボット100の現在の重心(COG)の位置は、胴体102に設けられ、この時、現在の重心の方向は、重力の方向に固定された慣性系の方向(Orientation)に従う。
【0091】
ベース座標系と絶対座標系(global or world coordinate system)に対する変換行列を計算して、先に計算したベース座標に対する位置情報を絶対座標系に変換することができる。これを通じて、地面に置かれた足に対して重心の相対的移動軌跡を計算し、その速度を計算し、重心の速度と位置、ヒップ高さを計算できる。
【0092】
3次元空間のキャプチャポイントは、ロボットの重心とロボットの速度を用いて求めることができる。ロボットの現在の位置でのキャプチャポイントは、下記の数学式(1)によって求めることができる。
【0093】
CP=dCOG+w*vCOG (1)
CPは、キャプチャポイントの位置を表し、dCOGは、重心(COG)の位置を表し、vCOGは、重心の速度を表す。wは、w=√(h/g)を計算して求めることができ、ここで、hは、重心の地面からの高さで、gは重力加速度である。2次元水平面のキャプチャポイントは、上記で算出した3次元のキャプチャポイントの(x、y、z)成分のうち(x、y)成分のみを取って求められる。
【0094】
まとめると、運動学計算部310は、ロボット100の複数の関節部の角度に基づいて重心を算出することができ、重心をロボットの位置として現在の姿勢を獲得することができる。
【0095】
または、複数の関節部の角度に基づいて、重心の位置と速度を算出し、重心の位置と速度に基づいて、現在のキャプチャポイントを算出したあと、獲得された現在のキャプチャポイントをロボットの位置として現在の姿勢を獲得したり、または上体のポーズ角度及び複数の関節部の角度に基づいて、ヒップや上体の参照点の位置を算出し、算出された参照点をロボットの位置として現在の姿勢を獲得する。
【0096】
目標設定部320は、ロボットの有限状態機械(FSM)の現在の状態による目標姿勢を設定する。
【0097】
ロボットの目標姿勢は、目標キャプチャポイント、目標ポーズ角度、目標ヒップ高さなどを用いて表すことができ、ここで、キャプチャポイントは多様な方法により表現することができるが、キャプチャポイント(CP)は、3次元空間で重心が移動する速度を反映して速度に対応する距離だけ移動した点の位置として表現することも可能である。
【0098】
また、目標設定部320は、ロボットが倒れないようにするために、二つの足の支持領域の内部を重力方向に通る線上の一点を目標キャプチャポイントとして設定し、この目標キャプチャポイントをロボットの並進運動の自由度に対する目標姿勢として設定することも可能である。
【0099】
ロボットの目標ポーズ角度は任意に設定できるが、ロボットの直立姿勢のために、ロボットの上体が重力方向と平行になるように設定し、これをロボットの回転運動の自由度に対する目標姿勢として設定することも可能である。
【0100】
有限状態機械(FSM)は、与えられた時間に現れることのできる有限個の状態を示す概念的なモデルであって、ロボットのFSMは、設計者が任意に設定することができ、ロボットは予め設定された有限個の状態を循環的に有することになる。
【0101】
FSM制御部330は、ロボット100のFSMを予め格納し、ロボット100の現在のFSMの状態を判断し、現在のFSMの状態から次のFSMの状態に遷移できるか否かを判断して、ロボット100のFSMを制御する。
【0102】
補償力算出部350は、運動学計算部310で獲得したロボット100の現在の位置と、目標設定部320で設定したロボット100の目標位置とを比較して、位置エラーを算出し、位置エラーに基づいて少なくとも一つの自由度に対して補償されるべき補償力を算出する。
【0103】
補償モーメント算出部340は、ロボット100が直立姿勢を維持するようにするために必要な補償モーメントを算出し、ポーズ検出部302でペルヴィスリンクに対して測定した現在のポーズ角度と、目標設定部320で設定した目標回転角度との間の差から、x、y、z方向の補償モーメントを算出し、ロボットのポーズ角度は、ペルヴィスリンクでない胴体(Trunk)リンクや頭などのリンクに対して測定しても構わない。
【0104】
仮想重力設定部360は、ロボットの現在のFSMの状態及び補償力算出部350で算出した補償力を用いて仮想重力の大きさを設定し、補償力から設定された仮想重力は、下記の数学式(2)で表すことができる。
【0105】
gf=f/m (2)
ここで、gfは、仮想重力を表し、fは、補償力算出部350で算出した補償力を表し、mは、ロボットの質量を表す。ロボットのFSMの状態による仮想重力については後述する。
【0106】
重力補償トルク算出部390は、仮想重力設定部360で設定した仮想重力と実際の重力を補償するために、各関節に必要な重力補償トルクを算出し、重力補償トルクは、仮想重力加速度と実際の重力加速度の和、各関節の角度、各リンクの重量及び各リンク内の重心の位置を用いて算出できる。
【0107】
目標トルク算出部400は、各関節に伝達されなければならないトルクの総和を算出し、姿勢の制御、すなわち、モーメント補償と重力補償を全て考慮しなければならない。したがって、補償モーメント算出部340で算出した補償モーメントを発生させるための第1の目標トルクを算出し、第1の目標トルクに重力補償トルクを加えて、第2の目標トルクを算出する。この時、6×6ヤコビアン行列を用いることができる。
【0108】
サーボ制御部420は、目標トルク算出部400から、各関節に必要な第2の目標トルクの伝達を受け、各関節のトルク値が第2の目標トルクに到達するように各トルクサーボを制御する。
【0109】
以下、ロボット100の姿勢を表す情報のうちロボット100の位置は、キャプチャポイント及びヒップ高さを含むものとして、本発明の一実施例によるロボット100の動作をより具体的に説明する。すなわち、3次元並進運動の自由度のうち2次元水平方向に対してはキャプチャポイントに基づき、垂直方向に対してはヒップ高さを参照点とする。
【0110】
本発明の一実施例によるロボット100は、設計者によって予め設定されたFSMによって動作し、目標設定部320で設定される目標姿勢のうち目標キャプチャポイントは、ロボット100の現在のFSMの状態によって異なるように設定される。以下、本発明の一実施例によるロボットのFSMについて詳細に説明する。
【0111】
図4には、本発明の一実施例によるFSMの状態遷移に関するダイヤグラムが示されている。当該実施例では、FSMが7つの状態を有するものとし、DS状態→W1状態→W2状態→W3状態→W4状態→W2状態→W3状態→W4状態→W2状態→...に循環したり、停止命令が入ると、W4状態から停止準備動作であるW2’状態→W3’状態を経てDS状態に遷移する。
【0112】
FSMの各状態での目標ヒップ高さはいずれも同一であるとし、x方向は、支持足の長さ方向であって、前方を正の方向とし、y方向は、x方向に対して上から見て90度反時計方向とする。
【0113】
また、支持足は、ロボットの姿勢を維持させる足、すなわち、地面を踏んでいる足のことを意味し、スイング足は、移動のために上に持ち上げた足のことを意味する。
【0114】
図5に、図4に示されたFSMの状態を有するロボット100の歩行動作が示されている。歩行の開始をDS状態とすると、DS状態は、ロボット100の二つの脚が地面に着いているものとし、W1状態では、外観上はDS状態と違いがないが、重心を片方の脚に移動し始め、当該実施例では、左脚110Lに重心を移すものとする。
【0115】
W2状態では、右脚110Rを持ち上げながら左脚110Lでボディーを支えて立っており、W3状態では、ボディーを進行方向に移動させながら右脚110Rを下げて、右足112Rを地面に着地させる。
【0116】
W4状態では、右足112Rが地面に着いた後、重心を左脚110Lに移動させ、再びW2状態に遷移されながら脚の方向のみが変わり、停止命令が入るまで、W2→W3→W4→W2→...の循環が続く。
【0117】
停止命令が入った場合には、W4状態からW2’状態に遷移し、W2’状態は、W2状態と同様に左脚110Lを持ち上げるが、前方に進むわけではないので、目標キャプチャポイントのx成分を、現在の支持足の中心にくるようにする。W3’状態は、W3状態と同様に左足112Lを着地するが、前進するわけではないので、右足112Rと平行な位置に着地するものとする。
【0118】
図4及び図5を参照すると、7つの各FSMの状態は一定の順序によって遷移され、所定の遷移条件を満足する時に次の状態に遷移される。各FSMの状態の動作内容及び遷移条件は設計者が任意に設定でき、以下、図4及び図5に示されたFSMの状態について詳細に説明する。
【0119】
まず、DS状態は、ロボット100の二つの足112R、112Lが地面に着いて停止している状態を示すものとし、この時、目標キャプチャポイントはロボットの二つの足がなす支持多角形の中心に置かれる。歩行命令が下るとW1状態に遷移する。
【0120】
W1状態は、目標キャプチャポイントがロボット100の二つの足112R、112Lのうち、任意に選択された支持足に移動することになる状態であり、実際のキャプチャポイントが支持足の足の幅以内の安定領域内に進入すると、W2状態に遷移する。
【0121】
W2状態は、ロボット100がスイング足を持ち上げる動作を行う状態であって、W2状態での目標キャプチャポイントのx成分は、支持足の中心から前の部分に時間によって前進する軌跡と設定され、y成分は、支持足の中心線にくるように設定される。スイング脚を持ち上げる動作は、重力補償により制御され、詳細は後述する。W2状態で、現在のキャプチャポイントのx成分がしきい値を越え、スイング足の高さがしきい値を越えると、W3状態に遷移する。
【0122】
W3状態は、ロボット100が着地のために膝を伸ばし、スイング足を下ろす動作を示し、この時、目標キャプチャポイントのx成分は、支持足の前部を越えて、スイング足が着地しなければならない位置まで時間によって増加する軌跡と設定され、y成分は、スイング足が着地する位置へ時間によって移動するものと設定される。スイング足が地面に着いて、F/Tセンサにしきい値以上のz成分が感知されると、W4状態に遷移する。
【0123】
W4状態は、二つの足が地面に着いている状態であって、最後に着地した足を支持足とする。この時、目標キャプチャポイントのx、y成分は、以前状態の目標キャプチャポイントの位置から新しい支持足の中心に、短時間内に連続的に移動する軌跡と設定される。現在のキャプチャポイントが支持足内に入ると、停止命令がない場合にはW2状態に遷移し、停止命令が下る場合にはW2’状態に遷移する。
【0124】
W2’状態はW2状態と類似した動作、すなわち、スイング足を持ち上げる動作を示すが、前進せずに停止するので、目標キャプチャポイントのx成分は支持足の中心に固定する。スイング足の高さがしきい値以上に到達すると、W3’状態に遷移する。
【0125】
W3’状態はW3状態と類似した動作、すなわち、スイング足の着地のために膝を伸ばし、足を下ろす動作を示すが、前進せずに停止するので、目標キャプチャポイントのx成分を支持足の前方へ送らずに支持足の位置に置き、目標キャプチャポイントのy成分は、反対側の足に向かって送るように設定する。スイング足が地面に着いて、F/Tセンサのz成分がしきい値を越えると、DS状態に遷移する。
【0126】
上述したFSMの状態は、本発明の一実施例に過ぎず、ロボット100の歩行を可能にするものであれば、その動作の内容やFSMの状態の個数などは構わない。
【0127】
ただし、上述した例のようにFSMの状態を設定する場合、人間の歩行動作に近く、最初にかかとが地面に着き、最後につま先が地面から離れるheel-to-toe動作が発生して、有効な脚の長さがさらに長くなり、heel-to-toe動作をしない場合より大きな歩幅で自然に歩行することができ、逆運動学を利用しないため、膝を曲げた状態で歩行しなくてもよいので、逆運動学を用いた場合より大きな歩幅の歩行が可能になる。
【0128】
上述したFSMの状態に基づいて、補償力算出部350及び仮想重力設定部360の制御動作について詳細に説明する。
【0129】
図6に、本発明の一実施例によるロボット100が示されている。図6を参照すると、運動学計算部310は、センサ部300で検出したロボット100の状態情報を用いて、ロボット100の重心の位置とその速度を算出し、算出された重心の位置とその速度を用いて、ロボット100の現在のキャプチャポイントを算出する。また、算出された重心に基づいてロボット100の現在のヒップ高さを算出する。
【0130】
キャプチャポイントは地面の上の点と見なされるので、x、y成分を表し、ヒップ高さはz成分を表す。
【0131】
補償力算出部350は、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間の差から、x、y方向の補償力を算出し、目標ヒップ高さと現在のヒップ高さの差から、z方向の補償力を算出する。
【0132】
図6に示されたように、補償力を算出する際に、仮想のスプリングを用いることができる。目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間に、スプリング定数kを持つ仮想のスプリングがあると仮定するときに作用する力fは、下記の数学式(3)で表すことができる。
【0133】
f1=k*e1 f2=k*e2 (3)
e1は,目標キャプチャポイントと現在のキャプチャポイントとの間の差を表す座標であって、e1=(x’、y’)-(x、y)で表すことができ、f1=(fx、fy)になる。(x’、y’)は、目標設定部320で設定した目標キャプチャポイントの位置座標で、前述したように、ロボット100の現在のFSMの状態によって、目標キャプチャポイントの位置が変わる。(x、y)は、運動学計算部310で計算した現在のキャプチャポイントの位置座標である。
【0134】
e2は、目標設定部320で設定した目標ヒップ高さと運動学計算部310で計算した現在のヒップ高さとの間の差を表し、f2=fzになる。これによって、x、y、z方向の補償力が算出される。
【0135】
上述したように、ロボットの歩行中に各歩行動作に合うキャプチャポイントを目標に設定し、目標キャプチャポイントに足を踏み出すようにロボットを制御することで、ロボットが倒れずに安定的に歩行することができる。
【0136】
FSMの各状態ごとに、目標設定部320で設定する目標キャプチャポイントと、運動学計算部310で算出する現在のキャプチャポイントがそれぞれ異なるので、補償力算出部350は、ロボットの現在のFSMの状態によって補償力を算出する。
【0137】
仮想重力設定部360では、ロボットのFSMの状態によって必要な仮想重力及び補償力算出部350で算出した補償力に対する仮想重力を設定する。具体的には、第1の仮想重力設定部361では、補償力算出部350で算出した補償力に対する仮想重力(support gravity)である第1の仮想重力、すなわち、キャプチャポイントの位置を制御するために必要な仮想重力を設定し、第2の仮想重力設定部362では、ロボット100のFSMの状態による仮想重力(lift gravity)である第2の仮想重力を設定する。
【0138】
仮想重力の設定を説明するに先立ち、サポート重力は、ロボット100の足が地面に着いており、ボディーを支持し、その上に姿勢を制御する場合に必要な仮想重力とし、リフト重力は、ロボット100の足が空中に浮いており、ヒップから足を持ち上げたり、または下ろす場合に必要な仮想重力とする。
【0139】
第1の仮想重力設定部361では、前述した数学式(2)によって、補償力に対する仮想重力を設定し、ここでの仮想重力はサポート重力に該当する。
【0140】
第2の仮想重力設定部362で行うFSMの状態による仮想重力の設定は、前述したFSMの7つの状態を例に挙げて説明する。
【0141】
ロボット100のFSMがW2状態にある場合、スイング足を持ち上げる制御が必要なので、スイング脚に対して仮想重力の比重が瞬間的にサポート重力は0になり、リフト重力は1になるようにする。この時、リフト重力のz成分は、支持足とスイング足との高さ差を目標値に維持するように設定し、x成分は、前進方向のスイングができるようにバイアス(bias)されている。y成分は、スイング脚を用いて左右のバランスを取ることができるように、補償力算出部350で計算した補償力のy成分を反映して設定し、二つの脚110L、110Rが衝突しないように、二つの脚110L、110Rの間隔によるフィードバックを加える。
【0142】
ロボット100のFSMがW3状態にある場合、スイング脚が着地のために膝を伸ばし、スイング足を下ろす動作を行うように、リフト重力を設定する。この時、サポート重力の比重は0、リフト重力の比重は1になる。リフト重力のz成分は、スイング足が地面に向かって下りてくるように(−)方向とし、y成分は、スイング足がキャプチャポイントに向かうように現在のスイング足の位置とキャプチャポイントの位置との差をフィードバックし、最小限の左右の足の間隔は維持するようにする。x成分は、スイング足の目標位置との差によって決定し、スイング足の目標位置のx成分は、スイング足が前進するように(+)方向に増加させ、目標歩幅を達成できるように、現在の足の位置と目標歩幅との間の差を共にフィードバックして設定する。
【0143】
ロボット100のFSMがW4状態にある場合、スイング足を持ち上げるとき、つま先が最後に地面に着いているつま先離れ(Toe-off)動作が行われるように仮想重力を設定する。足首ピッチのサポート重力に対して1の比重をおいて、ロボット100の体重が支持足に偏ることに比例して、サポート重力のz成分を増加させる。スイング脚の膝とヒップは1の比重にサポート重力を与えて、体重の移動を助けるようにし、次のFSMの状態でスイング足を持ち上げることに備えて、体重が支持足に偏ることによって、サポート重力の比重を減らし、リフト重力の比重を増やす。
【0144】
ロボット100のFSMがW2’状態にある場合、スイング足のリフト重力のx成分が、支持足と平行な位置にくるようにフィードバック制御する。
【0145】
ロボット100のFSMがW3’状態にある場合、スイング足が支持足の横に一定の間隔をおいて下りてくるように、リフト重力のx、y成分をフィードバックしながら、z成分を時間によって減少させて、自重を用いて地面に着地するようにする。
【0146】
重力補償トルク算出部390では、第1の仮想重力設定部361と第2の仮想重力設定部362で設定した仮想重力及び実際の重力に対する重力補償トルクを算出する。重力補償トルクは、下記の数学式(4)によって算出される。
【0147】
【数1】
ここで、τは、各関節に対する重力補償トルクを表し、gは、重力ベクトル、Qは、3×3マトリックスで、関節軸に対するクロス積(cross product)演算を表し、mは、各リンクの質量、rは、各リンクの重心オフセット、Rは、関節間の相対的座標変換の回転マトリックス、pは、各関節間の相対的位置ベクトルを表す。
【0148】
重力補償は、主体になる関節と補償しようとする対象リンクとの相対的位置関係によって、2種類に分類され、対象リンクが関節よりも上側にある場合には、サポート重力に対する重力補償が行われ、対象リンクが関節よりも下側にある場合には、リフト重力に対する重力補償が行われる。
【0149】
数学式(4)で下付き文字0がベースリンクを表すものと見ると、サポート重力に対する重力補償の場合、ロボットの足関節に対する重力補償トルクをτ0とし、順次に増加してヒップ関節に対する重力補償トルクをτ5とする。
【0150】
リフト重力に対する重力補償の場合、サポート重力と反対に、ヒップ関節に対する重力補償トルクをτ0とし、足関節に対する重力補償トルクをτ5とする。
【0151】
一つの関節に適用される重力補償は、サポート重力とリフト重力の二つの成分があり、ロボット100のFSMの状態によって、サポート重力とリフト重力の比重を調節する。すなわち、ロボット100の特定関節に必要な重力補償トルクは、下記の数学式(5)のように表すことができる。
【0152】
τ=a*(サポート重力補償)+b*(リフト重力補償) (5)
ここで、τは、特定関節の重力補償トルクを表し、aとbは、0から1の間の値を持つ実数で、aとbの値を調節して、ロボット100のFSMの状態に合わせて各関節に対する重力補償トルクを計算する。
【0153】
ロボット100の二つの脚に対して重力補償トルクを計算するとき、上体の重量を二つの脚110L、110Rに分配することができる。したがって、本発明の一実施例によるロボット100は重量分配部380をさらに含むことができる。
【0154】
図7に、いずれか一方に傾いたロボットが示されており、図8には、重量分配部とトルク補償部をさらに含むロボットの制御ブロック図が示されている。
【0155】
ロボット100の二つ足112L、112Rをベースと見て、その上側リンクの重量を考慮した重力補償を足首、膝、ヒップ関節に対して計算する方法は、既存のロボット制御で使用する方法と同一であるが、本発明の一実施例では、ペルヴィス16及びその上にある胴体に該当するトランク102部分の重量は、左右の脚110L、110Rが分けて負担しなければならない。
【0156】
重量分配部380は、ロボット100の重心に対する地面の投影点と、ロボット100の二つの足112L、112Rとの間の距離の比率であるdR、dLを用いて、重心の投影点に近い脚が、ペルヴィス16とトランク102の重量をより多く支えるようにする。
【0157】
図7を参照すると、右に傾いたロボット100の重心は、右に偏ることになり、その投影点は右足に近くなる。したがって、ペルヴィス16とトランク102の重量は、右脚110Rにより多くかかることになり、その比率は、下記の数学式(6)で表すことができる。
【0158】
WL=dR/(dR+dL)
WR=1−WL (6)
ここで、WLは、左脚110Lにかかる重量の比率であり、WRは、右脚110Rにかかる重量の比率である。重量分配部380は、ペルヴィス16とトランク102の質量に、WLが乗算された分だけの重量を左脚110Lにかけ、WRが乗算された分だけの重量を右脚110Rにかけるものとする。
【0159】
補償モーメント算出部340では、ポーズ検出部302で測定したペルヴィスリンク16のロール、ピッチ、ヨー方向の回転角度と目標回転角度との間の差から補償モーメントを算出し、ロール、ピッチ、ヨー方向の3軸に仮想のスプリングが存在すると仮定して、下記の数学式(7)から各関節に必要な補償モーメントを計算することができる。
【0160】
M=k1*e3 (7)
k1は、仮想のスプリング定数を表し、e3は、ポーズ検出部302で測定した回転角度と目標回転角度との間の差を表す。
【0161】
目標トルク算出部400では、補償モーメント算出部340で算出した補償モーメント及び重力補償トルク算出部390で算出した重力補償トルクを全て反映して、ロボット100の各関節に必要なトルクを計算する。
【0162】
補償モーメントに対する関節トルクを計算するに先立ち、補償モーメントをロボットの左右の足に分配することができる。図8に示されたように、本発明の一実施例によるロボット100は、補償モーメント分配部370をさらに含むことができる。
【0163】
補償モーメント分配部370は、重量分配部380と同様に、ロボット100の重心の地面に対する投影点と、ロボット100の二つの足112L、112Rとの間の距離の比率を用いて、補償モーメントを左右の脚110L、110Rに分配する。
【0164】
補償モーメント算出部340で算出した補償モーメントに、上記の数学式(6)で求めたWRを乗算すると、右脚110Rに分配される補償モーメントMRを得ることができ、補償モーメント算出部340で算出した補償モーメントに、上記の数学式(6)で求めたWLを乗算すると、左脚110Lに分配される補償モーメントMLを得ることができる。これを数学式に表すと、下記の数学式(8)の通りである。
【0165】
ML=WL*M, MR=WR*M、 (8)
ここで、WL=dR/(dR+dL)、WR=1−WLで、dL、dRは、重心の投影点と二つの足との間の距離である。
【0166】
目標トルク算出部400は、下記の数学式(9)によって、ロボット100の左右の脚に、補償モーメント分配部370で算出した各補償モーメントを発生させるために必要な関節トルクである第1の目標トルクを計算する。
【0167】
【数2】
ここで、JTは、左右の脚110L、110Rからロボット100の重心の位置に対するヤコビアン行列であり、デカルト空間(Cartesian Space)上のモーメントを関節トルクに変換するために使用した。ロボット100の左右の足をベースと見て、ロボット100の重心をペルヴィスリンク16上に存在するエンドエフェクタ(end-effector)と見るときの6×6ヤコビアン行列Jを計算する。
【0168】
目標トルク算出部400は、数学式(9)で算出した第1の目標トルクに、重力補償トルク算出部390で算出した重力補償トルクを加えて、第2の目標トルクτ2、L、τ2、Rを算出する。便宜上、第2の目標トルクをτ2、L、τ2、Rで表したが、第2の目標トルクは、左右の脚の各関節(合計12個の関節)ごとに算出される。
【0169】
ロボット100の各関節に、速度に比例して抵抗するダンピングトルクを加えると、より安定した歩行を具現できる。図8を参照すると、本発明の一実施例によるロボット100は、トルク補償部410をさらに含むことができる。
【0170】
トルク補償部は、目標トルク算出部400で算出した第2の目標トルクに各関節のダンピングトルクを加えて、第3の目標トルクを算出する。これは下記の数学式(10)で表すことができる。
【0171】
τ3、L=τ2、L+d*w τ3、R=τ2、R+d*w (10)
ここで、τ3、L、τ3、Rはそれぞれ、左右の脚の第3の目標トルクを表し、dは、ダンピング係数、wは、関節の角速度を表す。便宜上、第3の目標トルクを左、右に関するものに区分したが、第2の目標トルクが各関節ごとに計算されるので、第3の目標トルクも各関節に対して計算される。
【0172】
サーボ制御部420は、トルク補償部から最終目標トルクである第3の目標トルクの伝送を受け、ロボット100の各関節のサーボモーターが第3の目標トルクを発生させるように、トルクサーボを制御する。各関節のトルクサーボは、関節トルク検出部304から各関節の現在の出力トルク値を受信し、第3の目標トルクと測定された現在のトルク値との間の差だけのトルクをさらに発生させるようにするトルク制御信号を、各関節の駆動回路に送ることができる。
【0173】
上述した本発明の一実施例によるロボット100の各制御ブロックの機能を簡単に整理すると、センサ部300では、ロボット100のポーズ角度(ロール、ピッチ、ヨー方向の角度として表現可能)、各関節の回転角度及び出力トルク値などを測定し、運動学計算部310では、センサ部300で測定したロボットの状態情報を用いて、重心の位置、速度、ヒップ高さを計算し、計算された重心の位置と速度を合成して、ロボットの現在のキャプチャポイントの位置を算出する。
【0174】
FSM制御部330は、ロボットの動作を示す有限個の状態を格納し、現在のロボットのFSMの状態を判断し、現在の状態から次の状態に遷移される条件を満足するか否かを決定して、条件を満足する場合、ロボットの動作を次のFSMの状態に遷移させるために、各制御ブロックに信号を送る。
【0175】
目標設定部320は、FSM制御部330で判断した現在のFSMの状態によって目標キャプチャポイントを設定し、ロボット100の目標ヒップ高さ及びペルヴィスリンク16の目標ポーズ角度を設定する。
【0176】
補償力算出部350は、目標キャプチャポイントと現在のキャプチャポイントとの間の差、及び目標ヒップ高さと現在のヒップ高さとの間の差を用いて、補償力を計算し、補償モーメント算出部340は、ペルヴィスリンク16の目標ポーズ角度と現在のポーズ角度との間の差を用いて、補償モーメントを計算する。
【0177】
第1の仮想重力設定部361は、補償力算出部350で算出した補償力に対する第1の仮想重力を設定し、第2の仮想重力設定部362は、FSM制御部330で判断したロボット100の現在のFSMの状態による第2の仮想重力を設定する。
【0178】
重量分配部380は、ロボット100の重心と左右の脚110L、110Rとの間の距離の比率を用いて、ロボット100の上体の重量を左右の脚110L、110Rにそれぞれ分配し、重力補償トルク算出部390は、左右の脚110L、110Rに分配された上体の重量を考慮して、第1の仮想重力と第2の仮想重力を補償するための重力補償トルクを算出する。
【0179】
補償モーメント分配部370は、重量分配部380と同じ比率を用いて、補償モーメント算出部340で算出した補償モーメントをロボット100の左右の脚110L、110Rに分配し、目標トルク算出部400では、左右の脚110L、110Rに分配された補償モーメントを考慮して、左右の脚110L、110Rの各関節に補償モーメントを発生させるための第1の目標トルクを算出する。そして、第1の目標トルクに重力補償トルクを合算して、第2の目標トルクを算出する。
【0180】
トルク補償部410は、第2の目標トルクにダンピングトルクを合算して、第3の目標トルクを算出し、サーボ制御部420は、各関節に第3の目標トルクを発生させるために必要な制御信号を各トルクサーボに伝送する。
【0181】
以下、本発明の一実施例によるロボットの歩行制御方法について詳細に説明する。
【0182】
図9は、本発明の一実施例によるロボットの制御方法のフローチャートである。
【0183】
ロボットの上体のポーズ角度及び複数の関節部の角度を検出(501)し、、ポーズ角度及び複数の関節部の角度に基づいて現在の姿勢を獲得(502)する。ロボットの現在の姿勢は、前述したように並進運動の自由度に対するロボットの現在の位置、及び回転運動の自由度に対するロボットの現在のポーズ角度として表すことができる。
【0184】
次に、複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に基づいた姿勢及び回転運動の自由度に基づいた姿勢と、ロボットの現在のFSMの状態によって設定された目標姿勢とを比較して、姿勢エラーを算出(503)する。
【0185】
この時、検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置を少なくとも一つの並進運動の自由度に対して検出し、少なくとも一つの並進運動の自由度に対して検出された現在の重心と予め設定された目標重心とを比較して、重心エラーを算出する。すなわち、少なくとも一つの自由度に対する重心エラーを算出する。
【0186】
ここで、重心エラーは、少なくとも一つの自由度に対する姿勢エラーとして用いられる。
【0187】
または、検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置と速度を少なくとも一つの自由度に対して検出し、検出された現在の重心の位置と速度に基づいて、現在のキャプチャポイントを少なくとも一つの自由度に対して獲得し、現在のキャプチャポイントと予め設定されたキャプチャポイントとを比較して、キャプチャポイントエラーを少なくとも一つの自由度に対して算出し、算出されたキャプチャポイントエラーを少なくとも一つの自由度の姿勢エラーとして用いることも可能である。
【0188】
また、検出されたポーズ角度及び複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの点の位置を少なくとも一つの自由度に対する現在の参照点として獲得し、現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを少なくとも一つの自由度に対して算出し、参照点位置エラーを少なくとも一つの自由度の姿勢エラーとして用いることも可能である。
【0189】
なお、残りの並進運動の自由度の姿勢エラーの算出は、少なくとも一つの並進運動の自由度の姿勢エラーの算出と同一または異なってもよい。
【0190】
回転運動の自由度に対する姿勢エラーは、ロボットの現在のポーズ角度と目標ポーズ角度との差から算出することができる。
【0191】
そして、算出された姿勢エラーに基づいて、少なくとも一つの並進運動の自由度に対する補償力を算出し、回転運動の自由度に対する補償モーメントを算出する(504)。
【0192】
算出された補償力に対する第1の仮想重力を設定し、ロボットの現在のFSMの状態によって第2の仮想重力を設定する(505)。
【0193】
そして、第1の仮想重力、第2の仮想重力及び実際の重力を補償するために必要な重力補償トルクを算出する(506)。
【0194】
ロボットの複数の関節部に補償モーメントを発生させるために必要なトルクと、前記算出された重力補償トルクとを合算して、最終目標トルクを算出する(507)。
【0195】
最後に、最終目標トルクを複数の関節部に出力(508)して、ロボットの均衡を制御する。
【0196】
図10には、並進運動の自由度に対するロボットの姿勢をキャプチャポイントとして表すロボットの歩行制御方法に関するフローチャートが示されている。図10を参照すると、まず、センサ部300でロボットの現在の状態情報を測定する(510)。ロボットの現在の状態情報は、ペルヴィスリンク16のIMU17で測定したポーズ角度、ロボットの足が地面に着いているか否か、各関節のトルク、各関節の角度などを含むことができる。
【0197】
そして、運動学計算部310で、ロボットの現在の状態情報を用いて、ロボットの現在の重心の位置及び速度を計算し、計算された重心の位置及び速度を用いて、下記の数学式(1)によって、ロボットの現在のキャプチャポイントの位置を3次元空間に対して得る(520)。
【0198】
CP=dCOG+w*vCOG (1)
CPは、キャプチャポイントを表し、dCOGは、重心を表し、vCOGは、重心の速度を表す。wは、w=√(h/g)を計算して求めることができ、ここで、hは、重心の地面からの高さで、gは重力加速度である。キャプチャポイントを2次元水平面(あるいは地面)に制限する場合、数学式(1)で求めたCPの座標(x、y、z)から(x、y)のみを取って、地面上の2次元キャプチャポイントを求めることもできる。
【0199】
3軸並進運動の自由度に対するロボットの位置をキャプチャポイントとして表す場合、3次元キャプチャポイント(数学式(1))を使用し、z軸を除外した2軸並進運動の自由度に対するロボットの位置をキャプチャポイントとして表す場合、前記2次元キャプチャポイントを使用することができる。また、この場合には、z軸並進運動の自由度に対するロボットの位置は、ロボットのヒップ高さなどのような、どの参照点の位置として表すことができる。
【0200】
そして、目標設定部320で、ロボットの現在のFSMの状態によって目標キャプチャポイントを設定し、目標ポーズ角度を設定する(530)。場合によって、目標ヒップ高さも設定することができ、目標ヒップ高さは任意に設定できるが、FSMの各状態によって一定に設定することが好ましく、目標ポーズ角度も任意に設定できるが、ロボットの上体が直立姿勢を維持するように設定することが好ましい。
【0201】
そして、補償力算出部350で、目標キャプチャポイントと現在のキャプチャポイントとの間の差を用いて、各関節に必要な補償力を算出する(540)。キャプチャポイントを地面の上の点と見なす場合には、目標キャプチャポイントと現在のキャプチャポイントとの間の差から、x、y方向の補償力を算出することができ、ヒップ高さの間の差から、z方向の補償力を算出することができる。
【0202】
補償力を算出する際に、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間に仮想のスプリングがあるものと見なし、下記の数学式(3)を用いることができる。
【0203】
f=k*e (3)
eは、目標キャプチャポイントと現在のキャプチャポイントとの間の差を表す座標で、e=(x’、y’、z’)-(x、y、z)で表すことができ、(x’、y’、z’)は、目標キャプチャポイントの位置座標で、(x、y、z)は、現在のキャプチャポイントの位置座標である。kは、仮想のスプリング定数を表す。
【0204】
また、補償モーメント算出部340では、目標ポーズ角度と現在のポーズ角度との間の差を用いて、補償モーメントを算出する(550)。この時、ペルヴィスリンクのロール、ピッチ、ヨーの3軸に対して仮想のスプリングがあると仮定して、下記の数学式(7)によって補償モーメントを算出することができる。
【0205】
M=k1*e1 (7)
k1は、仮想のスプリング定数を表し、e1は、IMUで測定したポーズ角度と目標ポーズ角度との間の差を表す。
【0206】
補償力の算出と補償モーメントの算出とは前後関係を有するものではなく、540段階と550段階は、互いに取り替えてもよい。
【0207】
そして、第1の仮想重力設定部361で、補償力に対する第1の仮想重力を設定し、第2の仮想重力設定部362で、ロボット100の現在のFSMの状態によって第2の仮想重力を設定する(560)。
【0208】
第1の仮想重力を設定する際に下記の数学式(2)を用いることができる。
【0209】
gf=f/m (2)
ここで、gfは、第1の仮想重力を表し、fは、補償力算出部350で算出した補償力を表し、mは、ロボットの質量を表す。
【0210】
第2の仮想重力は、FSMの状態によって変わり、第2の仮想重力を設定する方法は、先に本発明の一実施例によるロボットにおいて説明した通りである。
【0211】
そして、重力補償トルク算出部390では、第1の仮想重力、第2の仮想重力及び実際の重力を補償するために必要な重力補償トルクを算出する(570)。重力補償トルクを計算する一般的な式は、前述した数学式(4)で表現することができる。
【0212】
【数3】
ここで、τは、各関節に対する重力補償トルクを表し、gは、補償しようとする重力ベクトル、Qは、3×3マトリックスで、関節軸に対するクロス積(cross product)演算を表し、mは、各リンクの質量、rは、各リンクの重心オフセット、Rは、関節間の相対的座標変換の回転マトリックス、pは、各関節間の相対的位置ベクトルを表す。
【0213】
そして、目標トルク算出部400で、各関節に補償モーメントを発生させるために必要な第1の関節トルクを算出し、第1の関節トルクに重力補償トルクを合算して、第2の関節トルクを算出する(580)。
【0214】
最後に、サーボ制御部420で、各関節に第2の関節トルクを発生させるために、各トルクサーボを制御する(590)。
【0215】
本発明の一実施例によるロボットの歩行制御方法では、重力補償トルクを算出する際に、ロボット100の上体の重量を左右の脚に分配する過程をさらに含むことができ、補償モーメントに対する第1の関節トルクを算出する際に、補償モーメントをロボットの左右の脚に分配する過程をさらに含むことができる。
【0216】
前記実施例によるロボットの歩行制御方法に関するフローチャートが図11に示されている。下記の実施例では、並進運動の自由度に対するロボットの位置をキャプチャポイント及びヒップ高さとして表す。
【0217】
図11を参照して、重量分配及び補償モーメント分配を重点的に説明する。センサ部300で、ロボットの現在の状態情報を測定し(610)、運動学計算部310で、測定された状態情報を用いて、ロボットの現在の重心の位置、速度及びヒップ高さを計算する(620)。
【0218】
目標設定部320で、ロボットの現在のFSMの状態に基づいて目標キャプチャポイントを設定し、目標ヒップ高さ及び目標ペルヴィスリンク回転角を設定する(630)。
【0219】
補償力算出部350で、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間の差から、x、y方向の補償力、及び目標ヒップ高さと現在のヒップ高さとの間の差からz方向の補償力を算出し、目標ポーズ角度と現在のポーズ角度との間の差から、補償モーメントを算出する(640)。
【0220】
仮想重力設定部360で、補償力に対する第1の仮想重力を設定し、ロボットのFSMの状態による第2の仮想重力を設定する(650)。
【0221】
そして、重量分配部380で、ロボットのペルヴィスリンクとその上の胴体(以下、トランクという。)の重量を左右の脚に分けて分配する(660)。先に検討した図7を再び参照すると、ロボット100が、いずれか一方に傾いている場合、その重心は、胴体が傾いた方向に偏ることになる。したがって、重心と近い側の足により多くの重量がかかり、ロボット100の重心を地面に投影した投影点とロボット100の左足との間の距離の比率をdLとし、投影点とロボットの右足との間の距離の比率をdRとすると、ロボット100の左右の脚110L、110Rにかかるペルヴィスリンク16とトランク102の重量の比率は、下記の数学式(6)で表すことができる。
【0222】
WL=dR/(dR+dL)
WR=1−WL (6)
ここで、WLは、左脚にかかる重量の比率を表し、WRは、右脚にかかる重量の比率を表す。ペルヴィスリンクとトランクの質量に、WLを乗算した分だけの質量が左脚にかかり、WRを乗算した分だけの質量が右脚にかかる。ロボットが、図7のように、右に傾いた姿勢を取る場合、右脚により多くの重量がかかることになる。
【0223】
そして、重力補償トルク算出部390で、左右の脚110L、110Rに配分された重量を考慮して、第1の仮想重力及び第2の仮想重力を補償するために必要な重力補償トルクを算出する(670)。
【0224】
補償モーメント分配部370では、補償モーメント算出部340で算出した補償モーメントを、ロボット100の左右の脚110L、110Rに分配する(680)。分配の比率は、前述した重量分配の比率と同一に適用することができ、算出された補償モーメントに、数学式(6)でのWLを乗算した値が左脚に分配される補償モーメントで、WRを乗算した値が右脚に分配される補償モーメントである。
【0225】
そして、目標トルク算出部400は、左右の脚110L、110Rに分配された補償モーメントを考慮して、各関節に必要な第1の目標トルクを算出し、ここに重力補償トルク算出部390で算出した重力補償トルクを合算して、第2の目標トルクを算出する(690)。
【0226】
さらに、ロボット100の安全性のために、各関節の速度に比例して抵抗するダンピングトルクを加える過程をさらに含むことができる(700)。目標トルク算出部400で算出した第2の目標トルクにダンピングトルクを加えると、最終的に第3の目標トルクを得ることができ、下記の数学式(10)で表すことができる。
【0227】
τ3、L=τ2、L+d*w τ3、R=τ2、R+d*w (10)
ここで、τ3、L、τ3、Rはそれぞれ、左右の脚110L、110Rの第3の目標トルクを表し、dは、ダンピング係数、wは、関節の角速度を表す。
【0228】
サーボ制御部420では、左右の脚110L、110Rの各関節に対して算出された第3の目標トルクを各関節に発生させるために、各関節のトルクサーボを制御する(710)。
【符号の説明】
【0229】
300 センサ部
310 運動学計算部
320 目標設定部
330 有限状態機械制御部
340 補償モーメント算出部
350 補償力算出部
360 仮想重力設定部
390 重力補償トルク算出部
【技術分野】
【0001】
トルクサーボによって各関節が動作するロボットの安定的な歩行制御のためのロボット及びその制御方法に関する。
【背景技術】
【0002】
人間の歩行方法に近く二本脚で歩くロボットの歩行制御技術は、ロボットの各構成部分を連結する関節を制御することで実現される。それぞれの関節を制御する方法は、関節の角度を制御するものと、関節のトルクを制御するものとに大別される。
【0003】
関節の角を制御する方法は、ロボットの足と地面とが当接している各点が生成する支持多角形(Support Polygon)内にZMP(Zero Moment Point)が位置するように、それぞれの関節の角度を逆運動学(Inverse Kinematics)を用いて算出したあと、ロボットのそれぞれの関節がその角度を維持するようにする方式で、関節のトルクを制御する方法のうち代表的なものは、動的歩行(Dynamic Walking)に分類されるものとして、ロボットの全体に作用する重力の方向を、ロボットが傾斜面にいるときのように定め、これに基づいてそれぞれの関節に必要なトルクを発生させる方式である。
【0004】
関節の角を制御する方法は、逆運動学を解く過程で膝が曲がらないと値が存在しない。そのため、ロボットが膝を曲げた状態で歩行する場合、歩幅が小さくなり、エネルギー消耗が増加して、歩行効率が低下するという問題点がある。
【0005】
また、動的歩行方法は、ロボットの歩行を3次元空間で解析するには複雑なので2次元歩行を具現するものであるか、または3次元歩行を具現したとしても、安定的でなく、人間の歩行と違って不自然であるという問題点がある。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、上述した問題点を解決するために、膝を伸ばした状態で歩行することができ、3次元歩行を具現しながらも、人間の歩行のように自然で安定した歩行が可能なロボット及びその制御方法を提供する。
【課題を解決するための手段】
【0007】
本発明の一側面に係る、複数の関節部がそれぞれ設けられた複数の脚と、前記脚に連結された上体とを有し、複数の自由度を有するロボットは、前記ロボットの状態情報を測定するセンサ部と;前記センサ部で測定された状態情報を用いて、前記ロボットの現在の姿勢を獲得する運動学計算部;予め設定された有限状態機械(FSM)に基づいて、前記複数の自由度のうち少なくとも一つの自由度に対して目標姿勢を設定する目標設定部と;前記現在の姿勢と目標姿勢とを比較して姿勢エラーを算出し、前記姿勢エラーに基づいて前記少なくとも一つの自由度に対して補償力を算出する補償力算出部と;前記算出された補償力によって前記複数の関節部に必要な仮想重力の大きさ、及び前記ロボットの現在のFSMの状態によって前記複数の関節部に必要な仮想重力の大きさを設定する仮想重力設定部と;前記仮想重力設定部で設定された仮想重力を補償するための重力補償トルクを算出する重力補償トルク算出部と;前記複数の関節部に前記重力補償トルクを出力するサーボ制御部と;を含む。
【0008】
前記センサ部は、前記上体のポーズ角度を検出するポーズ検出部と、前記複数の関節部の角度を検出する角度検出部とを含むことができる。
【0009】
前記運動学計算部は、前記上体のポーズ角度及び複数の関節部の角度に基づいて重心を算出し、前記重心に基づいて前記現在の姿勢を獲得することができる。
【0010】
前記運動学計算部は、前記上体のポーズ角度及び複数の関節部の角度に基づいて重心の位置と速度を算出し、前記重心の位置と速度に基づいて現在のキャプチャポイントを算出することによって、前記現在の姿勢を獲得することができる。
【0011】
前記運動学計算部は、前記上体のポーズ角度及び前記複数の関節部の角度に基づいてヒップや上体の参照点の位置を獲得し、前記参照点の位置に基づいて前記現在の姿勢を獲得することができる。
【0012】
前記目標設定部は、前記少なくとも一つの自由度に対して目標重心を設定し、前記目標重心を用いて前記目標姿勢を設定することができる。
【0013】
前記目標設定部は、前記少なくとも一つの自由度に対して目標キャプチャポイントを設定し、前記目標キャプチャポイントを用いて前記目標姿勢を設定することができる。
【0014】
前記目標設定部は、前記複数の脚に設けられた足の支持領域内の一点が重力方向に通る線上の一点を目標キャプチャポイントとして設定することができる。
【0015】
前記目標設定部は、前記少なくとも一つの自由度に対して前記ロボットのヒップや上体の参照点の目標位置を設定し、前記参照点の目標位置に基づいて前記目標姿勢を設定することができる。
【0016】
前記運動学計算部は、
前記ポーズ角度及び前記複数の関節部の角度に基づいて現在のヒップ高さをさらに獲得し、前記補償力算出部は、前記現在のキャプチャポイントと前記目標キャプチャポイントとを比較してキャプチャポイントエラーを算出し、前記現在のヒップ高さと目標ヒップ高さとを比較してヒップ高さエラーを算出し、前記キャプチャポイントエラーとヒップ高さエラーに基づいて補償力を算出することができる。
【0017】
前記補償力算出部は、前記キャプチャポイントエラーを用いて水平方向の補償力を算出し、前記ヒップ高さエラーを用いて垂直方向の補償力を算出することができる。
【0018】
前記ポーズ検出部で検出するポーズ角度は、前記ロボットのペルヴィスリンクのロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の回転角度のうち少なくとも一つを含み、前記複数の関節部のトルクを測定する関節トルク検出部をさらに含むことができる。
【0019】
前記運動学計算部は、前記ロボットの現在の重心の位置及び前記重心の速度を用いて、前記ロボットの現在のキャプチャポイントの位置を算出することができる。
【0020】
前記ロボットは、前記ロボットの有限状態機械(FSM)を予め格納し、前記ロボットの現在のFSMの状態を判断し、前記ロボットがFSMの状態遷移の条件を満足するか否かによって、次のFSMの状態に遷移するように制御するFSM制御部をさらに含むことができる。
【0021】
前記目標設定部は、前記ロボットの現在のFSMの状態によって目標キャプチャポイントの位置を設定し、前記ロボットの上体が直立姿勢を維持するように目標ポーズ角度を設定することができる。
【0022】
前記ロボットは、前記センサ部で測定したポーズ角度と、前記目標設定部で設定した目標ポーズ角度との間の差を用いて、前記目標ポーズ角度に到達するために補償しなければならない補償モーメントを算出する補償モーメント算出部をさらに含むことができる。
【0023】
前記補償力算出部は、前記運動学計算部で計算した前記ロボットの現在のキャプチャポイントのx方向の位置及びy方向の位置と、前記目標設定部で設定した目標キャプチャポイントのx方向の位置及びy方向の位置との間の差を用いて、x方向及びy方向の補償力を算出し、前記運動学計算部で計算した前記ロボットの現在のヒップ高さと、前記目標設定部で設定した目標ヒップ高さとの間の差を用いて、z軸方向の補償力を算出することができる。
【0024】
前記仮想重力設定部は、前記ロボットのFSMの現在の状態による仮想重力、及び前記補償力算出部で算出した補償力による仮想重力の大きさを設定することができる。
【0025】
前記仮想重力設定部は、前記ロボットの質量をmとし、前記補償力算出部で算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの各関節に必要な第1の仮想重力を設定する第1の仮想重力設定部と、前記ロボットの現在のFSMの状態によって、各関節に必要な第2の仮想重力を設定する第2の仮想重力設定部と、を含むことができる。
【0026】
gf=f/m (2)
前記ロボットは、前記ロボットの重心が地面に投影された点と前記各脚に連結された足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点からより近い脚に、より大きい比率の上体質量を割り当てる重量分配部をさらに含むことができる。
【0027】
前記重力補償トルク算出部は、前記重量分配部で前記各脚に分配した上体の質量を反映して、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、重力補償トルクを算出することができる。
【0028】
前記ロボットは、前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記補償モーメント算出部で算出された補償モーメントを前記複数の脚に分配する補償モーメント分配部をさらに含む。
【0029】
前記ロボットは、前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記複数の脚に分配した補償モーメントから前記複数の脚に必要な第1の目標トルクを算出する目標トルク算出部をさらに含むことができる。
【0030】
前記目標トルク算出部は、前記第1の目標トルクと前記重力補償トルク算出部で算出した重力補償トルクとを合算して、前記ロボットの各関節に必要な第2の目標トルクを算出することができる。
【0031】
前記ロボットは、前記目標トルク算出部で算出された第2の目標トルクに各関節の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出するトルク補償部をさらに含むことができる。
【0032】
本発明の一側面に係る、複数の関節部がそれぞれ設けられた複数の脚と、該脚に連結された上体とを含み、複数の並進運動の自由度及び回転運動の自由度を有するロボットの制御方法は、前記上体のポーズ角度及び前記複数の関節部の角度を検出し;前記検出された複数の関節部の角度に基づいて、前記複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に対する現在の姿勢を獲得し;前記獲得された現在の姿勢と予め設定された目標姿勢との差に基づいて、姿勢エラーを算出し;前記姿勢エラーに基づいて、前記少なくとも一つの並進運動の自由度に対する補償力を算出し;前記少なくとも一つの並進運動の自由度に対する補償力、及び前記ロボットに対して予め設定された有限状態機械(Finite State Machine:FSM)の現在の状態に基づいて、仮想重力を設定し;前記設定された仮想重力を補償するために、前記ロボットの関節部に必要な重力補償トルクを算出し;前記ロボットの関節部のトルクが前記算出された重力補償トルクを含む目標トルクになるように各関節のトルクサーボを制御することを含む。
【0033】
前記姿勢エラーを算出することは、前記検出されたポーズ角度及び前記複数の関節部の角度に基づいて現在の重心の位置を算出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置を算出し、前記算出された現在の重心と予め設定された目標重心とを比較して、前記少なくとも一つの並進運動の自由度に対する重心エラーを算出し、前記重心エラーを姿勢エラーとして用いることを含むことができる。
【0034】
前記姿勢エラーを算出することは、前記検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置と速度を検出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置と速度を検出し、前記検出された現在の重心の位置と速度に基づいて、前記少なくとも一つの並進運動の自由度に対する現在のキャプチャポイントを獲得し、前記獲得された現在のキャプチャポイントと予め設定された目標キャプチャポイントとを比較して、少なくとも一つの並進運動の自由度に対するキャプチャポイントエラーを算出し、前記算出されたキャプチャポイントエラーを前記姿勢エラーとして用いることを含むことができる。
【0035】
前記姿勢エラーを算出することは、前記上体のポーズ角度及び前記複数の関節部の角度を検出し、前記ポーズ角度及び前記複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの参照点の位置を前記少なくとも一つの自由度に対して算出し、前記現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを前記少なくとも一つの自由度に対して算出し、前記参照点位置エラーを前記少なくとも一つの並進運動の自由度の姿勢エラーとして用いることを含むことができる。
【0036】
前記姿勢エラーを算出することは、前記複数の並進運動の自由度のうち残りの並進運動の自由度の姿勢エラーの算出と互いに異なることを含むことができる。
【0037】
前記ロボットの関節部に必要な仮想重力を設定することは、前記ロボットの質量をmとし、前記算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの関節部に必要な第1の仮想重力を設定し、前記ロボットの現在のFSMの状態によって、前記関節部に必要な第2の仮想重力を設定することを含むことができる。
【0038】
gf=f/m (2)
前記重力補償トルクを算出することは、前記第1の仮想重力に対する重力補償トルク及び前記第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、前記ロボットの関節部に提供される重力補償トルクを算出することを含むことができる。
【0039】
前記ロボットの制御方法は、前記ロボットが安定した姿勢を維持するための目標ポーズ角度を設定し、前記目標ポーズ角度と前記測定されたポーズ角度との間の差を補償するための補償モーメントを算出することをさらに含むことができる。
【0040】
前記ロボットの制御方法は、前記算出された補償モーメントを前記ロボットの関節部に提供するために必要な第1の目標トルクを算出し、前記第1の目標トルクと前記重力補償トルクを合算して、第2の目標トルクを算出することをさらに含み、前記目標トルクは、第2の目標トルクであるものとすることができる。
【0041】
前記ロボットは、前記算出された第2の目標トルクに前記関節部の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出することをさらに含み、前記目標トルクは、前記第3の目標トルクであるものとすることができる。
【0042】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記算出された補償モーメントを前記複数の脚に分配することをさらに含むことができる。
【0043】
前記第1の目標トルクを算出することは、前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記ロボットの複数の脚に分配された補償モーメントから前記複数の脚に必要な第1の目標トルクを算出することを含むことができる。
【発明の効果】
【0044】
本発明によるロボット及びその制御方法によれば、重心の位置と速度を合成して得られるキャプチャポイントを歩行中に制御することによって、安全性を維持することができ、左右の脚に重心を移動させたり、または前進のために支持足(support foot)の前へ重心を移すことが可能になる。
【0045】
また、外部から力が作用して、キャプチャポイントが支持足から外れたときにも、キャプチャポイントに向かってスイング足(swing foot)を移して着地することになるので、倒れずに歩行を続けることができる。
【0046】
また、本発明では、地面の傾斜と凹凸にかかわらず、ロボットの上体の姿勢を制御するので、歩行時にも傾斜面と凹凸面によって倒れずに安定的に歩行することができる。
【0047】
また、本発明による歩行動作は、人間の歩行段階を考慮してFSMを構成することができるので、人間の歩行と類似したかかとからつま先(heel-to-toe)動作が可能で、自然な歩行が可能である。
【0048】
また、膝を曲げずに歩行できるので、大きな歩幅の歩行が可能で、歩行に必要なエネルギーを効率的に使用することができる。
【図面の簡単な説明】
【0049】
【図1】本発明の一実施例によるロボットの外観構成図である。
【図2】本発明の一実施例によるロボットの主要関節の構造を示す図である。
【図3】本発明の一実施例によるロボットの制御ブロック図である。
【図4】本発明の一実施例によるロボットのFSMの状態ダイヤグラムである。
【図5】本発明の一実施例によるロボットの各FSMの状態での歩行動作を示す図である。
【図6】本発明の一実施例によるロボットのキャプチャポイントを示す図である。
【図7】本発明の一実施例によるロボットの下体を示す図である。
【図8】本発明の一実施例によるロボットの制御ブロック図である。
【図9】本発明の一実施例によるロボットの歩行制御方法に対するフローチャートである。
【図10】並進運動の自由度に対するロボットの姿勢をキャプチャポイントで表すロボットの歩行制御方法に対するフローチャートである。
【図11】本発明の一実施例による補償モーメントを左右の脚に分配する過程をさらに含むロボットの歩行制御方法に対するフローチャートである。
【発明を実施するための形態】
【0050】
以下、添付の図面を参照して、本発明の実施例を詳細に説明する。
【0051】
図1は、本発明の一実施例によるロボットの外観構成図で、図2は、図1に示したロボットの主要関節の構造を示す図である。
【0052】
図1及び図2を参照すると、本発明の一実施例によるロボット100は、人間と同様に、二つの脚110L、110Rによって直立移動する2足ロボットであって、胴体102、頭104、腕106L、106Rからなる上体101と、二つの脚110L、110Rからなる下体103と、を有する。
【0053】
ロボット100の上体101は、胴体102と、胴体102の上部に首120を介して連結された頭104と、胴体102の上部両側に肩114L、114Rを介して連結された二つの腕106L、106Rと、該二つの腕106L、106Rの末端にそれぞれ連結された手108L、108Rと、からなる。
【0054】
ロボット100の胴体102には、上体101が回転できるように、ヨー(yaw)方向の1自由度を有する腰関節部15が設置される。
【0055】
ロボット100の下体103は、腰関節部15の下側に連結されたペルヴィスリンク16と、ペルヴィスリンク16の下部両側に連結された二つの脚110L、110Rと、二つの脚110L、110Rの末端にそれぞれ連結された足112L、112Rと、からなる。
【0056】
ここで、頭104、二つの腕106L、106R、二つの手108L、108R、二つの脚110L、110R、二つの足112L、112Rはそれぞれ、関節を通じて一定水準の並進運動及び回転運動の自由度を有する。
【0057】
参照符号における“R”と“L”は、それぞれロボット100の右側(right)と左側(left)を表し、COG(Center Of Gravity)は、ロボット100の重心を表す。
【0058】
また、ロボット100の頭104には、周囲を撮影するカメラ41と、ユーザの音声を入力するマイクロフォン42とが設置され得る。
【0059】
頭104は、首関節部280を介して上体101の胴体102と連結される。首関節部280は、ヨー方向(yaw、Z軸回転)の回転関節281、ピッチ方向(pitch、Y軸回転)の回転関節282、及びロール方向(roll、X軸回転)の回転関節283を含み、3自由度を有する。
【0060】
首関節部280のそれぞれの回転関節281、282、283には、頭104の回転のためのモータ(例えば、電気モータ、油圧モータなどのアクチュエータ)が連結される。
【0061】
ロボット100の二つの腕106L、106Rはそれぞれ、上膊リンク31、下膊リンク32及び手33を有する。
【0062】
上膊リンク31は、肩関節部250L、250Rを介して上体101に連結され、上膊リンク31と下膊リンク32は、肘関節部260を介して互いに連結され、下膊リンク32と手33は、手首関節部270を介して互いに連結される。
【0063】
肩関節部250L、250Rは、上体101の胴体102の両側に設置され、二つの腕106L、106Rを上体101の胴体102に連結する。
【0064】
肘関節部260は、ピッチ方向の回転関節261と、ヨー方向の回転関節262とを含み、2自由度を有する。
【0065】
手首関節部270は、ピッチ方向の回転関節271と、ロール方向の回転関節272とを含み、2自由度を有する。
【0066】
手33には5個の指33aが設置される。それぞれの指33aには、モータによって駆動される多数の関節(図示せず)が設置され得る。指33aは、腕106の動きに連動して、物を把持したり、特定方向を指すような多様な動作を行う。
【0067】
そして、胴体102の下側には、二つのヒップ関節部210を有するペルヴィスリンク16が連結される。ペルヴィスリンク16(pelvis link)は人間の骨盤に該当する部分であって、ヒップ関節部210を通じて上体101の胴体102に連結される。
【0068】
そして、ロボット100の二つの脚110L、110Rはそれぞれ、大腿リンク21と下腿リンク22、足112L、112Rを有する。
【0069】
大腿リンク21は人間の太股に該当する部分であって、ヒップ関節部210を介してペルヴィスリンク16に連結され、大腿リンク21と下腿リンク22は、膝関節部220を介して互いに連結され、下腿リンク22と足112L、112Rは、足首関節部230を介して互いに連結される。
【0070】
ヒップ関節部210は、ヨー方向(yaw、Z軸周囲の回転)の回転関節211(ヒップヨージョイント)と、ピッチ方向(pitch、Y軸周囲の回転)の回転関節212(ヒップピッチジョイント)と、ロール方向(roll、X軸周囲の回転)の回転関節213(ヒップロールジョイント)とを含み、3自由度を有する。
【0071】
膝関節部220は、ピッチ方向の回転関節221を含み、1自由度を有する。
【0072】
足首関節部230は、ピッチ方向の回転関節231とロール方向の回転関節232とを含み、2自由度を有する。
【0073】
二つの脚110L、110Rのそれぞれには、ヒップ関節部210、膝関節部220、足首関節部230に対して6個の回転関節が設けられるので、二つの脚110L、110R全体に対しては12個の回転関節が設けられ、本発明の一実施例によるロボットは、6自由度を有する一対の脚を含む。
【0074】
図示されていないが、ロボット100には、各回転関節を駆動するモータなどのようなアクチュエータが設置され、このアクチュエータを適切に制御することによって、ロボット100の多様な動作を具現することができる。アクチュエータの種類には制限がないが、以下で説明する本発明の一実施例では、アクチュエータとしてサーボモータを例に挙げて説明する。
【0075】
ロボット100は、制御動作(Control Action)の実行のために、各制御動作に対応して各関節のトルク指令を算出し、算出されたトルク指令をトルクサーボに出力して、サーボモータを駆動させる。
【0076】
先に検討した情報に基づいて、本発明の一実施例によるロボット100の歩行動作について詳細に説明する。
【0077】
図3には、本発明の一実施例によるロボット100の制御ブロック図が示されている。図3を参照すると、本発明の一実施例によるロボット100の制御は、ロボットの状態を測定するセンサ部300と、ロボットの有限状態機械(Finite State Machine:FSM)を予め格納し、ロボットのFSMの状態を制御するFSM制御部330と、前記センサ部300で測定されたロボットの状態を用いて、ロボットの現在の姿勢を獲得する運動学計算部310と、ロボットの目標姿勢を設定する目標設定部320と、前記設定された目標姿勢と前記獲得された現在の姿勢との間の差を用いて、前記ロボットがバランスを取るために必要な補償力を算出する補償力算出部350と、前記センサ部300で測定された情報を用いて、前記ロボットがバランスを取るために必要な補償モーメントを算出する補償モーメント算出部340と、前記ロボットに対して予め設定された有限状態機械の現在の状態及び補償力算出部350で算出した補償力の大きさを用いて、前記ロボットの各関節に必要な仮想重力の大きさを設定する仮想重力設定部360と、前記仮想重力設定部360で設定された仮想重力と実際の重力に対する重力補償トルクを算出する重力補償トルク算出部390と、前記重力補償トルク算出部390で算出された重力補償トルクと前記補償モーメント算出部340で算出した補償モーメントに対する関節トルクとを合算して、前記ロボットの各関節に必要な目標トルクを算出する目標トルク算出部400と、前記ロボットの各関節のトルク値が、前記目標トルク算出部400で算出した目標トルク値になるように、各関節のトルクサーボを制御するサーボ制御部420と、を含む。
【0078】
センサ部300は、ロボットの各関節部の角度を検出する角度検出部301と、ロボットのポーズ角度を検出するポーズ検出部302と、足112が地面に接触したか否か、または足に加えられる荷重を検出する力/トルク検出部303と、ロボットの各関節のトルクを測定する関節トルク検出部304とを含む。
【0079】
角度検出部301は、ロボットを構成する各関節部の角度を検出するもので、各関節部の各軸に設けられたモータの回転角度を検出する。ここで、各関節部の角度は、モータ(図示せず)の回転数を用いて検出することができ、モータの回転数は、各モータに連結された関節エンコーダ(Encoder、図示せず)を通じて検出可能である。
【0080】
ポーズ検出部302は、IMU17として具現することができ、IMUは、重力方向と慣性系に対するペルヴィスリンク16の相対的角度を検出して、ロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の姿勢情報を発生させる。具体的にIMUは、ロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の3個の軸の回転角度のうち少なくとも一つの回転角度を検出できる。以下、ポーズ検出部302で検出された角度をポーズ角度と称する。但し、IMU17がペルヴィスリンク16の角度を検出することに限定されず、頭や胴体などの他の部位のリンクに対してポーズ角度を検出することも可能である。また、ロボット100の姿勢、特に、上体の姿勢を測定するために、IMUの他にティルティング検出(Tilting Detection)、ジャイロセンサ(Gyro Sensor)などを使用することもできる。
【0081】
力/トルク検出部303は、多軸F/Tセンサ(Multi−Axis Force and Torque Sensor)として具現することができ、多軸F/Tセンサ24は、二つの脚110L、110Rにおいて、足112L、112Rと足首関節部230との間にそれぞれ設置されて、足112L、112Rから伝達される力の3方向成分(Fx、Fy、Fz)及びモーメントの3方向成分(Mx、My、Mz)を測定することによって、足112L、112Rが着地したか否か、または足112L、112Rに加えられる荷重を検出する。足112が地面に接触したか否かを検出するセンサとして、F/Tセンサ24の他に、接触センサまたはこれに相応するセンサを使用することもできる。
【0082】
運動学計算部310は、センサ部300で測定したロボット100の状態情報を用いて、ロボット100の現在の姿勢を獲得する。ロボット100の姿勢は、ロボット100の位置と角度を含むことができ、これは、ロボット100の二つの足の位置、重心の位置と速度、及びキャプチャポイントなどを用いて獲得することができる。
【0083】
通常、ロボットの姿勢は、上体及び下体の全ての関節の角度として表すことができるが、本発明では、次のようにロボットの姿勢を表すことができる。ロボットの姿勢は、作業空間でロボットの並進運動の自由度及び回転運動の自由度に対するロボットの位置と角度として表すことができる。
【0084】
このロボットの位置と角度は、ロボットのいずれか一点の位置と角度を用いて表すことができる。ロボットの位置は、3軸並進運動の自由度に対して順運動学を用いて、基準座標系においてロボットのいずれか一点のx、y、z軸の3次元座標として表すことができる。
【0085】
また、ロボットの角度は、回転運動の自由度に対して順運動学、またはポーズ検出部302を通じて検出されたポーズ角度として表すことができる。したがって、本発明において一つの姿勢を取るために、どの関節でもその角度は唯一に決まるものではない。
【0086】
ここで、ロボットの姿勢を構成する位置と角度のうち、位置を表すいずれか一点は、ロボットの重心であってもよく、またはキャプチャポイントであってもよい。または、脚及び腕を除外した部分に固定された一点を参照点としてロボットの位置を表すことができる。
【0087】
キャプチャポイントに対して定義すれば、キャプチャポイントの通常の意味は、一定の高さを持つ物体が、現在与えられた位置と速度からみるとき、地面のどの地点を踏むと垂直に立つ平衡状態に到達するのかに関する問題におけるソリューションと言える。すなわち、ロボットのキャプチャポイントは、ロボットの現在の位置と速度に照らして、次の動作を行うとき、倒れずに垂直に立つことができる位置のことを意味する。
【0088】
前述したキャプチャポイントの定義によれば、通常、水平面(すなわち、地面)上の点になるが、本発明におけるキャプチャポイントは3次元領域に拡張されることも可能である。3次元領域でのキャプチャポイントは、重心から、重心が移動する速度に比例した距離だけ、重心の移動方向に移動した点と言える。
【0089】
3次元の並進自由度に対してロボットの位置を表す点が重心、キャプチャポイント、参照点のうちいずれか一つに一致する必要はなく、互いに異なる方式で表すこともできる。例えば、2次元水平方向の並進運動の自由度に対するロボットの位置は、キャプチャポイントの2次元水平成分と定義し、1次元垂直方向の並進運動の自由度に対するロボットの位置は、ヒップの高さと定義することができる。
【0090】
運動学計算部310は、各関節の関節エンコーダの瞬時値を読み、予め知っている関節リンクのサイズと重量を用いて、ロボットベース座標系に対する重心の位置、ヒップ高さ、二つの足の位置及び二つの足が置かれた方向を計算できる。ロボット100の現在の重心(COG)の位置は、胴体102に設けられ、この時、現在の重心の方向は、重力の方向に固定された慣性系の方向(Orientation)に従う。
【0091】
ベース座標系と絶対座標系(global or world coordinate system)に対する変換行列を計算して、先に計算したベース座標に対する位置情報を絶対座標系に変換することができる。これを通じて、地面に置かれた足に対して重心の相対的移動軌跡を計算し、その速度を計算し、重心の速度と位置、ヒップ高さを計算できる。
【0092】
3次元空間のキャプチャポイントは、ロボットの重心とロボットの速度を用いて求めることができる。ロボットの現在の位置でのキャプチャポイントは、下記の数学式(1)によって求めることができる。
【0093】
CP=dCOG+w*vCOG (1)
CPは、キャプチャポイントの位置を表し、dCOGは、重心(COG)の位置を表し、vCOGは、重心の速度を表す。wは、w=√(h/g)を計算して求めることができ、ここで、hは、重心の地面からの高さで、gは重力加速度である。2次元水平面のキャプチャポイントは、上記で算出した3次元のキャプチャポイントの(x、y、z)成分のうち(x、y)成分のみを取って求められる。
【0094】
まとめると、運動学計算部310は、ロボット100の複数の関節部の角度に基づいて重心を算出することができ、重心をロボットの位置として現在の姿勢を獲得することができる。
【0095】
または、複数の関節部の角度に基づいて、重心の位置と速度を算出し、重心の位置と速度に基づいて、現在のキャプチャポイントを算出したあと、獲得された現在のキャプチャポイントをロボットの位置として現在の姿勢を獲得したり、または上体のポーズ角度及び複数の関節部の角度に基づいて、ヒップや上体の参照点の位置を算出し、算出された参照点をロボットの位置として現在の姿勢を獲得する。
【0096】
目標設定部320は、ロボットの有限状態機械(FSM)の現在の状態による目標姿勢を設定する。
【0097】
ロボットの目標姿勢は、目標キャプチャポイント、目標ポーズ角度、目標ヒップ高さなどを用いて表すことができ、ここで、キャプチャポイントは多様な方法により表現することができるが、キャプチャポイント(CP)は、3次元空間で重心が移動する速度を反映して速度に対応する距離だけ移動した点の位置として表現することも可能である。
【0098】
また、目標設定部320は、ロボットが倒れないようにするために、二つの足の支持領域の内部を重力方向に通る線上の一点を目標キャプチャポイントとして設定し、この目標キャプチャポイントをロボットの並進運動の自由度に対する目標姿勢として設定することも可能である。
【0099】
ロボットの目標ポーズ角度は任意に設定できるが、ロボットの直立姿勢のために、ロボットの上体が重力方向と平行になるように設定し、これをロボットの回転運動の自由度に対する目標姿勢として設定することも可能である。
【0100】
有限状態機械(FSM)は、与えられた時間に現れることのできる有限個の状態を示す概念的なモデルであって、ロボットのFSMは、設計者が任意に設定することができ、ロボットは予め設定された有限個の状態を循環的に有することになる。
【0101】
FSM制御部330は、ロボット100のFSMを予め格納し、ロボット100の現在のFSMの状態を判断し、現在のFSMの状態から次のFSMの状態に遷移できるか否かを判断して、ロボット100のFSMを制御する。
【0102】
補償力算出部350は、運動学計算部310で獲得したロボット100の現在の位置と、目標設定部320で設定したロボット100の目標位置とを比較して、位置エラーを算出し、位置エラーに基づいて少なくとも一つの自由度に対して補償されるべき補償力を算出する。
【0103】
補償モーメント算出部340は、ロボット100が直立姿勢を維持するようにするために必要な補償モーメントを算出し、ポーズ検出部302でペルヴィスリンクに対して測定した現在のポーズ角度と、目標設定部320で設定した目標回転角度との間の差から、x、y、z方向の補償モーメントを算出し、ロボットのポーズ角度は、ペルヴィスリンクでない胴体(Trunk)リンクや頭などのリンクに対して測定しても構わない。
【0104】
仮想重力設定部360は、ロボットの現在のFSMの状態及び補償力算出部350で算出した補償力を用いて仮想重力の大きさを設定し、補償力から設定された仮想重力は、下記の数学式(2)で表すことができる。
【0105】
gf=f/m (2)
ここで、gfは、仮想重力を表し、fは、補償力算出部350で算出した補償力を表し、mは、ロボットの質量を表す。ロボットのFSMの状態による仮想重力については後述する。
【0106】
重力補償トルク算出部390は、仮想重力設定部360で設定した仮想重力と実際の重力を補償するために、各関節に必要な重力補償トルクを算出し、重力補償トルクは、仮想重力加速度と実際の重力加速度の和、各関節の角度、各リンクの重量及び各リンク内の重心の位置を用いて算出できる。
【0107】
目標トルク算出部400は、各関節に伝達されなければならないトルクの総和を算出し、姿勢の制御、すなわち、モーメント補償と重力補償を全て考慮しなければならない。したがって、補償モーメント算出部340で算出した補償モーメントを発生させるための第1の目標トルクを算出し、第1の目標トルクに重力補償トルクを加えて、第2の目標トルクを算出する。この時、6×6ヤコビアン行列を用いることができる。
【0108】
サーボ制御部420は、目標トルク算出部400から、各関節に必要な第2の目標トルクの伝達を受け、各関節のトルク値が第2の目標トルクに到達するように各トルクサーボを制御する。
【0109】
以下、ロボット100の姿勢を表す情報のうちロボット100の位置は、キャプチャポイント及びヒップ高さを含むものとして、本発明の一実施例によるロボット100の動作をより具体的に説明する。すなわち、3次元並進運動の自由度のうち2次元水平方向に対してはキャプチャポイントに基づき、垂直方向に対してはヒップ高さを参照点とする。
【0110】
本発明の一実施例によるロボット100は、設計者によって予め設定されたFSMによって動作し、目標設定部320で設定される目標姿勢のうち目標キャプチャポイントは、ロボット100の現在のFSMの状態によって異なるように設定される。以下、本発明の一実施例によるロボットのFSMについて詳細に説明する。
【0111】
図4には、本発明の一実施例によるFSMの状態遷移に関するダイヤグラムが示されている。当該実施例では、FSMが7つの状態を有するものとし、DS状態→W1状態→W2状態→W3状態→W4状態→W2状態→W3状態→W4状態→W2状態→...に循環したり、停止命令が入ると、W4状態から停止準備動作であるW2’状態→W3’状態を経てDS状態に遷移する。
【0112】
FSMの各状態での目標ヒップ高さはいずれも同一であるとし、x方向は、支持足の長さ方向であって、前方を正の方向とし、y方向は、x方向に対して上から見て90度反時計方向とする。
【0113】
また、支持足は、ロボットの姿勢を維持させる足、すなわち、地面を踏んでいる足のことを意味し、スイング足は、移動のために上に持ち上げた足のことを意味する。
【0114】
図5に、図4に示されたFSMの状態を有するロボット100の歩行動作が示されている。歩行の開始をDS状態とすると、DS状態は、ロボット100の二つの脚が地面に着いているものとし、W1状態では、外観上はDS状態と違いがないが、重心を片方の脚に移動し始め、当該実施例では、左脚110Lに重心を移すものとする。
【0115】
W2状態では、右脚110Rを持ち上げながら左脚110Lでボディーを支えて立っており、W3状態では、ボディーを進行方向に移動させながら右脚110Rを下げて、右足112Rを地面に着地させる。
【0116】
W4状態では、右足112Rが地面に着いた後、重心を左脚110Lに移動させ、再びW2状態に遷移されながら脚の方向のみが変わり、停止命令が入るまで、W2→W3→W4→W2→...の循環が続く。
【0117】
停止命令が入った場合には、W4状態からW2’状態に遷移し、W2’状態は、W2状態と同様に左脚110Lを持ち上げるが、前方に進むわけではないので、目標キャプチャポイントのx成分を、現在の支持足の中心にくるようにする。W3’状態は、W3状態と同様に左足112Lを着地するが、前進するわけではないので、右足112Rと平行な位置に着地するものとする。
【0118】
図4及び図5を参照すると、7つの各FSMの状態は一定の順序によって遷移され、所定の遷移条件を満足する時に次の状態に遷移される。各FSMの状態の動作内容及び遷移条件は設計者が任意に設定でき、以下、図4及び図5に示されたFSMの状態について詳細に説明する。
【0119】
まず、DS状態は、ロボット100の二つの足112R、112Lが地面に着いて停止している状態を示すものとし、この時、目標キャプチャポイントはロボットの二つの足がなす支持多角形の中心に置かれる。歩行命令が下るとW1状態に遷移する。
【0120】
W1状態は、目標キャプチャポイントがロボット100の二つの足112R、112Lのうち、任意に選択された支持足に移動することになる状態であり、実際のキャプチャポイントが支持足の足の幅以内の安定領域内に進入すると、W2状態に遷移する。
【0121】
W2状態は、ロボット100がスイング足を持ち上げる動作を行う状態であって、W2状態での目標キャプチャポイントのx成分は、支持足の中心から前の部分に時間によって前進する軌跡と設定され、y成分は、支持足の中心線にくるように設定される。スイング脚を持ち上げる動作は、重力補償により制御され、詳細は後述する。W2状態で、現在のキャプチャポイントのx成分がしきい値を越え、スイング足の高さがしきい値を越えると、W3状態に遷移する。
【0122】
W3状態は、ロボット100が着地のために膝を伸ばし、スイング足を下ろす動作を示し、この時、目標キャプチャポイントのx成分は、支持足の前部を越えて、スイング足が着地しなければならない位置まで時間によって増加する軌跡と設定され、y成分は、スイング足が着地する位置へ時間によって移動するものと設定される。スイング足が地面に着いて、F/Tセンサにしきい値以上のz成分が感知されると、W4状態に遷移する。
【0123】
W4状態は、二つの足が地面に着いている状態であって、最後に着地した足を支持足とする。この時、目標キャプチャポイントのx、y成分は、以前状態の目標キャプチャポイントの位置から新しい支持足の中心に、短時間内に連続的に移動する軌跡と設定される。現在のキャプチャポイントが支持足内に入ると、停止命令がない場合にはW2状態に遷移し、停止命令が下る場合にはW2’状態に遷移する。
【0124】
W2’状態はW2状態と類似した動作、すなわち、スイング足を持ち上げる動作を示すが、前進せずに停止するので、目標キャプチャポイントのx成分は支持足の中心に固定する。スイング足の高さがしきい値以上に到達すると、W3’状態に遷移する。
【0125】
W3’状態はW3状態と類似した動作、すなわち、スイング足の着地のために膝を伸ばし、足を下ろす動作を示すが、前進せずに停止するので、目標キャプチャポイントのx成分を支持足の前方へ送らずに支持足の位置に置き、目標キャプチャポイントのy成分は、反対側の足に向かって送るように設定する。スイング足が地面に着いて、F/Tセンサのz成分がしきい値を越えると、DS状態に遷移する。
【0126】
上述したFSMの状態は、本発明の一実施例に過ぎず、ロボット100の歩行を可能にするものであれば、その動作の内容やFSMの状態の個数などは構わない。
【0127】
ただし、上述した例のようにFSMの状態を設定する場合、人間の歩行動作に近く、最初にかかとが地面に着き、最後につま先が地面から離れるheel-to-toe動作が発生して、有効な脚の長さがさらに長くなり、heel-to-toe動作をしない場合より大きな歩幅で自然に歩行することができ、逆運動学を利用しないため、膝を曲げた状態で歩行しなくてもよいので、逆運動学を用いた場合より大きな歩幅の歩行が可能になる。
【0128】
上述したFSMの状態に基づいて、補償力算出部350及び仮想重力設定部360の制御動作について詳細に説明する。
【0129】
図6に、本発明の一実施例によるロボット100が示されている。図6を参照すると、運動学計算部310は、センサ部300で検出したロボット100の状態情報を用いて、ロボット100の重心の位置とその速度を算出し、算出された重心の位置とその速度を用いて、ロボット100の現在のキャプチャポイントを算出する。また、算出された重心に基づいてロボット100の現在のヒップ高さを算出する。
【0130】
キャプチャポイントは地面の上の点と見なされるので、x、y成分を表し、ヒップ高さはz成分を表す。
【0131】
補償力算出部350は、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間の差から、x、y方向の補償力を算出し、目標ヒップ高さと現在のヒップ高さの差から、z方向の補償力を算出する。
【0132】
図6に示されたように、補償力を算出する際に、仮想のスプリングを用いることができる。目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間に、スプリング定数kを持つ仮想のスプリングがあると仮定するときに作用する力fは、下記の数学式(3)で表すことができる。
【0133】
f1=k*e1 f2=k*e2 (3)
e1は,目標キャプチャポイントと現在のキャプチャポイントとの間の差を表す座標であって、e1=(x’、y’)-(x、y)で表すことができ、f1=(fx、fy)になる。(x’、y’)は、目標設定部320で設定した目標キャプチャポイントの位置座標で、前述したように、ロボット100の現在のFSMの状態によって、目標キャプチャポイントの位置が変わる。(x、y)は、運動学計算部310で計算した現在のキャプチャポイントの位置座標である。
【0134】
e2は、目標設定部320で設定した目標ヒップ高さと運動学計算部310で計算した現在のヒップ高さとの間の差を表し、f2=fzになる。これによって、x、y、z方向の補償力が算出される。
【0135】
上述したように、ロボットの歩行中に各歩行動作に合うキャプチャポイントを目標に設定し、目標キャプチャポイントに足を踏み出すようにロボットを制御することで、ロボットが倒れずに安定的に歩行することができる。
【0136】
FSMの各状態ごとに、目標設定部320で設定する目標キャプチャポイントと、運動学計算部310で算出する現在のキャプチャポイントがそれぞれ異なるので、補償力算出部350は、ロボットの現在のFSMの状態によって補償力を算出する。
【0137】
仮想重力設定部360では、ロボットのFSMの状態によって必要な仮想重力及び補償力算出部350で算出した補償力に対する仮想重力を設定する。具体的には、第1の仮想重力設定部361では、補償力算出部350で算出した補償力に対する仮想重力(support gravity)である第1の仮想重力、すなわち、キャプチャポイントの位置を制御するために必要な仮想重力を設定し、第2の仮想重力設定部362では、ロボット100のFSMの状態による仮想重力(lift gravity)である第2の仮想重力を設定する。
【0138】
仮想重力の設定を説明するに先立ち、サポート重力は、ロボット100の足が地面に着いており、ボディーを支持し、その上に姿勢を制御する場合に必要な仮想重力とし、リフト重力は、ロボット100の足が空中に浮いており、ヒップから足を持ち上げたり、または下ろす場合に必要な仮想重力とする。
【0139】
第1の仮想重力設定部361では、前述した数学式(2)によって、補償力に対する仮想重力を設定し、ここでの仮想重力はサポート重力に該当する。
【0140】
第2の仮想重力設定部362で行うFSMの状態による仮想重力の設定は、前述したFSMの7つの状態を例に挙げて説明する。
【0141】
ロボット100のFSMがW2状態にある場合、スイング足を持ち上げる制御が必要なので、スイング脚に対して仮想重力の比重が瞬間的にサポート重力は0になり、リフト重力は1になるようにする。この時、リフト重力のz成分は、支持足とスイング足との高さ差を目標値に維持するように設定し、x成分は、前進方向のスイングができるようにバイアス(bias)されている。y成分は、スイング脚を用いて左右のバランスを取ることができるように、補償力算出部350で計算した補償力のy成分を反映して設定し、二つの脚110L、110Rが衝突しないように、二つの脚110L、110Rの間隔によるフィードバックを加える。
【0142】
ロボット100のFSMがW3状態にある場合、スイング脚が着地のために膝を伸ばし、スイング足を下ろす動作を行うように、リフト重力を設定する。この時、サポート重力の比重は0、リフト重力の比重は1になる。リフト重力のz成分は、スイング足が地面に向かって下りてくるように(−)方向とし、y成分は、スイング足がキャプチャポイントに向かうように現在のスイング足の位置とキャプチャポイントの位置との差をフィードバックし、最小限の左右の足の間隔は維持するようにする。x成分は、スイング足の目標位置との差によって決定し、スイング足の目標位置のx成分は、スイング足が前進するように(+)方向に増加させ、目標歩幅を達成できるように、現在の足の位置と目標歩幅との間の差を共にフィードバックして設定する。
【0143】
ロボット100のFSMがW4状態にある場合、スイング足を持ち上げるとき、つま先が最後に地面に着いているつま先離れ(Toe-off)動作が行われるように仮想重力を設定する。足首ピッチのサポート重力に対して1の比重をおいて、ロボット100の体重が支持足に偏ることに比例して、サポート重力のz成分を増加させる。スイング脚の膝とヒップは1の比重にサポート重力を与えて、体重の移動を助けるようにし、次のFSMの状態でスイング足を持ち上げることに備えて、体重が支持足に偏ることによって、サポート重力の比重を減らし、リフト重力の比重を増やす。
【0144】
ロボット100のFSMがW2’状態にある場合、スイング足のリフト重力のx成分が、支持足と平行な位置にくるようにフィードバック制御する。
【0145】
ロボット100のFSMがW3’状態にある場合、スイング足が支持足の横に一定の間隔をおいて下りてくるように、リフト重力のx、y成分をフィードバックしながら、z成分を時間によって減少させて、自重を用いて地面に着地するようにする。
【0146】
重力補償トルク算出部390では、第1の仮想重力設定部361と第2の仮想重力設定部362で設定した仮想重力及び実際の重力に対する重力補償トルクを算出する。重力補償トルクは、下記の数学式(4)によって算出される。
【0147】
【数1】
ここで、τは、各関節に対する重力補償トルクを表し、gは、重力ベクトル、Qは、3×3マトリックスで、関節軸に対するクロス積(cross product)演算を表し、mは、各リンクの質量、rは、各リンクの重心オフセット、Rは、関節間の相対的座標変換の回転マトリックス、pは、各関節間の相対的位置ベクトルを表す。
【0148】
重力補償は、主体になる関節と補償しようとする対象リンクとの相対的位置関係によって、2種類に分類され、対象リンクが関節よりも上側にある場合には、サポート重力に対する重力補償が行われ、対象リンクが関節よりも下側にある場合には、リフト重力に対する重力補償が行われる。
【0149】
数学式(4)で下付き文字0がベースリンクを表すものと見ると、サポート重力に対する重力補償の場合、ロボットの足関節に対する重力補償トルクをτ0とし、順次に増加してヒップ関節に対する重力補償トルクをτ5とする。
【0150】
リフト重力に対する重力補償の場合、サポート重力と反対に、ヒップ関節に対する重力補償トルクをτ0とし、足関節に対する重力補償トルクをτ5とする。
【0151】
一つの関節に適用される重力補償は、サポート重力とリフト重力の二つの成分があり、ロボット100のFSMの状態によって、サポート重力とリフト重力の比重を調節する。すなわち、ロボット100の特定関節に必要な重力補償トルクは、下記の数学式(5)のように表すことができる。
【0152】
τ=a*(サポート重力補償)+b*(リフト重力補償) (5)
ここで、τは、特定関節の重力補償トルクを表し、aとbは、0から1の間の値を持つ実数で、aとbの値を調節して、ロボット100のFSMの状態に合わせて各関節に対する重力補償トルクを計算する。
【0153】
ロボット100の二つの脚に対して重力補償トルクを計算するとき、上体の重量を二つの脚110L、110Rに分配することができる。したがって、本発明の一実施例によるロボット100は重量分配部380をさらに含むことができる。
【0154】
図7に、いずれか一方に傾いたロボットが示されており、図8には、重量分配部とトルク補償部をさらに含むロボットの制御ブロック図が示されている。
【0155】
ロボット100の二つ足112L、112Rをベースと見て、その上側リンクの重量を考慮した重力補償を足首、膝、ヒップ関節に対して計算する方法は、既存のロボット制御で使用する方法と同一であるが、本発明の一実施例では、ペルヴィス16及びその上にある胴体に該当するトランク102部分の重量は、左右の脚110L、110Rが分けて負担しなければならない。
【0156】
重量分配部380は、ロボット100の重心に対する地面の投影点と、ロボット100の二つの足112L、112Rとの間の距離の比率であるdR、dLを用いて、重心の投影点に近い脚が、ペルヴィス16とトランク102の重量をより多く支えるようにする。
【0157】
図7を参照すると、右に傾いたロボット100の重心は、右に偏ることになり、その投影点は右足に近くなる。したがって、ペルヴィス16とトランク102の重量は、右脚110Rにより多くかかることになり、その比率は、下記の数学式(6)で表すことができる。
【0158】
WL=dR/(dR+dL)
WR=1−WL (6)
ここで、WLは、左脚110Lにかかる重量の比率であり、WRは、右脚110Rにかかる重量の比率である。重量分配部380は、ペルヴィス16とトランク102の質量に、WLが乗算された分だけの重量を左脚110Lにかけ、WRが乗算された分だけの重量を右脚110Rにかけるものとする。
【0159】
補償モーメント算出部340では、ポーズ検出部302で測定したペルヴィスリンク16のロール、ピッチ、ヨー方向の回転角度と目標回転角度との間の差から補償モーメントを算出し、ロール、ピッチ、ヨー方向の3軸に仮想のスプリングが存在すると仮定して、下記の数学式(7)から各関節に必要な補償モーメントを計算することができる。
【0160】
M=k1*e3 (7)
k1は、仮想のスプリング定数を表し、e3は、ポーズ検出部302で測定した回転角度と目標回転角度との間の差を表す。
【0161】
目標トルク算出部400では、補償モーメント算出部340で算出した補償モーメント及び重力補償トルク算出部390で算出した重力補償トルクを全て反映して、ロボット100の各関節に必要なトルクを計算する。
【0162】
補償モーメントに対する関節トルクを計算するに先立ち、補償モーメントをロボットの左右の足に分配することができる。図8に示されたように、本発明の一実施例によるロボット100は、補償モーメント分配部370をさらに含むことができる。
【0163】
補償モーメント分配部370は、重量分配部380と同様に、ロボット100の重心の地面に対する投影点と、ロボット100の二つの足112L、112Rとの間の距離の比率を用いて、補償モーメントを左右の脚110L、110Rに分配する。
【0164】
補償モーメント算出部340で算出した補償モーメントに、上記の数学式(6)で求めたWRを乗算すると、右脚110Rに分配される補償モーメントMRを得ることができ、補償モーメント算出部340で算出した補償モーメントに、上記の数学式(6)で求めたWLを乗算すると、左脚110Lに分配される補償モーメントMLを得ることができる。これを数学式に表すと、下記の数学式(8)の通りである。
【0165】
ML=WL*M, MR=WR*M、 (8)
ここで、WL=dR/(dR+dL)、WR=1−WLで、dL、dRは、重心の投影点と二つの足との間の距離である。
【0166】
目標トルク算出部400は、下記の数学式(9)によって、ロボット100の左右の脚に、補償モーメント分配部370で算出した各補償モーメントを発生させるために必要な関節トルクである第1の目標トルクを計算する。
【0167】
【数2】
ここで、JTは、左右の脚110L、110Rからロボット100の重心の位置に対するヤコビアン行列であり、デカルト空間(Cartesian Space)上のモーメントを関節トルクに変換するために使用した。ロボット100の左右の足をベースと見て、ロボット100の重心をペルヴィスリンク16上に存在するエンドエフェクタ(end-effector)と見るときの6×6ヤコビアン行列Jを計算する。
【0168】
目標トルク算出部400は、数学式(9)で算出した第1の目標トルクに、重力補償トルク算出部390で算出した重力補償トルクを加えて、第2の目標トルクτ2、L、τ2、Rを算出する。便宜上、第2の目標トルクをτ2、L、τ2、Rで表したが、第2の目標トルクは、左右の脚の各関節(合計12個の関節)ごとに算出される。
【0169】
ロボット100の各関節に、速度に比例して抵抗するダンピングトルクを加えると、より安定した歩行を具現できる。図8を参照すると、本発明の一実施例によるロボット100は、トルク補償部410をさらに含むことができる。
【0170】
トルク補償部は、目標トルク算出部400で算出した第2の目標トルクに各関節のダンピングトルクを加えて、第3の目標トルクを算出する。これは下記の数学式(10)で表すことができる。
【0171】
τ3、L=τ2、L+d*w τ3、R=τ2、R+d*w (10)
ここで、τ3、L、τ3、Rはそれぞれ、左右の脚の第3の目標トルクを表し、dは、ダンピング係数、wは、関節の角速度を表す。便宜上、第3の目標トルクを左、右に関するものに区分したが、第2の目標トルクが各関節ごとに計算されるので、第3の目標トルクも各関節に対して計算される。
【0172】
サーボ制御部420は、トルク補償部から最終目標トルクである第3の目標トルクの伝送を受け、ロボット100の各関節のサーボモーターが第3の目標トルクを発生させるように、トルクサーボを制御する。各関節のトルクサーボは、関節トルク検出部304から各関節の現在の出力トルク値を受信し、第3の目標トルクと測定された現在のトルク値との間の差だけのトルクをさらに発生させるようにするトルク制御信号を、各関節の駆動回路に送ることができる。
【0173】
上述した本発明の一実施例によるロボット100の各制御ブロックの機能を簡単に整理すると、センサ部300では、ロボット100のポーズ角度(ロール、ピッチ、ヨー方向の角度として表現可能)、各関節の回転角度及び出力トルク値などを測定し、運動学計算部310では、センサ部300で測定したロボットの状態情報を用いて、重心の位置、速度、ヒップ高さを計算し、計算された重心の位置と速度を合成して、ロボットの現在のキャプチャポイントの位置を算出する。
【0174】
FSM制御部330は、ロボットの動作を示す有限個の状態を格納し、現在のロボットのFSMの状態を判断し、現在の状態から次の状態に遷移される条件を満足するか否かを決定して、条件を満足する場合、ロボットの動作を次のFSMの状態に遷移させるために、各制御ブロックに信号を送る。
【0175】
目標設定部320は、FSM制御部330で判断した現在のFSMの状態によって目標キャプチャポイントを設定し、ロボット100の目標ヒップ高さ及びペルヴィスリンク16の目標ポーズ角度を設定する。
【0176】
補償力算出部350は、目標キャプチャポイントと現在のキャプチャポイントとの間の差、及び目標ヒップ高さと現在のヒップ高さとの間の差を用いて、補償力を計算し、補償モーメント算出部340は、ペルヴィスリンク16の目標ポーズ角度と現在のポーズ角度との間の差を用いて、補償モーメントを計算する。
【0177】
第1の仮想重力設定部361は、補償力算出部350で算出した補償力に対する第1の仮想重力を設定し、第2の仮想重力設定部362は、FSM制御部330で判断したロボット100の現在のFSMの状態による第2の仮想重力を設定する。
【0178】
重量分配部380は、ロボット100の重心と左右の脚110L、110Rとの間の距離の比率を用いて、ロボット100の上体の重量を左右の脚110L、110Rにそれぞれ分配し、重力補償トルク算出部390は、左右の脚110L、110Rに分配された上体の重量を考慮して、第1の仮想重力と第2の仮想重力を補償するための重力補償トルクを算出する。
【0179】
補償モーメント分配部370は、重量分配部380と同じ比率を用いて、補償モーメント算出部340で算出した補償モーメントをロボット100の左右の脚110L、110Rに分配し、目標トルク算出部400では、左右の脚110L、110Rに分配された補償モーメントを考慮して、左右の脚110L、110Rの各関節に補償モーメントを発生させるための第1の目標トルクを算出する。そして、第1の目標トルクに重力補償トルクを合算して、第2の目標トルクを算出する。
【0180】
トルク補償部410は、第2の目標トルクにダンピングトルクを合算して、第3の目標トルクを算出し、サーボ制御部420は、各関節に第3の目標トルクを発生させるために必要な制御信号を各トルクサーボに伝送する。
【0181】
以下、本発明の一実施例によるロボットの歩行制御方法について詳細に説明する。
【0182】
図9は、本発明の一実施例によるロボットの制御方法のフローチャートである。
【0183】
ロボットの上体のポーズ角度及び複数の関節部の角度を検出(501)し、、ポーズ角度及び複数の関節部の角度に基づいて現在の姿勢を獲得(502)する。ロボットの現在の姿勢は、前述したように並進運動の自由度に対するロボットの現在の位置、及び回転運動の自由度に対するロボットの現在のポーズ角度として表すことができる。
【0184】
次に、複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に基づいた姿勢及び回転運動の自由度に基づいた姿勢と、ロボットの現在のFSMの状態によって設定された目標姿勢とを比較して、姿勢エラーを算出(503)する。
【0185】
この時、検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置を少なくとも一つの並進運動の自由度に対して検出し、少なくとも一つの並進運動の自由度に対して検出された現在の重心と予め設定された目標重心とを比較して、重心エラーを算出する。すなわち、少なくとも一つの自由度に対する重心エラーを算出する。
【0186】
ここで、重心エラーは、少なくとも一つの自由度に対する姿勢エラーとして用いられる。
【0187】
または、検出されたポーズ角度及び複数の関節部の角度に基づいて、現在の重心の位置と速度を少なくとも一つの自由度に対して検出し、検出された現在の重心の位置と速度に基づいて、現在のキャプチャポイントを少なくとも一つの自由度に対して獲得し、現在のキャプチャポイントと予め設定されたキャプチャポイントとを比較して、キャプチャポイントエラーを少なくとも一つの自由度に対して算出し、算出されたキャプチャポイントエラーを少なくとも一つの自由度の姿勢エラーとして用いることも可能である。
【0188】
また、検出されたポーズ角度及び複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの点の位置を少なくとも一つの自由度に対する現在の参照点として獲得し、現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを少なくとも一つの自由度に対して算出し、参照点位置エラーを少なくとも一つの自由度の姿勢エラーとして用いることも可能である。
【0189】
なお、残りの並進運動の自由度の姿勢エラーの算出は、少なくとも一つの並進運動の自由度の姿勢エラーの算出と同一または異なってもよい。
【0190】
回転運動の自由度に対する姿勢エラーは、ロボットの現在のポーズ角度と目標ポーズ角度との差から算出することができる。
【0191】
そして、算出された姿勢エラーに基づいて、少なくとも一つの並進運動の自由度に対する補償力を算出し、回転運動の自由度に対する補償モーメントを算出する(504)。
【0192】
算出された補償力に対する第1の仮想重力を設定し、ロボットの現在のFSMの状態によって第2の仮想重力を設定する(505)。
【0193】
そして、第1の仮想重力、第2の仮想重力及び実際の重力を補償するために必要な重力補償トルクを算出する(506)。
【0194】
ロボットの複数の関節部に補償モーメントを発生させるために必要なトルクと、前記算出された重力補償トルクとを合算して、最終目標トルクを算出する(507)。
【0195】
最後に、最終目標トルクを複数の関節部に出力(508)して、ロボットの均衡を制御する。
【0196】
図10には、並進運動の自由度に対するロボットの姿勢をキャプチャポイントとして表すロボットの歩行制御方法に関するフローチャートが示されている。図10を参照すると、まず、センサ部300でロボットの現在の状態情報を測定する(510)。ロボットの現在の状態情報は、ペルヴィスリンク16のIMU17で測定したポーズ角度、ロボットの足が地面に着いているか否か、各関節のトルク、各関節の角度などを含むことができる。
【0197】
そして、運動学計算部310で、ロボットの現在の状態情報を用いて、ロボットの現在の重心の位置及び速度を計算し、計算された重心の位置及び速度を用いて、下記の数学式(1)によって、ロボットの現在のキャプチャポイントの位置を3次元空間に対して得る(520)。
【0198】
CP=dCOG+w*vCOG (1)
CPは、キャプチャポイントを表し、dCOGは、重心を表し、vCOGは、重心の速度を表す。wは、w=√(h/g)を計算して求めることができ、ここで、hは、重心の地面からの高さで、gは重力加速度である。キャプチャポイントを2次元水平面(あるいは地面)に制限する場合、数学式(1)で求めたCPの座標(x、y、z)から(x、y)のみを取って、地面上の2次元キャプチャポイントを求めることもできる。
【0199】
3軸並進運動の自由度に対するロボットの位置をキャプチャポイントとして表す場合、3次元キャプチャポイント(数学式(1))を使用し、z軸を除外した2軸並進運動の自由度に対するロボットの位置をキャプチャポイントとして表す場合、前記2次元キャプチャポイントを使用することができる。また、この場合には、z軸並進運動の自由度に対するロボットの位置は、ロボットのヒップ高さなどのような、どの参照点の位置として表すことができる。
【0200】
そして、目標設定部320で、ロボットの現在のFSMの状態によって目標キャプチャポイントを設定し、目標ポーズ角度を設定する(530)。場合によって、目標ヒップ高さも設定することができ、目標ヒップ高さは任意に設定できるが、FSMの各状態によって一定に設定することが好ましく、目標ポーズ角度も任意に設定できるが、ロボットの上体が直立姿勢を維持するように設定することが好ましい。
【0201】
そして、補償力算出部350で、目標キャプチャポイントと現在のキャプチャポイントとの間の差を用いて、各関節に必要な補償力を算出する(540)。キャプチャポイントを地面の上の点と見なす場合には、目標キャプチャポイントと現在のキャプチャポイントとの間の差から、x、y方向の補償力を算出することができ、ヒップ高さの間の差から、z方向の補償力を算出することができる。
【0202】
補償力を算出する際に、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間に仮想のスプリングがあるものと見なし、下記の数学式(3)を用いることができる。
【0203】
f=k*e (3)
eは、目標キャプチャポイントと現在のキャプチャポイントとの間の差を表す座標で、e=(x’、y’、z’)-(x、y、z)で表すことができ、(x’、y’、z’)は、目標キャプチャポイントの位置座標で、(x、y、z)は、現在のキャプチャポイントの位置座標である。kは、仮想のスプリング定数を表す。
【0204】
また、補償モーメント算出部340では、目標ポーズ角度と現在のポーズ角度との間の差を用いて、補償モーメントを算出する(550)。この時、ペルヴィスリンクのロール、ピッチ、ヨーの3軸に対して仮想のスプリングがあると仮定して、下記の数学式(7)によって補償モーメントを算出することができる。
【0205】
M=k1*e1 (7)
k1は、仮想のスプリング定数を表し、e1は、IMUで測定したポーズ角度と目標ポーズ角度との間の差を表す。
【0206】
補償力の算出と補償モーメントの算出とは前後関係を有するものではなく、540段階と550段階は、互いに取り替えてもよい。
【0207】
そして、第1の仮想重力設定部361で、補償力に対する第1の仮想重力を設定し、第2の仮想重力設定部362で、ロボット100の現在のFSMの状態によって第2の仮想重力を設定する(560)。
【0208】
第1の仮想重力を設定する際に下記の数学式(2)を用いることができる。
【0209】
gf=f/m (2)
ここで、gfは、第1の仮想重力を表し、fは、補償力算出部350で算出した補償力を表し、mは、ロボットの質量を表す。
【0210】
第2の仮想重力は、FSMの状態によって変わり、第2の仮想重力を設定する方法は、先に本発明の一実施例によるロボットにおいて説明した通りである。
【0211】
そして、重力補償トルク算出部390では、第1の仮想重力、第2の仮想重力及び実際の重力を補償するために必要な重力補償トルクを算出する(570)。重力補償トルクを計算する一般的な式は、前述した数学式(4)で表現することができる。
【0212】
【数3】
ここで、τは、各関節に対する重力補償トルクを表し、gは、補償しようとする重力ベクトル、Qは、3×3マトリックスで、関節軸に対するクロス積(cross product)演算を表し、mは、各リンクの質量、rは、各リンクの重心オフセット、Rは、関節間の相対的座標変換の回転マトリックス、pは、各関節間の相対的位置ベクトルを表す。
【0213】
そして、目標トルク算出部400で、各関節に補償モーメントを発生させるために必要な第1の関節トルクを算出し、第1の関節トルクに重力補償トルクを合算して、第2の関節トルクを算出する(580)。
【0214】
最後に、サーボ制御部420で、各関節に第2の関節トルクを発生させるために、各トルクサーボを制御する(590)。
【0215】
本発明の一実施例によるロボットの歩行制御方法では、重力補償トルクを算出する際に、ロボット100の上体の重量を左右の脚に分配する過程をさらに含むことができ、補償モーメントに対する第1の関節トルクを算出する際に、補償モーメントをロボットの左右の脚に分配する過程をさらに含むことができる。
【0216】
前記実施例によるロボットの歩行制御方法に関するフローチャートが図11に示されている。下記の実施例では、並進運動の自由度に対するロボットの位置をキャプチャポイント及びヒップ高さとして表す。
【0217】
図11を参照して、重量分配及び補償モーメント分配を重点的に説明する。センサ部300で、ロボットの現在の状態情報を測定し(610)、運動学計算部310で、測定された状態情報を用いて、ロボットの現在の重心の位置、速度及びヒップ高さを計算する(620)。
【0218】
目標設定部320で、ロボットの現在のFSMの状態に基づいて目標キャプチャポイントを設定し、目標ヒップ高さ及び目標ペルヴィスリンク回転角を設定する(630)。
【0219】
補償力算出部350で、目標キャプチャポイントの位置と現在のキャプチャポイントの位置との間の差から、x、y方向の補償力、及び目標ヒップ高さと現在のヒップ高さとの間の差からz方向の補償力を算出し、目標ポーズ角度と現在のポーズ角度との間の差から、補償モーメントを算出する(640)。
【0220】
仮想重力設定部360で、補償力に対する第1の仮想重力を設定し、ロボットのFSMの状態による第2の仮想重力を設定する(650)。
【0221】
そして、重量分配部380で、ロボットのペルヴィスリンクとその上の胴体(以下、トランクという。)の重量を左右の脚に分けて分配する(660)。先に検討した図7を再び参照すると、ロボット100が、いずれか一方に傾いている場合、その重心は、胴体が傾いた方向に偏ることになる。したがって、重心と近い側の足により多くの重量がかかり、ロボット100の重心を地面に投影した投影点とロボット100の左足との間の距離の比率をdLとし、投影点とロボットの右足との間の距離の比率をdRとすると、ロボット100の左右の脚110L、110Rにかかるペルヴィスリンク16とトランク102の重量の比率は、下記の数学式(6)で表すことができる。
【0222】
WL=dR/(dR+dL)
WR=1−WL (6)
ここで、WLは、左脚にかかる重量の比率を表し、WRは、右脚にかかる重量の比率を表す。ペルヴィスリンクとトランクの質量に、WLを乗算した分だけの質量が左脚にかかり、WRを乗算した分だけの質量が右脚にかかる。ロボットが、図7のように、右に傾いた姿勢を取る場合、右脚により多くの重量がかかることになる。
【0223】
そして、重力補償トルク算出部390で、左右の脚110L、110Rに配分された重量を考慮して、第1の仮想重力及び第2の仮想重力を補償するために必要な重力補償トルクを算出する(670)。
【0224】
補償モーメント分配部370では、補償モーメント算出部340で算出した補償モーメントを、ロボット100の左右の脚110L、110Rに分配する(680)。分配の比率は、前述した重量分配の比率と同一に適用することができ、算出された補償モーメントに、数学式(6)でのWLを乗算した値が左脚に分配される補償モーメントで、WRを乗算した値が右脚に分配される補償モーメントである。
【0225】
そして、目標トルク算出部400は、左右の脚110L、110Rに分配された補償モーメントを考慮して、各関節に必要な第1の目標トルクを算出し、ここに重力補償トルク算出部390で算出した重力補償トルクを合算して、第2の目標トルクを算出する(690)。
【0226】
さらに、ロボット100の安全性のために、各関節の速度に比例して抵抗するダンピングトルクを加える過程をさらに含むことができる(700)。目標トルク算出部400で算出した第2の目標トルクにダンピングトルクを加えると、最終的に第3の目標トルクを得ることができ、下記の数学式(10)で表すことができる。
【0227】
τ3、L=τ2、L+d*w τ3、R=τ2、R+d*w (10)
ここで、τ3、L、τ3、Rはそれぞれ、左右の脚110L、110Rの第3の目標トルクを表し、dは、ダンピング係数、wは、関節の角速度を表す。
【0228】
サーボ制御部420では、左右の脚110L、110Rの各関節に対して算出された第3の目標トルクを各関節に発生させるために、各関節のトルクサーボを制御する(710)。
【符号の説明】
【0229】
300 センサ部
310 運動学計算部
320 目標設定部
330 有限状態機械制御部
340 補償モーメント算出部
350 補償力算出部
360 仮想重力設定部
390 重力補償トルク算出部
【特許請求の範囲】
【請求項1】
複数の関節部がそれぞれ設けられた複数の脚と、前記脚に連結された上体とを有し、複数の自由度を有するロボットにおいて、
前記ロボットの状態情報を測定するセンサ部と、
前記センサ部で測定された状態情報を用いて、前記ロボットの現在の姿勢を獲得する運動学計算部、
予め設定された有限状態機械(FSM)に基づいて、前記複数の自由度のうち少なくとも一つの自由度に対して目標姿勢を設定する目標設定部と、
前記現在の姿勢と目標姿勢とを比較して姿勢エラーを算出し、前記姿勢エラーに基づいて前記少なくとも一つの自由度に対して補償力を算出する補償力算出部と、
前記算出された補償力によって前記複数の関節部に必要な仮想重力の大きさ、及び前記ロボットの現在のFSMの状態によって前記複数の関節部に必要な仮想重力の大きさを設定する仮想重力設定部と、
前記仮想重力設定部で設定された仮想重力を補償するための重力補償トルクを算出する重力補償トルク算出部と、
前記複数の関節部に前記重力補償トルクを出力するサーボ制御部と、を含むロボット。
【請求項2】
前記センサ部は、
前記上体のポーズ角度を検出するポーズ検出部と、
前記複数の関節部の角度を検出する角度検出部とを含む、請求項1に記載のロボット。
【請求項3】
前記運動学計算部は、
前記上体のポーズ角度及び複数の関節部の角度に基づいて重心を算出し、前記重心に基づいて前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項4】
前記運動学計算部は、
前記上体のポーズ角度及び複数の関節部の角度に基づいて重心の位置と速度を算出し、前記重心の位置と速度に基づいて現在のキャプチャポイントを算出することによって、前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項5】
前記運動学計算部は、
前記上体のポーズ角度及び前記複数の関節部の角度に基づいてヒップや上体の参照点の位置を獲得し、前記参照点の位置に基づいて前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項6】
前記目標設定部は、
前記少なくとも一つの自由度に対して目標重心を設定し、
前記目標重心を用いて前記目標姿勢を設定する、請求項3に記載のロボット。
【請求項7】
前記目標設定部は、
前記少なくとも一つの自由度に対して目標キャプチャポイントを設定し、
前記目標キャプチャポイントを用いて前記目標姿勢を設定する、請求項4に記載のロボット。
【請求項8】
前記目標設定部は、
前記複数の脚に設けられた足の支持領域内の一点が重力方向に通る線上の一点を目標キャプチャポイントとして設定する、請求項7に記載のロボット。
【請求項9】
前記目標設定部は、
前記少なくとも一つの自由度に対して前記ロボットのヒップや上体の参照点の目標位置を設定し、前記参照点の目標位置に基づいて前記目標姿勢を設定する、請求項5に記載のロボット。
【請求項10】
前記運動学計算部は、
前記ポーズ角度及び前記複数の関節部の角度に基づいて現在のヒップ高さをさらに獲得し、
前記補償力算出部は、
前記現在のキャプチャポイントと前記目標キャプチャポイントとを比較してキャプチャポイントエラーを算出し、前記現在のヒップ高さと目標ヒップ高さとを比較してヒップ高さエラーを算出し、前記キャプチャポイントエラーとヒップ高さエラーに基づいて補償力を算出する、請求項7に記載のロボット。
【請求項11】
前記補償力算出部は、
前記キャプチャポイントエラーを用いて水平方向の補償力を算出し、前記ヒップ高さエラーを用いて垂直方向の補償力を算出する、請求項10に記載のロボット。
【請求項12】
前記ポーズ検出部で検出するポーズ角度は、
前記ロボットのペルヴィスリンクのロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の回転角度のうち少なくとも一つを含み、
前記複数の関節部のトルクを測定する関節トルク検出部をさらに含む、請求項2に記載のロボット。
【請求項13】
前記運動学計算部は、
前記ロボットの現在の重心の位置、速度及びヒップ高さを計算し、前記重心の位置及び速度を合成して、前記ロボットの現在のキャプチャポイントの位置を計算する、請求項12に記載のロボット。
【請求項14】
前記ロボットの有限状態機械(FSM)を予め格納し、前記ロボットの現在のFSMの状態を判断し、前記ロボットがFSMの状態遷移の条件を満足するか否かによって、次のFSMの状態に遷移するように制御するFSM制御部をさらに含む、請求項13に記載のロボット。
【請求項15】
前記目標設定部は、
前記ロボットの現在のFSMの状態による目標キャプチャポイント、前記ロボットの上体の姿勢制御のための目標ポーズ角度、及び前記ロボットの目標ヒップ高さを設定する、請求項14に記載のロボット。
【請求項16】
前記センサ部で測定したポーズ角度と、前記目標設定部で設定した目標ポーズ角度との間の差を用いて、前記目標ポーズ角度に到達するために補償しなければならない補償モーメントを算出する補償モーメント算出部をさらに含む、請求項5に記載のロボット。
【請求項17】
前記補償力算出部は、
前記運動学計算部で計算した前記ロボットの現在のキャプチャポイントのx方向の位置及びy方向の位置と、前記目標設定部で設定した目標キャプチャポイントのx方向の位置及びy方向の位置との間の差を用いて、x方向及びy方向の補償力を算出し、前記運動学計算部で計算した前記ロボットの現在のヒップ高さと、前記目標設定部で設定した目標ヒップ高さとの間の差を用いて、z軸方向の補償力を算出する、請求項15に記載のロボット。
【請求項18】
前記仮想重力設定部は、
前記ロボットのFSMの現在の状態による仮想重力、及び前記補償力算出部で算出した補償力による仮想重力の大きさを設定する、請求項16に記載のロボット。
【請求項19】
前記仮想重力設定部は、
前記ロボットの質量をmとし、前記補償力算出部で算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの各関節に必要な第1の仮想重力(gf)を設定する第1の仮想重力設定部と、
前記ロボットの現在のFSMの状態によって、各関節に必要な第2の仮想重力を設定する第2の仮想重力設定部と、を含む、請求項16に記載のロボット。
gf=f/m (2)
【請求項20】
前記重力補償トルク算出部は、
前記第1の仮想重力及び前記第2の仮想重力、実際の重力を補償するために必要なトルクを算出する、請求項19に記載のロボット。
【請求項21】
前記ロボットの重心が地面に投影された点と前記各脚に連結された足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点からより近い脚に、より大きい比率の前記ロボットの上体質量を割り当てる重量分配部をさらに含む、請求項20に記載のロボット。
【請求項22】
前記重力補償トルク算出部は、
前記重量分配部で前記各脚に分配した上体の質量を反映して、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、仮想重力と実際の重力を補償するために必要な各関節の重力補償トルクを算出する、請求項21に記載のロボット。
【請求項23】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記補償モーメント算出部で算出された補償モーメントを前記複数の脚に分配する補償モーメント分配部をさらに含む、請求項22に記載のロボット。
【請求項24】
前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記補償モーメント分配部で前記ロボットの複数の脚に分配した補償モーメントから前記複数の脚に必要な第1の目標トルクを算出する目標トルク算出部をさらに含む、請求項23に記載のロボット。
【請求項25】
前記目標トルク算出部は、
前記第1の目標トルクと前記重力補償トルク算出部で算出した重力補償トルクとを合算して、前記ロボットの各関節に必要な第2の目標トルクを算出する、請求項24に記載のロボット。
【請求項26】
前記目標トルク算出部で算出された第2の目標トルクに前記各関節の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出するトルク補償部をさらに含む、請求項25に記載のロボット。
【請求項27】
複数の関節部がそれぞれ設けられた複数の脚と、該脚に連結された上体とを含み、複数の並進運動の自由度及び回転運動の自由度を有するロボットの制御方法において、
前記上体のポーズ角度及び前記複数の関節部の角度を検出し、
前記検出された複数の関節部の角度に基づいて、前記複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に対する現在の姿勢を獲得し、
前記獲得された現在の姿勢と予め設定された目標姿勢との差に基づいて、姿勢エラーを算出し、
前記姿勢エラーに基づいて、前記少なくとも一つの並進運動の自由度に対する補償力を算出し、
前記少なくとも一つの並進運動の自由度に対する補償力、及び前記ロボットに対して予め設定された有限状態機械(Finite State Machine:FSM)の現在の状態に基づいて、仮想重力を設定し、
前記設定された仮想重力を補償するために、前記ロボットの関節部に必要な重力補償トルクを算出し、
前記ロボットの関節部のトルクが前記算出された重力補償トルクを含む目標トルクになるように各関節のトルクサーボを制御する、ロボットの制御方法。
【請求項28】
前記姿勢エラーを算出することは、
前記検出されたポーズ角度及び前記複数の関節部の角度に基づいて現在の重心の位置を算出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置を算出し、
前記算出された現在の重心と予め設定された目標重心とを比較して、前記少なくとも一つの並進運動の自由度に対する重心エラーを算出し、
前記重心エラーを姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項29】
前記姿勢エラーを算出することは、
前記検出されたポーズ角度及び複数の関節部の角度に基づいて現在の重心の位置と速度を検出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置と速度を検出し、
前記検出された現在の重心の位置と速度に基づいて、前記少なくとも一つの並進運動の自由度に対する現在のキャプチャポイントを獲得し、
前記獲得された現在のキャプチャポイントと予め設定された目標キャプチャポイントとを比較して、少なくとも一つの並進運動の自由度に対するキャプチャポイントエラーを算出し、
前記算出されたキャプチャポイントエラーを前記姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項30】
前記姿勢エラーを算出することは、
前記上体のポーズ角度及び前記複数の関節部の角度を検出し、
前記ポーズ角度及び前記複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの参照点の位置を前記少なくとも一つの自由度に対して算出し、
前記現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを前記少なくとも一つの自由度に対して算出し、
前記参照点位置エラーを前記少なくとも一つの並進運動の自由度の姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項31】
前記姿勢エラーを算出することは、
前記複数の並進運動の自由度のうち残りの並進運動の自由度の姿勢エラーの算出と互いに異なることを含む、請求項27に記載のロボットの制御方法。
【請求項32】
前記ロボットの関節部に必要な仮想重力を設定することは、
前記ロボットの質量をmとし、前記算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの関節部に必要な第1の仮想重力を設定し、
前記ロボットの現在のFSMの状態によって、前記関節部に必要な第2の仮想重力を設定することを含む、請求項27に記載のロボットの制御方法。
gf=f/m (2)
【請求項33】
前記重力補償トルクを算出することは、
前記第1の仮想重力に対する重力補償トルク及び前記第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、前記ロボットの関節部に提供される重力補償トルクを算出することを含む、請求項32に記載のロボットの制御方法。
【請求項34】
前記ロボットが安定した姿勢を維持するための目標ポーズ角度を設定し、
前記目標ポーズ角度と前記測定されたポーズ角度との間の差を補償するための補償モーメントを算出することをさらに含む、請求項27に記載のロボットの制御方法。
【請求項35】
前記算出された補償モーメントを前記ロボットの関節部に提供するために必要な第1の目標トルクを算出し、
前記第1の目標トルクと前記重力補償トルクとを合算して、第2の目標トルクを算出することをさらに含み、
前記目標トルクは、第2の目標トルクであるものとする、請求項34に記載のロボットの制御方法。
【請求項36】
前記算出された第2の目標トルクに前記関節部の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出することをさらに含み、
前記目標トルクは、前記第3の目標トルクであるものとする、請求項35に記載のロボットの制御方法。
【請求項37】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記算出された補償モーメントを前記複数の脚に分配することをさらに含む、請求項35に記載のロボットの制御方法。
【請求項38】
前記第1の目標トルクを算出することは、
前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記ロボットの複数の脚に分配された補償モーメントから前記複数の脚に必要な第1の目標トルクを算出することを含む、請求項37に記載のロボットの制御方法。
【請求項1】
複数の関節部がそれぞれ設けられた複数の脚と、前記脚に連結された上体とを有し、複数の自由度を有するロボットにおいて、
前記ロボットの状態情報を測定するセンサ部と、
前記センサ部で測定された状態情報を用いて、前記ロボットの現在の姿勢を獲得する運動学計算部、
予め設定された有限状態機械(FSM)に基づいて、前記複数の自由度のうち少なくとも一つの自由度に対して目標姿勢を設定する目標設定部と、
前記現在の姿勢と目標姿勢とを比較して姿勢エラーを算出し、前記姿勢エラーに基づいて前記少なくとも一つの自由度に対して補償力を算出する補償力算出部と、
前記算出された補償力によって前記複数の関節部に必要な仮想重力の大きさ、及び前記ロボットの現在のFSMの状態によって前記複数の関節部に必要な仮想重力の大きさを設定する仮想重力設定部と、
前記仮想重力設定部で設定された仮想重力を補償するための重力補償トルクを算出する重力補償トルク算出部と、
前記複数の関節部に前記重力補償トルクを出力するサーボ制御部と、を含むロボット。
【請求項2】
前記センサ部は、
前記上体のポーズ角度を検出するポーズ検出部と、
前記複数の関節部の角度を検出する角度検出部とを含む、請求項1に記載のロボット。
【請求項3】
前記運動学計算部は、
前記上体のポーズ角度及び複数の関節部の角度に基づいて重心を算出し、前記重心に基づいて前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項4】
前記運動学計算部は、
前記上体のポーズ角度及び複数の関節部の角度に基づいて重心の位置と速度を算出し、前記重心の位置と速度に基づいて現在のキャプチャポイントを算出することによって、前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項5】
前記運動学計算部は、
前記上体のポーズ角度及び前記複数の関節部の角度に基づいてヒップや上体の参照点の位置を獲得し、前記参照点の位置に基づいて前記現在の姿勢を獲得する、請求項2に記載のロボット。
【請求項6】
前記目標設定部は、
前記少なくとも一つの自由度に対して目標重心を設定し、
前記目標重心を用いて前記目標姿勢を設定する、請求項3に記載のロボット。
【請求項7】
前記目標設定部は、
前記少なくとも一つの自由度に対して目標キャプチャポイントを設定し、
前記目標キャプチャポイントを用いて前記目標姿勢を設定する、請求項4に記載のロボット。
【請求項8】
前記目標設定部は、
前記複数の脚に設けられた足の支持領域内の一点が重力方向に通る線上の一点を目標キャプチャポイントとして設定する、請求項7に記載のロボット。
【請求項9】
前記目標設定部は、
前記少なくとも一つの自由度に対して前記ロボットのヒップや上体の参照点の目標位置を設定し、前記参照点の目標位置に基づいて前記目標姿勢を設定する、請求項5に記載のロボット。
【請求項10】
前記運動学計算部は、
前記ポーズ角度及び前記複数の関節部の角度に基づいて現在のヒップ高さをさらに獲得し、
前記補償力算出部は、
前記現在のキャプチャポイントと前記目標キャプチャポイントとを比較してキャプチャポイントエラーを算出し、前記現在のヒップ高さと目標ヒップ高さとを比較してヒップ高さエラーを算出し、前記キャプチャポイントエラーとヒップ高さエラーに基づいて補償力を算出する、請求項7に記載のロボット。
【請求項11】
前記補償力算出部は、
前記キャプチャポイントエラーを用いて水平方向の補償力を算出し、前記ヒップ高さエラーを用いて垂直方向の補償力を算出する、請求項10に記載のロボット。
【請求項12】
前記ポーズ検出部で検出するポーズ角度は、
前記ロボットのペルヴィスリンクのロール方向(roll、X軸回転)、ピッチ方向(pitch、Y軸回転)、ヨー方向(yaw、Z軸回転)の回転角度のうち少なくとも一つを含み、
前記複数の関節部のトルクを測定する関節トルク検出部をさらに含む、請求項2に記載のロボット。
【請求項13】
前記運動学計算部は、
前記ロボットの現在の重心の位置、速度及びヒップ高さを計算し、前記重心の位置及び速度を合成して、前記ロボットの現在のキャプチャポイントの位置を計算する、請求項12に記載のロボット。
【請求項14】
前記ロボットの有限状態機械(FSM)を予め格納し、前記ロボットの現在のFSMの状態を判断し、前記ロボットがFSMの状態遷移の条件を満足するか否かによって、次のFSMの状態に遷移するように制御するFSM制御部をさらに含む、請求項13に記載のロボット。
【請求項15】
前記目標設定部は、
前記ロボットの現在のFSMの状態による目標キャプチャポイント、前記ロボットの上体の姿勢制御のための目標ポーズ角度、及び前記ロボットの目標ヒップ高さを設定する、請求項14に記載のロボット。
【請求項16】
前記センサ部で測定したポーズ角度と、前記目標設定部で設定した目標ポーズ角度との間の差を用いて、前記目標ポーズ角度に到達するために補償しなければならない補償モーメントを算出する補償モーメント算出部をさらに含む、請求項5に記載のロボット。
【請求項17】
前記補償力算出部は、
前記運動学計算部で計算した前記ロボットの現在のキャプチャポイントのx方向の位置及びy方向の位置と、前記目標設定部で設定した目標キャプチャポイントのx方向の位置及びy方向の位置との間の差を用いて、x方向及びy方向の補償力を算出し、前記運動学計算部で計算した前記ロボットの現在のヒップ高さと、前記目標設定部で設定した目標ヒップ高さとの間の差を用いて、z軸方向の補償力を算出する、請求項15に記載のロボット。
【請求項18】
前記仮想重力設定部は、
前記ロボットのFSMの現在の状態による仮想重力、及び前記補償力算出部で算出した補償力による仮想重力の大きさを設定する、請求項16に記載のロボット。
【請求項19】
前記仮想重力設定部は、
前記ロボットの質量をmとし、前記補償力算出部で算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの各関節に必要な第1の仮想重力(gf)を設定する第1の仮想重力設定部と、
前記ロボットの現在のFSMの状態によって、各関節に必要な第2の仮想重力を設定する第2の仮想重力設定部と、を含む、請求項16に記載のロボット。
gf=f/m (2)
【請求項20】
前記重力補償トルク算出部は、
前記第1の仮想重力及び前記第2の仮想重力、実際の重力を補償するために必要なトルクを算出する、請求項19に記載のロボット。
【請求項21】
前記ロボットの重心が地面に投影された点と前記各脚に連結された足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点からより近い脚に、より大きい比率の前記ロボットの上体質量を割り当てる重量分配部をさらに含む、請求項20に記載のロボット。
【請求項22】
前記重力補償トルク算出部は、
前記重量分配部で前記各脚に分配した上体の質量を反映して、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、仮想重力と実際の重力を補償するために必要な各関節の重力補償トルクを算出する、請求項21に記載のロボット。
【請求項23】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記補償モーメント算出部で算出された補償モーメントを前記複数の脚に分配する補償モーメント分配部をさらに含む、請求項22に記載のロボット。
【請求項24】
前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記補償モーメント分配部で前記ロボットの複数の脚に分配した補償モーメントから前記複数の脚に必要な第1の目標トルクを算出する目標トルク算出部をさらに含む、請求項23に記載のロボット。
【請求項25】
前記目標トルク算出部は、
前記第1の目標トルクと前記重力補償トルク算出部で算出した重力補償トルクとを合算して、前記ロボットの各関節に必要な第2の目標トルクを算出する、請求項24に記載のロボット。
【請求項26】
前記目標トルク算出部で算出された第2の目標トルクに前記各関節の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出するトルク補償部をさらに含む、請求項25に記載のロボット。
【請求項27】
複数の関節部がそれぞれ設けられた複数の脚と、該脚に連結された上体とを含み、複数の並進運動の自由度及び回転運動の自由度を有するロボットの制御方法において、
前記上体のポーズ角度及び前記複数の関節部の角度を検出し、
前記検出された複数の関節部の角度に基づいて、前記複数の並進運動の自由度のうち少なくとも一つの並進運動の自由度に対する現在の姿勢を獲得し、
前記獲得された現在の姿勢と予め設定された目標姿勢との差に基づいて、姿勢エラーを算出し、
前記姿勢エラーに基づいて、前記少なくとも一つの並進運動の自由度に対する補償力を算出し、
前記少なくとも一つの並進運動の自由度に対する補償力、及び前記ロボットに対して予め設定された有限状態機械(Finite State Machine:FSM)の現在の状態に基づいて、仮想重力を設定し、
前記設定された仮想重力を補償するために、前記ロボットの関節部に必要な重力補償トルクを算出し、
前記ロボットの関節部のトルクが前記算出された重力補償トルクを含む目標トルクになるように各関節のトルクサーボを制御する、ロボットの制御方法。
【請求項28】
前記姿勢エラーを算出することは、
前記検出されたポーズ角度及び前記複数の関節部の角度に基づいて現在の重心の位置を算出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置を算出し、
前記算出された現在の重心と予め設定された目標重心とを比較して、前記少なくとも一つの並進運動の自由度に対する重心エラーを算出し、
前記重心エラーを姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項29】
前記姿勢エラーを算出することは、
前記検出されたポーズ角度及び複数の関節部の角度に基づいて現在の重心の位置と速度を検出するが、前記少なくとも一つの並進運動の自由度に対する現在の重心の位置と速度を検出し、
前記検出された現在の重心の位置と速度に基づいて、前記少なくとも一つの並進運動の自由度に対する現在のキャプチャポイントを獲得し、
前記獲得された現在のキャプチャポイントと予め設定された目標キャプチャポイントとを比較して、少なくとも一つの並進運動の自由度に対するキャプチャポイントエラーを算出し、
前記算出されたキャプチャポイントエラーを前記姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項30】
前記姿勢エラーを算出することは、
前記上体のポーズ角度及び前記複数の関節部の角度を検出し、
前記ポーズ角度及び前記複数の関節部の角度に基づいて、ヒップまたは上体のいずれか一つの参照点の位置を前記少なくとも一つの自由度に対して算出し、
前記現在の参照点と予め設定された目標参照点との位置を比較して、参照点位置エラーを前記少なくとも一つの自由度に対して算出し、
前記参照点位置エラーを前記少なくとも一つの並進運動の自由度の姿勢エラーとして用いることを含む、請求項27に記載のロボットの制御方法。
【請求項31】
前記姿勢エラーを算出することは、
前記複数の並進運動の自由度のうち残りの並進運動の自由度の姿勢エラーの算出と互いに異なることを含む、請求項27に記載のロボットの制御方法。
【請求項32】
前記ロボットの関節部に必要な仮想重力を設定することは、
前記ロボットの質量をmとし、前記算出した補償力をfとするとき、下記の数学式(2)を用いて、前記ロボットの関節部に必要な第1の仮想重力を設定し、
前記ロボットの現在のFSMの状態によって、前記関節部に必要な第2の仮想重力を設定することを含む、請求項27に記載のロボットの制御方法。
gf=f/m (2)
【請求項33】
前記重力補償トルクを算出することは、
前記第1の仮想重力に対する重力補償トルク及び前記第2の仮想重力に対する重力補償トルクを算出し、前記ロボットのFSMの状態によって、第1の仮想重力に対する重力補償トルク及び第2の仮想重力に対する重力補償トルクの比重を調節して、前記ロボットの関節部に提供される重力補償トルクを算出することを含む、請求項32に記載のロボットの制御方法。
【請求項34】
前記ロボットが安定した姿勢を維持するための目標ポーズ角度を設定し、
前記目標ポーズ角度と前記測定されたポーズ角度との間の差を補償するための補償モーメントを算出することをさらに含む、請求項27に記載のロボットの制御方法。
【請求項35】
前記算出された補償モーメントを前記ロボットの関節部に提供するために必要な第1の目標トルクを算出し、
前記第1の目標トルクと前記重力補償トルクとを合算して、第2の目標トルクを算出することをさらに含み、
前記目標トルクは、第2の目標トルクであるものとする、請求項34に記載のロボットの制御方法。
【請求項36】
前記算出された第2の目標トルクに前記関節部の角速度に比例するダンピングトルクを加えて、第3の目標トルクを算出することをさらに含み、
前記目標トルクは、前記第3の目標トルクであるものとする、請求項35に記載のロボットの制御方法。
【請求項37】
前記ロボットの重心が地面に投影された点と前記ロボットの複数の足との間の距離の比率を算出し、前記算出された距離の比率を用いて、前記ロボットの重心が前記地面に投影された点から近い脚に、より大きい値の補償モーメントを割り当てることによって、前記算出された補償モーメントを前記複数の脚に分配することをさらに含む、請求項35に記載のロボットの制御方法。
【請求項38】
前記第1の目標トルクを算出することは、
前記ロボットの足をベースリンクと見るヤコビアンを用いて、前記ロボットの複数の脚に分配された補償モーメントから前記複数の脚に必要な第1の目標トルクを算出することを含む、請求項37に記載のロボットの制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2012−245612(P2012−245612A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願番号】特願2012−123482(P2012−123482)
【出願日】平成24年5月30日(2012.5.30)
【出願人】(390019839)三星電子株式会社 (8,520)
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung−ro,Yeongtong−gu,Suwon−si,Gyeonggi−do,Republic of Korea
【Fターム(参考)】
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願日】平成24年5月30日(2012.5.30)
【出願人】(390019839)三星電子株式会社 (8,520)
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung−ro,Yeongtong−gu,Suwon−si,Gyeonggi−do,Republic of Korea
【Fターム(参考)】
[ Back to top ]