(57)【特許請求の範囲】
【請求項１】
関節のアクチュエータを、関節指令値に従って動作させる制御を行う制御部を備えたロボットの制御方法であって、
前記制御部が、前記関節の位置姿勢に関する誤差である関節誤差を求める関節誤差算出工程と、
前記制御部が、前記アクチュエータを所定の方向に動作させた際に、前記アクチュエータの弾性により生じる誤差である動作方向誤差を求める動作方向誤差算出工程と、
前記制御部が、前記関節誤差から前記動作方向誤差を除いた残差を求める残差算出工程と、
前記制御部が、前記残差に基づいて前記関節の動作により移動する部位の位置姿勢に関する誤差である移動部位誤差を求める移動部位誤差算出工程と、
前記制御部が、前記動作方向誤差と、前記移動部位誤差と、に基づいて前記アクチュエータを動作させる動作工程と、
を備えたことを特徴とする制御方法。
【請求項２】
前記動作工程において、
前記制御部が、前記動作方向誤差に基づいて前記関節指令値を補正するための第１補正量を求める第１補正量算出工程と、
前記制御部が、前記移動部位誤差に基づいて前記関節指令値を補正するための第２補正量を求める第２補正量算出工程と、
前記制御部が、前記第１補正量及び前記第２補正量を用いて前記関節指令値を補正する補正工程と、
を備えたことを特徴とする請求項１に記載の制御方法。
【請求項３】
前記移動部位誤差算出工程において、前記制御部が、前記残差に基づいて順機構計算を行ことで前記移動部位誤差を求め、
前記第２補正量算出工程において、前記制御部が、前記移動部位誤差に基づいて逆機構計算を行うことで前記第２補正量を求める、
ことを特徴とする請求項２に記載の制御方法。
【請求項４】
前記補正工程では、前記制御部が、前記第１補正量と前記第２補正量とを前記関節指令値から減算する補正を行う、
ことを特徴とする請求項３に記載の制御方法。
【請求項５】
前記制御部は、前記関節指令値を補正する補正モードと、前記関節指令値を補正しない非補正モードと、前記非補正モードから前記補正モードに切り替わる際の遷移モードと、を有しており、
前記補正工程では、前記制御部が、前記遷移モードにおいて、前記第１補正量及び前記第２補正量のうち少なくとも一方に、時間が経過するに連れて０から１に増加する係数を掛け算して、前記第１補正量及び前記第２補正量のうち少なくとも一方を補正し、少なくとも一方が補正された前記第１補正量及び前記第２補正量を、前記関節指令値から減算する補正を行う、
ことを特徴とする請求項２から４のいずれか１項に記載の制御方法。
【請求項６】
前記制御部は、前記関節指令値を補正する補正モードと、前記関節指令値を補正しない非補正モードと、前記非補正モードから前記補正モードに切り替わる際の遷移モードと、を有しており、
前記補正工程では、前記制御部が、前記遷移モードにおいて、前記第１補正量と前記第２補正量とを足し合わせた総補正量に、時間が経過するに連れて０から１に増加する係数を掛け算して前記総補正量を補正し、補正された前記総補正量を前記関節指令値から減算する補正を行う、
ことを特徴とする請求項２から４のいずれか１項に記載の制御方法。
【請求項７】
前記制御部は、前記関節指令値を補正する補正モードと、前記関節指令値を補正しない非補正モードと、前記補正モードから前記非補正モードに切り替わる際の遷移モードと、を有しており、
前記補正工程では、前記制御部が、前記遷移モードにおいて、前記第１補正量及び前記第２補正量のうち少なくとも一方に、時間が経過するに連れて１から０に減少する係数を掛け算して、前記第１補正量及び前記第２補正量のうち少なくとも一方を補正し、少なくとも一方が補正された前記第１補正量及び前記第２補正量を、前記関節指令値から減算する補正を行う、
ことを特徴とする請求項２から４のいずれか１項に記載の制御方法。
【請求項８】
前記制御部は、前記関節指令値を補正する補正モードと、前記関節指令値を補正しない非補正モードと、前記補正モードから前記非補正モードに切り替わる際の遷移モードと、を有しており、
前記補正工程では、前記制御部が、前記遷移モードにおいて、前記第１補正量と前記第２補正量とを足し合わせた総補正量に、時間が経過するに連れて１から０に減少する係数を掛け算して前記総補正量を補正し、補正された前記総補正量を前記関節指令値から減算する補正を行う、
ことを特徴とする請求項２から４のいずれか１項に記載の制御方法。
【請求項９】
前記残差算出工程では、前記制御部が、前記ロボットの前記部位におけるヤコビ行列の行列式の絶対値に応じて、０から１までの間の重み係数を、前記残差に掛け算して前記残差を補正する、
ことを特徴とする請求項１から８のいずれか１項に記載の制御方法。
【請求項１０】
前記残差算出工程では、前記制御部が、前記絶対値が小さくなるほど、前記重み係数が小さくなるようにする、
ことを特徴とする請求項９に記載の制御方法。
【請求項１１】
前記関節誤差算出工程では、前記制御部が、前記関節の変形による前記関節の第１関節誤差と、前記ロボットの製作誤差による前記関節の第２関節誤差から、前記関節誤差を求める、
ことを特徴とする請求項１から１０のいずれか１項に記載の制御方法。
【請求項１２】
前記関節誤差算出工程では、前記制御部が、前記関節の変形による前記関節の第１関節誤差と、前記ロボットの製作誤差による前記関節の第２関節誤差から、前記関節誤差を求め、
前記第１補正量算出工程では、前記制御部が、前記関節誤差算出工程で求めた前記関節誤差に含まれる前記動作方向誤差として、前記第１関節誤差に含まれる前記動作方向誤差を用いる、
ことを特徴とする請求項２から８のいずれか１項に記載の制御方法。
【請求項１３】
前記製作誤差のパラメータが記憶部に記憶されており、
前記関節誤差算出工程では、前記制御部が、前記第２関節誤差を求める際に、前記記憶部から前記製作誤差のパラメータを読み出す、
ことを特徴とする請求項１１又は１２に記載の制御方法。
【請求項１４】
前記関節誤差算出工程では、前記制御部が、前記ロボットの温度に応じて前記製作誤差のパラメータを補正する、
ことを特徴とする請求項１３に記載の制御方法。
【請求項１５】
前記ロボットの前記部位が嵌合する嵌合部材が、前記ロボットの動作領域に配置されており、
前記制御部が、前記ロボットの前記部位を前記嵌合部材に嵌合させたときの前記ロボットの前記部位の実際の位置姿勢と、目標の位置姿勢との誤差に基づき、前記第２関節誤差を求める、
ことを特徴とする請求項１１から１４のいずれか１項に記載の制御方法。
【請求項１６】
前記アクチュエータは、減速機を備えており、
前記動作方向誤差は、前記減速機における前記所定の方向に基づく変形により生じる誤差である、
ことを特徴とする請求項１から１５のいずれか１項に記載の制御方法。
【請求項１７】
前記部位は、前記ロボットの先端であり、
前記移動部位誤差は、前記先端の位置姿勢に関する誤差である、
ことを特徴とする請求項１から１６のいずれか１項に記載の制御方法。
【請求項１８】
前記制御部が、前記関節にかかる力を算出する力算出工程をさらに備え、
前記動作方向誤差算出工程において、前記制御部が、前記力算出工程の算出結果に基づいて、前記動作方向誤差を求める、
ことを特徴とする請求項１から１７のいずれか１項に記載の制御方法。
【請求項１９】
制御部が、ロボットの関節のアクチュエータを、関節指令値に従って動作させる制御を行うロボット装置であって、
前記制御部が、前記関節の位置姿勢に関する誤差である関節誤差を求め、
前記制御部が、前記アクチュエータを所定の方向に動作させた際に、前記アクチュエータの弾性により生じる誤差である動作方向誤差を求め、
前記制御部が、前記関節誤差から前記動作方向誤差を除いた残差を求め、
前記制御部が、前記残差に基づいて前記関節の動作により移動する部位の位置姿勢に関する誤差である移動部位誤差を求め、
前記制御部が、前記動作方向誤差と、前記移動部位誤差と、に基づいて前記アクチュエータを動作させる、
ことを特徴とするロボット装置。
【請求項２０】
コンピュータに、請求項１から１８のいずれか１項に記載の制御方法の各工程を実行させるためのプログラム。
【請求項２１】
請求項２０に記載のプログラムを記録した、コンピュータ読み取り可能な記録媒体。
【請求項２２】
請求項１から１８のいずれか１項に記載の制御方法により前記ロボットを制御して物品を製造する物品の製造方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関節指令値に従ってロボットの関節の動作を制御する制御方法、ロボット装置、プログラム、記録媒体、及び物品の製造方法に関する。
【背景技術】
【０００２】
近年、組立等の生産に従事するロボット装置の開発事例が増えている。このようなロボット装置の究極の目的は、人間の手のような複雑で高速な組立作業をロボットに実現させることである。ロボットは、指令軌道、即ち各関節の関節指令値（回転関節の場合は角度を示す関節指令値、直動関節の場合は長さを示す関節指令値）に従って制御される。しかし、ロボットの指令軌道とロボットの実際の軌道との間には、差（軌道誤差）が存在する。この軌道誤差がロボットに精密な作業を行わせる際の問題となっていた。例えば、精密な部品の組み立てには０．１ミリメートル以下の誤差に抑える必要があった。
【０００３】
これに対し、多関節のロボットにおけるたわみ分を補正し、位置姿勢の精度を向上させ、高精度な動作を可能とする技術が提案されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３８０８３２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術では、各関節のたわみによるロボット先端の誤差を計算し、その誤差を補正する各関節指令値の補正量を計算していた。ここで、一般に多関節のロボットは、片持ち構造なので剛性が低く、たわみが大きい。そして、各関節の位置姿勢誤差には、関節の駆動方向の誤差のほか、別の方向の誤差も含まれている。各関節の位置姿勢誤差の影響として、ロボット先端の誤差は、数ミリメートルになる。全長が１［ｍ］を超える大きいアームの場合は、１０ミリメートルを超える場合も考えられる。このロボット先端の誤差から、各関節の関節指令値の補正量を計算するには、一般的に逆機構計算（逆運動学計算）を用いる。逆機構計算では、関節のたわみなど、関節の位置姿勢に誤差が無い場合を想定して数式を用いて解が導かれる。このため、逆機構計算によって計算した、各関節の関節指令値を補正する補正量には、かならず計算誤差が含まれる。そして、ロボット先端の誤差が大きい場合、その誤差を補正する時に発生する補正量の補正誤差も大きい。
【０００６】
そのため、従来技術では、一回の計算で各関節の関節指令値の補正量を十分な精度で求めることができないので、収束計算、即ちループ計算を必要としていた。しかし、この補正計算をロボットの動作中に計算する、例えば各関節の関節指令値を出力する時間間隔を２［ｍｓ］としたときには、２［ｍｓ］といった短い時間内に収束計算をする必要があった。収束計算に要する計算時間を短くするために、収束判定の制限を緩和すると、補正誤差が増大してしまい、高精度な補正が困難となっていた。
【０００７】
そこで、本発明は、計算量を低減し、かつロボット先端の位置姿勢誤差を低減することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の制御方法は、関節のアクチュエータを、関節指令値に従って動作させる制御を行う制御部を備えたロボットの制御方法であって、前記制御部が、前記関節の位置姿勢に関する誤差である関節誤差を求める関節誤差算出工程と、前記制御部が、前記アクチュエータを所定の方向に動作させた際に、前記アクチュエータの弾性により生じる誤差である動作方向誤差を求める動作方向誤差算出工程と、前記制御部が、前記関節誤差から前記動作方向誤差を除いた残差を求める残差算出工程と、前記制御部が、前記残差に基づいて前記関節の動作により移動する部位の位置姿勢に関する誤差である移動部位誤差を求める移動部位誤差算出工程と、前記制御部が、前記動作方向誤差と、前記移動部位誤差と、に基づいて前記アクチュエータを動作させる動作工程と、を備えたことを特徴とする。
【発明の効果】
【０００９】
各関節の関節指令値を補正するための第１補正量は、各関節のアクチュエータの駆動方向の誤差成分を用いて直接求められるので、第１補正量に含まれる補正誤差を小さくすることができる。また、各関節の位置姿勢誤差に含まれるアクチュエータの駆動方向の誤差成分を除いた残差は、アクチュエータの駆動方向の誤差成分よりも小さいので、各関節の残差に基づくロボットの先端の位置姿勢誤差から求まる第２補正量は、第１補正量よりも小さい。したがって、ロボットの先端の位置姿勢誤差から各関節の第２補正量を求めた際に第２補正量に補正誤差が含まれていたとしても、第２補正量は小さいので第２補正量に含まれる補正誤差も小さくなる。したがって、第１補正量及び第２補正量のいずれも補正誤差が小さいので、収束計算を行う必要がなく、補正量の算出に要する計算量、即ち計算時間も低減することができる。また、補正誤差の小さい第１補正量及び第２補正量を用いて関節指令値が補正されるので、ロボットの先端の位置姿勢誤差が低減され、高精度にロボットを動作させることができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係るロボット装置の概略構成を示す斜視図である。
【図２】第１実施形態に係るロボット装置のロボット制御装置を示すブロック図である。
【図３】第１実施形態に係るロボット制御方法を示すフローチャートである。
【図４】各関節の位置姿勢誤差を求めるための説明図である。
【図５】（ａ）は、式（２２）の重み係数を示す関数を示すグラフである。（ｂ）は、式（２９）の係数を示す関数を示すグラフである。（ｃ）は、式（３０）の係数を示す関数を示すグラフである。
【図６】シミュレーションに用いたロボットの軸構成を示す模式図である。
【図７】シミュレーションに用いたロボットを示す斜視図である。
【図８】評価したロボットの姿勢を示す斜視図である。
【図９】第２実施形態に係るロボット制御方法を示すフローチャートである。
【図１０】第３実施形態に係るロボット装置のロボットの斜視図である。
【図１１】第３実施形態に係るロボット装置のロボット制御装置を示すブロック図である。
【図１２】第３実施形態に係るロボット制御方法を示すフローチャートである。
【図１３】（ａ）は、第３実施形態におけるリンクの模式図である。（ｂ）は、温度によって変形したリンクを示す模式図である。
【図１４】第４実施形態に係るロボット装置におけるロボット及びその周辺部材を示す斜視図である。
【図１５】（ａ）は、ロボットハンドを位置マーク部材に嵌合する前の状態を示す模式図である。（ｂ）は、ロボットハンドを位置マーク部材に嵌合した状態を示す模式図である。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。ここで、関節は、１自由度の回転関節又は直動関節を意味する。関節指令値とは回転関節の場合は角度の指令値、直動関節の場合は長さの指令値である。この２種類の関節の動作は異なるが、数式上は両者を区別せずに表現できる。そこで、以下の説明では、主に回転関節について説明するが、直動関節の場合についても同じである。
【００１２】
まず、以下の実施形態において数式で使う記号を示す。３方向の平行移動と３つのオイラー角で表現した回転移動からなる、６次元のベクトルｖを４×４の同次座標変換行列Ｔに変換する式を次のように記す。
【００１３】
【数１】
0006700669.tif 000002
【００１４】
より具体的に表現する。Ｃｏｓ（ｖ３）をＣ３、Ｓｉｎ（ｖ３）をＳ３などと略記すると次式となる。
【００１５】
【数２】
0006700669.tif 000003
【００１６】
また、その逆変換を次のように記す。
【００１７】
【数３】
0006700669.tif 000004
【００１８】
以下の実施形態において数式で使う主な記号と用語をまとめる。
【００１９】
【数４】
0006700669.tif 000005
【００２０】
［第１実施形態］
図１は、本発明の第１実施形態に係るロボット装置の概略構成を示す斜視図である。図１に示すように、ロボット装置１００は、多関節のロボット２００と、ロボット２００の動作を制御する制御部であるロボット制御装置３００と、を備えている。また、ロボット装置１００は、ロボット制御装置３００に複数の教示点のデータを送信する教示装置としてのティーチングペンダント４００を備えている。ティーチングペンダント４００は、人が操作するものであり、ロボット２００やロボット制御装置３００の動作を指定するのに用いる。
【００２１】
ロボット２００は、垂直多関節のロボットである。具体的に説明すると、ロボット２００は、垂直多関節のロボットアーム２０１と、ロボットアーム２０１の先端に取り付けられたエンドエフェクタとしてのロボットハンド２０２と、を備えている。以下、エンドエフェクタがロボットハンド２０２である場合について説明するが、これに限定するものではなく、ツール等であってもよい。
【００２２】
ロボットアーム２０１の基端は、台座Ｂに固定された固定端である。ロボットアーム２０１の先端は、自由端である。第１実施形態において、ロボット２００の先端とは、ロボットアーム２０１の先端、即ちロボットハンド２０２のことである。
【００２３】
ロボット２００、即ちロボットアーム２０１は、複数の関節、例えば６つ関節（６軸）Ｊ１〜Ｊ６を有している。ロボットアーム２０１は、各関節Ｊ１〜Ｊ６を各関節軸Ａ１〜Ａ６まわりにそれぞれ回転駆動する複数（６つ）のアクチュエータ１０を有している。
【００２４】
ロボットアーム２０１は、複数のリンク（フレーム）２１００〜２１０６が各関節Ｊ１〜Ｊ６で回転可能に連結されている。ここで、基端側から先端側に向かって、リンク２１００〜２１０６が順に直列に連結されている。ロボットアーム２０１は、可動範囲の中であれば、任意の３次元位置で任意の３方向の姿勢に、ロボット２００の先端（ロボット２００の手先）、即ちロボットハンド２０２を向けることができる。
【００２５】
ロボットアーム２０１の位置及び姿勢は、座標系で表現することができる。座標系Σ０は、ロボットアーム２０１の基端、即ち台座Ｂに固定した座標系を表し、座標系Σｅはロボットアーム２０１の先端に固定した座標系を表す。
【００２６】
各関節Ｊ１〜Ｊ６に設けたアクチュエータ１０は、各関節Ｊ１〜Ｊ６を駆動する。即ち、各アクチュエータ１０は、関節Ｊｉで連結された一対のリンク２１０ｉ−１，２１０ｉのうち、一方のリンク２１０ｉ−１に対して他方のリンク２１０ｉを相対的に駆動する。ここで、６軸のロボット２００の場合、ｉ＝１〜６である。関節Ｊｉ（固定端に対して相対的に移動する移動端）には、座標系Σｉが固定されている。ここで、関節Ｊｉの固定端とは、リンク２１０ｉ−１のことであり、関節Ｊｉの移動端とは、リンク２１０ｉのことである。
【００２７】
つまり、リンク２１０ｉの一端が、関節Ｊｉ−１の移動端であり、リンク２１０ｉの他端が、関節Ｊｉの固定端である（ただし、ｉ＝２〜５）。リンク２１００については、リンク２１００の一端が台座Ｂに固定されており、リンク２１００の他端が関節Ｊ１の固定端である。リンク２１０６については、リンク２１０６の一端が移動端である。リンク２１０６の他端には、ロボットハンド２０２が取り付けられている。グローバル座標系Σ０は、リンク２１００の一端に設けられている。
【００２８】
各アクチュエータ１０は、電動モータ１１と、電動モータ１１に接続された減速機１２とからなる。各減速機１２は、直接、又は不図示のベルト、ベアリング又はギア等の伝達部材を介してそれぞれの関節Ｊ１〜Ｊ６で相対的に駆動されるリンクに接続されている。
【００２９】
各減速機１２には、エンコーダ等の関節角度検出部１３が配置されており、各関節Ｊ１〜Ｊ６の角度を検出できる。各関節Ｊ１〜Ｊ６の角度を検出することで、ロボット制御装置３００がロボット２００の先端の位置姿勢を計算でき、ロボットアーム２０１の実際の軌道を求めることができる。
【００３０】
なお、各アクチュエータ１０の構成は、これに限定するものではなく、例えば人工筋肉等であってもよい。
【００３１】
ロボットアーム２０１の内部には、各アクチュエータ１０の電動モータ１１を駆動制御する駆動制御部としてのサーボ制御装置２３０が配置されている。
【００３２】
サーボ制御装置２３０は、各関節Ｊ１〜Ｊ６の関節位置が指令軌道に追従するよう各電動モータ１１に電流を出力し、各電動モータ１１の動作を制御する。ここで、第１実施形態では、各関節Ｊ１〜Ｊ６が回転関節であるので、関節位置は関節角度である。指令軌道は、各関節Ｊ１〜Ｊ６の関節指令値、第１実施形態では各関節Ｊ１〜Ｊ６が回転関節であるので角度指令値である。
【００３３】
なお、サーボ制御装置２３０が１つの制御装置で構成されている、即ち、複数の電動モータ１１を統括して駆動制御するものとして説明するが、各電動モータ１１にそれぞれ対応した関節制御部で各電動モータ１１を駆動制御するようにしてもよい。
【００３４】
図１には４つの教示点ｐ１，ｐ２，ｐ３，ｐ４を図示している。これらの教示点は、例えば人がティーチングペンダント４００を用いてロボット制御装置３００に与える。ここで、教示点ｐ１，ｐ２，ｐ３，ｐ４はいわゆる３次元空間内の点ではない。
【００３５】
ロボットアーム２０１（ロボット２００）の自由度を表すパラメータを関節角度として、ロボットアーム２０１の６関節Ｊ１〜Ｊ６の関節角度をそれぞれθ１〜θ６とする。ロボットアーム２０１のコンフィグレーションは（θ１，θ２，θ３，θ４，θ５，θ６）で表され、関節空間上では、１つの点とみなすことができる。このように、ロボットアーム２０１の自由度を表すパラメータを座標軸の値とした場合、ロボットアーム２０１のコンフィグレーションは関節空間上の点として表現することができる。つまり、関節空間は、ロボットアーム２０１（ロボット２００）の関節角度を座標軸とする空間である。
【００３６】
また、ロボット２００の先端、即ちロボットハンド２０２には、ツールセンターポイント（ＴＣＰ）が設定されている。ＴＣＰは、位置を表す３つのパラメータ（ｘ，ｙ，ｚ）と、姿勢（回転）を表す３つのパラメータ（α，β，γ）、即ち６つのパラメータ（ｘ，ｙ，ｚ，α，β，γ）で表され、タスク空間上では、１つの点としてみなすことができる。つまり、タスク空間は、これら６つの座標軸で規定された空間である。
【００３７】
ロボット２００を関節空間で移動させる場合では、教示点は関節角度である。タスク空間移動の場合では、教示点は３次元空間の位置および姿勢であり、これは図１のように、ｐ１，ｐ２，ｐ３，ｐ４を座標系として表現される。つまり教示点はいわゆる３次元空間内の点ではなく、一つのベクトルとして理解できる。
【００３８】
ロボット制御装置３００は、コンピュータで構成されている。ロボット制御装置３００は、教示点を結ぶ軌道、すなわち教示点を補間した軌道を生成する。
【００３９】
具体的に説明すると、ロボット制御装置３００は、教示点間を補間するロボット２００の経路（補間経路）を生成する。ロボット２００の経路とは、関節空間におけるロボット２００のコンフィグレーションの軌跡、もしくはタスク空間におけるロボット２００のＴＣＰの軌跡である。換言すれば、ロボット２００の経路とは、関節空間又はタスク空間の点の順序集合である。ロボット２００の軌道とは、時間をパラメータとして経路を表したものであり、第１実施形態では、時刻毎のロボット２００の各関節Ｊ１〜Ｊ６の関節指令値（角度指令値）の集合である。ロボット２００の関節は複数あるため、各関節Ｊ１〜Ｊ６で関節指令値の同期がとられる。教示点間を補間する補間方法としては、Ｓｐｌｉｎｅ補間、Ｂ−Ｓｐｌｉｎｅ補間、ベジェ曲線、直線補間、円弧補間、関節補間などがある。
【００４０】
第１実施形態では、ティーチングペンダント４００等により教示された教示点を用いて初期に設定した軌道を目標とする。そのため、タスク空間における軌道を目標軌道ｘ（図１には点線で示す）、サーボ制御装置２３０に指令する関節空間における軌道を指令軌道ｕという。
【００４１】
これらの軌道は、動作開始から停止までの時間をＴｔｏｔａｌとし、一定の時間間隔（例えば、２［ｍｓ］）をΔｔとすると、Ｔｔｏｔａｌ／Δｔ個の要素を持つ時系列データである。特に、指令軌道ｕは、各関節Ｊ１〜Ｊ６について、Ｔｔｏｔａｌ／Δｔ個の要素を持つ時系列データ（関節指令値）である。さらに、教示点はベクトルであるので、目標軌道ｘ及び指令軌道ｕは、ベクトルの時系列データ、すなわち２次元の配列データである。
【００４２】
ロボット２００、即ちロボットアーム２０１の関節の角度は、ロボット制御装置３００から指令軌道ｕを指令されたサーボ制御装置２３０で駆動制御する。サーボ制御装置２３０は指令軌道ｕを入力とし、ロボットアーム２０１を動作させ、動作結果である実際の軌道ｙを出力する。実際の軌道ｙは目標軌道ｘと同じベクトルの時系列データ、すなわち２次元の配列データである。なお、目標軌道ｘは、各関節に対し、関節角度で与えてもよいし、直交座標系の座標値で与えてもよい。以下、指令軌道ｕの関節Ｊ１〜Ｊ６に出力する関節角度の指令値（関節指令値）をｑ１〜ｑ６と記述する。
【００４３】
次に、ロボット制御装置３００について説明する。図２は、本発明の第１実施形態に係るロボット装置のロボット制御装置を示すブロック図である。ロボット制御装置３００は、コンピュータで構成されており、制御部としてのＣＰＵ（Central  Processing  Unit）３０１を備えている。また、ロボット制御装置３００は、記憶部として、ＲＯＭ（Read  Only  Memory）３０２、ＲＡＭ（Random  Access  Memory）３０３、ＨＤＤ（Hard  Disk  Drive）３０４を備えている。また、ロボット制御装置３００は、記録ディスクドライブ３０５、各種のインタフェース３１１〜３１４を備えている。
【００４４】
ＣＰＵ３０１には、ＲＯＭ３０２、ＲＡＭ３０３、ＨＤＤ３０４、記録ディスクドライブ３０５、各種のインタフェース３１１〜３１４が、バス３１０を介して接続されている。ＲＯＭ３０２には、ＢＩＯＳ等の基本プログラムが格納されている。ＲＡＭ３０３は、ＣＰＵ３０１の演算処理結果等、各種データを一時的に記憶する記憶装置である。
【００４５】
ＨＤＤ３０４は、ＣＰＵ３０１の演算処理結果や外部から取得した各種データ（最良指令軌道や最良評価値を含む）等を記憶する記憶装置であると共に、ＣＰＵ３０１に、後述する演算処理を実行させるためのプログラム３３０を記録するものである。プログラム３３０は、ロボット制御プログラムを含み、ＣＰＵ３０１に各種演算処理を実行させるためのプログラムである。ＣＰＵ３０１は、ＨＤＤ３０４に記録（格納）されたプログラム３３０に基づいてロボット制御方法の各工程を実行する。
【００４６】
記録ディスクドライブ３０５は、記録ディスク３３１に記録された各種データやプログラム等を読み出すことができる。
【００４７】
ティーチングペンダント４００はインタフェース３１１に接続されており、ＣＰＵ３０１はインタフェース３１１及びバス３１０を介してティーチングペンダント４００からの教示点のデータの入力を受ける。
【００４８】
サーボ制御装置２３０は、インタフェース３１４に接続されており、ＣＰＵ３０１は、指令軌道（関節指令値）のデータを所定時間間隔でバス３１０及びインタフェース３１４を介してサーボ制御装置２３０に出力する。
【００４９】
インタフェース３１２には、モニタ３２１が接続されており、モニタ３２１には、ＣＰＵ３０１の制御の下、各種画像が表示される。インタフェース３１３は、書き換え可能な不揮発性メモリや外付けＨＤＤ等の外部記憶装置３２２が接続可能に構成されている。
【００５０】
なお、第１実施形態では、コンピュータ読み取り可能な記録媒体がＨＤＤ３０４であり、ＨＤＤ３０４にプログラム３３０が格納される場合について説明するが、これに限定するものではない。プログラム３３０は、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラム３３０を供給するための記録媒体としては、図２に示す記録ディスク３３１、外部記憶装置３２２等を用いてもよい。具体例を挙げて説明すると、記録媒体として、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性メモリ、ＲＯＭ等を用いることができる。
【００５１】
図３は、本発明の第１実施形態に係るロボット制御方法を示すフローチャートである。この図３に示すフローチャートには、プログラム３３０に従ったロボット制御装置３００、具体的にはＣＰＵ３０１の制御を示す。
【００５２】
ＣＰＵ３０１は、ロボット２００の各関節の目標角度となる関節指令値ｑｉを、教示点のデータに基づいて生成し、誤差を補正するための補正量（補正値）を用いて関節指令値ｑｉを補正し、補正後の新たな関節指令値ｑｉを出力する。ここで、ｑの添え字ｉは、本実施形態の６軸のロボット２００の場合、ｉ＝１〜６である。
【００５３】
補正後の新たな関節指令値ｑｉは、一定の時間間隔、例えば２［ｍｓ］といった時間間隔で各関節Ｊ１〜Ｊ６の電動モータ１１を駆動制御するサーボ制御装置２３０に指令される。したがって、図３に示すフローチャートの処理も、その時間間隔ごとに実行される。前述したように、この時間間隔をΔｔで表す。また、本実施形態では、関節Ｊ１〜Ｊ６は回転関節として説明するが、関節が直動関節であっても、数式を含めて同じ議論である。
【００５４】
ＣＰＵ３０１は、目標関節角度である関節指令値ｑｉから、ロボット２００の幾何パラメータを用い、ロボット２００の先端の位置姿勢を計算する。この計算方法は、周知の順機構学計算（順運動学計算）により行う。
【００５５】
第ｉ関節Ｊｉから第ｊ関節Ｊｊまでの座標変換行列をｉＴｊと記述すると、ＣＰＵ３０１は、次式（４）でグローバル座標系Σ０から見たロボット２００の先端の位置姿勢０Ｔｅを計算する。
【００５６】
【数５】
0006700669.tif 000006
【００５７】
さらに、各関節の座標変換行列ｉＴｊを次式（５）のように２段に分けて考える。
【００５８】
【数６】
0006700669.tif 000007
【００５９】
ここで、Ｔｒｉは、第（ｉ−１）関節Ｊｉ−１の移動端（座標系Σｉ−１の原点）に対する第ｉ関節Ｊｉの固定端の位置姿勢である。関節Ｊｉはアクチュエータ１０により動作するが、この座標変換行列で、関節Ｊｉの固定端、即ちアクチュエータ１０の固定端の位置姿勢を表す。例えばＴｒ２は、第１関節Ｊ１の移動端（座標系Σ１の原点）に対する第２関節Ｊ２の固定端の位置姿勢である。この座標変換行列はロボットアーム２０１を設計する時に決定される固定値である。
【００６０】
Ｔｖｉは、第ｉ関節Ｊｉの固定端に対する移動端の位置姿勢である。この座標変換行列でアクチュエータ１０の移動端、即ち関節の移動端の位置姿勢を表す。関節指令値ｑｉを変数に持つ座標変換行列で、関節の動作を表す。６軸のロボット２００の場合は回転座標変換となる。図１に示す６軸のロボット２００の場合、Ｔｖ１は、関節Ｊ１の移動端が、関節Ｊ１の固定端に対してＡ１軸回りに相対的にｑ１回転する回転座標変換行列になる。
【００６１】
また、ＣＰＵ３０１は、ステップＳ１において、ロボット２００の関節角度に対するロボット２００の先端の次式（６）のヤコビ行列Ｊを計算する。
【００６２】
【数７】
0006700669.tif 000008
【００６３】
さらに、ＣＰＵ３０１は、このヤコビ行列の行列式の絶対値Ｄを計算する。ヤコビ行列や行列式の具体的な計算手順については周知なので、詳細な説明は省略する。
【００６４】
次に、ＣＰＵ３０１は、関節指令値ｑｉを時間微分し、関節Ｊｉの角度の角速度と角加速度を計算する（Ｓ２）。具体的には、ＣＰＵ３０１は、一定時間間隔Δｔごとに与えられる関節指令値ｑｉを次式（７），（８）のように数値微分する。
【００６５】
【数８】
0006700669.tif 000009
【００６６】
式（７），（８）中の右肩の（１）は、前回の値を表す。ＣＰＵ３０１は、この計算が終わった後、式（９），（１０）のように前回の値を更新する。
【００６７】
【数９】
0006700669.tif 000010
【００６８】
矢印は代入の意味である。次に、ＣＰＵ３０１は、関節指令値ｑｉ、角速度及び角加速度から、ロボット２００の動力学パラメータを用い、関節Ｊｉにかかる力及びトルクｗｉを計算する。この計算方法は逆動力学計算として知られている。動力学パラメータとは、各関節Ｊｉを構成する部品の重心位置や質量、慣性テンソル等である。また、ｗｉは、力とトルクの６要素からなるベクトルで、レンチと呼ばれる。
【００６９】
ここで、第１実施形態では、関節Ｊｉは、アクチュエータ１０と、一対のリンク２１０ｉ−１，リンク２１０ｉと、で構成されている。アクチュエータ１０の入力軸には、一対のリンク２１０ｉ−１，リンク２１０ｉのうちの一方が固定され、アクチュエータ１０の出力軸には、一対のリンク２１０ｉ−１，リンク２１０ｉのうちの他方が固定されている。したがって、第１実施形態では、後述する関節Ｊｉの位置姿勢誤差ｕｉとして、関節Ｊｉの固定端で発生する位置姿勢誤差ｒｉと、関節Ｊｉの移動端で発生する位置姿勢誤差ｖｉとの２つに分類することができる。また、これらの誤差が発生する原因も異なる。
【００７０】
関節Ｊｉの固定端で発生する位置姿勢誤差ｒｉの主な原因は、製作誤差である。これは、関節Ｊｉのリンクを設置する組立て誤差や、部品の製作誤差等である。
【００７１】
関節Ｊｉの移動端で発生する位置姿勢誤差ｖｉの主な原因は、アクチュエータの外力による変形である。これはアクチュエータ１０を構成する軸受けや減速機１２の変形である。
【００７２】
ＣＰＵ３０１は、関節Ｊｉの変形による関節Ｊｉの位置姿勢誤差（第１位置姿勢誤差）ｖｉを求める（Ｓ４：関節誤差算出工程）。位置姿勢誤差ｖｉは、関節Ｊｉの変形に起因するリンク２１０ｉ−１に対するリンク２１０ｉの相対的な位置姿勢誤差、即ち、関節Ｊｉの固定端に対する移動端の相対的な位置姿勢誤差である。ステップＳ４では、ＣＰＵ３０１は、関節Ｊｉにかかる力及びトルクｗｉと関節変形のパラメータから、関節Ｊｉの移動端の位置姿勢誤差ｖｉを計算する。関節変形のパラメータとは、剛性行列や粘性行列などであり、記憶部（例えばＨＤＤ３０４）に予め記憶されている。ここでは剛性を考慮する。剛性行列をＫｉとすると以下の式（１１）となる。
【００７３】
【数１０】
0006700669.tif 000011
【００７４】
また、この関節Ｊｉの移動端の位置姿勢誤差ｖｉを座標変換行列で表現すると次のようになる。
【００７５】
【数１１】
0006700669.tif 000012
【００７６】
次に、ＣＰＵ３０１は、ロボット２００の製作誤差による関節Ｊｉの位置姿勢誤差（第２位置姿勢誤差）ｒｉを求める（Ｓ５：位置姿勢誤差算出工程）。位置姿勢誤差ｒｉは、リンク２１０ｉ−１の製作誤差に起因する、第（ｉ−１）関節Ｊｉ−１の移動端（座標系Σｉ−１の原点）に対する第ｉ関節Ｊｉの固定端の相対的な位置姿勢誤差である。ステップＳ５では、ＣＰＵ３０１は、ロボット２００の製作誤差のパラメータから、関節Ｊｉの固定端の位置姿勢誤差ｒｉを計算する。
【００７７】
ここで、ロボット２００の製作誤差のパラメータ、即ち関節Ｊｉの固定端の位置姿勢誤差ｒｉは、並進３方向と回転３方向の６要素からなるベクトルである。この製作誤差は、ロボット２００の製作時に３次元座標測定装置などを用いて、直接計測したり、ロボット２００を製作した後に同定したりすることにより、予め求めて記憶部（例えばＨＤＤ３０４）に記憶させておく。ＣＰＵ３０１は、この製作誤差のパラメータを記憶部（例えばＨＤＤ３０４）から読み出して、次式（１３）により、関節Ｊｉの固定端の位置姿勢誤差ｒｉから座標変換行列を求める。
【００７８】
【数１２】
0006700669.tif 000013
【００７９】
以上で２種類の誤差、即ち関節移動端の位置姿勢誤差ΔＴｖｉと関節固定端の位置姿勢誤差ΔＴｒｉが計算できる。つまり、関節Ｊｉの固定端と移動端で発生する２種類の誤差を、後のステップで補正することができる。
【００８０】
次に、ＣＰＵ３０１は、２種類の誤差ΔＴｖｉ，ΔＴｒｉから、関節Ｊｉの位置姿勢誤差ΔＴｕｉを計算する（Ｓ６：関節誤差算出工程）。
【００８１】
図４は、各関節の位置姿勢誤差を求めるための説明図である。第（ｉ−１）関節Ｊｉ−１から第ｉ関節Ｊｉへの座標変換行列は次の式（１４）のように書ける。
【００８２】
【数１３】
0006700669.tif 000014
【００８３】
ステップＳ１で示した座標変換行列と比較すると、誤差の項が追加されているところが異なる。ＣＰＵ３０１は、統合した関節の位置姿勢誤差ΔＴｕｉを、次式（１５）で計算する。
【００８４】
【数１４】
0006700669.tif 000015
【００８５】
すると、第（ｉ−１）関節Ｊｉ−１から第ｉ関節Ｊｉへの座標変換行列は次のように簡単化される。
【００８６】
【数１５】
0006700669.tif 000016
【００８７】
次工程の準備のため、ＣＰＵ３０１は、関節Ｊｉの位置姿勢誤差ΔＴｕｉをベクトル表現ｕｉに変換する。
【００８８】
【数１６】
0006700669.tif 000017
【００８９】
関節Ｊｉの位置姿勢誤差ｕｉは、座標系Σｉ−１の原点（特に、ｉ＝２〜６の場合は関節Ｊｉ−１の移動端）に対する関節Ｊｉの移動端の相対的な誤差である。
【００９０】
ＣＰＵ３０１は、以上のステップＳ４〜Ｓ６（関節誤差算出工程）により、ロボット２００の関節Ｊｉの位置姿勢誤差ｕｉを、各関節Ｊ１〜Ｊ６についてそれぞれ求める。
【００９１】
ＣＰＵ３０１はステップＳ４〜Ｓ６で求めた関節Ｊｉの位置姿勢誤差ｕｉに含まれるアクチュエータ１０の駆動方向の誤差成分を用いて関節指令値ｑｉを補正するための第１補正量を、各関節Ｊ１〜Ｊ６についてそれぞれ求める（Ｓ７：第１補正量算出工程）。
【００９２】
第１実施形態では、ＣＰＵ３０１は、座標系Σｉ−１における関節Ｊｉの位置姿勢誤差ｕｉから、関節Ｊｉのアクチュエータ１０の駆動方向の誤差成分を分離して第１補正量とする。
【００９３】
具体例を挙げて説明すると、まず、関節Ｊｉの駆動方向を表す成分だけ１で、他がゼロのベクトル、ｓｉを定義する。例えば、関節Ｊｉが座標系Σｉ−１で定義されたＺ軸回りの回転関節の場合は次のようになる。
【００９４】
【数１７】
0006700669.tif 000018
【００９５】
もしＸ方向の直動関節の場合は、ｓｉ＝（１  ０  ０  ０  ０  ０）ｔである。
【００９６】
このベクトルｓｉを用いると、誤差ｕｉの中の関節の駆動方向成分は次式（１９）のように書ける。
【００９７】
【数１８】
0006700669.tif 000019
【００９８】
これを第１補正量とする。つまり、式（１９）は、関節Ｊｉの位置姿勢誤差ｕｉのうち、関節Ｊｉの駆動方向の誤差成分ｓｉｔｕｉのみを抽出する演算である。ＣＰＵ３０１は、式（１９）により抽出した誤差成分ｓｉｔｕｉを、第１補正量とする。
【００９９】
また、ＣＰＵ３０１は、ステップＳ４〜Ｓ６で求めた関節Ｊｉの位置姿勢誤差ｕｉから関節Ｊｉのアクチュエータ１０の駆動方向の誤差成分ｓｉｔｕｉを除いた残差ｕｉ’を、各関節Ｊ１〜Ｊ６についてそれぞれ求める（Ｓ８：残差算出工程）。
【０１００】
誤差ｕｉから関節Ｊｉの駆動方向の誤差成分ｓｉｔｕｉを除いた残差ｕｉ’は次式（２０）で計算できる。
【０１０１】
【数１９】
0006700669.tif 000020
【０１０２】
ここで、式（２０）中、右辺かっこの中は、分離した駆動方向の誤差成分をゼロにして除くために使う６×６の行列である。
【０１０３】
次に、ＣＰＵ３０１は、補正すべき残差ｕｉ’の大きさを調節する（Ｓ９）。誤差のうち、関節Ｊｉのアクチュエータ１０の駆動方向の誤差成分は関節空間で補正するのに対し、残差ｕｉ’はタスク空間で補正計算する。後述するように、タスク空間での補正は、残差ｕｉ’から、グローバル座標系Σ０におけるロボット２００の先端の位置姿勢誤差を計算し、これを逆機構計算（逆運動学計算）により各関節Ｊ１〜Ｊ６の補正量を計算する。したがって、逆機構計算における特異点の問題が発生する。特異点の近傍では補正量の値が非常に大きくなり、ロボット２００の関節が大きく動いてしまう可能性がある。
【０１０４】
そこで、特異点に対する距離に応じて補正すべき残差の大きさを次式（２１）で調節する。
【０１０５】
【数２０】
0006700669.tif 000021
【０１０６】
ここで、矢印は代入の意味である。また、ｆ（Ｄ）は、特異点に対する距離に応じて０〜１の値をとる重み係数を表す関数である。この関数ｆ（Ｄ）が特異点上で０になるようにすれば、補正すべき誤差がゼロになり、その結果、補正量もゼロになる。つまり、特異点（又は特異点近傍）でロボット２００の関節が大きく動くことを防止できる。
【０１０７】
具体的にはステップＳ１で求めたヤコビ行列Ｊの行列式が特異点に近づくに連れてゼロになることを利用して次のように定義する。関数ｆ（Ｄ）は、ヤコビ行列Ｊの行列式の値をＤとし、その絶対値を｜Ｄ｜とし、予め定めた特異点の判定値Ｄ０を用いて次式（２２）となる。
【０１０８】
【数２１】
0006700669.tif 000022
【０１０９】
図５（ａ）は、式（２２）の重み係数を示す関数を示すグラフである。図５（ａ）に示すように、絶対値｜Ｄ｜が小さくなるほど、重み係数ｆ（Ｄ）が小さくなるようにするのが好ましい。
【０１１０】
以上、ＣＰＵ３０１は、ロボット２００の先端におけるヤコビ行列の行列式の絶対値｜Ｄ｜に応じて、０から１までの間の重み係数を、残差ｕｉ’に掛け算して残差ｕｉ’を補正する。
【０１１１】
次に、ＣＰＵ３０１は、残差ｕｉ’による各関節Ｊｉの位置姿勢誤差ΔＴｕｉ’を式（２３）により計算する（Ｓ１０）。
【０１１２】
【数２２】
0006700669.tif 000023
【０１１３】
次に、ＣＰＵ３０１は、各関節Ｊ１〜Ｊ６の残差ｕｉ’に基づくロボット２００の先端の位置姿勢誤差を求める（Ｓ１１：先端誤差算出工程）。
【０１１４】
具体的には、誤差を含まないロボット２００の先端の位置姿勢から、関節の位置姿勢誤差ΔＴｕｉ’を含むロボット２００の先端の位置までの座標変換行列ΔＴｅを式（２４）により計算する。
【０１１５】
【数２３】
0006700669.tif 000024
【０１１６】
右辺の関節動作を表す座標変換Ｔｖｉの引数ｑｉ−ｓｉｔｕｉは、関節Ｊｉの駆動方向の誤差成分を目標値から差し引く工夫であり、本実施形態の特徴の一つである。この工夫によりロボット２００の先端の位置姿勢誤差ΔＴｅの大きさを小さくすることができる。
【０１１７】
また、上式（２４）を使う代わりに、関節の位置姿勢誤差ΔＴｕｉ’を順次ロボット２００の先端の座標系に座標変換していく、次式（２５）の簡便な式で計算してもよい。
【０１１８】
【数２４】
0006700669.tif 000025
【０１１９】
次に、ＣＰＵ３０１は、Ｓ１１にて求めたロボット２００の先端の位置姿勢誤差ΔＴｅに基づく関節Ｊｉの位置姿勢誤差を用いて関節指令値ｑｉを補正するための第２補正量Δｑｉを、各関節Ｊ１〜Ｊ６についてそれぞれ求める（Ｓ１２：第２補正量算出工程）。このとき、ＣＰＵ３０１は、ロボット２００の先端の誤差ΔＴｅから逆機構計算（逆運動学計算）により、各関節Ｊ１〜Ｊ６の第２補正量Δｑｉを計算する。
【０１２０】
ここで、誤差を含む場合と、含まない場合のロボット２００の先端の位置から、それぞれ関節角度を計算し、その差を補正量とする方法が考えられる。しかしこの方法は逆機構計算を２回実行する必要がある。
【０１２１】
そこで、第１実施形態では、ＣＰＵ３０１は、より簡便で実用的な計算としてステップＳ１で求めたヤコビ行列Ｊの逆行列を用い、次式（２６）のように第２補正量Δｑ、即ち（Δｑ１，Δｑ２，Δｑ３，Δｑ４，Δｑ５，Δｑ６）を計算する。
【０１２２】
【数２５】
0006700669.tif 000026
【０１２３】
ここで、右辺のかっこ内の計算は、ロボット２００の先端の誤差ΔＴｅをグローバル座標系Σ０での表現に変更するものである。
【０１２４】
ところで、ロボット２００の特異点では、ヤコビ行列Ｊの逆行列を計算することができないので、一般逆行列で代用する。また、特異点付近ではすでにステップＳ９で補正すべき残差が調整されて小さくなっているので、第２補正量Δｑｉが大きくなりすぎることはない。
【０１２５】
ＣＰＵ３０１は、ステップＳ７で分離した駆動方向成分の第１補正量ｓｉｔｕｉと、第２補正量Δｑｉとを足し合わせ、その結果を新たな補正量（総補正量）Δｑｉとする（Ｓ１３）。
【０１２６】
具体的には次式（２７）となる。矢印は代入の意味である。
【０１２７】
【数２６】
0006700669.tif 000027
【０１２８】
次に、第１実施形態では、ＣＰＵ３０１は、補正強度を調節する（Ｓ１４）。第１実施形態では、ロボット制御装置３００、即ちＣＰＵ３０１は、関節指令値ｑｉを補正する補正モードと、関節指令値ｑｉを補正しない非補正モードと、を有している。また、ＣＰＵ３０１は、非補正モードから補正モードに切り替わる際の遷移モード（第１遷移モード）と、補正モードから非補正モードに切り替わる際の遷移モード（第２遷移モード）と、を有している。
【０１２９】
補正モードと非補正モードとは、作業者の指示により（例えばティーチングペンダント４００からの信号により）切り替えられるが、ＣＰＵ３０１は、直ちに補正モード又は非補正モードに切り替えずに、遷移モードを経てから切り替える。図３に示すフローチャートは、ＣＰＵ３０１が遷移モードのときのフローチャートであり、ＣＰＵ３０１が補正モードのときは、図３においてステップＳ１４が省略される。
【０１３０】
関節指令値ｑｉの補正の開始時において、補正の有無を調節する必要がある。そこで第１実施形態では、ＣＰＵ３０１は、補正強度を時間とともに０から１に変化する係数を表す関数ｇ（ｔ）を用いて調節する。
【０１３１】
【数２７】
0006700669.tif 000028
【０１３２】
即ち、ＣＰＵ３０１は、遷移モード（第１遷移モード）においては、第１補正量と第２補正量とを足し合わせた総補正量Δｑｉに、時間が経過するに連れて０から１に増加する係数ｇ（ｔ）を掛け算して総補正量Δｑｉを補正する。
【０１３３】
時間の経過とともに０から１に増加する関数は次式（２９）のようなものである。ｔ０は切替時間で、例えば０．５秒といった値である。
【０１３４】
【数２８】
0006700669.tif 000029
【０１３５】
図５（ｂ）は、式（２９）の係数を示す関数を示すグラフである。また、より滑らかに切り替える次式（３０）の関数も有効である。
【０１３６】
【数２９】
0006700669.tif 000030
【０１３７】
図５（ｃ）は、式（３０）の係数を示す関数を示すグラフである。
【０１３８】
また、関節指令値ｑｉの補正の終了時において、補正の有無を調節する必要がある。そこで第１実施形態では、ＣＰＵ３０１は、補正強度を時間とともに０から１に変化する係数を表す関数を用いて調節する。この関数は、図５（ｂ）又は図５（ｃ）に示す関数を左右反転し、１から０に減少するようにすればよい。
【０１３９】
即ち、ＣＰＵ３０１は、遷移モード（第２遷移モード）においては、第１補正量と第２補正量とを足し合わせた総補正量Δｑｉに、時間が経過するに連れて１から０に減少する係数を掛け算して総補正量Δｑｉを補正する。
【０１４０】
次に、ＣＰＵ３０１は、各関節Ｊ１〜Ｊ６について、第１補正量及び第２補正量を用いて関節指令値ｑｉを補正する（Ｓ１５：補正工程）。つまり、ＣＰＵ３０１は、最後に求めた補正量Δｑｉを、式（３１）に示すように関節指令値ｑｉから減算して、新たな関節指令値ｑｉとして出力する。
【０１４１】
【数３０】
0006700669.tif 000031
【０１４２】
なお、ステップＳ１４では、ステップＳ１３にて求めた総補正量Δｑｉを補正し、補正された総補正量Δｑｉを関節指令値ｑｉから減算する補正を行う場合について説明したがこれに限定するものではない。
【０１４３】
即ち、ステップＳ１４では、第１補正量ｓｉｔｕｉ及び第２補正量Δｑｉのうち少なくとも一方（好ましくは、第１補正量ｓｉｔｕｉ）を補正してもよい。その際、ＣＰＵ３０１は、遷移モード（第１遷移モード）において、第１補正量及び第２補正量のうち少なくとも一方に、時間が経過するに連れて０から１に増加する係数を掛け算して、第１補正量及び第２補正量のうち少なくとも一方を補正すればよい。そして、ＣＰＵ３０１は、ステップＳ１５では、少なくとも一方が補正された第１補正量及び第２補正量を、関節指令値ｑｉから減算する補正を行えばよい。
【０１４４】
また、ＣＰＵ３０１は、遷移モード（第２遷移モード）において、第１補正量及び第２補正量のうち少なくとも一方に、時間が経過するに連れて１から０に減少する係数を掛け算して、第１補正量及び第２補正量のうち少なくとも一方を補正すればよい。そして、ＣＰＵ３０１は、ステップＳ１５では、少なくとも一方が補正された第１補正量及び第２補正量を、関節指令値ｑｉから減算する補正を行えばよい。
【０１４５】
また、ＣＰＵ３０１は、ステップＳ１５では、補正モードのときには、補正していない第１補正量と第２補正量とを、関節指令値ｑｉから減算する補正を行えばよい。
【０１４６】
以上、関節Ｊｉの関節指令値ｑｉを補正するための第１補正量ｓｉｔｕｉは、関節Ｊｉのアクチュエータ１０の駆動方向の誤差成分を用いて直接求められるので、第１補正量ｓｉｔｕｉに含まれる補正誤差を小さくすることができる。
【０１４７】
また、関節Ｊｉの位置姿勢誤差ｕｉに含まれるアクチュエータの駆動方向の誤差成分を除いた残差ｕｉ’は、アクチュエータの駆動方向の誤差成分よりも小さい。したがって、各関節の残差ｕｉ’に基づくロボット２００の先端の位置姿勢誤差から求まる第２補正量Δｑｉは、第１補正量ｓｉｔｕｉよりも小さい。
【０１４８】
したがって、ロボットの先端の位置姿勢誤差から各関節の第２補正量Δｑｉを求めた際に第２補正量Δｑｉに補正誤差が含まれていたとしても、第２補正量Δｑｉは小さいので第２補正量Δｑｉに含まれる補正誤差も小さくなる。よって、第１実施形態によれば、第１補正量及び第２補正量を求めるのに、収束計算など、複雑なループ計算を行う必要がないので、総補正量Δｑｉの算出に要する計算量、即ち計算時間も低減することができる。また、補正誤差の小さい第１補正量及び第２補正量を用いて関節指令値ｑｉが補正されるので、ロボット２００の先端の位置姿勢誤差が低減され、高精度にロボット２００を動作させることができる。
【０１４９】
また、補正しない非補正モードから補正する補正モードに遷移する第１遷移モードの時、時間経過とともに０から１に増加する係数を総補正量（又は第１補正量と第２補正量のうち少なくとも一方）に掛け算することにより、各関節の急峻な動きが防止される。
【０１５０】
反対に、補正モードから非補正モードに遷移する第２遷移モード時には、時間経過とともに１から０に減少する係数を総補正量（又は第１補正量と第２補正量のうち少なくとも一方）に掛け算することにより、各関節の急峻な動きが防止される。このように、各遷移モードにおいてスムーズな切り換えを可能とすることで、各遷移モードにおける各関節の急峻な動きが防止される。
【０１５１】
また、即ちヤコビ行列の行列式の絶対値｜Ｄ｜、即ち特異点までの距離に応じて、求めた残差を補正するので、特異点近傍でも安定してロボット２００を動作させることができる。
【０１５２】
次に、シミュレーションした結果について説明する。第１実施形態の特徴の一つは、関節Ｊｉの位置姿勢誤差から、関節Ｊｉのアクチュエータ１０の駆動方向成分を分離することである。そこで、この分離計算を行って求めた補正量の補正誤差と、分離計算を行わず求めた補正量の補正誤差とを検討した。
【０１５３】
図６は、シミュレーションに用いたロボット２００の軸構成を示す模式図である。図７は、シミュレーションに用いたロボット２００を示す斜視図である。座標系Σ０はロボット２００の基端（ベース）即ちリンク２１００に固定した座標系でグローバル座標系である。座標系Σｅはロボット２００の先端に固定した座標系である。
【０１５４】
６つの関節Ｊ１〜Ｊ６はすべて回転関節で、それぞれの関節Ｊ１〜Ｊ６に固定した座標系をΣ１〜Σ６、それぞれの関節Ｊ１〜Ｊ６の回転角度をｑ１〜ｑ６と表す。第５関節Ｊ５と第６関節Ｊ６の座標系は重なっているが、回転の方向が異なる。
【０１５５】
図７に示したように、座標系Σ０の原点（ベース）から第２関節Ｊ２（座標系Σ２の原点）までの距離Ｌａを２００［ｍｍ］とする。第２関節Ｊ２（座標系Σ２の原点）から第３関節Ｊ３（座標系Σ３の原点）までの距離Ｌｂを２６０［ｍｍ］とする。第３関節Ｊ３（座標系Σ３の原点）から第５関節Ｊ５（座標系Σ５の原点）までの距離Ｌｃを２６０［ｍｍ］とする。第５関節Ｊ５（座標系Σ５の原点）からロボット２００の先端（ロボットアーム２０１の先端、座標系Σｅの原点）までの距離Ｌｄを４０［ｍｍ］とする。
【０１５６】
図８は、評価したロボット２００の姿勢を示す斜視図である。ロボット２００のベースからロボット２００の先端までの座標変換行列０Ｔｅの位置を（４００，０，４００）とし、ロボット２００の先端の姿勢は、図８のように水平方向とした。
【０１５７】
関節の位置姿勢誤差は、前述したように、関節固定端の位置姿勢誤差ｒｊと関節移動端の位置姿勢誤差ｖｊの２種類ある。
【０１５８】
位置誤差についは影響が小さいのでゼロとした。姿勢誤差は関節移動端の誤差のうち、関節Ｊｉのアクチュエータ１０の回転方向を０．５度、それ以外を０．０５度とした。これは関節が減速機１２に接続されており、他の回転方向に対して剛性が低いからである。
【０１５９】
以上をまとめると、次のように誤差を設定した。
【０１６０】
【数３１】
0006700669.tif 000032
【０１６１】
以上の計算条件において、まず第１実施形態による分離計算有りの補正は、上述した図３のフローチャートに従って行った。この計算条件は、特異点近傍ではないので、ステップＳ９の残差の調整は行わなかった。すなわちｆ（Ｄ）＝１とした。また、補正強度の調整も行わなかった。すなわちｇ（ｔ）＝１とした。
【０１６２】
一方、比較する計算は、関節の駆動方向成分を分離せず、上式（３２）に示した関節の誤差からロボット２００の先端の位置姿勢誤差を計算し、これと目標値との差を計算して関節の補正量を計算した。
【０１６３】
関節の誤差の駆動方向成分を分離しない場合と、分離した場合について、計算結果を次表に示す。
【０１６４】
【表１】
0006700669.tif 000033
【０１６５】
上記誤差ベクトルの大きさで比較すると、分離計算無しの場合は、０．２００［ｍｍ］分離計算有り（第１実施形態）の場合は、０．０４３［ｍｍ］（約１／５）であった。これにより、補正誤差を約１／５に改善できる。
【０１６６】
以上、第１実施形態によれば、関節誤差を精度よく補正できるので、ロボット２００を高精度に動作させることができる。
【０１６７】
［第２実施形態］
次に、本発明の第２実施形態に係るロボット装置におけるロボット制御方法について説明する。図９は、本発明の第２実施形態に係るロボット制御方法を示すフローチャートである。なお、第２実施形態におけるロボット装置の構成は、第１実施形態で説明した図１及び図２に示すロボット装置の構成と同様であるため、説明を省略する。
【０１６８】
図９に示すフローチャートには、プログラム３３０に従ったロボット制御装置３００、具体的にはＣＰＵ３０１の制御を示す。
【０１６９】
第２実施形態では、第１実施形態に対し、全体の誤差から関節駆動方向成分を分離する順番が異なる。ここでは、主に異なる点について説明する。図１で説明したように、ロボット２００の関節Ｊ１〜Ｊ６は、モータ１１と減速機１２とを組合せたアクチュエータ１０により駆動される。減速機１２の回転方向の剛性は、軸受で支持される他の方向に比べて小さい。そのため、関節Ｊ１〜Ｊ６の剛性は、回転方向が最も弱い。したがって、減速機１２の回転方向（アクチュエータ１０の駆動方向）のねじれ変形だけに注目しても、大きな効果を期待できる。
【０１７０】
関節Ｊｉの位置姿勢誤差ｕｉは、関節移動端の位置姿勢誤差ｖｉと、関節固定端の位置姿勢誤差ｒｉの２つから構成されている。したがって、減速機１２のねじれ変形を受け持つ関節移動端の位置姿勢誤差ｖｉを計算した後に、第１補正量を分離しても、大きな効果を期待できる。
【０１７１】
図９に示すステップＳ２１〜Ｓ２３、Ｓ２９〜Ｓ３５は、それぞれ図３に示すステップＳ１〜Ｓ３、Ｓ９〜Ｓ１４と同じであるため、説明を省略する。
【０１７２】
ステップＳ２４では、ＣＰＵ３０１は、ステップＳ４と同様、関節Ｊｉにかかる力及びトルクｗｉと、関節変形のパラメータから、関節Ｊｉの移動端の位置姿勢誤差ｖｉを計算する。ただし、座標変換行列ΔＴｖｉは計算する必要がないので、第１実施形態に対して計算が少ない。
【０１７３】
ステップＳ２５では、ＣＰＵ３０１は、第１位置姿勢誤差である位置姿勢誤差ｖｉから、関節Ｊｉのアクチュエータ１０の駆動方向の誤差成分を分離して第１補正量ｓｉｔｖｉとする（第１補正量算出工程）。即ち、このステップＳ２５では、ＣＰＵ３０１は、関節Ｊｉの位置姿勢誤差ｖｉに含まれるアクチュエータ１０の駆動方向の誤差成分を用いて第１補正量ｓｉｔｖｉを求める。
【０１７４】
そして、ステップＳ２６では、ＣＰＵ３０１は、以下の式（３３）を用いて残差ｖｉ’を求める。
【０１７５】
【数３２】
0006700669.tif 000034
【０１７６】
ステップＳ２７では、ＣＰＵ３０１は、ロボット２００の製作誤差パラメータから、関節Ｊｉの固定端の位置姿勢誤差ｒｉとΔＴｒｉを計算する。このステップＳ２７は図３のステップＳ５と同じである。
【０１７７】
ステップＳ２８では、ＣＰＵ３０１は、残差ｖｉ’と関節固定端の位置姿勢誤差ΔＴｒｉを統合し、関節Ｊｉの位置姿勢誤差ΔＴｕｉ’を計算する。ここで、ダッシュ（’）がついているのは、すでに関節駆動方向の成分を分離した後であることを表す。
第１実施形態と同様、次の式（３４）及び（３５）で計算する。
【０１７８】
【数３３】
0006700669.tif 000035
【０１７９】
以上、第２実施形態によれば、第１実施形態と同様、関節誤差を精度よく補正できるので、ロボット２００を高精度に動作させることができる。
【０１８０】
［第３実施形態］
次に、本発明の第３実施形態に係るロボット装置におけるロボット制御方法について説明する。図１０は、本発明の第３実施形態に係るロボット装置のロボットの斜視図である。図１１は、本発明の第３実施形態に係るロボット装置のロボット制御装置を示すブロック図である。なお、第３実施形態において、第１、第２実施形態と同様の構成については同一符号を付して説明を省略する。
【０１８１】
第１実施形態では関節Ｊｉの固定端の位置姿勢誤差を、製作誤差のパラメータとして予め与えられるとして説明した。第３実施形態では、ロボット２００の各位置に設けた複数の温度センサの検知値から製作誤差のパラメータを補正する点が第１実施形態と異なる。
【０１８２】
図１０に示すロボット２００において、リンク２１０ｉ−１（ｉ＝１〜６）には、一対の温度センサ５００Ａｉ，５００Ｂｉが固定して設けられている。なお、第３実施形態では各リンク２１０に２つの温度センサ５００Ａ，５００Ｂを固定する場合について説明するが、温度センサの数は、いくつあってもかまわない。
【０１８３】
これらの温度センサ５００Ａ（５００Ａ１〜５００Ａ６），５００Ｂ（５００Ｂ１〜５００Ｂ６）は、図１１に示すように、ロボット制御装置３００Ｂのインタフェース３１５を介してバス３１０に接続されている。ＣＰＵ３０１は、バス３１０を介して、各温度センサ５００Ａ，５００Ｂの検知結果を取得する。ＣＰＵ３０１は、プログラム３３０Ｂに従って、各関節Ｊ１〜Ｊ６の関節指令値ｑ１〜ｑ６を補正する。
【０１８４】
図１２は、本発明の第３実施形態に係るロボット制御方法を示すフローチャートである。この図１２に示すフローチャートには、プログラム３３０Ｂに従ったロボット制御装置３００、具体的にはＣＰＵ３０１の制御を示す。
【０１８５】
図１２に示すステップＳ４１〜Ｓ４４、Ｓ４７〜Ｓ５６は、それぞれ図３に示すステップＳ１〜Ｓ４、Ｓ６〜Ｓ１５と同じであるため、説明を省略する。
【０１８６】
ステップＳ４５において、ＣＰＵ３０１は、温度センサ５００Ａ（５００Ａ１〜５００Ａ６），５００Ｂ（５００Ｂ１〜５００Ｂ６）の値を読み込む。温度センサは、数が多いほど正確に温度の分布がわかるので好ましいが、数が多いほどコストが上がるので、１つの関節Ｊｉにつき、２〜３個程度が現実的である。第３実施形態では、１つの関節につき２個のセンサを設置した場合について説明する。
【０１８７】
図１３（ａ）は、本発明の第３実施形態におけるリンク２１０ｉ−１の模式図である。図１３（ｂ）は、温度によって変形したリンク２１０ｉ−１を示す模式図である。図１３（ａ）及び図１３（ｂ）には、関節Ｊｉ−１に固定した座標系Σｉ−１から関節Ｊｉに固定した座標系Σｉまでの間のリンク２１０ｉ−１を図示している。リンク２１０ｉ−１には２個の温度センサ５００Ａｉ，５００Ｂｉが取り付けられている。常温（例えば２５［℃］）に対し、温度センサ５００Ａｉ，５００Ｂｉにて検知された温度（検知値）の温度上昇の値をｔａｉ，ｔｂｉとする。２つの温度センサ５００Ａｉ，５００Ｂｉの間の距離をＬ１とし、リンク２１０ｉ−１の長さ、すなわち座標系Σｉ−１の原点と座標系Σｉの原点との間の距離をＬ２とする。
【０１８８】
リンク２１０ｉ−１の線熱膨張係数をαとし、座標系Σｉ−１から座標系Σｉのへの座標変換誤差を考える。
【０１８９】
まず、温度上昇に伴う上下方向、すなわちＸ方向の伸びは、２つの温度センサ５００Ａｉ，５００Ｂｉの平均値から次のように計算できる。
【０１９０】
【数３４】
0006700669.tif 000036
【０１９１】
また、Ｙ軸まわりの回転誤差は次のように計算できる。
【０１９２】
【数３５】
0006700669.tif 000037
【０１９３】
また、Ｚ軸方向の平行移動成分は次のように計算できる。
【０１９４】
【数３６】
0006700669.tif 000038
【０１９５】
次に、ステップＳ４６において、ＣＰＵ３０１は、ロボット２００の製作誤差のパラメータに、ステップＳ４５にて計算した温度上昇の影響を足し算し、関節Ｊｉの固定端の位置姿勢誤差ｒｉを計算する。
【０１９６】
具体的には、２つの温度センサ５００Ａｉ，５００Ｂｉによる温度ｔａｉ，ｔｂｉを用い、６自由度ある位置姿勢誤差を次のように計算する。
【０１９７】
【数３７】
0006700669.tif 000039
【０１９８】
ここで矢印は代入を、ｒｉ，ｊは第ｉ関節Ｊｉのロボット２００の製作誤差パラメータの第ｊ成分を表す。例えば、ｊ＝１の場合は、Ｘ方向の平行移動成分である。以上のように、関節の固定側の位置姿勢誤差ｒｉを計算し、その座標変換行列ΔＴｒｉを計算する。
【０１９９】
このように、ステップＳ４５，Ｓ４６において、ＣＰＵ３０１は、ロボット２００の温度に応じて製作誤差のパラメータを補正して、関節Ｊｉの固定側の位置姿勢誤差ｒｉ及びその座標変換行列ΔＴｒｉを計算する。
【０２００】
このように、第３実施形態では、リンク２１０ｉ−１の温度（温度センサ５００Ａｉ，５００Ｂｉの温度検出結果）から、リンク２１０ｉ−１の温度変形を計算することができる。具体的には、リンク２１０ｉ−１の線熱膨張係数、長さ及び温度を掛け合わせれば、リンク２１０ｉ−１の温度による伸びを計算することができる。また、少なくとも２つの温度センサ５００Ａｉ，５００Ｂｉによりリンク２１０ｉ−１の温度を検出しているので、リンク２１０ｉ−１の曲がりを計算することができる。この温度変形を関節の位置姿勢誤差ｒｉに加えることにより、位置姿勢誤差ｒｉを補正することができる。
【０２０１】
第３実施形態によれば、ロボット２００に固定した温度センサ５００Ａｉ，５００Ｂｉの値により、関節Ｊｉの固定端に生じる位置姿勢誤差ｒｉを推定し補正することができる。したがって、温度変化があっても、高精度の動作をするロボット２００を実現することができる。
【０２０２】
また、第３実施形態における温度による誤差補正は、必ずしも全関節について必要なわけではない。例えば、根元に近い第２関節Ｊ２は、熱変形による角度変化の影響が大きい。この第２関節Ｊ２だけ補正しても効果が期待できる。
【０２０３】
［第４実施形態］
次に、本発明の第４実施形態に係るロボット装置におけるロボット制御方法について説明する。図１４は、本発明の第４実施形態に係るロボット装置におけるロボット及びその周辺部材を示す斜視図である。なお、第４実施形態において、第１〜第３実施形態と同様の構成については同一符号を付して説明を省略する。第１実施形態では関節の位置姿勢誤差は予め与えられていることを想定していたが、第４実施形態では、実際にロボット２００を動作させて、関節の位置姿勢誤差ｒｊを求める（補正する）部分が異なる。ｊ＝１〜６である。以下、異なる部分を中心に説明する。
【０２０４】
図１４に示す６軸のロボット２００において、ロボット２００の先端は、ロボットハンド２０２である。ロボットハンド２０２には、第１嵌合部としての爪２０２Ａが形成されている。ロボット２００は台座Ｂに固定されている。また、第２嵌合部としての嵌合穴２７０Ａが形成された嵌合部材である位置マーク部材２７０が、台座Ｂに固定されている。位置マーク部材２７０は、ロボット２００の動作領域に配置されている。
【０２０５】
図３のステップＳ５、図９のステップＳ２７又は図１２のステップＳ４６において、ＣＰＵ３０１は、製作誤差パラメータを用いて位置姿勢誤差ｒｊを求めたときに、位置姿勢誤差ｒｊを補正する。具体的には、ＣＰＵ３０１は、ロボットハンド２０２の爪２０２Ａを、位置マーク部材２７０の嵌合穴２７０Ａに嵌合させて、ロボット２００の先端位置のずれから、関節の補正値を求めて記憶部（例えばＨＤＤ３０４）に記憶させておく。そして、図３のステップＳ５、図９のステップＳ２７又は図１２のステップＳ４６では、ＣＰＵ３０１は、記憶部（例えばＨＤＤ３０４）から読み出した補正値で位置姿勢誤差ｒｊを補正する。
【０２０６】
なお、ロボット２００の先端の形状（第１実施形態では、ロボットハンド２０２の爪２０２Ａの外形）及び嵌合穴２７０Ａは、四角錐の一部分の形状とするが、これに限定するものではない。例えば円錐の一部分の形状であってもよく、位置決め可能であれば形状は任意でよい。
【０２０７】
図１５（ａ）は、ロボットハンド２０２を位置マーク部材２７０に嵌合する前の状態を示す模式図である。図１５（ｂ）は、ロボットハンド２０２を位置マーク部材２７０に嵌合した状態を示す模式図である。
【０２０８】
図１５（ａ）及び図１５（ｂ）に示すように、ロボット２００の各関節を動作させて、ロボットハンド２０２の爪２０２Ａを位置マーク部材２７０の嵌合穴２７０Ａに嵌合させる。この嵌合作業は、ロボット２００における組立作業で通常行われる動作である。例えば、ロボットハンド２０２に取り付けた力覚センサ（不図示）を使い、ロボット２００の手先が外力に反応して動くインピーダンス制御を行うことによって、爪２０２Ａを嵌合穴２７０Ａに押し付け、倣わせることができる。
【０２０９】
ＣＰＵ３０１は、こうして嵌合した時、各関節のアクチュエータ１０の位置からロボット２００の先端の位置を計算する。ロボット２００の先端の位置は様々な誤差を反映して、当初の目標の位置とは異なる。このロボット２００の先端の位置の誤差をΔＴｐとする。次に、どの関節が誤差を生じているか仮定する。例えば、第１関節を選択すると、誤差ΔＴｐにより第１関節の取付誤差、つまりロボット２００の取付位置姿勢を推定する。具体的には、第ｊ関節を選択したとし、第ｊ関節の取付誤差ΔＴｐｐｊを次の式から推定する。
【０２１０】
【数３８】
0006700669.tif 000040
【０２１１】
これは、ロボット２００の先端の座標系で表現された、ロボット２００の先端位置の誤差ΔＴｐを選択した関節の座標系に座標変換する式である。これを第ｊ関節の位置姿勢誤差ｒｊに加える。
【０２１２】
【数３９】
0006700669.tif 000041
【０２１３】
ここで、矢印は代入を表す。
【０２１４】
第４実施形態によれば、関節の取付位置姿勢が不明な場合でも、これを推定し、補正することで、より高精度にロボットを動作させることができる。
【０２１５】
なお、本発明は、以上説明した実施形態に限定されるものではなく、本発明の技術的思想内で多くの変形が可能である。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されない。
【０２１６】
［その他の実施形態］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【０２１７】
また、第１〜第４実施形態は、ロボットにおけるすべての関節が回転関節として説明したが、これに限定するものではなく、複数の関節のうち一部又は全部が、直動関節であってもよい。
【０２１８】
また、第１〜第４実施形態では、垂直多関節のロボットの場合について説明したが、これに限定するものではない。例えば、水平多関節のロボット、パラレルリンクのロボット、直交ロボット等、種々のロボットについて本発明は適用可能である。
【０２１９】
また、ロボット装置が、撮像部としてのカメラを更に備えていてもよい。この場合、カメラによりロボットを撮像し、制御装置（ＣＰＵ）が、関節変形のパラメータや製作誤差のパラメータを用いて各関節の位置姿勢誤差を求める代わりに、カメラから得られた撮像画像に基づいて各関節の位置姿勢誤差を求めてもよい。
【符号の説明】
【０２２０】
１０…アクチュエータ、１００…ロボット装置、２００…ロボット、３００…ロボット制御装置、３０１…ＣＰＵ（制御部）
【図１】
0006700669.tif 000042
【図２】
0006700669.tif 000043
【図３】
0006700669.tif 000044
【図４】
0006700669.tif 000045
【図５】
0006700669.tif 000046
【図６】
0006700669.tif 000047
【図７】
0006700669.tif 000048
【図８】
0006700669.tif 000049
【図９】
0006700669.tif 000050
【図１０】
0006700669.tif 000051
【図１１】
0006700669.tif 000052
【図１２】
0006700669.tif 000053
【図１３】
0006700669.tif 000054
【図１４】
0006700669.tif 000055
【図１５】
0006700669.tif 000056