(57)【要約】【課題】本発明は、歩行ロボットの脚部が障害物に乗り上げた場合でも、足平の関節を駆動するアクチュエータが高いトルクで長時間駆動されることを防止することができる歩行ロボットを提供することを目的とする。【解決手段】本発明の歩行ロボットは、左右方向に対称に配置された第１脚部及び第２脚部と、各脚部を制御する制御装置とを有し、第１脚部は、足平と、その足平を回転させる第１の関節と、第１の関節を駆動する第１のアクチュエータとを備えており、第２脚部は、足平と、その足平を回転させる第２の関節と、第２の関節を駆動する第２のアクチュエータとを備えており、制御装置は、前回の周期に第１及び第２のアクチュエータに出力した制御指令値の差を算出する指令値差算出部と、算出した前回の周期の制御指令値の差が閾値以上であるときは、第１の関節及び第２の関節の目標角度を補正する補正部を備えている。【選択図】図３
2008036779.tif 000002
【特許請求の範囲】
【請求項１】
胴体部と、胴体部に取付けられた複数の脚部と、各脚部を制御する制御装置とを有し、制御装置から出力された制御指令値に基づいて各脚部を駆動することで歩行するロボットであって、
複数の脚部には、胴体部の進行方向から見て左右方向に対称に配置された第１脚部と第２脚部が少なくとも含まれており、
第１脚部は、足平と、足平を胴体部の進行方向に伸びる回転軸回りに回転させる第１の関節と、制御装置から入力される制御指令値にしたがって第１の関節を駆動する第１のアクチュエータとを備えており、
第２脚部は、足平と、足平を胴体部の進行方向に伸びる回転軸回りに回転させる第２の関節と、制御装置から入力される制御指令値にしたがって第２の関節を駆動する第２のアクチュエータとを備えており、
制御装置は、所定周期で各関節の目標角度を算出する角度算出部と、
第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する指令値差算出部と、
歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合に、指令値差算出部が算出した前回の周期の制御指令値の差が閾値以上であるときは、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を補正する補正部と、
補正部が目標角度を補正した関節のアクチュエータに対して補正部が補正した目標角度にしたがって制御指令値を出力し、補正部が目標角度を補正しなかった関節のアクチュエータに対して角度算出部が算出した目標角度にしたがって制御指令値を出力する制御指令値出力部と、を備えていることを特徴とする歩行ロボット。
【請求項２】
補正部は、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を、その関節の前回の周期の制御指令値によって関節が駆動される方向と逆方向に所定の角度だけ補正することを特徴とする請求項１に記載の歩行ロボット。
【請求項３】
制御装置は、補正部による第１の関節と第２の関節の少なくとも一方の目標角度の補正角度を記憶する記憶部をさらに有し、
補正部は、記憶部が前回の周期の補正角度を記憶しているときに、記憶部が記憶している前回の周期の補正角度より一定角度大きい補正角度を算出し、その補正角度だけ目標角度を補正することを特徴とする請求項２に記載の歩行ロボット。
【請求項４】
補正部は、算出した補正角度が最大補正角度以上となる場合には、目標角度を最大補正角度だけ補正することを特徴とする請求項３に記載の歩行ロボット。
【請求項５】
胴体部と、胴体部に取付けられた複数の脚部と、各脚部を制御する制御装置とを有し、制御装置から出力された制御指令値に基づいて各脚部を駆動することで歩行するロボットであって、
複数の脚部には、第１脚部と第２脚部が少なくとも含まれており、
第１脚部は、第１の関節と、第１の関節を駆動する第１のアクチュエータとを備えており、
第２脚部は、第１脚部の第１の関節に対応する第２の関節と、第２の関節を駆動する第２のアクチュエータとを備えており、
制御装置は、所定周期で各関節の目標角度を算出する角度算出部と、
第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する指令値差算出部と、
歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合に、指令値差算出部が算出した前回の周期の制御指令値の差が閾値以上であるときは、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を補正する補正部と、
補正部が目標角度を補正した関節のアクチュエータに対して補正部が補正した目標角度にしたがって制御指令値を出力し、補正部が目標角度を補正しなかった関節のアクチュエータに対して角度算出部が算出した目標角度にしたがって制御指令値を出力する制御指令値出力部と、を備えていることを特徴とする歩行ロボット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の脚部と制御装置を有し、制御装置によって脚部を駆動して歩行するロボットに関する。
【背景技術】
【０００２】
特許文献１は、従来技術に係る歩行ロボットを開示している。特許文献１の歩行ロボットは、胴体部と、胴体部に取り付けられた２つの脚部と、それらの脚部を制御する制御装置を有している。各脚部は、複数の関節と、各関節を駆動するアクチュエータを備えている。制御装置は、歩行ロボットに実行させる動作に基づいて各関節の目標角度等を算出し、その目標角度等に応じて各アクチュエータに制御指令値を出力する。制御装置は所定周期で各アクチュエータに制御指令値を出力するので、各関節が所定周期毎に制御指令値にしたがって駆動され、歩行ロボットは所望の動作（例えば、歩行等）を実行する。
また、この歩行ロボットは、複数の加速度センサ及び複数のジャイロセンサを有しており、それらのセンサの検出値と脚部の関節の角度に基づいて、脚部の足平に作用する床反力の作用点の位置を算出する。算出した床反力作用点の位置に応じて、各脚部の各アクチュエータを駆動することで、安定して歩行をすることができるとされている。
【特許文献１】特開２００４−３１４２４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合（すなわち、歩行ロボットが両足で立脚している場合（以下、両足立脚時ともいう））、通常、歩行ロボットは足平の裏面全体で床面と接触する。しかし、歩行ロボットの脚部が床面上の障害物等に乗り上げていると、その脚部の足平は障害物と部分的に接触する。このため、足平には部分的に床反力が作用し、これによって両足立脚時においても足平にモーメントが作用する。一方、両脚立脚時においては、制御装置はロボットが水平な床面上に立脚しているものとして各脚部を制御するため、足平を目標の角度（床面と水平）に制御しようとし、その足平の関節をモーメントを打ち消す方向に駆動する。このような足平の関節の駆動はロボットが両足で立脚している間行われるため、足平の関節を駆動するアクチュエータは高いトルクで長時間、駆動されることとなり、これによって足平の関節を駆動するアクチュエータが破損してしまうことがある。
特許文献１の歩行ロボットでは、二足歩行時等の運動時において、加速度センサ及びジャイロセンサの検出値と脚部の関節の角度から足平に作用する床反力の作用点位置を算出し、算出した床反力作用点に基づいて脚部の各関節を駆動することで安定した運動を実現する。したがって、算出される床反力作用点の位置は歩行ロボットの進行方向に関する位置であり、その算出された床反力作用点の位置に応じて駆動される足平の関節（足首の関節）の駆動方向も歩行ロボットの進行方向であった。このため、歩行ロボットの脚部が床面上の障害物に乗り上げて歩行ロボットの進行方向から見て左右に傾いても、算出される床反力作用点の位置は変化せず、これによって足平の関節が駆動されることもない。したがって、特許文献１の歩行ロボットでも、歩行ロボットが進行方向から見て左右に傾く場合には、足平の関節を駆動するアクチュエータが高いトルクで長時間、駆動されてしまうこととなる。
【０００４】
本発明は、上記した実情に鑑みてなされたものであり、歩行ロボットの脚部が障害物に乗り上げて歩行ロボットの進行方向から見て左右に傾く場合でも、足平の関節を駆動するアクチュエータが高いトルクで長時間駆動されることを防止することができる歩行ロボットを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の歩行ロボットは、胴体部と、胴体部に取付けられた複数の脚部と、各脚部を制御する制御装置とを有している。複数の脚部には、胴体部の進行方向から見て左右方向に対称に配置された第１脚部と第２脚部が少なくとも含まれている。第１脚部は、足平と、足平を胴体部の進行方向に伸びる回転軸回りに回転させる第１の関節と、制御装置から入力される制御指令値にしたがって第１の関節を駆動する第１のアクチュエータとを備えており、第２脚部は、足平と、足平を胴体部の進行方向に伸びる回転軸回りに回転させる第２の関節と、制御装置から入力される制御指令値にしたがって第２の関節を駆動する第２のアクチュエータとを備えている。制御装置は、所定周期で各関節の目標角度を算出する角度算出部と、第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する指令値差算出部と、歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合に、指令値差算出部が算出した前回の周期の制御指令値の差が閾値以上であるときは、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を補正する補正部と、補正部が目標角度を補正した関節のアクチュエータに対して補正部が補正した目標角度にしたがって制御指令値を出力し、補正部が目標角度を補正しなかった関節のアクチュエータに対して角度算出部が算出した目標角度にしたがって制御指令値を出力する制御指令値出力部とを備えている。
この歩行ロボットでは、制御装置の指令値差算出部が、第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する。歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合には、補正部が、指令値差算出部が算出した制御指令値の差が閾値以上であるか否かを判定する。通常、歩行ロボットが歩行をせず、かつ、第１脚部と第２脚部が接地している場合、制御装置は第１のアクチュエータと第２のアクチュエータを略同等のトルクで駆動する。したがって、制御装置が第１のアクチュエータに出力する制御指令値と第２のアクチュエータに出力する制御指令値は略同等の大きさとなる。一方、第１脚部の足平と第２脚部の足平の少なくとも一方が障害物等に乗り上げ、ロボットが左右に傾いていると、床反力によって各足平にモーメントが作用する。このとき、ロボットが左右に傾いているので、各足平にはそれぞれ異なるモーメントが作用する。制御装置は、第１の関節及び第２の関節を目標角度に制御するため、第１のアクチュエータ及び第２のアクチュエータをモーメントを打ち消す方向に駆動させるので、第１のアクチュエータに出力する制御指令値と第２のアクチュエータに出力する制御指令値の差が大きくなる。したがって、補正部が制御指令値の差が閾値以上であるか否かを判定することで、歩行ロボットの足平が正常に接地しているか否かを好適に判定することができる。
制御指令値の差が閾値以上である場合には、補正部が第１の関節と第２の関節の少なくとも一方の目標角度を補正する。そして、制御指令値出力部が、目標角度を補正された関節のアクチュエータに対して補正された目標角度にしたがって制御指令値を出力する。すると、それに応じて足平の角度が変更される。したがって、目標角度を補正された関節のアクチュエータが高いトルクで長時間駆動されることが防止される。
【０００６】
上述の歩行ロボットは、補正部が、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を、その関節の前回の周期の制御指令値によって関節が駆動される方向と逆方向に所定の角度だけ補正することが好ましい。
このように第１の関節と第２の関節の少なくとも一方の目標角度を補正することで、目標角度を補正された関節のアクチュエータが、高いトルクで駆動されることが防止される。
【０００７】
上述の歩行ロボットは、制御装置が、補正部による第１の関節と第２の関節の少なくとも一方の目標角度の補正角度を記憶する記憶部をさらに有し、補正部は、記憶部が前回の周期の補正角度を記憶しているときに、記憶部が記憶している前回の周期の補正角度より一定角度大きい補正角度を算出し、その補正角度だけ目標角度を補正することが好ましい。
このような構成によると、第１の関節と第２の関節の少なくとも一方の目標角度を補正しても制御指令値の差が閾値以下とならない場合（すなわち、第１のアクチュエータと第２のアクチュエータの少なくとも一方が高いトルクで駆動している場合）には、補正部は記憶部が記憶している前回の周期の補正角度より一定角度大きい補正角度で目標角度を補正する。これによって、制御指令値の差が閾値以下となるまで、徐々に目標角度の補正角度が大きくされる。したがって、関節の角度を好適な角度に補正することができる。
【０００８】
また、上述の歩行ロボットは、補正部が、算出した補正角度が最大補正角度以上となる場合には、目標角度を最大補正角度だけ補正することが好ましい。
このような構成によれば、関節の角度が最大補正角度以上に補正されないので、足平が障害物等から滑り落ちることが防止される。
【０００９】
また、本発明は、胴体部に対して対称に配置された一対の脚部を備える歩行ロボットにおいて、両足立脚時に一対の脚部の対応する関節を駆動するアクチュエータが高いトルクで長時間駆動されることを防止することができる歩行ロボットを提供する。
この歩行ロボットは、胴体部と、胴体部に取付けられた複数の脚部と、各脚部を制御する制御装置とを有し、制御装置から出力された制御指令値に基づいて各脚部を駆動する。複数の脚部には、第１脚部と第２脚部が少なくとも含まれており、第１脚部は、第１の関節と、第１の関節を駆動する第１のアクチュエータとを備えており、第２脚部は、第１脚部の第１の関節に対応する第２の関節と、第２の関節を駆動する第２のアクチュエータとを備えており、制御装置は、所定周期で各関節の目標角度を算出する角度算出部と、第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する指令値差算出部と、歩行ロボットが歩行しておらず、かつ、第１脚部と第２脚部が接地している場合に、指令値差算出部が算出した前回の周期の制御指令値の差が閾値以上であるときは、角度算出部が算出した第１の関節の目標角度と第２の関節の目標角度の少なくとも一方を補正する補正部と、補正部が目標角度を補正した関節のアクチュエータに対して補正部が補正した目標角度にしたがって制御指令値を出力し、補正部が目標角度を補正しなかった関節のアクチュエータに対して角度算出部が算出した目標角度にしたがって制御指令値を出力する制御指令値出力部とを備えていることを特徴とする。
この歩行ロボットによれば、脚部が正常に接地していない場合に、第１の関節と第２の関節の少なくとも一方の目標角度が補正されるので、目標角度を補正された関節のアクチュエータが高いトルクで長時間駆動されることが防止される。
【発明を実施するための最良の形態】
【００１０】
下記に詳細に説明する実施例の主要な特徴を最初に列記する。
（形態１）歩行ロボットは、ボディと、右脚部と、左脚部と、各脚部を制御する制御装置を有しており、制御装置から出力された制御指令値に基づいて各脚部を駆動することで歩行する。
（形態２）第１脚部は、足平と、足平をボディの進行方向に伸びる回転軸回りに回転させる第１の関節を含む複数の関節と、制御装置から入力される制御指令値にしたがって各関節を駆動する複数のアクチュエータを備えており、複数のアクチュエータは第１の関節を駆動する第１のアクチュエータを含んでいる。
（形態３）第２脚部は、足平と、足平をボディの進行方向に伸びる回転軸回りに回転させる第２の関節を含む複数の関節と、制御装置から入力される制御指令値にしたがって各関節を駆動する複数のアクチュエータを備えており、複数のアクチュエータは第２の関節を駆動する第２のアクチュエータを含んでいる。
（形態４）制御装置は、角度算出部と、制御状態判定部と、指令値差算出部と、角度補正部と、補正角度記憶部と、制御指令値出力部とを備えている。
（形態５）角度算出部は、歩行ロボットに実行させる動作に基づいて、各関節の目標角度を所定周期で算出する。
（形態６）制御状態判定部は、歩行ロボットに実行させる動作に基づいて、右脚部と左脚部が接地した状態が所定時間以上継続するか否かを判定する。
（形態７）指令値差算出部は、第１のアクチュエータに前回の周期に出力した制御指令値と、第２のアクチュエータに前回の周期に出力した制御指令値との差を算出する。
（形態８）角度補正部は、制御状態判定部が右脚部と左脚部が接地した状態が所定時間以上継続すると判定した場合に、指令値差算出部が算出した前回の周期の制御指令値の差が閾値以上であるときは、角度算出部が算出した第１の関節及び第２の関節の目標角度を補正する。
（形態９）補正角度記憶部は、角度補正部による第１の関節及び第２の関節の目標角度の補正角度を記憶する。
（形態１０）制御指令値出力部は、角度補正部が目標角度を補正したときには、角度補正部が補正した目標角度にしたがって第１のアクチュエータ及び第２のアクチュエータに制御指令値を出力し、角度補正部が目標角度を補正しなかったときには、角度算出部が算出した目標角度にしたがって第１のアクチュエータ及び第２のアクチュエータに制御指令値を出力する。
（形態１１）角度補正部は、角度算出部が算出した第１の関節及び第２の関節の目標角度を、その関節の前回の周期の制御指令値が関節を駆動する方向と逆方向に所定の角度だけ補正する。
（形態１２）角度補正部は、補正角度記憶部が前回の周期の補正角度を記憶しているときに、補正角度記憶部が記憶している前回の周期の補正角度より一定角度大きい補正角度だけ目標角度を補正する。
（形態１３）角度補正部は、角度補正部が記憶している前回の周期の補正角度が最大補正角度以上となる場合には、目標角度を最大補正角度だけ補正する。
【実施例】
【００１１】
本発明の一実施例に係る歩行ロボット１０について図面を参照して説明する。図１に示すように、歩行ロボット１０は、複数のパーツが関節１８で接続されることによって構成されている。すなわち、歩行ロボット１０は、本体１１と、その本体１１と関節１８を介して接続された頭部１２、左腕部１３、右腕部１４、右脚部１５、左脚部１６によって構成されている。左腕部１３及び右腕部１４は、複数のパーツが関節（肘関節，手首関節）１８を介して接続されることによって構成されている。右脚部１５は、一端が本体１１と関節（股関節）１８を介して接続された上腿部１５ａ、その上腿部１５ａの他端と関節（膝関節）１８を介して接続された下腿部１５ｂ、その下腿部１５ｂの他端と足首関節（２つの関節２０、２２）を介して接続された足平１５ｃによって構成されている。左脚部１６は、一端が本体１１と関節（股関節）１８を介して接続された上腿部１６ａ、その上腿部１６ａの他端と関節（膝関節）１８を介して接続された下腿部１６ｂ、その下腿部１６ｂの他端と足首関節（２つの関節２４、２６）を介して接続された足平１６ｃによって構成されている。
【００１２】
図３に示すように、各関節１８はモータ１８ａを備えている。各モータ１８ａは、後述する制御装置３０と電気的に接続されている。各モータ１８ａは、制御装置３０から制御指令値を入力されることで駆動する。関節１８は、モータ１８ａを駆動することによってその角度を変更される。また、各モータ１８ａには、関節１８の角度（より詳細には、歩行ロボット１０の直立状態（図１の状態）における関節１８の角度に対する角度）を検出するエンコーダ１８ｂが設置されている。各エンコーダ１８ｂは、制御装置３０と電気的に接続されている。各エンコーダ１８ｂが検出した各関節１８の角度は、制御装置３０に入力される。
【００１３】
同様に、関節２０は、制御装置３０から入力される制御指令値によって関節２０の角度を変更するモータ２０ａを備えており、そのモータ２０ａには関節２０の角度θ２０を検出して制御装置３０に入力するエンコーダ２０ｂが設置されている。
同様に、関節２２は、制御装置３０から入力される制御指令値によって関節２２の角度を変更するモータ２２ａを備えており、そのモータ２２ａには関節２２の角度θ２２を検出して制御装置３０に入力するエンコーダ２２ｂが設置されている。
同様に、関節２４は、制御装置３０から入力される制御指令値によって関節２４の角度を変更するモータ２４ａを備えており、そのモータ２４ａには関節２４の角度θ２４を検出して制御装置３０に入力するエンコーダ２４ｂが設置されている。
同様に、関節２６は、制御装置３０から入力される制御指令値によって関節２６の角度を変更するモータ２６ａを備えており、そのモータ２６ａには関節２６の角度θ２６を検出して制御装置３０に入力するエンコーダ２６ｂが設置されている。
【００１４】
図２は、右脚部１５の関節２０、２２及び左脚部１６の関節２４、２６の拡大図を示している。
関節２０は、足平１５ｃを下腿部１５ｂに対して回転軸２０ｃ周りに回転させる。エンコーダ２０ｂは、関節２０の回転軸２０ｃ周りの角度θ２０を検出する。
また、関節２２は、足平１５ｃを下腿部１５ｂに対して回転軸２２ｃ周りに回転させる。エンコーダ２２ｂは、関節２２の回転軸２２ｃ周りの角度θ２２を検出する。
また、関節２４は、足平１６ｃを下腿部１６ｂに対して回転軸２４ｃ周りに回転させる。エンコーダ２４ｂは、関節２４の回転軸２４ｃ周りの角度θ２４を検出する。
また、関節２６は、足平１６ｃを下腿部１６ｂに対して回転軸２６ｃ周りに回転させる。エンコーダ２６ｂは、関節２６の回転軸２６ｃ周りの角度θ２６を検出する。
図から明らかなように、右脚部１５の関節２０は、左脚部１６の関節２４に対応する。また、右脚部１５の関節２２は、左脚部１６の関節２６に対応する。
【００１５】
図３に示すように、歩行ロボット１０は制御装置３０を備えている。制御装置３０は、角度算出部３２と、角度補正部３６と、補正角度記憶部３４と、制御指令値出力部３８と、制御状態判定部４０と、指令値差算出部４２を備えている。制御装置３０は、各関節（複数の関節１８及び関節２０〜２６）のモータと電気的に接続されている。また、制御装置３０は、各関節のエンコーダと電気的に接続されている。制御装置３０には、各エンコーダから各関節の角度が入力される。
【００１６】
制御装置３０は、歩行ロボット１０に実行させる動作に基づいて、歩行ロボット１０の各関節の目標角度を算出する。そして、算出した各関節の目標角度と、エンコーダから入力された各関節の現在角度に基づいて、制御指令値を算出する。そして算出した制御指令値を各関節のモータに出力する。これによって、各関節の角度が目標角度に制御される。制御装置３０は、所定周期で各関節に制御指令値を出力する。したがって、各関節の角度が所定周期で変更され、歩行ロボット１０が動作を実行する。
また、制御装置３０は、歩行ロボット１０の各関節の目標角速度及び目標角加速度を算出し、エンコーダから入力される検出信号から現在の関節の角速度及び角加速度を算出し、これらの差分値に基づいて各モータに制御指令値を出力する。
【００１７】
また、制御装置３０は、関節２６のモータ２６ａに前回の周期に出力した制御指令値Ｔ２６（以下では、モータ２６ａに前回の周期に出力した制御指令値Ｔ２６を制御指令値Ｔ２６−１という）と、関節２２のモータ２２ａに前回の周期に出力した制御指令値Ｔ２２（以下では、モータ２２ａに前回の周期に出力した制御指令値Ｔ２２を制御指令値Ｔ２２−１という）の差（以下では、指令値差ΔＴ１という）を算出し、指令値差ΔＴ１に基づいて足平１５ｃ、１６ｃが正常に接地しているか否かを判定する。同様に、制御装置３０は、関節２４のモータ２４ａに前回の周期に出力した制御指令値Ｔ２４（以下では、モータ２４ａに前回の周期に出力した制御指令値Ｔ２４を制御指令値Ｔ２４−１という）と、関節２０のモータ２０ａに前回の周期に出力した制御指令値Ｔ２０（以下では、モータ２０ａに前回の周期に出力した制御指令値Ｔ２０を制御指令値Ｔ２０−１という）の差（以下では、指令値差ΔＴ２という）に基づいて、足平１５ｃまたは足平１６ｃが正常に接地しているか否かを判定する。
【００１８】
例えば、図４に示すように左脚部１６が床面上の障害物８０に乗り上げると、足平１６ｃが外側近傍の点Ａで障害物８０と接触し、足平１５ｃが外側近傍の点Ｂで床面と接触し、歩行ロボット１０が右方向に傾く。
足平１６ｃが点Ａで障害物８０と接触すると、接触点Ａから足平１６ｃに床反力Ｆ１が作用する。これによって、足平１６ｃには、関節２６の回転軸２６ｃ周りにモーメントＭ１が作用する。制御装置３０は、関節２６の角度を目標角度に維持するため、モータ２６ａに制御指令値Ｔ２６を出力し、関節２６をモーメントＭ１を打ち消す方向にトルクＭ１’で駆動する。
また、足平１５ｃには接触点Ｂから床反力Ｆ２が作用し、足平１５ｃには関節２２の回転軸２２ｃ周りにモーメントＭ２が作用する。制御装置３０は、関節２２の角度を目標角度に維持するため、モータ２２ａに制御指令値Ｔ２２を出力し、関節２２をモーメントＭ２を打ち消す方向にトルクＭ２’で駆動する。
以上のように、足平１５ｃ、１６ｃが正常に接地できず、足平１５ｃ、１６ｃにモーメントが作用すると、制御装置３０はモータ２２ａ、２６ａをモーメントを打ち消す方向に駆動する。したがって、制御装置３０は、両足立脚時においてもモータ２２ａおよびモータ２６ａを高いトルクで駆動することとなる。
また、歩行ロボット１０が傾いていると、足平１５ｃに作用する床反力Ｆ２と足平１６ｃに作用する床反力Ｆ１の大きさが異なる。また、床反力Ｆ２に対してモーメントＭ２が作用する方向（図４の角度φ２）と、床反力Ｆ１に対してモーメントＭ１が作用する方向（図４の角度φ１）も異なる。したがって、足平１５ｃに作用するモーメントＭ２の大きさと、足平１６ｃに作用するモーメントＭ１の大きさは異なることとなる。このため、モータ２２ａの駆動トルクＭ２’とモータ２６ａの駆動トルクＭ１’の大きさも異なる。すなわち、モータ２２ａに入力される制御指令値Ｔ２２と、モータ２６ａに入力される制御指令値Ｔ２６の大きさは異なる。したがって、制御指令値Ｔ２２の大きさ（絶対値）と制御指令値Ｔ２６の大きさ（絶対値）の差によって歩行ロボット１０が正常に接地しているか否かを判定することができる。
したがって、モータ２２ａに前回の周期に出力した制御指令値Ｔ２２−１とモータ２６ａに前回の周期に出力した制御指令値Ｔ２６−１の差ΔＴ１から、歩行ロボット１０の左右方向において、足平１５ｃ、１６ｃが正常に接地しているか否かを判定することができる。
【００１９】
また、図５に示すように左脚部１６が床面上の障害物８２に乗り上げると、足平１６ｃが前側近傍の点Ｃで障害物８２と接触し、足平１５ｃが後側近傍の点Ｄで床面と接触し、歩行ロボット１０が後側に傾く。
足平１６ｃが点Ｃで障害物８２と接触すると、接触点Ｃから足平１６ｃに床反力Ｆ３が作用する。このため、足平１６ｃには、関節２４の回転軸２４ｃ周りにモーメントＭ３が作用する。制御装置３０は、関節２４の角度を目標角度に維持するため、モータ２４ａに制御指令値Ｔ２４を出力し、関節２４をモーメントＭ３を打ち消す方向にトルクＭ３’で駆動する。
また、足平１５ｃには接触点Ｄから床反力Ｆ４が作用し、足平１５ｃには関節２０の回転軸２０ｃ周りにモーメントＭ４が作用する。制御装置３０は、関節２０の角度を目標角度に維持するため、モータ２０ａに制御指令値Ｔ２０を出力し、関節２０をモーメントＭ４を打ち消す方向にトルクＭ４’で駆動する。
以上のように、足平１５ｃ、１６ｃが正常に接地できず、足平１５ｃ、１６ｃにモーメントが作用すると、制御装置３０はモータ２０ａ、２４ａをモーメントを打ち消す方向に駆動する。したがって、制御装置３０は、両足立脚時においてもモータ２０ａおよびモータ２４ａを高いトルクで駆動することとなる。
このとき、足平１５ｃに作用するモーメントＭ４の大きさと、足平１６ｃに作用するモーメントＭ３の大きさは異なる。したがって、モータ２０ａに入力される制御指令値Ｔ２０と、モータ２４ａに入力される制御指令値Ｔ２４の大きさも異なる。
したがって、モータ２０ａに前回の周期に出力した制御指令値Ｔ２０−１とモータ２４ａに前回の周期に出力した制御指令値Ｔ２４−１の差ΔＴ２から、歩行ロボット１０の前後方向において、足平１５ｃ、１６ｃが正常に接地しているか否かを判定することができる。
【００２０】
制御装置３０は、足平１５ｃ、１６ｃが正常に接地していないと判定したときは、関節２０〜２６の目標角度θＡ２０〜θＡ２６を補正する。そして、その補正した目標角度θＡ２０’〜θＡ２６’に基づいて、モータ２０ａ〜２６ａに制御指令値Ｔ２０〜Ｔ２６を出力する。
【００２１】
制御装置３０がモータ２０ａ〜２６ａに制御指令値Ｔ２０〜Ｔ２６を出力する処理について説明する。モータ２０ａ、２４ａに制御指令値Ｔ２０、Ｔ２４を出力する処理は、モータ２２ａ、２６ａに制御指令値Ｔ２２、Ｔ２６を出力する処理と同じであるので、以下では、モータ２２ａ、２６ａに制御指令値Ｔ２２、Ｔ２６を出力する処理について説明する。
【００２２】
制御装置３０は、図６に示すフローチャートの処理を所定周期で繰り返し実行することによって、モータ２２ａ、２６ａに制御指令値Ｔ２２、Ｔ２６を所定周期で出力する。後述するが、制御装置３０は、制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力するのと同時に、出力した制御指令値Ｔ２２、Ｔ２６を指令値差算出部４２で記憶する。したがって、図６のフローチャートの開始時においては、指令値差算出部４２には、前回の周期にモータ２２ａ、２６ａに出力した制御指令値Ｔ２２−１、Ｔ２６−１が記憶されている。
また、後述するが、制御装置３０は、関節２２、２６の目標角度θＡ２２、θＡ２６を補正する時に、その補正角度θＢ１を補正角度記憶部３４で記憶する。したがって、図６のフローチャート開始時においては、補正角度記憶部３４には、前回の周期における補正角度θＢ１（以下では、前回の周期における補正角度θＢ１を、補正角度θＢ１−１という）が記憶されている。
【００２３】
ステップＳ２では、制御装置３０が、角度算出部３２によって、関節２２、２６の目標角度θＡ２２、θＡ２６を算出する。すなわち、制御装置３０は、歩行ロボット１０に実行させる動作に基づいて、関節２２、２６の目標角度θＡ２２、θＡ２６を算出する。例えば、歩行ロボット１０を床面上に両足で直立させる場合には、目標角度θＡ２２，θＡ２６は「０」となる。
【００２４】
ステップＳ２と略同時に、制御装置３０は、制御状態判定部４０によって、右脚部１５及び左脚部１６が接地した状態を所定時間以上、継続する状態か否かを判定する（ステップＳ４）。すなわち、制御装置３０は、歩行ロボット１０に実行させている動作が、歩行ロボット１０に所定時間以上、右脚部１５及び左脚部１６を接地した状態（すなわち、歩行ロボット１０が歩行せずに床面に両足で立っている状態）を継続させる動作であるか否かを判定する。したがって、歩行ロボット１０に入力された動作データやコマンドから、歩行ロボット１０の現在の制御状態が、歩行ロボット１０が歩行せずに床面に両足で立っている状態にあるのか否かが判定される。
【００２５】
制御装置３０は、右脚部１５及び左脚部１６が接地した状態を所定時間以上、継続すると判定すると（ステップＳ４でＹＥＳ）、指令値差算出部４２によって指令値差ΔＴ１を算出する（ステップＳ６）。具体的には、制御装置３０は、指令値差算出部４２で記憶している前回の周期の制御指令値Ｔ２２−１、Ｔ２６−１から、以下の計算式によって指令値差ΔＴ１を算出する。
【００２６】
【数１】
2008036779.tif 000003
【００２７】
なお、上式の｜  ｜は、｜  ｜内の数値の絶対値を表している。すなわち、指令値差ΔＴ１は、制御指令値Ｔ２０−１の絶対値と、制御指令値Ｔ２４−１の絶対値の差の絶対値である。
【００２８】
指令値差ΔＴ１を算出すると、制御装置３０は算出した指令値差ΔＴ１が閾値ΔＴｍａｘよりも大きいか否かを判定する（ステップＳ８）。この判定によって、足平１５ｃ、１６ｃが正常に接地しているか否かが判定される。すなわち、足平１５ｃ、１６ｃが正常に接地していない場合は、指令値差ΔＴ１が閾値ΔＴｍａｘより大きくなる。
【００２９】
制御装置３０は、指令値差ΔＴ１が閾値ΔＴｍａｘよりも大きいと判定すると（ステップＳ８でＹＥＳ）、角度補正部３６によって、補正角度記憶部３４で記憶している前回の周期の補正角度θＢ１−１を読み出す。そして、読み出した補正角度θＢ１−１に単位補正角度ΔθＢ（一定角度）を加算した値を算出する。そして、加算値θＢ１−１＋ΔθＢが最大補正角度θＢ１ｍａｘ以上であるか否かを判定する（ステップＳ１０）。
【００３０】
制御装置３０は、加算値θＢ１−１＋ΔθＢが最大補正角度θＢ１ｍａｘよりも小さいと判定すると（ステップＳ１０でＮＯ）、加算値θＢ１−１＋ΔθＢを今回の周期の補正角度θＢ１として決定する（ステップＳ１２）。決定された補正角度θＢ１（＝θＢ１−１＋ΔθＢ）は、補正角度記憶部３４に記憶される。次回の周期における補正角度θＢ１の決定時には、今回の周期で記憶した補正角度θＢ１が補正角度θＢ１−１として読み出される。
【００３１】
制御装置３０は、補正角度θＢ１をθＢ１−１＋ΔθＢに決定すると、角度算出部３２で算出した目標角度θＡ２２、θＡ２６を補正する。（ステップＳ２４）。
すなわち、制御装置３０は、目標角度θＡ２２を、前回の周期の制御指令値Ｔ２２−１による関節２２の駆動方向と逆方向に、補正角度θＢ１（＝θＢ１−１＋ΔθＢ）だけ補正した目標角度θＡ２２’を算出する。同様に、目標角度θＡ２６を、制御指令値Ｔ２６−１による関節２６の駆動方向と逆方向に、補正角度θＢ１だけ補正した目標角度θＡ２６’を算出する。
例えば、図４の例では、目標角度θＡ２２を、トルクＭ２’の方向と逆方向（すなわち、モーメントＭ２の方向）に、補正角度θＢ１だけ補正した目標角度θＡ２２’を算出し、目標角度θＡ２６をトルクＭ１’の方向と逆方向（すなわち、モーメントＭ１の方向）に、補正角度θＢ１だけ補正した目標角度θＡ２６’を算出する。
【００３２】
制御装置３０は、目標角度θＡ２２’、θＡ２６’を算出すると、制御指令値出力部３８によって制御指令値Ｔ２２、Ｔ２６を算出し、その制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力する（ステップＳ２６）。すなわち、制御装置３０は、ステップＳ１６で算出した関節２２の補正後の目標角度θＡ２２’と、エンコーダ２２ｂが検出した関節２２の現在角度θ２２に基づいて、制御指令値Ｔ２２を算出する。そして、算出した制御指令値Ｔ２２をモータ２２ａに出力する。これによって、関節２２が駆動され、関節２２の角度が目標角度θＡ２２’と略等しくなる。同様に、制御装置３０は、ステップＳ１６で算出した関節２６の補正後の目標角度θＡ２６’と、エンコーダ２６ｂが検出した関節２６の現在角度θ２６に基づいて、制御指令値Ｔ２６を算出する。そして、算出した制御指令値Ｔ２６をモータ２６ａに出力する。これによって、関節２６が駆動され、関節２６の角度が目標角度θＡ２６’と略等しくなる。
また、制御装置３０は、算出した制御指令値Ｔ２２、Ｔ２６を、指令値差算出部４２で記憶する。指令値差算出部４２で記憶された今回の周期の制御指令値Ｔ２２、Ｔ２６は、次回の周期の処理において、前回の周期の制御指令値Ｔ２２−１、２６−１として用いられる。
【００３３】
また、制御装置３０は、ステップＳ１０で加算値θＢ１−１＋ΔθＢが最大補正角度θＢ１ｍａｘ以上であると判定すると（すなわち、ＹＥＳ）、角度補正部３６によって、最大補正角度θＢ１ｍａｘを今回の周期の補正角度θＢ１として決定する（ステップＳ１４）。決定された補正角度θＢ１（＝θＢ１ｍａｘ）は、補正角度記憶部３４に記憶される。
制御装置３０は、補正角度θＢ１をθＢ１ｍａｘに決定すると、決定した補正角度θＢ１（＝θＢ１ｍａｘ）によって目標角度θＡ２２、θＡ２６を補正し（ステップＳ２４）、補正後の目標角度θＡ２２’、θＡ２６’と、関節２２、２６の現在角度θ２２、θ２６に基づいて制御指令値Ｔ２２、Ｔ２６を算出する。そして、算出した制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力する（ステップＳ２６）。このとき、制御装置３０は、算出した制御指令値Ｔ２２、Ｔ２６を、指令値差算出部４２で記憶する。
【００３４】
また、制御装置３０は、ステップＳ８で、指令値差ΔＴ１が閾値ΔＴｍａｘ以下であると判定すると（すなわち、ＮＯ）、角度補正部３６によって、前回の周期の補正角度θＢ１−１を今回の周期の補正角度θＢ１として決定する（ステップＳ１６）。すなわち、制御装置３０は、補正角度θＢ１を変更しない。決定された補正角度θＢ１（＝θＢ１−１）は、補正角度記憶部３４に記憶される。
制御装置３０は、補正角度θＢ１をθＢ１−１に決定すると、決定した補正角度θＢ１（＝θＢ１−１）によって目標角度θＡ２２、θＡ２６を補正し（ステップＳ２４）、補正後の目標角度θＡ２２’、θＡ２６’と、関節２２、２６の現在角度θ２２、θ２６に基づいて制御指令値Ｔ２２、Ｔ２６を算出する。そして、算出した制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力する（ステップＳ２６）。このとき、制御装置３０は、算出した制御指令値Ｔ２２、Ｔ２６を、指令値差算出部４２で記憶する。
【００３５】
また、制御装置３０は、ステップＳ４で、歩行ロボット１０が右脚部１５及び左脚部１６を接地した状態が所定時間以上、継続しない状態にあると判定すると（すなわち、ＮＯ）、補正角度記憶部３４で記憶している補正角度θＢ１−１が０であるか否かを判定する（ステップＳ１８）。
制御装置３０は、補正角度θＢ１−１が０であると判定すると（ステップＳ１８でＹＥＳ）、角度補正部３６によって、０を今回の周期の補正角度θＢ１として決定する（ステップＳ２０）。決定された補正角度θＢ１（＝０）は、補正角度記憶部３４に記憶される。すなわち、補正角度記憶部３４で記憶している補正角度は０のまま変更されない。
制御装置３０は、補正角度θＢ１を０に決定すると、ステップＳ２４で目標角度θＡ２２、θＡ２６を補正せず、（補正角度０で補正するともいえる）、角度算出部３２で算出した目標角度θＡ２２、θＡ２６（目標角度θＡ２２、θＡ２６を補正角度０で補正した目標角度θＡ２２’、θＡ２６’ともいえる）と、関節２２、２６の現在角度θ２２、θ２６に基づいて制御指令値Ｔ２２、Ｔ２６を算出する。そして、算出した制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力する（ステップＳ２６）。このとき、制御装置３０は、算出した制御指令値Ｔ２２、Ｔ２６を、指令値差算出部４２で記憶する。
【００３６】
また、制御装置３０は、補正角度θＢ１−１が０でないと判定すると（ステップＳ１８でＮＯ）、角度補正部３６によって、前回の周期の補正角度θＢ１−１から単位補正角度ΔθＢを減算した値を算出する。そして、その減算値θＢ１−１−ΔθＢを今回の周期の補正角度θＢ１として決定する（ステップＳ２２）。決定された補正角度θＢ１（＝θＢ１−１−ΔθＢ）は、補正角度記憶部３４に記憶される。これによって、歩行ロボット１０の一方の脚部が障害物８０等に乗り上げた状態（図４，５に示す状態等）から歩き始める際には、足首関節の補正角度θＢが徐々に０に戻されることとなる。
制御装置３０は、補正角度θＢ１をθＢ１−１−ΔθＢに決定すると、決定した補正角度θＢ１（＝θＢ１−１−ΔθＢ）によって目標角度θＡ２２、θＡ２６を補正し（ステップＳ２４）、補正後の目標角度θＡ２２’、θＡ２６’と、関節２２、２６の現在角度θ２２、θ２６に基づいて制御指令値Ｔ２２、Ｔ２６を算出する。そして、算出した制御指令値Ｔ２２、Ｔ２６をモータ２２ａ、２６ａに出力する（ステップＳ２６）。このとき、制御装置３０は、算出した制御指令値Ｔ２２、Ｔ２６を、指令値差算出部４２で記憶する。
【００３７】
以上に説明したように、制御装置３０は、関節２２、２６の目標角度θＡ２２、２６を補正し、補正後の目標角度θＡ２２’、θＡ２６’にしたがって、モータ２２ａ、２６ａに制御指令値Ｔ２２、Ｔ２６を出力する。図６の処理は所定周期で繰り返し実行されるので、モータ２２ａ、２６ａには所定周期で制御指令値Ｔ２２、Ｔ２６が入力される。
【００３８】
例えば、歩行ロボット１０が、補正角度θＢ１−１が０の状態で歩行を開始する場合、歩行中は右脚部１５及び左脚部１６を接地した状態が所定時間以上、継続しないので、制御装置３０は、ステップＳ４でＮＯと判定する。また、制御装置３０は、前回の周期の補正角度θＢ１−１が０であるので、今回の周期の補正角度θＢ１を０に決定する（ステップＳ２０）。また、今回の周期の補正角度θＢ１が０であるので、次回の周期の補正時にも補正角度θＢ１は０となる。したがって、歩行ロボット１０は、関節２２、２６の角度を補正することなく歩行する。
このように、右脚部１５及び左脚部１６を接地した状態が所定時間以上、継続しないときは、右脚部１５または左脚部１６が障害物等に乗り上げたとしても関節２２、２６が所定時間以上、継続して高いトルクで駆動しない。したがって、関節２２、２６の角度は補正されない。
【００３９】
一方、歩行ロボット１０が歩行を停止すると、制御装置３０は、右脚部１５及び左脚部１６を接地した状態が所定時間以上、継続すると判定する（ステップＳ４でＹＥＳ）。そして、制御装置３０は、指令値差ΔＴ１が閾値ΔＴｍａｘより大きいか否かを判定する（ステップＳ８）。
【００４０】
歩行の停止時に、足平１５ｃ、１６ｃが正常に接地していると、指令値差ΔＴ１が大きくならないので、制御装置３０はステップＳ８でＮＯと判定する。すると、制御装置３０は補正角度θＢ１をθＢ１−１に決定する（ステップＳ１６）。上述したように、歩行時には、補正角度θＢ１は０であったので、このときのθＢ１−１は０となっている。したがって、補正角度θＢ１は０に決定される。また、今回の周期の補正角度θＢ１が０であるので、次回の周期の処理でも補正角度θＢ１は０に決定される。したがって、歩行ロボット１０は、関節２２、２６の角度を補正しない。
【００４１】
歩行の停止時に、足平１５ｃ、１６ｃが正常に接地していない（例えば、図４に示すように右脚部１５または左脚部１６が障害物に乗り上げている）と、制御装置３０はモータ２２ａ、２６ａを高いトルクで駆動させる。また、制御装置３０がモータ２２ａ、２６ａに入力する制御指令値Ｔ２２，Ｔ２６の差ΔＴ１が大きくなる。したがって、制御装置３０はステップＳ８でＹＥＳと判定する。このため、制御装置３０は、加算値θＢ１−１＋ΔθＢを算出する。上述したように、歩行時には、補正角度θＢ１は０であったので、このときのθＢ１−１は０となる。すなわち、加算値はΔθＢとなる。制御装置３０は、加算地ΔθＢが最大補正角度θＢ１ｍａｘよりも小さいと判定するため、補正角度θＢ１＝ΔθＢに決定する。したがって、関節２２、２６の目標角度θＡ２２、θＡ２６がΔθＢだけ補正され、関節２２、２６の角度がΔθＢだけ補正される。例えば、図４の状態では、関節２２の角度がモーメントＭ２の方向にΔθＢだけ補正され、関節２６の角度がモーメントＭ１の方向にΔθＢだけ補正される。
また、今回の周期の補正角度θＢ１がΔθＢであるので、次回の周期の処理では補正角度θＢ１は２ΔθＢ（ΔθＢ＋ΔθＢ＝２ΔθＢ）となり、さらに次の周期の補正時には補正角度θＢ１は３ΔθＢとなる。このように、補正角度θＢ１が徐々に大きくなっていく。
【００４２】
補正角度θＢ１が徐々に大きくなると、関節２２，２６の角度が徐々にモーメントＭ１、Ｍ２の方向に補正される。すると、例えば、図４に示すように、点Ａでのみ障害物８０と接触していた足平１６ｃが、図７に示すように、点Ａで障害物８０と接触し、点Ｅで床面と接触する。また、点Ｂでのみ床面と接触していた足平１５ｃ（図４参照）が、図７に示すように、足平１５ｃの裏面全体で床面と接触する。このように足平１５ｃ、１６ｃが安定した状態になると、足平１５ｃ、１６ｃに作用するモーメントＭ１、Ｍ２が略０となる。したがって、制御装置３０がモータ２２ａ、２６ａに出力する制御指令値Ｔ２２，２６が小さくなり、モータ２２ａ、２６ａの駆動トルクが小さくなる。これによって、モータ２２ａ、２６ａが所定時間以上、継続して高いトルクで駆動することが防止される。
【００４３】
また、足平１５ｃ、１６ｃが安定した状態になると、モーメントＭ１、Ｍ２が略０となり、モータ２２ａ、２６ａがモーメントＭ１、Ｍ２を打ち消すように駆動しなくなるので、制御装置３０が算出する指令値差ΔＴ１が小さくなる。すなわち、指令値差ΔＴ１が閾値ΔＴｍａｘ以下となり、制御装置３０は、ステップＳ８でＮＯと判定する。
【００４４】
制御装置３０は、ステップＳ８でＮＯと判定すると、補正角度θＢ１をθＢ１−１に決定する（ステップＳ１２）。例えば、図７の状態となった時の補正角度θＢ１が５ΔθＢであったとすると、このときのθＢ１−１は５ΔθＢとなる。また、今回の周期の補正角度θＢ１が５ΔθＢであるので、次回の周期の補正時の補正角度θＢ１も５ΔθＢとなる。すなわち、制御装置３０は、補正角度θＢ１を変更しない。したがって、歩行ロボット１０は、足平１５ｃ、１６ｃが図７に示すように障害物及び床面と接触した状態を維持する。
【００４５】
また、例えば図８に示すように、右脚部１５または左脚部１６が高い障害物に乗り上げると、制御装置３０は補正角度θＢ１をさらに大きくする。制御装置３０が補正角度θＢ１を大きくし、θＢ１がθＢ１ｍａｘ以上となると、制御装置３０はステップＳ１０でＹＥＳと判定する。すると、制御装置３０は、補正角度θＢ１をθＢ１ｍａｘに決定する（ステップＳ１４）。また、補正角度θＢ１がθＢ１ｍａｘとなると、次回の周期のステップＳ１０では加算値がθＢ１ｍａｘ＋ΔθＢと算出され、θＢ１ｍａｘよりも大きくなる。したがって、次回の周期でも、ステップＳ１０でＹＥＳと判定され、補正角度θＢ１はθＢ１ｍａｘに決定される。すなわち、補正角度θＢ１がθＢ１ｍａｘから変更されない。したがって、足平１５ｃ、１６ｃは一部で床面（または障害物）と接触した状態（例えば、図８の状態）のまま維持される。このように、制御装置３０は、補正角度θＢ１をθＢ１ｍａｘまで大きくしても足平１５ｃ、１６ｃが安定しないときには、補正角度θＢ１をθＢ１ｍａｘ以上に大きくしない。これによって、関節２２、２６の角度が補正角度θＢ１ｍａｘを超えて補正され、右脚部１５または左脚部１６が障害物から滑り落ちることが防止される。
【００４６】
歩行ロボット１０が再度、歩行を開始すると、制御装置３０は、右脚部１５及び左脚部１６を接地した状態が所定時間以上、継続しないと判定する（ステップＳ４でＮＯ）ため、補正角度θＢ１−１が０であるか否かを判定する（ステップＳ１８）。
【００４７】
停止時に、歩行ロボット１０の右脚部１５及び左脚部１６が障害物等に乗り上げていないと、歩行の再開時には補正角度θＢ１−１が０となっている。したがって、制御装置３０は、ステップＳ１８でＹＥＳと判定する。すると、制御装置３０は、補正角度θＢ１を０に決定するので（ステップＳ２０）、歩行ロボット１０は関節２２、２６の角度を補正することなく歩行する。
【００４８】
停止時に、図７または図８に示すように、足平１５ｃ、１６ｃを安定させるために関節２２、２６の角度が補正されていると、歩行の再開時には補正角度θＢ１−１がｎΔθＢとなっている（ｎは整数）。したがって、制御装置３０は、ステップＳ１８でＮＯと判定する。すると、制御装置３０は、補正角度θＢ１をθＢ１−１−ΔθＢに決定する（ステップＳ２２）。例えば、歩行の再開時に補正角度θＢ１−１が５ΔθＢとなっているときには、補正角度θＢ１は４ΔθＢ（５ΔθＢ−ΔθＢ＝４ΔθＢ）となる。また、今回の周期の補正角度θＢ１が４ΔθＢであるので、次回の周期の処理では補正角度θＢ１は３ΔθＢに決定され、さらに次の周期の処理では補正角度θＢ１は２ΔθＢに決定される。このように、補正角度θＢ１が徐々に小さくされ、やがて０となる。補正角度θＢ１が０となると、制御装置３０は、ステップＳ１８でＹＥＳと判定する。すると、制御装置３０は、補正角度θＢ１を０に決定するので（ステップＳ２０）、歩行ロボット１０は関節２２、２６の角度を補正することなく歩行する。
このように、制御装置３０は、ステップＳ４でＮＯと判定し、関節２２、２６の補正をする必要がなくなると、補正角度θＢ１を徐々に小さくする。したがって、補正角度θＢ１が瞬間的にキャンセルされて、関節２２、２６の角度が急激に変更されることが防止される。また、制御装置３０が図６の処理を繰り返し実行する周期は十分に速いので、歩行ロボット１０が一歩目を踏み出したときには、補正角度θＢ１は０とされている。したがって、歩行ロボット１０は、好適に歩行することができる。
【００４９】
また、制御装置３０は、指令値差ΔＴ１の算出と同様の処理によって、関節２０に前回の周期に出力した制御指令値Ｔ２０−１と、関節２０に対応する関節２４に前回の周期に出力した制御指令値Ｔ２４−１との指令値差ΔＴ２を算出する。そして、目標角度θＡ２２、θＡ２６の補正と同様の処理によって、関節２０、２４の目標角度θＡ２０、θＡ２４を補正する。したがって、例えば、図５に示すように、脚部１６が障害物８２に乗り上げた場合にも、関節２０、２４の角度が補正され、モータ２０ａ、２４ａが所定時間以上、高いトルクで駆動することが防止される。
【００５０】
以上に説明したように、本実施例の歩行ロボット１０では、指令値差算出部４２が、制御指令値出力部３８がモータ２２ａに前回の周期に出力した制御指令値Ｔ２２−１と、モータ２６ａに前回の周期に出力した制御指令値Ｔ２６−１との差ΔＴ１を算出する。そして、右脚部１５と左脚部１６が接地している場合には、角度補正部３６が、指令値差算出部４２が算出した指令値差ΔＴ１が閾値ΔＴｍａｘ以上であるか否かを判定する。これによって、足平１５ｃ、１６ｃが正常に接地しているか否かを好適に判定することができる。
また、上述の歩行ロボット１０では、補正角度記憶部３４が、角度補正部３６による関節２２、関節２６の前回の周期の目標角度の補正角度θＢ１−１を記憶する。そして、角度補正部３６が、角度算出部３２が算出した関節２２及び関節２６の目標角度θＡ２２、θＡ２６を、前回の周期の制御指令値Ｔ２２−１、Ｔ２６−１が関節２２、２６を駆動する方向と逆方向に補正する。このとき、角度補正部３６は、補正角度記憶部３４が記憶している前回の周期の補正角度θＢ１−１に単位補正角度ΔθＢを加算し、その加算値θＢ１−１＋ΔθＢだけ目標角度を補正する。したがって、関節２２、２６の角度が、足平１５ｃ、１６ｃが正常に接地できる角度に制御され、モータ２２ａ、２６ａが所定時間以上、高いトルクで駆動されることを防止することができる。
また、上述の歩行ロボット１０では、角度補正部３６が、補正角度θＢ１−１＋ΔθＢが最大補正角度θＢ１ｍａｘを超える場合には、目標角度θＡ２２、θＡ２６をθＢｍａｘだけ補正する。したがって、関節２２、２６の角度が最大補正角度θＢ１ｍａｘを超えて補正されず、右脚部１５または左脚部１６が障害物等から滑り落ちることが防止されている。
【００５１】
なお、上述した歩行ロボットでは、脚部の関節のうち、足首の関節２０〜２６の目標角度を補正したが、脚部の膝関節や、股関節の目標角度を補正することで、その関節を駆動するモータが高いトルクで駆動することを防止することもできる。また、歩行ロボットの右腕部及び左腕部で荷物等を運搬する場合に、両腕部が荷物等と好適に接触せず両腕部の関節が高いトルクで駆動されるときには、両腕部の対応する関節の目標角度を補正し、その関節が高いトルクで駆動されることを防止してもよい。
また、上述した歩行ロボットは、二足歩行ロボットであったが、３つ以上の脚部を駆動して歩行するロボットにおいて、対象に配置された一対の脚部の対応する関節の目標角度を補正し、その関節が高いトルクで駆動することを防止してもよい。
【００５２】
また、上述した歩行ロボットでは、モータ２２ａ、２６ａに出力した制御指令値Ｔ２２−１、Ｔ２６−１の絶対値の差を算出したが（（数１）参照）、Ｔ２２−１、Ｔ２６−１の値そのものの差を算出してもよい。例えば、指令値差ΔＴ１は、以下の計算によって算出してもよい。
【００５３】
【数２】
2008036779.tif 000004
【００５４】
このようにΔＴ１を算出すると、図９に示すように右脚部１５及び左脚部１６が障害物に乗り上げ、足平１５ｃ、１６ｃに略均等に逆方向のモーメントＭ５、Ｍ６が作用する際にも、足平１５ｃ、１６ｃの角度を補正することができる。すなわち、図９では、モーメントＭ５が足平１５ｃに作用する方向と、モーメントＭ６が足平１６ｃに作用する方向が逆方向となっている。すなわち、モータ２２ａ、２６ａの関節を駆動する方向が逆方向となっており、制御指令値Ｔ２２−１と制御指令値Ｔ２６−１は正負が逆となっている。従って、上記の（数２）で指令値差ΔＴ１を算出すると、算出された指令値差ΔＴ１は正常時に比べて大きな値となり、足平１５ｃ、１６ｃの角度を補正する必要があると判断することができる。これによって、図９に示すような状態となったときに、モータ２２ａ、２６ａが高いトルクで長時間駆動されることを防止することができる。また、（数１）と（数２）の両方の計算方法により指令値差を算出し、それらの指令値差の値に応じて足平１５ｃ、１６ｃの角度を補正するか否かを判定してもよい。
【００５５】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例をさまざまに変形、変更したものが含まれる。
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【００５６】
【図１】本実施例の歩行ロボット１０の斜視図。
【図２】関節２０〜２６の拡大図。
【図３】本実施例の歩行ロボット１０の制御装置３０及び各関節を示すブロック図。
【図４】足平１５ｃ、１６ｃの接地状態の説明図。
【図５】足平１５ｃ、１６ｃの接地状態の説明図。
【図６】制御装置３０の処理を示すフローチャート。
【図７】足平１５ｃ、１６ｃの接地状態の説明図。
【図８】足平１５ｃ、１６ｃの接地状態の説明図。
【図９】足平１５ｃ、１６ｃの接地状態の説明図。
【符号の説明】
【００５７】
１０：歩行ロボット
１１：本体
１２：頭部
１３：右腕部
１４：左腕部
１５：右脚部
１５ａ：腿部
１５ｂ：脛部
１５ｃ：足平
１６：左脚部
１６ａ：腿部
１６ｂ：脛部
１６ｃ：足平
１８〜２６：関節
１８ａ〜２６ａ：モータ
１８ｂ〜２６ｂ：エンコーダ
３０：制御装置
３２：角度算出部
３４：補正角度記憶部
３６：角度補正部
３８：制御指令値出力部
４０：制御状態判定部
４２：指令値差算出部
【図１】
2008036779.tif 000005
【図２】
2008036779.tif 000006
【図３】
2008036779.tif 000007
【図４】
2008036779.tif 000008
【図５】
2008036779.tif 000009
【図６】
2008036779.tif 000010
【図７】
2008036779.tif 000011
【図８】
2008036779.tif 000012
【図９】
2008036779.tif 000013