(57)【特許請求の範囲】
【請求項１】
第１方向または前記第１方向とは反対の第２方向に回転する関節と、
線材と、
メモリと、を備え、
前記メモリには、
前記関節を第１位置から第２位置まで前記第１方向に回転させた際に通過し、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際においても通過する第３位置に関して、
前記関節を前記第１位置から前記第２位置まで前記第１方向に回転させた際に前記線材において発生する第１反力値に基づく第１制御値と、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際に前記線材において発生する第２反力値に基づく第２制御値と、が格納されている、
ことを特徴とするロボット装置。
【請求項２】
請求項１に記載のロボット装置において、
前記関節を駆動させる駆動源を制御する制御装置を備えており、
前記制御装置は、動的な駆動制御条件によって前記メモリを参照して得た前記第１制御値およびまたは前記第２制御値に基づき前記駆動源を制御する、
ことを特徴とするロボット装置。
【請求項３】
請求項２に記載のロボット装置において、前記関節は当該関節のトルクを測定するトルクセンサを備え、
前記制御装置は、前記トルクセンサで測定したトルク値、および前記駆動制御条件によって前記メモリを参照して得た前記第１制御値およびまたは前記第２制御値に基づき前記駆動源のトルクを制御するトルク制御を実行する、
ことを特徴とするロボット装置。
【請求項４】
請求項３に記載のロボット装置において、
前記制御装置が、前記関節を前記駆動制御条件で駆動し、その際の前記トルクセンサの出力値と、前記関節の構造情報に基づき推定した前記関節のトルク値と、の差分に基づき前記第１制御値および前記第２制御値を取得する、
ことを特徴とするロボット装置。
【請求項５】
請求項３または４に記載のロボット装置において、
前記メモリは、前記関節の回転角度と、その回転角度における前記第１制御値および前記第２制御値と、の粘性関係を、前記関節の駆動速度ごとに格納していることを特徴とするロボット装置。
【請求項６】
請求項３から５のいずれか１項に記載のロボット装置において、
前記メモリは、前記関節の回転角度と、その回転角度における前記第１制御値および前記第２制御値と、の非線形関係を、前記関節の動作方向ごとに格納していることを特徴とするロボット装置。
【請求項７】
請求項１から６のいずれか１項に記載のロボット装置を用いて物品の製造を行うことを特徴とする物品の製造方法。
【請求項８】
第１方向または前記第１方向とは反対の第２方向に回転する関節と、線材と、メモリを有する制御装置と、を備えたロボット装置の制御方法であって、
前記メモリには、
前記関節を第１位置から第２位置まで前記第１方向に回転させた際に通過し、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際においても通過する第３位置に関して、
前記関節を前記第１位置から前記第２位置まで前記第１方向に回転させた際に前記線材において発生する第１反力値に基づく第１制御値と、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際に前記線材において発生する第２反力値に基づく第２制御値と、が格納されており、
前記制御装置は、
前記メモリに格納されている前記第１制御値または前記第２制御値を参照して、前記関節を制御する、
ことを特徴とする制御方法。
【請求項９】
請求項８に記載の制御方法を実行させる制御プログラム。
【請求項１０】
請求項９に記載の制御プログラムを格納したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボットアームを構成する複数のリンクに沿ってロボットアーム各部に駆動
信号ないし制御信号を伝達する線材が配置されるロボット装置、そのロボット装置を用いた物品の製造方法、および制御方法に関するものである。
【背景技術】
【０００２】
近年、ロボット装置、例えば関節が回転拘束される多軸多関節ロボットにおいて、駆動源がリンクに与えているトルクを計測するためのトルクセンサを関節に配置して関節に生じるトルクをトルク（力）制御する多関節ロボットが注目を集めている。関節にトルクセンサを配置することにより、多関節ロボットの関節に生じる力の制御やロボットアームの先端に配置されたエンドエフェクタが部品に与える荷重ないし力を制御する事が容易になった。
【０００３】
現在のところ、トルクセンサを有しトルク制御が可能なロボット装置は、自動車のエンジン部品の組み立てなど、数百グラムから数キログラムの荷重を部品に与えるような組み立てに使われることが多い。一方、重量が数グラムの微小な部品やフィルムやシートの操作など、組立時に部品に与える荷重が数グラム程度の微小荷重の組み立てには、ロボット装置はあまり利用されていない。その理由の１つは、現在の多関節ロボットの力（トルク）制御の精度がそれほど高精度ではなく、ロボットアーム先端のエンドエフェクタで部品に与える荷重が数グラム程度の範囲の組み立てを行うのに必要な要求精度を達成できていない点にある。
【０００４】
例えば、ロボット装置は、ロボットアームの各部、例えば関節を駆動するアクチュエータとの間で、当該のアクチュエータを制御するための駆動信号を伝達するための伝達部材を必要とする。これらの駆動信号には、制御信号のような制御情報の範疇に属する電気信号の他、駆動電力、油圧や空気圧の圧力信号などの駆動エネルギーの範疇に属する信号が含まれる。本明細書では、上記のような制御情報や駆動エネルギーを伝達するための電気信号や圧力信号などの信号を、ロボットアームの各部のアクチュエータを制御するための信号を「駆動信号」という。
【０００５】
例えば、関節やエンドエフェクタを駆動する駆動源（アクチュエータ）としてモータのような回転駆動源を用いるロボットでは、このモータやその駆動回路に制御信号や駆動電力を伝達する伝達部材として電線（ケーブル）のような線材を用いる。また、関節やエンドエフェクタを駆動するために油圧、空気圧などを利用したアクチュエータを用いる場合、駆動信号（エネルギー）を伝達するために、例えばラバーなどフレキシブルな材料から成る圧力管のような線材が伝達部材として用いられることがある。
【０００６】
また、上記のようなケーブルや圧力管の線材は１本のみ敷設されるより、例えばロボットアームの複数の関節分の線材を束ねたハーネス構造のものが敷設されるような構造が多い。このようなハーネスには、関節を駆動するアクチュエータの動作を検出するエンコーダや、上記のトルクセンサの信号を制御系にフィードバックするための線材が収容されることもある。また、ロボットアームの先端には、エンドエフェクタ（ないしツール）として、例えばハンドやグリッパのような把持装置が装着されることがある。このようなエンドエフェクタ（ツール）に対しても、上記の駆動信号の入出力（伝達）を行うことが必要で、その場合、上記の線材のハーネスには、エンドエフェクタ（ないしツール）に対して駆動信号を入出力する線材が収容されることがある。
【０００７】
上記のような線材（ないしそのハーネス）はロボットアームの内側あるいは外側に敷設され、その場合、ロボット装置の各関節を跨ぐように設置される。従って、駆動信号を伝達する線材は、ロボット装置の関節が回転動作（並進動作の場合も同様）した時に変形し、その変形に応じた反力を発生する。
【０００８】
一方、上記のように、リンク（あるいはエンドエフェクタ部）を支持する関節にトルク（力）センサを設けてトルク（力）制御を行うなら、本来、関節に生じているトルクのみをトルクセンサで測定し、トルク制御系にフィードバックできるのが望ましい。ところが、ロボット装置の動作に伴う上記の関節（やエンドエフェクタ）に駆動信号を伝達する線材の変形によって生じる反力は、関節に配置したトルクセンサの測定値に測定誤差として影響を与える。
【０００９】
例えば、ロボット装置の構成や規模などによっても異なるが、各種ケーブルや圧力管の線材のハーネスが変形した時の反力は、数百グラムの単位に及ぶことがある。従って、このような反力は、数グラムの精度で力（ないしトルク）制御をする場合、非常に大きな外乱となり、制御の精度に影響を与える問題がある。
【００１０】
以上の問題に鑑み、ロボット装置の所定の動作を行う時の関節トルクと事前に測定した関節の回転角度〜ケーブル反力の弾性的な関係を格納したテーブルに基づいて関節に生じている力を推定する構成が提案されている（下記の特許文献１）。この特許文献１では、各関節を制御する際の力制御性を改善することを目的としている。なお、特許文献１では、関節トルクは、各リンクの重量及び重心位置に基づいて逆運動学演算を行うことにより推定している。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１２−２１８１０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上記の特許文献１では、以下の二つの問題から、ロボット装置の関節に生じるトルクを正確に推定できないという問題がある。一つ目は、特許文献１では、ロボットのジオメトリや各部の重量などの構造条件に基づく逆運動学演算によって関節に生じているトルクを演算するため、推定誤差が生じるという問題である。逆運動学演算に用いた重心位置や重量の値が実物のロボット装置と異なっていれば、当然、推定誤差が生じる。例えば、任意の関節に生じるモーメントを算出する場合、対象の重量が５ｋｇで重心位置が１ｍｍ異なると５０ｍＮｍのトルク誤差が生じる。それに対して、３００ｍｍのリンクの先端で１ｇの力を制御したい場合は、リンクの根元の関節では３ｍＮｍ（３００ｍｍ×１ｇ）のトルクを制御する必要があり、誤差が制御量の１０倍以上となり、組み立ての要求精度を満たす事ができない可能性がある。また、実際のロボットアームでは、事前の測定と同等の状態に線材を配置できるとは限らない。この設置精度の問題から、力（トルク）推定演算を利用した特許文献１の技術では、事前の測定と同じ関節動作行ったからといって、実際に同じ反力が生じるとは限らない。
【００１３】
二つ目の問題は、特許文献１における推定演算に用いられるテーブルが関節角度とケーブルの反力の静的な弾性関係のみによって記述されている点にある。実際の線材（ケーブル）は、導線やその被覆材料、結束材などから構成されている。そして、このような線材（ケーブル）が、実際に変形する場合に発生する反力は、実際には動的な制御条件、例えば変形速度や、変形方向によって影響を受ける。例えば、線材（ケーブル）の反力は、ロボットアームの関節の動作速度により定まる変形速度に応じた粘性的な変化を示し、また、変形方向によっては非線形（ヒステリシス）的な変化を示すはずである。特許文献１では、このような変形速度に関係したケーブル反力の粘性的な変化、ケーブル変形の往復時に生じる非線形（ヒステリシス）の変化を考慮していないために、ケーブルの反力を精度良く予測することができない。
【００１４】
従って、特許文献１の技術では、線材の反力を考慮した制御とはいっても、充分な精度で力（トルク）制御を行うことができない可能性がある。物品の搬送や重量が数キログラムあるような物品の組み立てでは、上記のような微小な力制御性能の低下は問題にならないが、数グラムの微小重量の部品を力制御で組み立てる場合は、ケーブルの反力に起因する力制御性の低下が無視できなくなってくる。特許文献１の技術は、ロボットが取り扱う荷重範囲が大きい場合、あるいは実用的に利用できる可能性がある。しかしながら、特に上記のように数グラムのオーダの力（トルク）制御においては、特許文献１の技術でも充分な精度を達成できず、力制御性が低下する可能性がある。
【００１５】
従来、汎用的な多関節ロボット装置が微小荷重の組み立てに積極的に利用されてこなかった理由は、以上のような問題に起因する。このため、数グラムの微小重量の物品の組み立てには、従来では、ロボット装置ではなく、特別な構造を持ち、充分、寸法や精度範囲をコントロールした上で専用に製造された装置を用いることが多かった。
【００１６】
一方で、今後、多くの工業製品の製造は、多品種少量生産に向かう、との予想もある。そして、上記のような専用装置が微小（微細）部品のそれぞれに個別に必要である、という事情は、多品種少量生産の実現に関して重大な隘路となり得る。多品種少量生産のために必要な多数の微小（微細）部品のそれぞれについて、上記のような専用装置の設計、製作が必要ならば、これによって生産ラインの立ち上げ期間の長期化、立ち上げコストの上昇などの問題が生じる可能性がある。
【００１７】
そこで、汎用的な多関節ロボット装置で、線材の反力を考慮した充分高精度な力（トルク）制御が可能であれば専用装置を必要とせず、短期間で効率の高い多品種少量生産を行えるようになる、と考えられる。
【００１８】
本発明の課題は、動的な制御条件を考慮して、ロボット装置の関節（やエンドエフェクタ）の駆動信号の伝達に用いられる線材の反力によって関節に生じるトルクの測定ないし推定精度を改善し、高精度なロボット制御を実現することにある。
【課題を解決するための手段】
【００１９】
上記課題を解決するため、本発明においては、第１方向または前記第１方向とは反対の第２方向に回転する関節と、線材と、メモリと、を備え、前記メモリには、前記関節を第１位置から第２位置まで前記第１方向に回転させた際に通過し、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際においても通過する第３位置に関して、前記関節を前記第１位置から前記第２位置まで前記第１方向に回転させた際に前記線材において発生する第１反力値に基づく第１制御値と、前記関節を前記第２位置から前記第１位置まで前記第２方向に回転させた際に前記線材において発生する第２反力値に基づく第２制御値と、が格納されている構成を採用した。
【発明の効果】
【００２０】
上記構成によれば、線材が発生する反力値を、関節の駆動速度、動作方向、といった動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリを用いる。このため、関節の駆動速度、動作方向のような動的な駆動制御条件を反映した、より正確な線材の反力値を取得（推定）することができる。テーブルメモリから取得した線材の反力値をロボットアームの各関節の力制御に用いることにより、ロボットアームの力制御の精度を大きく向上することができる。このため、例えば汎用構成のロボット装置においても、関節の力制御を正確に行うことができ、繊細な力制御の必要な数グラム程度の重量の小さい部品の組み立てを実現することができる。これにより、そして、微小重量の部品を組み立てる生産ラインにおいて、専用装置や、人力による手動作業などを必要とせず、汎用構成のロボット装置を用いることが可能となる。従って、従来、必要とされた、専用装置の設計、製造コストの削減、あるいはさらに製作期間の削減、といった効果を期待できる。また、微細部品を組み立てる生産ラインの立ち上げコストを低減することが可能になる。
【図面の簡単な説明】
【００２１】
【図１】実施例１のロボット装置を示し、（ａ）は同装置を側面から示した説明図、（ｂ）は同装置を後方から示した説明図である。
【図２】実施例１のロボット装置における回転関節の運動とケーブル反力の関係を示すテーブルである。
【図３】実施例１のロボット装置の制御系の構成を示したブロック図である。
【図４】実施例１のロボット装置におけるケーブルの固定箇所を示した図である。
【図５】実施例１のロボット装置におけるロボット制御を示したフローチャート図である。
【図６】実施例２のロボット装置における異なるロボット制御を示したフローチャート図である。
【図７】実施例１のロボット装置の制御装置の構成例を示したブロック図である。
【図８】角度テーブルの作成処理を示したフローチャート図である。
【図９】速度テーブルの作成処理を示したフローチャート図である。
【図１０】非線形テーブルの作成処理を示すもので、（ａ）は正、逆駆動方向でそれぞれ角度テーブルを作成する手法、（ｂ）は正、逆駆動方向でそれぞれ速度テーブルを作成する手法を示したフローチャート図である。
【図１１】非線形テーブルの作成において、関節角度とケーブル反力の関係における回転方向依存のヒステリシス特性を示した線図である。
【発明を実施するための形態】
【００２２】
以下、添付図面に示す実施例を参照して本発明を実施するための形態につき説明する。なお、以下に示す実施例はあくまでも一例であり、例えば細部の構成については本発明の趣旨を逸脱しない範囲において当業者が適宜変更することができる。また、本実施形態で取り上げる数値は、参考数値であって、本発明を限定するものではない。
【００２３】
＜実施例１＞
（ロボット装置の基本構成）
図１（ａ）、（ｂ）は本発明を採用したロボット装置の一例として、多関節ロボット装置の全体構成を示している。図１（ａ）は、本実施例のロボット装置を例えば側面から示している。図１（ａ）の左下部には、このロボット装置制御に用いられる３次元（ＸＹＺ）座標系の座標軸を示してある。図示の通り、これら座標軸のうちＺ軸は図の上方へ、またＸ軸は図の左方向へ向かうよう配置されている。図１（ｂ）は、同ロボット装置のロボットアーム１を例えば後方（図１（ａ）の右方）から示している。図１（ｂ）右下部にも同様の３次元（ＸＹＺ）座標系の座標軸を示してある。例えば、図１（ａ）に示したロボットアーム１の姿勢を初期姿勢とする。
【００２４】
図１（ａ）に示すように、ロボット装置はロボットアーム１（ロボット本体）と、ロボットアーム１を制御する制御装置９１を含む。より詳細には、図３に示すように、制御装置９１には指令装置９４が接続され、これら制御装置９１および指令装置９４によってロボットアーム１（ロボット本体）の制御システム９７が構成される。指令装置９４は、例えばティーチングペンダントのような教示装置である。さらに制御装置９１には後述する反力テーブル９００を記憶する反力テーブル記憶部を有する。
【００２５】
指令装置９４には、例えば、ロボットアーム１の関節の姿勢（位置や角度）、あるいはロボットアーム１先端などに配置された基準位置の位置などを移動させるための操作キーを含む操作部が配置される。指令装置９４の操作部で何らかのロボット操作が行われると、指令装置９４の操作に応じて、制御装置９１はケーブル８０（線材）を介して操作を介してロボットアーム１の動作を制御する。その際、制御装置９１が後述の制御プログラムを含むロボット制御プログラムを実行することにより、ロボットアーム１の各部が制御される。
【００２６】
指令装置９４には、例えば、ロボットアーム１の関節の姿勢（位置や角度）、あるいはロボットアーム１先端などに配置された基準位置の位置などを移動させるための操作キーを含む操作部が配置される。指令装置９４の操作部で何らかのロボット操作が行われると、指令装置９４の操作に応じて、制御装置９１はケーブル８０（線材）を介して操作を介してロボットアーム１の動作を制御する。その際、制御装置９１が後述の制御プログラムを含むロボット制御プログラムを実行することにより、ロボットアーム１の各部が制御される。
【００２７】
図１（ａ）、（ｂ）に示したロボットアーム１は、複数リンクを例えばシリアルリンク形式で複数の関節（６軸）を介して相互に接続した構成を有するロボットアームである。ロボットアーム１の先端のリンク６０にエンドエフェクタ７０が接続されている。ロボットアーム１のリンク１０、２０、３０、４０、５０、および６０は、例えば各関節、本実施例では回転関節１１、２１、３１、４１、５１、および６１を介して次のように接続されている。
【００２８】
ロボットアーム１のベース１００（基台部）とリンク１０はＺ軸方向の回転軸の周りで回転する回転関節１１で接続されている。回転関節１１は、例えば初期姿勢から約±１８０度の可動範囲を有するものとする。ロボットアーム１のリンク１０とリンク２０は回転関節２１で接続されている。回転関節２１の回転軸は、図示の状態ではＹ軸方向に一致している。この回転関節２１は、例えば初期姿勢から約±８０度の可動範囲を有するものとする。
【００２９】
ロボットアーム１のリンク２０とリンク３０は回転関節３１で接続されている。この回転関節３１の回転軸は、図示の状態ではＹ軸方向に一致している。回転関節３１は、例えば初期姿勢から約±７０度の可動範囲を有するものとする。ロボットアーム１のリンク３０とリンク４０とは、回転関節４１で接続されている。この回転関節４１の回転軸は、図示の状態ではＸ軸方向に一致している。回転関節４１は、例えば初期姿勢から約±１８０度の可動範囲を有するものとする。
【００３０】
ロボットアーム１のリンク４０とリンク５０は回転関節５１で接続されている。回転関節５１の回転軸は、図示の状態ではＹ軸方向に一致している。この回転関節５１は、例えば初期姿勢から約±１２０度の可動範囲を有するものとする。ロボットアーム１のリンク５０とリンク６０は回転関節６１で接続されている。回転関節６１の回転軸は、図示の状態ではＸ軸方向に一致している。この回転関節６１は、例えば初期姿勢から約±２４０度の可動範囲を有するものとする。
【００３１】
以上のように、本実施例では、回転関節１１、４１、６１の回転軸は、各々が結合する２つのリンクの中心軸（１点鎖線）と平行（ないしは同軸）に配置されて、この２つのリンクの回転軸廻りの（相対）角度を変化させることができるよう配置されている。一方、回転関節２１、３１、および５１の回転軸は、これら各々が結合する２つのリンクの中心軸（同）の交差する（相対）角度を変化させることができるよう配置されている。
【００３２】
また、ロボットアーム１のリンク６０の先端には、生産ラインにおいて組み立て作業や移動作業を行うための（電動）ハンドや（空気圧駆動の）エアハンドなどのエンドエフェクタ７０が接続される。このエンドエフェクタ７０は、リンク６０に対してビス止めなどの（半）固定的な手段（不図示）によって装着されるか、あるいは、ラッチ（ラチェット）止めなどの着脱手段（不図示）によって装着可能であるものとする。特に、エンドエフェクタ７０が着脱可能である場合は、ロボットアーム１を制御して、ロボット自身の動作によって供給位置（不図示）に配置されたエンドエフェクタを着脱ないし交換する方式も考えられる。
【００３３】
（ケーブル経路）
図１（ａ）、（ｂ）のロボットアーム１の回転関節１１〜６１、ないしはエンドエフェクタ７０は、例えば電気的な回転駆動源、例えばモータ（後述の９２：図３）により駆動される。その場合、回転関節では、モータの他に波動歯車機構などを利用した減速機が用いられることがある。また、ハンドやグリッパのようなエンドエフェクタではラック＆ピニオンのような減速ないしは駆動方向の変換機構が用いられることがある。回転関節１１〜６１（ないしエンドエフェクタ７０）を駆動するモータは、各回転関節（ないしエンドエフェクタ７０）の内部の所定位置に配置される。なお、本実施例では、これらのモータは関節内部に配置されるものとするが、モータ（ないしは減速機）は関節外部に配置されていてもよい。
【００３４】
回転関節１１〜６１の駆動手段がこのようにモータである場合、各モータを駆動するためのエネルギー（駆動電力）ないしは制御信号、即ち駆動信号を伝達するための伝達手段として、ケーブルやワイヤのような線材が必要である。このような線材には、複数の線材を結束してワイヤハーネスの形態、あるいは１本の被覆内に複数の線材を収容してマルチケーブル化した形態がある。
【００３５】
また、回転関節１１〜６１や、エンドエフェクタ７０の駆動手段が、油（液）圧や空気圧を利用した圧力機構により構成される場合も考えられる。その場合は、これらロボットアーム１の各部、即ち回転関節１１〜６１や、エンドエフェクタ７０に圧力信号から成る駆動エネルギーないしは制御信号（駆動信号）を伝達する必要がある。この場合は、駆動エネルギーないしは制御信号の伝達のための伝達手段としては、好ましくはフレキシブルな圧力チューブのような線材が用いられる。
【００３６】
本実施例では、説明を容易にするため、回転関節１１〜６１（やエンドエフェクタ７０）の駆動手段はモータであり、従ってこれら各部に駆動エネルギーないしは制御信号を伝達する伝達手段としての線材は、（電気）ケーブル８０であるものとする。また、ケーブル８０は、例えば制御装置９１から各回転関節（あるいはエンドエフェクタ７０）の間を連絡する複数の線材から成り、例えばワイヤハーネス（束線）構成であるものとする。
【００３７】
このケーブル８０の配線（取り回し）経路は、図１（ａ）、（ｂ）では破線によって示してある。ケーブル８０（ないしそのハーネス）は、ベース１００、各リンク１０〜６０のケーブル８０はロボットアーム１の動作を妨げたり、周辺の装置に干渉したりしないようアームの内外に配設され、任意の場所で固定（ないしは半固定）する。
【００３８】
（ケーブルのリンクに対する固定）
図４に、ケーブルの固定箇所を示す。ケーブルの固定位置は、対象とする回転関節に生じるケーブル反力が他の回転関節の動作の影響を受けないようにするために、例えば各回転関節の前後で最低でも１個所において固定するのが好ましい。例えば回転関節２１の場合、ケーブル８０は回転関節１１と回転関節２１の間のケーブル固定部８２で固定される。さらに回転関節２１と回転関節３１の間のケーブル固定部８３で固定される。これによりケーブル８０が回転関節２１に与える反力は他の回転関節の動作にかかわらず、回転関節２１の動作に依存する。回転関節１１、３１、４１、５１、６１に関しては、同様にケーブルを固定するためにケーブル固定部８１、８４、８５、８６を設置する。
【００３９】
なお、ケーブル８０を各回転関節の前後で固定しない場合は、複数の関節の動作がケーブル反力の増減に影響を与えることになる。この場合は、後述するケーブル反力テーブルは、影響を及ぼし合う複数の関節の動作を反映させたテーブルとして構成する必要がある。その場合、特定関節のためのケーブル反力テーブルには、他の関節の異なる角度（姿勢）におけるデータを格納する必要があり、テーブルの規模が大きくなる。例えば後述の角度テーブルにおいて、特定関節の特定角度におけるケーブルの反力値を格納する場合、他の関節の異なる角度（姿勢）ごとに反力値を格納することになる。このためにテーブルの規模が大きくなり、またその作成が難しくなる可能性がある。これに対して、上記のようにケーブル固定部８１、８２…を用いてケーブル反力に対する他の関節の影響を低減（ないし除去）する構造によれば、ケーブル反力テーブルのレコード数を削減することができ、その作成のための計算資源も小さくて済む利点がある。以下では、ケーブル固定部８１、８２…を用い、特定の関節に係るケーブル反力に他の関節の角度（姿勢）が影響しない場合を前提として説明する。
【００４０】
（ケーブル反力テーブル）
図２に、回転関節１１、２１…を回動させた時にケーブルが発生する反力値を格納する反力テーブル９００の構成例を示す。反力テーブル９００は、の制御装置９１のメモリ９１ａ（図３）に格納しておくことができる。このメモリ９１ａは、実際には、ＲＯＭ６０２やＲＡＭ６０３（後述の図７）を用いて構成することができる。
【００４１】
図２において反力テーブル９００は、角度テーブル９１１、９２１、９３１、９４１、９５１、９６１、速度テーブル９１２、９２２、９３２、９４２、９５２、９６２、非線形テーブル９１３、９２３、９３３、９４３、９５３、９６３から構成されている。これら、角度、速度、非線形の各テーブルは回転関節１１、２１、３１、４１、５１、６１のそれぞれの運動とその際に発生するケーブル反力の関係を関連づけて格納する。
【００４２】
特に、反力テーブル９００の右側に示した２つのテーブル、速度テーブル９１２〜９６２と、非線形テーブル９１３〜９６３は、本実施形態の特徴的な構成である。これら速度テーブル９１２〜９６２と、非線形テーブル９１３〜９６３は、回転関節１１〜６１を駆動した際に線材（ケーブル８０）が発生する反力値を動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリである。
【００４３】
これに対して、角度テーブル９１１〜９６１は、回転関節１１〜６１を特定の関節角度Ａに制御した時、線材（ケーブル８０）が発生する反力Ｒの（静的な）弾性関係を格納したテーブルメモリである。角度テーブル９１１〜９６１は、上述の特許文献１で用いられているテーブルと実質的には同等のものである。もし、反力テーブル９００として、角度テーブル９１１〜９６１のみを配置した構成を取ると、この構成は特許文献１の構成と実質同等であり、上述のような課題を解決することができない。このため、本実施形態では、図２の右側の２つのテーブル、速度テーブル９１２〜９６２、ないし非線形テーブル９１３〜９６３のうち、少なくとも１つを反力テーブル９００に有するものとする。なお、基本的なテーブル構成に相当する角度テーブル９１１〜９６１を作成する制御手順については、後述の図８で説明する。
【００４４】
一方、速度テーブル９１２〜９６２と、非線形テーブル９１３〜９６３は、関節の駆動速度（Ｖ１、Ｖ２…）、および駆動方向（Ｄ＋、Ｄ−）の動的な各駆動制御条件ごとに区画された区画記憶領域に線材（ケーブル８０）が発生する反力を格納する。この場合、動的な各駆動制御条件に対応する各区画記憶領域に格納されるのは、角度テーブル９１１〜９６１と同様に、関節角度（Ａ）とその関節角度（Ａ）における線材（ケーブル８０）が発生する反力（Ｒ）を関連づけたレコードである。
【００４５】
例えば、図２の例では、速度テーブル９１２〜９６２は、関節駆動速度Ｖ１、Ｖ２、Ｖ３（…）で回転関節１１〜６１を駆動しつつ、各々、特定の関節角度（θ）において線材（ケーブル８０）が発生する反力（Ｎｍ）を格納する。なお、ここでは、関節駆動速度はＶ１、Ｖ２、Ｖ３の３種類を示しているが、回転関節１１〜６１を駆動する時の速度（変速）の範囲は３種類に限らず、より多数（あるいは少数）の速度における反力（Ｎｍ）を格納する区画記憶領域を配置することもできる。
【００４６】
図２の中央下部のＶ１、Ｖ２、Ｖ３は、それぞれその上部の縦列に格納されている関節駆動速度Ｖ１、Ｖ２、Ｖ３（動的な駆動制御条件）における関節角度（θ）と反力（Ｎｍ）を関係づけたレコードを格納した区画記憶領域に相当する。この各区画記憶領域（Ｖ１〜Ｖ３…）は、角度テーブル９１１〜９６１との比較から明らかなように、角度テーブル９１１〜９６１と見かけ上、同等のレコード構成を有している。この速度テーブル９１２〜９６２は、ケーブル反力の粘性的な挙動に関するテーブルメモリである、といえる。なお、モータ（９２：図３）などにより回転関節１１〜６１を駆動する時関節駆動速度は、例えば角速度（ｒａｄ／秒）のような単位を用いる。
【００４７】
なお、図２の図示は理解を容易にするためのもので、実際に各区画記憶領域（Ｖ１〜Ｖ３…）を記憶空間のどのようなアドレスに配置するかは任意である。このため、各区画記憶領域（Ｖ１〜Ｖ３…）のアドレス配置は実装上は必ずしも図示のような前後（上下）関係になっている必要はない。この点は下記の非線形テーブル９１３〜９６３についても同様である。速度テーブル９１２〜９６２を作成する制御手順については、後述の図９で説明する。
【００４８】
また、図２において、非線形テーブル９１３〜９６３の区画記憶領域は、それぞれ正転（Ｄ＋）および、逆転（Ｄ−）方向に回転関節１１〜６１を駆動しつつ、各々、特定の関節角度（θ）において線材（ケーブル８０）が発生する反力（Ｎｍ）を格納する。
【００４９】
一般に、この種の線材（ケーブル８０）のような部材の変形事象において、動作の往路と復路でその部材が発生する反力の変化には、動作の往路と復路で非線形的な差が生じることが知られている。例えば、図１１に示すように、ある回転関節（１１〜６１）を関節角度０°からＡまで、正回転（Ｄ＋）方向に駆動する往路と、同じ経路を逆回転（Ｄ−）方向で戻る復路におけるケーブル反力（Ｎｍ）の変化を示している。このような動作の往路と復路で異なる非線形的な特性は一般に「ヒステリシス」などと呼ばれることがあり、このヒステリシスＨは、定量的には往路と復路の測定量の差分などとして記述される場合がある。図２の非線形テーブル９１３〜９６３は、ある関節の動的な駆動制御条件（駆動方向）に係るケーブル反力のこのような非線形的な挙動、即ちヒステリシス特性を記述したテーブルメモリである、といえる。
【００５０】
図２の右側下部のＤ＋、Ｄ−は、それぞれその上部の縦列に格納されている正転（Ｄ＋）、逆転（Ｄ−）の各関節駆動方向（動的な駆動制御条件）における関節角度（θ）と反力（Ｎｍ）を関係づけたレコードを格納した区画記憶領域に相当する。図２では、この各区画記憶領域（Ｄ＋、Ｄ−）は、角度テーブル９１１〜９６１との比較から明らかなように、角度テーブル９１１〜９６１と見かけ上、同等のレコード構成を有している。
【００５１】
ここで、非線形テーブル９１３〜９６３は、レコード構成上は、正転（Ｄ＋）および、逆転（Ｄ−）方向で、２種類の角度テーブル（９１１〜９６１）を作成したもの、と考えることができる。
【００５２】
これを敷衍すれば、正転（Ｄ＋）および、逆転（Ｄ−）方向で、２種類の速度テーブル（９１２〜９６２）を作成してもよいことが判る。そして、この正転（Ｄ＋）および、逆転（Ｄ−）方向で、作成した２種類の速度テーブル（９１２〜９６２）は、関節の駆動速度、および駆動方向の２つの動的な駆動制御条件に対応して区画された区画記憶領域を持つことになる。このテーブルは規模としては、図中央の速度テーブル（９１２〜９６２）の（正転（Ｄ＋）、逆転（Ｄ−）の）２つ分の大きさとなる。
【００５３】
図２では、この関節の駆動速度、および駆動方向の２つの動的な駆動制御条件に対応して区画された区画記憶領域を持つテーブルは明示的に図示していない。しかしながら、非線形テーブル９１３〜９６３を、２種類の角度テーブル（９１１〜９６１）として作成する手順は後述の図１０（ａ）で説明する。また、非線形テーブル９１３〜９６３を、２種類の速度テーブル（９１２〜９６２）として作成する手順は後述の図１０（ｂ）で説明する。
【００５４】
以上のようにして、関節の駆動速度（Ｖ１、Ｖ２…）、および駆動方向（Ｄ＋、Ｄ−）の動的な各駆動制御条件を反映した速度テーブル９１２〜９６２や、非線形テーブル９１３〜９６３をＲＯＭ６０２やＲＡＭ６０３などの記憶領域に用意しておく。
【００５５】
ただし、動的な各駆動制御条件を反映した制御を行うには、上記の速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３の少なくとも１つを反力テーブル９００として用意しておく。特に非線形テーブル９１３〜９６３の場合は、上記の駆動方向のみに応じて区画された非線形テーブル、あるいは関節の駆動速度、および駆動方向の双方の動的な駆動制御条件に対応して区画された非線形テーブルのいずれを用いてもよい。駆動方向のみに応じて区画された非線形テーブルは、例えば図１０（ａ）の手順で作成することができる。また、関節の駆動速度、および駆動方向の双方の動的な駆動制御条件に対応して区画された非線形テーブルは、例えば図１０（ｂ）の手順で作成することができる。
【００５６】
以上のように、反力テーブル９００として、動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリを用意しておく。これにより、制御装置９１（図３：後述）は、反力テーブル９００を、各関節の動的な駆動制御条件に応じて参照し、その動的な駆動制御条件において発生している線材（ケーブル８０）の反力値を推定することができる。そして、反力テーブル９００を参照して取得した反力値に基づき、当該の回転関節を駆動制御するロボット制御を実行することができる。
【００５７】
（トルクセンサの配置）
本実施例は、ケーブル８０の変形時の反力を推定する反力テーブル９００を回転関節１１〜６１の駆動制御に反映させることができるよう構成してある。例えば、ロボットアーム１の回転関節２１の場合、回転関節２１を駆動するモータ（不図示）の駆動トルク、即ち、このモータからリンク２０に印加される回転駆動力を測定するトルクセンサ２２が設けられる（図１（ｂ））。このトルクセンサ２２は、例えば回転関節２１の内部に配置されたモータあるいはさらに減速機から成る駆動系の駆動軸上の所定位置に配置される。
【００５８】
なお、トルクセンサ２２の構造や配置位置の詳細は不図示であるが、このような回転関節の回転駆動力を測定するトルクセンサ２２に関しては公知の構造を利用してよい。また、他の回転関節１１、３１、４１、５１、６１に関しても、それぞれトルクセンサ２２と同様のトルクセンサ１２、３２、４２、５２、６２（図３）が配置されるものとする。
【００５９】
回転関節２１の回転駆動力を測定するためのトルクセンサ２２は、上記の通り、回転関節２１を駆動するモータあるいはさらに減速機などから成る駆動系の駆動軸上の所定位置に配置される。そして、上記のように、例えば回転関節２１の軸上にケーブル８０が（半）固定されるような構造では、モータにより回転関節２１を駆動してその角度を変化させると、ケーブル８０は回転関節２１の両側で変形することになる。従って、回転関節２１の回転駆動力を測定するためのトルクセンサ２２は、実際には、このケーブル８０の変形時の反力と、回転関節２１を駆動するモータの回転駆動力が合成されたトルクを検出することになる。
【００６０】
そこで、回転関節２１に関して、ケーブル８０の変形時の反力を示す反力テーブル９００を設けている。この反力テーブル９００を用いて、例えばトルクセンサ２２の出力を回転関節２１の駆動にフィードバックする駆動制御を補正できる（後述の図５、図６）。
【００６１】
（反力テーブルの作成処理）
次に、図８、図９、図１０を参照して、制御装置９１によるテーブルメモリ作成処理、即ち、反力テーブル９００の作成手順につき説明する。図８は角度テーブル９１１〜９６１（図２）、図９は速度テーブル９１２〜９６２（図２）、図１０（ａ）、（ｂ）は、異なる２つの非線形テーブル９１３〜９６３（図２）の各作成手順を示している。これらの反力テーブル９００の作成手順は、制御装置９１が実行可能なロボット制御プログラム（の一部）として構成することができる。その場合、反力テーブル９００の作成手順を含むロボット制御プログラムは、制御装置９１（具体的には、後述のＣＰＵ６０１）が実行可能な制御プログラムとして例えばＲＯＭ６０２に格納しておく。
【００６２】
なお、角度テーブル９１１〜９６１の単体は、実質的には特許文献１に記載のテーブルと同等のものである。しかしながら、角度テーブル９１１〜９６１の作成は、速度テーブル９１２〜９６２（図２）、非線形テーブル９１３〜９６３（図２）の作成を理解する上で重要であるから、簡単に説明する。
【００６３】
ここでは、回転関節１１を例に説明する。ここで、反力テーブル９００のうち回転関節１１に対応するテーブルは角度テーブル９１１、速度テーブル９１２、非線形テーブル９１３である。
【００６４】
これらのテーブルを作成するには、回転関節１１の関節角度を順次変更しながら、回転関節１１のトルクセンサ１２で同関節に作用している力（トルク）を測定し、ケーブル８０の反力分を算出する。その際、好ましくは、ロボットアーム１のエンドエフェクタ７０およびリンク１０、２０、３０、４０、５０、６０が周囲の装置などに接触しておらず荷重を受けていない状態で、回転関節１１を動作させる。この時のトルクセンサ１２の測定値と、トルク推定値の差分から回転関節１１におけるケーブル反力として測定することができる。ただし、この時用いるトルク推定値については、ロボット装置の構造情報、例えば、ロボットアーム１の各部の重量や寸法、重心位置などから逆運動学演算によって関節に生じているトルクを演算する。
【００６５】
例えば、回転関節１１のために角度テーブル９１１を作成する場合は、任意の関節角度θで静止しその時のトルクセンサの測定値と、ロボットアーム１がその姿勢を取った時に生じる回転関節１１のトルク推定値が関節角度θにおけるケーブル反力となる。関節角度θを順次（例えば数度ないし数１０度ずつ）変更しつつ、この動作を繰り返すことにより、角度テーブル９１１を作成することができる。
【００６６】
図８は、制御装置９１（ＣＰＵ６０１）が６関節分の回転関節１１〜６１の角度テーブル９１１〜９６１を作成する手順を示している。同図のステップＳ９１では、１１〜６１をインデックスするカウンタｎ（あるいはポインタ）の値を回転関節１１を指す「１」に初期化する。ステップＳ９２では、後述のステップＳ９９でインクリメントされるカウンタｎの値が７より小さいか否かを判定する。カウンタｎの値が７より小さい間は、順に回転関節６１まで処理していないため、ステップＳ９３〜Ｓ９９の各ステップをループする。
【００６７】
ステップＳ９３では、制御装置９１はモータ（９２：図３）を制御して、ｎ軸の関節角度を反力測定を行う特定角度に制御する。ここで、「ｎ軸」とは、ｎ＝１であれば回転関節１１、ｎ＝２であれば回転関節２１、ｎ＝３であれば回転関節３１…（以下同様）の各回転関節を意味する。また、図８の処理は、当該関節の可動範囲全域に渡って実行するものとし、例えば当該関節（ｎ軸）の可動範囲が０°〜２４０°であれば、最初は０°または２４０°の可動域端部に当該関節（ｎ軸）を制御する。そして、数°ないし１０数°程度の所定ステップ角で関節角度を増加または減少させつつ、下記の処理を実行する。
【００６８】
ステップＳ９４では、制御装置９１が、当該関節のトルクセンサ（回転関節１１であれば１２：図３）よりトルク検出値を取得する。また、ステップＳ９５では、制御装置９１が、逆運動学演算によってロボットアーム１のジオメトリや各部の重量、重心位置などに基づき、当該の関節角度において当該関節に作用するトルク推定値を演算する（関節負荷計算、ないしはアーム自重計算）。
【００６９】
ステップＳ９６において、制御装置９１は、ステップＳ９４で得たトルク検出値（実際値）と、ステップＳ９４で得たトルク推定値の差分を取得する。この差分は、上述のように、当該関節の当該の関節角度（特定角度）において線材（ケーブル８０）が発生している反力値（ケーブル反力）である。そこで、ステップＳ９７では、当該の関節角度（特定角度）と、この姿勢で測定されたケーブル８０の反力値を関連づけた１レコードとして、角度テーブルに格納する。この時、テーブルデータ（レコード）を格納する格納先の角度テーブル９１１〜９６１は、例えばカウンタｎの値を用いて決定することができる。
【００７０】
ステップＳ９８では、制御装置９１は、当該関節の可動範囲全域のデータ取得を終了したか否かを判定する。当該関節の可動範囲全域のデータ取得を終了していない間は、上記の所定ステップ角で関節角度を増加（または減少させ）た上、ステップＳ９３に復帰し、上記の処理を繰り返す。一方、ステップＳ９８で当該関節の可動範囲全域のデータ取得を終了したと判定した場合には、ステップＳ９９に移行する。
【００７１】
ステップＳ９９では、次の関節をインデックスすべく、制御装置９１は、カウンタｎをインクリメント（ｎ＝ｎ＋１）し、制御をステップＳ９２の脱出判定に移す。上述の処理を繰り返した後、順に回転関節６１まで処理した後のステップＳ９２では、カウンタｎの値は７に到達している。この場合は、角度テーブル９１１〜９６１が全て作成されているので、図８の角度テーブル作成処理を終了する。
【００７２】
図９は、速度テーブル作成処理を示しており、ここでは、回転関節、およびその関節に対応する速度テーブルを特定するのに上記同様にカウンタｎを用いている。ステップＳ１０１、Ｓ１０２は図８のＳ９１、Ｓ９２と同様で、それぞれカウンタの初期化（ｎ＝１）と、全関節処理済みか否かの判定（ｎ＜７）に相当する。なお、本実施例では、一般的に広く使われているロボットアームとして６軸多関節ロボットを想定し、ｎ＜7としたが、他の軸数のロボット（３軸や７軸）でも利用する事ができる。その場合、このステップのｎの判定に用いるしきい値は、（関節数＋１）とすればよい。
【００７３】
ステップＳ１０３は、ｎ軸を所定の特定の関節角度（特定角度）に制御し、その際、目的の特定角度に当該関節を移動させる際、特定の関節駆動速度（特定速度）を用いる（ステップＳ１０４）。この時用いる関節駆動速度は、もちろん例えば図２のＶ１、Ｖ２、Ｖ３（…）などである。なお、このステップＳ１０３とＳ１０４の書き分けは便宜上のもので、実際に関節を駆動する時には、制御装置９１は、特定角度（目標角度）と、駆動速度の各パラメータをセットした上で、実際の駆動処理を開始する。
【００７４】
ステップＳ１０５、Ｓ１０６は、図８のステップＳ９４、Ｓ９５とそれぞれ同等である。ステップＳ１０５では、当該関節のトルクセンサ（回転関節１１であれば１２：図３）からトルク検出値を取得する。また、ステップＳ１０６では、制御装置９１が、当該の関節角度（あるいはさらに関節速度）において当該関節に作用するトルク推定値を演算する（関節負荷計算、ないしはアーム自重計算）。
【００７５】
続いて、ステップＳ１０７において、制御装置９１は、ステップＳ１０５で得たトルク検出値（実際値）と、ステップＳ１０６で得たトルク推定値の差分を取得する。この差分は、上述のように、当該関節の当該の関節角度（特定角度）および駆動速度（動的な駆動制御条件）において線材（ケーブル８０）が発生している反力値（ケーブル反力）である。
【００７６】
そこで、ステップＳ１０８では、当該の関節角度（特定角度）と、この姿勢で測定されたケーブル８０の反力値を関連づけた１レコードとして、当該の速度テーブルの駆動速度（動的な駆動制御条件）に対応する区画記憶領域に格納する。この時、テーブルデータ（レコード）を格納する格納先の速度テーブル９１２〜９６２は例えばカウンタｎの値を用いて決定する。また、速度テーブルの格納先である駆動速度（動的な駆動制御条件）に対応する区画記憶領域は、ステップＳ１０４で選択されている関節駆動速度（Ｖ１、Ｖ２、Ｖ３…）によって決定される。図２の例で言えば、例えば駆動速度がＶ１であれば、当該の区画記憶領域（Ｖ１）を用いる。
【００７７】
ステップＳ１０９では、全ての速度域でデータ取得を完了したか否かを判定する。例えば図２の場合では、当該関節の駆動速度をＶ１から順にＶ２、Ｖ３と変更して上記の各処理を実行する。この場合は、Ｖ３の駆動速度を用いたデータ取得を終了していれば、ステップＳ１１０に進み、まだＶ３の駆動速度まで用いていなければ駆動速度条件を変更（例えばＶ１−＞Ｖ２）してステップＳ１０４に復帰し、上記と同様の処理を実行する。
【００７８】
ステップＳ１１０は、上述のステップＳ９８と同様で、当該関節の可動範囲全域のデータ取得を終了したか否かを判定する。当該関節の可動範囲全域のデータ取得を終了していない間は、上記の所定ステップ角で関節角度を増加（または減少させ）た上、ステップＳ１０２に復帰し、上記の処理を繰り返す。一方、ステップＳ１１０で当該関節の可動範囲全域のデータ取得を終了したと判定した場合には、ステップＳ１１１に移行する。ステップＳ１１１では、次の関節をインデックスすべく、制御装置９１は、カウンタｎをインクリメント（ｎ＝ｎ＋１）し、制御をステップＳ１０２の脱出判定に移す。上述の処理を繰り返した後、順に回転関節６１まで処理した後のステップＳ１０２では、カウンタｎの値は７に到達している。この場合は、速度テーブル９１２〜９６２が全て作成されているので、図９の角度テーブル作成処理を終了する。
【００７９】
なお、速度テーブル９１２〜９６２の作成のループ制御は必ずしも図９のような態様でなくても構わない。例えば、当該関節を特定角度への駆動速度条件をＶ１、Ｖ２、Ｖ３のように選択して、図８の角度テーブル作成手順を順次実行する、といったループ構成であっても同等の速度テーブル９１２〜９６２を作成できる。その際、速度テーブルの格納先である駆動速度（動的な駆動制御条件）に対応する区画記憶領域は、ステップＳ１０４で選択されている関節駆動速度（Ｖ１、Ｖ２、Ｖ３…）によって決定する。
【００８０】
図１０（ａ）、（ｂ）は、異なる２つの非線形テーブル９１３〜９６３（図２）の各作成手順に対応する。
【００８１】
この作成手順の１つは、例えば、図１０（ａ）のように実施できる。即ち、正転（Ｄ＋）方向に関節駆動を行いながら、図８と同様の角度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、それぞれ区画記憶領域（Ｄ＋）に格納する（ステップＳ１２１：（１））。続いて、逆転（Ｄ−）方向に関節駆動を行いながら、図８と同様の角度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、それぞれ区画記憶領域（Ｄ−）に格納する（ステップＳ１２２：（２））。
【００８２】
このようにして、それぞれ正転（Ｄ＋）方向、および逆転（Ｄ−）方向のように動的に異なる関節の駆動制御条件ごとに区分された区画記憶領域（Ｄ＋、Ｄ−）に各々の関節角度〜ケーブル反力を関係づけたレコードを格納することができる。
【００８３】
この図１０（ａ）のステップＳ１２１、Ｓ１２２によって、形成される非線形テーブル９１３〜９６３は、図２右側のように、正転（Ｄ＋）方向、および逆転（Ｄ−）の各駆動方向に対応する区画記憶領域（Ｄ＋、Ｄ−）を有するものとなる。この図２の非線形テーブル９１３〜９６３は、関節角度（θ）をキーとして、その時の関節駆動方向（Ｄ＋／Ｄ−）に応じて選択した区画記憶領域（Ｄ＋、Ｄ−）から反力値を読み出す、といった手法で参照することができる。
【００８４】
なお、ステップＳ１２３として、ステップＳ１２２（２）とＳ１２１（１）で得たデータの差分、即ち、区画記憶領域Ｄ−、Ｄ＋に格納された反力値の差分を作成する処理が記載してある。必ずしも、このデータは作成する必要はないが、例えば、区画記憶領域Ｄ−の部分テーブルに換えて、このように作成した反力値差分データのみを格納することが考えられる。これにより、テーブルメモリに必要な記憶容量を削減できる可能性がある。この場合、実際のテーブル参照では、区画記憶領域Ｄ＋の当該の関節角度のデータを参照し、当該の関節角度に係る反力値差分データを作用させる（例えば加算する）ことにより、逆転（Ｄ−）方向の反力値データを求めることができる。この時、正転（Ｄ＋）方向の反力値データは、区画記憶領域Ｄ＋の当該の関節角度のデータを参照することにより、求めることができる。
【００８５】
また、既に、図２によって概略は、説明済みであるが、非線形テーブル９１３〜９６３は、正転（Ｄ＋）方向、および逆転（Ｄ−）の各駆動方向で関節駆動を行いつつ、それぞれ速度テーブルを作成することによっても作ることができる。図１０（ｂ）は、この処理を示している。
【００８６】
即ち、正転（Ｄ＋）方向に関節駆動を行いながら、図９と同様の速度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、区画記憶領域（Ｄ＋）に格納する（ステップＳ１３１：（１））。続いて、逆転（Ｄ−）方向に関節駆動を行いながら、図９と同様の速度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、区画記憶領域（Ｄ−）に格納する（ステップＳ１３２：（２））。なお、この際、関節角度〜ケーブル反力を関係づけたレコードは、関節駆動速度の条件（動的な駆動制御条件）に応じて区画された区画記憶領域（Ｄ＋またはＤ−）に格納されるのはいうまでもない。
【００８７】
このような作成処理によって、正転（Ｄ＋）方向、および逆転（Ｄ−）に対応する２つの区画記憶領域（Ｄ＋またはＤ−）に、それぞれ図２の中央に示したようなレコード構成を有する２つの速度テーブルが作成される。図２の例で言えば、それぞれＶ１、Ｖ２、Ｖ３（…）の駆動速度による区画記憶領域を有する速度テーブルを正転（Ｄ＋）方向、および逆転（Ｄ−）に対応する２つの区画記憶領域（Ｄ＋またはＤ−）に格納したのと同等のテーブル構成になる。
【００８８】
図１０（ｂ）のようにして作成した、非線形テーブル９１３〜９６３は、関節の駆動速度と、関節駆動方向の各々の動的な駆動制御条件に応じて区画された区画記憶領域を有している。従って、ある関節角度への関節動作において、非線形テーブル９１３〜９６３を参照する時、制御装置９１は、その時の駆動速度と、関節駆動方向に応じて、対応する区画記憶領域を選択することができる。これにより、駆動速度と、関節駆動方向の各々の動的な駆動制御条件の双方が反映された反力値を制御装置９１を取得できる。そして、取得した駆動速度と、関節駆動方向の各々の動的な駆動制御条件の双方が反映された反力値に基づき、関節制御（例えば後述のトルクサーボ制御）を行うことができる。
【００８９】
なお、図１０（ｂ）のステップＳ１３３は、図１０（ａ）のステップＳ１２３と同様に、例えば区画記憶領域Ｄ−（あるいはＤ＋）の部分テーブルに換えて格納する差分形式のケーブル反力値を作成する処理である。この差分形式のケーブル反力値作成は、差分データを区画記憶領域Ｄ−（あるいはＤ＋）の部分テーブルに換えて格納する必要がなければ必ずしも実行する必要はない。
【００９０】
なお、以上では、回転関節１１〜６１のトルクセンサ（１２、２２…）の実測値と、回転関節１１〜６１のトルク推定値の差からケーブルの反力を求めてケーブル反力テーブルを作成する例を示した。ここで、回転軸の方向を重力方向と一致させることができる回転関節の場合には、ケーブル反力テーブル作成の際、対象の回転関節に重力が印加されないようにアームの姿勢を制御して測定を行うようにしてもよい。この場合には、当該回転関節の駆動負荷はケーブル反力のみとなる。このため、トルクセンサから測定した検出値をそのままケーブル反力値としてテーブルに格納することができる。ただし、アームのジオメトリによってはこのような反力値測定を行えない場合もある。しかしながら、このような反力値測定を行える関節については、関節に負荷されるトルクの推定誤差の影響を除去（ないし低減）できる利点がある。
【００９１】
また、図８〜図１０の角度、速度、非線形の各テーブルの作成においては、ロボットアーム１にケーブルを配置する前に、ケーブル反力を測定する専用の測定装置を用いて、反力値を測定することにより、反力テーブル９００を作成してもよい。
【００９２】
しかしながら、ユーザ設置環境に応じて実際に配置されるケーブル（８０）は多種多様である可能性があり、また、個体差の範囲も様々である可能性がある。このため、上記のように専用の測定装置を用いた場合にはロボットアーム１の製造時にすべてのユーザの使用状態に適したテーブルを作成することができず、ケーブルの反力の推定精度が低下し、制御の精度が低下する可能性がある。
【００９３】
これに対して、テーブルを利用するのと同じロボット装置で反力テーブル９００を作成することにより、反力テーブル９００参照によるケーブル反力の推定精度、およびそれに基づく関節制御の精度を向上させることができる。図８〜図１０に示した反力テーブル９００の作成処理は、製造後の適当なタイミングで、ユーザが利用する環境で少なくとも１度、実施すればよい。
【００９４】
例えば、反力テーブル９００の新規作成処理（ないしデータ更新処理）は、出荷時、ユーザ環境への設置時、電源投入に伴う初期化時、あるいは定期点検時などのタイミングで実施することができる。
【００９５】
（制御装置）
図３は、本実施例のロボット装置の制御系の構成例を示している。図３において、ロボット装置の制御システム９７は制御装置９１（図１（ａ））と指令装置９４により構成されている。制御装置９１は、図３の右側に示した下記の各部を制御することにより、ロボットアーム１の動作を制御する。
【００９６】
図３では、上述の回転関節１１、２１、３１、４１、５１、６１を駆動する各モータはモータ９２の１ブロックにより示してある。モータ９２は、例えばサーボモータであり、各回転関節のモータ９２には関節回転角を位置制御するために回転角を検出するエンコーダ９５が（それぞれ）併設される。より詳細には、エンコーダ９５はモータ９２の出力軸、ないしはその回転出力を減速する減速機の出力軸、あるいはこれら出力軸の双方に配置される。
【００９７】
また、例えば回転関節１１、２１、３１、４１、５１、６１の回転駆動トルクの制御（例えばトルクサーボ）のために、上述のトルクセンサ１２、２２、３２、４２、５２、６２が各回転関節の駆動系（不図示）の一部に配置されている。これらトルクセンサ１２、２２、３２、４２、５２、６２も、図３では１ブロックによって図示されている。
【００９８】
さらに、上述の回転関節１１、２１、３１、４１、５１、６１のための反力テーブル９００は、制御装置９１のメモリ９１ａに保存されている。メモリ９１ａの記憶領域は、後述のＲＯＭ６０２、ＲＡＭ６０３（図７）などを用いて構成することができる。あるいは、不図示のＨＤＤ（ＳＳＤ）、各種フラッシュメモリなどの外部記憶装置を設けて、例えばデータファイルの形式で反力テーブル９００を記憶させてもよい。
【００９９】
制御装置９１は、各関節のエンコーダ９５を用いて、各関節の回転角（姿勢）を検出し、例えばエンドエフェクタ７０が所定の位置姿勢を取るように、ロボットアーム１全体が所望の位置姿勢を取るよう制御する。
【０１００】
また、制御装置９１は、上記のトルクセンサ１２〜６２により検出した各関節の駆動トルクに基づき、各関節のモータ９２の駆動エネルギーを制御（例えばＰＷＭ制御など）することにより、各関節の駆動トルクを所望の値に制御することができる。これにより、例えば、エンドエフェクタ７０でワークを操作する際にワークの物性（例えば剛性や強度）に応じた力が対象物のワークに加わらないように制御する、といった制御が可能となる。
【０１０１】
もし、ケーブル反力に起因してこのようなトルク制御に大きな誤差が生じた場合には、特に対象物のワークに対する操作力が小さな範囲に制限されるような用途にロボット装置を用いることが難しくなる。しかしながら、本実施例では、回転関節の駆動制御条件に関して、関節角度のような静的な駆動制御条件のみならず、駆動速度および駆動方向に係る非線型（ヒステリシス）特性のような動的な駆動制御条件を考慮したケーブル反力テーブルを用いる。このため、現実の関節駆動条件に即したケーブル反力の補正が可能であり、従って、正確なトルク制御に基づき各関節を制御することができる。従って、対象物のワークに対する操作力が小さな範囲に制限されるような用途においても、ロボット装置を適用することができ、ワークの損傷などを生じることなく、信頼性の高い対象物操作を行える。
【０１０２】
ここで、エンコーダ９５を用いた位置（姿勢）制御、およびトルクセンサ１２、２２、３２、４２、５２、６２を用いたトルク制御（トルクサーボ）のそれぞれは公知の制御である。例えば、制御装置９１は、特定の回転関節について、予めプログラムされた（あるいは指令装置９４により指定された）回転角度、ないしは関節駆動トルクの目標値と、エンコーダ９５およびトルクセンサ１２〜６２の実測値を用いてモータ９２を制御する。その場合、制御装置９１が目標値と実測値が一致するように制御を行うことによって、所期のロボット動作を実現する。
【０１０３】
本実施例では、さらに、トルクセンサ１２、２２、３２、４２、５２、６２を用いたトルク制御（トルクサーボ）に、上述の反力テーブル９００で示すケーブル反力を反映させることができる。
【０１０４】
上述のように、反力テーブル９００は特に各関節のトルクセンサと同じ回転軸廻りに外乱として働くケーブル反力と回転関節の動きを示している。一方、トルクセンサ１２、２２、３２、４２、５２、６２は、各回転関節の駆動系の一部に配置されるため、機構上、モータ９２の駆動トルクと上記ケーブル反力の合力を測定することになる。従って、例えば、後述のようにトルクセンサ１２、２２、３２、４２、５２、６２を用いたトルク検出値を、反力テーブル９００で示すケーブル反力を用いて補正することができる。これにより、ケーブル反力の外乱成分を除去し、各回転関節に関して正確なトルク制御（トルクサーボ）を実施することができる。
【０１０５】
なお、より詳細には、制御装置９１は、例えば図７に示すように、汎用マイクロプロセッサなどから成るＣＰＵ６０１を中心として構成することができる。図７において、制御装置９１は、例えばＣＰＵ６０１と、各部を制御するためのロボット制御プログラムを記憶するＲＯＭ６０２と、データを一時的に記憶するＲＡＭ６０３と、インタフェース回路６０４、６０５から構成することができる。
【０１０６】
ＲＯＭ６０２は、後述のようなトルク制御を含むロボット制御プログラムを記憶するコンピュータ（ＣＰＵ６０１）により読み取り可能な記録媒体に相当する。ＣＰＵ６０１は、例えばＲＯＭ６０２に格納されたロボット制御プログラムを実行することにより、後述のようなトルク制御を含むロボット制御を実行する。
【０１０７】
なお、例えばＲＯＭ６０２の一部は、書き換え可能な不揮発領域により構成できる。その場合、不図示のフラッシュメモリや光ディスクのようなコンピュータ読み取り可能な記録媒体や、ネットワークなどを介して取得したロボット制御プログラムを新たに上記書き換え可能な不揮発領域にインストールすることができる。また、上記書き換え可能な不揮発領域に格納されているロボット制御プログラムは、上記コンピュータ読み取り可能な記録媒体や、ネットワークなどを介して取得したデータによって更新することもできる。
【０１０８】
上述の反力テーブル９００を格納するメモリ９１ａ（図３）の記憶領域は、ＲＯＭ６０２、ＲＡＭ６０３（図７）などを用いて構成することができる。インタフェース回路６０４は、例えば指令装置９４との間のデータ入出力に用いることができる。また、インタフェース回路６０５は、例えば上述のモータ９２、エンコーダ９５、トルクセンサ１２、２２、３２、４２、５２、６２に対するデータ入出力に用いることができる。また、反力テーブル９００を不図示のＨＤＤ（ＳＳＤ）、各種フラッシュメモリなどの外部記憶装置に格納する場合には、インタフェース回路６０５をこれら外部記憶装置の反力テーブル９００にアクセスするために用いることができる。
【０１０９】
ロボットアーム１の動作指令を与える指令装置９４には、不図示の記憶装置（例えばＲＡＭ、ＲＯＭや外部記憶装置）が設けられる。この記録装置には、製品組み立てなどを行うのに必要なロボットアーム１のロボット制御情報が記録されているものとする。このロボット制御情報は、例えば複数の教示点データ、あるいはロボット制御プログラムの書式などによって記述される。また、このロボット制御情報の記憶装置は、指令装置９４側ではなく、制御装置９１側のＲＡＭ６０３やＲＯＭ６０２、あるいは不図示の外部記憶装置（例えばＨＤＤやＳＳＤ）によって構成することもできる。
【０１１０】
作業者は、指令装置９４を操作して、予め作成された上記のロボット制御情報の実行（再生）を指定することにより、ロボットアーム１に予めプログラムした動作を行わせることができる。また、指令装置９４がティーチングペンダントなどの教示装置である場合には、指令装置９４の関節の動作をジョグ操作方式などにより指令する操作キーを操作して、ロボットアーム１に対話的に任意の動作を行わせることができる。その場合、順次実行させた動作を上記の記憶装置にロボット制御情報として記憶させることもできる。上記のロボット装置の教示操作や、ロボット制御情報の格納方式については公知技術であるため、ここでは上記以上の詳細な説明は省略する。
【０１１１】
本実施例では、制御装置９１は、トルクセンサ１２〜６２の測定誤差（外乱）として作用するケーブル反力を反力テーブル９００から推定できる。そして、例えば、ケーブル反力テーブルの示す値から差し引く補正制御を行うことができる（後述の図６）。このようにトルクセンサ１２〜６２の出力値からケーブル反力の成分を差し引く補正演算を行うことにより、各モータ９２が減速機（不図示）を介して当該関節の手先側のリンクに実際に与えているトルクの実際値をより正確に算出することができる。そして、ケーブル反力を除去して得たトルク値と、指令装置９４から関節で生じるトルク目標値が一致するように制御を行うことによって、より正確にロボットアーム１の関節のトルク（サーボ）制御を実行することができる。なお、制御装置９１のＣＰＵ６０１で実行可能なロボット制御の実例については後述の実施例２で説明する。
【０１１２】
以上のように、本実施例では、回転関節１１、２１、３１、４１、５１、６１に関して、反力テーブル９００を設けている。そして、反力テーブル９００を用いて各関節の駆動トルクを測定するトルクセンサ１２〜６２の出力を補正する補正演算を実施することができる。
【０１１３】
なお、ロボット装置の回転関節のトルク制御においては、トルク制御性を向上させるため、関節にトルクセンサを設置して駆動トルク値を検出して当該関節のモータ制御にフィードバックするトルク制御が行われることがある。このようなトルク制御（サーボ）では、理想的には、トルクセンサ１２〜６２の測定値は関節がリンクに与えているトルクのみを測定する必要がある。しかしながら、ロボットアーム１の内外に沿ってケーブル８０を配設すると、ロボット動作に伴うケーブル８０の変形により生じるケーブル反力がトルクセンサ１２〜６２の測定値に誤差を生じさせる可能性がある。
【０１１４】
これに対して、本実施例では、ケーブルが変形することで生じる反力をケーブル反力テーブルで推定し、トルクセンサで測定したトルク値を補正することで、誤差の少ない値をフィードバックすることができる。従って、従来は、トルクセンサの誤差によって不可能であった微小な力の範囲で関節のトルク制御を行うことができるようになり、特に微小重量の微細な部品を力（トルク）制御を作用させて組み立てることができるようになる。
【０１１５】
これにより、従来、特別に設計、製造された専用装置を用いる必要なく、汎用的な多関節ロボットを力（トルク）制御で用いることにより、従来はこの種のロボットで不可能であった微細部品の製造、組み立てを行うことができるようになる。
【０１１６】
また、回転関節に配置したトルクセンサで検出したトルク値は、ロボットアームの振動抑制に利用されることがある。特に、多関節のロボットアームでは、動いている状態から停止した時のエンドエフェクタ７０の振動が問題になる事がある。例えば、ロボットアーム先端の位置がオーバーシュートし、エンドエフェクタが他の部材に緩衝、接触するなどした状況において、振動が停止するまでの待ち時間が組み立て時間短縮のネックになる場合がある。
【０１１７】
上記のロボットアーム１において、各関節に設けたトルクセンサ１２、２２、３２、４２、５２、６２はこの振動問題に対処するために利用することができる。例えば、トルクセンサ１２、２２、３２、４２、５２、６２により当該の関節に生じているトルクを計測し、そのトルクを打ち消すように当該関節を駆動するモータ９２を駆動する制御を行うことにより、ロボットアーム１の振動を抑えることができる。
【０１１８】
そして、本実施例によれば、トルクセンサ１２、２２、３２、４２、５２、６２の出力値から、反力テーブル９００によって、各関節で生じているケーブル反力を外乱として除去することができる。このため、本実施例によれば、当該関節が支持しているリンクに生じている実トルク値を極めて精度良く測定でき、この実トルク値をロボットの振動抑制にフィードバックすることにより、この振動抑制性能の向上も期待できる。
【０１１９】
＜実施例２＞
本実施例では、上述の制御装置９１のＣＰＵ６０１で実行可能なロボット制御手順（ロボット制御プログラム）の例をいくつか例示する。図５、および図６は、それぞれ制御装置９１のＣＰＵ６０１で実行可能なロボット制御手順（ロボット制御プログラム）の流れを示している。
【０１２０】
図５の制御例は、反力テーブル９００の示すケーブル反力に応じて、指令装置９４による回転関節を駆動するための指令値を補正するものである。また、図６の制御例は、反力テーブル９００が示すケーブル反力に応じて、各回転関節のトルクセンサ１２、２２、３２、４２、５２、６２の出力値を補正してトルク制御をするものである。図５、図６の制御は、理解を容易にするため、特定の１つの回転関節に係る制御に単純化して図示してある。図５、図６に示した制御は、ＣＰＵ６０１が実行するロボットプログラムの一部として例えばＲＯＭ６０２などに格納しておくことができる。
【０１２１】
図５、図６の制御では、いずれも上述の反力テーブル９００（図２）を用いる。ただし、本実施例では、動的な各駆動制御条件を反映した制御を行ものとし、図２の速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３の少なくとも１つを反力テーブル９００として用意しておく。図２の角度テーブル９１１〜９６１のみを用いて、関節の駆動制御を行うこともできるが、その場合には、特許文献１に関して述べた問題点を解決できない可能性がある。
【０１２２】
指令装置９４はロボットアーム１の回転関節１１、２１、３１、４１、５１、６１の位置ないし姿勢に係る指令値を制御装置９１に送信できるものとする。ここで図５の制御は１関節に係る制御として示してあるが、制御装置９１が指令装置９４から指令値を受信すると、受信した指令値に応じて当該の駆動制御を行うための指令値を当該関節のモータ９２に送信する。
【０１２３】
図５において、ＣＰＵ６０１はステップＳ７４において指令装置９４から、同図の制御に係る回転関節の駆動制御に係る指令値を受信すると、ステップＳ７５において、受信した指令値に係る回転関節（上記回転関節のいずれか）の回転方向を判定する。回転関節の制御に用いられるこの種の指令値、特に回転角度に係るものは、例えばその回転関節のある特定の回転方向に関する指令値は正（＋）、その逆の回転方向に関する指令値は負（−）の符号により表現される。そこで、例えばステップＳ７４において受信した指令値の符号などを解釈することにより、指令値に相当する回転関節の回転方向が正（＋）か負（−）（あるいは正方向か逆方向）のいずれであるかを判定できる。
【０１２４】
同時に、ＣＰＵ６０１はステップＳ７１で図５の制御に関係する回転関節に関して設けられた反力テーブル９００から、出力するケーブル反力の測定値を取得する（反力値取得）。さらに、ステップＳ７２では反力テーブル９００）の示す値（例えばその符号）から、当該の関節が支持しているケーブル８０の荷重の方向を判定する。ステップＳ７１、Ｓ７２の反力テーブル９００との入出力と荷重方向判定、および、ステップＳ７４、Ｓ７５の指令装置９４との入出力と動作方向判定は、例えばハードウェア割り込みなどを利用して並行的に実行することができる。
【０１２５】
ここで、図２の反力テーブル９００の場合、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じて速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３の動的な各駆動制御条件に応じて区画された領域を参照する。具体的には、これら各テーブルは関節角度をキーとして参照し、その場合、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じてその駆動速度、駆動方向に応じて区画された領域を参照する。これにより、各関節の動的な駆動制御条件に応じて、ケーブル８０の変形に起因して回転関節２１に印加されるケーブル反力を正確に推定することができる。
【０１２６】
ケーブル反力（荷重）は、当然ながらこの関節の回転方向と同様に正（＋）か負（−）（あるいは正方向か逆方向）の回転方向を有する。ＣＰＵ６０１は、ステップＳ７２において、この関節の回転方向を反力テーブル９００を用いて検出する。
【０１２７】
ステップＳ７６では、ステップＳ７５、Ｓ７２でそれぞれ特定した指令装置９４の指令値に係る回転関節の動作方向と、当該関節に関して反力テーブル９００で特定したケーブル反力の方向の一致または不一致を判定する。
【０１２８】
そして、両者の方向が一致（Ｓ７７）している場合には、ケーブル反力が当該関節を駆動するモータ（９２）の駆動力をアシストしていることになる。この場合は、ステップＳ７９に進み、指令装置９４の指令に応じて当該関節のモータ（９２）に送信する指令値を、ケーブル反力の大きさに応じた量、小さくする補正を行う。
【０１２９】
一方、ステップＳ７６で両者の方向が不一致（Ｓ７８）の場合には、ケーブル反力が当該関節を駆動するモータ（９２）の駆動力に抵抗する方向に働いていることになる。この場合は、ステップＳ８０に進み、指令装置９４の指令に応じて当該関節のモータ（９２）に送信する指令値を、ケーブル反力の大きさに応じた量だけ大きくする補正を行う。
【０１３０】
一方、図６は、反力テーブル９００により推定したケーブル反力をトルクセンサ１２、２２、３２、４２、５２、６２の出力値を用いたトルク制御に作用させる場合の制御例を示している。図６の制御では、予め用意されたロボット制御プログラム（不図示）に基づき、図示の制御手順に係る回転関節の指令値が定められ、その指令値をモータ（９２）に送り、当該関節を駆動する処理（不図示）が並行して実行されているものとする。なお、図６の制御においても、反力テーブル９００としては速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３の少なくとも１つを配置しておくものとする。
【０１３１】
図６のステップＳ８３において、ＣＰＵ６０１は同図の制御に係る特定の回転関節に設けられたトルクセンサ（１２、２２、３２、４２、５２、６２）の測定データを取得し、ステップＳ８４では当該関節の回転方向を判定する。ステップＳ８４の回転方向の判定では、上記制御により別途発生されている当該関節のモータ９２の指令値（の符号）を用いてもよく、また、当該関節に係るトルクセンサの出力値の符号を用いてもよい。
【０１３２】
一方、ステップＳ８１では、図６の制御に関係する回転関節に関して設けられた反力テーブル９００から出力するケーブル反力値を取得する。この時、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じて反力テーブル９００の速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３の動的な各駆動制御条件に応じて区画された領域を参照するのは図５と同様である。具体的には、これら各テーブルは関節角度をキーとして参照し、その場合、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じてその駆動速度、駆動方向に応じて区画された領域を参照する。これにより、各関節の動的な駆動制御条件に応じて、ケーブル８０の変形に起因して回転関節２１に印加されるケーブル反力を正確に推定することができる。
【０１３３】
ステップＳ８２では反力テーブル９００の出力した反力値の、例えばその符号から、当該の関節が支持しているケーブル８０の荷重の方向を判定する。ステップＳ８１、Ｓ８２のケーブル反力テーブルとの入出力と荷重方向判定、および、ステップＳ８３、Ｓ８４の指令装置９４との入出力と動作方向判定は、例えばハードウェア割り込みなどを利用して並行的に実行することができる。
【０１３４】
ステップＳ８６では、図５のステップＳ７６と同様にステップＳ８４、Ｓ８２でそれぞれ特定した回転関節の動作方向と、当該関節に関して反力テーブル９００が示すケーブル反力の方向の一致または不一致を判定する。
【０１３５】
そして、両者の方向が一致（Ｓ８７）している場合には、当該関節に係るトルクセンサは、当該関節に係るケーブル反力テーブルで推定した値の分が加算されて出力していることになる。即ち、実際にこの関節のモータ（９２）が発生している関節駆動トルクは、トルクセンサで検出している値よりも小さいはずである。この場合は、ステップＳ８９に進み、真の（実）関節駆動トルクを演算するために、当該関節に係るトルクセンサの出力値から、当該関節に係るケーブル反力テーブルで推定したケーブル反力の値を減算する補正を行う。
【０１３６】
一方、ステップＳ８６で両者の方向が不一致（Ｓ８８）の場合には、当該関節に係るトルクセンサは、当該関節に係るケーブル反力テーブルで推定したケーブル反力の分が減算された値を出力していることになる。即ち、実際にこの関節のモータ（９２）が発生している関節駆動トルクがトルクセンサで検出している値よりも大きいはずである。この場合は、ステップＳ９０に進み、真の（実）関節駆動トルクを演算するために、当該関節に係るトルクセンサの出力値に当該関節に係る反力テーブル９００で推定したケーブル反力の値を加算する補正を行う。
【０１３７】
続いて、ステップＳ９１で、ステップＳ８９、Ｓ９０においてケーブル反力の分を補正した真の（実）関節駆動トルク値を用いて、当該関節のモータ（９２）に与える関節駆動トルクの指令値を演算する。ステップＳ９１のトルク制御演算の目的の１つは、例えば上述のようにエンドエフェクタ７０により微細な部品（ワーク）などを取り扱う場合のトルク制限などが考えられる。この場合は、例えば、当該関節の駆動トルクが所定値を超えないように指令値を演算する。ステップＳ９１のトルク制御演算では、上述のようにロボットアーム１の振動を抑制するための指令値演算を行うこともできる。
【０１３８】
ステップＳ９２では、ステップＳ９１のトルク制御演算の結果、得られた指令値を当該関節のモータ（９２）に送信する。
【０１３９】
以上、図５、図６に示したように、回転関節（１１〜６１）に関して配置した反力テーブル（９００）により推定したケーブル（８０）の反力値に基づき、当該の関節を駆動する駆動源としてのモータ（９２）を駆動制御することができる。反力テーブル（９００）は、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じて参照される。即ち、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じて反力テーブル９００の速度テーブル９１２〜９６２、または非線形テーブル９１３〜９６３のその駆動速度、駆動方向に応じて区画された領域を参照する。
【０１４０】
これにより、図５、図６のいずれの制御でも、各関節の動的な駆動制御条件（例えば駆動速度、駆動方向）に応じて、正確なケーブルの反力値を取得することができる。
【０１４１】
特に、図５の制御では、反力テーブル９００からケーブル反力の方向と当該関節の動作方向の関係に応じて、当該関節の駆動源としてのモータ（９２）の指令値を補正することができる。例えば、ケーブル反力が当該関節の関節動作を補助しているか、あるいは関節動作に抵抗しているかに応じて、当該関節の駆動源としてのモータ（９２）の指令値を補正することができる。
【０１４２】
また、図６の制御では、回転関節（１１〜６１）に関して設けたトルクセンサ（１２〜６２）の検出した回転駆動トルク値に外乱として含まれているケーブル（８０）のケーブル反力の成分を除去して、真の（実）回転駆動トルク値を検出できる。そして、テーブル参照により正確に求めたケーブル反力の成分を除去した真の（実）回転駆動トルク値を用いて、正確に当該関節の駆動源としてのモータ（９２）の指令値（目標値）を補正することができる。なお、この種のトルク制御の目標値（指令値）は、制御装置９１（ＣＰＵ６０１）が力（トルク）制限や振動抑制などの目的に応じて決定する。
【０１４３】
以上のように、本実施形態では、ロボットアーム（１）の少なくとも回転関節の駆動源に駆動信号を伝達する線材としてのケーブル（８０）に関し、ケーブル（８０）の変形に伴うケーブル反力を推定する反力テーブル（９００）を配置する。このため、反力テーブル９００で推定したケーブル反力を回転関節の駆動源としてのモータ（９２）の駆動制御に正確にフィードバックすることができ、位置制御やトルク制御を含む高精度なロボット制御を行うことができる。即ち、反力テーブル９００により、ロボット装置の関節（あるいはエンドエフェクタ）との駆動信号の伝達に用いられる線材であるケーブル（８０）の反力を推定し、その推定値を用いて高精度なロボット制御を行うことができる。
【０１４４】
なお、回転関節１１〜６１に関して配置したトルクセンサ１２〜６２で測定した回転駆動トルクをモータ９２への動作指令値にフィードバックする場合、上述のような力（トルク）制御のみならず位置制御にフィードバックすることも考えられる。例えば、トルクセンサ１２〜６２で測定した回転駆動トルクに基づき、ロボットアーム１のエンドエフェクタ７０の位置ずれを検知して、その位置ずれに応じたモータ９２の駆動量（位置制御指令）にフィードバックすることが考えられる。このように回転駆動トルクを関節の位置制御にフィードバックすることにより、エンドエフェクタ７０の位置精度が高くなるという効果がある。なお、トルクセンサ１２〜６２で測定した回転駆動トルクをモータ９２への位置制御指令にフィードバックする場合には、動作指令値として指令している位置（例えば回転角）を調整する制御や、位置指令のゲインを変更する制御を行うことができる。
【０１４５】
以上の各実施例では、線材（ケーブル８０）が発生する反力値を、関節角度ごとに関節の駆動速度、動作方向、といった動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリを用いる。
【０１４６】
ここで、関節角度〜線材の反力値の関係は静的な弾性関係と考えることができ、一方、動的な駆動制御条件に関しては、関節の駆動速度〜反力値の関係は粘性的な関係（粘性関係）と考えることができる。また、別の動的な駆動制御条件、関節の動作方向〜反力値の関係は、ヒステリシスが作用する非線形な関係（非線形関係）と考えることができる。
【０１４７】
上記各実施例では、これら弾性関係のみならず、粘性、非線形性の観点でテーブル化して推定している。具体的には、弾性関係である関節角度〜線材の反力値の関係を、関節の駆動速度、動作方向、といった動的な駆動制御条件ごとに区画されたテーブルメモリの区画記憶領域に格納する。そして、テーブルメモリを用いて関節駆動時の線材（ケーブル８０）の反力値を取得（推定）する場合は、関節の駆動速度、動作方向のような動的な駆動制御条件に対応する区画記憶領域を参照する。これにより、関節角度〜線材の弾性関係のみならず、関節の駆動速度、動作方向のような動的な駆動制御条件を反映した、より正確な線材（ケーブル８０）の反力値を取得（推定）することができる。
【０１４８】
取得（推定）した線材（ケーブル８０）の反力値は、例えば関節に作用するトルクをトルクセンサで測定して関節を駆動する駆動源を制御するトルクサーボ制御に利用することができる。上記各実施例のテーブルメモリによれば、関節の駆動速度、動作方向のような動的な駆動制御条件を反映したより正確な線材（ケーブル８０）の反力値を取得（推定）することができる。このため、関節のトルクサーボ制御の精度が向上し、より高い精度でロボット装置を制御することができる。これにより、トルクセンサを用いてワークやリンクに加わる力をトルク（力）制御する場合には、トルクセンサの出力から外乱として作用する線材の反力を除去するなどの演算ができ、正確なトルク検出に基づき、的確なトルク（力）制御を行うことができる。
【０１４９】
従って、例えば汎用構成のロボット装置において、関節の力制御を正確に行うことができ、繊細な力制御の必要な数グラム程度の重量の小さい部品の組み立てを実現することができる。そして、微小重量の部品を組み立てる生産ラインにおいて、専用装置や、人力による手動作業などを必要とせず、汎用構成のロボット装置を用いることが可能となる。従って、従来は必要であった、専用装置の設計、製造コストの削減、あるいはさらに製作期間の削減、といった効果を期待できる。また、微細部品を組み立てる生産ラインの立ち上げコストを低減することが可能になる。
【符号の説明】
【０１５０】
１…ロボットアーム、１２、２２、３２、４２、５２、６２…トルクセンサ、８０…ケーブル、９００…ケーブル反力テーブル。
【図１】
0006739954.tif 000002
【図２】
0006739954.tif 000003
【図３】
0006739954.tif 000004
【図４】
0006739954.tif 000005
【図５】
0006739954.tif 000006
【図６】
0006739954.tif 000007
【図７】
0006739954.tif 000008
【図８】
0006739954.tif 000009
【図９】
0006739954.tif 000010
【図１０】
0006739954.tif 000011
【図１１】
0006739954.tif 000012