Warning: copy(htaccessbak): failed to open stream: No such file or directory in /home/jtokkyo/public_html/header.php on line 10
ロボットとその制御方法 - 特開2008−23612 | j-tokkyo
トップ :: B 処理操作 運輸 :: B25 手工具;可搬型動力工具;手工具用の柄;作業場設備;マニプレ−タ

【発明の名称】 ロボットとその制御方法
【発明者】 【氏名】但馬 竜介

【要約】 【課題】実際のロボットの運動状態が目標とするロボットの運動状態から大きく外れる場合であっても、安定して歩行を継続することが可能な技術を提供する。

【構成】体幹と、一対の脚リンクと、各々の脚リンクを体幹に対して独立に揺動させるアクチュエータ群と、アクチュエータ群を制御するコントローラを備え、そのコントローラはアクチュエータ群を制御して与えられたロボットの重心軌道と脚リンクの足先軌道を実現するようにプログラムされており、そのコントローラは、一方の脚リンクが接地してからその後に振り出す他方の脚リンクが接地するまでの間に、その他方の脚リンクが接地した後のロボットの重心軌道を更新し、更新された重心軌道に基づいてその他方の脚リンクの接地予定位置を決定し、決定された接地予定位置に基づいてその他方の脚リンクが接地するまでのその他方の脚リンクの足先軌道を更新するロボット。
【特許請求の範囲】
【請求項1】
体幹と、体幹に対して揺動可能に連結されている一対の脚リンクと、各々の脚リンクを体幹に対して独立に揺動させるアクチュエータ群と、アクチュエータ群を制御するコントローラを備えており、一方の脚リンクを体幹に対して振り出してから接地させる動作を一対の脚リンクの間で交互に繰り返すことによって歩行するロボットであって、
前記コントローラは、ロボットの重心軌道と脚リンクの足先軌道が与えられたときに、アクチュエータ群を制御して与えられた重心軌道と足先軌道を実現するようにプログラムされており、
前記コントローラは、一方の脚リンクが接地してからその後に振り出す他方の脚リンクが接地するまでの間に、
(1)前記他方の脚リンクが接地した後のロボットの重心軌道を更新し、
(2)更新された重心軌道に基づいて、前記他方の脚リンクの接地予定位置を決定し、
(3)決定された接地予定位置に基づいて、前記他方の脚リンクが接地するまでの前記他方の脚リンクの足先軌道を更新することを特徴とするロボット。
【請求項2】
両方の脚リンクが接地している期間における重心軌道の水平方向成分が等速軌道として与えられることを特徴とする請求項1のロボット。
【請求項3】
体幹と、体幹に対して揺動可能に連結されている一対の脚リンクと、各々の脚リンクを体幹に対して独立に揺動させるアクチュエータ群と、ロボットの重心軌道と脚リンクの足先軌道が与えられると与えられた重心軌道と足先軌道を実現するようにアクチュエータ群を制御するコントローラを備えており、一方の脚リンクを体幹に対して振り出してから接地させる動作を一対の脚リンクの間で交互に繰り返すことによって歩行するロボットの制御方法であって、
一方の脚リンクが接地してからその後に振り出す他方の脚リンクが接地するまでの間に、以下の各工程、すなわち、
(1)前記他方の脚リンクが接地した後のロボットの重心軌道を更新する工程と、
(2)更新された重心軌道に基づいて、前記他方の脚リンクの接地予定位置を決定する工程と、
(3)決定された接地予定位置に基づいて、前記他方の脚リンクが接地するまでの前記他方の脚リンクの足先軌道を更新する工程と、
を実施することを特徴とするロボットの制御方法。
【発明の詳細な説明】【技術分野】
【0001】
本発明は、ロボットとその動作を制御する方法に関する。
【背景技術】
【0002】
少なくとも1つの脚リンクを備え、移動しようとする方向へ脚リンクを振り出し、振り出して接地した脚リンクを支持脚とする動作を繰り返して移動するロボットが開発されている。
上記のようなロボットは、ZMP(Zero Moment Point)に着目して制御することによって、安定した歩行を実現できることが知られている。ZMPは、ロボットに作用する外力(慣性力を含む)によるモーメントの総和が0となる床上の点を意味する。1つの脚リンクのみが接地している状態でも、ZMPが床反力作用点と一致していれば、ロボットを倒そうとするモーメントが作用しない。1つの脚リンクのみが接地している状態では、床反力作用点は支持脚の足平内に位置するため、ロボットを安定して歩行させるためには、ZMPが支持脚の足平内に維持されるように制御する必要がある。
例えば一対の脚リンクを備えるロボットの場合、一方の脚リンクを支持脚とし、他方の脚リンクを遊脚として前方に振り出すことによって移動する。この一方の脚リンクのみが接地している間、ZMPが支持脚の足平内に存在していれば、ロボットは倒れることがない。遊脚としていた脚リンクが接地し、両方の脚リンクが接地している間に、ZMPがそれまで支持脚であった脚リンクの足平内から新たに接地した脚リンクの足平内へ移行すれば、ロボットは倒れることがなく、それまで支持脚であった脚リンクを前方に振り出すことが可能となる。それまで支持脚であった脚リンクを前方に振り出す時に、ZMPが新たな支持脚の足平内に存在していれば、ロボットは倒れることがない。上記のように、一方の脚リンクを振り出してから接地させる動作を、一対の脚リンクの間で交互に繰り返すことによって、ロボットは倒れることなく歩行を継続することができる。
【0003】
一般に、ロボットが安定して歩行することができる経時的な動作態様は、実際にロボットが動作を行う前に予め計算されている。以下では、ロボットの経時的な動作態様を表現するデータを歩容データとよぶ。安定して歩行することができるように計算された歩容データを記憶しておき、記憶された歩容データが表現する動作態様を逐次実現していくことで、ロボットは安定して歩行することができる。
【0004】
ロボットに予期せぬ外乱力が作用することがある。路面の予期せぬ凹凸によって予期せぬ外乱力が作用することもあるし、ロボットに外界から押したり引いたりする外力が加えられることもある。ロボットの構造上のたわみや、ロボットの関節のガタや、ロボットの応答遅れ等に起因して歩容データから外れれば、予期せぬ外乱力が作用したのと同じことになる。予期せぬ外乱力が作用すると、ロボットがバランスを崩す場合がある。
予期せぬ外乱力が作用しても歩行を継続するためには、記憶されている歩容データをリアルタイムに更新していくことが有効である。ロボットの歩容データをリアルタイムに生成する技術は、例えば特許文献1に開示されている。
【0005】
【特許文献1】特開2004−114243号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
従来の技術では、実際のロボットの運動状態に基づいて更新されるのはロボットの重心の軌道のみであり、脚リンクの足先の軌道は更新されない。なお本明細書で「軌道」とは、位置の経時的な変化を記述するデータのことを言う。従来の技術では、脚リンクの足先の軌道は、実際のロボットの運動状態に関わらず、歩幅・歩行周期・旋回角などの歩行態様や、環境形状などに基づいて、予め設定されている。従来の技術のように、脚リンクの足先軌道を更新することなく、ロボットの重心軌道のみをリアルタイムに更新していく場合、実際のロボットの運動状態が目標とする運動状態からわずかに外れた場合であっても、ロボットに予め設定された歩行態様を実現させることができるという点で有効である。
【0007】
しかしながら、実際のロボットの運動状態が、目標とする運動状態から大きく外れた場合には、上記した技術ではロボットの動作を安定させることができない。上記した技術では、例えばロボットに予期せぬ外力が作用して、実際の重心軌道が目標とする重心軌道から大きく外れた場合であっても、目標とする脚リンクの足先軌道については変更されない。従って、ロボットは無理な体勢からでも目標とする脚リンクの足先軌道を実現しようとするため、その後の動作が不安定なものとなりがちである。
【0008】
本発明は上記課題を解決する。本発明では、歩行動作を実現するロボットにおいて、実際のロボットの運動状態が目標とするロボットの運動状態から大きく外れる場合であっても、安定して歩行を継続することが可能な技術を提供する。
【課題を解決するための手段】
【0009】
本発明はロボットとして具現化される。そのロボットは、体幹と、体幹に対して揺動可能に連結されている一対の脚リンクと、各々の脚リンクを体幹に対して独立に揺動させるアクチュエータ群と、アクチュエータ群を制御するコントローラを備えている。そのロボットは、一方の脚リンクを体幹に対して振り出してから接地させる動作を一対の脚リンクの間で交互に繰り返すことによって歩行する。そのコントローラは、ロボットの重心軌道と脚リンクの足先軌道が与えられたときに、アクチュエータ群を制御して与えられた重心軌道と足先軌道を実現するようにプログラムされている。そのコントローラは、一方の脚リンクが接地してからその後に振り出す他方の脚リンクが接地するまでの間に、(1)その他方の脚リンクが接地した後のロボットの重心軌道を更新し、(2)更新された重心軌道に基づいて、その他方の脚リンクの接地予定位置を決定し、(3)決定された接地予定位置に基づいて、その他方の脚リンクが接地するまでのその他方の脚リンクの足先軌道を更新する。
【0010】
上記のロボットは、一方の脚リンクが接地する度に、その後に振り出される他方の脚リンクが接地する際の接地予定位置を決定して、決定された接地予定位置に基づいてその他方の脚リンクの足先軌道を更新する。その接地予定位置は、その他方の脚リンクが接地した後のロボットの動作が安定なものとなるように、その他方の脚リンクが接地した後のロボットの重心軌道に基づいて決定される。
例えば上記のロボットは、右脚リンクが接地すると、その後に振り出される左脚リンクが接地する際の接地予定位置を決定して、決定された接地予定位置に基づいて左脚リンクの足先軌道を更新する。左脚リンクの接地予定位置は、左脚リンクが接地した後のロボットの重心軌道に基づいて決定される。
【0011】
本発明のロボットによれば、歩行を行う際の脚リンクの接地予定位置を、その後の動作における重心軌道に応じて動的に更新することができる。これによって、例えば予期せぬ外乱力がロボットに作用して、その後のロボットの歩行を安定させるためにその外乱力に応じてロボットの重心軌道を修正する場合であっても、修正された重心軌道に応じて脚リンクの接地予定位置を修正して、安定な動作を継続することができる。また、ロボットが歩行している間に、ユーザーから重心軌道を変更する指令(例えば、重心速度を増減する指令)が出された場合であっても、変更された重心軌道に基づいて脚リンクの接地予定位置を変更して、安定な動作を継続することができる。
【0012】
上記のロボットにおいては、両方の脚リンクが接地している期間における重心軌道の水平方向成分が等速軌道として与えられることが好ましい。
ロボットの重心が水平方向に関して等速で移動する場合、ZMPは重心の鉛直下方に位置することになる。従って、後方で接地している脚リンクの足平内から、前方で接地している脚リンクの足平内へZMPを移動させる際に、上記のように重心軌道の水平方向成分を等速軌道として与えることによって、安定した動作を実現する重心軌道を簡便な演算によって決定することができ、少ない計算量で歩行の安定化をはかることができる。
【0013】
本発明はロボットの制御方法としても具現化される。その方法は、体幹と、体幹に対して揺動可能に連結されている一対の脚リンクと、各々の脚リンクを体幹に対して独立に揺動させるアクチュエータ群と、ロボットの重心軌道と脚リンクの足先軌道が与えられると与えられた重心軌道と足先軌道を実現するようにアクチュエータ群を制御するコントローラを備えるロボットの制御方法である。そのロボットは、一方の脚リンクを体幹に対して振り出してから接地させる動作を一対の脚リンクの間で交互に繰り返すことによって歩行する。その方法では、一方の脚リンクが接地してからその後に振り出す他方の脚リンクが接地するまでの間に、以下の各工程、すなわち、(1)その他方の脚リンクが接地した後のロボットの重心軌道を更新する工程と、(2)更新された重心軌道に基づいてその他方の脚リンクの接地予定位置を決定する工程と、(3)決定された接地予定位置に基づいてその他方の脚リンクが接地するまでのその他方の脚リンクの足先軌道を更新する工程を実施する。
【発明の効果】
【0014】
本発明の技術を用いることによって、歩行動作を実現するロボットにおいて、実際のロボットの運動状態が目標とするロボットの運動状態から大きく外れる場合であっても、安定して歩行を継続することができる。
【発明を実施するための最良の形態】
【0015】
以下に説明する実施例の主要な特徴を列記する。
(形態1) コントローラは、ロボットの重心軌道を更新する際に、片足接地相において実現されるロボットのZMPが支持脚の足平内に維持されるように、片足接地相におけるロボットの重心軌道を更新する。
(形態2) コントローラは、ロボットの重心軌道を更新する際に、両足接地相において重心が等速移動するように、両足接地相におけるロボットの重心軌道を更新する。
(形態3) ロボットの実際の重心速度を検出する手段をさらに備え、コントローラは、検出された重心速度に基づいて、ロボットの重心軌道を更新する。
【実施例】
【0016】
図面を参照しながら、本発明の一実施例に係るロボット2の動作制御技術について説明する。図1は本実施例のロボット2の概要を示している。ロボット2は体幹4と左脚リンク6と右脚リンク8と制御部10と入出力装置12とセンサ群14を備えている。左脚リンク6は一方の端部を股関節を介して体幹4に揺動可能に接続されている。左脚リンク6はさらに膝関節と足首関節を備え、先端には足平を備えている。右脚リンク8は股関節を介して体幹4に揺動可能に接続されている。右脚リンク8はさらに膝関節と足首関節を備え、先端には足平を備えている。左脚リンク6と右脚リンク8の足平の中心には、それぞれ基準点L0、R0が設けられている。基準点L0、R0は、ロボット2の歩容データを生成する際の基準となる点である。図中Gは、ロボット2の重心の位置を示す。
【0017】
ロボット2の各関節はアクチュエータ群318(図1では図示されない)を備えており、それらのアクチュエータ群318は制御部10からの指示によって各関節を回転駆動する。またロボット2の各関節にはエンコーダ群320(図1では図示されない)が設けられており、それらのエンコーダ群320は制御部10に各関節の関節角の経時的変化を出力する。
【0018】
制御部10はCPU、ROM、RAM、ハードディスク等を有するコンピュータ装置である。制御部10は入出力装置12と通信可能であり、ユーザーが操作する入出力装置12からユーザー指令値を入力する。制御部10はユーザー指令値に基づいて、ロボット2の歩容データを生成する。制御部10は生成した歩容データを記憶し、記憶された歩容データが表現する動作を実現するように各関節を駆動する。制御部10の詳細については、後に詳述する。
【0019】
センサ群14は体幹4に位置と姿勢を固定された加速度センサ322(図1では図示されない)とジャイロセンサ324(図1では図示されない)を備えている。加速度センサ322は3軸の加速度を計測可能であり、ジャイロセンサ324は3軸まわりの角速度を計測可能である。加速度センサ322およびジャイロセンサ324の計測点は、ロボット2が直立して静止した状態での重心の位置Gとほぼ一致するように、その位置を調整されている。センサ群14は制御部10に接続されており、計測される加速度と角速度をそれぞれ制御部10へ送信する。
【0020】
図2は本実施例のロボット2が実現する歩行動作の概要を示している。
図2の(A)に示すように、ある時点においてロボット2は両方の脚リンクが接地した姿勢P1をとっている。姿勢P1をとっているときには、ロボット2の重心は位置G1にある。ロボット2はこの姿勢P1から、ロボット2の前方側で接地している脚リンク(図2の(A)では左脚リンク6)を支持脚として接地させたまま、ロボット2の後方側で接地している脚リンク(図2の(A)では右脚リンク8)を遊脚として浮遊させて前方へ振り出す。前方へ振り出した脚リンクが接地すると、ロボット2は両方の脚リンクが接地した姿勢P2となる。姿勢P1も姿勢P2も、ともにロボット2が両方の脚リンクを接地した姿勢であるが、姿勢P1でロボット2の前方側で接地していた脚リンク(左脚リンク6)は、姿勢P2ではロボット2の後方側で接地しており、姿勢P1でロボット2の後方側で接地していた脚リンク(右脚リンク8)は、姿勢P2ではロボット2の前方側で接地している。ロボット2が姿勢P1から姿勢P2へと姿勢を変化させることによって、ロボット2の重心は位置G1から位置G2へ移動する。
【0021】
その後、図2の(B)に示すように、ロボット2は両方の脚リンクを接地させたまま、重心を前方へ移動させる。この動作では、ロボット2は姿勢P2から姿勢P3へと姿勢を変化させる。この動作によって、ロボット2の重心は位置G2から位置G3へ移動する。
【0022】
その後、図2(C)に示すように、ロボット2は前方側で接地している脚リンク(右脚リンク8)を支持脚として接地させたまま、後方側で接地している脚リンク(左脚リンク6)を遊脚として浮遊させて前方へ振り出す。前方へ振り出した脚リンクが接地すると、ロボット2は両方の脚リンクが接地した姿勢P4となる。ロボット2が姿勢P3から姿勢P4へと姿勢を変化させることによって、ロボット2の重心は位置G3から位置G4へ移動する。
上記のような動作を繰り返すことで、ロボット2は前方へ歩行する。
【0023】
本実施例のロボット2では、実現させる動作を幾つかの動作区間に分割して扱う。本実施例のロボット2では、一方の脚リンクのみが接地している動作状態(片足接地相)と、それに続く両方の脚リンクが接地している動作状態(両足接地相)を、1つの動作区間として扱う。図2の例では、図2の(A)および図2の(C)は片足接地相でのロボット2の動作を示しており、図2の(B)は両足接地相でのロボット2の動作を示している。図2の例では、図2の(A)の片足接地相と図2の(B)の両足接地相が、1つの動作区間に含まれる。ロボット2が歩行を実現する際には、片足接地相と両足接地相が交互に繰り返される。
【0024】
以下では、ロボット2の軌道を表現する座標系として、ロボット2の外部で床に固定された座標系を(x, y, z)で表現する。またロボット2上の基準点に固定された座標系を(x'、y'、z')で表現する。
本実施例のロボット2では、図2の(A)や図2の(C)に示すように、一方の脚リンクのみが接地している片足接地相においては、支持脚の足平の基準点を座標系(x'、y'、z')の原点とする。また、図2(B)のように、両方の脚リンクが接地している両足接地相においては、便宜上、ロボット2の後方側で接地している脚リンク(すなわち、その両足接地相の直前の片足接地相において支持脚であった脚リンク)を支持脚として扱い、その足平の基準点を座標系(x'、y'、z')の原点とする。以下ではロボット2上の基準点に固定された座標系(x', y', z')で記述された位置、速度、加速度および軌道を、それぞれ相対位置、相対速度、相対加速度および相対軌道と表現する。また、座標系(x', y', z')で記述されたZMPを相対ZMPと表現する。
【0025】
本実施例のロボット2は、各動作区間の歩容データを生成して記憶しており、記憶された歩容データを逐次読み出して動作を実現していく。
また本実施例のロボット2は、片足接地相から両足接地相に切換わる際に、エンコーダ群320やセンサ群14によって計測される実際の重心速度と、入出力装置12を介してユーザーから与えられるユーザー指令値に応じて、それ以降の歩容データを再度生成して、記憶されている歩容データを更新する。ロボット2の動作中にユーザー指令値が新たに入力されると、そのユーザー指令値は制御部10に記憶されて、その後に行われる歩容データの更新において反映される。
【0026】
以下では制御部10の動作の詳細について説明する。
図3は制御部10の機能の構成を示すブロック図である。制御部10はユーザー指令値記憶装置304と、歩容データ生成装置302と、歩容データ記憶装置308と、関節角目標値生成装置312と、アクチュエータ制御装置314と、重心速度計算装置316と、歩容データ更新装置310を備えている。
【0027】
ユーザー指令値記憶装置304は、ユーザーから入力されるユーザー指令値を記憶する。ロボット2の動作中に新たなユーザー指令値が入力されると、制御部10はユーザー指令値記憶装置304に記憶されているユーザー指令値を、新たに入力されたユーザー指令値に更新する。新たに入力されたユーザー指令値は、その後に歩容データが更新される際に、ロボット2の歩容データの生成に反映される。ユーザーは、ロボット2の運動を視認しながら入出力装置12を用いてユーザー指令値を入力することで、ロボット2の動作をリアルタイムに制御することができる。
【0028】
歩容データ生成装置302は、ユーザー指令値記憶部302に記憶されているユーザー指令値に基づいて、各動作区間におけるロボット2の重心の相対軌道と、遊脚の足先の相対軌道を生成する。歩容データ生成装置302で生成される重心の相対軌道は、ロボット2の支持脚の足平に設けられた基準点を原点とする座標系(x', y', z')で重心の軌道を記述したものである。歩容データ生成装置302で生成される遊脚の足先の相対軌道は、ロボット2の支持脚の足平に設けられた基準点を原点とする座標系(x', y', z')で記述されたものである。歩容データ生成装置302が重心の相対軌道と遊脚の足先の相対軌道を生成する処理の詳細については、後に詳述する。歩容データ生成装置302は、各動作区間におけるロボット2の重心の相対軌道と、遊脚の足先の相対軌道を、歩容データ記憶装置308に記憶する。
【0029】
歩容データ記憶装置308は、各動作区間におけるロボット2の重心の相対軌道と遊脚の足先の相対軌道を記憶する。
【0030】
関節角目標値生成装置312は、歩容データ記憶装置308に記憶されているロボット2の重心の相対軌道と、遊脚の足先の相対軌道に基づいて、いわゆる逆キネマティクス演算を行うことによって、ロボット2の各関節の関節角目標値の経時的データを生成する。関節角目標値生成装置312は、生成された関節角目標値の経時的データをアクチュエータ制御装置314へ出力する。
【0031】
アクチュエータ制御装置314は、関節角目標値生成装置312で生成された関節角目標値の経時的データに基づいて、アクチュエータ群318を駆動する。アクチュエータ制御装置314がアクチュエータ群318を駆動することによって、ロボット2は各関節を回転させて姿勢を変化させ、歩行動作を実現する。
【0032】
重心速度計算装置316は、エンコーダ群320から出力されるロボット2の各関節の関節角と、加速度センサ322から出力される体幹4の加速度と、ジャイロセンサ324から出力される体幹4の角速度に基いて、ロボット2の重心速度を計算する。
ロボット2の重心速度は、例えば加速度センサ322から出力される体幹4の加速度を積分して体幹4の速度を算出し、エンコーダ群320から出力されるロボット2の各関節の関節角からロボット2の重心と体幹4との位置関係の時間変化率を算出して、両者の和をとることによって計算することができる。計算された重心速度は、歩容データ更新装置310へ出力される。
【0033】
歩容データ更新装置310は、ユーザー指令値記憶装置304に記憶されたユーザー指令値と、重心速度計算装置316で計算されたロボット2の重心速度に基づいて、各動作区間におけるロボット2の重心の相対軌道と、遊脚の足先の相対軌道を新たに生成する。歩容データ更新装置310が重心の相対軌道と遊脚の足先の相対軌道を生成する処理の詳細については、後に詳述する。生成された各動作区間におけるロボット2の重心の相対軌道と遊脚の足先の相対軌道は、歩容データ記憶装置308にそれまで記憶されていた重心の相対軌道と遊脚の足先の相対軌道と置き換えられる。
【0034】
以下では図4を参照しながら、歩容データ生成装置302がロボット2の歩容データを生成する処理について説明する。
【0035】
ステップS402では、動作を生成する動作区間の番号を示す変数kを1に設定する。
【0036】
ステップS404では、ユーザー指令値をユーザー指令値記憶装置304から読み出す。ユーザー指令値としては、以下のパラメータを与えることができる。
(1)重心の高さ(鉛直方向位置)
(2)片足接地相の継続時間
(3)両足接地相の継続時間
(4)目標とする相対ZMP軌道
(5)目標とする角運動量の経時的データ
(6)動作の切替りにおける重心の水平方向速度
【0037】
上記(1)の重心の高さ(鉛直方向位置)は、ロボット2の重心が位置する高さである。重心の高さは、ロボット2の機構が幾何学的に許す範囲内で、ユーザーが任意に与えることができる。本実施例のロボット2では、すべての動作区間において、重心の高さは一定値となるように設定する。
【0038】
上記(2)の片足接地相の継続時間は、片足接地相が継続する時間である。上記(3)の両足接地相の継続時間は、両足接地相が継続する時間である。片足接地相の継続時間と両足接地相の継続時間は、それぞれユーザーが任意に与えることができる。
【0039】
上記(4)の目標とする相対ZMP軌道は、目標ZMPの支持脚の足平の基準点に対する相対的な位置の経時的データである。片足接地相に関しては、目標とする相対ZMP軌道は、支持脚となる脚リンクの足平内に存在するという制約のもとで、ユーザーが任意に与えることができる。支持脚となる脚リンクの足平内にZMPが存在していれば、他方の脚リンクが遊脚として浮遊している状況でも、ロボット2は転倒することなく動作を継続することができる。
なお、本実施例のロボット2では、両足接地相に関しては、目標とする相対ZMP軌道を設定することなく重心の相対軌道を生成する。後に詳述するが、本実施例のロボット2では両足接地相においては重心が等速移動するように重心の相対軌道を生成する。重心が等速移動する場合、ロボット2が実現するZMPの位置は、重心の鉛直下方に維持される。従って、両足接地相において、ロボット2の重心が後方側で接地している脚リンクの接地位置から前方側で接地している脚リンクの接地位置に向けて移動する限り、ロボット2は転倒することなく動作を継続することができる。
【0040】
本実施例のロボット2では、片足接地相において目標とする相対ZMP軌道を、支持脚の足平の中心に固定するように設定する。このような相対ZMP軌道が実現される場合、ロボット2は転倒することなく、安定して動作を実現することができる。なお片足接地相において目標とする相対ZMP軌道は、その片足接地相の間で足平の内部に維持されていれば、どのような軌道を与えてもよい。例えば片足接地相の間に支持脚の足平の内部の後方から前方へ移動するような軌道を用いてもよい。このような相対ZMP軌道が実現される場合も、ロボット2は転倒することなく、安定して動作を実現することができる。
【0041】
上記(5)の目標とする角運動量の経時的データは、ロボット2の重心まわりの角運動量の経時的データである。目標とする角運動量の経時的データは、アクチュエータの性能が許す範囲内で、ユーザーが任意に与えることができる。ロボット2のロール軸(x'軸)およびピッチ軸(y'軸)まわりの角運動量は、ロボット2が所望の姿勢を実現するように設定することが可能である。ヨー軸(z'軸)まわりの角運動量は、ロボット2が所望の旋回動作を実現するように設定することが可能である。
本実施例のロボット2では、すべての動作区間において、ロール軸、ピッチ軸およびヨー軸まわりの角運動量は0となるように設定する。
【0042】
上記(6)の動作の切替りにおける重心の水平方向速度は、ロボット2の動作が片足接地相と両足接地相の間で切り替わるときの、ロボット2の重心の水平方向速度である。重心の水平方向速度は、ロボット2のアクチュエータの性能が許す範囲内で、ユーザーが任意に与えることができる。
【0043】
ステップS406では、最初の動作区間である動作区間1の重心の軌道を生成する。ステップS406における動作区間1の重心の軌道の生成は、ステップS410で後述する一般的な動作区間kにおける重心の軌道の生成と同様である。重心軌道の生成処理の詳細についてはステップS410で後述する。ステップS406の処理を実行することによって、動作区間1における重心の鉛直方向軌道と水平方向軌道が生成される。
【0044】
ステップS408では、動作を生成する動作区間を示す番号kに1を加える。
【0045】
ステップS410では、動作区間kにおける重心の鉛直方向軌道と水平方向軌道を生成する。
【0046】
動作区間kにおける重心の鉛直方向軌道は、ユーザー指令値として与えられる重心の高さから決定される。本実施例のロボット2においては、片足接地相においても、両足接地相においても、常に重心の高さが一定となるように、重心の鉛直方向軌道が決定される。
【0047】
動作区間kにおける重心の水平方向軌道は、片足接地相と両足接地相で生成の手法が異なる。まず動作区間kの片足接地相での重心の水平方向軌道の生成について説明する。重心の水平方向軌道は、その片足接地相での重心の鉛直方向軌道と、目標とする相対ZMP軌道と、目標とする角運動量の経時的データと、その片足接地相の開始時と終了時における重心の水平方向速度の条件に基づいて決定される。ステップS410では、重心の鉛直方向軌道と水平方向軌道を実現したときの相対ZMP軌道が、目標とする相対ZMP軌道に一致するように、重心の水平方向軌道を計算する。
重心の鉛直方向軌道はユーザー指令値として与えられる重心の高さから決定されている。目標とする相対ZMP軌道および目標とする角運動量の経時的データは、ユーザー指令値として与えられている。動作区間の開始時における重心の水平方向速度は、すでに生成されている区間k-1の重心軌道から、区間k-1の終了時における重心の水平方向速度を特定することで与えられる。接地相の終了時における重心の水平方向速度は、ユーザー指令値の動作の切替りにおける重心の水平方向速度として与えられている。ステップS410では、これらの条件を満足するように、重心の水平方向軌道を計算する。
【0048】
ロボット2が実現する相対ZMP位置(px',py')は、ロボット2の相対重心位置(x',y',z')と支持脚の足平の基準点を原点とする座標系から見たロボット2の重心まわりの角速度(ωx',ωy')から計算することができる。ロボット2の相対重心位置とロボット2の重心まわりの角速度から、ロボットが実現するZMPを計算する下記の式をZMP方程式と呼ぶ。
【0049】
【数1】


【0050】
ここで、(1)は時間tに関する1階微分を示し、(2)は時間tに関する2階微分を示している。また、mはロボット2の質量である。
上式のz'およびz'(2)は、ロボット2の支持脚の足平の基準点を原点とする重心の鉛直方向位置と鉛直方向加速度である。ロボット2の支持脚の足平は床に対して移動しないため、z'およびz'(2)は重心の鉛直方向軌道から特定することができる。本実施例では、すべての動作区間においてロボット2の重心の高さは一定であるから、重心の鉛直方向加速度z'(2)は0である。
上式のIx'ωx'(1)とIy'ωy'(1)は、ロボット2の回転慣性の影響を示す。本実施例では、すべての動作区間においてロール軸(x'軸)およびピッチ軸(y'軸)まわりの角運動量を0としており、Ix'ωx'(1)とIy'ωy'(1)は0である。
【0051】
上記のZMP方程式を離散化することによって、重心の水平方向位置(x'、y')の経時的データを算出する式を導出することができる。ここで言う離散化は、前述のように、時間tに関して単位時間Δtを用いて行う。例えば重心のx'方向の軌道に関しては、下記の関係式を得る。
【0052】
【数2】


【0053】
ここでx'iとpx'iは、それぞれ重心のx'方向軌道x'(t)と、x'方向の相対ZMP軌道px'(t)を離散化した変数である。iは単位時間で区分した時刻の順序を示す。数式2は、時刻iにおけるZMPのx'方向座標px'iが、直前のx'方向座標x'i-1と、そのときのx'方向座標x'iと、直後のx'方向座標x'i+1から計算できることを示している。係数ai,bi,ciは、下記によって算出される係数である。
【0054】
【数3】


【0055】
上記のΔtはZMP方程式の離散化に用いる時間幅であり、z'iとz'(2)iはそれぞれ重心の鉛直方向の位置と加速度を離散化した変数である。本実施例では、Δtは片足接地相の継続時間をn等分する時間幅である。
【0056】
また係数diは、下記によって算出される係数である。
【0057】
【数4】


【0058】
ここでIy'ωy'(1)iは、目標とするピッチ軸(y'軸)まわりの角運動量を離散化した変数である。なお本実施例のロボット2では、目標とする角運動量は0としているから、diは全て0である。
【0059】
本実施例のロボット2では、片足接地相の開始時と終了時において、重心の軌道が滑らかになるように、ロボット2の動作を計算する。このように動作を計算することで、ロボット2が遊脚を接地する時点(片足接地相の終了時点)や、支持脚を入れ替えてそれまで支持脚であった脚リンクを新たに遊脚として振り出す時点(片足接地相の開始時点)でも、ロボット2の重心位置は滑らかに推移し、ロボット2は安定した動作を実現する。
動作区間kの片足接地相の開始時の重心のx'方向速度vx'0は、分割時間幅Δtと、重心の位置x'0、x'1とを用いて、以下によって表現される。
【0060】
【数5】


【0061】
上記した動作区間kの片足接地相の開始時における重心のx'方向速度vx'0は、すでに計算されている動作区間k-1の重心の軌道から設定される。例えばkが2である場合、区間2の開始時での重心の水平方向速度vx'0は、区間1の水平方向軌道から特定される区間1の終了時での重心の水平方向速度とする。
【0062】
同じように、動作区間kの片足接地相の終了時における重心のx'方向速度vx'n-1は、分割時間幅Δtと、重心の位置x'n-2、x'n-1と、以下の関係がある。
【0063】
【数6】


【0064】
上記した動作区間kの片足接地相の終了時における重心のx'方向速度vx'n-1は、ユーザー指令値で与えられる動作の切替りにおける重心の水平方向速度とする。
【0065】
上記した関係を整理すると、結局のところ、実現される相対ZMP軌道が目標とする相対ZMP軌道と等しくなる、動作区間kの片足接地相における重心のx'方向軌道(x'0,x'1,・・・,x'n-1)は、以下の3重対角行列で示される方程式(3項方程式)を解くことによって算出することができる。
【0066】
【数7】


【0067】
上式において、左辺は行列と列ベクトルの積で表現されており、その行列は鉛直方向軌道から計算される係数を持つ3重対角行列である。3重対角行列とは、対角成分とそれに隣接する副対角成分のみが有意な値を備え、それ以外の成分が0である行列のことを言う。左辺の列ベクトルは、重心のx'方向軌道(x'0,x'1,・・・,x'n-1)を示す列ベクトルである。右辺の列ベクトルは、目標とする相対ZMP軌道に目標とする角運動量に基づく補正を加えたものと、片足接地相の開始時における重心のx'方向速度vx'0に単位時間Δtを乗じて距離に変換した値vx'0Δtと、片足接地相の終了時における重心のx'方向速度vx'n-1に単位時間Δtを乗じて距離に変換した値vx'n-1Δtとを備える列ベクトルである。
【0068】
数式7において、左辺の3重対角行列の逆行列を算出し、その逆行列と右辺との積を計算することによって、未知数(x'0,x'1,・・・,x'n-1)を計算することができる。これによって、重心のx'方向軌道を計算することができる。
【0069】
動作区間kの片足接地相におけるy'方向の重心軌道(y'1,・・・,y'n-1)についても、y'方向の相対ZMP位置(py'1,・・・,py'n-2)と、目標とするロール軸(x'軸)まわりの角運動量と、動作区間kの片足接地相の開始時の重心速度vy'0と終了時の重心速度vy'n-1から、x'方向の重心軌道(x'0,x'1,・・・,x'n-1)と同様にして算出することができる。
【0070】
上記した計算では、試行錯誤的に重心の水平方向軌道を計算することなく、直接的に目標とする相対ZMP軌道を満足する重心の水平方向軌道を計算することができる。上記した計算は少ない計算量で実施することが可能であり、高速で計算を実施することができる。
【0071】
なお上記した水平方向速度vx'0,vy'0の代わりに、重心が移動する方向を示す水平方向の単位ベクトルnx',ny'と速度絶対値|v|を、動作の切替りにおける重心の水平方向速度としてユーザーが与えてもよい。このような場合、水平方向速度vx'0,vy'0は、以下によって算出される。
【0072】
【数8】


【0073】
上述した方法によって生成される重心軌道の場合、片足接地相の開始時と終了時において、ZMP方程式で計算されるZMPが、目標ZMPに一致することは必ずしも保証されていない。しかしながら、片足接地相の開始時と終了時において重心速度を滑らかに接続していることと、ZMP方程式を満足しない期間が非常に短い(ZMP方程式の離散化に用いる時間幅Δtの2倍程度である)ことから、上記で生成される動作を実現するロボット2は転倒することなく安定した動作をすることができる。
【0074】
次に、動作区間kの両足接地相における重心の水平方向軌道の計算について説明する。本実施例のロボット2では、両足接地相においては、重心を等速で移動させる。従って、両足接地相における重心の水平方向軌道は、両足接地相の開始時の重心の位置と、両足接地相における重心速度と、両足接地相の継続時間から生成することができる。両足接地相の開始時における重心位置は、その直前の片足接地相の終了時における重心位置を特定することによって与えられる。両足接地相における重心速度は、上記した水平方向速度vx'0,vy'0で与えられる。両足接地相の継続時間は、ユーザー指令値として与えられている。これによって、両足接地相における重心の水平方向軌道を生成することができる。
【0075】
ロボット2の重心を等速で移動させる場合、ロボット2に作用する外力の水平方向成分の合計は0であるから、ロボット2が実現するZMPは重心の鉛直下方に位置することになる。従って、両足接地相においては、重心の水平方向位置が、後方側で接地している脚リンクの接地から前方側で接地している脚リンクの接地位置に向けて移動していれば、ロボット2は転倒することなく安定した動作をすることができる。
【0076】
ステップS412では、区間k-1において片足接地相から両足接地相に移行する際の遊脚の接地位置を計算する。遊脚の接地位置は、区間k-1の片足接地相の終了時における、遊脚の足平の基準点の、支持脚の足平の基準点に対する相対的な位置として算出される。区間k-1の片足接地相で遊脚であった脚リンクは、区間kの片足接地相では支持脚となる。従って、区間k-1において遊脚を接地する位置に応じて、区間kの片足接地相において支持脚の足平が接地することになる床上の位置も変化する。本実施例のロボット2では、区間kにおける片足接地相の動作が安定なものとなるように、区間k-1における遊脚の接地位置を決定する。
【0077】
まず、ステップS410で生成された区間kの片足接地相における重心の相対軌道から、区間kの開始時における支持脚の足平の基準点からの重心の相対位置(Δxf'、Δyf'))を特定する。特定された重心の相対位置(Δxf'、Δyf')は、区間k-1の両足接地相の終了時における、前方側で接地している脚リンクの足平の基準点からの重心の相対位置に相当する。
次いで、すでに生成されている区間k-1の両足接地相における重心の相対軌道から、区間k-1の両足接地相の終了時における、後方側で接地している脚リンクの足平の基準点からの重心の相対位置(Δxb'、Δyb')を特定する。
そして、区間k-1の両足接地相の終了時における、前方側で接地している脚リンクの足平の基準点からの重心の相対位置(Δxf'、Δyf')と、後方側で接地している脚リンクの足平の基準点からの重心の相対位置(Δxb'、Δyb')の差をとることによって、後方側で接地している脚リンクの足平の基準点からの前方側で接地している脚リンクの足平の基準点の相対位置(sx、sy)を特定する。両足接地相においては何れの脚リンクの足平も床に対して移動しないから、上記のようにして特定される相対位置(sx、sy)は、区間k-1の片足接地相の終了時における支持脚の足平の基準点からの遊脚の足平の基準点の相対位置、すなわち遊脚の接地位置に相当する。
【0078】
ステップS414では、区間k-1における遊脚の足先の相対軌道を生成する。遊脚の足先の相対軌道は、区間k-1の片足接地相の開始時の遊脚の相対位置(すなわち、遊脚となる脚リンクを浮遊させる直前の接地位置)と、区間k-1の片足接地相の終了時の遊脚の相対位置(すなわち、ステップS412で決定された遊脚の接地位置)と、ユーザー指令値として与えられる片足接地相の継続時間から生成される。図5に、遊脚の足先の相対軌道510が生成される様子を模式的に示す。図5に示すように、区間k-1の片足接地相において、支持脚の足平を接地位置504に接地した状態で、遊脚の足平を接地位置502から浮遊させてから、片足接地相の継続時間が終了する時点で、遊脚の足平を接地位置506まで移動させるように、遊脚の足先の相対軌道510が生成される。遊脚の足先の相対軌道510は、例えば多項式補間を用いることによって、生成することができる。
【0079】
ステップS416では、全ての動作区間について、重心の相対軌道の生成が終了しているか否かを判断する。この判断は、処理の対象としている動作区間の番号kを、最後の動作区間の番号kmaxと比較することによって行う。kがkmax以上の場合(ステップS416でYESの場合)、全ての動作区間について、重心の相対軌道の生成が終了したと判断して、処理はステップS418へ進む。kがkmax未満の場合(ステップS416でNOの場合)、未だ重心軌道を生成していない動作区間について重心軌道を生成するために、処理はステップS408へ移行し、ステップS408からステップS414までの処理を繰返し実施する。
【0080】
ステップS418では、最後の動作区間kmaxについて、遊脚の接地位置を決定する。最後の動作区間kmaxについては、遊脚の接地位置は任意に決定することができる。本実施例のロボット2では、最後の動作区間kmaxの終了後にロボット2が直立姿勢となるように、遊脚の接地位置を支持脚の接地位置の側方に設定する。
ステップS420では、最後の動作区間k = kmaxについて、遊脚の足先の相対軌道を生成する。ステップS420の処理は、ステップS414の処理と同様であるので、説明を省略する。
【0081】
上記した図4の処理によって、ロボット2が歩行動作を実現するための、重心の相対軌道と遊脚の足先の相対軌道が生成される。生成された重心の相対軌道と遊脚の足先の相対軌道は、歩容パターン記憶装置308に記憶される。
【0082】
ロボット2に歩行動作を開始させると、関節角目標値生成装置312が歩容データ記憶装置308から重心の相対軌道と遊脚の足先の相対軌道を読み込んで、逆キネマティクス演算によって各関節の関節角目標値の経時的データを生成する。生成された関節角目標値の経時的データに基づいて、アクチュエータ制御装置314がアクチュエータ群318を駆動し、ロボット2はユーザー指令値に基づいた歩行動作を実現する。
【0083】
ロボット2が歩行動作を実現している間、制御部10は片足接地相から両足接地相への切替わりを看視している。片足接地相から両足接地相への切替わりは、例えば関節角目標値生成装置312が歩容データ記憶装置308から読込んだ遊脚の足先の相対軌道から判断することができる。制御部10は、ロボット2の動作が片足接地相から両足接地相へ切替わった時点で、その後の動作区間における歩容データを更新する。
【0084】
図6は、制御部10の歩容データ更新装置310がロボット2の歩容データを更新する処理を説明するフローチャートである。
【0085】
ステップS602では、その時点でロボット2が動作を実現している、現在の動作区間mを特定する。
【0086】
ステップS604では、重心速度計算装置316を用いて、実際の重心の速度を検出する。
【0087】
ステップS606では、ユーザー指令値記憶装置304に記憶されているユーザー指令値を読込む。
【0088】
ステップS608では、歩容データの更新対象とする動作区間kを設定する。本実施例のロボット2では、ステップS602で特定された現在の動作区間mの次の動作区間を、歩容データの更新対象とする動作区間kとして設定する。
【0089】
ステップS610では、動作区間kにおける重心の相対軌道を生成する。ステップS610で行う重心の相対軌道の生成の処理は、片足接地相の開始時における重心の水平方向速度の与え方を除いて、図4のステップS410での処理とほぼ同様である。ステップS610では、動作区間kの片足接地相の開始時における重心の水平方向速度として、ステップS604で検出された実際の重心の速度を用いる。
【0090】
ステップS612からステップS624までの処理は、図4のステップS408からステップS420までの処理と同様であるから、ここでは詳細な説明を省略する。これによって、動作区間k+1以降の重心の相対軌道と、動作区間k以降の遊脚の接地予定位置と、動作区間k以降の遊脚の足先の相対軌道がそれぞれ更新される。
【0091】
上記のように、本実施例のロボット2は、片足接地相から両足接地相へと動作を切換える度に、歩容データの更新処理を行う。従って、ロボット2の動作中にユーザーから新たなユーザー指令値が入力された場合に、新たなユーザー指令値に適合するように動作を変更することができる。
【0092】
本実施例のロボット2は、上記した歩容データの更新を行う際に、センサ群14およびエンコーダ群320を用いて実際の重心の速度を計測して、計測された重心の速度と滑らかに接続するように、その後の重心軌道を更新する。ロボット2に予期せぬ外乱力が作用した場合であっても、その外乱力に応じてその後の重心軌道を更新して、ロボット2は安定して歩行を継続することができる。
【0093】
本実施例のロボット2では、片足接地相から両足接地相へ動作が切替わる際の遊脚の接地位置を、その両足接地相における重心の相対軌道と、その後に続く片足接地相における重心の相対軌道に基づいて、その後の動作が安定なものとなるように設定する。このように遊脚の接地位置を設定することによって、ロボット2は大域的に安定した歩行動作を実現することができる。
【0094】
上記の実施例では、体幹4に設けられた加速度センサ322の計測値と、各関節に設けられたエンコーダ群320の計測値から、重心の加速度を算出し、重心の加速度を積分することによって重心速度を検出する例を説明した。重心加速度の検出はこれに限らず、例えば複数の加速度センサをロボット2に搭載して、それらの加速度センサの計測点の位置と計測値から、重心の加速度を算出してもよい。また加速度センサの計測値とジャイロセンサの計測値から、重心の加速度を算出してもよい。
【0095】
上記ではセンサ群14から計測される加速度に基づいて重心速度を計測する例を説明したが、重心速度の計測はこれに限らない。
例えばロボット2の外部の床に固定された測距センサを用いてロボット2の代表点の位置を計測し、代表点と重心との相対的な位置関係を各関節の関節角から算出し、重心と代表点の相対位置と計測される代表点の位置とから重心の位置を算出し、その時間変化率を算出することによっても、重心の速度を知ることができる。また、GPS受信機を体幹4に搭載し、GPS受信機によって取得される位置と各関節の関節角から重心の位置を算出し、重心位置の経時的変化から重心速度を算出してもよい。
また、各関節の関節角の経時的変化のみを用いて直接的に重心速度を算出してもよい。
【0096】
上記の実施例では、ロボット2が実際に歩行を行っている間に、動作区間mで遊脚を接地したタイミングで、動作区間m+1以降の遊脚の接地予定位置を更新する例を説明した。このように、ロボット2が動作区間m+1の動作を開始する前に、動作区間m+1の遊脚の接地予定位置を更新することで、片足接地相での動作の急変を防ぎ、ロボット2は安定して動作を行うことができる。
また上記とは異なり、ロボット2が動作区間mの片足接地相の動作を行っているときに、その動作区間mの遊脚の接地予定位置を更新する構成としてもよい。このような場合には、動作区間mの片足接地相においてロボットに予期せぬ外乱力が作用した場合であっても、その外乱力に応じて動作区間m+1以降の重心の相対軌道を更新し、その更新された重心の相対軌道に応じて動作区間mの遊脚の接地予定位置および遊脚の足先の相対軌道を更新することができる。ロボット2に作用する外乱力に速やかに対応して、安定な歩行動作に速やかに復帰することができる。
【0097】
上記の実施例では、ユーザー指令値として与えられるロボット2の重心の高さをすべての動作区間において一定値とする例を説明したが、ロボット2の重心の高さは経時的に変化させてもよい。ロボット2の重心の垂直方向軌道が、ロボット2の重心の水平方向軌道を生成する前に取得されていれば、上述した3項方程式を解くことによって、その垂直方向軌道に応じた水平方向軌道を生成することができる。
【0098】
以上、本発明の実施形態について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【0099】
【図1】図1は本発明のロボット2の概観を示す図である。
【図2】図2は本発明のロボット2の動作の概要を示す図である。
【図3】図3は本発明のロボット2の制御部10の構成を示すブロック図である。
【図4】図4は本発明のロボット2の歩容データ生成の処理を示すフローチャートである。
【図5】図5は本発明のロボット2の遊脚の足先の相対軌道を示す図である。
【図6】図6は本発明のロボット2の歩容データ更新の処理を示すフローチャートである。
【符号の説明】
【0100】
2・・・ロボット
4・・・体幹
6・・・左脚リンク
8・・・右脚リンク
10・・・制御部
12・・・入出力装置
14・・・センサ群
302・・・歩容データ生成装置
304・・・ユーザー指令値記憶装置
308・・・歩容データ記憶装置
310・・・歩容データ更新装置
312・・・関節角目標値生成装置
314・・・アクチュエータ制御装置
316・・・重心速度計算装置
318・・・アクチュエータ群
320・・・エンコーダ群
322・・・加速度センサ
324・・・ジャイロセンサ
502、506・・・遊脚の接地位置
504・・・支持脚の接地位置
510・・・遊脚の足先の相対軌道
【出願人】 【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
【出願日】 平成18年7月18日(2006.7.18)
【代理人】 【識別番号】110000110
【氏名又は名称】特許業務法人快友国際特許事務所


【公開番号】 特開2008−23612(P2008−23612A)
【公開日】 平成20年2月7日(2008.2.7)
【出願番号】 特願2006−195717(P2006−195717)