以下、添付図面に示す実施例を参照して本発明を実施するための形態につき説明する。なお、以下に示す実施例はあくまでも一例であり、例えば細部の構成については本発明の趣旨を逸脱しない範囲において当業者が適宜変更することができる。また、本実施形態で取り上げる数値は、参考数値であって、本発明を限定するものではない。
<実施例1>
(ロボット装置の基本構成)
図1(a)、(b)は本発明を採用したロボット装置の一例として、多関節ロボット装置の全体構成を示している。図1(a)は、本実施例のロボット装置を例えば側面から示している。図1(a)の左下部には、このロボット装置制御に用いられる3次元(XYZ)座標系の座標軸を示してある。図示の通り、これら座標軸のうちZ軸は図の上方へ、またX軸は図の左方向へ向かうよう配置されている。図1(b)は、同ロボット装置のロボットアーム1を例えば後方(図1(a)の右方)から示している。図1(b)右下部にも同様の3次元(XYZ)座標系の座標軸を示してある。例えば、図1(a)に示したロボットアーム1の姿勢を初期姿勢とする。
図1(a)に示すように、ロボット装置はロボットアーム1(ロボット本体)と、ロボットアーム1を制御する制御装置91を含む。より詳細には、図3に示すように、制御装置91には指令装置94が接続され、これら制御装置91および指令装置94によってロボットアーム1(ロボット本体)の制御システム97が構成される。指令装置94は、例えばティーチングペンダントのような教示装置である。さらに制御装置91には後述する反力テーブル900を記憶する反力テーブル記憶部を有する。
指令装置94には、例えば、ロボットアーム1の関節の姿勢(位置や角度)、あるいはロボットアーム1先端などに配置された基準位置の位置などを移動させるための操作キーを含む操作部が配置される。指令装置94の操作部で何らかのロボット操作が行われると、指令装置94の操作に応じて、制御装置91はケーブル80(線材)を介して操作を介してロボットアーム1の動作を制御する。その際、制御装置91が後述の制御プログラムを含むロボット制御プログラムを実行することにより、ロボットアーム1の各部が制御される。
指令装置94には、例えば、ロボットアーム1の関節の姿勢(位置や角度)、あるいはロボットアーム1先端などに配置された基準位置の位置などを移動させるための操作キーを含む操作部が配置される。指令装置94の操作部で何らかのロボット操作が行われると、指令装置94の操作に応じて、制御装置91はケーブル80(線材)を介して操作を介してロボットアーム1の動作を制御する。その際、制御装置91が後述の制御プログラムを含むロボット制御プログラムを実行することにより、ロボットアーム1の各部が制御される。
図1(a)、(b)に示したロボットアーム1は、複数リンクを例えばシリアルリンク形式で複数の関節(6軸)を介して相互に接続した構成を有するロボットアームである。ロボットアーム1の先端のリンク60にエンドエフェクタ70が接続されている。ロボットアーム1のリンク10、20、30、40、50、および60は、例えば各関節、本実施例では回転関節11、21、31、41、51、および61を介して次のように接続されている。
ロボットアーム1のベース100(基台部)とリンク10はZ軸方向の回転軸の周りで回転する回転関節11で接続されている。回転関節11は、例えば初期姿勢から約±180度の可動範囲を有するものとする。ロボットアーム1のリンク10とリンク20は回転関節21で接続されている。回転関節21の回転軸は、図示の状態ではY軸方向に一致している。この回転関節21は、例えば初期姿勢から約±80度の可動範囲を有するものとする。
ロボットアーム1のリンク20とリンク30は回転関節31で接続されている。この回転関節31の回転軸は、図示の状態ではY軸方向に一致している。回転関節31は、例えば初期姿勢から約±70度の可動範囲を有するものとする。ロボットアーム1のリンク30とリンク40とは、回転関節41で接続されている。この回転関節41の回転軸は、図示の状態ではX軸方向に一致している。回転関節41は、例えば初期姿勢から約±180度の可動範囲を有するものとする。
ロボットアーム1のリンク40とリンク50は回転関節51で接続されている。回転関節51の回転軸は、図示の状態ではY軸方向に一致している。この回転関節51は、例えば初期姿勢から約±120度の可動範囲を有するものとする。ロボットアーム1のリンク50とリンク60は回転関節61で接続されている。回転関節61の回転軸は、図示の状態ではX軸方向に一致している。この回転関節61は、例えば初期姿勢から約±240度の可動範囲を有するものとする。
以上のように、本実施例では、回転関節11、41、61の回転軸は、各々が結合する2つのリンクの中心軸(1点鎖線)と平行(ないしは同軸)に配置されて、この2つのリンクの回転軸廻りの(相対)角度を変化させることができるよう配置されている。一方、回転関節21、31、および51の回転軸は、これら各々が結合する2つのリンクの中心軸(同)の交差する(相対)角度を変化させることができるよう配置されている。
また、ロボットアーム1のリンク60の先端には、生産ラインにおいて組み立て作業や移動作業を行うための(電動)ハンドや(空気圧駆動の)エアハンドなどのエンドエフェクタ70が接続される。このエンドエフェクタ70は、リンク60に対してビス止めなどの(半)固定的な手段(不図示)によって装着されるか、あるいは、ラッチ(ラチェット)止めなどの着脱手段(不図示)によって装着可能であるものとする。特に、エンドエフェクタ70が着脱可能である場合は、ロボットアーム1を制御して、ロボット自身の動作によって供給位置(不図示)に配置されたエンドエフェクタを着脱ないし交換する方式も考えられる。
(ケーブル経路)
図1(a)、(b)のロボットアーム1の回転関節11〜61、ないしはエンドエフェクタ70は、例えば電気的な回転駆動源、例えばモータ(後述の92:図3)により駆動される。その場合、回転関節では、モータの他に波動歯車機構などを利用した減速機が用いられることがある。また、ハンドやグリッパのようなエンドエフェクタではラック&ピニオンのような減速ないしは駆動方向の変換機構が用いられることがある。回転関節11〜61(ないしエンドエフェクタ70)を駆動するモータは、各回転関節(ないしエンドエフェクタ70)の内部の所定位置に配置される。なお、本実施例では、これらのモータは関節内部に配置されるものとするが、モータ(ないしは減速機)は関節外部に配置されていてもよい。
回転関節11〜61の駆動手段がこのようにモータである場合、各モータを駆動するためのエネルギー(駆動電力)ないしは制御信号、即ち駆動信号を伝達するための伝達手段として、ケーブルやワイヤのような線材が必要である。このような線材には、複数の線材を結束してワイヤハーネスの形態、あるいは1本の被覆内に複数の線材を収容してマルチケーブル化した形態がある。
また、回転関節11〜61や、エンドエフェクタ70の駆動手段が、油(液)圧や空気圧を利用した圧力機構により構成される場合も考えられる。その場合は、これらロボットアーム1の各部、即ち回転関節11〜61や、エンドエフェクタ70に圧力信号から成る駆動エネルギーないしは制御信号(駆動信号)を伝達する必要がある。この場合は、駆動エネルギーないしは制御信号の伝達のための伝達手段としては、好ましくはフレキシブルな圧力チューブのような線材が用いられる。
本実施例では、説明を容易にするため、回転関節11〜61(やエンドエフェクタ70)の駆動手段はモータであり、従ってこれら各部に駆動エネルギーないしは制御信号を伝達する伝達手段としての線材は、(電気)ケーブル80であるものとする。また、ケーブル80は、例えば制御装置91から各回転関節(あるいはエンドエフェクタ70)の間を連絡する複数の線材から成り、例えばワイヤハーネス(束線)構成であるものとする。
このケーブル80の配線(取り回し)経路は、図1(a)、(b)では破線によって示してある。ケーブル80(ないしそのハーネス)は、ベース100、各リンク10〜60のケーブル80はロボットアーム1の動作を妨げたり、周辺の装置に干渉したりしないようアームの内外に配設され、任意の場所で固定(ないしは半固定)する。
(ケーブルのリンクに対する固定)
図4に、ケーブルの固定箇所を示す。ケーブルの固定位置は、対象とする回転関節に生じるケーブル反力が他の回転関節の動作の影響を受けないようにするために、例えば各回転関節の前後で最低でも1個所において固定するのが好ましい。例えば回転関節21の場合、ケーブル80は回転関節11と回転関節21の間のケーブル固定部82で固定される。さらに回転関節21と回転関節31の間のケーブル固定部83で固定される。これによりケーブル80が回転関節21に与える反力は他の回転関節の動作にかかわらず、回転関節21の動作に依存する。回転関節11、31、41、51、61に関しては、同様にケーブルを固定するためにケーブル固定部81、84、85、86を設置する。
なお、ケーブル80を各回転関節の前後で固定しない場合は、複数の関節の動作がケーブル反力の増減に影響を与えることになる。この場合は、後述するケーブル反力テーブルは、影響を及ぼし合う複数の関節の動作を反映させたテーブルとして構成する必要がある。その場合、特定関節のためのケーブル反力テーブルには、他の関節の異なる角度(姿勢)におけるデータを格納する必要があり、テーブルの規模が大きくなる。例えば後述の角度テーブルにおいて、特定関節の特定角度におけるケーブルの反力値を格納する場合、他の関節の異なる角度(姿勢)ごとに反力値を格納することになる。このためにテーブルの規模が大きくなり、またその作成が難しくなる可能性がある。これに対して、上記のようにケーブル固定部81、82…を用いてケーブル反力に対する他の関節の影響を低減(ないし除去)する構造によれば、ケーブル反力テーブルのレコード数を削減することができ、その作成のための計算資源も小さくて済む利点がある。以下では、ケーブル固定部81、82…を用い、特定の関節に係るケーブル反力に他の関節の角度(姿勢)が影響しない場合を前提として説明する。
(ケーブル反力テーブル)
図2に、回転関節11、21…を回動させた時にケーブルが発生する反力値を格納する反力テーブル900の構成例を示す。反力テーブル900は、の制御装置91のメモリ91a(図3)に格納しておくことができる。このメモリ91aは、実際には、ROM602やRAM603(後述の図7)を用いて構成することができる。
図2において反力テーブル900は、角度テーブル911、921、931、941、951、961、速度テーブル912、922、932、942、952、962、非線形テーブル913、923、933、943、953、963から構成されている。これら、角度、速度、非線形の各テーブルは回転関節11、21、31、41、51、61のそれぞれの運動とその際に発生するケーブル反力の関係を関連づけて格納する。
特に、反力テーブル900の右側に示した2つのテーブル、速度テーブル912〜962と、非線形テーブル913〜963は、本実施形態の特徴的な構成である。これら速度テーブル912〜962と、非線形テーブル913〜963は、回転関節11〜61を駆動した際に線材(ケーブル80)が発生する反力値を動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリである。
これに対して、角度テーブル911〜961は、回転関節11〜61を特定の関節角度Aに制御した時、線材(ケーブル80)が発生する反力Rの(静的な)弾性関係を格納したテーブルメモリである。角度テーブル911〜961は、上述の特許文献1で用いられているテーブルと実質的には同等のものである。もし、反力テーブル900として、角度テーブル911〜961のみを配置した構成を取ると、この構成は特許文献1の構成と実質同等であり、上述のような課題を解決することができない。このため、本実施形態では、図2の右側の2つのテーブル、速度テーブル912〜962、ないし非線形テーブル913〜963のうち、少なくとも1つを反力テーブル900に有するものとする。なお、基本的なテーブル構成に相当する角度テーブル911〜961を作成する制御手順については、後述の図8で説明する。
一方、速度テーブル912〜962と、非線形テーブル913〜963は、関節の駆動速度(V1、V2…)、および駆動方向(D+、D−)の動的な各駆動制御条件ごとに区画された区画記憶領域に線材(ケーブル80)が発生する反力を格納する。この場合、動的な各駆動制御条件に対応する各区画記憶領域に格納されるのは、角度テーブル911〜961と同様に、関節角度(A)とその関節角度(A)における線材(ケーブル80)が発生する反力(R)を関連づけたレコードである。
例えば、図2の例では、速度テーブル912〜962は、関節駆動速度V1、V2、V3(…)で回転関節11〜61を駆動しつつ、各々、特定の関節角度(θ)において線材(ケーブル80)が発生する反力(Nm)を格納する。なお、ここでは、関節駆動速度はV1、V2、V3の3種類を示しているが、回転関節11〜61を駆動する時の速度(変速)の範囲は3種類に限らず、より多数(あるいは少数)の速度における反力(Nm)を格納する区画記憶領域を配置することもできる。
図2の中央下部のV1、V2、V3は、それぞれその上部の縦列に格納されている関節駆動速度V1、V2、V3(動的な駆動制御条件)における関節角度(θ)と反力(Nm)を関係づけたレコードを格納した区画記憶領域に相当する。この各区画記憶領域(V1〜V3…)は、角度テーブル911〜961との比較から明らかなように、角度テーブル911〜961と見かけ上、同等のレコード構成を有している。この速度テーブル912〜962は、ケーブル反力の粘性的な挙動に関するテーブルメモリである、といえる。なお、モータ(92:図3)などにより回転関節11〜61を駆動する時関節駆動速度は、例えば角速度(rad/秒)のような単位を用いる。
なお、図2の図示は理解を容易にするためのもので、実際に各区画記憶領域(V1〜V3…)を記憶空間のどのようなアドレスに配置するかは任意である。このため、各区画記憶領域(V1〜V3…)のアドレス配置は実装上は必ずしも図示のような前後(上下)関係になっている必要はない。この点は下記の非線形テーブル913〜963についても同様である。速度テーブル912〜962を作成する制御手順については、後述の図9で説明する。
また、図2において、非線形テーブル913〜963の区画記憶領域は、それぞれ正転(D+)および、逆転(D−)方向に回転関節11〜61を駆動しつつ、各々、特定の関節角度(θ)において線材(ケーブル80)が発生する反力(Nm)を格納する。
一般に、この種の線材(ケーブル80)のような部材の変形事象において、動作の往路と復路でその部材が発生する反力の変化には、動作の往路と復路で非線形的な差が生じることが知られている。例えば、図11に示すように、ある回転関節(11〜61)を関節角度0°からAまで、正回転(D+)方向に駆動する往路と、同じ経路を逆回転(D−)方向で戻る復路におけるケーブル反力(Nm)の変化を示している。このような動作の往路と復路で異なる非線形的な特性は一般に「ヒステリシス」などと呼ばれることがあり、このヒステリシスHは、定量的には往路と復路の測定量の差分などとして記述される場合がある。図2の非線形テーブル913〜963は、ある関節の動的な駆動制御条件(駆動方向)に係るケーブル反力のこのような非線形的な挙動、即ちヒステリシス特性を記述したテーブルメモリである、といえる。
図2の右側下部のD+、D−は、それぞれその上部の縦列に格納されている正転(D+)、逆転(D−)の各関節駆動方向(動的な駆動制御条件)における関節角度(θ)と反力(Nm)を関係づけたレコードを格納した区画記憶領域に相当する。図2では、この各区画記憶領域(D+、D−)は、角度テーブル911〜961との比較から明らかなように、角度テーブル911〜961と見かけ上、同等のレコード構成を有している。
ここで、非線形テーブル913〜963は、レコード構成上は、正転(D+)および、逆転(D−)方向で、2種類の角度テーブル(911〜961)を作成したもの、と考えることができる。
これを敷衍すれば、正転(D+)および、逆転(D−)方向で、2種類の速度テーブル(912〜962)を作成してもよいことが判る。そして、この正転(D+)および、逆転(D−)方向で、作成した2種類の速度テーブル(912〜962)は、関節の駆動速度、および駆動方向の2つの動的な駆動制御条件に対応して区画された区画記憶領域を持つことになる。このテーブルは規模としては、図中央の速度テーブル(912〜962)の(正転(D+)、逆転(D−)の)2つ分の大きさとなる。
図2では、この関節の駆動速度、および駆動方向の2つの動的な駆動制御条件に対応して区画された区画記憶領域を持つテーブルは明示的に図示していない。しかしながら、非線形テーブル913〜963を、2種類の角度テーブル(911〜961)として作成する手順は後述の図10(a)で説明する。また、非線形テーブル913〜963を、2種類の速度テーブル(912〜962)として作成する手順は後述の図10(b)で説明する。
以上のようにして、関節の駆動速度(V1、V2…)、および駆動方向(D+、D−)の動的な各駆動制御条件を反映した速度テーブル912〜962や、非線形テーブル913〜963をROM602やRAM603などの記憶領域に用意しておく。
ただし、動的な各駆動制御条件を反映した制御を行うには、上記の速度テーブル912〜962、または非線形テーブル913〜963の少なくとも1つを反力テーブル900として用意しておく。特に非線形テーブル913〜963の場合は、上記の駆動方向のみに応じて区画された非線形テーブル、あるいは関節の駆動速度、および駆動方向の双方の動的な駆動制御条件に対応して区画された非線形テーブルのいずれを用いてもよい。駆動方向のみに応じて区画された非線形テーブルは、例えば図10(a)の手順で作成することができる。また、関節の駆動速度、および駆動方向の双方の動的な駆動制御条件に対応して区画された非線形テーブルは、例えば図10(b)の手順で作成することができる。
以上のように、反力テーブル900として、動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリを用意しておく。これにより、制御装置91(図3:後述)は、反力テーブル900を、各関節の動的な駆動制御条件に応じて参照し、その動的な駆動制御条件において発生している線材(ケーブル80)の反力値を推定することができる。そして、反力テーブル900を参照して取得した反力値に基づき、当該の回転関節を駆動制御するロボット制御を実行することができる。
(トルクセンサの配置)
本実施例は、ケーブル80の変形時の反力を推定する反力テーブル900を回転関節11〜61の駆動制御に反映させることができるよう構成してある。例えば、ロボットアーム1の回転関節21の場合、回転関節21を駆動するモータ(不図示)の駆動トルク、即ち、このモータからリンク20に印加される回転駆動力を測定するトルクセンサ22が設けられる(図1(b))。このトルクセンサ22は、例えば回転関節21の内部に配置されたモータあるいはさらに減速機から成る駆動系の駆動軸上の所定位置に配置される。
なお、トルクセンサ22の構造や配置位置の詳細は不図示であるが、このような回転関節の回転駆動力を測定するトルクセンサ22に関しては公知の構造を利用してよい。また、他の回転関節11、31、41、51、61に関しても、それぞれトルクセンサ22と同様のトルクセンサ12、32、42、52、62(図3)が配置されるものとする。
回転関節21の回転駆動力を測定するためのトルクセンサ22は、上記の通り、回転関節21を駆動するモータあるいはさらに減速機などから成る駆動系の駆動軸上の所定位置に配置される。そして、上記のように、例えば回転関節21の軸上にケーブル80が(半)固定されるような構造では、モータにより回転関節21を駆動してその角度を変化させると、ケーブル80は回転関節21の両側で変形することになる。従って、回転関節21の回転駆動力を測定するためのトルクセンサ22は、実際には、このケーブル80の変形時の反力と、回転関節21を駆動するモータの回転駆動力が合成されたトルクを検出することになる。
そこで、回転関節21に関して、ケーブル80の変形時の反力を示す反力テーブル900を設けている。この反力テーブル900を用いて、例えばトルクセンサ22の出力を回転関節21の駆動にフィードバックする駆動制御を補正できる(後述の図5、図6)。
(反力テーブルの作成処理)
次に、図8、図9、図10を参照して、制御装置91によるテーブルメモリ作成処理、即ち、反力テーブル900の作成手順につき説明する。図8は角度テーブル911〜961(図2)、図9は速度テーブル912〜962(図2)、図10(a)、(b)は、異なる2つの非線形テーブル913〜963(図2)の各作成手順を示している。これらの反力テーブル900の作成手順は、制御装置91が実行可能なロボット制御プログラム(の一部)として構成することができる。その場合、反力テーブル900の作成手順を含むロボット制御プログラムは、制御装置91(具体的には、後述のCPU601)が実行可能な制御プログラムとして例えばROM602に格納しておく。
なお、角度テーブル911〜961の単体は、実質的には特許文献1に記載のテーブルと同等のものである。しかしながら、角度テーブル911〜961の作成は、速度テーブル912〜962(図2)、非線形テーブル913〜963(図2)の作成を理解する上で重要であるから、簡単に説明する。
ここでは、回転関節11を例に説明する。ここで、反力テーブル900のうち回転関節11に対応するテーブルは角度テーブル911、速度テーブル912、非線形テーブル913である。
これらのテーブルを作成するには、回転関節11の関節角度を順次変更しながら、回転関節11のトルクセンサ12で同関節に作用している力(トルク)を測定し、ケーブル80の反力分を算出する。その際、好ましくは、ロボットアーム1のエンドエフェクタ70およびリンク10、20、30、40、50、60が周囲の装置などに接触しておらず荷重を受けていない状態で、回転関節11を動作させる。この時のトルクセンサ12の測定値と、トルク推定値の差分から回転関節11におけるケーブル反力として測定することができる。ただし、この時用いるトルク推定値については、ロボット装置の構造情報、例えば、ロボットアーム1の各部の重量や寸法、重心位置などから逆運動学演算によって関節に生じているトルクを演算する。
例えば、回転関節11のために角度テーブル911を作成する場合は、任意の関節角度θで静止しその時のトルクセンサの測定値と、ロボットアーム1がその姿勢を取った時に生じる回転関節11のトルク推定値が関節角度θにおけるケーブル反力となる。関節角度θを順次(例えば数度ないし数10度ずつ)変更しつつ、この動作を繰り返すことにより、角度テーブル911を作成することができる。
図8は、制御装置91(CPU601)が6関節分の回転関節11〜61の角度テーブル911〜961を作成する手順を示している。同図のステップS91では、11〜61をインデックスするカウンタn(あるいはポインタ)の値を回転関節11を指す「1」に初期化する。ステップS92では、後述のステップS99でインクリメントされるカウンタnの値が7より小さいか否かを判定する。カウンタnの値が7より小さい間は、順に回転関節61まで処理していないため、ステップS93〜S99の各ステップをループする。
ステップS93では、制御装置91はモータ(92:図3)を制御して、n軸の関節角度を反力測定を行う特定角度に制御する。ここで、「n軸」とは、n=1であれば回転関節11、n=2であれば回転関節21、n=3であれば回転関節31…(以下同様)の各回転関節を意味する。また、図8の処理は、当該関節の可動範囲全域に渡って実行するものとし、例えば当該関節(n軸)の可動範囲が0°〜240°であれば、最初は0°または240°の可動域端部に当該関節(n軸)を制御する。そして、数°ないし10数°程度の所定ステップ角で関節角度を増加または減少させつつ、下記の処理を実行する。
ステップS94では、制御装置91が、当該関節のトルクセンサ(回転関節11であれば12:図3)よりトルク検出値を取得する。また、ステップS95では、制御装置91が、逆運動学演算によってロボットアーム1のジオメトリや各部の重量、重心位置などに基づき、当該の関節角度において当該関節に作用するトルク推定値を演算する(関節負荷計算、ないしはアーム自重計算)。
ステップS96において、制御装置91は、ステップS94で得たトルク検出値(実際値)と、ステップS94で得たトルク推定値の差分を取得する。この差分は、上述のように、当該関節の当該の関節角度(特定角度)において線材(ケーブル80)が発生している反力値(ケーブル反力)である。そこで、ステップS97では、当該の関節角度(特定角度)と、この姿勢で測定されたケーブル80の反力値を関連づけた1レコードとして、角度テーブルに格納する。この時、テーブルデータ(レコード)を格納する格納先の角度テーブル911〜961は、例えばカウンタnの値を用いて決定することができる。
ステップS98では、制御装置91は、当該関節の可動範囲全域のデータ取得を終了したか否かを判定する。当該関節の可動範囲全域のデータ取得を終了していない間は、上記の所定ステップ角で関節角度を増加(または減少させ)た上、ステップS93に復帰し、上記の処理を繰り返す。一方、ステップS98で当該関節の可動範囲全域のデータ取得を終了したと判定した場合には、ステップS99に移行する。
ステップS99では、次の関節をインデックスすべく、制御装置91は、カウンタnをインクリメント(n=n+1)し、制御をステップS92の脱出判定に移す。上述の処理を繰り返した後、順に回転関節61まで処理した後のステップS92では、カウンタnの値は7に到達している。この場合は、角度テーブル911〜961が全て作成されているので、図8の角度テーブル作成処理を終了する。
図9は、速度テーブル作成処理を示しており、ここでは、回転関節、およびその関節に対応する速度テーブルを特定するのに上記同様にカウンタnを用いている。ステップS101、S102は図8のS91、S92と同様で、それぞれカウンタの初期化(n=1)と、全関節処理済みか否かの判定(n<7)に相当する。なお、本実施例では、一般的に広く使われているロボットアームとして6軸多関節ロボットを想定し、n<7としたが、他の軸数のロボット(3軸や7軸)でも利用する事ができる。その場合、このステップのnの判定に用いるしきい値は、(関節数+1)とすればよい。
ステップS103は、n軸を所定の特定の関節角度(特定角度)に制御し、その際、目的の特定角度に当該関節を移動させる際、特定の関節駆動速度(特定速度)を用いる(ステップS104)。この時用いる関節駆動速度は、もちろん例えば図2のV1、V2、V3(…)などである。なお、このステップS103とS104の書き分けは便宜上のもので、実際に関節を駆動する時には、制御装置91は、特定角度(目標角度)と、駆動速度の各パラメータをセットした上で、実際の駆動処理を開始する。
ステップS105、S106は、図8のステップS94、S95とそれぞれ同等である。ステップS105では、当該関節のトルクセンサ(回転関節11であれば12:図3)からトルク検出値を取得する。また、ステップS106では、制御装置91が、当該の関節角度(あるいはさらに関節速度)において当該関節に作用するトルク推定値を演算する(関節負荷計算、ないしはアーム自重計算)。
続いて、ステップS107において、制御装置91は、ステップS105で得たトルク検出値(実際値)と、ステップS106で得たトルク推定値の差分を取得する。この差分は、上述のように、当該関節の当該の関節角度(特定角度)および駆動速度(動的な駆動制御条件)において線材(ケーブル80)が発生している反力値(ケーブル反力)である。
そこで、ステップS108では、当該の関節角度(特定角度)と、この姿勢で測定されたケーブル80の反力値を関連づけた1レコードとして、当該の速度テーブルの駆動速度(動的な駆動制御条件)に対応する区画記憶領域に格納する。この時、テーブルデータ(レコード)を格納する格納先の速度テーブル912〜962は例えばカウンタnの値を用いて決定する。また、速度テーブルの格納先である駆動速度(動的な駆動制御条件)に対応する区画記憶領域は、ステップS104で選択されている関節駆動速度(V1、V2、V3…)によって決定される。図2の例で言えば、例えば駆動速度がV1であれば、当該の区画記憶領域(V1)を用いる。
ステップS109では、全ての速度域でデータ取得を完了したか否かを判定する。例えば図2の場合では、当該関節の駆動速度をV1から順にV2、V3と変更して上記の各処理を実行する。この場合は、V3の駆動速度を用いたデータ取得を終了していれば、ステップS110に進み、まだV3の駆動速度まで用いていなければ駆動速度条件を変更(例えばV1−>V2)してステップS104に復帰し、上記と同様の処理を実行する。
ステップS110は、上述のステップS98と同様で、当該関節の可動範囲全域のデータ取得を終了したか否かを判定する。当該関節の可動範囲全域のデータ取得を終了していない間は、上記の所定ステップ角で関節角度を増加(または減少させ)た上、ステップS102に復帰し、上記の処理を繰り返す。一方、ステップS110で当該関節の可動範囲全域のデータ取得を終了したと判定した場合には、ステップS111に移行する。ステップS111では、次の関節をインデックスすべく、制御装置91は、カウンタnをインクリメント(n=n+1)し、制御をステップS102の脱出判定に移す。上述の処理を繰り返した後、順に回転関節61まで処理した後のステップS102では、カウンタnの値は7に到達している。この場合は、速度テーブル912〜962が全て作成されているので、図9の角度テーブル作成処理を終了する。
なお、速度テーブル912〜962の作成のループ制御は必ずしも図9のような態様でなくても構わない。例えば、当該関節を特定角度への駆動速度条件をV1、V2、V3のように選択して、図8の角度テーブル作成手順を順次実行する、といったループ構成であっても同等の速度テーブル912〜962を作成できる。その際、速度テーブルの格納先である駆動速度(動的な駆動制御条件)に対応する区画記憶領域は、ステップS104で選択されている関節駆動速度(V1、V2、V3…)によって決定する。
図10(a)、(b)は、異なる2つの非線形テーブル913〜963(図2)の各作成手順に対応する。
この作成手順の1つは、例えば、図10(a)のように実施できる。即ち、正転(D+)方向に関節駆動を行いながら、図8と同様の角度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、それぞれ区画記憶領域(D+)に格納する(ステップS121:(1))。続いて、逆転(D−)方向に関節駆動を行いながら、図8と同様の角度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、それぞれ区画記憶領域(D−)に格納する(ステップS122:(2))。
このようにして、それぞれ正転(D+)方向、および逆転(D−)方向のように動的に異なる関節の駆動制御条件ごとに区分された区画記憶領域(D+、D−)に各々の関節角度〜ケーブル反力を関係づけたレコードを格納することができる。
この図10(a)のステップS121、S122によって、形成される非線形テーブル913〜963は、図2右側のように、正転(D+)方向、および逆転(D−)の各駆動方向に対応する区画記憶領域(D+、D−)を有するものとなる。この図2の非線形テーブル913〜963は、関節角度(θ)をキーとして、その時の関節駆動方向(D+/D−)に応じて選択した区画記憶領域(D+、D−)から反力値を読み出す、といった手法で参照することができる。
なお、ステップS123として、ステップS122(2)とS121(1)で得たデータの差分、即ち、区画記憶領域D−、D+に格納された反力値の差分を作成する処理が記載してある。必ずしも、このデータは作成する必要はないが、例えば、区画記憶領域D−の部分テーブルに換えて、このように作成した反力値差分データのみを格納することが考えられる。これにより、テーブルメモリに必要な記憶容量を削減できる可能性がある。この場合、実際のテーブル参照では、区画記憶領域D+の当該の関節角度のデータを参照し、当該の関節角度に係る反力値差分データを作用させる(例えば加算する)ことにより、逆転(D−)方向の反力値データを求めることができる。この時、正転(D+)方向の反力値データは、区画記憶領域D+の当該の関節角度のデータを参照することにより、求めることができる。
また、既に、図2によって概略は、説明済みであるが、非線形テーブル913〜963は、正転(D+)方向、および逆転(D−)の各駆動方向で関節駆動を行いつつ、それぞれ速度テーブルを作成することによっても作ることができる。図10(b)は、この処理を示している。
即ち、正転(D+)方向に関節駆動を行いながら、図9と同様の速度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、区画記憶領域(D+)に格納する(ステップS131:(1))。続いて、逆転(D−)方向に関節駆動を行いながら、図9と同様の速度テーブル作成処理を行い、関節角度〜ケーブル反力を関係づけたレコードを取得し、区画記憶領域(D−)に格納する(ステップS132:(2))。なお、この際、関節角度〜ケーブル反力を関係づけたレコードは、関節駆動速度の条件(動的な駆動制御条件)に応じて区画された区画記憶領域(D+またはD−)に格納されるのはいうまでもない。
このような作成処理によって、正転(D+)方向、および逆転(D−)に対応する2つの区画記憶領域(D+またはD−)に、それぞれ図2の中央に示したようなレコード構成を有する2つの速度テーブルが作成される。図2の例で言えば、それぞれV1、V2、V3(…)の駆動速度による区画記憶領域を有する速度テーブルを正転(D+)方向、および逆転(D−)に対応する2つの区画記憶領域(D+またはD−)に格納したのと同等のテーブル構成になる。
図10(b)のようにして作成した、非線形テーブル913〜963は、関節の駆動速度と、関節駆動方向の各々の動的な駆動制御条件に応じて区画された区画記憶領域を有している。従って、ある関節角度への関節動作において、非線形テーブル913〜963を参照する時、制御装置91は、その時の駆動速度と、関節駆動方向に応じて、対応する区画記憶領域を選択することができる。これにより、駆動速度と、関節駆動方向の各々の動的な駆動制御条件の双方が反映された反力値を制御装置91を取得できる。そして、取得した駆動速度と、関節駆動方向の各々の動的な駆動制御条件の双方が反映された反力値に基づき、関節制御(例えば後述のトルクサーボ制御)を行うことができる。
なお、図10(b)のステップS133は、図10(a)のステップS123と同様に、例えば区画記憶領域D−(あるいはD+)の部分テーブルに換えて格納する差分形式のケーブル反力値を作成する処理である。この差分形式のケーブル反力値作成は、差分データを区画記憶領域D−(あるいはD+)の部分テーブルに換えて格納する必要がなければ必ずしも実行する必要はない。
なお、以上では、回転関節11〜61のトルクセンサ(12、22…)の実測値と、回転関節11〜61のトルク推定値の差からケーブルの反力を求めてケーブル反力テーブルを作成する例を示した。ここで、回転軸の方向を重力方向と一致させることができる回転関節の場合には、ケーブル反力テーブル作成の際、対象の回転関節に重力が印加されないようにアームの姿勢を制御して測定を行うようにしてもよい。この場合には、当該回転関節の駆動負荷はケーブル反力のみとなる。このため、トルクセンサから測定した検出値をそのままケーブル反力値としてテーブルに格納することができる。ただし、アームのジオメトリによってはこのような反力値測定を行えない場合もある。しかしながら、このような反力値測定を行える関節については、関節に負荷されるトルクの推定誤差の影響を除去(ないし低減)できる利点がある。
また、図8〜図10の角度、速度、非線形の各テーブルの作成においては、ロボットアーム1にケーブルを配置する前に、ケーブル反力を測定する専用の測定装置を用いて、反力値を測定することにより、反力テーブル900を作成してもよい。
しかしながら、ユーザ設置環境に応じて実際に配置されるケーブル(80)は多種多様である可能性があり、また、個体差の範囲も様々である可能性がある。このため、上記のように専用の測定装置を用いた場合にはロボットアーム1の製造時にすべてのユーザの使用状態に適したテーブルを作成することができず、ケーブルの反力の推定精度が低下し、制御の精度が低下する可能性がある。
これに対して、テーブルを利用するのと同じロボット装置で反力テーブル900を作成することにより、反力テーブル900参照によるケーブル反力の推定精度、およびそれに基づく関節制御の精度を向上させることができる。図8〜図10に示した反力テーブル900の作成処理は、製造後の適当なタイミングで、ユーザが利用する環境で少なくとも1度、実施すればよい。
例えば、反力テーブル900の新規作成処理(ないしデータ更新処理)は、出荷時、ユーザ環境への設置時、電源投入に伴う初期化時、あるいは定期点検時などのタイミングで実施することができる。
(制御装置)
図3は、本実施例のロボット装置の制御系の構成例を示している。図3において、ロボット装置の制御システム97は制御装置91(図1(a))と指令装置94により構成されている。制御装置91は、図3の右側に示した下記の各部を制御することにより、ロボットアーム1の動作を制御する。
図3では、上述の回転関節11、21、31、41、51、61を駆動する各モータはモータ92の1ブロックにより示してある。モータ92は、例えばサーボモータであり、各回転関節のモータ92には関節回転角を位置制御するために回転角を検出するエンコーダ95が(それぞれ)併設される。より詳細には、エンコーダ95はモータ92の出力軸、ないしはその回転出力を減速する減速機の出力軸、あるいはこれら出力軸の双方に配置される。
また、例えば回転関節11、21、31、41、51、61の回転駆動トルクの制御(例えばトルクサーボ)のために、上述のトルクセンサ12、22、32、42、52、62が各回転関節の駆動系(不図示)の一部に配置されている。これらトルクセンサ12、22、32、42、52、62も、図3では1ブロックによって図示されている。
さらに、上述の回転関節11、21、31、41、51、61のための反力テーブル900は、制御装置91のメモリ91aに保存されている。メモリ91aの記憶領域は、後述のROM602、RAM603(図7)などを用いて構成することができる。あるいは、不図示のHDD(SSD)、各種フラッシュメモリなどの外部記憶装置を設けて、例えばデータファイルの形式で反力テーブル900を記憶させてもよい。
制御装置91は、各関節のエンコーダ95を用いて、各関節の回転角(姿勢)を検出し、例えばエンドエフェクタ70が所定の位置姿勢を取るように、ロボットアーム1全体が所望の位置姿勢を取るよう制御する。
また、制御装置91は、上記のトルクセンサ12〜62により検出した各関節の駆動トルクに基づき、各関節のモータ92の駆動エネルギーを制御(例えばPWM制御など)することにより、各関節の駆動トルクを所望の値に制御することができる。これにより、例えば、エンドエフェクタ70でワークを操作する際にワークの物性(例えば剛性や強度)に応じた力が対象物のワークに加わらないように制御する、といった制御が可能となる。
もし、ケーブル反力に起因してこのようなトルク制御に大きな誤差が生じた場合には、特に対象物のワークに対する操作力が小さな範囲に制限されるような用途にロボット装置を用いることが難しくなる。しかしながら、本実施例では、回転関節の駆動制御条件に関して、関節角度のような静的な駆動制御条件のみならず、駆動速度および駆動方向に係る非線型(ヒステリシス)特性のような動的な駆動制御条件を考慮したケーブル反力テーブルを用いる。このため、現実の関節駆動条件に即したケーブル反力の補正が可能であり、従って、正確なトルク制御に基づき各関節を制御することができる。従って、対象物のワークに対する操作力が小さな範囲に制限されるような用途においても、ロボット装置を適用することができ、ワークの損傷などを生じることなく、信頼性の高い対象物操作を行える。
ここで、エンコーダ95を用いた位置(姿勢)制御、およびトルクセンサ12、22、32、42、52、62を用いたトルク制御(トルクサーボ)のそれぞれは公知の制御である。例えば、制御装置91は、特定の回転関節について、予めプログラムされた(あるいは指令装置94により指定された)回転角度、ないしは関節駆動トルクの目標値と、エンコーダ95およびトルクセンサ12〜62の実測値を用いてモータ92を制御する。その場合、制御装置91が目標値と実測値が一致するように制御を行うことによって、所期のロボット動作を実現する。
本実施例では、さらに、トルクセンサ12、22、32、42、52、62を用いたトルク制御(トルクサーボ)に、上述の反力テーブル900で示すケーブル反力を反映させることができる。
上述のように、反力テーブル900は特に各関節のトルクセンサと同じ回転軸廻りに外乱として働くケーブル反力と回転関節の動きを示している。一方、トルクセンサ12、22、32、42、52、62は、各回転関節の駆動系の一部に配置されるため、機構上、モータ92の駆動トルクと上記ケーブル反力の合力を測定することになる。従って、例えば、後述のようにトルクセンサ12、22、32、42、52、62を用いたトルク検出値を、反力テーブル900で示すケーブル反力を用いて補正することができる。これにより、ケーブル反力の外乱成分を除去し、各回転関節に関して正確なトルク制御(トルクサーボ)を実施することができる。
なお、より詳細には、制御装置91は、例えば図7に示すように、汎用マイクロプロセッサなどから成るCPU601を中心として構成することができる。図7において、制御装置91は、例えばCPU601と、各部を制御するためのロボット制御プログラムを記憶するROM602と、データを一時的に記憶するRAM603と、インタフェース回路604、605から構成することができる。
ROM602は、後述のようなトルク制御を含むロボット制御プログラムを記憶するコンピュータ(CPU601)により読み取り可能な記録媒体に相当する。CPU601は、例えばROM602に格納されたロボット制御プログラムを実行することにより、後述のようなトルク制御を含むロボット制御を実行する。
なお、例えばROM602の一部は、書き換え可能な不揮発領域により構成できる。その場合、不図示のフラッシュメモリや光ディスクのようなコンピュータ読み取り可能な記録媒体や、ネットワークなどを介して取得したロボット制御プログラムを新たに上記書き換え可能な不揮発領域にインストールすることができる。また、上記書き換え可能な不揮発領域に格納されているロボット制御プログラムは、上記コンピュータ読み取り可能な記録媒体や、ネットワークなどを介して取得したデータによって更新することもできる。
上述の反力テーブル900を格納するメモリ91a(図3)の記憶領域は、ROM602、RAM603(図7)などを用いて構成することができる。インタフェース回路604は、例えば指令装置94との間のデータ入出力に用いることができる。また、インタフェース回路605は、例えば上述のモータ92、エンコーダ95、トルクセンサ12、22、32、42、52、62に対するデータ入出力に用いることができる。また、反力テーブル900を不図示のHDD(SSD)、各種フラッシュメモリなどの外部記憶装置に格納する場合には、インタフェース回路605をこれら外部記憶装置の反力テーブル900にアクセスするために用いることができる。
ロボットアーム1の動作指令を与える指令装置94には、不図示の記憶装置(例えばRAM、ROMや外部記憶装置)が設けられる。この記録装置には、製品組み立てなどを行うのに必要なロボットアーム1のロボット制御情報が記録されているものとする。このロボット制御情報は、例えば複数の教示点データ、あるいはロボット制御プログラムの書式などによって記述される。また、このロボット制御情報の記憶装置は、指令装置94側ではなく、制御装置91側のRAM603やROM602、あるいは不図示の外部記憶装置(例えばHDDやSSD)によって構成することもできる。
作業者は、指令装置94を操作して、予め作成された上記のロボット制御情報の実行(再生)を指定することにより、ロボットアーム1に予めプログラムした動作を行わせることができる。また、指令装置94がティーチングペンダントなどの教示装置である場合には、指令装置94の関節の動作をジョグ操作方式などにより指令する操作キーを操作して、ロボットアーム1に対話的に任意の動作を行わせることができる。その場合、順次実行させた動作を上記の記憶装置にロボット制御情報として記憶させることもできる。上記のロボット装置の教示操作や、ロボット制御情報の格納方式については公知技術であるため、ここでは上記以上の詳細な説明は省略する。
本実施例では、制御装置91は、トルクセンサ12〜62の測定誤差(外乱)として作用するケーブル反力を反力テーブル900から推定できる。そして、例えば、ケーブル反力テーブルの示す値から差し引く補正制御を行うことができる(後述の図6)。このようにトルクセンサ12〜62の出力値からケーブル反力の成分を差し引く補正演算を行うことにより、各モータ92が減速機(不図示)を介して当該関節の手先側のリンクに実際に与えているトルクの実際値をより正確に算出することができる。そして、ケーブル反力を除去して得たトルク値と、指令装置94から関節で生じるトルク目標値が一致するように制御を行うことによって、より正確にロボットアーム1の関節のトルク(サーボ)制御を実行することができる。なお、制御装置91のCPU601で実行可能なロボット制御の実例については後述の実施例2で説明する。
以上のように、本実施例では、回転関節11、21、31、41、51、61に関して、反力テーブル900を設けている。そして、反力テーブル900を用いて各関節の駆動トルクを測定するトルクセンサ12〜62の出力を補正する補正演算を実施することができる。
なお、ロボット装置の回転関節のトルク制御においては、トルク制御性を向上させるため、関節にトルクセンサを設置して駆動トルク値を検出して当該関節のモータ制御にフィードバックするトルク制御が行われることがある。このようなトルク制御(サーボ)では、理想的には、トルクセンサ12〜62の測定値は関節がリンクに与えているトルクのみを測定する必要がある。しかしながら、ロボットアーム1の内外に沿ってケーブル80を配設すると、ロボット動作に伴うケーブル80の変形により生じるケーブル反力がトルクセンサ12〜62の測定値に誤差を生じさせる可能性がある。
これに対して、本実施例では、ケーブルが変形することで生じる反力をケーブル反力テーブルで推定し、トルクセンサで測定したトルク値を補正することで、誤差の少ない値をフィードバックすることができる。従って、従来は、トルクセンサの誤差によって不可能であった微小な力の範囲で関節のトルク制御を行うことができるようになり、特に微小重量の微細な部品を力(トルク)制御を作用させて組み立てることができるようになる。
これにより、従来、特別に設計、製造された専用装置を用いる必要なく、汎用的な多関節ロボットを力(トルク)制御で用いることにより、従来はこの種のロボットで不可能であった微細部品の製造、組み立てを行うことができるようになる。
また、回転関節に配置したトルクセンサで検出したトルク値は、ロボットアームの振動抑制に利用されることがある。特に、多関節のロボットアームでは、動いている状態から停止した時のエンドエフェクタ70の振動が問題になる事がある。例えば、ロボットアーム先端の位置がオーバーシュートし、エンドエフェクタが他の部材に緩衝、接触するなどした状況において、振動が停止するまでの待ち時間が組み立て時間短縮のネックになる場合がある。
上記のロボットアーム1において、各関節に設けたトルクセンサ12、22、32、42、52、62はこの振動問題に対処するために利用することができる。例えば、トルクセンサ12、22、32、42、52、62により当該の関節に生じているトルクを計測し、そのトルクを打ち消すように当該関節を駆動するモータ92を駆動する制御を行うことにより、ロボットアーム1の振動を抑えることができる。
そして、本実施例によれば、トルクセンサ12、22、32、42、52、62の出力値から、反力テーブル900によって、各関節で生じているケーブル反力を外乱として除去することができる。このため、本実施例によれば、当該関節が支持しているリンクに生じている実トルク値を極めて精度良く測定でき、この実トルク値をロボットの振動抑制にフィードバックすることにより、この振動抑制性能の向上も期待できる。
<実施例2>
本実施例では、上述の制御装置91のCPU601で実行可能なロボット制御手順(ロボット制御プログラム)の例をいくつか例示する。図5、および図6は、それぞれ制御装置91のCPU601で実行可能なロボット制御手順(ロボット制御プログラム)の流れを示している。
図5の制御例は、反力テーブル900の示すケーブル反力に応じて、指令装置94による回転関節を駆動するための指令値を補正するものである。また、図6の制御例は、反力テーブル900が示すケーブル反力に応じて、各回転関節のトルクセンサ12、22、32、42、52、62の出力値を補正してトルク制御をするものである。図5、図6の制御は、理解を容易にするため、特定の1つの回転関節に係る制御に単純化して図示してある。図5、図6に示した制御は、CPU601が実行するロボットプログラムの一部として例えばROM602などに格納しておくことができる。
図5、図6の制御では、いずれも上述の反力テーブル900(図2)を用いる。ただし、本実施例では、動的な各駆動制御条件を反映した制御を行ものとし、図2の速度テーブル912〜962、または非線形テーブル913〜963の少なくとも1つを反力テーブル900として用意しておく。図2の角度テーブル911〜961のみを用いて、関節の駆動制御を行うこともできるが、その場合には、特許文献1に関して述べた問題点を解決できない可能性がある。
指令装置94はロボットアーム1の回転関節11、21、31、41、51、61の位置ないし姿勢に係る指令値を制御装置91に送信できるものとする。ここで図5の制御は1関節に係る制御として示してあるが、制御装置91が指令装置94から指令値を受信すると、受信した指令値に応じて当該の駆動制御を行うための指令値を当該関節のモータ92に送信する。
図5において、CPU601はステップS74において指令装置94から、同図の制御に係る回転関節の駆動制御に係る指令値を受信すると、ステップS75において、受信した指令値に係る回転関節(上記回転関節のいずれか)の回転方向を判定する。回転関節の制御に用いられるこの種の指令値、特に回転角度に係るものは、例えばその回転関節のある特定の回転方向に関する指令値は正(+)、その逆の回転方向に関する指令値は負(−)の符号により表現される。そこで、例えばステップS74において受信した指令値の符号などを解釈することにより、指令値に相当する回転関節の回転方向が正(+)か負(−)(あるいは正方向か逆方向)のいずれであるかを判定できる。
同時に、CPU601はステップS71で図5の制御に関係する回転関節に関して設けられた反力テーブル900から、出力するケーブル反力の測定値を取得する(反力値取得)。さらに、ステップS72では反力テーブル900)の示す値(例えばその符号)から、当該の関節が支持しているケーブル80の荷重の方向を判定する。ステップS71、S72の反力テーブル900との入出力と荷重方向判定、および、ステップS74、S75の指令装置94との入出力と動作方向判定は、例えばハードウェア割り込みなどを利用して並行的に実行することができる。
ここで、図2の反力テーブル900の場合、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じて速度テーブル912〜962、または非線形テーブル913〜963の動的な各駆動制御条件に応じて区画された領域を参照する。具体的には、これら各テーブルは関節角度をキーとして参照し、その場合、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じてその駆動速度、駆動方向に応じて区画された領域を参照する。これにより、各関節の動的な駆動制御条件に応じて、ケーブル80の変形に起因して回転関節21に印加されるケーブル反力を正確に推定することができる。
ケーブル反力(荷重)は、当然ながらこの関節の回転方向と同様に正(+)か負(−)(あるいは正方向か逆方向)の回転方向を有する。CPU601は、ステップS72において、この関節の回転方向を反力テーブル900を用いて検出する。
ステップS76では、ステップS75、S72でそれぞれ特定した指令装置94の指令値に係る回転関節の動作方向と、当該関節に関して反力テーブル900で特定したケーブル反力の方向の一致または不一致を判定する。
そして、両者の方向が一致(S77)している場合には、ケーブル反力が当該関節を駆動するモータ(92)の駆動力をアシストしていることになる。この場合は、ステップS79に進み、指令装置94の指令に応じて当該関節のモータ(92)に送信する指令値を、ケーブル反力の大きさに応じた量、小さくする補正を行う。
一方、ステップS76で両者の方向が不一致(S78)の場合には、ケーブル反力が当該関節を駆動するモータ(92)の駆動力に抵抗する方向に働いていることになる。この場合は、ステップS80に進み、指令装置94の指令に応じて当該関節のモータ(92)に送信する指令値を、ケーブル反力の大きさに応じた量だけ大きくする補正を行う。
一方、図6は、反力テーブル900により推定したケーブル反力をトルクセンサ12、22、32、42、52、62の出力値を用いたトルク制御に作用させる場合の制御例を示している。図6の制御では、予め用意されたロボット制御プログラム(不図示)に基づき、図示の制御手順に係る回転関節の指令値が定められ、その指令値をモータ(92)に送り、当該関節を駆動する処理(不図示)が並行して実行されているものとする。なお、図6の制御においても、反力テーブル900としては速度テーブル912〜962、または非線形テーブル913〜963の少なくとも1つを配置しておくものとする。
図6のステップS83において、CPU601は同図の制御に係る特定の回転関節に設けられたトルクセンサ(12、22、32、42、52、62)の測定データを取得し、ステップS84では当該関節の回転方向を判定する。ステップS84の回転方向の判定では、上記制御により別途発生されている当該関節のモータ92の指令値(の符号)を用いてもよく、また、当該関節に係るトルクセンサの出力値の符号を用いてもよい。
一方、ステップS81では、図6の制御に関係する回転関節に関して設けられた反力テーブル900から出力するケーブル反力値を取得する。この時、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じて反力テーブル900の速度テーブル912〜962、または非線形テーブル913〜963の動的な各駆動制御条件に応じて区画された領域を参照するのは図5と同様である。具体的には、これら各テーブルは関節角度をキーとして参照し、その場合、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じてその駆動速度、駆動方向に応じて区画された領域を参照する。これにより、各関節の動的な駆動制御条件に応じて、ケーブル80の変形に起因して回転関節21に印加されるケーブル反力を正確に推定することができる。
ステップS82では反力テーブル900の出力した反力値の、例えばその符号から、当該の関節が支持しているケーブル80の荷重の方向を判定する。ステップS81、S82のケーブル反力テーブルとの入出力と荷重方向判定、および、ステップS83、S84の指令装置94との入出力と動作方向判定は、例えばハードウェア割り込みなどを利用して並行的に実行することができる。
ステップS86では、図5のステップS76と同様にステップS84、S82でそれぞれ特定した回転関節の動作方向と、当該関節に関して反力テーブル900が示すケーブル反力の方向の一致または不一致を判定する。
そして、両者の方向が一致(S87)している場合には、当該関節に係るトルクセンサは、当該関節に係るケーブル反力テーブルで推定した値の分が加算されて出力していることになる。即ち、実際にこの関節のモータ(92)が発生している関節駆動トルクは、トルクセンサで検出している値よりも小さいはずである。この場合は、ステップS89に進み、真の(実)関節駆動トルクを演算するために、当該関節に係るトルクセンサの出力値から、当該関節に係るケーブル反力テーブルで推定したケーブル反力の値を減算する補正を行う。
一方、ステップS86で両者の方向が不一致(S88)の場合には、当該関節に係るトルクセンサは、当該関節に係るケーブル反力テーブルで推定したケーブル反力の分が減算された値を出力していることになる。即ち、実際にこの関節のモータ(92)が発生している関節駆動トルクがトルクセンサで検出している値よりも大きいはずである。この場合は、ステップS90に進み、真の(実)関節駆動トルクを演算するために、当該関節に係るトルクセンサの出力値に当該関節に係る反力テーブル900で推定したケーブル反力の値を加算する補正を行う。
続いて、ステップS91で、ステップS89、S90においてケーブル反力の分を補正した真の(実)関節駆動トルク値を用いて、当該関節のモータ(92)に与える関節駆動トルクの指令値を演算する。ステップS91のトルク制御演算の目的の1つは、例えば上述のようにエンドエフェクタ70により微細な部品(ワーク)などを取り扱う場合のトルク制限などが考えられる。この場合は、例えば、当該関節の駆動トルクが所定値を超えないように指令値を演算する。ステップS91のトルク制御演算では、上述のようにロボットアーム1の振動を抑制するための指令値演算を行うこともできる。
ステップS92では、ステップS91のトルク制御演算の結果、得られた指令値を当該関節のモータ(92)に送信する。
以上、図5、図6に示したように、回転関節(11〜61)に関して配置した反力テーブル(900)により推定したケーブル(80)の反力値に基づき、当該の関節を駆動する駆動源としてのモータ(92)を駆動制御することができる。反力テーブル(900)は、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じて参照される。即ち、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じて反力テーブル900の速度テーブル912〜962、または非線形テーブル913〜963のその駆動速度、駆動方向に応じて区画された領域を参照する。
これにより、図5、図6のいずれの制御でも、各関節の動的な駆動制御条件(例えば駆動速度、駆動方向)に応じて、正確なケーブルの反力値を取得することができる。
特に、図5の制御では、反力テーブル900からケーブル反力の方向と当該関節の動作方向の関係に応じて、当該関節の駆動源としてのモータ(92)の指令値を補正することができる。例えば、ケーブル反力が当該関節の関節動作を補助しているか、あるいは関節動作に抵抗しているかに応じて、当該関節の駆動源としてのモータ(92)の指令値を補正することができる。
また、図6の制御では、回転関節(11〜61)に関して設けたトルクセンサ(12〜62)の検出した回転駆動トルク値に外乱として含まれているケーブル(80)のケーブル反力の成分を除去して、真の(実)回転駆動トルク値を検出できる。そして、テーブル参照により正確に求めたケーブル反力の成分を除去した真の(実)回転駆動トルク値を用いて、正確に当該関節の駆動源としてのモータ(92)の指令値(目標値)を補正することができる。なお、この種のトルク制御の目標値(指令値)は、制御装置91(CPU601)が力(トルク)制限や振動抑制などの目的に応じて決定する。
以上のように、本実施形態では、ロボットアーム(1)の少なくとも回転関節の駆動源に駆動信号を伝達する線材としてのケーブル(80)に関し、ケーブル(80)の変形に伴うケーブル反力を推定する反力テーブル(900)を配置する。このため、反力テーブル900で推定したケーブル反力を回転関節の駆動源としてのモータ(92)の駆動制御に正確にフィードバックすることができ、位置制御やトルク制御を含む高精度なロボット制御を行うことができる。即ち、反力テーブル900により、ロボット装置の関節(あるいはエンドエフェクタ)との駆動信号の伝達に用いられる線材であるケーブル(80)の反力を推定し、その推定値を用いて高精度なロボット制御を行うことができる。
なお、回転関節11〜61に関して配置したトルクセンサ12〜62で測定した回転駆動トルクをモータ92への動作指令値にフィードバックする場合、上述のような力(トルク)制御のみならず位置制御にフィードバックすることも考えられる。例えば、トルクセンサ12〜62で測定した回転駆動トルクに基づき、ロボットアーム1のエンドエフェクタ70の位置ずれを検知して、その位置ずれに応じたモータ92の駆動量(位置制御指令)にフィードバックすることが考えられる。このように回転駆動トルクを関節の位置制御にフィードバックすることにより、エンドエフェクタ70の位置精度が高くなるという効果がある。なお、トルクセンサ12〜62で測定した回転駆動トルクをモータ92への位置制御指令にフィードバックする場合には、動作指令値として指令している位置(例えば回転角)を調整する制御や、位置指令のゲインを変更する制御を行うことができる。
以上の各実施例では、線材(ケーブル80)が発生する反力値を、関節角度ごとに関節の駆動速度、動作方向、といった動的な駆動制御条件ごとに区画された区画記憶領域に格納したテーブルメモリを用いる。
ここで、関節角度〜線材の反力値の関係は静的な弾性関係と考えることができ、一方、動的な駆動制御条件に関しては、関節の駆動速度〜反力値の関係は粘性的な関係(粘性関係)と考えることができる。また、別の動的な駆動制御条件、関節の動作方向〜反力値の関係は、ヒステリシスが作用する非線形な関係(非線形関係)と考えることができる。
上記各実施例では、これら弾性関係のみならず、粘性、非線形性の観点でテーブル化して推定している。具体的には、弾性関係である関節角度〜線材の反力値の関係を、関節の駆動速度、動作方向、といった動的な駆動制御条件ごとに区画されたテーブルメモリの区画記憶領域に格納する。そして、テーブルメモリを用いて関節駆動時の線材(ケーブル80)の反力値を取得(推定)する場合は、関節の駆動速度、動作方向のような動的な駆動制御条件に対応する区画記憶領域を参照する。これにより、関節角度〜線材の弾性関係のみならず、関節の駆動速度、動作方向のような動的な駆動制御条件を反映した、より正確な線材(ケーブル80)の反力値を取得(推定)することができる。
取得(推定)した線材(ケーブル80)の反力値は、例えば関節に作用するトルクをトルクセンサで測定して関節を駆動する駆動源を制御するトルクサーボ制御に利用することができる。上記各実施例のテーブルメモリによれば、関節の駆動速度、動作方向のような動的な駆動制御条件を反映したより正確な線材(ケーブル80)の反力値を取得(推定)することができる。このため、関節のトルクサーボ制御の精度が向上し、より高い精度でロボット装置を制御することができる。これにより、トルクセンサを用いてワークやリンクに加わる力をトルク(力)制御する場合には、トルクセンサの出力から外乱として作用する線材の反力を除去するなどの演算ができ、正確なトルク検出に基づき、的確なトルク(力)制御を行うことができる。
従って、例えば汎用構成のロボット装置において、関節の力制御を正確に行うことができ、繊細な力制御の必要な数グラム程度の重量の小さい部品の組み立てを実現することができる。そして、微小重量の部品を組み立てる生産ラインにおいて、専用装置や、人力による手動作業などを必要とせず、汎用構成のロボット装置を用いることが可能となる。従って、従来は必要であった、専用装置の設計、製造コストの削減、あるいはさらに製作期間の削減、といった効果を期待できる。また、微細部品を組み立てる生産ラインの立ち上げコストを低減することが可能になる。