(57)【要約】【課題】人工筋肉アクチュエータを駆動源に用いる２リンクの関節角度の軌道制御において、最小の収縮力指令値で拮抗駆動を行うこと。【解決手段】収縮力指令値演算部１５２は、第一単関節筋、第二単関節筋、二関節筋がそれぞれ、リンクの屈曲と伸展のどちらの方向にトルクを発揮するかを仮定する。そして、収縮力指令値演算部１５２は、仮定の下で関節トルク指令値、目標関節角度、目標関節角速度に基づく場合分けを行い、収縮力指令値の指令値候補を導出する。これを、収縮力指令値演算部１５２は、各筋がトルクを発揮する方向の組み合わせ全てについて繰り返し、指令値候補の中から最大値が最小となるものを選び出す。【選択図】図３
2014004654.tif 000002
【特許請求の範囲】
【請求項１】
基台に第１関節で連結された第１リンクと、
前記第１リンクに第２関節で連結された第２リンクと、
収縮により前記第１リンクを前記第１関節まわりに第１旋回方向に旋回させる第１人工筋肉アクチュエータと、
収縮により前記第１リンクを前記第１関節まわりに前記第１旋回方向に対して反対の第２旋回方向に旋回させる第２人工筋肉アクチュエータと、
収縮により前記第２リンクを前記第２関節まわりに前記第１旋回方向に旋回させる第３人工筋肉アクチュエータと、
収縮により前記第２リンクを前記第２関節まわりに前記第２旋回方向に旋回させる第４人工筋肉アクチュエータと、
収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第１旋回方向に旋回させる第５人工筋肉アクチュエータと、
収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第２旋回方向に旋回させる第６人工筋肉アクチュエータと、
前記第１関節の第１関節トルク指令値及び前記第２関節の第２関節トルク指令値を生成するトルク指令値生成部と、
前記第１関節トルク指令値及び前記第２関節トルク指令値に基づいて、前記第１人工筋肉アクチュエータの第１収縮力指令値、前記第２人工筋肉アクチュエータの第２収縮力指令値、前記第３人工筋肉アクチュエータの第３収縮力指令値、前記第４人工筋肉アクチュエータの第４収縮力指令値、前記第５人工筋肉アクチュエータの第５収縮力指令値、及び前記第６人工筋肉アクチュエータの第６収縮力指令値を求める収縮力指令値演算部と、
前記第１収縮力指令値に応じて前記第１人工筋肉アクチュエータを収縮させ、前記第２収縮力指令値に応じて前記第２人工筋肉アクチュエータを収縮させ、前記第３収縮力指令値に応じて前記第３人工筋肉アクチュエータを収縮させ、前記第４収縮力指令値に応じて前記第４人工筋肉アクチュエータを収縮させ、前記第５収縮力指令値に応じて前記第５人工筋肉アクチュエータを収縮させ、前記第６収縮力指令値に応じて前記第６人工筋肉アクチュエータを収縮させる収縮力発生部と、を備え、
前記収縮力指令値演算部は、
前記第１関節トルク指令値を定数とし、前記第１、第２、第５及び第６収縮力指令値を変数として成り立つ第１関数、並びに前記第２関節トルク指令値を定数とし、前記第３、第４、第５及び第６収縮力指令値を変数として成り立つ第２関数において、前記第１及び第２収縮力指令値の一方、前記第３及び第４収縮力指令値の一方、並びに前記第５及び第６収縮力指令値の一方を０とした場合に、前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方のうち最大値となる収縮力指令値が最小となるように前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方を演算する指令値演算処理と、
前記指令値演算処理で演算した前記第１から第６収縮力指令値を前記収縮力発生部に出力する指令値出力処理と、を実行することを特徴とするロボット。
【請求項２】
前記第１収縮力指令値をｕｆ１、前記第２収縮力指令値をｕｅ１、前記第３収縮力指令値をｕｆ２、前記第４収縮力指令値をｕｅ２、前記第５収縮力指令値をｕｆ３、前記第６収縮力指令値をｕｅ３、前記第１関節トルク指令値をＴ１、前記第２関節トルク指令値をＴ２とし、
正の係数Ｋｆ１，Ｋｅ１，Ｋｆ２，Ｋｅ２，Ｋｆ３，Ｋｅ３を用いて、前記第１関数を、Ｔ１＝Ｋｆ１×ｕｆ１−Ｋｅ１×ｕｅ１＋Ｋｆ３×ｕｆ３−Ｋｅ３×ｕｅ３とし、前記第２関数を、Ｔ２＝Ｋｆ２×ｕｆ２−Ｋｅ２×ｕｅ２＋Ｋｆ３×ｕｆ３−Ｋｅ３×ｕｅ３とし、
評価関数を、Ｊ＝ｍａｘ｛ｕｆ１，ｕｅ１，ｕｆ２，ｕｅ２，ｕｆ３，ｕｅ３｝としたとき、
前記収縮力指令値演算部は、
前記指令値演算処理として、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｅ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第１指令値候補を演算する第１演算処理と、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第２指令値候補を演算する第２演算処理と、
前記第１関数及び前記第２関数において、ｕｆ１＝０，ｕｅ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第３指令値候補を演算する第３演算処理と、
前記第１関数及び前記第２関数において、ｕｆ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第４指令値候補を演算する第４演算処理と、
前記第１から第４指令値候補のうち、前記評価関数が最小の指令値候補を、前記指令値出力処理にて出力する前記第１から第６収縮力指令値として選択する指令選択処理と、を実行することを特徴とする請求項１に記載のロボット。
【請求項３】
前記第１収縮力指令値をｕｆ１、前記第２収縮力指令値をｕｅ１、前記第３収縮力指令値をｕｆ２、前記第４収縮力指令値をｕｅ２、前記第５収縮力指令値をｕｆ３、前記第６収縮力指令値をｕｅ３、前記第１関節トルク指令値をＴ１、前記第２関節トルク指令値をＴ２とし、
正の係数Ｋｆ１，Ｋｅ１，Ｋｆ２，Ｋｅ２，Ｋｆ３，Ｋｅ３を用いて、前記第１関数を、Ｔ１＝Ｋｆ１×ｕｆ１−Ｋｅ１×ｕｅ１＋Ｋｆ３×ｕｆ３−Ｋｅ３×ｕｅ３とし、前記第２関数を、Ｔ２＝Ｋｆ２×ｕｆ２−Ｋｅ２×ｕｅ２＋Ｋｆ３×ｕｆ３−Ｋｅ３×ｕｅ３とし、
評価関数を、Ｊ＝ｍａｘ｛ｕｆ１，ｕｅ１，ｕｆ２，ｕｅ２，ｕｆ３，ｕｅ３｝としたとき、
前記収縮力指令値演算部は、
前記指令値演算処理として、
前記第１関節トルク指令値と前記第２関節トルク指令値とが同符号の場合には、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｅ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第１指令値候補を演算する第１演算処理と、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第２指令値候補を演算する第２演算処理と、
前記第１関数及び前記第２関数において、ｕｆ１＝０，ｕｅ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第３指令値候補を演算する第３演算処理と、
前記第１関数及び前記第２関数において、ｕｆ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第４指令値候補を演算する第４演算処理と、
前記第１から第４指令値候補のうち、前記評価関数が最小の指令値候補を、前記指令値出力処理にて出力する前記第１から第６収縮力指令値として選択する第１指令選択処理と、を実行し、
前記第１関節トルク指令値と前記第２関節トルク指令値とが異符号の場合には、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第５指令値候補を演算する第５演算処理と、
前記第１関数及び前記第２関数において、ｕｆ１＝０，ｕｆ２＝０，ｕｅ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第６指令値候補を演算する第６演算処理と、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｅ２＝０，ｕｆ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第７指令値候補を演算する第７演算処理と、
前記第１関数及び前記第２関数において、ｕｅ１＝０，ｕｆ２＝０，ｕｆ３＝０とした場合に、前記評価関数を最小化する前記第１から第６収縮力指令値からなる第８指令値候補を演算する第８演算処理と、
前記第５から第８指令値候補のうち、前記評価関数が最小の指令値候補を、前記指令値出力処理にて出力する前記第１から第６収縮力指令値として選択する第２指令選択処理と、を実行することを特徴とする請求項１に記載のロボット。
【請求項４】
基台に第１関節で連結された第１リンクと、
前記第１リンクに第２関節で連結された第２リンクと、
収縮により前記第１リンクを前記第１関節まわりに第１旋回方向に旋回させる第１人工筋肉アクチュエータと、
収縮により前記第１リンクを前記第１関節まわりに前記第１旋回方向に対して反対の第２旋回方向に旋回させる第２人工筋肉アクチュエータと、
収縮により前記第２リンクを前記第２関節まわりに前記第１旋回方向に旋回させる第３人工筋肉アクチュエータと、
収縮により前記第２リンクを前記第２関節まわりに前記第２旋回方向に旋回させる第４人工筋肉アクチュエータと、
収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第１旋回方向に旋回させる第５人工筋肉アクチュエータと、
収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第２旋回方向に旋回させる第６人工筋肉アクチュエータと、
前記第１関節の第１関節トルク指令値及び前記第２関節の第２関節トルク指令値を生成するトルク指令値生成部と、
前記第１関節トルク指令値及び前記第２関節トルク指令値に基づいて、前記第１人工筋肉アクチュエータの第１収縮力指令値、前記第２人工筋肉アクチュエータの第２収縮力指令値、前記第３人工筋肉アクチュエータの第３収縮力指令値、前記第４人工筋肉アクチュエータの第４収縮力指令値、前記第５人工筋肉アクチュエータの第５収縮力指令値、及び前記第６人工筋肉アクチュエータの第６収縮力指令値を求める収縮力指令値演算部と、
前記第１収縮力指令値に応じて前記第１人工筋肉アクチュエータを収縮させ、前記第２収縮力指令値に応じて前記第２人工筋肉アクチュエータを収縮させ、前記第３収縮力指令値に応じて前記第３人工筋肉アクチュエータを収縮させ、前記第４収縮力指令値に応じて前記第４人工筋肉アクチュエータを収縮させ、前記第５収縮力指令値に応じて前記第５人工筋肉アクチュエータを収縮させ、前記第６収縮力指令値に応じて前記第６人工筋肉アクチュエータを収縮させる収縮力発生部と、を備えたロボットを制御するロボット制御方法において、
前記収縮力指令値演算部が、前記第１関節トルク指令値を定数とし、前記第１、第２、第５及び第６収縮力指令値を変数として成り立つ第１関数、並びに前記第２関節トルク指令値を定数とし、前記第３、第４、第５及び第６収縮力指令値を変数として成り立つ第２関数において、前記第１及び第２収縮力指令値の一方、前記第３及び第４収縮力指令値の一方、並びに前記第５及び第６収縮力指令値の一方を０とした場合に、前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方のうち最大値となる収縮力指令値が最小となるように前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方を演算する指令値演算処理工程と、
前記収縮力指令値演算部が、前記指令値演算処理工程で演算した前記第１から第６収縮力指令値を前記収縮力発生部に出力する指令値出力処理工程と、を備えたことを特徴とするロボット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、人工筋肉アクチュエータがリンクに対して拮抗配置されたロボット及び該ロボットを制御するロボット制御方法に関する。
【背景技術】
【０００２】
マニピュレータの制御方法において、手先が対象物に柔軟に接触できることが重要になってきている。これを産業ロボットに応用すれば、人間との共同作業が実現でき、手先の柔軟性の方向を制御することにより部品の嵌め合い作業等が容易になる。また、これを脚式移動ロボットに応用すれば、地面に柔らかく接地することで胴体に対する衝撃を和らげることができ、段差を吸収することで不整地を安定に歩行することを可能とする。
【０００３】
手先の柔軟性の制御を実現するために、手先に力センサを装着するインピーダンス制御や、人工筋肉アクチュエータを用いる制御等が行われている。人間の筋はアクチュエータであると同時に、粘弾性可変の制御機構であることが知られている。人工筋肉の中でも、特にＭｃＫｉｂｂｅｎ型人工筋肉に代表される空気圧ゴム人工筋肉は、粘弾性特性が筋に類似している。そこで、ロボットにおける人工筋肉アクチュエータの柔らかさ制御することで、任意の手先の柔軟性で対象物に接触することができる。しかし、人工筋肉アクチュエータは、粘弾性特性に非線系性を有している、収縮方向のみに力を発生するため拮抗配置して制御を行う必要がある、などの理由で制御性に難があることが知られている。
【０００４】
従来、筋の粘弾性特性を含むマニピュレータのモデルと、修正値計算部を用いて関節角度と手先の柔軟性を同時制御するためのフィードフォワード入力を生成しているものが提案されている（特許文献１参照）。特許文献１では、モデルを用いて制御入力が与えられた時の関節角度と人工筋肉アクチュエータの粘弾性係数を出力し、それを目標値と比較する。そして、目標値との誤差を修正値計算部に逆伝播させ、フィードフォワード入力を修正する。修正されたフィードフォワード入力を再びモデルに与える操作を繰り返し、徐々にフィードフォワード入力を求めている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３４３６３２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記特許文献１では、フィードフォワード制御により関節角度と手先の柔軟性の同時制御を行っている。しかし、人工筋肉アクチュエータを最小の制御入力で拮抗駆動するための研究例はこれまで見られない。
【０００７】
制御入力を最小化するには、関節角度の目標軌道に対応する手先柔軟性の目標軌道を考慮し、それを制御入力と同時に最適化する必要がある。しかし、上記特許文献１のフィードフォワード制御は、手先柔軟性の目標軌道をあらかじめ与えており、それを最適化するアルゴリズムは含まれていない。
【０００８】
そこで、本発明は、人工筋肉アクチュエータを駆動源に用いる２リンクの関節角度の軌道制御において、最小の収縮力指令値で拮抗駆動を行うことを目的とするものである。
【課題を解決するための手段】
【０００９】
本発明のロボットは、基台に第１関節で連結された第１リンクと、前記第１リンクに第２関節で連結された第２リンクと、収縮により前記第１リンクを前記第１関節まわりに第１旋回方向に旋回させる第１人工筋肉アクチュエータと、収縮により前記第１リンクを前記第１関節まわりに前記第１旋回方向に対して反対の第２旋回方向に旋回させる第２人工筋肉アクチュエータと、収縮により前記第２リンクを前記第２関節まわりに前記第１旋回方向に旋回させる第３人工筋肉アクチュエータと、収縮により前記第２リンクを前記第２関節まわりに前記第２旋回方向に旋回させる第４人工筋肉アクチュエータと、収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第１旋回方向に旋回させる第５人工筋肉アクチュエータと、収縮により前記第１及び第２リンクを同時に前記第１及び第２関節まわりに前記第２旋回方向に旋回させる第６人工筋肉アクチュエータと、前記第１関節の第１関節トルク指令値及び前記第２関節の第２関節トルク指令値を生成するトルク指令値生成部と、前記第１関節トルク指令値及び前記第２関節トルク指令値に基づいて、前記第１人工筋肉アクチュエータの第１収縮力指令値、前記第２人工筋肉アクチュエータの第２収縮力指令値、前記第３人工筋肉アクチュエータの第３収縮力指令値、前記第４人工筋肉アクチュエータの第４収縮力指令値、前記第５人工筋肉アクチュエータの第５収縮力指令値、及び前記第６人工筋肉アクチュエータの第６収縮力指令値を求める収縮力指令値演算部と、前記第１収縮力指令値に応じて前記第１人工筋肉アクチュエータを収縮させ、前記第２収縮力指令値に応じて前記第２人工筋肉アクチュエータを収縮させ、前記第３収縮力指令値に応じて前記第３人工筋肉アクチュエータを収縮させ、前記第４収縮力指令値に応じて前記第４人工筋肉アクチュエータを収縮させ、前記第５収縮力指令値に応じて前記第５人工筋肉アクチュエータを収縮させ、前記第６収縮力指令値に応じて前記第６人工筋肉アクチュエータを収縮させる収縮力発生部と、を備え、前記収縮力指令値演算部は、前記第１関節トルク指令値を定数とし、前記第１、第２、第５及び第６収縮力指令値を変数として成立する第１関数、並びに前記第２関節トルク指令値を定数とし、前記第３、第４、第５及び第６収縮力指令値を変数として成立する第２関数において、前記第１及び第２収縮力指令値の一方、前記第３及び第４収縮力指令値の一方、並びに前記第５及び第６収縮力指令値の一方を０とした場合に、前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方のうち最大値となる収縮力指令値が最小となるように前記第１及び第２収縮力指令値の他方、前記第３及び第４収縮力指令値の他方、並びに前記第５及び第６収縮力指令値の他方を演算する指令値演算処理と、前記指令値演算処理で演算した前記第１から第６収縮力指令値を前記収縮力発生部に出力する指令値出力処理と、を実行することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、手先柔軟性の目標軌道が一意に決定され、各人工筋肉アクチュエータが最小の収縮力指令値で拮抗駆動されるので、収縮力発生部において各人工筋肉アクチュエータに収縮力を発生させるのに必要な例えば空気等の消費量を最小にすることができる。したがって、ロボットの駆動時間を延長することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１実施形態に係る人工筋肉アクチュエータの粘弾性モデルを示す説明図である。
【図２】本発明の第１実施形態に係るロボットの概略構成を示す説明図である。
【図３】本発明の第１実施形態に係るロボットの制御装置を示すブロック線図である。
【図４】本発明の第１実施形態に係る筋トルクの符号の組み合わせを示す図である。
【図５】本発明の第１実施形態に係る収縮力指令値演算部の処理動作を示すフローチャートである。
【図６】本発明の第１実施形態に係る収縮力指令値演算部による第１最小化演算処理のフローチャートである。
【図７】直線ｕｆ１１，ｕｆ２１，ｕｆ３１の一例を示すグラフである。
【図８】直線ｕｆ１１，ｕｆ２１，ｕｆ３１の別の例を示すグラフである。
【図９】直線ｕｆ１１，ｕｆ２１，ｕｆ３１の別の例を示すグラフである。
【図１０】本発明の第１実施形態に係る収縮力指令値演算部による第１演算処理のフローチャートである。
【図１１】本発明の第１実施形態に係る収縮力指令値演算部による第２演算処理のフローチャートである。
【図１２】本発明の第１実施形態に係る収縮力指令値演算部による第３演算処理のフローチャートである。
【図１３】本発明の第１実施形態に係る収縮力指令値演算部による第４演算処理のフローチャートである。
【図１４】本発明の第１実施形態に係る収縮力指令値演算部による第１指令選択処理のフローチャートである。
【図１５】本発明の第２実施形態に係る本発明の第３実施形態に係るロボットの収縮力指令値演算部の処理動作を示すフローチャートである。
【図１６】本発明の第２実施形態に係る収縮力指令値演算部による第２最小化演算処理のフローチャートである。
【図１７】本発明の第２実施形態に係る収縮力指令値演算部による第５演算処理のフローチャートである。
【図１８】本発明の第２実施形態に係る収縮力指令値演算部による第６演算処理のフローチャートである。
【図１９】本発明の第２実施形態に係る収縮力指令値演算部による第７演算処理のフローチャートである。
【図２０】本発明の第２実施形態に係る収縮力指令値演算部による第８演算処理のフローチャートである。
【図２１】本発明の第２実施形態に係るシミュレーション結果を示す図である。
【図２２】本発明の第２実施形態に係るシミュレーション結果を示す図である。
【図２３】本発明の第２実施形態に係るシミュレーション結果を示す図である。
【図２４】本発明の第２実施形態に係るシミュレーション結果を示す図である。
【図２５】本発明の第３実施形態に係るスティフネス楕円を表す図である。
【図２６】本発明の第３実施形態に係るロボットの制御装置を示すブロック線図である。
【図２７】本発明の第３実施形態に係るシミュレーション結果を示す図である。
【図２８】本発明の第３実施形態に係るシミュレーション結果を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。
【００１３】
［第１実施形態］
本発明の第１実施形態では、駆動源として人工筋肉アクチュエータを用いる２リンクマニピュレータに対して、関節角度の目標軌道に追従するための制御入力を最小化する。なお、第１実施形態では、目標軌道へ追従するために必要となる第１、第２関節まわりのトルクがどちらも正数となるときに限定し、制御入力の導出方法を示す。
【００１４】
（１  モデル導出）
本節では、人工筋肉アクチュエータを駆動源とする、２リンクマニピュレータのモデルを導出する。本第１実施形態で用いる人工筋肉アクチュエータとは、筋の粘弾性特性と類似する特性を有するアクチュエータであり、図１に示すように、力発生要素１１と弾性要素１２と粘性要素１３を用いてモデル化される。力発生要素１１の収縮力をｕ、収縮方向を正とする筋の収縮量をｘとする。収縮速度を、
【００１５】
【数１】
2014004654.tif 000003
とする。また、弾性力定数をｋ、粘性力定数をｃとし、筋収縮力をＦとする。このとき、筋の粘弾性特性は、
【００１６】
【数２】
2014004654.tif 000004
と表わされる。人工筋肉アクチュエータは、収縮方向にのみ力を発生するため、リンクの角度を任意に制御するためには、人工筋肉アクチュエータを拮抗配置する必要がある。
【００１７】
図２は、本発明の第１実施形態に係るロボットの概略構成を示す説明図である。このロボット１００は、２リンクマニピュレータである。ロボット１００は、基台であるプーリ１０３と、プーリ１０３に関節（第１関節）１１１で連結されたリンク（第１リンク）１０１と、リンク１０１に関節（第２関節）１１２で連結されたリンク（第２リンク）１０２とを備えている。
【００１８】
本第１実施形態では、ロボット１００は、６つの人工筋肉アクチュエータ（以下、単に「アクチュエータ」という）ｆ１，ｅ１，ｆ２，ｅ２，ｆ３，ｅ３と、これらアクチュエータｆ１，ｅ１，ｆ２，ｅ２，ｆ３，ｅ３を制御する制御装置１５０と、を備えている。
【００１９】
第１人工筋肉アクチュエータであるアクチュエータｆ１は、収縮により第１リンク１０１を第１関節１１１まわりに第１旋回方向Ｒ１（図２中、反時計回り方向、屈曲する方向）に旋回させる。第２人工筋肉アクチュエータであるアクチュエータｅ１は、収縮により第１リンク１０１を第１関節１１１まわりに第１旋回方向Ｒ１に対して反対の第２旋回方向Ｒ２（図２中、時計回り方向、伸展する方向）に旋回させる。第３人工筋肉アクチュエータであるアクチュエータｆ２は、収縮により第２リンク１０２を第２関節１１２まわりに第１旋回方向Ｒ１に旋回させる。第４人工筋肉アクチュエータであるアクチュエータｅ２は、収縮により第２リンク１０２を第２関節１１２まわりに第２旋回方向Ｒ２に旋回させる。第５人工筋肉アクチュエータであるアクチュエータｆ３は、収縮により第１及び第２リンク１０１，１０２を同時に第１及び第２関節１１１，１１２まわりに第１旋回方向Ｒ１に旋回させる。第６人工筋肉アクチュエータであるアクチュエータｅ３は、収縮により第１及び第２リンク１０１，１０２を同時に第１及び第２関節１１１，１１２まわりに第２旋回方向Ｒ２に旋回させる。
【００２０】
つまり、アクチュエータｆ１，ｅ１は第１関節１１１を、アクチュエータｆ２，ｅ２は第２関節１１２を駆動し、アクチュエータｆ３，ｅ３は二関節１１１，１１２を同時に駆動する。
【００２１】
制御装置１５０は、各アクチュエータｆｉ，ｅｉの収縮力指令値ｕｆｉ，ｕｅｉを演算により求めて、各収縮力指令値ｕｆｉ，ｕｅｉに応じて各アクチュエータｆｉ，ｅｉを収縮させる（ｉ＝１，２，３）。ここで、アクチュエータｆ１の収縮力指令値を、第１収縮力指令値ｕｆ１とする。アクチュエータｅ１の収縮力指令値を、第２収縮力指令値ｕｅ１とする。アクチュエータｆ２の収縮力指令値を、第３収縮力指令値ｕｆ２とする。アクチュエータｅ２の収縮力指令値を、第４収縮力指令値ｕｅ２とする。アクチュエータｆ３の収縮力指令値を、第５収縮力指令値ｕｆ３とする。アクチュエータｅ３の収縮力指令値を、第６収縮力指令値ｕｅ３とする。
【００２２】
アクチュエータｆｉ，ｅｉ（ｉ＝１，２，３）の収縮量ｘｉは、モーメント径ｒと関節角度θｉ（ｉ＝１，２，３）を用いて、
【００２３】
【数３】
2014004654.tif 000005
と表わせる。
【００２４】
ここで、アクチュエータｆｉ，ｅｉの弾性力定数をｋｉ、粘性力定数をｃｉ、関節角速度をωｉ、関節角加速度をαｉとする（ｉ＝１，２，３）。アクチュエータｆｉ，ｅｉの収縮力指令値ｕｆｉ，ｕｅｉ（ｉ＝１，２，３）により生じるトルク（以下、筋トルクと呼ぶ）τｉ（ｉ＝１，２，３）は、
【００２５】
【数４】
2014004654.tif 000006
と表すことができる。ただし、関節角度θ３は、
【００２６】
【数５】
2014004654.tif 000007
と定義する。また、トルクの正の方向は、図２において反時計回り方向である第１旋回方向Ｒ１とする。
【００２７】
式（３）より、右辺第１項の収縮力の差が関節に回転トルクを与え、第２項と第３項の収縮力の和が、筋の弾性と粘性を変動させることがわかる。なお、前述のように人工筋肉アクチュエータｆｉ，ｅｉ（ｉ＝１，２，３）は収縮力のみを発揮する。そのため、収縮力指令値ｕｆｉ，ｕｅｉ（ｉ＝１，２，３）は、
【００２８】
【数６】
2014004654.tif 000008
を満たさなければならない。
【００２９】
ここで、第１，第２リンク１０１，１０２の関節１１１，１１２まわりの慣性モーメントをＩ１，Ｉ２、リンク１０１，１０２長さをＬ１，Ｌ２、リンク１０１，１０２の質量をｍ１，ｍ２とする。また、関節１１１，１１２まわりに働くトルク指令値（第１関節トルク指令値及び第２関節トルク指令値）をＴ１，Ｔ２とする。本第１実施形態の２リンクマニピュレータの運動方程式は、
【００３０】
【数７】
2014004654.tif 000009
となる。ただし、式（６）において、慣性行列は、
【００３１】
【数８】
2014004654.tif 000010
【００３２】
コリオリ力・遠心力は、
【００３３】
【数９】
2014004654.tif 000011
である。
【００３４】
慣性行列及びコリオリ力・遠心力は、以下の式（７）及び式（８）となる。
【００３５】
【数１０】
2014004654.tif 000012
【００３６】
また、第１関節トルク指令値Ｔ１、第１関節トルク指令値Ｔ２は、筋トルクτ１，τ２，τ３を用いて、
【００３７】
【数１１】
2014004654.tif 000013
となる。
【００３８】
式（３）と式（９）とにより、関節トルク指令値Ｔ１，Ｔ２は、収縮力指令値ｕｆｉ，ｕｅｉを用いて、
【００３９】
【数１２】
2014004654.tif 000014
となる。ただし、係数Ｋｆ１，Ｋｅ１，Ｋｆ２，Ｋｅ２，Ｋｆ３，Ｋｅ３は、
【００４０】
【数１３】
2014004654.tif 000015
と定義する（ｉ＝１，２，３）。
【００４１】
つまり、式（１０）は、第１関節トルク指令値Ｔ１を定数とし、第１、第２、第５及び第６収縮力指令値ｕｆ１，ｕｅ１，ｕｆ３，ｕｅ３を変数として成立する第１関数である。式（１１）は、第２関節トルク指令値Ｔ２を定数とし、第３、第４、第５及び第６収縮力指令値ｕｆ２，ｕｅ２，ｕｆ３，ｕｅ３を変数として成立する第２関数である。
【００４２】
（２  制御系設計）
本第１実施形態の制御系では、関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］に基づき、収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］の最大値を最小化する。なお、時刻ｋは離散信号であり、制御周期Ｔｓと正の整数ｎを用いて、
【００４３】
【数１４】
2014004654.tif 000016
と表すことができる。なお、前述のように本第１実施形態では、関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］がどちらも正数となるときの収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］の導出方法について述べる。本第１実施形態の制御系は、例えば、重力により生じる負の方向のトルクに対して、動作を行うマニピュレータに対して適用することが可能である。
【００４４】
図３は、本発明の第１実施形態に係るロボットの制御装置を示すブロック線図である。図３において、制御装置１５０は、トルク指令値生成部としてのフィードフォワード補償部１５１と、収縮力指令値演算部１５２と、収縮力発生部１５３と、を備えている。
【００４５】
フィードフォワード補償部１５１は、時刻ｋにおける各関節１１１，１１２の目標関節角度θｒｉ［ｋ］、目標角速度ωｒｉ［ｋ］、目標角加速度αｒｉ［ｋ］（ｉ＝１，２）を入力とする。そして、
【００４６】
【数１５】
2014004654.tif 000017
とする逆動力学演算により、関節角度を目標値に追従させるための関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］を演算する。つまり、フィードフォワード補償部１５１は、各関節１１１，１１２の目標関節角度θｒｉ［ｋ］、目標角速度ωｒｉ［ｋ］、目標角加速度αｒｉ［ｋ］（ｉ＝１，２）に基づき、各関節１１１，１１２の関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］を生成する。
【００４７】
また、収縮力指令値演算部１５２は、目標関節角度θｒｉ［ｋ］、目標角速度ωｒｉ［ｋ］、及び関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］を入力し、これらに基づいて、最大値が最小となる収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］を求める。
【００４８】
収縮力発生部１５３は、各収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］に応じて各アクチュエータｆｉ，ｅｉを収縮させる。
【００４９】
制御系設計では、まず、収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］の最大値を最小化する問題（以下、収縮力最小化問題と呼ぶ）を定義し、同問題を解くための制御側を導出する。次に、係数Ｋｆｉ，Ｋｅｉと関節トルク指令値Ｔ１［ｋ］，Ｔ２［ｋ］に基づく場合分けを行い、収縮力指令値ｕｆｉ［ｋ］，ｕｅｉ［ｋ］を演算する。なお、本第１実施形態の制御系設計では表記を簡潔にするために、時刻を表す［ｋ］を省略する。
【００５０】
（２．１  関節剛性と収縮力の同時制御）
まず、評価関数をＪとし、Ｊを次式（１５）と定義する。
【００５１】
【数１６】
2014004654.tif 000018
【００５２】
つまり、Ｊ＝ｍａｘ｛ｕｆ１，ｕｅ１，ｕｆ２，ｕｅ２，ｕｆ３，ｕｅ３｝と定義する。収縮力最小化問題とは、関節トルク指令値Ｔ１，Ｔ２と、目標関節角度θｒ１，θｒ２と、目標関節角速度ωｒ１，ωｒ２とが与えられたとき、式（３）〜式（５）及び式（９）を満たし、かつ評価関数Ｊを最小化する収縮力指令値ｕｆｉ，ｕｅｉを求める問題である。
【００５３】
収縮力最小化問題では、式（１０）、式（１１）、式（１５）の３つが制約条件となるが、未知数である収縮力指令値ｕｆｉ，ｕｅｉの数は６つである。一般に、制約条件の数に比べて未知数の数が多い場合は、未知数を一意に決めることはできない。しかし、筋トルクτｉの正負に応じて収縮力指令値ｕｆｉ，ｕｅｉを、
【００５４】
【数１７】
2014004654.tif 000019
と切り替える制御側を適用すると、収縮力最小化問題を解くことが可能となる。なぜならば、式（１６）の制御側により、収縮力指令値ｕｆｉ，ｕｅｉのどちらか一方が必ず０となるため、未知数の数を３つに減らすことが可能となるためである。さらに、収縮力指令値ｕｆｉ，ｕｅｉの一方を０とすることで、最小の収縮力で駆動することが可能となる。しかし、筋トルクτｉは、係数Ｋｆｉ，Ｋｅｉを用いて、
【００５５】
【数１８】
2014004654.tif 000020
と表されるため、係数Ｋｆｉ，Ｋｅｉが正数となることが条件である。そのため、本第１実施形態では、マニピュレータが目標関節角度θｒ１，θｒ２と目標角速度ωｒ１，ωｒ２に従って運動するとき、係数Ｋｆｉ，Ｋｅｉが常に正数となるように、弾性力定数ｋ、粘性力定数ｃ、モーメントアーム径ｒを設計している。
【００５６】
式（１６）に示す制御側を適用するためには、筋トルクτ１，τ２，τ３の正負の符号が決定されている必要がある。しかし、式（９）に示すように、筋トルクτ１，τ２，τ３は関節トルク指令値Ｔ１，Ｔ２に対して冗長となるため、関節トルク指令値の符号から筋トルクの符号を一意に決定することはできない。
【００５７】
そこで、本第１実施形態では、筋トルクτ１，τ２，τ３の符号の組み合わせのうち一つを仮定し、この仮定の下で評価関数Ｊを最小化する収縮力指令値ｕｆｉ，ｕｅｉの候補を導出する。これを、筋トルクτ１，τ２，τ３の符号の組み合わせ全てについて行い、収縮力の候補の中から評価関数Ｊを最小化する収縮力を選び出す。
【００５８】
図４は、筋トルクτ１，τ２，τ３の符号が取りうる８通りの組み合わせを示す図である。ただし、本第１実施形態のように、関節トルク指令値Ｔ１，Ｔ２がどちらも正数となる場合は、筋トルクτ３を負数とする条件５、条件６、条件７、条件８の組み合わせを仮定する必要はない。なぜなら、筋トルクτ３を負数とすると、式（９）より、τ３を正数とする場合と比べて筋トルクτ１と筋トルクτ２を増加させなければならず、これは、第一、第二単関節筋の収縮力を増加させてしまうためである。
【００５９】
そこで、本第１実施形態では、条件１、条件２、条件３、条件４の４通りの組み合わせについてのみ、収縮力指令値ｕｆｉ，ｕｅｉを導出する。
【００６０】
次に、制御装置１５０によるロボット制御方法について説明する。図５は、収縮力指令値演算部の処理動作を示すフローチャートである。収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２をフィードフォワード補償部１５１から入力すると共に、不図示の上位コントローラから目標関節角度θ１，θ２、目標関節角速度ω１，ω２を入力する（Ｓ１）。なお、弾性力定数ｋ、粘性力定数ｃ及びモーメントアーム径ｒは、予め設定された値である。
【００６１】
次に、収縮力指令値演算部１５２は、式（１２）を用いて、目標関節角度θ１，θ２、目標関節角速度ω１，ω２から係数Ｋｆｉ，Ｋｅｉを算出する（Ｓ２）。
【００６２】
次に、収縮力指令値演算部１５２は、式（１０）に示す第１関数、及び式（１１）に示す第２関数に、演算した係数Ｋｆｉ，Ｋｅｉ及び入力した関節トルク指令値Ｔ１，Ｔ２を定数として代入する（Ｓ３）。
【００６３】
次に、収縮力指令値演算部１５２は、評価関数Ｊを最小化する指令値候補を演算する第１最小化演算処理を実行する（Ｓ４）。
【００６４】
次に、収縮力指令値演算部１５２は、評価関数Ｊｍｉｎ１〜４及び指令値候補ｕｆｉ１〜４，ｕｅｉ１〜４に対し（Ｓ５）、評価関数が最小の指令値候補を選択する第１指令選択処理を実行する（Ｓ６）。
【００６５】
即ち、収縮力指令値演算部１５２は、これらＳ２〜Ｓ６において、第１から第６収縮力指令値ｕｆｉ，ｕｅｉを演算する指令値演算処理を実行する（指令値演算処理工程）。具体的には、収縮力指令値演算部１５２は、式（１０）に示す第１関数及び式（１１）に示す第２関数において、第１及び第２収縮力指令値の一方、第３及び第４収縮力指令値の一方、並びに第５及び第６収縮力指令値の一方を０とする。そして、収縮力指令値演算部１５２は、第１及び第２収縮力指令値の他方、第３及び第４収縮力指令値の他方、並びに第５及び第６収縮力指令値の他方のうち最大値となる収縮力指令値が最小となるようにこれらを演算する。
【００６６】
次に、収縮力指令値演算部１５２は、演算した第１から第６収縮力指令値ｕｆｉ，ｕｅｉを収縮力発生部１５３に出力する指令値出力処理を実行する（Ｓ７：指令値出力処理工程）。
【００６７】
（２．２  第１最小化演算処理の設計）
図６は、収縮力指令値演算部による第１最小化演算処理のフローチャートである。収縮力指令値演算部１５２は、図４に示す第１条件を仮定し（Ｓ１１）、第１演算処理を実行し（Ｓ１２）、評価関数Ｊｍｉｎ１を最小化する第１〜第６収縮力指令値からなる第１指令値候補ｕｆｉ１，ｕｅｉ１を出力する（Ｓ１３）。
【００６８】
続いて、収縮力指令値演算部１５２は、図４に示す第２条件を仮定し（Ｓ１４）、第２演算処理を実行し（Ｓ１５）、評価関数Ｊｍｉｎ２を最小化する第１〜第６収縮力指令値からなる第２指令値候補ｕｆｉ２，ｕｅｉ２を出力する（Ｓ１６）。
【００６９】
続いて、収縮力指令値演算部１５２は、図４に示す第３条件を仮定し（Ｓ１７）、第３演算処理を実行し（Ｓ１８）、評価関数Ｊｍｉｎ３を最小化する第１〜第６収縮力指令値からなる第３指令値候補ｕｆｉ３，ｕｅｉ３を出力する（Ｓ１９）。
【００７０】
続いて、収縮力指令値演算部１５２は、図４に示す第４条件を仮定し（Ｓ２０）、第４演算処理を実行し（Ｓ２１）、評価関数Ｊｍｉｎ４を最小化する第１〜第６収縮力指令値からなる第４指令値候補ｕｆｉ４，ｕｅｉ４を出力する（Ｓ２２）。
【００７１】
第１、第２、第３、第４演算処理は、それぞれ、筋トルクτ１，τ２の符号を図４の条件１、２、３、４と仮定して、評価関数Ｊの最小値の候補Ｊｍｉｎｊと収縮力指令値の指令値候補ｕｆｉｊ、ｕｅｉｊを演算するサブルーチンである（ｊ＝１，２，３，４）。なお、評価関数の候補Ｊｍｉｎｊと収縮力指令値の候補ｕｆｉｊ、ｕｅｉｊの上付きの添え字ｊは対応する演算処理の番号を表す。また、第１〜第４演算処理が評価関数の候補Ｊｍｉｎｊと収縮力指令値の指令値候補ｕｆｉｊ，ｕｅｉｊを演算する方法は同様であるため、本第１実施形態では第１演算処理における演算方法を詳細に述べ、第２〜第４演算処理における演算方法は簡潔に述べる。
【００７２】
（２．２．１  第１演算処理の設計）
第１演算処理における収縮力指令値の第１指令値候補ｕｆｉ１，ｕｅｉ１のうち、第１指令値候補ｕｅ１１、ｕｅ２１、ｕｅ３１は、図４の条件１と式（１６）により、
【００７３】
【数１９】
2014004654.tif 000021
となる。つまり、収縮力指令値演算部１５２は、式（１０）に示す第１関数及び式（１１）に示す第２関数において、ｕｅ１１＝０，ｕｅ２１＝０，ｕｅ３１＝０とする。従って、評価関数Ｊは、第１指令値候補ｕｆ１１、ｕｆ２１、ｕｆ３１の最大値となる。
【００７４】
また、式（１０）、式（１１）及び式（１８）より、関節トルク指令値Ｔ１，Ｔ２は、収縮力指令値の第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１を用いて、
【００７５】
【数２０】
2014004654.tif 000022
と表すことができる。ここで、変数ｕｆ３１’を、
【００７６】
【数２１】
2014004654.tif 000023
と定義する。式（１９）及び式（２０）は変数ｕｆ３１’を用いて、
【００７７】
【数２２】
2014004654.tif 000024
と表すことができる。ただし、変数ｕｆ３１’の変域は、第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１が全て正数となる範囲である必要がある。
【００７８】
式（２１）〜式（２３）により、第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１は全てｕｆ３１’を変数とする一次関数となることがわかる。そこで、本第１実施形態では、Ｘ軸を変数ｕｆ３１’と、Ｙ軸を第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１とする直線ｕｆ１１，ｕｆ２１，ｕｆ３１のグラフを描画する。そして、変数ｕｆ３１’を増減させて、Ｘ座標を変数ｕｆ３１’とするＹ軸と平行な直線をＸ軸の正側と負側に移動させることで、交点の軌跡から評価関数Ｊの最小値を求める。
【００７９】
図７は、直線ｕｆ１１，ｕｆ２１，ｕｆ３１の一例を示すグラフである。直線ｕｆ１１は点線、直線ｕｆ２１は破線、直線ｕｆ３１は実線を用いて表している。また、Ｙ軸と平行な直線を、一点鎖線を用いて表している。さらに、変数ｕｆ３１’の変域を、矢印を用いて表している。そして、直線ｕｆ１１，ｕｆ２１，ｕｆ３１とＹ軸と平行な直線の交点のうち、Ｙ座標が最大となる点を点Ｚと定義する。ここで、Ｙ軸と平行な直線と、直線ｕｆ１１，ｕｆ２１，ｕｆ３１の交点のＹ座標が求めるべき第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１であることから、点ＺのＹ座標は評価関数Ｊの値を表すことがわかる。
【００８０】
図７に示す例では、直線ｕｆ１１と直線ｕｆ３１の交点において評価関数Ｊが最小となる。なぜなら、変数ｕｆ３１’を減少させると点Ｚは直線ｕｆ１１に従って移動し、変数ｕｆ３１’を増加させると直線ｕｆ３１に従って移動するため、どちらの場合においても評価関数Ｊの値が増加してしまうためである。
【００８１】
ただし、評価関数Ｊは常に直線ｕｆ１１とｕｆ３１の交点において最小となるわけではない。それは、各直線のＸ切片、Ｙ切片、交点のＸ座標とＹ座標の大きさが、係数Ｋｆ１，Ｋｆ２，Ｋｆ３と関節トルク指令値Ｔ１，Ｔ２に依存して変化するためである。
【００８２】
そこで、本第１実施形態では、各直線のＸ切片、Ｙ切片、交点のＸ座標とＹ座標の大きさに基づく場合分けの条件を導出し、それぞれの場合において評価関数Ｊが最小となる点を求める。ただし、直線ｕｆ１１と直線ｕｆ２１の両方を動かすと、場合分けの条件が複雑となってしまう。そこで、本第１実施形態では説明を容易にするために、直線ｕｆ１１のＸ切片とＹ切片を固定して図示する。そして、直線ｕｆ２１のＸ切片とＹ切片を原点からＸ軸とＹ軸の正の方向に、徐々に図上で移動させるときの直線ｕｆ１１，ｕｆ２１，ｕｆ３１のグラフを図示し、評価関数Ｊが最小値を取る点を求める。
【００８３】
図８及び図９は、直線ｕｆ１１，ｕｆ２１，ｕｆ３１の別の例を示すグラフである。まず、図８（ａ）及び図８（ｂ）と図９（ａ）及び図９（ｂ）とに、直線ｕｆ１１，ｕｆ２１，ｕｆ３１と補助線を点線、破線、実線、一点鎖線を用いて、それぞれ表す。なお、図８（ａ）は、直線ｕｆ２１のＸ切片及びＹ切片が、直線ｕｆ１１のＸ切片及びＹ切片と比べて十分に小さいときのグラフを、図８（ｂ）は、直線ｕｆ２１のＸ切片をＸ軸の正方向へ移動させたときのグラフを表す。また、図９（ａ）は、図８（ｂ）と比べて直線ｕｆ２１のＹ切片をＹ軸の正方向へ移動させたときのグラフを、図９（ｂ）は、直線ｕｆ２１のＸ切片及びＹ切片をＸ軸及びＹ軸の正方向に十分に大きく移動させたときのグラフを表す。
【００８４】
次に、直線ｕｆ１１と直線ｕｆ３１の交点を点Ａ１、点Ａ１を通りＹ軸と平行な直線と直線ｕｆ２１の交点を点Ｂ１、直線ｕｆ２１とＸ軸との交点をＣ１、点Ｃ１を通りＹ軸と平行な直線と直線ｕｆ１１との交点をＤ１とする。また、直線ｕｆ２１と直線ｕｆ３１の交点を点Ｅ１、点Ｅ１を通りＹ軸と平行な直線と直線ｕｆ１１の交点を点Ｆ１、直線ｕｆ１１とＸ軸との交点を点Ｇ１、点Ｇ１を通りＹ軸と平行な直線と直線ｕｆ２１との交点をＨ１とする。なお、各点の下付きの添え字は対応する演算処理の番号を表す。
【００８５】
ここで、式（１８）〜式（２０）より、点Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１，Ｇ１，Ｈ１のｘ座標ｘａ１，ｘｂ１，ｘｃ１，ｘｄ１，ｘｅ１，ｘｆ１，ｘｇ１，ｘｈ１とｙ座標ｙａ１，ｙｂ１，ｙｃ１，ｙｄ１，ｙｅ１，ｙｆ１，ｙｇ１，ｙｈ１は、
【００８６】
【数２３】
2014004654.tif 000025
となる。なお、各座標の下付きの添え字は対応する点を表す。
【００８７】
図８（ａ）及び図８（ｂ）に示すように、直線ｕｆ２１のＹ切片が直線ｕｆ１１のＹ切片と比べて十分に小さいとき、点Ａ１が点Ｂ１に対してＹ軸の正側に存在するため、座標ｙａ１，ｙｂ１は、
【００８８】
【数２４】
2014004654.tif 000026
を満たす。また、図８（ａ）に示すように、直線ｕｆ２１のＸ切片が直線ｕｆ１１のＸ切片と比べて十分に小さいとき、点Ａ１は点Ｃ１に対してＸ軸の正側に存在するため、座標ｘａ１，ｘｃ１は、
【００８９】
【数２５】
2014004654.tif 000027
を満たす。このとき、変数ｕｆ３１’の変域は、
【００９０】
【数２６】
2014004654.tif 000028
となるため、図８（ａ）より、評価関数Ｊは点Ｄ１において最小値を取ることがわかる。従って、式（３２）及び式（３３）が成立するとき、評価関数Ｊの最小値Ｊｍｉｎ１は、
【００９１】
【数２７】
2014004654.tif 000029
となり、第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１はそれぞれ、
【００９２】
【数２８】
2014004654.tif 000030
となる。また、図８（ｂ）に示すように、点Ｃ１が点Ａ１に対してＸ軸の正側に存在するように、直線ｕｆ２１のＸ切片を移動すると、座標ｘａ１，ｘｃ１は、
【００９３】
【数２９】
2014004654.tif 000031
を満たすこととなる。このとき、図８（ｂ）より、座標ｘａ１は変数ｕｆ３１’の変域内に存在し、評価関数Ｊは点Ａ１において最小値を取ることがわかる。従って、式（３２）及び式（３７）が成立するとき、評価関数Ｊの最小値Ｊｍｉｎ１は、
【００９４】
【数３０】
2014004654.tif 000032
となる。第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１はそれぞれ、
【００９５】
【数３１】
2014004654.tif 000033
となる。
【００９６】
さらに、図９（ａ）及び図９（ｂ）に示すように、点Ｂ１が点Ａ１に対してＹ軸の正側に存在するように直線ｕｆ２１のＹ切片を移動すると、座標ｙａ１，ｙｂ１は、
【００９７】
【数３２】
2014004654.tif 000034
を満たすこととなる。ここで、図９（ａ）に示すように、点Ｅ１が点Ｇ１に対して、Ｘ軸の負側に存在するとき、すなわち、座標ｘｅ１，ｘｇ１が、
【００９８】
【数３３】
2014004654.tif 000035
を満たすとき、評価関数Ｊは点Ｅ１において最小値を取る。従って、式（４０）及び式（４１）が同時に成り立つとき、評価関数Ｊの最小値Ｊｍｉｎ１は、
【００９９】
【数３４】
2014004654.tif 000036
となる。第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１はそれぞれ、
【０１００】
【数３５】
2014004654.tif 000037
となる。また、図９（ｂ）に示すように、点Ｅ１が点Ｇ１に対してＸ軸の正側に存在するように、直線ｕｆ２１のＸ切片とＹ切片をさらに正側に移動させると、座標ｘｅ１，ｘｇ１は、
【０１０１】
【数３６】
2014004654.tif 000038
を満たすこととなる。このとき、図９（ｂ）より、座標ｘｅ１は変数ｕｆ３１’の変域に含まれないため、評価関数Ｊは点Ｈ１において最小値を取ることがわかる。従って、式（４０）及び式（４４）が同時に成り立つとき、評価関数Ｊの最小値Ｊｍｉｎ１は、
【０１０２】
【数３７】
2014004654.tif 000039
となり、第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１はそれぞれ、
【０１０３】
【数３８】
2014004654.tif 000040
となる。
【０１０４】
なお、本第１実施形態では、式（３５）、式（３８）、式（４２）、式（４５）を用いて評価関数Ｊの最小値Ｊｍｉｎ１を演算する場合を、それぞれＣａｓｅ１１、Ｃａｓｅ１２、Ｃａｓｅ１３、Ｃａｓｅ１４と定義する。ただし、Ｃａｓｅに続く番号は、第１〜４演算処理のうち、対応する演算処理の番号を表す。
【０１０５】
図１０は、収縮力指令値演算部による第１演算処理のフローチャートである。図１０に示すように、収縮力指令値演算部１５２は、第１演算処理として、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（１８）に示すように、ｕｅ１＝０，ｕｅ２＝０，ｕｅ３＝０とする（Ｓ３１）。
【０１０６】
次に、収縮力指令値演算部１５２は、式（２４）及び式（２５）を演算する（Ｓ３２）。次に、収縮力指令値演算部１５２は、ｙａ１≧ｙｂ１であるか否かを判断する（Ｓ３３）。収縮力指令値演算部１５２は、ｙａ１≧ｙｂ１である場合（Ｓ３３：Ｙｅｓ）、式（２６）を演算する（Ｓ３４）。次に、収縮力指令値演算部１５２は、ｘａ１≧ｘｃ１であるか否かを判断する（Ｓ３５）。収縮力指令値演算部１５２は、ｘａ１≧ｘｃ１である場合（Ｓ３５：Ｙｅｓ）、式（２７）を演算し（Ｓ３６）、式（３５）及び式（３６）を導き出す（Ｓ３７：Ｃａｓｅ１１）。
【０１０７】
また、収縮力指令値演算部１５２は、ｘａ１≧ｘｃ１ではない場合（Ｓ３５：Ｎｏ）、式（３８）及び式（３９）を導き出す（Ｓ３８：Ｃａｓｅ１２）。
【０１０８】
また、収縮力指令値演算部１５２は、ｙａ１≧ｙｂ１ではない場合（Ｓ３３：Ｎｏ）、式（２８）、式（２９）及び式（３０）を演算する（Ｓ３９）。次に、収縮力指令値演算部１５２は、ｘｅ１＜ｘｇ１であるか否かを判断する（Ｓ４０）。次に、収縮力指令値演算部１５２は、ｘｅ１＜ｘｇ１である場合（Ｓ４０：Ｙｅｓ）、式（４２）及び式（４３）を導き出す（Ｓ４１：Ｃａｓｅ１３）。
【０１０９】
また、収縮力指令値演算部１５２は、ｘｅ１＜ｘｇ１ではない場合（Ｓ４０：Ｎｏ）、式（３０）及び式（３１）を演算し（Ｓ４２）、式（４５）及び式（４６）を導き出す（Ｓ４３：Ｃａｓｅ１４）。
【０１１０】
このように、収縮力指令値演算部１５２は、式（３２）、式（３３）及び式（４１）に示す場合分けを行う。そして、それぞれの場合について、評価関数Ｊの最小値Ｊｍｉｎ１と第１指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第１指令値候補を演算する第１演算処理を実行する。
【０１１１】
なお、本実施形態では式（２１）で定義する変数ｕｆ３１’を用いて、評価関数Ｊを最小化する指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１を導出するが、評価関数Ｊの最小値と指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１は変数の選び方に依存しない。なぜなら、評価関数Ｊの最小値は指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１によって決定されるが、指令値候補ｕｆ１１，ｕｆ２１，ｕｆ３１は変数の選び方によらず式（１９）と式（２０）を満たすように増減するためである。このことは、以下に述べる第２〜４演算処理においても同様に成り立つ。
【０１１２】
（２．２．２  第２演算処理の設計）
第２演算処理における収縮力指令値の第２指令値候補ｕｅ１２，ｕｆ２２，ｕｅ３２は、図４の条件２と式（１６）より、
【０１１３】
【数３９】
2014004654.tif 000041
となるため、評価関数Ｊは第２指令値候補ｕｆ１２，ｕｅ２２，ｕｆ３２の最大値となる。そこで、第１演算処理と同様に変数ｕｆ３２’を、
【０１１４】
【数４０】
2014004654.tif 000042
と定義する。変数ｕｆ３２’を用いて第２指令値候補ｕｆ１２，ｕｅ２２を、
【０１１５】
【数４１】
2014004654.tif 000043
とする。そして、Ｘ軸を変数ｕｆ３２’と、Ｙ軸を第２指令値候補ｕｆ１２，ｕｅ２２，ｕｆ３２とする３つの直線ｕｆ１２，ｕｅ２２，ｕｆ３２のグラフを描画する。さらに、直線ｕｆ１２のＸ切片とＹ切片を固定し、直線ｕｅ２２のＸ切片とＹ切片を原点から移動させると、第２演算処理においてはＣａｓｅ２１、Ｃａｓｅ２２、Ｃａｓｅ２３、Ｃａｓｅ２４の４通りの場合分けが必要となる。
【０１１６】
図１１は、収縮力指令値演算部による第２演算処理のフローチャートである。図１１に示すように、収縮力指令値演算部１５２は、第２演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（４７）に示すように、ｕｅ１＝０，ｕｆ２＝０，ｕｅ３＝０とする（Ｓ５１）。
【０１１７】
次に、収縮力指令値演算部１５２は、ｙａ２，ｙｂ２を演算し（Ｓ５２）、ｙｂ２≦ｙａ２であるか否かを判断する（Ｓ５３）。収縮力指令値演算部１５２は、ｙｂ２≦ｙａ２である場合（Ｓ５３：Ｙｅｓ）、ｘｃ２，ｘａ２を演算し（Ｓ５４）、ｘｃ２＜ｘａ２であるか否かを判断する（Ｓ５５）。収縮力指令値演算部１５２は、ｘｃ２＜ｘａ２である場合（Ｓ５５：Ｙｅｓ）、ｕｆ１２＝ｙａ２，ｕｅ２２＝ｙｂ２，ｕｆ３２＝ｙａ２，Ｊｍｉｎ２＝ｙａ２を導き出す（Ｓ５６：Ｃａｓｅ２１）。
【０１１８】
また、収縮力指令値演算部１５２は、ｘｃ２＜ｘａ２ではない場合（Ｓ５５：Ｎｏ）、ｘｃ２≦ｘｄ２であるか否かを判断する（Ｓ５７）。次に、収縮力指令値演算部１５２は、ｘｃ２≦ｘｄ２である場合（Ｓ５７：Ｙｅｓ）、ｙｅ２，ｙｆ２を演算し（Ｓ５８）、ｕｆ１２＝ｙｆ２，ｕｅ２２＝０，ｕｆ３２＝ｙｅ２，Ｊｍｉｎ２＝ｙｅ２を導き出す（Ｓ５９：Ｃａｓｅ２２）。
【０１１９】
また、収縮力指令値演算部１５２は、ｘｃ２≦ｘｄ２ではない場合（Ｓ５７：Ｎｏ）、ｕｆ１２＝ｕｅ２２＝ｕｆ３２＝０，Ｊｍｉｎ２＝０を導き出す（Ｓ６０：Ｃａｓｅ２３）。
【０１２０】
また、収縮力指令値演算部１５２は、ｙｂ２≦ｙａ２ではない場合（Ｓ５３：Ｎｏ）、ｙｇ２，ｙｈ２を演算し（Ｓ６１）、ｕｆ１２＝０，ｕｅ２２＝ｙｈ２，ｕｆ３２＝ｙｇ２，Ｊｍｉｎ２＝ｙｇ２を導き出す（Ｓ６２：Ｃａｓｅ２４）。
【０１２１】
なお、Ｃａｓｅ２３では、第２指令値候補ｕｆ１２，ｕｅ２２，ｕｆ３２を全て正数とすることができない。そこで、後述する筋指令選択部において候補から外すために、第２指令値候補ｕｆｉ２，ｕｅｉ２と最小値Ｊｍｉｎ２を０とおく。
【０１２２】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ２と第２指令値候補ｕｆ１２，ｕｅ２２，ｕｆ３２を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第２指令値候補を演算する第２演算処理を実行する。
【０１２３】
（２．２．３  第３演算処理の設計）
第３演算処理における収縮力指令値の第３指令値候補ｕｆ１３，ｕｅ２３，ｕｅ３３は、図４の条件３と式（１６）より、
【０１２４】
【数４２】
2014004654.tif 000044
となるため、評価関数Ｊは第３指令値候補ｕｅ１３，ｕｆ２３，ｕｆ３３の最大値となる。そこで、第１演算処理と同様に変数ｕｆ３３’を、
【０１２５】
【数４３】
2014004654.tif 000045
と定義する。第３指令値候補ｕｅ１３，ｕｆ２３は、
【０１２６】
【数４４】
2014004654.tif 000046
と表すことができる。ここで、
【０１２７】
【数４５】
2014004654.tif 000047
と定義する。変数ｕｆ１３’，ｕｅ２３’と定数Ｋｆ１’，Ｋｅ２’，Ｔ１’，Ｔ２’を用いて式（５３）及び式（５４）を表すと、
【０１２８】
【数４６】
2014004654.tif 000048
となる。式（４９）と式（５９）、式（５０）と式（５８）を比較すると、第３演算処理の場合分けは、第２演算処理と等価であることがわかる。従って、第３演算処理においてはＣａｓｅ３１、Ｃａｓｅ３２、Ｃａｓｅ３３、Ｃａｓｅ３４の４通りの場合分けが必要となる。
【０１２９】
図１２は、収縮力指令値演算部による第３演算処理のフローチャートである。図１２に示すように、本第１実施形態の第３演算処理は、式（５５）〜式（５７）に示す変数変換と第２演算処理を用いて場合分けを行う。
【０１３０】
即ち、収縮力指令値演算部１５２は、第３演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（５１）に示すように、ｕｆ１＝０，ｕｅ２＝０，ｕｅ３＝０とする（Ｓ７１）。次に、収縮力指令値演算部１５２は、式（５６）及び式（５７）のように定義し（Ｓ７２）、第２演算処理と同様の演算を行う（Ｓ７３）。その際、収縮力指令値演算部１５２は、式（５５）のように定義する（Ｓ７４）。
【０１３１】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ３と第３指令値候補ｕｅ１３，ｕｆ２３，ｕｆ３３を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第３指令値候補を演算する第３演算処理を実行する。
【０１３２】
（２．２．４  第４演算処理の設計）
第４演算処理における収縮力指令値の第４指令値候補ｕｆ１４，ｕｆ２４，ｕｅ３４は、図４の条件４と式（１６）より、
【０１３３】
【数４７】
2014004654.tif 000049
となるため、評価関数Ｊは第４指令値候補ｕｅ１４，ｕｅ２４，ｕｆ３４の最大値となる。そこで、第１演算処理と同様に変数ｕｆ３４’を、
【０１３４】
【数４８】
2014004654.tif 000050
と定義する。変数ｕｆ３４’を用いて第４指令値候補ｕｅ１４，ｕｅ２４を、
【０１３５】
【数４９】
2014004654.tif 000051
とする。そして、Ｘ軸を変数ｕｆ３４’と、Ｙ軸を第４指令値候補ｕｅ１４，ｕｅ２４，ｕｆ３４とする３つの直線ｕｅ１４，ｕｅ２４，ｕｆ３４のグラフを描画する。さらに、直線ｕｅ１４のＸ切片とＹ切片を固定して図示し、直線ｕｅ２４のＸ切片とＹ切片を図上で移動させると、第４演算処理においては、Ｃａｓｅ４１、Ｃａｓｅ４２、Ｃａｓｅ４３、Ｃａｓｅ４４の４通りの場合分けが必要となる。
【０１３６】
図１３は、収縮力指令値演算部による第４演算処理のフローチャートである。収縮力指令値演算部１５２は、第４演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（６０）に示すように、ｕｆ１＝０，ｕｆ２＝０，ｕｅ３＝０とする（Ｓ８１）。
【０１３７】
次に、収縮力指令値演算部１５２は、ｘａ４，ｘｂ４を演算する（Ｓ８２）。次に、収縮力指令値演算部１５２は、ｘｂ４＜ｘａ４であるか否かを判断する（Ｓ８３）。収縮力指令値演算部１５２は、ｘｂ４＜ｘａ４であると判断した場合は（Ｓ８３：Ｙｅｓ）、ｙｃ４，ｙｄ４を演算する（Ｓ８４）。そして、収縮力指令値演算部１５２は、ｕｅ１４＝０，ｕｅ２４＝ｙｅ４，ｕｆ３４＝ｙｃ４を導き出す（Ｓ８５）。
【０１３８】
次に、収縮力指令値演算部１５２は、ｙｄ４＜ｙｃ４であるか否かを判断する（Ｓ８６）。そして、収縮力指令値演算部１５２は、ｙｄ４＜ｙｃ４であると判断した場合は（Ｓ８６：Ｙｅｓ）、Ｊｍｉｎ４＝ｙｃ４とする（Ｓ８７：Ｃａｓｅ４１）。また、収縮力指令値演算部１５２は、ｙｄ４＜ｙｃ４ではないと判断した場合は（Ｓ８６：Ｎｏ）、Ｊｍｉｎ４＝ｙｄ４とする（Ｓ８８：Ｃａｓｅ４２）。
【０１３９】
また、収縮力指令値演算部１５２は、ｘｂ４＜ｘａ４ではないと判断した場合は（Ｓ８３：Ｎｏ）、ｙｅ４，ｙｆ４を演算する（Ｓ８９）。そして、収縮力指令値演算部１５２は、ｕｅ１４＝ｙｅ４，ｕｅ２４＝０，ｕｆ３４＝ｙｆ４を導き出す（Ｓ９０）。
【０１４０】
次に、収縮力指令値演算部１５２は、ｙｅ４＜ｙｆ４であるか否かを判断する（Ｓ９１）。そして、収縮力指令値演算部１５２は、ｙｅ４＜ｙｆ４であると判断した場合は（Ｓ９１：Ｙｅｓ）、Ｊｍｉｎ４＝ｙｆ４とする（Ｓ９２：Ｃａｓｅ４３）。また、収縮力指令値演算部１５２は、ｙｅ４＜ｙｆ４ではないと判断した場合は（Ｓ９１：Ｎｏ）、Ｊｍｉｎ４＝ｙｅ４とする（Ｓ９３：Ｃａｓｅ４４）。
【０１４１】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ４と収縮力指令値の第４指令値候補ｕｅ１４，ｕｅ２４，ｕｆ３４を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第４指令値候補を演算する第４演算処理を実行する。
【０１４２】
（２．３  第１指令選択処理）
収縮力指令値演算部１５２は、第１指令選択処理では、評価関数の最小値Ｊｍｉｎの候補Ｊｍｉｎ１，Ｊｍｉｎ２，Ｊｍｉｎ３，Ｊｍｉｎ４のうち、最小となるものを選び出す。そして、収縮力指令値演算部１５２は、そのときの指令値候補を、収縮力指令値ｕｆｉ，ｕｅｉとして出力する。
【０１４３】
図１４は、収縮力指令値演算部による第１指令選択処理のフローチャートである。まず、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎと収縮力指令値ｕｆｉ，ｕｅｉを、第１演算処理で演算した最小値の候補Ｊｍｉｎ１と収縮力指令値の第１指令値候補ｕｆｉ１，ｕｅｉ１とする（Ｓ１０１）。次に、収縮力指令値演算部１５２は、Ｊｍｉｎ２＞０であるか否かを判断し（Ｓ１０２）、Ｊｍｉｎ２＞０である場合（Ｓ１０２：Ｙｅｓ）、以下の式（６４）、即ちＪｍｉｎ＞Ｊｍｉｎ２であるか否かを判断する（Ｓ１０３）。
【０１４４】
【数５０】
2014004654.tif 000052
【０１４５】
収縮力指令値演算部１５２は、Ｊｍｉｎ＞Ｊｍｉｎ２であると判断した場合（Ｓ１０３：Ｙｅｓ）、ＪｍｉｎをＪｍｉｎ２とし、ｕｆｉ，ｕｅｉをｕｆｉ２，ｕｅｉ２とする（Ｓ１０４）。
【０１４６】
次に、収縮力指令値演算部１５２は、Ｊｍｉｎ３＞０であるか否かを判断し（Ｓ１０５）、Ｊｍｉｎ３＞０である場合（Ｓ１０５：Ｙｅｓ）、Ｊｍｉｎ＞Ｊｍｉｎ３であるか否かを判断する（Ｓ１０６）。収縮力指令値演算部１５２は、Ｊｍｉｎ＞Ｊｍｉｎ３であると判断した場合（Ｓ１０６：Ｙｅｓ）、ＪｍｉｎをＪｍｉｎ３とし、ｕｆｉ，ｕｅｉをｕｆｉ３，ｕｅｉ３とする（Ｓ１０７）。
【０１４７】
次に、収縮力指令値演算部１５２は、Ｊｍｉｎ＞Ｊｍｉｎ４であるか否かを判断する（Ｓ１０８）。収縮力指令値演算部１５２は、Ｊｍｉｎ＞Ｊｍｉｎ４であると判断した場合（Ｓ１０８：Ｙｅｓ）、ＪｍｉｎをＪｍｉｎ４とし、ｕｆｉ，ｕｅｉをｕｆｉ４，ｕｅｉ４とする（Ｓ１０９）。
【０１４８】
ここで、２．２節で述べたように、第２，第３演算処理において、収縮力を全て正数とすることができないときは、最小値の候補Ｊｍｉｎ２，Ｊｍｉｎ３を０とした。そこで、収縮力指令値演算部１５２は、第１筋指令選択処理では、候補Ｊｍｉｎ２，Ｊｍｉｎ３が０より大きい場合にのみ、最小値Ｊｍｉｎと収縮力指令値ｕｆｉ，ｕｅｉの更新を行う。
【０１４９】
以上、収縮力指令値演算部１５２は、第１〜第４指令値候補のうち、評価関数が最小の指令値候補を、指令値出力処理にて出力する第１〜第６収縮力指令値として選択する指令選択処理を実行する。
【０１５０】
本第１実施形態によれば、収縮力指令値である制御入力を最適化する場合分けアルゴリズムにより、手先柔軟性の目標軌道が一意に決定されるため、最小の制御入力で人工筋肉アクチュエータｆｉ，ｅｉを拮抗駆動することが可能となる。制御入力を最小にすることで、例えばＭｃＫｉｂｂｅｎ型人工筋肉では消費する空気の量を最小にすることができる。これにより、タンク等の搭載型の空気源を用いるロボット１００では稼働時間を延長することが可能となる。
【０１５１】
［第２実施形態］
次に、本発明の第２実施形態のロボットについて説明する。本第２実施形態では、上記第１実施形態の制御方法にさらに分岐条件を加えることによって、各関節トルク指令値が正数と負数の両方を取るときにも制御入力である収縮力指令値の導出が可能であることを示す。なお、本第２実施形態において、装置構成は、上記第１実施形態における図２及び図３と同様であり、制御装置の制御動作が異なるものであるため、装置構成についての詳細な説明は省略し、制御装置の制御動作について詳細に説明する。
【０１５２】
本第２実施形態では、関節トルク指令値Ｔ１，Ｔ２が負数となる場合を考慮する収縮力の制御方法を導出する。これにより、任意の関節角度の目標軌道において、収縮力の最大値を最小化することが可能となる。
【０１５３】
（１モデル導出）
本第２実施形態では第１実施形態と同じモデルを用いる。
【０１５４】
（２  制御系設計）
本第２実施形態において、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２の符号に基づいて、筋トルクτ１，τ２，τ３の符号の組み合わせを仮定する点が上記第１実施形態と異なる。
【０１５５】
（２．１  関節トルク指令値の符号に基づく場合分け）
関節トルク指令値が負数となる場合は、図４に示す筋トルクτ１，τ２，τ３の符号の組み合わせのうち、筋トルクτ３が負数となる場合を考慮する必要がある。なぜなら、関節トルク指令値Ｔ１が負数のとき、筋トルクτ３を負数とすれば第１単関節筋の収縮力を低減することが可能となるためである。
【０１５６】
このように、関節トルク指令値Ｔ１，Ｔ２のどちらかが負数となるときと、どちらも正数となるときでは、考慮すべき筋トルクτ１，τ２，τ３の符号の組み合わせが異なる。そこで、関節トルク指令値Ｔ１，Ｔ２の符号に基づいて、考慮すべき筋トルクτ１，τ２，τ３の符号の組み合わせの場合分けを行う。
【０１５７】
まず、関節トルク指令値Ｔ１が正数となりＴ２が負数となるときを考える。図４において、筋トルクτ１，τ３をどちらも負数とする条件７及び条件８の組み合わせを仮定すると、式（９）より、関節トルク指令値Ｔ１は負数となる。また、筋トルクτ２，τ３をどちらも正数とする条件１と条件３の組み合わせを仮定すると、関節トルク指令値Ｔ２は正数となる。これらのことから、関節トルク指令値Ｔ１が正数となり関節トルク指令値Ｔ２が負数となるときは、条件２、条件４、条件５、条件６の組み合わせを仮定して、評価関数Ｊを最小化するｕｆｉ，ｕｅｉを導出すればよいことが分かる。
【０１５８】
なお、本第２実施形態では、関節トルク指令値Ｔ１が正数となり関節トルク指令値Ｔ２が負数となるときは、関節トルク指令値Ｔ１が負数となり関節トルク指令値Ｔ２が正数となるときの演算方法を用いて収縮力指令値を演算する。
【０１５９】
また、関節トルク指令値Ｔ１，Ｔ２がどちらも負数となるときは、関節トルク指令値Ｔ１，Ｔ２がどちらも正数となる場合の演算方法を用いて収縮力を演算する。さらに、本発明では関節トルク指令値Ｔ１，Ｔ２が０となる場合は、正数である場合と同一の処理を行う。
【０１６０】
収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２の符号に基づく場合分けを行い、筋トルクτ１，τ２，τ３の符号の候補を選択する。そして、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２のうち、一方が正数となり他方が負数となる場合、即ち、関節トルク指令値Ｔ１と関節トルク指令値Ｔ２とが異符号の場合には、第２最小化演算処理と第２指令選択処理を実行する。これにより収縮力指令値を演算する。
【０１６１】
また、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２がどちらも正数又は負数となる場合、即ち、関節トルク指令値Ｔ１と関節トルク指令値Ｔ２とが同符号の場合には、上記第１実施形態と同様に、第１最小化演算処理と第１指令選択処理を実行する。これにより収縮力指令値を演算する。
【０１６２】
図１５は、本発明の第２実施形態に係るロボットの収縮力指令値演算部の処理動作を示すフローチャートである。まず、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１，Ｔ２をフィードフォワード補償部１５１から入力すると共に、不図示の上位コントローラから目標関節角度θ１，θ２、目標関節角速度ω１，ω２を入力する（Ｓ１１０）。なお、弾性力定数ｋ、粘性力定数ｃ及びモーメントアーム径ｒは、予め設定された値である。
【０１６３】
次に、収縮力指令値演算部１５２は、式（１２）を用いて、目標関節角度θ１，θ２、目標関節角速度ω１，ω２から係数Ｋｆｉ，Ｋｅｉを算出する（Ｓ１１１）。次に、収縮力指令値演算部１５２は、Ｔ１≧０であるか否かを判断する（Ｓ１１２）。収縮力指令値演算部１５２は、Ｔ１≧０であると判断した場合（Ｓ１１２：Ｙｅｓ）、Ｔ２≧０であるか否かを判断する（Ｓ１１３）。
【０１６４】
収縮力指令値演算部１５２は、Ｔ２≧０であると判断した場合（Ｓ１１３：Ｙｅｓ）、式（１０）に示す第１関数、及び式（１１）に示す第２関数に、係数Ｋｆｉ，Ｋｅｉ及び関節トルク指令値Ｔ１，Ｔ２を定数として代入する（Ｓ１１４）。即ち、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１と関節トルク指令値Ｔ２とが同符号の場合、ステップＳ１１４の処理を実行する。
【０１６５】
次に、収縮力指令値演算部１５２は、上記第１実施形態で説明した第１最小化演算処理を実行する（Ｓ１１５）。次に、収縮力指令値演算部１５２は、評価関数Ｊｍｉｎ１〜４及び指令値候補ｕｆｉ１〜４，ｕｅｉ１〜４に対し（Ｓ１１６）、評価関数が最小の指令値候補を選択する、上記第１実施形態と同様の第１指令選択処理を実行する（Ｓ１１７）。次に、収縮力指令値演算部１５２は、演算した第１〜第６収縮力指令値ｕｆｉ，ｕｅｉを収縮力発生部１５３に出力する指令値出力処理を実行する（Ｓ１１８：指令値出力処理工程）。
【０１６６】
また、収縮力指令値演算部１５２は、Ｔ２≧０ではないと判断した場合（Ｓ１１３：Ｎｏ）、式（１０）に示す第１関数、及び式（１１）に示す第２関数に、係数Ｋｆｉ，Ｋｅｉ及び関節トルク指令値Ｔ１，Ｔ２を定数として代入する（Ｓ１１９）。即ち、収縮力指令値演算部１５２は、関節トルク指令値Ｔ１と関節トルク指令値Ｔ２とが同符号の場合、ステップＳ１１９の処理を実行する。
【０１６７】
次に、収縮力指令値演算部１５２は、後述する、評価関数Ｊを最小化する指令値候補を演算する第２最小化演算処理を実行する（Ｓ１２０）。次に、収縮力指令値演算部１５２は、評価関数Ｊｍｉｎ５〜８及び指令値候補ｕｆｉ５〜８，ｕｅｉ５〜８に対し（Ｓ１２１）、評価関数が最小の指令値候補を選択する、後述する第２指令選択処理を実行する（Ｓ１２２）。次に、収縮力指令値演算部１５２は、演算した第１〜第６収縮力指令値ｕｆｉ，ｕｅｉを収縮力発生部１５３に出力する指令値出力処理を実行する（Ｓ１１８：指令値出力処理工程）。
【０１６８】
また、収縮力指令値演算部１５２は、Ｔ１≧０ではないと判断した場合（Ｓ１１２：Ｎｏ）、Ｔ２≧０であるか否かを判断する（Ｓ１２３）。次に、収縮力指令値演算部１５２は、Ｔ２≧０であると判断した場合（Ｓ１２３：Ｙｅｓ）、Ｋｆ１’＝Ｋｅ２，Ｋｅ１’＝Ｋｆ２，Ｋｆ２’＝Ｋｅ１，Ｋｅ２’＝Ｋｆ１，Ｔ１’＝Ｔ２，Ｔ２’＝Ｔ１を定義する（Ｓ１２４）。そして、収縮力指令値演算部１５２は、Ｋｆｉ’，Ｋｅｉ’，Ｔ１’，Ｔ２’を、式（１０）に示す第１関数、及び式（１１）に示す第２関数に代入する（Ｓ１２５）。
【０１６９】
次に、収縮力指令値演算部１５２は、後述する、評価関数Ｊを最小化する指令値候補を演算する第２最小化演算処理を実行する（Ｓ１２６）。次に、収縮力指令値演算部１５２は、ｕｆ１＝ｕｆ２’，ｕｅ１＝ｕｅ２’，ｕｆ２＝ｕｆ１’，ｕｅ２’＝ｕｆ１とする（Ｓ１２７）。次に、収縮力指令値演算部１５２は、評価関数Ｊｍｉｎ５〜８及び指令値候補ｕｆｉ５〜８，ｕｅｉ５〜８に対し（Ｓ１２８）、評価関数が最小の指令値候補を選択する、後述する第２指令選択処理を実行する（Ｓ１２９）。次に、収縮力指令値演算部１５２は、演算した第１〜第６収縮力指令値ｕｆｉ，ｕｅｉを収縮力発生部１５３に出力する指令値出力処理を実行する（Ｓ１１８：指令値出力処理工程）。
【０１７０】
また、収縮力指令値演算部１５２は、Ｔ２≧０ではないと判断した場合（Ｓ１２３：Ｎｏ）、Ｋｆｉ’＝Ｋｅｉ，Ｋｅｉ’＝Ｋｆｉ，Ｔ１’＝−Ｔ１，Ｔ２’＝−Ｔ２を定義する（Ｓ１３０）。そして、収縮力指令値演算部１５２は、Ｋｆｉ’，Ｋｅｉ’，Ｔ１’，Ｔ２’を、式（１０）に示す第１関数、及び式（１１）に示す第２関数に代入する（Ｓ１３１）。
【０１７１】
次に、収縮力指令値演算部１５２は、上記第１実施形態で説明した第１最小化演算処理を実行する（Ｓ１３２）。次に、収縮力指令値演算部１５２は、ｕｆｉ’＝ｕｅｉ，ｕｅｉ’＝ｕｆｉとする（Ｓ１３３）。次に、収縮力指令値演算部１５２は、評価関数Ｊｍｉｎ１〜４及び指令値候補ｕｆｉ１〜４，ｕｅｉ１〜４に対し（Ｓ１３４）、評価関数が最小の指令値候補を選択する、上記第１実施形態と同様の第１指令選択処理を実行する（Ｓ１３５）。
【０１７２】
即ち、収縮力指令値演算部１５２は、これらＳ１１１〜Ｓ１３５において、第１から第６収縮力指令値ｕｆｉ，ｕｅｉを演算する指令値演算処理を実行する（指令値演算処理工程）。
【０１７３】
次に、収縮力指令値演算部１５２は、演算した第１〜第６収縮力指令値ｕｆｉ，ｕｅｉを収縮力発生部１５３に出力する指令値出力処理を実行する（Ｓ１１８：指令値出力処理工程）。
【０１７４】
なお、第２最小化計算処理と第２指令値選択処理とは、上記第１実施形態の第１最小化計算処理と第１指令値選択処理と同様であるため、詳細な演算方法を省略する。
【０１７５】
（２．２  第２最小化演算処理における場合分け）
図１６は、収縮力指令値演算部による第２最小化演算処理のフローチャートである。収縮力指令値演算部１５２は、図４に示す第２条件を仮定し（Ｓ１４１）、第５演算処理を実行し（Ｓ１４２）、評価関数Ｊｍｉｎ５を最小化する第１〜第６収縮力指令値からなる第５指令値候補ｕｆｉ５，ｕｅｉ５を出力する（Ｓ１４３）。
【０１７６】
続いて、収縮力指令値演算部１５２は、図４に示す第４条件を仮定し（Ｓ１４４）、第６演算処理を実行し（Ｓ１４５）、評価関数Ｊｍｉｎ６を最小化する第１〜第６収縮力指令値からなる第６指令値候補ｕｆｉ６，ｕｅｉ６を出力する（Ｓ１４６）。
【０１７７】
続いて、収縮力指令値演算部１５２は、図４に示す第５条件を仮定し（Ｓ１４７）、第７演算処理を実行し（Ｓ１４８）、評価関数Ｊｍｉｎ７を最小化する第１〜第６収縮力指令値からなる第７指令値候補ｕｆｉ７，ｕｅｉ７を出力する（Ｓ１４９）。
【０１７８】
続いて、収縮力指令値演算部１５２は、図４に示す第６条件を仮定し（Ｓ１５０）、第８演算処理を実行し（Ｓ１５１）、評価関数Ｊｍｉｎ８を最小化する第１〜第６収縮力指令値からなる第８指令値候補ｕｆｉ８，ｕｅｉ８を出力する（Ｓ１５２）。
【０１７９】
第５、第６、第７、第８演算処理は、それぞれ、筋トルクτ１，τ２の符号を図４の条件２、４、５、６と仮定して、評価関数Ｊの最小値の候補Ｊｍｉｎｊと収縮力指令値の指令値候補ｕｆｉｊ、ｕｅｉｊを演算するサブルーチンである（ｊ＝５，６，７，８）。
【０１８０】
（２．２．１  第５演算処理の設計）
第５演算処理における収縮力指令値の第５指令値候補ｕｆｉ５，ｕｅｉ５のうち、第５指令値候補ｕｅ１５，ｕｆ２５，ｕｅ３５は、図４の条件２と式（１６）より、
【０１８１】
【数５１】
2014004654.tif 000053
となるため、評価関数Ｊは収縮力指令値の第５指令値候補ｕｆ１５，ｕｅ２５，ｕｆ３５の最大値となる。そこで、第１演算処理と同様に変数ｕｆ３５’を、
【０１８２】
【数５２】
2014004654.tif 000054
と定義する。変数ｕｆ３５’を用いて第５指令値候補ｕｆ１５，ｕｅ２５を、
【０１８３】
【数５３】
2014004654.tif 000055
とする。そして、Ｘ軸を変数ｕｆ３５’と、Ｙ軸を収縮力指令値の第５指令値候補ｕｆ１５，ｕｅ２５，ｕｆ３５とする３つの直線ｕｆ１５，ｕｅ２５，ｕｆ３５のグラフを描画する。さらに、直線ｕｆ１５のＸ切片とＹ切片を固定し、直線ｕｅ２５のＸ切片とＹ切片を図上で移動させると、第５演算処理においてはＣａｓｅ５１、Ｃａｓｅ５２、Ｃａｓｅ５３の３通りの場合分けが必要となることがわかる。
【０１８４】
図１７は、収縮力指令値演算部による第５演算処理のフローチャートである。図１７に示すように、収縮力指令値演算部１５２は、第５演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（６５）に示すように、ｕｅ１＝０，ｕｆ２＝０，ｕｅ３＝０とする（Ｓ１６１）。
【０１８５】
次に、収縮力指令値演算部１５２は、ｙａ５，ｙｂ５を演算し（Ｓ１６２）、ｘｃ５，ｙｃ５を演算する（Ｓ１６３）。次に、収縮力指令値演算部１５２は、ｙｂ５＜ｙａ５であるか否かを判断する（Ｓ１６４）。
【０１８６】
収縮力指令値演算部１５２は、ｙｂ５＜ｙａ５である場合（Ｓ１６４：Ｙｅｓ）、ｙｃ５＜ｙｄ５であるか否かを判断する（Ｓ１６５）。収縮力指令値演算部１５２は、ｙｃ５＜ｙｄ５である場合（Ｓ１６５：Ｙｅｓ）、ｙｅ５，ｙｆ５を演算し（１６６）、ｕｆ１５＝ｙｅ５，ｕｅ２５＝ｙｆ５，ｕｆ３５＝ｙｅ５，Ｊｍｉｎ５＝ｙｅ５を導き出す（Ｓ１６７：Ｃａｓｅ５１）。
【０１８７】
また、収縮力指令値演算部１５２は、ｙｃ５＜ｙｄ５ではない場合（Ｓ１６５：Ｎｏ）、ｕｆ１５＝ｙｃ５，ｕｅ２５＝ｙｃ５，ｕｆ３５＝ｙｄ５，Ｊｍｉｎ５＝ｙｄ５を導き出す（Ｓ１６８：Ｃａｓｅ５２）。
【０１８８】
また、収縮力指令値演算部１５２は、ｙｂ５＜ｙａ５ではない場合（Ｓ１６４：Ｎｏ）、ｕｆ１５＝ｙａ５，ｕｅ２５＝ｙｂ５，ｕｆ３５＝０，Ｊｍｉｎ５＝ｙｂ５を導き出す（Ｓ１６９：Ｃａｓｅ５３）。
【０１８９】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ５と第５指令値候補ｕｆ１５，ｕｅ２５，ｕｆ３５を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第５指令値候補を演算する第５演算処理を実行する。
【０１９０】
（２．２．２  第６演算処理の設計）
第６演算処理部における収縮力指令値の第６指令値候補ｕｆｉ６，ｕｅｉ６のうち、第６指令値候補ｕｆ１６，ｕｆ２６，ｕｅ３６は、図４の条件４と式（１６）より、
【０１９１】
【数５４】
2014004654.tif 000056
となるため、評価関数Ｊは収縮力指令値の第６指令値候補ｕｆ１６，ｕｆ２６，ｕｅ３６の最大値となる。そこで、変数ｕｆ３６’を、
【０１９２】
【数５５】
2014004654.tif 000057
と定義する。変数ｕｆ３６’を用いて収縮力指令値の第６指令値候補ｕｅ１６，ｕｅ２６を、
【０１９３】
【数５６】
2014004654.tif 000058
とする。そして、Ｘ軸を変数ｕｆ３６’と、Ｙ軸を収縮力指令値の第６指令値候補ｕｅ１６，ｕｅ２６，ｕｆ３６とする３つの直線ｕｅ１６，ｕｅ２６，ｕｆ３６のグラフを描画する。さらに、直線ｕｆ１２のＸ切片とＹ切片を固定し、直線ｕｆｅ２２のＸ切片とＹ切片を図上で移動させると、第６演算処理においてはＣａｓｅ６１、Ｃａｓｅ６２の２通りの場合分けが必要となる。
【０１９４】
図１８は、収縮力指令値演算部による第６演算処理のフローチャートである。図１８に示すように、収縮力指令値演算部１５２は、第６演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（６９）に示すように、ｕｆ１＝０，ｕｆ２＝０，ｕｅ３＝０とする（Ｓ１７１）。
【０１９５】
次に、収縮力指令値演算部１５２は、ｘａ６，ｙｂ６を演算し（Ｓ１７２）、ｙｃ６＝ｘａ６とする（Ｓ１７３）。次に、収縮力指令値演算部１５２は、ｕｅ１６＝０，ｕｅ２６＝ｙｂ６，ｕｆ３６＝ｙｃ６とする（Ｓ１７４）。次に、収縮力指令値演算部１５２は、ｙｂ６＜ｙｃ６であるか否かを判断する（Ｓ１７５）。
【０１９６】
収縮力指令値演算部１５２は、ｙｂ６＜ｙｃ６である場合（Ｓ１７５：Ｙｅｓ）、Ｊｍｉｎ６＝ｙｃ６を導き出し（Ｓ１７６：Ｃａｓｅ６１）、ｙｂ６＜ｙｃ６ではない場合（Ｓ１７５：Ｎｏ）、Ｊｍｉｎ６＝ｙｂ６を導き出す（Ｓ１７７：Ｃａｓｅ６２）。
【０１９７】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ６と第６指令値候補ｕｅ１６，ｕｅ２６，ｕｆ３６を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第５指令値候補を演算する第５演算処理を実行する。
【０１９８】
（２．２．３  第７演算処理の設計）
第７演算処理における収縮力指令値の第７指令値候補ｕｆｉ７，ｕｅｉ７のうち、第７指令値候補ｕｅ１７，ｕｅ２７，ｕｆ３７は、図４の条件５と式（１６）より、
【０１９９】
【数５７】
2014004654.tif 000059
となるため、評価関数Ｊは収縮力指令値の第７指令値候補ｕｆ１７，ｕｆ２７，ｕｅ３７の最大値となる。そこで、変数ｕｅ３７’を、
【０２００】
【数５８】
2014004654.tif 000060
と定義する。収縮力指令値の第７指令値候補ｕｆ１７，ｕｆ２７は、
【０２０１】
【数５９】
2014004654.tif 000061
と表すことができる。ここで、
【０２０２】
【数６０】
2014004654.tif 000062
と定義する。変数ｕｅ１７’，ｕｅ２７’，ｕｆ３７’と定数Ｔ１’，Ｔ２’，Ｋｅ１’，Ｋｅ２’，Ｋｆ３’を用いて式（７１）及び式（７２）を表すと、
【０２０３】
【数６１】
2014004654.tif 000063
となる。式（７１）と式（８１）、式（７２）と式（８０）を比較すると、第６演算処理と第７演算処理の場合分けは等価であることがわかる。従って、第７演算処理においてはＣａｓｅ７１、Ｃａｓｅ７２の２通りの場合分けが必要となる。
【０２０４】
図１９は、収縮力指令値演算部による第７演算処理のフローチャートである。図１９に示すように、本第２実施形態の第７演算処理は、式（７７）〜式（７９）に示す変数変換と第７演算処理を用いて場合分けを行う。
【０２０５】
即ち、収縮力指令値演算部１５２は、第７演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（７３）に示すように、ｕｅ１＝０，ｕｅ２＝０，ｕｆ３＝０とする（Ｓ１８１）。次に、収縮力指令値演算部１５２は、式（７８）及び式（７９）のように定義し（Ｓ１８２）、第６演算処理と同様の演算を行う（Ｓ１８３）。その際、収縮力指令値演算部１５２は、式（７７）のように定義する（Ｓ１８４）。
【０２０６】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ７と第７指令値候補ｕｆ１７，ｕｆ２７，ｕｅ３７を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第７指令値候補を演算する第７演算処理を実行する。
【０２０７】
（２．２．４  第８演算処理の設計）
第８演算処理における収縮力指令値の第８指令値候補ｕｅ１８，ｕｆ２８，ｕｆ３８は、図４の条件６と式（１６）より、
【０２０８】
【数６２】
2014004654.tif 000064
となるため、評価関数Ｊは収縮力指令値の第８指令値候補ｕｆ１８，ｕｅ２８，ｕｅ３８の最大値となる。そこで、変数ｕｅ３８’を、
【０２０９】
【数６３】
2014004654.tif 000065
と定義する。収縮力指令値の第８指令値候補ｕｆ１８，ｕｅ２８は変数ｕｅ３８’を用いて、
【０２１０】
【数６４】
2014004654.tif 000066
と表すことができる。ここで、
【０２１１】
【数６５】
2014004654.tif 000067
と定義する。変数ｕｆ１８’，ｕｅ２８’，ｕｆ３８’と定数Ｔ１’，Ｔ２’，Ｋｆ１’，Ｋｅ２’，Ｋｆ３’を用いて式（８４）及び式（８５）を表すと、
【０２１２】
【数６６】
2014004654.tif 000068
となる。式（６７）と式（９０）、式（６８）と式（８９）を比較すると、第５演算処理と第８演算処理の場合分けは等価であることがわかる。従って、第８演算処理においてはＣａｓｅ８１、Ｃａｓｅ８２、Ｃａｓｅ８３の３通りの場合分けが必要となる。
【０２１３】
図２０に、収縮力指令値演算部による第８演算処理のフローチャートである。図２０に示すように、本第２実施形態の第８演算処理は、式（８６）〜式（８８）に示す変数変換と第７演算処理を用いて場合分けを行う。
【０２１４】
即ち、収縮力指令値演算部１５２は、第８演算処理として、まず、式（１０）に示す第１関数及び式（１１）に示す第２関数において、式（８２）に示すように、ｕｅ１＝０，ｕｆ２＝０，ｕｆ３＝０とする（Ｓ１９１）。次に、収縮力指令値演算部１５２は、式（８７）及び式（８８）のように定義し（Ｓ１９２）、第５演算処理と同様の演算を行う（Ｓ１９３）。その際、収縮力指令値演算部１５２は、式（８６）のように定義する（Ｓ１９４）。
【０２１５】
以上、収縮力指令値演算部１５２は、評価関数Ｊの最小値Ｊｍｉｎ８と第８指令値候補ｕｆ１８，ｕｅ２８，ｕｅ３８を演算する。つまり、収縮力指令値演算部１５２は、評価関数を最小化する第１〜第６収縮力指令値からなる第８指令値候補を演算する第８演算処理を実行する。
【０２１６】
（２．３  関節トルク指令値Ｔ１、Ｔ２がどちらも負数となる場合の場合分け）
上記第１実施形態の式（１０）と式（１１）に対して、
【０２１７】
【数６７】
2014004654.tif 000069
とする変数変換を行うと、
【０２１８】
【数６８】
2014004654.tif 000070
と表すことができる。式（９２）より、Ｔ１’とＴ２’は正数となるため、式（９１）〜式（９３）に示す変数変換と第１最小化演算処理を実行することで、関節トルク指令値Ｔ１，Ｔ２がどちらも負数となる場合の場合分けを行うことが可能となることがわかる。そこで、図１５に示すように、まず、式（９１）〜式（９３）に示す変数変換を行う。次に、第１最小化演算処理を実行して評価関数Ｊを最小化する収縮力指令値ｕｆｉ’，ｕｅｉ’を求める。さらに、式（９１）に示す変数変換を行い、収縮力指令値ｕｆｉ’，ｕｅｉ’からｕｆｉ，ｕｅｉを得る。
【０２１９】
（２．４  関節トルク指令値Ｔ１が負数となり関節トルク指令値Ｔ２が正数となる場合の場合分け）
式（１０）と（１１）に対して、
【０２２０】
【数６９】
2014004654.tif 000071
とする変数変換を行うと、
【０２２１】
【数７０】
2014004654.tif 000072
と表すことができる。式（９７）より、Ｔ１’は正数となりＴ２’は負数となる。このため、式（９６）〜式（９８）に示す変数変換と第２最小化演算処理を実行することで、関節トルク指令値Ｔ１が負数となり、関節トルク指令値Ｔ２が正数となる場合の場合分けを行うことが可能となることがわかる。そこで、図１５に示すように、まず、式（９６）〜式（９８）に示す変数変換を行う。次に、第２最小化演算処理を実行して評価関数Ｊを最小化する収縮力指令値ｕｆｉ’，ｕｅｉ’を求める。さらに、式（９６）に示す変数変換を行い、収縮力指令値ｕｆｉ’，ｕｅｉ’からｕｆｉ，ｕｅｉを得る。
【０２２２】
以上の導出では、筋の弾性力がθｉ＝０ｒａｄからの角度に比例して発生することを仮定していた。任意の角度を筋の弾性力発生の基準となる角度（以下、中立角度と呼ぶ）をθｃｉ（ｉ＝１，２，３）としてフィードフォワード制御入力を生成するためには、係数Ｋｆｉ，Ｋｅｉ（ｉ＝１，２，３）を、式（１２）に代わり、
【０２２３】
【数７１】
2014004654.tif 000073
とすればよい。ただし、角度θｃ１，θｃ２，θｃ３はそれぞれ、第一単関節筋、第二単関節筋、二関節筋の弾性力の中立角度とする。
【０２２４】
（３  シミュレーション）
本節では前節で設計した制御系を用いて、シミュレーションを行う。また、評価関数Ｊを最小化する収縮力は、前節で示した方法により導出する。本第２実施形態では、リンク１０１，１０２の慣性モーメントＩ１，Ｉ２を２．５×１０−３ｋｇｍ２、リンク１０１，１０２の長さＬ１，Ｌ２を０．２ｍ、第２リンク１０２の質量ｍ２を１ｋｇとする。また、プーリ径ｒを５．０×１０−２ｍ、筋の弾性力定数ｋを１０ｍ−１、粘性力定数ｃを１０ｍ−１ｓｅｃ−１とする。さらに、目標関節角度θｒ１，θｒ２をそれぞれ、０ｓｅｃから０．３ｓｅｃの間に０．７８５ｒａｄから１．０４７ｒａｄに、１．５７１ｒａｄから２．０９４ｒａｄに増加するジャーク最小軌道とし、サンプリング周期Ｔｓを１．０×１０−４ｓｅｃとする。
【０２２５】
図２１（ａ）及び図２１（ｂ）に、第１、第２リンクの関節角度θ１，θ２を実線で、目標軌道θｒ１，θｒ２を破線で表し、図２２に、関節トルク指令値Ｔ１を実線で、関節トルク指令値Ｔ２を破線で表す。また、図２３（ａ）、図２３（ｂ）及び図２３（ｃ）に、実線を用いて収縮力指令値ｕｆ１，ｕｆ２，ｕｆ３を、破線を用いて収縮力指令値ｕｅ１，ｕｅ２，ｕｅ３を、それぞれ表す。さらに、図２４に、係数Ｋｆｉ，Ｋｅｉと関節トルク指令値Ｔ１，Ｔ２の変化によって、第１〜８演算処理における収縮力の演算フローが切り替わる様子を表す。
【０２２６】
図２１（ａ）及び図２１（ｂ）より、実線で示す関節角度は、破線で示す目標軌道と重なっており、関節角度は目標軌道に追従していることがわかる。
【０２２７】
図２２より、０ｓｅｃから０．１１ｓｅｃの間は、関節トルク指令値Ｔ１，Ｔ２が正数となるため、収縮力指令値演算部１５２は第１最小化演算処理を実行して収縮力を最小化していることがわかる。また、０．１１ｓｅｃから０．３ｓｅｃの間は、関節トルク指令値Ｔ１は負数となり関節トルク指令値Ｔ２は正数となるため、収縮力指令値演算部１５２は第２最小化演算処理を実行して収縮力を最小化していることがわかる。
【０２２８】
図２３（ａ）、図２３（ｂ）及び図２３（ｃ）より、実線で示す収縮力指令値ｕｆｉと破線で示す収縮力指令値ｕｅｉはどちらも必ず正数となることがわかる。また、収縮力指令値ｕｆｉと収縮力指令値ｕｅｉは一方が０となる場合には他方が０となっていることがわかる
これらのことから、第１最小化演算処理と第２最小化演算処理を実行して導出する収縮力は、どちらも式（１６）を満たし、評価関数Ｊを最小化していることがわかる。
【０２２９】
また、図２３（ｂ）及び図２３（ｃ）より、０．１１ｓｅｃと０．１２ｓｅｃにおいて、収縮力指令値ｕｆ２，ｕｆ３の応答が急峻に変化していることが分かる。さらに、図２４より、収縮力指令値演算部１５２は０．１１ｓｅｃにおいてＣａｓｅ１１からＣａｓｅ１４へ、０．１２ｓｅｃにおいてＣａｓｅ５１からＣａｓｅ５２へ、それぞれ演算フローを切り替えていることがわかる。
【０２３０】
これらのことから、演算フローを切り替えるとき、高周波成分を多く含む制御入力が発生してしまうことがわかる。制御入力に高周波成分が含まれると、ロボットの固有振動が励起されることが考えられる。しかし、この高周波成分は、収縮力の最小値は若干増加するものの、例えば零位相ローパスフィルタを用いることで低減することが可能である。
【０２３１】
［第３実施形態］
次に、本発明の第３実施形態に係るロボットについて説明する。本第３実施形態では、制御入力は最小とならないが、関節剛性と関節角度の目標軌道に同時に追従するための制御方法を示す。
【０２３２】
（１モデル導出）
本第３実施形態では第２実施形態と同じモデルを用いる。
【０２３３】
（２制御系設計）
２リンクマニピュレータでは、手先が外界と直に接触するため、手先の剛性を制御することが重要である。手先の剛性は、図２５に示すようなスティフネス楕円Ｃによって表される。この楕円Ｃは、各方向に対しての剛性の分布を示し、手先と楕円Ｃの距離が離れるほど剛性が高いことを表している。
【０２３４】
また、３対６筋構造を備える２リンクマニピュレータでは、手先の剛性と関節周りに働くトルクを独立に制御することが可能であることが知られている。収縮力指令値ｕｆｉ，ｕｅｉ（ｉ＝１，２，３）の差をＵｄｉ（ｉ＝１，２，３）、和をＵｓｉ（ｉ＝１，２，３）とする。
【０２３５】
【数７２】
2014004654.tif 000074
【０２３６】
ＵｄｉとＵｓｉを用いると、式（３）は、
【０２３７】
【数７３】
2014004654.tif 000075
となる。式（１０３）より、Ｕｄｉが関節まわりのトルクを、Ｕｓｉが関節に対する剛性および粘性を増減させることがわかる。したがって、Ｕｄｉ，Ｕｓｉをそれぞれトルク指令値、関節剛性指令値とすると、式（１０３）より、アクチュエータの収縮力により生じるトルクと、筋の粘弾性により生じるトルクを独立に制御できることがわかる。例えば、関節剛性指令値Ｕｓ１，Ｕｓ２，Ｕｓ３を、
【０２３８】
【数７４】
2014004654.tif 000076
と制御すると、スティフネス楕円Ｃの長軸は第１関節と手先を結ぶ方向を向くことが知られている。
【０２３９】
しかし、上記第１実施形態と上記第２実施形態の制御系では、式（１６）に示す制御側によって、関節剛性は収縮力と等しくなってしまうため、駆動中の手先剛性を任意に指定することはできない。そこで、本第３実施形態では、駆動中に所望の手先剛性を実現するように、収縮力指令値演算部１５２が出力する収縮力に予備収縮力を加算する。そのため、本第３実施形態の制御系における収縮力は、剛性制御を行わない上記第１及び第２実施形態と比べて増加してしまう。予備収縮力をΔｕｆｉ，Δｕｅｉとすると、実際に２リンクマニピュレータに与える収縮力指令値ｕｆｉ’，ｕｅｉ’は、
【０２４０】
【数７５】
2014004654.tif 000077
となる。式（１０５）より、収縮力の和を関節剛性の目標軌道Ｕｓｉ（ｉ＝１，２，３）と等しくするためには、予備収縮力Δｕｆｉ，Δｕｅｉを、
【０２４１】
【数７６】
2014004654.tif 000078
とすればよいことがわかる。また、予備収縮力を考慮すると、筋トルクτｉは、
【０２４２】
【数７７】
2014004654.tif 000079
となる。ここで、右辺の第３項、第４項は予備収縮力により関節周りに生じるトルクを表し、マニピュレータに印加される外乱となる。そこで、予備収縮力による筋トルクを発生させないように、予備収縮力Δｕｆｉ，Δｕｅｉを、
【０２４３】
【数７８】
2014004654.tif 000080
を満たすよう制御する。式（１０６）と式（１０８）を予備収縮力Δｕｆｉ，Δｕｅｉについて解くと、
【０２４４】
【数７９】
2014004654.tif 000081
となる。
【０２４５】
図２６は、本発明の第３実施形態に係るロボットの制御装置を示すブロック線図である。図２６において、制御装置１５０Ａは、トルク指令値生成部としてのフィードフォワード補償部１５１と、収縮力指令値演算部１５２と、収縮力発生部１５３と、を備えている。更に、本第３実施形態の制御装置１５０Ａは、剛性制御部１５４を有している。図２６において、剛性制御部１５４は、収縮力指令値演算部１５２が出力する収縮力指令値ｕｆｉ，ｕｅｉを入力として、式（１０９）と式（１１０）を用いて予備収縮力Δｕｆｉ，Δｕｅｉを演算する。
【０２４６】
（３  シミュレーション）
前節の制御系を用いたシミュレーションを行う。第１リンク１０１と第２リンク１０２の物理パラメータと関節角度の目標軌道は上記第２実施形態と同一とする。また、関節剛性の目標軌道Ｕｓｉ（ｉ＝１，２，３）を０ｓｅｃから０．３ｓｅｃの間に８Ｎから１２Ｎに増加するジャーク最小軌道とする。
【０２４７】
図２７に関節剛性の目標軌道Ｕｓｉ（ｉ＝１，２，３）を表す。また、図２８（ａ）、図２８（ｂ）及び図２８（ｃ）に、収縮力指令値ｕｆ１’，ｕｆ２’，ｕｆ３’を実線で、収縮力指令値ｕｅ１’，ｕｅ２’，ｕｅ３’を破線で、収縮力の和を点線で、それぞれ表す。図２８（ａ）、図２８（ｂ）及び図２８（ｃ）より、収縮力指令値ｕｆｉ’，ｕｅｉ’はどちらも０Ｎ以上となることがわかる。これは、収縮力指令値演算部１５２が出力する収縮力指令値ｕｆｉ，ｕｅｉに予備収縮力Δｕｆｉ，Δｕｅｉが加算されているためである。さらに、図２７の実線と図２８（ａ）、図２８（ｂ）及び図２８（ｃ）の点線とが一致していることから、収縮力指令値ｕｆｉ’，ｕｅｉ’の和が関節剛性の目標軌道Ｕｓｉと一致していることがわかる。これらのことから、本第３実施形態の制御系により、手先の柔軟性を制御することが可能となることがわかる。
【０２４８】
なお、本発明は、以上説明した実施形態に限定されるものではなく、多くの変形が本発明の技術的思想内で当分野において通常の知識を有する者により可能である。
【符号の説明】
【０２４９】
１００…ロボット、１０１…第１リンク、１０２…第２リンク、１０３…プーリ（基台）、１１１…第１関節、１１２…第２関節、１５０…制御装置、１５１…フィードフォワード補償部（トルク指令値生成部）、１５２…収縮力指令値演算部、１５３…収縮力発生部、ｅ１…第２人工筋肉アクチュエータ、ｅ２…第４人工筋肉アクチュエータ、ｅ３…第６人工筋肉アクチュエータ、ｆ１…第１人工筋肉アクチュエータ、ｆ２…第３人工筋肉アクチュエータ、ｆ３…第５人工筋肉アクチュエータ
【図１】
2014004654.tif 000082
【図２】
2014004654.tif 000083
【図３】
2014004654.tif 000084
【図４】
2014004654.tif 000085
【図５】
2014004654.tif 000086
【図６】
2014004654.tif 000087
【図７】
2014004654.tif 000088
【図８】
2014004654.tif 000089
【図９】
2014004654.tif 000090
【図１０】
2014004654.tif 000091
【図１１】
2014004654.tif 000092
【図１２】
2014004654.tif 000093
【図１３】
2014004654.tif 000094
【図１４】
2014004654.tif 000095
【図１５】
2014004654.tif 000096
【図１６】
2014004654.tif 000097
【図１７】
2014004654.tif 000098
【図１８】
2014004654.tif 000099
【図１９】
2014004654.tif 000100
【図２０】
2014004654.tif 000101
【図２１】
2014004654.tif 000102
【図２２】
2014004654.tif 000103
【図２３】
2014004654.tif 000104
【図２４】
2014004654.tif 000105
【図２５】
2014004654.tif 000106
【図２６】
2014004654.tif 000107
【図２７】
2014004654.tif 000108
【図２８】
2014004654.tif 000109