以下、添付図面に示す実施例を参照して本発明を実施するための形態につき説明する。なお、以下に示す実施例はあくまでも一例であり、例えば細部の構成については本発明の趣旨を逸脱しない範囲において当業者が適宜変更することができる。また、以下の実施形態で取り上げる数値は、参考数値であって、本発明を限定するものではない。
なお、本明細書でいう「ロボット」とは、モータ等の動力源によって動作し、制御されるものであればその構成はどのようなものであってもよく、その基本構成によって本発明は限定されるものではない。以下の実施例では、回転関節を有する垂直シリアルリンク型の多関節ロボットアームを例に本発明に係るロボットの軌道生成方法および軌道生成装置につき説明する。しかしながら、例えば、パラレルリンク側の多関節ロボットや、平面上を移動するロボットなどを複数、作業環境に配置してその軌道生成を行う場合などにおいても、本発明は実施できる。
<実施例1>
図1、図2は本発明の実施例1に係るロボット軌道生成システムの構成を示している。図1は、ロボット軌道生成システム全体の構成を示している。図1において、例えば演算処理部1はPC(パーソナルコンピュータ)のようなハードウェアを利用して構成することができる。演算処理部1には、作業者(ロボット教示者)が動作指令を入力するための入力部としてキーボード11、マウス12(あるいはトラックパッドのようなポインティングデバイス)が接続されている。また、作業者が入力操作した動作指令や、それに基づき生成されたロボット軌道などを確認するための表示装置としてディスプレイ13が接続されている。
演算処理部1には、外部記憶装置14と、ネットワークインターフェース31などを接続することができる。図1の外部記憶装置14は、主に外付けのHDDやSSDのようなディスク装置、あるいは各種の光ディスク装置などから構成される。ネットワークインターフェース31は、実機のロボットアームに対して動作指令データなどを転送するために用いられる。
また、外部記憶装置14、ネットワークインターフェース31は、後述のロボット軌道生成プログラムを演算処理部1にインストールしたり、あるいはインストール済みの同プログラムを更新したりするためのインストール/更新手段として利用できる。その場合、例えば外部記憶装置14は、メディア交換の可能は光ディスク装置などから構成することができる。本発明を実施するための制御プログラムは、上記の光ディスクを介して演算処理部1にインストールでき、またその更新が可能である。同様に、本発明を実施するための制御プログラムは、ネットワークインターフェース31を介して、所定のネットワークプロトコルを利用して演算処理部1にインストールでき、またその更新が可能である。
図1のロボット軌道生成装置では、例えば、同じ作業環境に配置された複数(この場合2台)のロボットアーム5、6のための軌道生成を行う。ロボットアーム5、6の作業環境中には、ロボットアーム5、6との干渉や衝突を回避すべき障害物7が配置される場合がある。この障害物7は、他の部品供給装置、換気ダクト、あるいは演算処理部1の筐体など、各々のロボットアーム5、6以外に作業環境中に配置されたあらゆる物体が対象となる。そして、後述の軌道生成制御では、ロボットアーム5、6が障害物7と干渉しないように、またロボットアーム5、6同士が相互に干渉しないように、ロボット軌道を生成する。
作業者(ロボット管理者、ロボットプログラマなど)は、キーボード11、マウス12などを用いて、ディスプレイ13上に表示されるユーザーインターフェースを介してロボットアーム5、6のための動作指令を入力する(軌道定義データ入力)。ディスプレイ13上のグラフィックス表示によって構成されるユーザーインターフェースとしては例えば後述の図14のようなダイアログ表示、あるいは下記の3D仮想表示によるGUIが含まれる。本実施例の動作指令入力では、作業者が、例えば生成すべき軌道の始点、および終点(の3次元座標)を含む軌道定義データを入力する。
演算処理部1は、入力された動作指令入力に基づき、軌道定義データから成る動作指令リストを生成し、この動作指令リストに基づき、ロボットアーム5、6の軌道生成を行う。
なお、図1のロボット軌道生成装置は、軌道生成の対象となる実機のロボットアームと接続されていてもよく、また、ロボットアームとの接続の無いオフライン環境においてもロボット軌道を生成することができるよう構成される。オフライン環境のロボット軌道生成では、ディスプレイ13にプログラム対象であるロボットアーム5、6の3D仮想表示を行う。このような3D仮想表示GUIは、キーボード11、マウス12などを用いて、ディスプレイ13上に仮想表示されたアームやその関節を操作できるよう構成することができる。
このような仮想環境を用いることにより、後述のようなダイアログ表示(例えば後述の図14)の他、仮想表示されたロボットアーム5、6を操作することによっても、ロボット軌道の始点や終点(における位置、姿勢)を入力することができる。また、このような仮想環境によれば、必要に応じて、仮想空間上のロボットアームや障害物の配置の変更、といった操作も可能である。
図2は、演算処理部1の制御系の構成の一例をブロック図として示している。図示の構成はシステムバス29上に、CPU20、ROM21、RAM22、HDD23(例えば演算処理部1の筐体内に内蔵のもの)などの各部を接続して成る。
図1の外部記憶装置14はインターフェース28を介してシステムバス29に接続されている。図1では、特に外部記憶装置14を構成する部材として光ディスク装置を例示したが、このようなディスクデバイスは、図2では記録ディスクドライブ24として示してある。記録ディスクドライブ24は、各種の光ディスクなどフォーマットで構成された記録ディスク15のデータを読み取り、あるいはさらに記録ディスク15に対してデータを書き込むことができる。従って、記録ディスク15は、例えば本発明を実施するための制御プログラムの入出力に利用できる。その場合、記録ディスク15は同制御プログラムのコンピュータ読み取り可能な記録媒体を構成する。
図1のキーボード11、マウス12、ディスプレイ13は、それぞれインターフェース25、26、27を介してシステムバス29に接続されている。また、ネットワークインターフェース31は、外部のネットワーク32とシステムバス29の間の通信を制御する。この通信には、TCP/IP、あるいはその上で実行される各種の通信プロトコルを利用することができる。
後述の軌道生成プログラムは、例えば上記の演算処理部1で動作するOS上で実行することができる。このOS(オペレーティングシステム)の構成によっては、HDD23などの記憶領域を利用した仮想記憶部を利用することができる。その場合、後述の障害物メモリのような領域は、RAMのような主記憶デバイスのみならず、このような(HDD23などによる)仮想記憶部上に確保される可能性がある。
図4は、本実施例の軌道生成対象であるロボットアーム5、6と、障害物7から含む作業環境の概略構成を示している。ここでは説明を容易にするため、ロボットアームの構成として、ごく簡略化された構成を示している。例えば、図4のロボットアーム5、6は3関節のロボットアームである。なお、以下では、制御の説明の都合上、ロボットアーム5、6をそれぞれA、Bのアルファベットによって参照することがある。
ロボットアーム5は、3つのリンク55、56、57と、それらを連結する関節軸51、52、53を備え、リンク57の先端には、例えばロボットハンドのようなエンドエフェクタ54が設けられている。また、ロボットアーム6は、リンク65、66、67と、関節軸61、62、63と、エンドエフェクタ64を備える。各ロボットアーム5、6の3つの関節軸は回転駆動機構を持ち、回転の角度によってロボットアーム5、6の先端に位置するエンドエフェクタ54、64の位置が決定される。
各ロボットアーム5、6の関節軸の回転駆動機構は、不図示のサーボモータや減速機などの駆動系を備え、ロボット制御データに基づく回転角度に制御できるものとする。例えばロボットハンドのようなエンドエフェクタ54、64についても、同様のサーボモータや減速機などの駆動系を介してフィンガの開度のような制御条件を制御することができる。このような構成によって、各ロボットアーム5、6にロボット制御データを送信することにより、各アームを特定の位置姿勢に制御し、またエンドエフェクタ54、64で特定の操作を行わせることができる。なお、以上ではサーボモータのような駆動源を例示したが、関節やエンドエフェクタは必ずしも電気的に駆動制御されるものである必要はない。例えば、ロボットアーム5、6の関節やエンドエフェクタは、ロボット制御データによって制御される空気圧、油圧アクチュエータの空気圧や油圧によって駆動されるものであってよい。
図4に示すように、作業環境中においてロボットアーム5とロボットアーム6が近接して配置され、また、作業環境中には障害物7が存在する。このため、2つのロボットアームの関節軸の角度によっては、ロボットアームのリンクや関節軸、エンドエフェクタの間で干渉が発生する可能性がある。後述の軌道生成制御では、ロボットアーム5、6同士が相互に干渉しないように、ロボット軌道を生成する。その場合、もちろん、ロボットアーム5、6は、障害物7と干渉しないように、ロボット軌道が生成される。
以下、図3、図5、図6、図14、図15を参照して、本実施例のロボット軌道生成、特に複数台のロボットの通過領域が互いに交差しないようにロボット軌道を生成する手法につき説明する。
図3は、ロボット軌道生成制御の全体の流れを、図5は本実施例の複数台のロボットの通過領域が互いに交差しないようにロボット軌道を生成する制御手順を示している。図6(a)〜(c)は図4の様式に基づき軌道生成の様子を示している。また、図14は、動作指令入力のためにディスプレイ13に表示するダイアログを、図15(a)〜(c)は実施例1における障害物メモリ中のデータ内容の遷移を示している。
図3のステップS100では、作業者がキーボード11、マウス12などを用いて、ディスプレイ13上に表示されるユーザーインターフェースを介してロボットアーム5、6のための動作指令を入力する。例えば、図14に示すようなダイアログ131をディスプレイ13に表示し、作業者にこのダイアログを介して動作指令を入力させる。
図14のダイアログ131の上部には、例えばタイトル表示(この例では「動作指令の入力」)を含むタイトルバー1311を表示する。ダイアログ131は、ロボットアーム5(A)のための入力を行うセクション1315とロボットアーム6(B)のための入力を行うセクション1316に分割されている。
各セクション1315、1316の上部は、各1行を1つの動作指令に対応する1レコードに対応させた入力部となっており、例えば1321〜1324の各入力フィールドに区画されている。フィールド1321は、当該の動作指令の名称のフィールドで、このフィールドには作業者に任意の動作指令の名称を入力しても良く、また、この動作指令の名称はCPU20によって自動的に順次、生成してもよい。この例では、ロボットアーム5(A)側では動作指令Ma1、Ma2、Ma3が、ロボットアーム5(B)側では動作指令Mb1、Mb2が入力されている。
本実施例では、これら動作指令は軌道定義データとして、動作指令に対応する軌道の始点、および終点のデータを入力する。これら始点、および終点は、ロボットアーム5、6の先端、例えばエンドエフェクタ54、64の基部周辺などの位置に設定される各アームの基準部位を移動させる3次元(XYZ)座標である。
これらの軌道の始点、および終点のデータは、フィールド1322、1323にそれぞれ入力される。図14中では、ロボットアーム5(a)の動作指令Ma1、Ma2、Ma3に対応する始点、終点データとして、Sa1とGa1、Sa2とGa2、Sa3とGa3が入力されている。また、ロボットアーム6(b)の動作指令Mb1、Mb2に対応する始点、終点データとして、Sb1とGb1、Sb2とGb2が入力されている。
なお、ここでは、始点、終点データの各フィールド中には上記のSa1、Ga1…のような文字列表現を図示しているが、実際には3次元座標データのような数値データ表現を用いることができる。その場合、始点、終点データの各数値は、キーボード11などから手動入力する他、仮想表示中のロボットアーム5、6を操作して決定させるようにしてもよい。例えば、作業者がディスプレイ13の仮想表示中の空間をマウス12でポイントして所望のアームの基準部位の座標を入力する。あるいは、ディスプレイ13の仮想表示中のロボットアーム5、6をマウス12などにより操作し、所望のアームの基準部位の座標に対応する位置、姿勢を取らせ、不図示のダイアログを用いて基準部位の座標を確定してもよい。いずれの場合も、確定された基準部位の座標に対応する数値データを始点、終点データとしてフィールド1322、1323に入力、表示する。
また、ロボットアーム5、6に対応する各セクション1315、1316には、直前の動作に対応する動作指令を指定できるようフィールド1324が配置されている。フィールド1324は、当該の動作指令の直前の動作指令(例えばフィールド1321の名称により参照される)を指定するのに用いられる。このフィールド1324を設けることにより、ロボットアーム5、6に対応する各セクション1315、1316は、各動作指令の前後の関係を関係づけたリンクトリストのような構造となる。図14のように、ユーザーインターフェースにおいて、フィールド1324のような動作指令の前後関係を関係付け可能な入力手段を配置することにより、作業者は、入力済みの動作指令の前後を交換するような操作を行える。
実際に、図14のように動作指令が入力された場合、CPU20は、CPU20が管理する主記憶ないし仮想記憶上に、入力された動作指令に対応する動作指令データを動作指令リストとして格納する。従って、図14はユーザーインターフェースの画面表示と考えてもいいが、演算処理部1の主記憶ないし仮想記憶上の動作指令リストの構成に対応するメモリマップと考えてもよい。その場合、動作指令データは例えばリンクトリストのような記憶形式で主記憶ないし仮想記憶上の動作指令リストに格納され、上記のフィールド1324と同様のポインタデータによって、各動作指令の前後関係が関係づけられる。
各セクション1315、1316の下部には、その上部で入力された各アーム(A、B)の軌道定義を確定するため、マウス12などにより操作されるボタン1317、1317が配置される。
図3のステップS100では、例えば上述のようなユーザーインターフェースを用いて、作業者が各ロボットアーム5、6(A、B)に対して所望の動作指令を入力する。これに応じて、CPU20は動作指令の入力に対応する動作指令リストのデータ構造を主記憶ないし仮想記憶上に生成する。
図3のステップS101では、動作の軌道生成する順番を決定する優先度設定を行う。この優先度には、例えばロボットアーム5、6(A、B)のいずれを優先するか、というロボットアーム単位の優先度が考えられる。また、図14のように入力された動作指令Ma1、Ma2、Ma3…、Mb1、Mb2…のどの軌道定義データから順に生成する、という優先度も考えられる。このように、(単位の異なる)優先度設定をいくつか可能としておくことにより、ロボットアーム5、6(A、B)に実行させたい動作の特性に応じて好適な制御結果を得られる可能性が高くなる。このロボットアームないし動作指令を単位とする優先度に係る制御例については、図18によって後述する。
図3のステップS102では、ステップS101で決定された優先度に従った順番で動作指令リスト中の1つの軌道定義データである始点、終点データに基づき、ロボットアーム5(A)、ないし6(B)の軌道を1つ生成する。この場合、CPU20は、後述のように、障害物メモリに登録された障害物(の空間)を回避するように始点から終点までの軌道を計算する。この始点から終点までの軌道の計算には、上述のRRT、RPMといった公知の軌道生成アルゴリズムを利用することができる。
ステップS103では、ステップS102で生成した軌道で当該のロボットアーム5(A)、ないし6(B)を動作させた場合に、そのロボットアームの躯体が掃引(通過)する空間を、他のロボットアームが進入できない障害物として障害物メモリに登録する。実際には、図3のステップS102、およびS103は、後述の図5に示すようなループによって逐一処理される。これにより、動作指令リスト中の全部の軌道定義データ(始点、終点データ)に基づき軌道生成が行われる。
図4、図6の例では、各ロボットアーム5(A)、ないし6(B)の図示の平面内に係る動きしか図示していない。しかし、実際にロボットアームを3次元の作業領域で動作させた場合には、そのロボットアームの躯体が姿勢を変化させつつ掃引(通過)する空間は、特定の形状および体積を有する空間となる。このようなロボットアームの躯体が掃引(通過)する空間は、掃引容積(Sweep(Swept) Volume)などと呼ばれることがある。そこで、図6(a)〜(c)の例では、ロボットアームがある軌道で動作した場合にその躯体が掃引(通過)する空間をSVaのような参照符号によって示している。
図6(a)〜(c)は、ロボットアーム5(A)、6(B)の動作指令Ma、Mbに対応する軌道生成の様子を示している。ここで動作指令Maに対応する軌道の(始点、終点)は(Sa、Ga)、動作指令Mbに対応する軌道の(始点、終点)は(Sb、Gb)で、図6(a)のように配置されている。また、動作指令Ma、Mbに基づき、CPU20の軌道計算によって生成される軌道はTra、Trbによって示してある。
図6の例では、設定された優先度によって、ロボットアーム5(A)の軌道が先に生成されるものとする。ここでロボットアーム5(A)の軌道Traは、既に障害物メモリに登録されている障害物7を回避するため図示のような形状で生成される。この生成軌道のロボット動作によってロボットアーム5(A)の躯体が掃引する掃引領域はSVaである。このSVaの空間は、ロボットアーム5(A)の躯体の形状および姿勢、軌道Traなどに応じた形状と(体積)を有する空間である。
本実施例では、1つのロボットアームの軌道を生成すると、その掃引空間SVを(障害物7と同様の)障害物メモリに登録する。図15(a)〜(c)は、図6(a)〜(c)の軌道生成に応じて、障害物メモリ2201に障害物(SVx)が登録されていく様子を示している。
図15(a)〜(c)の障害物メモリ2201には、例えばRAM22のようなCPU20の管理する主記憶上に確保され、概ね2つのフィールド2203、2204から成る。なお、図15では障害物メモリ2201の記憶先としてRAM22に相当する「22」の参照符号を記憶領域全体に対して用いている。しかしながら、これはあくまでも便宜上のもので、障害物メモリ2201は、先の動作指令リストの場合と同様にCPU20が管理する主記憶ないし仮想記憶(例えばRAM22あるいはさらにHDD23)上に確保されるものであってよい。この点は後述の図16、図17などにおいても同様である。
障害物メモリ2201のフィールド2203には、障害物の識別データ(名称や識別番号など)を格納する。また、フィールド2204には障害物の立体空間を定義する形状データ(の実体データ、または別途確保された不図示の格納空間へのポインタデータ)を格納する。
フィールド2204の形状データの形式は任意である。たとえば作業空間を単位ヴォクセル(Voxel)の集合として考える。その場合、障害物メモリ2201に格納する障害物の形状データは、例えば単純な例では障害物の占めるヴォクセル(Voxel)の座標データへのポインタリストなどとすることが考えられる。また、参照利用の容易なデータ形式としては、作業空間に対応するヴォクセル空間に3次元ヴォクセルデータテーブル(不図示)を主記憶ないし仮想記憶上に確保してもよい。そして、このヴォクセルデータテーブル中の障害物の占めているヴォクセルに対応するメモリセルに障害物フラグ(あるいはさらに、躯体掃引によってその障害物を生成したロボットの識別データ)を配置する。ヴォクセルデータテーブルを併用することによって、作業空間中の特定の座標が障害物の領域に含まれているか、といった参照を容易に行える障害物メモリを実現することができる。
図6、図15の場合、まず、障害物7を回避するように図6(b)のようにロボットアーム5(A)の軌道Traが生成される。この処理に先立ち、障害物7の形状データは、図15(a)のように既にフィールド2203、2204に登録済みである。
図6(b)のようにロボットアーム5(A)の軌道Traが生成されると、その掃引空間(SVa)のデータが図15(b)に示すように障害物メモリ2201に追加登録される。この場合、フィールド2203の識別データ(図の例ではSVaのような名称)を参照することにより、対応する躯体掃引によってその障害物を生成したロボットの識別を識別できるものとする。
続いて、ロボットアーム6(B)に関して、(Sb、Gb)の始点、終点データから軌道(図6(c)のTrb)を生成する。この時、障害物メモリ2201の内容を参照すると、既にロボットアーム5(A)の掃引空間(SVa)に対応する障害物が障害物メモリ2201に登録されている(図15(b))。このため、CPU20は、図6(c)に示すように、ロボットアーム5(A)の掃引空間(SVa)を回避するよう、始点、終点データ(Sb、Gb)からロボットアーム6(B)の軌道Trbを生成する。
このロボットアーム6(B)の軌道Trbの生成によって、ロボットアーム6(B)の躯体が掃引する空間(SVb)は、上記同様に障害物メモリ2201に追加登録される。図15(c)は、軌道Trbに対応するロボットアーム6(B)の掃引空間(SVb)が追加登録された直後の障害物メモリ2201の状態を示している。
以上のように、図3〜図6、図14、図15によって概略を説明した軌道生成および障害物メモリ管理によって、ロボットアーム5、6に関して、相互のアーム同士が干渉せず、また、作業環境中の障害物7とも干渉しない軌道を生成することができる。
本実施例においては、障害物の回避戦略としては、時間軸や制御タイミングを利用しない。本実施例では、特定の軌道でロボットアーム躯体が掃引する空間を、そのロボットアームが占める可能性がある障害物空間として障害物メモリ2201に登録する。このため、実機環境でロボット動作の遅延などのタイミングのずれが生じている場合でも、ロボットアーム同士あるいはロボットアームと他の障害物が確実に干渉することのない軌道を生成することができる。即ち、本実施例によれば、よりフェイルセーフなロボット軌道の生成が可能である。
ここで、図3のステップS102、S103で示したロボット軌道生成、および障害物の追加登録処理のより詳細な制御例を図5に示す。
図5は、ロボットの通過領域が互いに交差しない軌道を生成する本実施例の制御手順の一例を示す。図3で説明した通り、制御手順全体の流れは、まず、動作指令の入力および動作指令リストの生成(S101)、優先度設定(S102)から始まる。その後、軌道生成(S103)、および障害物追加(S104)が行われる。図5はこの制御手順のより詳細な構成の一例を示している。
図5は次のような制御行程を含む。即ち、複数のロボットアームの軌道の始点および終点を含む動作指令リストを生成する(軌道定義データ生成行程:S200)。動作指令リストに基づき各々の軌道生成を行う順序を決定する(生成順序決定行程:S210)。動作指令リスト中の特定のロボットアームに関し、始点および終点に基づき、障害物メモリに他のロボットアームの軌道生成に関して登録された障害物空間を回避するよう、軌道生成を行う(軌道生成行程:S230)。生成軌道で当該ロボットアームを動作させた際、当該アームの躯体によって掃引される掃引空間を、他のロボットアームが回避すべき障害物空間として障害物メモリに追加する(障害物登録行程:S240、S250)。
図5において、図3の動作指令の入力および動作指令リストの生成(S101)はステップS200に、また、優先度設定(S102)はステップS210に相当する。ステップS220は、ステップS230〜S250のループの初期化処理に相当する。また、図3の軌道生成(S103)はステップS230に、障害物追加(S104)はステップS250に相当する。ステップS260は、ステップS230〜S250の各処理を動作指令リストに含まれる軌道定義データ(始点、終点)につき実行させるための制御ステップである。
図5のステップS200では、図14で説明したようなユーザーインターフェースを介して全ロボットアームに対して軌道を生成したい動作の指令を作業者(教示者)が入力する。ここで、例えばロボットアーム5について1つの動作指令Ma1が始点と終点(Sa、Ga)の軌道定義データによって与えられたものとする。また、ロボットアーム6については1つの動作指令Mb1が始点と終点(Sb、Gb)の軌道定義データ動作指令Op1として与えられたものとする。
この動作指令とは、各ロボットアームに対して指定される複数の動作の集合を指し、その動作指令データは上述のような動作指令リストとして、CPU20が管理する主記憶ないし仮想記憶上に格納される。
また、動作(M)は、ロボットアーム(5、6)のエンドエフェクタ(54、64)の基部などに相当する基準部位の始点と終点の座標の組合せを含む軌道定義データによって定義される。
多関節ロボットのように、エンドエフェクタ(54、64)の位置について、ロボットアーム(5、6)の姿勢が複数、存在する場合は、各関節の角度の組み合わせを始点や終点として指定する。
上記のように与えられた動作指令Op1は、
Op1 = { Ma1 、 Mb1 }
から成り、各動作(Ma1、Mb1)は
Ma1 = ( Sa 、 Ga ) 、 Mb1 = ( Sb 、 Gb )
から成る。
次に、図5のステップS210では、軌道生成順序の決定、即ち、動作指令リストの中から、どの順番で動作の軌道生成を行っていくかを決定する。順番の決定方法はロボット全体での動作時間に影響するため様々な方法が考えられる。
優先度の制御例については、後で詳細に説明するが、ここではロボットアーム5(A)の方がロボットアーム6(B)よりも動作の優先度が作業者によって高く設定されたものとする。実際、各ロボットアームに実行させる動作の重要度に差があるようなケースは稀ではないと考えられ、このようなロボットアーム単位の優先度設定をユーザ(作業者)が行えるようにしておくことで、より現実的な軌道生成が可能になる。
もし、ロボットアーム5(A)の方がロボットアーム6(B)よりも動作の優先度が高く設定されている場合には、ロボットアーム5の動作指令Ma1を先に軌道生成し、ロボットアーム6の動作指令Mb1を後に軌道生成するよう制御する。また、本実施例の軌道生成および障害物登録では時間軸に係る制御を行わないため、動作指令リスト中の動作(M)は、例えば入力順などに関係なく、シャッフルして特定の優先順位で軌道生成(および障害物登録)するようにしてもよい。ステップS210の処理は、生成順位を格納したテーブルメモリなどを確保し、動作データ指令リスト中の動作(M)を指すポインタデータなどを上記の優先順位で格納するような処理によって実現される。
図5のループ制御では、軌道生成(障害物登録)順位はポインタ(あるいはカウンタ)iによって制御される。ここでi=0は最優先の処理の優先順位に相当し、iは0、1、2…とインクリメントされて参照されるが、以後、順に優先順位が下っていくものとする。そこで、図5のステップS220では、順位はポインタ(あるいはカウンタ)iはi=0に初期化する。
以後、動作指令Miの軌道生成(S230:ロボット軌道生成処理)、動作指令Miに対応するロボットアームの通過(掃引)領域の生成(S240)、通過(掃引)領域の追加登録(S250:障害物登録行程)を繰り返し実行する。この制御ループは、ステップS260で全部の動作指令を処理することが確認されるまで続けられる。動作指令を全て処理していない間は、制御はポインタ(あるいはカウンタ)iをインクリメント(i=i+1)しつつ、ステップS260からS230にループする。
ステップS230では、ロボットの1動作分の軌道生成を行う。このステップS230は、例えば経路計画行程、経路短縮行程、軌道計算行程のような3ステップで実行できる。
このうち、経路計画行程では、始点から終点まで向かう間の障害物を回避する経路を求める。経路を求めるには、上記のRRT、PRMのような公知の各種の手法によりCPU20がランダム探索により自動で計算する方式を用いることができる。
次に、経路短縮行程で、経路計画行程により生成された経路の修正を行うことができる。経路計画行程でランダム探索を用いた方法を選択した場合、生成される経路が回り道をしていたり、角度変化が急になっていたりするため、経路の修正を行う必要がある。この経路短縮行程で、経路の短縮も、経路中の点同士で干渉なく結べる点を探す方法や、スプライン曲線で近似することにより経路を滑らかにする方法など多くの方法が考えられるが、ここではどのような方法を用いてもよい。
また、経路計画行程と、経路短縮行程では、3Dの仮想空間上で、ロボットアーム(5、6)同士や障害物(7)の干渉がないか確認する処理を行う。ここでは、ロボットアーム(5、6)の形状データと、障害物メモリ2201に保持された障害物データ(SV)は、例えば上述のヴォクセル(やポリゴン)の集合として取り扱うことができる。そして、ヴォクセル(ポリゴン)の集合同士が幾何学的に接触しているかを判定することによりロボットアーム(5、6)同士や障害物(7)の干渉状態がないかを判断する。
なお、障害物メモリ2201には、軌道生成に伴なうアームの通過(掃引)領域が障害物データ(SV)として格納されるが、一般には(当然ながら)、自身のアームの通過(掃引)によって生成された障害物データ(SV)は回避しなくてもよい。例えば、上記構成におけるロボットアーム5(A)の動作(Ma)の軌道(経路)生成においては、ロボットアーム5(B)の動作(Mb)によって通過(掃引)によって生成された障害物(SVb)を回避する。しかしながら、ロボットアーム5(A)の動作(Ma)の軌道(経路)生成においては、ロボットアーム5(A)の動作(Ma)によって通過(掃引)によって生成された障害物(SVa)は回避する必要はない。
ステップS240の軌道計算行程では、上記の経路計画/経路短縮行程によって生成された経路(軌道)を、最短の時間で動作できるように、ロボットアーム(5、6)の各関節の回転速度や加速度などを計算する。ただし、この軌道計算行程では、各関節の回転速度や加速度は記憶部3に保持された制約条件を超えない範囲で計算する。しかしながら、本実施例の軌道計算では、最もフェイルセーフな障害物回避条件を用いるため、ロボットアーム間の同期を考慮する必要がなく、単体のロボットで最短の時間で動作できるような軌道を計算すれば良い。
なお、この軌道計算行程によって生成された軌道データ群(ロボットアームの制御データ)は、主記憶ないし仮想記憶上、あるいはHDD23などに確保された不図示の軌道データの記憶領域に格納する。
ステップS240では、ステップで求めた軌道で動作させた場合にロボットアームの躯体(リンクや関節軸)が通過(掃引)する領域(空間)を計算する。各ロボットアーム(5、6)の形状や寸法などのジオメトリのデータをHDD23やROM21などに予め用意しておくことにより、このジオメトリに基づき、CPU20は上記の通過(掃引)領域(空間)を計算することができる。実際の演算では、公知の各種の移動物体の通過した領域を求めるSwept Volume生成手法や、通過領域を立方体や球体などの簡易な形状へ近似する手法などを用いることができる。また、形状データをポリゴンの集合として表現し、干渉の確認処理に利用するようにしてもよい。なお、ロボットアーム(5、6)の形状や寸法などのジオメトリのデータは、ディスプレイ13上の仮想表示を制御するためにも用いることができる。
図6(b)の例では、ロボットアーム5に対して、軌道Traが生成された場合、上記のCPU20による通過(掃引)領域の計算によって、始点Saから終点Gaまでその躯体が通過することによって、図中の通過(掃引)領域(SVa)が生成される。
そして、ステップS250で、ステップS230の軌道生成に基づき生成された通過(掃引)領域(SV)を障害物メモリ2201に登録する。障害物メモリ2201に登録された障害物は領域を仮想空間上の新たな障害物として追加され、続くロボットアーム(6)の軌道生成では、障害物メモリ2201中の全部の障害物データ回避するように軌道計算が行われる。
図6の例では、ロボットアーム5の動作指令Ma1の軌道生成と、通過領域の障害物追加が完了した後に、ロボットアーム6の動作指令Mb1の軌道生成(と通過領域の障害物追加)を行う。処理の流れは上述と同様であるが、ロボットアーム6の動作指令Mb1の軌道生成時には、新たな障害物として通過領域SVaが追加されている(図15(b))。このため、動作指令Mb1の軌道生成においては、図6(c)に示すように予め配置されている障害物7だけでなく、動作指令Ma1の軌道Traの通過領域SVaも回避するように実行される。
こうしてロボットアーム6に関しては、ロボットアーム5の軌道Traと交差することのない軌道Trbを得ることが出来る。以上の説明では、ロボットアーム5−>6と軌道生成を行う最も単純な例を示したが、ロボットアーム6の軌道Trbに対応する通過(掃引)領域も新たな障害物として障害物メモリ2201に追加する。これにより、後続の動作指令に基づいて(干渉状態を生じない)軌道生成を続行することができる。
なお、以上では、最も単純な2つのロボットアームの例で説明したが、3つ以上のロボットアームの軌道生成についても、上述同様の手順により軌道生成およびそれに伴なう障害物登録を行うことができる。
以上のように、本実施例によれば、作業環境中の障害物(7)はもちろんロボットアーム(5、6)同士で互いに交差しない軌道を生成できる。このため、干渉する恐れのない軌道で複数のロボットアームを動作させることができる。本実施例の障害物の生成および障害物メモリへの登録を基本とする回避制御は、時間軸や制御タイミングに依存しない。即ち、ロボットアームの掃引(通過)空間(領域)を、時間軸上でそのアームが取り得る位置姿勢の最大範囲として障害物メモリに登録する。このため、本実施例によれば、実環境でアーム制御の遅延などのタイミングのずれが生じても確実にロボットアーム(5、6)同士の干渉を回避可能な軌道を生成することができる。また、本実施例で示した基本的な軌道生成(+障害物登録)制御は、従来方式などで行なわれている時間軸方向の排他空間制御を利用しないため、比較的高速に実行でき、過大な計算資源を必要とせず容易に実行することができる。
なお、本実施例(以下の実施例も同様)では、説明を容易にするため、主記憶ないし仮想記憶上に1つの障害物メモリが存在するような構成を示した。その場合、障害物データにはロボットアーム(5、6…)の識別データを含み、あるアームの軌道生成では、そのアーム自身の掃引領域に相当する障害物以外の他のアームの掃引領域に相当する障害物を回避するものとした。しかしながら、主記憶ないし仮想記憶上に1つの障害物メモリの実装には種々の形態が考えられ、当業者は障害物メモリの実装、およびそれを用いた制御の一部に関して種々の設計変更を行うことができる。
例えば、ロボットアーム(5、6…)ごとに障害物メモリを配置して、軌道生成の際、アームの掃引領域に相当する障害物を、当該のアーム以外の障害物メモリに追加していくような制御も考えられる。このような障害物メモリ実装によっても、当該ロボットアームに関して登録された障害物空間を除く障害物空間を回避するよう、当該ロボットアームを動作させる軌道を生成する軌道生成行程を実現することができる。
<実施例2>
上記実施例1では、ロボットアーム5、6の2つの動作指令から軌道生成を行う最も単純な例で、ロボットアーム(5、6)同士の干渉のない軌道を生成する手法につき説明した。実施例1の図5に示したようなステップ構成のみによって、より多数の軌道定義データについて軌道生成および障害物登録を繰り返す場合、登録された多数の障害物によって新たな軌道を生成できなくなる可能性がある。
本実施形態の基本的な制御では、生成軌道によってアーム躯体が掃引(通過)する領域全体を障害物として登録するために、軌道生成すべき動作指令が多いほど早期に作業空間の多くの部分が障害物で埋め尽される可能性がある。
通常、生産ラインのような現実の環境で動作するロボットにはより多数の作業が割り当てられる。例えば、単純な搬送動作を行う場合にしても、搬送物を取りに行く動作と置きに行く動作の2つに分かれる。つまり、作業者が入力する指令には、各ロボットに複数の動作が含まれることが想定される。そして、実施例1に示した基本的な制御では、複数台のロボットの通過領域が互いに交差しないような軌道を生成するために、ロボットが行う全動作の通過領域が、他のロボットの全動作の通過領域と交差しないように制御される。しかし、そのような軌道生成は、を作ることは、ロボットに割り当てられた動作が多いほど、また作業空間が狭いほど、困難な問題となる。
例えば図8(c)は、ロボットアーム6の軌道Trb1(始点Sb1〜終点Gb1)が生成され、対応する掃引(通過)領域に対応する障害物(SVb1)が障害物メモリ2201に登録された状態を示している。一方、それ以降、ロボットアーム5に対して生成すべき(始点、終点)が(Sa2、Ga2)の動作指令が動作指令リスト中に存在しているとする。この動作指令の軌道定義、特に終点(Ga2)は、図8(d)に示すように既に障害物(SVb1)の空間内に存在する。このままでは、動作指令中の(始点、終点)が(Sa2、Ga2)である軌道定義に対応するロボット軌道を生成することはできない。
以下、本実施例では、より多数の動作指令に応じて軌道生成を行う際、図8(d)のような事象が生じた場合に、軌道生成および障害物登録を続行可能な制御手法を示す。また、その場合、生成した軌道によって、実環境のロボットアームを相互に干渉することなく動作させることができるような制御手法を示す。
本実施例2では、与えられた指令に対してロボット同士で互いに交差しない軌道を生成できない場合は、指令を2つに分割し、分割後の指令内ではロボット同士で互いに交差しないような軌道を生成する。
即ち、動作指令リスト中の複数の軌道定義データに基づき軌道生成を行うに際し、障害物メモリに登録された障害物空間を回避する軌道が生成不可能となる場合がある。その場合、動作指令リスト中の軌道定義データを、その時点で生成済みの軌道に対応する軌道定義データから成る第1の動作指令と、未生成の軌道に対応する軌道定義データから成る第2の動作指令と、に分割する。そして、障害物メモリに登録されている障害物空間のデータをクリアしてから第2の動作指令に含まれる軌道定義データについて軌道生成行程および障害物登録行程を繰り返し実行する。また、生成した全部の軌道データに基づき、各々のロボットアームを動作させる場合に第1の動作指令に対応するロボットアームの動作と、第2の動作指令に対応するロボットアームの動作と、を同期的に実行させるための同期指令を生成する。
以下、図7〜図10、図16(a)〜(f)を参照し、本実施例の制御につき説明する。以下では、上述の実施例1の図1、図2、図4などに示した軌道生成システムの全体構成は本実施例でも同様であるものとする。ロボットアーム5、6と障害物7の配置については、図4と同様である。
図7は、実施例1の図5と同様な詳細な形式で本実施例の軌道生成および障害物登録手順の流れを示している。図8(a)〜(d)、図9(a)〜(d)は、軌道生成の様子を図4、図6と同様な詳細な形式で示している。図10は、本実施例において軌道生成された各動作指令に対応する動作の同期的な制御の様子を示している。図16(a)〜(f)は、図15と同等の形式で本実施例の障害物メモリ2201のデータ内容の遷移を示している。以下では、実施例1で説明済みの部材や、処理ステップについては特に必要な場合を除き、重複した説明は省略するものとする。
本実施例において、軌道生成および障害物登録手順の全体の流れは実施例1の図3と同様で、制御手順全体の流れは、動作指令の入力および動作指令リストの生成(S101)、優先度設定(S102)から始まる。その後、軌道生成(S103)、および障害物追加(S104)を行う。
図7のステップS300(動作指令の入力および動作指令リストの生成)、S310(優先度設定)、S320(ポインタ/カウンタの初期化)、S330(動作指令Miの軌道生成)は、図5のS200、S210、S220、S230と同じ処理である。図7のS350(動作指令Miに対応するロボットアームの通過(掃引)領域の生成)、およびS360(通過(掃引)領域の追加登録)は、図5のステップS240、S250と同じ処理である。また、図7のS370(ループ終了判定)は、図5のステップS260と同じ処理である。
図7で図5と大きく異なるのは、S330(動作指令Miの軌道生成)と、S350(動作指令Miに対応するロボットアームの通過(掃引)領域の生成)の間に、ステップS340〜S380を追加している点である。
ステップS340では、ステップS330において動作指令Miに対応する軌道が生成できたか否かを判定する。もし、障害物メモリ2201に登録済みの障害物の掃引空間によって、動作指令に対応する軌道が生成できない場合には、ステップS380に移行する。
ステップS380では、生成済みの軌道に対応する軌道定義データから成る第1の動作指令と、未生成の軌道に対応する軌道定義データから成る第2の動作指令と、に分割する。そして、障害物メモリに登録されている障害物空間のデータをクリアしてから、ステップS300に復帰する。この場合、ステップS300、S310では、以後、動作指令リスト中の未生成の軌道に対応する軌道定義データから成る(第2の動作指令の部分を構成する)各動作指令の処理の優先順位を決定するよう制御する。
以下、図8〜図10に示すような動作指令を例に図7の処理を説明する。
図7のステップS300では、ステップS100(図3)ステップS200(図5)と同様に動作指令の入力と、動作指令リスト生成が行われる。ここでは、作業者の入力に基づき生成された動作指令リストには、ロボットアーム5については3つの動作指令Ma1、Ma2、Ma3が、ロボットアーム6については2つの動作指令Mb1、Mb2が含まれているものとする。
図8(a)は、上記動作指令に対応する軌道定義(始点、終点)を示している。同図において、動作指令Ma1、Ma2、Ma3は、それぞれ始点Sa1、Sa2、Sa3、終点Ga1、Ga2、Ga3の軌道定義に、また、動作指令Mb1、Mb2は、始点Sb1、Sb2、終点Gb1、Gb2の軌道定義に対応する。
即ち、この軌道定義のうち、動作指令Ma1は図8(a)の始点Sa1から終点Ga1(Sa2)へ、Ma2は始点Sa2から終点Ga2(Sa3)へ、Ma3は始点Sa3から終点Ga3へアームの基準部位を移動させるものである。ロボットアーム5はSa1の位置からスタートし、Ga1、Ga2の各位置を経由して、Ga3の位置に向かう。
また、ロボットアーム6の動作指令Mb1は図8の(a)の始点Sb1から終点Gb1へ、また、Mb2は始点Sb2から終点Gb2へアームの基準部位を移動させる動作指令である。この場合、ロボットアーム6はSb1の位置からスタートし、Gb1の位置を経由して、Gb2の位置に向かう。この指令Op1に対応する動作指令リストは、以下のような構成となる。
Op1 = { Ma1 、 Ma2 、 Ma3 、 Mb1 、 Mb2 }
Ma1 = ( Sa1、 Ga1 )、 Mb1 = ( Sb1 、 Gb1 )
Ma2 = ( Sa2、 Ga2 )、 Mb2 = ( Sb2 、 Gb2 )
Ma3 = ( Sa3 、 Ga3 )
図7のステップS310では、設定されている優先順位に基づき、軌道生成の順位を決定する。この軌道生成の優先順位(ロボット単位あるいは動作指令単位)の制御に関しては、上述のように種々の方式が考えられ、例えば、作業者の優先順位指定を許容することが考えられる。
しかしながら、本実施例では、CPU20の自動制御によって、軌道生成の優先順位(ロボット単位あるいは動作指令単位)を設定するものとする。ここでは、動作指令リストでより多数の前記軌道定義データが含まれるロボットアームの軌道生成が、動作指令リストでより少数の前記軌道定義データが含まれるロボットアームの軌道生成よりも先に実行されるよう、優先度を設定する。この場合、上記の動作指令リストの構成では、動作数が多く、優先度の高いロボットはロボットアーム5となる。
動作指令単位の優先順に関しては、例えば作業者の入力指定に応じて各動作指令の処理順を任意の順番に並べ換えることが考えられる。しかしながら、本実施例では、説明を容易にするため、上記の動作指令リストの順序(Ma1、Ma2…,あるいはMb1、Mb2…)とする。
ただし、本実施例では、複数のロボットアームのうち、軌道生成されていない動作指令が多数あるアームが生じないように、全てのアームを順に1つずつ軌道生成(+障害物登録)する処理順制御も適用する。これは、1つのロボットだけ集中して軌道生成し、その通過領域によって他のロボットが軌道生成できなくなる問題を回避するためである。
なお、以上のような本実施例の軌道生成(+障害物登録)の処理順序の制御の一例は、図18のフローチャートを用いて本実施例の最後で説明する。
以上のような本実施例の軌道生成(+障害物登録)の処理順序の制御によれば、各動作指令につき軌道生成を行う順番はMa1、Mb1、Ma2、Mb2、Ma3のような順序になる。
図7のステップS320(ポインタ/カウンタの初期化)に続き、ステップ330では、ステップS310で定めた順番に従って軌道生成を行う。ステップ330の軌道生成は図5のステップS230で説明した処理と同様である。
図7のステップ340では、ステップS330で軌道生成が成功したか否かを判定する。ここで軌道生成が成功した場合にはステップS350へ、軌道生成が生成できなかった場合にはステップS380へ進む。ここで、軌道が生成できない場合としては、例えば他のロボットアームの通過領域によって、終点までの道のりが塞がれてしまう場合や、他のロボットアームの通過領域内に始点や終点が含まれている場合がある。
図8の例では、まず、ロボットアーム5の動作指令Ma1が処理される。この場合、始点Sa1から終点Ga1に向かい、かつ障害物7を回避する軌道Tra1が生成出来るため、処理ステップはS350となる。
ステップS350、S360では、軌道による通過(掃引)領域(SVa1)から障害物データを生成し、障害物メモリ2201に登録する。これにより、障害物メモリ2201の状態は、図16(a)の障害物7のみが存在する状態から図16(b)の登録状態となる。即ち動作指令Ma1の軌道Tra1によって、ロボットアーム5の通過(掃引)領域(SVa1)が新たに障害物として追加される。
図8(c)に示すように、上記同様の手順で、次の動作指令Mb1に関しても、軌道生成と障害物追加を行うことができる。動作指令Mb1もステップS330、S340で軌道が生成可能であり、図16(c)に示すように軌道Trb1に対応する通過(掃引)領域(SVb1)が新たに障害物メモリ2201に追加される。
さらに処理は進み、ステップS330でロボットアーム5に関して動作指令Ma2の軌道生成が試行される。この動作指令Ma2は図8(a)に示すように始点Sa2から終点Ga2へ向かう軌道定義を含む。しかしながら、図8(d)に示すように、動作指令Ma2の終点Ga2の位置は、上記の手順で追加された障害物(SVb1)の内部にあって障害物との干渉を生じるため、軌道生成を行えない。この場合、処理は図7のステップS380に進む。
ステップS380で、CPU20は軌道が生成出来なかった場合の処理を行う。このステップS380では、まず、初めに、動作指令(群)を、軌道生成(+障害物登録)済みの第1の動作指令(群:前半)と、軌道生成(+障害物登録)が未処理である第2の動作指令(群:後半)に分割する。
即ち、現在までに軌道が生成できた全動作指令を一つの第1の動作指令(群:前半)に、軌道生成(+障害物登録)が未処理である以降の全動作を第2の動作指令(群:後半)に分割する。実施例2の例では、動作指令Ma1、Mb1を第1(前半:Op1−1)の動作指令に、動作指令Ma2、Mb2、Ma3を第2(後半:Op1−2)の動作指令として分割する。
なお、第1、第2の動作指令の分割は、1度のみならず、後半(残り)の第2の動作指令の処理で軌道生成が不可能になった場合は、さらに第2の動作指令を(処理済みの)第1の動作指令と、(未処理の)第2の動作指令に分割する。この繰り返しで、全動作指令データを処理していく。
また、第1、第2の動作指令への分割が生じた場合、分割の前後で第1、第2の動作指令に対応するロボットアーム(5、6)の動作は同期的に実行する。即ち、第1の動作指令に対応する動作が全て終了するのを待って、第2の動作指令に対応する動作を開始させるような同期制御を行う。このような同期制御を行うため、動作指令の分割を行った場合、CPU20は、実環境でのロボットの動作を上記のように同期させるための同期指令(図10のSp1)を生成する。この同期指令(図10のSp1)は、例えば生成した軌道データ群の分割の起きた位置に挿入する。
そして、CPU20は、図16(d)に示すように、軌道生成に伴なって生成されたロボットアームの掃引(通過)領域に対応する障害物データを障害物メモリ2201からクリアする。この場合、動作指令Ma1、Mb1の軌道生成で追加された障害物SVa1、SVb1が削除される。これにより、次の指令内の動作の軌道生成が可能になる。
その後、ステップS300に復帰して、上記同様の処理を繰り返し、残りの未処理の第2の動作指令(群:後半)に関して軌道生成(+障害物登録)を実行する。なお、第2の動作指令(後半:Op1−2)に相当する軌道定義から処理するための措置として、CPU20が、ステップS380において動作指令リストの処理済みの部分を消去するような処理を行うものとしてもよい。
上記のように動作指令Op1を分割した第1の動作指令(前半:Op1−1)、第2の動作指令(後半:Op1−2)は、
Op1−1 = { Ma1 、 Mb1 } 、
Op1−2 = { Ma2 、 Mb2 、 Ma3 }
のような構成となる。なお、CPU20は、上記のような動作指令分割を行う場合、実環境において、分割した第1(前半)、第2(後半)の動作指令の各動作を同期的に制御するための同期指令(図10のSp1)を生成する。この同期指令(図10のSp1)は、例えば生成した軌道データ群の分割の起きた位置に挿入するものとする。
その後の処理において、ステップS300では、ステップS380を経由したことにより、処理対象は第2の動作指令(後半:Op1−2)に相当する軌道定義となる。即ち、上記の動作指令Ma2、Mb2、Ma3を含む動作指令Op1−2が入力される。
図9(a)は、第2の動作指令(後半:Op1−2)の処理の初頭における現在のロボットアームの位置と動作指令Ma2、Mb2、Ma3の始点(Sa2、Sb2、Sa3)と、終点(Ga2、Gb2、Ga3)の位置を示している。
続く図7のステップ310では、上記同様に軌道生成の順序を決定する。上記同様に、例えば動作数からロボットアームの優先度を設定し、優先度から処理の順番を決定する。第2の動作指令(後半:Op1−2)の処理においても、ロボットアーム5の方が動作数が多いため優先度が高く設定される。従って、軌道生成処理の順序は、動作指令Ma2、Mb2、Ma3の順となる。
以下、CPU20は、第2の動作指令(後半:Op1−2)に対して、上述同様に図7のステップ330〜360によって軌道生成行程と障害物登録行程を実行する。最初の動作指令Ma2は始点Sa2から終点Ga2へ向かう動作であり、図9の(b)に示すように軌道生成により、ロボットアーム6の現在位置であるSb2の点を回避するようにして、軌道Tra2が生成される。また、図16の(e)に示すように、軌道Tra2におけるロボットアーム6の通過(掃引)領域(SVa2)が障害物として障害物メモリ2201に追加される。
図7のステップ330〜360によって、さらに後続の動作指令Mb2、Ma3…が処理される。動作指令Mb2の始点Sb2、終点Gb2については、追加された障害物SVa2を回避するように軌道Trb2が生成される(図9(c))。また、その軌道の通過(掃引)領域に対応する障害物(SVb2)が生成され、障害物メモリ2201に追加される(図16(f))。そして、最後に、動作指令Ma3の始点Sa3、終点Ga3から障害物SVb2を回避する軌道Tra3が生成され(図9(d))、その軌道の通過(掃引)領域に対応する障害物(SVa3)が生成される。
以上のようにして、作業者が最初に入力した動作指令リスト中の全動作指令に対応する全軌道の生成が完了する。本実施例の軌道生成方法によれば、アームの通過(掃引)領域に対応する障害物によって軌道生成が不可能となった場合、処理済みの動作指令を含む第1の動作指令と、未処理の動作指令を含む第2の動作指令とに動作指令リストを分割する。その際、障害物メモリの障害物データをクリアして残りの第2の動作指令を処理するため、軌道生成(+障害物登録)を続行することができる。
一方、上記のような軌道生成によると、実環境の動作では、分割した動作指令Op1−1とOp1−2の間ではロボットアーム同士の干渉の可能性があるため、同期的な実行制御を行う必要がある。例えば、第1の動作指令Op1−1内の全動作が終了した後に、第2の動作指令Op1−2内の動作を実行する制御を行う。このために、上記のように、動作指令の分割を行った場合、CPU20は同期指令(図10のSp1)を軌道データ中の同期制御が必要な位置に挿入していく。
図10は、上記のように分割した(第1の)動作指令Op1−1と、(第2の)Op1−2に対応するロボット動作をロボットアーム5、6で同期的に実行させた時のタイミングを示している。この例は、図8、図9で説明した(第1の)動作指令Op1−1と(第2の)動作指令Op1−2に対応している。このように(第1の)動作指令Op1−1と(第2の)動作指令Op1−2との分割を行なった場合、CPU20は軌道データ中に同期指令(Sp1)を挿入する。これにより、(第2の)動作指令Op1−2に対応する動作が(第1の)動作指令Op1−1の動作が全て終了するのを待って開始されるよう、同期的な制御を行うことができる。
図10では、最初に2つのロボットアーム5、6が同時にそれぞれの動作を開始する。この場合、どちらかのロボットアームが先に動作を終了するが、同期指令(Sp1)が挿入されている場合には、その次の指令の動作は実行せず、もう片方のロボットアームの動作が完了するまで待機する。図10の例では、ロボットアーム6が先に動作(Mb1)を完了するが、待機時間80の間だけ待機し、ロボットアーム5の動作指令Ma1が完了するのを待つよう、同期制御が行われている。そして、動作指令Op1−1内の全動作が完了した後に、次の動作指令Op1−2に移り、それぞれの動作(Ma2、Mb2、Ma3…)を同時に実行開始する。
なお、動作指令Op1−2と後続の動作指令(不図示)との間でも動作指令の分割(および障害物メモリ2201のクリア)が生じている場合には、図10に示すように同期指令(Sp2)が挿入される。ここでは、ロボットアーム6が先に全動作を完了するが、ここでも待機時間90の間だけロボットアーム5を待つ同期制御が行われる。
以上のように、本実施例では、分割後の指令の中では複数のロボットアームが干渉し合わない軌道を保証し、指令間の干渉はロボットアームを同期指令に基づき同期的に動作させる。これにより、本実施例の方法によれば、ロボットアームに多数の動作を割り当てられた場合においても、同期指令を発生して実環境における簡易な同期制御を行うことにより、ロボット同士の干渉の生じない軌道を自動的に生成することができる。
ここで、図18に図7のステップS310(図3のステップS210でも同様)に関して述べた、ロボットアーム単位および動作指令単位の優先度を用いて、軌道生成(+障害物登録)の処理順を制御するアルゴリズムの一例を示しておく。
ここでは、ロボットアーム単位の優先度を指すポインタ(カウンタ)Rを用いる。このRは、最大優先度に対応する値0から最大(全)ロボットアーム数に相当するRMまで1ずつインクリメントされる。一方、ポインタ(カウンタ)Rにより指示される主記憶ないし仮想記憶上に確保されたロボットアーム順位リストには、ユーザ(作業者)指定(あるいはCPU20が自動決定)に基づき、各ロボットアームの識別データを優先順位が高い方から順に格納しておく。このロボットアーム順位リストを、ポインタ(カウンタ)Rの値に基づき先頭(0)から参照していくことで、CPU20はロボットアーム順位リストに定義されたアームの順で軌道生成(+障害物登録)を実行できる。なお、ポインタ(カウンタ)Rは、図18の例では循環的に使用され、その値が最大(全)ロボットアーム数に相当するRMに達すると、その値は0にリセットされる。
また、以上では、ポインタ(カウンタ)iを用いた動作指令単位の優先度制御については詳細に述べなかったが、この動作指令単位の優先度制御についても、上記と同様の構成を用いることができる。例えばポインタ(カウンタ)iにより指示される主記憶ないし仮想記憶上に確保された動作指令順位リストに、ユーザ(作業者)指定(あるいはCPU20が自動決定)に基づき、各動作指令の識別データを優先順位が高い方から順に格納しておく。この動作指令順位リストを、ポインタ(カウンタ)i(最も高い優先度は0)の値に基づき参照していくことで、動作指令順位リストの定義順で動作指令を処理していくことができる。
図18は図7のステップS320〜S370の部分をより詳細に示す形式のフローチャートで、ステップS320は図7のものと同じポインタ(カウンタ)iの初期化(i=0)処理である。また、それに続くステップS520は、上記のポインタ(カウンタ)Rの初期化(R=0)処理である。
ステップS530では、Mi=Mi(R)のようなポインタ(カウンタ)演算によって、今回の処理対象の動作指令を決定する。つまり、このポインタ(カウンタ)操作は、ポインタ(カウンタ)Rの指すロボットアームに関する、現時点で最も優先度の高い(未処理)の動作指令を特定する処理である。
ステップS540では、図7のステップS330〜S360の処理に相当する軌道生成および障害物登録処理を行う。ここでは詳細不図示であるが、軌道生成不可能となった場合のステップS340〜S380の動作指令分割処理も同様に実行することができる。
ステップS550では、ポインタ(カウンタ)R、およびポインタ(カウンタ)iを1ずつインクリメントする(R=R+1,i=i+1)。これによりロボット指定、および動作指令は、次のロボットアーム、次の動作指令をそれぞれ指すようポインタ(カウンタ)R、iがそれぞれインクリメントされる。
ステップS560では、ポインタ(カウンタ)Rが一巡したか、即ち、最大(全)ロボットアーム数に相当するRMに達したか否かを判定する。ステップS560が肯定された場合にはポインタ(カウンタ)Rは最初の最も優先度の高いアームを指すように0にリセットされる。
ステップS580は、図7のステップS370と同じ処理で、ここではポインタ(カウンタ)iの値の判定によって、動作指令リスト中の全ての動作指令を処理したか否かを判定している。ここで全動作指令を処理していない間はステップS530に復帰して上記の動作を繰り返す。
図18のような優先度処理によって、ポインタ(カウンタ)Rをインクリメントすることによって、全部のロボットアームを設定された優先度の順に1つずつ指定し、またポインタ(カウンタ)iによって動作指令を優先度の順に取り出して処理できる。従って、ロボットアーム単位の優先順位制御については、優先順位に基づき、まんべんなく全部のロボットアームの動作指令を設定された優先度の順で処理できる。このため、例えばユーザ(作業者)のロボット優先順位の指定に偏りがあって、あるロボットアームの動作ばかり先に処理され、後続のロボットアームの動作の処理で軌道生成が進まないような事態を回避することができる。
<実施例3>
実施例2で軌道生成が不可能となる事態として、例えば図8(d)のように、軌道生成の終点Ga2(始点の場合も同様である)が、他のロボットアームの軌道生成によって生成された障害物(SVb1)に最初から干渉している例を示した。本実施例3では、このような事態を回避できるような処理手法につき説明する。本実施例でも、図1〜図4、図14などに示した軌道生成システムの基本構成は上述の実施例1、2と同様であるものとし、既に説明済みの部材や制御については可能な限り重複した説明は省略するものとする。
本実施例3では、各ロボットアームが動作指令中の軌道定義である始点および終点の位置にいる時の姿勢において各アームの躯体が占める空間を障害物として登録しておくことにより上記の問題を回避する。これにより、動作指令の始点または終点が最初から他のロボットアームの通過領域内に含まれてしまうような状態を回避することができる。
以下、実施例3での複数台のロボットの通過領域が互いに交差しない軌道を生成する方法について、図11〜図13、図17を用いて、本実施例の処理手法につき説明する。図11(a)〜(f)は実施例2の図8と同様の形式で各ロボットアーム(5、6)の姿勢および対応する軌道生成(+障害物登録)の様子を示している。図12は、実施例2の図10に相当する実環境における同期的なロボット制御の様子を示し、図13は、図7と同様の形式で本実施例における軌道生成(+障害物登録)の制御手順を示している。また、図17(a)〜(f)は、図15、図16と同等の形式で本実施例の障害物メモリ2201のデータ内容の遷移を示している。
以下では、実施例3の構成や、処理対象の動作指令リスト中の動作指令は実施例2と同様であるものとする。このため、以下では特に実施例2と異なる点に重点を置いて説明する。
本実施例において、作業者の入力に応じて生成された動作指令リストは、実施例2と同様であり、
Op1 = { Ma1 、 Ma2 、 Ma3 、 Mb1 、 Mb2 }
Ma1 = ( Sa1 、 Ga1 )、Mb1 = ( Sb1 、 Gb1 )
Ma2 = ( Sa2 、 Ga2 )、Mb2 = ( Sb2 、 Gb2 )
Ma3 = ( Sa3 、 Ga3 )
のような動作指令によって構成されている。上記の各始点と終点の位置は図11(a)に示す通りである。
図13は本実施例における軌道生成(+障害物登録)処理の流れを示しており、ここでは実施例2の図7と同一の処理ステップには図7と同一のステップ番号を用いている。図13で図7と異なるのは、ステップS300とS310の間にステップS410を挿入してある点である。それ以外のステップの処理は、図7で説明したものと同様である。
この図13のステップS410では、全ての軌道生成を開始する前に、各ロボットアームが動作指令中の始点および終点の位置にいる時の姿勢で各アームの躯体が占める空間を障害物として障害物メモリ2201に登録する。図17(a)は、このステップS410が実行された後の状態を示している。即ち、図17(a)では、上記の各動作指令の始点(Sa1、Sa2…、Sb1、Sb2…)および終点(Ga1、Ga2…、Gb1、Gb2…)における姿勢において各アームの躯体が占有する領域が障害物として障害物メモリ2201に登録されている。
これ以降の処理の流れは、図7で説明したものと同様である。例えばステップS310の処理の優先順序の決定方法も実施例2と同様に行われ、ここでは上記の動作指令Op1の処理順序はMa1、Ma2、Ma3、Mb1、Mb2であるものとする。
次に、ステップS320の初期化に続き、ステップS330〜S370(およびS380)のループによって、設定された順位に従って、軌道生成および障害物追加処理を行う。この時、図17(a)のような障害物の初期登録状態によって、本実施例の軌道生成(ステップS330)では、処理対象のアーム以外の他のアームの始点と終点の位置を回避するよう軌道が生成されることになる。
この軌道生成および障害物の追加登録の様子は、例えば図11(a)〜(f)、図17(b)〜(f)に示す通りである。ここでは、まず動作指令Ma1の軌道生成時は予め配置されている障害物7を避けるようにして軌道Tra1が生成され、その掃引(通過)領域が障害物(SVa1)として障害物メモリ2201に追加される(図11(b)、図17(b))。
続いて、動作指令Ma2の軌道生成時は、既に障害物登録されているロボットアーム6の終点Gb1(始点Sb2)の位置を回避するように軌道Tra2が生成される(図11の(c))。また、その軌道Tra2によるロボットアーム6の掃引(通過)領域が障害物(SVa2)として障害物メモリ2201に追加される(図17(c))。これにより、実施例2の制御による場合と異なり、後続の動作指令Mb1の軌道が生成不可能となることが防止される。
さらに、同様にして動作指令Ma3の軌道Tra3がロボットアーム6の終点Gb1(始点Sb2)の位置を回避するように生成されその通過(掃引)領域が障害物(SVa3)として障害物メモリ2201に追加される(図11(d)、図17(d))。
また、それに続くロボットアーム6の軌道生成時は、実施例2と同様に、先の手順で追加された通過領域を回避するように軌道生成が行われる。これは通過領域内に他のロボットアームの始点と終点が含まれるためである。従って、ロボットアーム6の軌道生成では、まず動作指令Mb1の軌道Trb1が生成され、その通過(掃引)領域が障害物(SVb1)として障害物メモリ2201に追加される(図11(e)、図17(e))。そして、動作指令Mb2については、軌道Trb2(図11の(f))が生成され、対応する通過領域が障害物(SVb2)障害物メモリ2201に追加される(図17(f))。
以上により、動作指令Op1として与えられた全動作の軌道生成が完了する。図12は、以上のようにして軌道生成を行った2つのロボットアーム5、6を動作させた時のタイムチャートである。上記の動作指令Op1の場合、本実施例では、動作指令の始点および終点のアーム躯体の姿勢に相当する空間を障害物として予め軌道開始前に登録しているため、図13のステップS340〜S380の分岐が生じていない。このため、図10に示したような同期制御を行う必要がなく、同図に示すように、各ロボットアーム5、6が同時に各々の動作を開始し、他のロボットアームの動作に拘らず与えられた動作の軌道を実行してもアーム同士の干渉を生じない。
即ち、本実施例3によれば、(いわば確定済みの障害物として)動作指令の始点および終点のアーム躯体の姿勢に相当する空間を、予め(先に)障害物登録してしまい、それを回避するように軌道修正を行う。このため、実施例2で説明した動作指令の分割、障害物データのクリアおよび実環境においてアーム動作を同期的に制御するための同期指令の生成、の各過程を発動させる確率が下がり、アーム同士の干渉のない軌道生成をスムーズに行うことができる。そして実環境で生成した軌道データによりロボットアームを動作させた場合でも、実施例2で示したような同期制御が必要となる確率が下がり、高速にロボットアームを動作させることができる。
以上に示した実施例中の具体的な構成はあくまでも一例に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれ、当業者は特許請求の範囲内で様々な設計変更を行うことができるのはいうまでもない。
本発明は、上述の実施例の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。