【解決手段】ロボット制御装置1は、冗長軸を有するマニピュレータ3の操作を受け付ける操作受付部11と、拘束条件を受け付ける拘束条件受付部13と、受け付けられた操作と拘束条件とに応じてマニピュレータ3の各軸位置を算出する各軸位置算出部14と、教示指示を受け付ける教示指示受付部15と、教示指示の受け付けに応じてマニピュレータ3の教示データを作成する教示データ作成部16とを備える。そのように、教示時に拘束条件を用いてマニピュレータ3を動作させ、再生時にもその拘束条件を用いるようにすることにより、教示時と再生時の動作を一致させることができ、再生時のマニピュレータ3の動作が想定外のものになることを回避できる。
前記教示データ作成部は、前記教示指示受付部が教示指示を受け付けた時点の拘束条件を識別する拘束条件識別情報を含む教示データを作成する、請求項1記載のロボット制御装置。
【発明を実施するための形態】
【0013】
以下、本発明によるロボット制御装置について、実施の形態を用いて説明する。なお、以下の実施の形態において、同じ符号を付した構成要素及びステップは同一または相当するものであり、再度の説明を省略することがある。本実施の形態によるロボットシステムは、ティーチング時に、拘束条件に応じた操作を行うことができるものである。
【0014】
図1は、本実施の形態によるロボットシステムの構成を示すブロック図である。本実施の形態によるロボットシステムは、ロボット制御装置1と、サーボコントローラ2と、マニピュレータ3と、操作装置4とを備える。ロボット制御装置1は、モータにより駆動される関節によって連結された複数のアームを有するマニピュレータ3を、サーボコントローラ2を介して制御する。そのマニピュレータ3において、各モータとアームとは減速機を介して接続されている。また、直列に接続されたアームの先端に、手先効果器(エンドエフェクタ)が設けられていてもよい。マニピュレータ3は、例えば、垂直多関節ロボットのマニピュレータであってもよく、水平多関節ロボットのマニピュレータであってもよい。また、そのマニピュレータ3の軸数は問わないが、本実施の形態では、マニピュレータ3が冗長軸を含む複数の関節を有しているものとする。したがって、ロボット制御装置1は、冗長マニピュレータを制御するものである。垂直多関節ロボットが冗長軸を有する場合には、通常、7軸以上となる。本実施の形態では、マニピュレータ3が7軸である場合について主に説明する。その7軸のマニピュレータ3は、特に限定されないが、例えば、上記特許文献1,2に記載されている7軸のマニピュレータであってもよく、その他の7軸のマニピュレータであってもよい。また、ロボット制御装置1は、ティーチングプレイバック方式によりマニピュレータ3を制御するものである。本実施の形態によるロボットは、例えば、搬送ロボットであってもよく、溶接ロボットであってもよく、組立ロボットであってもよく、塗装ロボットであってもよく、または、その他の用途のロボットであってもよい。
図1では、説明の便宜上、1個のサーボコントローラ2のみを示しているが、通常、ロボットシステムは、マニピュレータ3の軸数と同数のサーボコントローラを備えている。したがって、サーボコントローラ2は、各軸に対応するサーボコントローラの集合であると考えてもよい。
【0015】
図1で示されるように、ロボット制御装置1は、操作受付部11と、拘束条件記憶部12と、拘束条件受付部13と、各軸位置算出部14と、教示指示受付部15と、教示データ作成部16と、教示データ記憶部17とを備える。
【0016】
操作受付部11は、可搬式の操作装置4から、マニピュレータ3の操作を受け付ける。その操作装置4は、例えば、ティーチングペンダントであってもよい。操作受付部11が受け付ける操作は、例えば、マニピュレータ3の手先の位置及び姿勢の操作であってもよい。その操作は、例えば、マニピュレータ3の手先の位置の変位や、その手先の姿勢の変位であってもよく、その他の操作であってもよい。
【0017】
なお、本実施の形態では、操作受付部11が操作装置4から操作を受け付ける場合について説明するが、そうでなくてもよい。操作受付部11は、例えば、有線または無線の通信回線を介して送信された操作を受信してもよい。なお、操作受付部11は、受け付けを行うためのデバイス(例えば、モデムやネットワークカードなど)を含んでもよく、または含まなくてもよい。また、操作受付部11は、ハードウェアによって実現されてもよく、または所定のデバイスを駆動するドライバ等のソフトウェアによって実現されてもよい。
【0018】
拘束条件記憶部12では、拘束条件が記憶される。その記憶されている拘束条件に対応付けて、その拘束条件を識別する拘束条件識別情報が拘束条件記憶部12で記憶されていてもよい。拘束条件は、例えば、次のようなものであってもよい。なお、拘束条件の詳細については後述する。
拘束条件R1:指定軸の変位を最小化する
拘束条件R2:指定軸の変位を他の軸よりも大きくする
拘束条件R3:全軸の運動量のノルムの和を最小にする
拘束条件R4:減速機の負担を軽減する
拘束条件R5:指定軸の位置を指定位置に近づける
なお、拘束条件R4は、例えば、管理されている各軸の減速機の動作量を用いて、その動作量が最小である軸の変位を他の軸よりも大きくする拘束条件であってもよい。
【0019】
拘束条件記憶部12に拘束条件が記憶される過程は問わない。例えば、記録媒体を介して拘束条件が拘束条件記憶部12で記憶されるようになってもよく、通信回線等を介して送信された拘束条件が拘束条件記憶部12で記憶されるようになってもよく、または、入力デバイスを介して入力された拘束条件が拘束条件記憶部12で記憶されるようになってもよい。拘束条件記憶部12での記憶は、RAM等における一時的な記憶でもよく、または、長期的な記憶でもよい。拘束条件記憶部12は、所定の記録媒体(例えば、半導体メモリや磁気ディスクなど)によって実現されうる。
【0020】
拘束条件受付部13は、可搬式の操作装置4から、操作に応じた各軸位置が算出される際に用いられる拘束条件を受け付ける。この拘束条件の受け付けは、結果として操作者の指定した拘束条件がわかるようになるのであれば、どのような受け付けであってもよい。すなわち、拘束条件の受け付けは、拘束条件の選択の受け付けであってもよい。本実施の形態では、拘束条件受付部13による拘束条件の受け付けが、拘束条件記憶部12で記憶されている拘束条件の選択の受け付けである場合について説明する。具体的には、拘束条件の受け付けは、その拘束条件を識別する拘束条件識別情報の受け付けであってもよい。その場合には、拘束条件受付部13は、拘束条件識別情報と共に、その拘束条件識別情報で識別される拘束条件において用いられる情報をも受け付けてもよい。その情報は、例えば、上記拘束条件R1,R2,R5の指定軸を示す情報であってもよく、拘束条件R5の指定位置であってもよい。また、拘束条件受付部13は、通常、教示のための操作が行われている際に、拘束条件を受け付けることになる。そのようにして、操作者は、教示の際に拘束条件を切り替えることができ、マニピュレータ3の状況に応じた拘束条件を用いた操作が可能となる。また、教示時において、拘束条件を簡単に切り替えられることが好適である。したがって、その拘束条件の受け付けは、例えば、操作装置4のタッチパネルやボタンを用いて簡単に行えるようにしてもよく、または、対話的なインターフェースを用いて行えるようにしてもよい。なお、拘束条件受付部13は、拘束条件そのものを受け付けてもよい。その場合には、受け付けられた拘束条件は、拘束条件記憶部12に追記されてもよく、または、そうでなくてもよい。
【0021】
なお、本実施の形態では、拘束条件受付部13が操作装置4から拘束条件を受け付ける場合について説明するが、そうでなくてもよい。拘束条件受付部13は、例えば、有線または無線の通信回線を介して送信された拘束条件を受信してもよい。なお、拘束条件受付部13は、受け付けを行うためのデバイス(例えば、モデムやネットワークカードなど)を含んでもよく、または含まなくてもよい。また、拘束条件受付部13は、ハードウェアによって実現されてもよく、または所定のデバイスを駆動するドライバ等のソフトウェアによって実現されてもよい。
【0022】
各軸位置算出部14は、操作受付部11が受け付けた操作と、拘束条件受付部13が受け付けた拘束条件とに応じて、マニピュレータ3の各軸位置を算出する。すなわち、各軸位置算出部14は、マニピュレータ3の逆運動学の計算を行うものである。なお、その各軸位置の算出で用いられた拘束条件は、後述するように、教示データの再生時に各軸位置を算出する際にも用いられることになる。その結果、教示時のマニピュレータ3の動きと、再生時のマニピュレータ3の動きとが一致することになる。その各軸位置の算出処理の詳細については後述する。算出された各軸位置は、サーボコントローラ2に出力され、それに応じて、マニピュレータ3の各軸の位置が変化することになる。そのような操作に応じた各軸位置の算出は、通常、教示時に行われる。一方、各軸位置算出部14は、再生時にも各軸位置を算出してもよい。具体的には、各軸位置算出部14は、教示データ記憶部17で記憶されている教示データを読み出し、その教示データに応じた各軸位置を算出してサーボコントローラ2に出力してもよい。また、その教示データに拘束条件識別情報が含まれている場合には、各軸位置算出部14は、その拘束条件識別情報で識別される拘束条件を用いて各軸位置を算出してもよい。
【0023】
教示指示受付部15は、可搬式の操作装置4から、教示指示を受け付ける。その教示指示は、教示データを作成する旨の指示である。その教示指示は、教示データを蓄積する旨の指示であると考えてもよい。なお、本実施の形態では、教示指示受付部15が操作装置4から教示指示を受け付ける場合について説明するが、そうでなくてもよい。教示指示受付部15は、例えば、有線または無線の通信回線を介して送信された教示指示を受信してもよい。なお、教示指示受付部15は、受け付けを行うためのデバイス(例えば、モデムやネットワークカードなど)を含んでもよく、または含まなくてもよい。また、教示指示受付部15は、ハードウェアによって実現されてもよく、または所定のデバイスを駆動するドライバ等のソフトウェアによって実現されてもよい。
【0024】
教示データ作成部16は、教示指示受付部15による教示指示の受け付けに応じて、マニピュレータ3の教示データを作成する。その教示データは、例えば、教示された手先の位置や、教示された手先の姿勢を示すデータであってもよい。すなわち、その教示データは、教示点等を含む情報であってもよい。また、教示データ作成部16は、教示指示受付部15が教示指示を受け付けた時点の拘束条件を識別する拘束条件識別情報を含む教示データを作成してもよい。教示指示が受け付けられた時点の拘束条件とは、その時点の各軸位置の算出で用いられた拘束条件のことである。なお、各軸位置算出部14等では、その時点の各軸位置までの移動時の算出に用いられた拘束条件を識別する拘束条件識別情報を保持していることが好適である。また、教示データは、それら以外の情報を含んでいてもよい。例えば、教示データは、教示点間の補間方法(例えば、直線補間や曲線補間等)を示す情報を含んでいてもよい。その補間方法は、操作者によって指示されたものであってもよい。教示データ作成部16は、作成した教示データを教示データ記憶部17に蓄積する。そのようにして教示データが蓄積されることにより、ロボットに各種の作業を行わせるための作業プログラムが作成されることになる。
【0025】
教示データ記憶部17では、教示データ作成部16によって作成された教示データが記憶される。教示データ記憶部17での記憶は、RAM等における一時的な記憶でもよく、または、長期的な記憶でもよい。また、教示データ記憶部17は、所定の記録媒体(例えば、半導体メモリや磁気ディスクなど)によって実現されうる。
【0026】
ここで、各軸位置算出部14による各軸位置の算出について説明する。ある時刻t
1におけるマニピュレータ3のヤコビアン(ヤコビ行列)をA
1とする。各軸位置算出部14は、その時刻t
1におけるマニピュレータ3の位置姿勢に応じたヤコビアンA
1を取得することができる。また、マニピュレータ3の手先の位置姿勢の変位を示すベクトルを、
ΔX=(Δx,Δy,Δz,Δα,Δβ,Δγ)
T
とし、そのときの各軸変位を示すベクトルを、
ΔΘ=(Δθ
1,Δθ
2,...,Δθ
n−1,Δθ
n)
T
とすると、次式が成り立つ。なお、Δx,Δy,Δzは、マニピュレータ3の手先の位置の変化であり、Δα,Δβ,Δγは、マニピュレータ3の手先の姿勢の変化である。また、Δθ
iは、i番目の軸における位置(角度)の変化である。また、マニピュレータ3は冗長軸を有するため、nは7以上の整数である。
ΔX=A
1ΔΘ
【0027】
この場合には、A
1は正則ではないため逆行列を持たないが、擬似逆行列を用いると、ΔΘは、次式のようになる。
ΔΘ=A
1+ΔX+(I−A
1+A
1)k ・・・(1)
ただし、A
1+はA
1の擬似逆行列(ムーア・ペンローズの擬似逆行列)であり、Iは単位行列であり、kは任意のベクトルである。A
1からA
1+を算出する方法はすでに公知であり、その説明を省略する。なお、マニピュレータ3が7軸である場合、すなわち、冗長自由度が1である場合には、ΔΘ、kは7次元のベクトルであり、Iは7×7の単位行列であり、A
1は6行7列の行列であり、A
1+は7行6列の行列である。
【0028】
各軸位置算出部14は、拘束条件受付部13で受け付けられた拘束条件を満たすようにベクトルkを決定する。そして、各軸位置算出部14は、その決定したベクトルkと、式1とを用いて、操作受付部11が受け付けた操作に応じた各軸位置を算出する。具体的には、操作受付部11が受け付けた操作が、通常、ΔXとなる。また、その操作後の各軸位置は、操作前の各軸位置に、上記式1で算出したΔΘを加算したものとなる。したがって、各軸位置算出部14は、各時点での各軸位置を一時的に図示しない記録媒体で記憶していてもよい。このようにして、マニピュレータ3が1つ以上の冗長自由度を有する場合にも、拘束条件を考慮したマニピュレータ3の手動動作が可能となる。
【0029】
次に、拘束条件について簡単に説明する。拘束条件は特に限定されるものではないが、例えば、次のようなものを挙げることができる。なお、拘束条件が、以下のもの以外であってもよいことは言うまでもない。
【0030】
拘束条件R1:指定軸の変位の最小化
この場合には、Δθ
i=0となるように、または、Δθ
iが他軸の変位よりも小さくなる(すなわち、Δθ
i<Δθ
j≠iとなる)ようにベクトルkが決定される。ただし、i番目の軸が指定軸である。
【0031】
拘束条件R2:指定軸の変位の最大化
この場合には、Δθ
iが他軸の変位よりも大きくなるようベクトルkが決定される。すなわち、Δθ
i=Δθ
max、または、Δθ
i>Δθ
j≠iとなる。ただし、i番目の軸が指定軸であり、Δθ
max=max{Δθ
1,Δθ
2,...,Δθ
n}である。
【0032】
拘束条件R3:全軸の動作量のノルムの和の最小化
この場合には、Σ|Δθ
i|が最小になるようにベクトルkが決定される。ただし、総和Σは、マニピュレータ3のすべての軸についての和である。
【0033】
拘束条件R4:減速機の負担減
この場合には、動作量(使用量)の最も少ない減速機の軸の変位が最大となるようにしてもよい。すなわち、この拘束条件R4は、動作量が最小の減速機の軸を指定軸とした拘束条件R2であると考えることができる。なお、この拘束条件R4を用いる場合には、あらかじめ各軸の減速機ごとに動作量を管理していてもよい。その動作量は、減速機の動作に応じて更新されるものとする。そして、この拘束条件R4に応じたベクトルkを決定する場合に、各軸位置算出部14は、管理されている動作量を用いて、最も動作量の少ない減速機の軸を特定してもよい。その動作量の管理は、寿命の管理であってもよい。
【0034】
拘束条件R5:指定軸の位置の指定位置への設定
この場合には、θ
i−θ
fix=0となるように、または、θ
i−θ
fixが最小になるようにベクトルkが決定される。ただし、i番目の軸が指定軸であり、θ
fixが指定位置である。
【0035】
また、拘束条件に応じたベクトルkを決定する場合に、各軸位置算出部14は、拘束条件を満たすベクトルkを算出してもよく、または、複数のベクトルkに応じたΔΘを算出し、その複数のベクトルkから、拘束条件を最もよく満たすベクトルkを選択してもよい。ここで、ベクトルkについて少し説明する。ベクトルkは、前述のように、マニピュレータ3の軸数の次元を有する任意のベクトルである。したがって、通常は、k=(k
1,k
2,...,k
n)
Tとなる。ただ、冗長自由度がmである場合には、ベクトルkも、その冗長自由度mに応じた次元の自由度があれば十分であるため、k=(k
1,k
2,...,k
m,0,...,0)
Tとすることができる。すなわち、ベクトルkの1番目からm番目までの要素を任意の実数(k
1,k
2,...,k
m)とし、それ以外を0とすることができる。例えば、マニピュレータ3が7軸である場合には、k=(k
1,0,...,0)
Tとなる。そして、各軸位置算出部14は、k
1,k
2,...,k
mを決定することによってベクトルkを決定してもよい。
【0036】
次に、マニピュレータ3が7軸である場合、すなわち、冗長軸が1軸である場合に、拘束条件R3を満たすベクトルkを算出する方法について具体的に説明する。まず、ベクトルk=(k
1,0,...,0)
Tを算出する方法について説明する。ここでは、その算出に最急降下法を用いるが、他のアルゴリズムを用いてもよいことは言うまでもない。
【0037】
まず、全軸の動作量のノルムの自乗の総和を、kの式として定義する。すなわち、関数fを次式のように定義する。この関数fが0または小さい正の値となるときに、全軸の動作量のノルムの総和も0または小さい正の値になるからである。
f(k)=(Δθ
1(k))
2+(Δθ
2(k))
2+…+(Δθ
7(k))
2
なお、マニピュレータ3が7軸である場合には、ベクトルkのゼロでない要素はk
1のみであるため、実質的にf(k)=f(k
1)となる。
【0038】
次に、ベクトルkの初期値、すなわちk
1の初期値k
1(0)を、例えば、k
1(0)=1と設定する。
その後、各軸位置算出部14は、次式のようにk
1(j)を更新する。なお、pは、1回の更新での変化の程度を決定するパラメータであり、通常は小さい正の値に設定される。ただし、jは0以上の整数である。
k
1(j+1)=k
1(j)−p×∂f(k
1(j))/∂k
1
【0039】
各軸位置算出部14は、その更新を、
|k
1(j+1)−k
1(j)|<ε
となるまで繰り返す。なお、εは、終了条件を決定する小さい正の値である。このようにすることによって、各軸位置算出部14は、ベクトルkのゼロでない要素k
1を算出することができ、ある時刻t
1におけるΔΘが算出されることになる。そして、各軸位置算出部14は、時刻t
1におけるΘに、算出されたΔΘを加算することによって、受け付けられた操作であるΔXに応じた各軸位置を算出できる。
【0040】
次に、マニピュレータ3が7軸である場合に、拘束条件R3を満たすベクトルkを選択する場合について具体的に説明する。まず、複数のベクトルkを設定する。例えば、k
(1),k
(2),…,k
(q)を設定する。なお、qは、設定されるベクトルkの個数である。また、そのk
(1)等は、あらかじめ決められている値を読み出すことによって設定されてもよく、あらかじめ決められているルールに応じて、またはランダムに生成された値であってもよい。
【0041】
その後、各軸位置算出部14は、設定されたベクトルk
(1)等に応じたf(k)をそれぞれ算出する。そして、各軸位置算出部14は、算出したf(k)のうち、最も小さい値の算出で用いられたベクトルkを、各軸位置の算出で用いるベクトルkとして選択する。その選択されたベクトルkを用いて各軸位置が算出される方法は、上述の通りであり、その説明を省略する。なお、ベクトルk
(1)等に応じたf(k)を算出する際には、ベクトルk
(1)等に応じたΔΘがそれぞれ算出されていることになる。したがって、ベクトルkが選択された後に再度、ΔΘを算出するのではなく、その選択されたベクトルkに応じたΔΘを用いて各軸位置を算出してもよい。
【0042】
ここでは、拘束条件R3に応じてベクトルkを決定する場合について説明したが、他の拘束条件の場合でも同様にしてベクトルkを決定することができる。例えば、拘束条件R1の場合には、f(k)=(Δθ
i)
2を用いてベクトルkを算出してもよく、Δθ
i<Δθ
j≠iとなるベクトルkを選択してもよい。また、拘束条件R2の場合には、f(k)=(Δθ
i−Δθ
max)
2を用いてベクトルkを算出してもよく、Δθ
i>Δθ
j≠iとなるベクトルkを選択してもよい。また、拘束条件R5の場合には、f(k)=(θ
i−θ
fix)
2を用いてベクトルkを算出してもよく、θ
iがθ
fixに最も近いベクトルkを選択してもよい。
【0043】
また、再生時には、各軸位置算出部14は、教示データに含まれる位置と姿勢、拘束条件識別情報を読み出し、その位置と姿勢まで、拘束条件識別情報で識別される拘束条件で移動するように各軸位置を算出してもよい。なお、教示データに補間方法(例えば、直線補間や曲線補間等)が含まれる場合には、その補間方法をも用いて各タイミングにおける各軸位置を算出してもよい。そのような各軸位置の算出は、教示データに含まれる拘束条件識別情報で識別される拘束条件を用いる以外、すでに公知であり、その説明を省略する。
【0044】
なお、拘束条件記憶部12と、教示データ記憶部17とは、同一の記録媒体によって実現されてもよく、または、別々の記録媒体によって実現されてもよい。前者の場合には、拘束条件を記憶している領域が拘束条件記憶部12となり、教示データを記憶している領域が教示データ記憶部17となる。
【0045】
サーボコントローラ2は、ロボット制御装置1から各軸位置(位置指令値)を受け取り、マニピュレータ3の各軸が、その各軸位置となるようにコントロールする。サーボコントローラ2は、例えば、マニピュレータ3から各軸の現在位置である位置フィードバックと、各軸の現在速度である速度フィードバックと、各軸の現在電流である電流フィードバックとを受け取り、それらのフィードバックを用い、位置ループ、速度ループ、電流ループによるフィードバック制御を行ってもよい。その現在位置等は、各軸に設けられているエンコーダによって測定されてもよい。なお、サーボコントローラ2の処理についてはすでに公知であり、その説明を省略する。
【0046】
なお、本実施の形態におけるマニピュレータ3は、物理的な現実のマニピュレータであってもよく、または、仮想的なシミュレーション対象としてのマニピュレータであってもよい。前者の場合におけるティーチングは、オンラインティーチングとなり、後者の場合におけるティーチングは、オフラインティーチングとなる。
【0047】
また、操作装置4は、例えば、ティーチング等で用いるティーチングペンダントであり、ロボット制御装置1に、マニピュレータ3の操作や、拘束条件、教示指示を入力するために用いられる。
【0048】
次に、ロボットシステムの動作について
図2のフローチャートを用いて説明する。
(ステップS101)拘束条件受付部13は、拘束条件を受け付けたかどうか判断する。そして、拘束条件を受け付けた場合には、ステップS102に進み、そうでない場合には、ステップS103に進む。なお、この拘束条件の受け付けが、拘束条件の選択であってもよいことは上述の通りである。
【0049】
(ステップS102)各軸位置算出部14は、拘束条件受付部13が受け付けた拘束条件を、各軸位置の算出で用いる拘束条件に設定する。例えば、拘束条件受付部13が拘束条件識別情報を受け付けた場合には、各軸位置算出部14は、その拘束条件識別情報を、現在の拘束条件を識別する拘束条件識別情報の格納領域に蓄積してもよい。そして、ステップS101に戻る。
【0050】
(ステップS103)操作受付部11は、マニピュレータ3の操作を受け付けたかどうか判断する。そして、操作を受け付けた場合には、ステップS104に進み、そうでない場合には、ステップS106に進む。
【0051】
(ステップS104)各軸位置算出部14は、ステップS102で設定された最新の拘束条件識別情報で識別される拘束条件を拘束条件記憶部12から読み出す。そして、各軸位置算出部14は、その読み出した拘束条件と、その時点の各軸位置と、その時点のマニピュレータ3の位置姿勢に応じたヤコビアンと、ステップS103で受け付けられた操作とを用いて、前述のようにして各軸位置を算出する。
【0052】
(ステップS105)各軸位置算出部14は、その算出した各軸位置をサーボコントローラ2に出力する。そして、ステップS101に戻る。その各軸位置の出力の結果、マニピュレータ3が、出力された各軸位置となるように動作することになる。
【0053】
(ステップS106)教示指示受付部15は、教示指示を受け付けたかどうか判断する。そして、教示指示を受け付けた場合には、ステップS107に進み、そうでない場合には、ステップS101に戻る。
【0054】
(ステップS107)教示データ作成部16は、その時点のマニピュレータ3の位置姿勢を示す教示点等と、現在の各軸位置への移動時に用いられた拘束条件を識別する拘束条件識別情報とを各軸位置算出部14から取得する。
【0055】
(ステップS108)教示データ作成部16は、取得した教示点等と、拘束条件識別情報とを含む教示データを、教示データ記憶部17に蓄積する。そして、ステップS101に戻る。
なお、
図2のフローチャートにおける処理の順序は一例であり、同様の結果を得られるのであれば、各ステップの順序を変更してもよい。また、
図2のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【0056】
次に、本実施の形態によるロボットシステムの動作について、具体例を用いて説明する。この具体例では、マニピュレータ3が7軸であり、冗長自由度が1である場合について説明する。
操作者が、可搬式の操作装置4を用いてマニピュレータ3の位置姿勢を操作してティーチングを行っているとする。そして、
図3で示されるように、回転式セレクタ21を矢印方向に回転させることによって、拘束条件識別情報「R002」で識別される拘束条件を選択したとする。すると、その拘束条件識別情報が拘束条件受付部13で受け付けられ、各軸位置算出部14に渡される(ステップS101)。各軸位置算出部14は、拘束条件受付部13から受け取った拘束条件識別情報「R002」を、現在の拘束条件識別情報を格納する領域に蓄積する(ステップS102)。
【0057】
その後、操作者が操作装置4を用いて、マニピュレータ3の手先の位置姿勢を変更したとする。すると、その操作が操作受付部11で受け付けられ、各軸位置算出部14に渡される(ステップS103)。各軸位置算出部14は、操作受付部11からマニピュレータ3の手先の位置姿勢の変位ΔXを受け取ると、現在の拘束条件識別情報「R002」を読み出し、それに応じた拘束条件を、拘束条件記憶部12から読み出す。また、各軸位置算出部14は、現在のマニピュレータ3の位置姿勢に応じたヤコビアンA
1を取得し、そのヤコビアンA
1の擬似逆行列A
1+を算出する。そして、各軸位置算出部14は、上述のようにして、読み出した拘束条件に応じたベクトルkを決定し、その決定したベクトルkを用いて、操作ΔXに応じた各軸の変位ΔΘを算出する。その後、各軸位置算出部14は、その時点のマニピュレータ3の各軸の位置Θに、その算出した変位ΔΘを加算することによって、操作に応じた各軸位置を算出し(ステップS104)、サーボコントローラ2に出力する(ステップS105)。その結果、サーボコントローラ2は、マニピュレータ3の位置姿勢が操作後のものとなるように、各軸の位置を制御する。
【0058】
そのような操作が繰り返された後に、操作者が操作装置4の教示ボタンを押下したとする。すると、その教示ボタンの押下に応じて、教示指示がロボット制御装置1に入力される。その教示指示は、教示指示受付部15で受け付けられ、教示データ作成部16に渡される(ステップS106)。教示データ作成部16は、教示指示受付部15から教示指示を受け取ると、その時点のマニピュレータ3の手先の位置を示す座標値(x003,y003,z003)と、手先の姿勢を示す角度(α003,β003,γ003)とを取得し、その座標値まで移動した際に用いられた拘束条件を識別する拘束条件識別情報「R002」を取得する(ステップS107)。その後、教示データ作成部16は、手先の位置、姿勢を示す情報と、拘束条件識別情報とを含む教示データを、教示データ記憶部17に蓄積する(ステップS108)。その結果、教示データ記憶部17で記憶されている教示データは、
図4で示されるようになる。なお、
図4において、ステップと、教示データとが対応付けられている。ステップは、各教示データを識別する情報であり、新たな教示データが蓄積されるごとに、1だけインクリメントされた値が設定されるものとする。このようにして、教示データの作成が順次、行われることになる。なお、教示データに含まれる拘束条件識別情報は、それを含む教示データに含まれている位置や姿勢に移動する際に用いられる拘束条件を識別するものである。また、教示データには、それに含まれている位置や姿勢まで移動する際に、直線補間を行うのか、曲線補間を行うのかなどを示す情報も含まれていてもよい。なお、教示点間において拘束条件が切り替えられた場合には、厳密には、教示時の動作と再生時の動作が一致しなくなる。したがって、教示時に、教示点以外における拘束条件の切り替えを行えないようにしてもよいが、そうでなくてもよい。
【0059】
次に、教示データに応じた動作を行う際の処理について簡単に説明する。教示データに応じた動作を行う際(再生時)には、各軸位置算出部14は、教示データをステップごとに読み出し、その教示データに含まれる位置姿勢に応じた各軸位置を算出し、サーボコントローラ2に渡す。なお、その各軸位置の算出時に、各軸位置算出部14は、教示データに含まれる拘束条件識別情報で識別される拘束条件を用いた算出を行うものとする。そのようにして各軸位置を算出することによって、マニピュレータ3が教示時と同じ動作をすることになり、想定外の干渉等が発生することを回避することができる。なお、各軸位置算出部14は、再生時に教示点間の補間を行ってもよい。
【0060】
以上のように、本実施の形態によるロボットシステムによれば、教示時にも指定した拘束条件に応じた動作が行われるようにすることができる。すなわち、操作者は、教示時にマニピュレータ3の動作が適切なものとなる拘束条件を選択することができる。そして、再生時に、その教示時で用いられた拘束条件を用いて各軸位置を算出することによって、教示時と再生時のロボットの動作を一致させることができ、再生時に想定外の動作となることを回避することができる。そのため、例えば、再生時に治具等との想定外の干渉が発生することを回避できる。また、作成する教示データに拘束条件識別情報をも含めておくことにより、再生時にどの拘束条件を選択するのかを容易に知ることができるようになる。また、教示時に拘束条件を容易に変更できるため、操作者の想定している動作となる拘束条件を、マニピュレータ3の動作を確認しながら選択することもできるようになる。例えば、操作者の想定している手先の軌道となるように、適宜、拘束条件を変更しながら教示の操作を行うことが可能となる。
【0061】
なお、本実施の形態では、3次元の手先位置と3方向の手先姿勢とを教示可能な垂直多関節型のマニピュレータ3が冗長軸を有する場合、すなわち、7軸以上である場合について説明したが、マニピュレータ3は、作業自由度に対して1つ以上の冗長自由度を有しているのであれば、それ以外のものであってもよい。したがって、冗長軸を有するマニピュレータ3の軸数は問わない。冗長軸を有するマニピュレータ3の軸数は、例えば、6軸以下であってもよく、または、8軸以上であってもよい。また、その冗長自由度が1である場合について主に説明したが、冗長自由度は2以上であってもよい。
【0062】
また、本実施の形態では、教示データに拘束条件識別情報も含まれる場合について説明したが、そうでなくてもよい。教示時の各操作で用いられた拘束条件を識別する拘束条件識別情報は、教示データと別途、管理されてもよい。なお、再生時には、教示データと、その教示データに対応する拘束条件識別情報とが一緒に用いられることが好適である。
【0063】
また、上記実施の形態において、各処理または各機能は、単一の装置または単一のシステムによって集中処理されることによって実現されてもよく、または、複数の装置または複数のシステムによって分散処理されることによって実現されてもよい。
【0064】
また、上記実施の形態において、各構成要素間で行われる情報の受け渡しは、例えば、その情報の受け渡しを行う2個の構成要素が物理的に異なるものである場合には、一方の構成要素による情報の出力と、他方の構成要素による情報の受け付けとによって行われてもよく、または、その情報の受け渡しを行う2個の構成要素が物理的に同じものである場合には、一方の構成要素に対応する処理のフェーズから、他方の構成要素に対応する処理のフェーズに移ることによって行われてもよい。
【0065】
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりした情報や、各構成要素が処理で用いる閾値や数式、設定値等の情報等は、上記説明で明記していなくても、図示しない記録媒体において、一時的に、または長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、または、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、または、図示しない読み出し部が行ってもよい。
【0066】
また、上記実施の形態において、各構成要素等で用いられる情報、例えば、各構成要素が処理で用いる閾値や各種の設定値等の情報がユーザによって変更されてもよい場合には、上記説明で明記していなくても、ユーザが適宜、それらの情報を変更できるようにしてもよく、または、そうでなくてもよい。それらの情報をユーザが変更可能な場合には、その変更は、例えば、ユーザからの変更指示を受け付ける図示しない受付部と、その変更指示に応じて情報を変更する図示しない変更部とによって実現されてもよい。その図示しない受付部による変更指示の受け付けは、例えば、入力デバイスからの受け付けでもよく、通信回線を介して送信された情報の受信でもよく、所定の記録媒体から読み出された情報の受け付けでもよい。
【0067】
また、上記実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、または、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。その実行時に、プログラム実行部は、記憶部や記録媒体にアクセスしながらプログラムを実行してもよい。また、そのプログラムは、サーバなどからダウンロードされることによって実行されてもよく、所定の記録媒体(例えば、光ディスクや磁気ディスク、半導体メモリなど)に記録されたプログラムが読み出されることによって実行されてもよい。また、このプログラムは、プログラムプロダクトを構成するプログラムとして用いられてもよい。また、そのプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、または分散処理を行ってもよい。
【0068】
また、本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。