以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。図1は、本発明の実施形態に係るロボット装置の概略構成を示す説明図である。ロボット装置100は、複数(本実施形態では2つ)のロボットアーム101,102と、各ロボットアーム101,102の動作を制御する制御装置200とを備えている。また、ロボット装置100は、制御装置200に教示点のデータ等を送信する操作装置300と、制御装置200の演算結果等を表示する表示装置400とを備えている。
ロボットアーム101,102は、多関節のロボットアームであり、関節とリンク機構で構成される。関節には回転関節や直動関節の他、球体関節などさまざまな種類の関節が適用可能である。関節の動作はモータ等で能動的に動作する場合と、動力源を持たずに受動的に動作する場合とがある。各関節間はリンク機構により結びつけられ、関節とリンク機構が交互に直列されたシリアルリンク型と関節とリンクの組合せが並列となったパラレルリンク型などがある。
本実施形態では、ロボットアーム101,102は、回転関節を有するシリアルリンク型のロボットアームであり、関節はモータ及び駆動回路等を有する駆動装置により駆動されるよう構成されている。また、ロボットアーム101は、複数(本実施形態では2つ)の関節(自由度)Ja1,Ja2を備えた2軸のロボットアームである。ロボットアーム102は、複数(本実施形態では2つ)の関節(自由度)Jb1,Jb2を備えた2軸のロボットアームである。
なお、ロボットアーム101及びロボットアーム102は、一般的にはロボットアーム自体が動作するような動作体として広く観念されるものであればよく、特に限定して解釈されるものではない。例えば、ロボットアーム101,102は、2軸のロボットアームとしたが、6軸多関節ロボットアームであってもよい。
操作装置300は、作業者が操作するものであり、ロボットアーム101,102の動作を指定したり、制御装置200に各ロボットアーム101,102に対する教示点を教示したりするのに用いる。
制御装置200は、各ロボットアーム101,102の軌道のデータに基づき、各ロボットアーム101,102の動作を制御するものである。更に、本実施形態では、制御装置200は、軌道生成装置でもあり、軌道生成方法により、ロボットアームA,B同士が衝突(干渉)しないように各ロボットアーム101,102の軌道を生成する。即ち、制御装置200は、ロボットアーム101に対応する仮想的なロボットアームA、ロボットアーム102に対応する仮想的なロボットアームBをそれぞれ定義し、各ロボットアームA,Bの軌道を演算により生成するシミュレータとしての機能を有する。各ロボットアームA,Bは、コンピュータで定義された仮想空間内に配置され、各ロボットアーム101,102の形状データ(CADデータ)等に基づいて定義された仮想的なロボットアームである。
ここで、ロボットアームAの自由度を表すパラメータを関節角度として、ロボットアームAの各関節(軸)Ja1,Ja2の関節角度をそれぞれθa1,θa2とする。ロボットアームAのコンフィグレーション(各軸の関節角度)は、(θa1,θa2)で表すことができる。同様に、ロボットアームBの自由度を表すパラメータを関節角度として、ロボットアームBの各関節(軸)Jb1,Jb2の関節角度をそれぞれθb1,θb2とする。ロボットアームBのコンフィグレーションは、(θb1,θb2)で表すことができる。
本実施形態では、制御装置200は、仮想の各ロボットアームA,Bについて、オフラインにより、教示点間を移動する軌道を生成し、生成した軌道に基づいて、実際の各ロボットアーム101,102の動作を制御する。動作開始点となる教示点が開始点、動作終了点となる教示点が目標点である。教示点は、関節空間(コンフィグレーション空間、いわゆるCスペース)又はタスク空間で表される。
関節空間では、教示点は、ロボットアームの関節の角度で表されるパラメータで表され、関節の数だけパラメータを有している。関節空間とは、ロボットアームA,Bがとり得る全てのコンフィグレーションのパラメータの組が構成する空間である。また、タスク空間では、教示点は、ロボットアームの基端を原点とする座標系を基準とする、ロボットアームの先端の3次元的な位置及び姿勢の6つのパラメータで表される。
本実施形態では、教示点は、関節空間で表されているものとする。ロボットアームAに対する開始点は、2軸の関節角度(θas1,θas2)で表され、ロボットアームAに対する目標点は、2軸の関節角度(θag1,θag2)で表される。一方、ロボットアームBに対する開始点は、2軸の関節角度(θbs1,θbs2)で表され、ロボットアームBに対する目標点は、2軸の関節角度(θbg1,θbg2)で表される。
このように、ロボットアームA,Bの自由度を表すパラメータ(例えば、関節角度や伸縮長さ)を座標軸の値とした場合、ロボットアームA,Bのコンフィグレーションは関節空間上の点として表現することができる。
図2は、本発明の実施形態に係るロボット装置100の構成を示すブロック図である。図2に示すように、制御装置200は、コンピュータで構成され、演算部(制御部)としてのCPU(Central Processing Unit)201を備えている。また、制御装置200は、記憶部として、ROM(Read Only Memory)202、RAM(Random Access Memory)203、HDD(Hard Disk Drive)204を備えている。また、制御装置200は、記録ディスクドライブ205及び各種のインタフェース211〜215を備えている。
CPU201には、ROM202、ROM203、HDD204、記録ディスクドライブ205及び各種のインタフェース211〜215が、バス216を介して接続されている。ROM202には、BIOS等の基本プログラムが格納されている。RAM203は、CPU201の演算処理結果等、各種データを一時的に記憶する記憶装置である。
HDD204は、CPU201の演算処理結果や外部から取得した各種データ等を記憶する記憶装置であると共に、CPU201に、後述する演算処理の各工程を実行させるためのプログラムを記録(格納)するものである。CPU201は、HDD204に記録(格納)されたプログラム230に基づいて軌道生成方法の各工程を実行する。
記録ディスクドライブ205は、記録ディスク240に記録された各種データやプログラム等を読み出すことができる。ロボットアーム101,ロボットアーム102,操作装置300,表示装置400,外部記憶装置500はインタフェース211〜215にそれぞれ接続されている。
操作装置300は、作業者の入力操作により、ロボットアーム101,102を教示する教示点を指定する。教示点のデータは、インタフェース212及びバス216を通じてCPU201又はRAM203、HDD204に出力される。CPU201は、操作装置300から、又はRAM203若しくはHDD204から教示点のデータの入力を受ける。
表示装置400は、CPU201の制御の下、画像を表示するディスプレイである。表示装置400は、CPU201の制御の下、例えばロボットアームA,Bやその作業空間(仮想空間)を3D(3次元)グラフィックスで表示する。これにより、作業者は、生成された動作経路を目視により確認することができる。外部記憶装置500は、書き換え可能な不揮発性メモリや外付けHDD等である。
CPU201は、各ロボットアーム101,102に対する教示点のデータに基づき、各ロボットアーム101,102の軌道を生成する。そして、CPU201は、各ロボットアーム101,102の各関節のモータに対する駆動指令を所定時間間隔(例えば1[ms])でバス216及びインタフェース211,212を介して不図示のモータ駆動回路に出力する。各関節のモータ駆動回路がモータを駆動することにより、各ロボットアーム101,102が動作する。
プログラム230は、衝突チェックプログラム231と、キネマティクス計算プログラム232と、経路生成プログラム233と、経路短縮プログラム234と、軌道生成プログラム235と、衝突回避終了点探索プログラム236と、を有している。
衝突チェックプログラム231は、物体同士が衝突するかどうかをCPU201に判断させるプログラムである。例えば、ロボットアームA,Bと障害物ObのCADデータをポリゴン(例えば三角形等の多角形)の集合とする。衝突チェックプログラム231に基づき動作するCPU201は、対象となるロボットアームA,Bのポリゴンの集合と障害物Obのポリゴンの集合とが幾何学的に接触するか否かを判断する。
なお、衝突チェックは、ポリゴンではなく、ロボットアームA,Bと障害物Obを点や線ないし面の集合として表して、このような点と面との衝突チェック、又は線と面との衝突チェックを行ってもよい。さらに、関節空間上における衝突チェックに限定されるものではなく、実空間内で点や線ないしポリゴンを利用した衝突チェックを採用することもできる。
キネマティクス計算プログラム232は、ロボットアームA,Bのコンフィグレーションから、ロボットアームA,Bのタスク空間での位置及び姿勢を求める順キネマティクスをCPU201に計算させるプログラムである。更に、キネマティクス計算プログラム232は、ロボットアームA,Bの手先位置(先端)から、ロボットアームA,Bのコンフィグレーションを計算する逆キネマティクスをCPU201に計算させるプログラムである。
順キネマティクス計算は、例えば、図1におけるロボットアームAが、あるコンフィグレーション(θa1,θa2)で、ロボットアームB及び障害物Obに衝突するか否かを判断する際に行う。つまり、衝突するか否かの判断は、タスク空間上のロボットアームAの位置及び姿勢で行う。したがって、CPU201は、衝突チェックプログラム231を実行することにより、ロボットアームAが、あるコンフィグレーション(θa1,θa2)でロボットアームB及び障害物Obに衝突するか否かを判断できる。
経路生成プログラム233は、関節空間上において、障害物Obを避けて開始点と目標点とを接続する各ロボットアームA,Bの経路をCPU201に生成させるプログラムである。経路とは、ロボットアームA,Bのコンフィグレーションが時間の経過とともに変化するときの、関節空間におけるロボットアームのコンフィグレーションの軌跡である。なお、この経路には、単にどのルートで通過するか(どの関節角度となるか)が規定されており、通過時刻は規定されていない。
経路生成プログラム233は、あるコンフィグレーションでロボットアームA,Bが衝突しているか否かをチェックするため、衝突チェックプログラム231と、キネマティクス計算プログラム232とを併せて用いる。経路生成方法には、PRM(Probabilistic RoadMap Method)、RRT(Rapidly-exploring Random Tree)といった方法が、計算時間と探索能力の観点から好ましい。なお、経路生成方法は、PRMやRMTに限定するものではなく、ポテンシャル法、可視グラフ法、セル分割法、ボロノイ図法などの他の方法も適用できる。
いずれの経路生成方法であっても、CPU201は、ロボットアームA,B同士の衝突及びロボットアームA,Bと障害物Obとの衝突の回避を考慮に入れた経路を生成するために、まず、ロボットアームA,Bを1つのロボットアームCとみなす。そして、CPU201は、4次元関節空間で、開始点(θas1,θas2,θbs1,θbs2)から目標点(θag1,θag2,θbg1,θbg2)へと障害物を回避する経路探索を行い、経路を算出する。
経路生成プログラム233により生成した経路は、回り道をしていたり尖っていたりするため無駄が多く、経路修正を行う必要がある。経路短縮プログラム234は、経路生成プログラム233で生成した経路の短縮化をCPU201に行わせるプログラムである。CPU201がプログラム234を実行する際、あるコンフィグレーション(θa1,θa2,θb1,θb2)でロボットアームが衝突しているかをチェックするため、衝突チェックプログラム231と、キネマティクス計算プログラム232を併せて用いる。
経路短縮化手法としては、例えば、経路生成プログラム233で生成した、関節空間上の経路に対し補間点を新たに追加する。そして、任意の2点をつなぐ直線に障害物Obとの衝突がない場合は、2点の間にある経路の代わりに新たにその直線を経路として置き換えるという作業を、繰り返し行い短縮化をする手法がある。
なお、経路短縮方法はこれに限定されるものではなく、経路の先端から衝突せずに接続可能な点を探索していき経路を短縮化する、貪欲アルゴリズムを用いてもよい。また、関節空間上の経路をゴムモデルと仮定し、経路が縮む力を発生させると同時に、障害物Obからの効力も定義することにより、衝突回避をしつつ経路を短縮化する手法を用いてもよい。また、B−Spline曲線により経路を平滑化する手法を用いてもよい。
軌道生成プログラム235は、経路生成プログラム233により算出された経路に対し、ロボットアームA,Bのコンフィグレーションの最適な変化速度を計算し、軌道をCPU201に生成させるプログラムである。ここで、軌道とは、ロボットアームA,Bのコンフィグレーション(θa1,θa2),(θb1,θb2)の時間変化として変化速度を時間の関数として扱い表したものである。つまり、軌道は、経路を辿る各ロボットアームA,Bの各関節の関節角度の時間変化を表したものである。
この軌道生成プログラム235は、双腕(2つ)のロボットアームA,Bを同期させた軌道を生成することができるプログラムである。ここでいう双腕ロボットアームA,Bの同期とは、ロボットアームAのコンフィグレーションがPaj(θaj1,θaj2)の時、ロボットアームBをそれに対応するコンフィグレーションPbj(θbj1,θbj2)を指定して連動させることである。
また、軌道生成プログラム235は、双腕ロボットアームA,Bを同期させている途中で、ロボットアームA,B同士の同期をやめ、ロボットアームA,B単独で最適な動作をさせる軌道を生成することもできる。
衝突回避終了点探索プログラム236は、ロボットアームA,Bを併せて1つのロボットアームCとみなし算出した経路に対し、衝突回避終了点(以下、単に「終了点」という)をCPU201に探索させるプログラムである。
図3は、制御装置200のCPU201が実行する軌道生成方法の各工程を示すフローチャートである。CPU201は、プログラム230(プログラム231〜236)を実行することで、以下に説明する各工程を実行する。
まず、CPU201は、ロボットアームA,Bが作業を行う作業空間(仮想空間)でのロボットアームA,B及び障害物Obの位置及び形状情報を読み込む(S101)。ロボットアームA,B及び障害物Obは、設計情報などであり、例えば3次元CADのデータ、若しくはカメラの映像や各種センサによる計測等で収集したデータを用いて、又は手動で設定する。
図4は、関節空間における各ロボットアームA,Bの経路を示す説明図であり、図4(a)はロボットアームAの経路、図4(b)はロボットアームBの経路を示している。
CPU201は、ロボットアームAの開始点Pas(θas1,θas2)、及びロボットアームBの開始点Pbs(θbs1,θbs2)を決定する(S102)。例えば、CPU201は、ロボットアームA,Bの開始点を、手先の位置及び姿勢を入力として、キネマティクス計算プログラム232により逆キネマティクスを解くことによって決定する。つまり、取得した開始点Pas,Pbsのパラメータがタスク空間で定義されている場合には、関節空間に変換する必要があり、CPU201は、開始点Pas,Pbsのパラメータをタスク空間から関節空間に変換する演算を行う。なお、CPU201が取得した開始点Pas,Pbsのパラメータが関節空間である場合には、変換作業は省略可能である。
また、CPU201は、ロボットアームAの目標点Pag(θag1,θag2)、及びロボットアームBの目標点Pbg(θbg1,θbg2)を決定する(S103)。例えば、CPU201は、ロボットアームA,Bの目標点を、手先の位置及び姿勢を入力として、キネマティクス計算プログラム232により逆キネマティクスを解くことによって決定する。つまり、取得した目標点Pag,Pbgのパラメータがタスク空間で定義されている場合には、関節空間に変換する必要があり、CPU201は、目標点Pag,Pbgのパラメータをタスク空間から関節空間に変換する演算を行う。なお、CPU201が取得した目標点Pag,Pbgのパラメータが関節空間である場合には、変換作業は省略可能である。
次に、CPU201は、開始点Pas,Pbs及び目標点Pag,Pbgで、ロボットアームA及びロボットアームBがそれぞれ障害物Obに衝突していないか否か、ロボットアームA,B同士が衝突していないか否かを判断する(S104)。
CPU201は、開始点Pas,Pbs又は目標点Pag,PbgでいずれかのロボットアームA,Bが障害物Obに衝突する場合、又はロボットアーム同士が衝突する場合(S104:No)は、エラーコードを表示装置400に出力し、処理を終了する。表示装置400は、エラーコードに従った表示画像を表示する。これにより、作業者は、入力操作した開始点Pas,Pbs又は目標点Pag,Pbgの変更が必要なことを知ることができ、教示点の変更操作をすることができる。
次に、CPU201は、衝突していないと判断した場合(S104:Yes)、ロボットアームA及びロボットアームBを、計4個の関節を持つ1つのロボットアームCとみなす。そして、CPU201は、ロボットアームCについて、新たに開始点Pcs(θas1,θas2,θbs1,θbs2)及び目標点Pcg(θag1,θag2,θbg1,θbg2)を定義する。CPU201は、経路生成プログラム233を用い、4次元の関節空間で、開始点Pcsと目標点Pcgを結ぶように、作業空間(仮想空間)における障害物Ob及びロボットアームA,B同士の衝突回避を考慮した経路を生成する(S105:経路生成工程)。
次に、CPU201は、経路生成プログラム233により、ロボットアームCが目標点Pcgに到達する経路を生成したか否かを判断する(S106)。CPU201は、ロボットアームCが経路生成プログラム233により目標点Pcgに到達できないと判断した場合(S106:No)は、エラーコードを表示装置400に出力し、処理を終了する。表示装置400は、エラーコードに従った表示画像を表示する。これにより、作業者は、ロボットアームC(即ちロボットアームA,B)が目標点Pcg(Pag,Pbg)に到達できないことを目視により確認することができる。よって、開始点Pas,Pbs又は目標点Pag,Pbgの変更が必要なことを知ることができ、教示点の変更操作をすることができる。
次に、CPU201は、作成した経路Hcで目標点Pcgに到達できたと判断した場合(S106:Yes)、作成した経路Hcに対し、経路短縮プログラム234を用いて短縮処理を行う(S107)。
次に、CPU201は、経路Hcを関節空間上でいくつかに分割(例えば等分割)することで複数の補間点Pc0,Pc1,Pc2,Pc3,…,PcNを追加する。その際、開始点Pcsから目標点Pcgに向かって補間点Pc0,Pc1,Pc2,Pc3,…,PcNの順に設定する(S108)。即ち、CPU201は、ロボットアームAの経路Ha上の複数の補間点Pa0,Pa1,…PaNを求めると共に、ロボットアームBの経路Hb上の複数の補間点Pb0,Pb1,…PbNを求めたのと同じである。なお、補間点Pcjは、補間点Paj及び補間点Pbj(j=0,…,N)からなる。
次に、CPU201は、ロボットアームA及びロボットアームBがそれぞれの終了点の候補となる関節空間上のコンフィグレーションを、終了点候補(中間点)Pciとし、i=N−1と設定し、初期化を行う(S109)。ただし、iは正の整数である変数とする。即ち、CPU201は、ロボットアームA,Bを1つのロボットアームCとみなして、ロボットアームCの経路Hc上に終了点候補(中間点)Pciを設定する(中間点設定工程)。これは、ロボットアームAの経路Ha上に終了点候補(中間点)Paiを、ロボットアームBの経路Hb上に終了点候補(中間点)Pbiを、それぞれ設定したのと同じである。
次に、CPU201は、経路Hc上の任意の点Pcj(θaj1,θaj2,θjb1,θjb2)(jは0からNまでの整数)を、Paj(θaj1,θaj2)で構成される経路Haと、Pbj(θbj1,θbj2)で構成される経路Hbに分割する。図4に、それぞれ経路Ha,Hbを示す。CPU201は、軌道生成プログラム235を用い、開始点Pcsから終了点候補PciまでロボットアームA,Bで経路Hcに沿って同期をし、終了点候補PciからはロボットアームA,Bで同期をせずに仮の軌道を生成する(S110:仮軌道生成工程)。同期をしない区間では、ロボットアームAは経路Haに沿って終了点候補Paiから目標点Pagまで、ロボットアームBは経路Hbに沿って終了点候補Pbiから目標点Pbgまでの仮の軌道を生成する。終了点候補Paiは(θai1,θai2)、終了点候補Paiは(θai1,θai2)からなる。ここで、「仮の軌道」と称したのは、この段階では設定する軌道が決定していないためであり、設定する軌道は、後の工程で複数の仮の軌道の中から決定される。
仮の軌道は、開始点Pcsと終了点候補Pciとの間の同期をする区間(第1区間)と、終了点候補Pciと目標点Pcgとの間の同期をしない区間(第2区間)との境界において、各ロボットアームA,Bが停止をせずに滑らかに動作するよう生成する。生成したロボットアームAの仮の軌道をTai、ロボットアームBの仮の軌道をTbiとする。
即ち、CPU201は、開始点Pcsから終了点候補Pciまでの第1区間では、ロボットアームA,Bが互いに衝突を回避しながらロボットアームA,Bで同期して動作するよう、ロボットアームA,Bの各関節の関節角度の時間変化を演算する。また、CPU201は、終了点候補Pai,Pbiから目標点Pag,Pbgまでの第2区間では、ロボットアームA,Bで独立して動作するよう、ロボットアームA,Bの各関節の関節角度θa(t)=(θaj1(t),θaj2(t))、θb(t)=(θbj1(t),θbj2(t))を演算する。tは時刻である。以下では、この量を関節角度の時間変化、又は、関節角度の推移と呼ぶこともある。CPU201は、これら演算結果に基づき、ロボットアームA,Bの仮の軌道Tai,Tbiを生成する。このように生成された仮の軌道Tai,Tbiは、開始点Pcsから目標点Pcgまで同期させて生成した軌道よりも速く目標点Pag,Pbgに到達する。
本実施形態では、CPU201は、第2区間では、各ロボットアームA,Bが目標点Pag,Pbgに最短時間で到達するように各ロボットアームA,Bの関節の角度変化を演算することで、軌道Tai,Tbiを生成している。これにより、各ロボットアームA,Bは、より速く目標点Pag,Pbgに到達する。
次に、CPU201は、ステップS110で生成した軌道Tai,Tbiを記憶装置であるHDD204に保存する(S111)。
次に、CPU201は、ステップS110で算出したロボットアームAの仮の軌道Tai及びロボットアームBの仮の軌道Tbiにおいて、ロボットアームAとロボットアームBとが衝突(干渉)するか否かを判断する(S112)。CPU201は、衝突すると判断した場合(S112:Yes)は、ステップS113の処理に移行し、衝突しないと判断した場合(S112:No)は、ステップS114の処理に移行する。
CPU201は、ステップS114では、ループ変数iが0であるか否かを判断する。CPU201は、ループ変数iが0ではないと判断した場合(S114:No)、ループ変数iを1減らし(S115)、ステップS110の処理に戻る。
即ち、CPU201は、ステップS109,S115の処理で、ロボットアームCの経路上に複数(少なくとも2つ)の終了点候補Pc(N−1),Pc(N−2),…を設定することとなる。
そして、CPU201は、ステップS115を経てステップS110の処理へ帰還させている。これにより、CPU201は、複数の終了点候補Pc(N−1),Pc(N−2),…のそれぞれに対し、ロボットアームAの仮の軌道Ta(N−1),Ta(N−2),…及びロボットアームBの仮の軌道Tb(N−1),Tb(N−2)…を生成する。
CPU201は、ステップS113では、仮の軌道Ta(i+1),Tb(i+1)を各ロボットアームA,B(101,102)の軌道に設定する(軌道設定工程)。また、CPU201は、ステップS116では、仮の軌道Ta0,Tb0を各ロボットアームA,B(101,102)の軌道に設定する(軌道設定工程)。即ちCPU201は、ロボットアームAの仮の軌道Ta(N−1),Ta(N−2),…、ロボットアームBの仮の軌道Tb(N−1),Tb(N−2),…のうち、ロボットアームA,Bが互いに衝突しない仮の軌道をロボットアームA,Bの軌道に設定する。
詳述すると、ロボットアームA,Bが互いに衝突しない仮の軌道が複数組ある場合には、これら仮の軌道のうち1組の仮の軌道を本軌道に設定し、ロボットアームA,Bが互いに衝突しない仮の軌道が1組の場合には、当該仮の軌道を本軌道に設定する。これにより、各ロボットアームA,Bの開始点Pas,Pbsから目標点Pag,Pbgまでの軌道の動作時間を短縮化することができる。
特に、本実施形態では、ロボットアームA,Bが互いに衝突しない仮の軌道が複数組ある場合には、複数組の仮の軌道のうち、開始点Pas,Pbsに最も近い終了点候補に対応する仮の軌道を、ロボットアームA,Bの軌道に設定している。これにより、各ロボットアームA,Bの開始点Pas,Pbsから目標点Pag,Pbgまでの軌道の動作時間を更に短縮化することができる。
ここで、CPU201は、ステップS115にてループ変数iを1減じることにより、ロボットアームCの経路Hc上で開始点Pcsに近づくように順次、終了点候補Pciを設定している。具体的には、CPU201は、開始点Pcsに近づくように、複数の補間点Pc0,Pc1,Pc2,Pc3,…の中から終了点候補Pciを設定している。
そして、CPU201は、ステップS112では、ステップS110にて順次設定される終了点候補Pciに対応して順次生成される仮の軌道Tai,TbiでロボットアームA,Bが互いに衝突するか否かを判断している。ステップS111にて記録され、衝突しないと判断された仮の軌道Tai,Tbiは、後の本軌道となり得る候補である。
CPU201は、ステップS112で衝突すると判断した場合は、軌道候補のうち開始点Pcsに最も近い終了点候補Pc(i+1)に対応する軌道候補Ta(i+1),Tb(i+1)を、各ロボットアームA,Bの本軌道に設定する。このときの終了点候補Pa(i+1),Pb(i+1)を終了点Pae,Pbeとする。
このように、経路Ha,Hb上を開始点Pas,Pbsに向かって終了点Pae,Pbeを探索することで、簡単に終了点Pae,Pbeを探索することができ、CPU201における演算負荷が減少する。
なお、本実施形態では、軌道計算において、同期させる第1区間における計算を簡略化するため、ロボットアームA,Bを1つのロボットアームCとみなしていたが、これに限定するものではない。ロボットアームAとロボットアームBとの同期をとることができれば、1つのロボットアームCとみなさなくてもよい。
以下、上記ステップS101〜S116により生成された各ロボットアームA,Bの軌道について説明する。
図4(a)に示すように、ロボットアームAは、開始点Pasから終了点Paeまで、ロボットアームBと同期し、終了点Paeから同期をやめ、目標点PagまではロボットアームA単独で、移動時間を短縮した最適な動作をする。図4(b)に示すように、ロボットアームBは、開始点Pbsから終了点Pbeまで、ロボットアームAと同期し、終了点Pbeから同期をやめ、目標点PbgまではロボットアームB単独で、移動時間を短縮した最適な動作をする。
図5は、本実施形態の軌道生成方法で生成した軌道Lと、比較例として開始点から目標点まで各ロボットアームを同期させた方法で生成した軌道Lxとを、2次元関節空間上に射影して表現した概念図である。図5では、ロボットアームAのコンフィグレーションθa(θa1,θa2)をひとつのベクトルとして横軸に、ロボットアームBのコンフィグレーションθb(θb1,θb2)をひとつのベクトルとして縦軸にとっている。
図5に示すように、ロボットアームA,Bを開始点から目標点まで同期させた比較例の軌道Lxの場合は、障害物Obをよけて、開始点から目標点まで到達するのに、関節空間での距離は最短にはなる。なお、ロボットアームの到達範囲内に配置された障害物以外にも、ロボットアーム同士も特定のコンフィグレーションを取る場合、障害物Obになり得る。つまり図5中の障害物Obは、配置された障害物およびロボットアームの衝突(干渉)を共に含んだ“障害物”として描かれている。しかし、ロボットアームBが、ロボットアームAの動きに合わせて遅くなるため、ロボットアームB単体で考えた場合、動作時間が最短にはならない。
一方、本実施形態の軌道生成方法で生成した軌道Lは、関節空間での距離は軌道Lxより長くなるが、ロボットアームBはロボットアームAより先に目標点に到達するため、ロボットアームBの動作時間は速くなる。これは、比較例の軌道生成方法が、時間軸を考慮に入れていないのに対し、本実施形態の軌道生成方法では時間軸を考慮に入れて軌道を生成しているためである。
このときの各ロボットアームA,Bの動作について説明する。図6は、本発明の実施形態に係る軌道生成方法で生成した軌道を辿って動作するロボットアームの説明図である。図7は、比較例の軌道生成方法で生成した軌道を辿って動作するロボットアームの説明図である。図6(a)〜図6(g)は、各動作タイミングでの各ロボットアームA,Bの姿勢を示し、図7(a)〜図7(g)は、各図6(a)〜図6(g)の動作タイミングと同じ動作タイミングでの各ロボットアームA,Bの姿勢を示している。
図7(a)〜図7(g)に示すように、比較例の軌道では、開始点から目標点まで終始ロボットアームA,Bを同期させているため、各ロボットアームA,Bは各目標点Pag,Pbgに同時に到着する。一方、図6(a)〜図6(g)に示すように、本実施形態の軌道では、終了点Pae,Pbe以降は、ロボットアームAとロボットアームBとがそれぞれ単独で目標点Pag,Pbgにたどり着くように最適化されている。そのため、図6(e)では、移動距離の短いロボットアームAがロボットアームBよりも先に目標点Pagに到着する。
ここで、終了点Pce(Pae,Pbe)について説明する。図6では、ロボットアームAとロボットアームBとを併せて1つのロボットアームCとみなし、経路生成プログラム233により経路を生成した場合のロボットアームA,Bの動作の移り変わりを示す。また、ロボットアームCの関節空間(4次元)における経路をHcとする。また、ロボットアームCの関節空間(4次元)における経路Hcの任意の中間点(途中点)を終了点候補Pciとする。
まず、図6(a)における開始点Pcsから、終了点候補PciまでロボットアームAとロボットアームBを同期させて軌道を生成する。次に、終了点候補Pciからは、ロボットアームAは、ロボットアームAの関節空間(2次元)の目標点PagまでロボットアームBと同期をせずに軌道を生成する。同様に、ロボットアームBは終了点候補Pciからは、ロボットアームBの関節空間(2次元)の目標点PbgまでロボットアームAと同期をせずに軌道を生成する。このとき、ロボットアームAとロボットアームBとが衝突しないで動作ができる、最も開始点Pas,Pbsに近い終了点候補Pciを終了点Pceとする。このときのロボットアームAのコンフィグレーションを終了点Pae、ロボットアームBのコンフィグレーションを終了点Pbeとする。
図6(c)に終了点Pce(Pae,Pbe)におけるロボットアームA及びロボットアームBの姿勢を示す。例えば、仮に図6(b)の姿勢から、同期をせずに、単腕ロボットアームA,Bでそれぞれ軌道を生成すると、ロボットアームAとロボットアームBとの衝突回避の姿勢の組み合わせがずれるため、衝突が発生すると考えられる。
これに対し本実施形態では、終了点Pceである図6(c)では、ロボットアームAとロボットアームBが衝突回避を終えていると考えられ、その後、同期をせずにロボットアームA,Bで単独で軌道を生成し、最短で目標点に到達することができる。
制御装置200は、このようにして生成した仮の軌道のうち、複数の仮の軌道のうち、複数のロボットアームA,Bが互いに衝突しない仮の軌道を、実際の各ロボットアーム101,102の軌道に設定する。そして、制御装置200は、設定した軌道に従って、実際のロボットアーム101,102を動作させる。従って、終了点Pae,Pbe以降は各ロボットアーム101,102が非同期で動作するため、各ロボットアーム101,102の開始点Pas,Pbsから目標点Pag,Pbgまでの軌道の動作時間を短縮化することができる。
また、本実施形態では、双腕ロボットアームA,Bにおいて障害物Obの回避とロボットアームA,B同士の衝突回避を考慮に入れた軌道を生成するため、障害物がある場合でも双腕ロボットアーム101,102全体の動作時間を短縮化できる。
また、本実施形態によれば、ロボットアーム101,102が互いのロボットアームを避ける際にのみ動作同期をし、ロボットアーム101,102同士の衝突回避の必要がない第2区間では、単腕ロボットアームとして動作速度が最大化する。このため、衝突回避の必要がない第2区間では、ロボットアーム101,102単独で動作が可能であり、動作の自由度が高くなる。
なお、本発明は、以上説明した実施形態に限定されるものではなく、本発明の技術的思想内で多くの変形が可能である。
上記実施形態では、双腕ロボットアーム、すなわち2つのロボットアームの場合について説明したが、2つに限定するものではなく、2つ以上のロボットアームについて本発明は適用可能である。
また、上記実施形態では、終了点Pae,Pbeを探索する際、経路の後方から順に探索を行う場合について説明したが、これに限定されるものではなく、2分法などの探索方法を用いてもよい。
また、上記実施形態では、終了点Pae,Pbeは、ロボットアームA,B同士が干渉しない軌道候補の中の終了点候補のうち、開始点Pas,Pbsに最も近い終了点候補とし、この場合が動作時間の短縮上最も好ましいが、これに限定するものではない。つまり、複数のロボットアームの軌道候補が複数組ある場合は、複数組の軌道候補の中から1組の軌道候補を複数のロボットアームの軌道に設定すればよい。
また、上記実施形態では、ロボットアームを制御する制御装置が、軌道生成方法の各工程にしたがって各ロボットアームの軌道を生成する場合について説明したが、これに限定するものではない。制御装置とは別に軌道生成装置(コンピュータ)に軌道生成方法の各工程にしたがって各ロボットアームの軌道を生成させてもよい。この場合、制御装置は、軌道生成装置から軌道のデータを取得して、各ロボットアームの動作を制御すればよい。
また、上記実施形態の各処理動作は具体的にはCPU201により実行されるものである。従って上述した機能を実現するプログラムを記録した記録媒体を制御装置200に供給し、制御装置200のコンピュータ(CPUやMPU)が記録媒体に格納されたプログラムを読み出し実行することによって達成されるようにしてもよい。この場合、記録媒体から読み出されたプログラム自体が上述した実施形態の機能を実現することになり、プログラム自体及びそのプログラムを記録した記録媒体は本発明を構成することになる。
また、上記実施形態では、コンピュータ読み取り可能な記録媒体がHDD204であり、HDD204にプログラム230が格納される場合について説明したが、これに限定するものではない。プログラムは、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラムを供給するための記録媒体としては、図2に示すROM202、記録ディスク240、外部記憶装置500等を用いてもよい。具体例を挙げて説明すると、記録媒体として、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、書き換え可能な不揮発性のメモリ(例えばUSBメモリ)、ROM等を用いることができる。
また、上記実施形態におけるプログラムを、ネットワークを介してダウンロードしてコンピュータにより実行するようにしてもよい。
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施形態の機能が実現されるだけに限定するものではない。そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって上記実施形態の機能が実現される場合も含まれる。
また、上記実施形態では、コンピュータがHDD等の記録媒体に記録されたプログラムを実行することにより、画像処理を行う場合について説明したが、これに限定するものではない。プログラムに基づいて動作する演算部の一部又は全部の機能をASICやFPGA等の専用LSIで構成してもよい。なお、ASICはApplication Specific Integrated Circuit、FPGAはField-Programmable Gate Arrayの頭字語である。