(57)【要約】【課題】作業内のロボットの移動距離が長い場合や動作領域のほとんどをロボット間で共有する場合でも作業時間の増加を抑えることができる教示システムを提供する。【解決手段】複数のロボットに対して動作プログラムを生成するロボットの教示システムにおいて、複数のロボットに分配するタスク分配計画部１１１と、各ロボット内でのタスク処理順序を計画するタスク処理順計画部１１２と、タスク分配計画とタスクの処理順序に基づいて動作プログラムの生成及び動作時間の算出とを行うロボット動作計画部１１３と、ロボット間での衝突を回避するように動作プログラムの変更及び動作時間の算出を行うロボット間衝突回避動作計画部１１５と、ロボット動作計画部１１３の動作時間とロボット間衝突回避動作計画部１１５の動作時間とに基づいて評価基準を計算する評価基準計算部１１１ａ、１１２ａとを備える。【選択図】図１
2004243461.tif 000002
【特許請求の範囲】
【請求項１】
複数のロボットに対して所定の作業を実施するように前記各ロボットに対して作業分担と作業処理順の組み合わせの中から評価基準を最小あるいは最大にするものを優先的に探索して動作プログラムを生成するロボットの教示システムにおいて、
前記作業を前記複数のロボットに分配するタスク分配計画部と、
前記分配されたタスクの各ロボット内でのタスク処理順序を計画するタスク処理順計画部と、
前記タスク分配計画と前記タスクの処理順序に基づいて各ロボットと障害物との衝突を回避し、かつ、各ロボットの動作開始位置と終了位置をロボット同士が衝突しない領域とする動作プログラムの生成及び動作時間の算出とを行うロボット動作計画部と、
前記動作プログラムの中でロボット間で衝突が発生する軌道がある場合、前記軌道を複数に分割し、前記分割された軌道に対してロボット間での衝突を回避するように前記動作プログラムの変更及び動作時間の算出を行うロボット間衝突回避動作計画部と、
前記ロボット動作計画部の動作時間と前記ロボット間衝突回避動作計画部の動作時間とに基づいて前記評価基準を計算する評価基準計算部とを備えることを特徴とするロボットの教示システム。
【請求項２】
前記ロボット間衝突回避動作計画部は、複数ロボット全体の動作時間が最短となるように各ロボットの動作計画を変更する最適化処理部を備えることを特徴とする請求項１記載のロボットの教示システム。
【請求項３】
同一ロボットの複数の前記動作プログラムを実行順序にしたがって１つの動作プログラムに併合する動作プログラム併合部を備えることを特徴とする請求項１乃至２記載のロボットの教示システム。
【請求項４】
前記動作プログラム併合部は、動作プログラムの最終作業点から終了位置までの軌道と次工程動作プログラムの開始位置から開始作業点までの軌道を削除する軌道削除部と、
前記最終作業点から前記開始作業点までの軌道を両動作プログラム間に追加する軌道追加部とを備えることを特徴とする請求項３記載のロボットの教示システム。
【請求項５】
前記タスク処理順計画部は、前記タスク間の先後関係を記述したタスクグラフに基づいて並列実行可能な複数のタスクを１つのタスクセットとし、前記タスクセットを直列に接続したタスクセットリストを生成する機能を備え、
前記タスク分配計画部は、前記タスクセットリストの先頭の前記タスクセットから各作業を実行するロボットの組み合わせを探索する機能を備えることを特徴とする請求項１乃至４記載のロボットの教示システム。
【請求項６】
前記タスク間の先後関係をロボット間の動作先後関係に対応付ける展開ルール情報部を備え、
前記ロボット間衝突回避動作計画部は、前記タスク間の先後関係に基づいて動作プログラムを変更する先後関係考慮部を備えることを特徴とする請求項１乃至４記載のロボットの教示システム。
【請求項７】
前記タスク分配計画部、前記タスク処理順計画部及び前記ロボット間衝突回避動作計画部は、それぞれ独立して分散処理可能なソフトウェアオブジェクトであることを特徴とする請求項１乃至５記載のロボットの教示システム。
【請求項８】
前記ロボット動作計画部は、各ロボット毎に独立したソフトウェアオブジェクトであることを特徴とする請求項１乃至６記載のロボットの教示システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動作領域が重なり合うように設置された複数台のロボットへの作業分担と作業順を決定し、各ロボットの動作プログラムを作成する教示システムに関するものであり、特にロボット同士が衝突を起こさず、全体の作業時間が短くなるように作業分担と作業順を決定するシステムに関する。
【０００２】
【従来の技術】
自動車の生産ラインでは、複数台の産業用ロボットマニピュレータを投入して、スポット溶接などの作業を自動化している。ここでは、多数のロボットが互いの動作領域が重なり合うほど近接して配置されている。このような近接する複数のロボットの教示作業は、従来、教示者が個々のロボットの動作を１ステップづつ実際に動作させながら、複数ロボット間で干渉が生じないように各ロボットの動作軌道と、各動作軌道間の実行タイミング（インタロック）を試行錯誤的に教示していた。しかし、教示者による試行錯誤的な教示では、複数のロボットを安全かつ効率的に動作させるのが非常に難しいという問題がある。複数のロボットを効率的に動作させようとすると、その教示作業は非常に複雑になり、かつ教示および動作確認に非常に時間がかかる。特に、製品の種類が頻繁に変わる多品種少量生産では、製品の種類が変更される度に教示者が教示作業を全てやり直すことになるので、実際にロボットが稼動して生産する直接工程よりも、教示作業などの間接工程時間の比率が増大し、生産性が極端に低下してしまう。また、教示者が教示作業に直接に係わる割合が大きいので、人件費の高騰も問題となる。
近年では、教示者による直接教示に代わって、計算機を用いて複数ロボットの教示作業と動作制御を効率化する方法や装置が提案されている。
【０００３】
従来例１では、繰り返し探索時の評価基準である作業時間をシミュレーションする際、複数台のロボットが同時に作業を実行すると衝突する可能性がある場合は、ロボットに優先順位を定め、優先順位の高いロボットの作業を優先して実行し、優先順位の低いロボットを衝突の可能性が解消されるまで待機させることによって衝突を回避している。図１２は、作業分担と作業順の初期解の例を示している。図１２において、Ｒ１〜Ｒ３はロボット名を、Ｇ１〜Ｇ１４はスポット溶接の打点グループを、逆／順は打点グループをどの方向から処理するかを示している。図１２に示されたＲ１からＲ３への作業分担と作業順をシミュレーションする際、ロボット間で衝突が生じる場合は、初期優先順位Ｒ１→Ｒ２→Ｒ３にしたがって、優先順位の高いロボットの打点グループを先に実行させ、その打点グループの処理が終了するまで優先順位の低いロボットの打点グループの実行を待機させている（例えば、特許文献１）。
【０００４】
従来例２では、繰り返し探索時の評価基準である作業時間をシミュレーションする際、複数台のロボットが同時に作業を実行すると衝突する可能性がある場合は、現在動作中のロボットの作業進行状態を監視し、衝突の可能性が解消されるまで他のロボットを待機させることによって衝突を回避している。図１３は、ロボット間衝突回避の手順を示している。図１３において、１〜９は溶接線を示している。同図上段は、ロボット１が現在溶接線１の作業を処理中であり、ロボット１の現在位置から溶接線１の終了位置までロボット１が通過する領域（干渉領域）と、ロボット２がこれから処理する溶接線４の開始位置から終了位置までロボット２が通過する領域が干渉する（重なる）ことを示している。この状態ではロボット２の作業実行が待機させられる。同図下段は、ロボット１の作業進行状況にしたがってロボット１の通過領域を更新し、ロボット２の通過領域との重なりがなくなった時点で、ロボット２は作業を開始する（例えば、特許文献２）。
【０００５】
従来例３では、複数台のロボットに作業分担と作業順を指定した教示データが与えられたとき、ロボット間の衝突を回避し、なおかつロボットの待ち時間を最小にして効率的にロボットを動作させる制御装置が開示されている。図１４は、そのロボット制御装置の動作原理を説明している。同図において、（Ａ）は、ロボットＡとロボットＢの作業点と作業点間の動作経路を示している。（Ｂ）は、（Ａ）の作業点データをもとに干渉抽出手段によって計算されたロボットＡとＢの作業点間の干渉テーブルを示している。（Ｃ）は、非干渉通過順序決定手段により計算された干渉する作業点におけるロボットの優先順序テーブルを示している。図１４（Ｂ）は、ロボットＡとロボットＢが、作業点２ａと２ｂ、３ａと３ｂ、４ａと４ｂで同時に作業を行なうと干渉が生じることを示している。図１４（Ｃ）は、ロボットＢの作業２ｂ，３ｂ，４ｂに優先させてロボットＡの作業２ａ，３ａ，４ａを実行させることを示している。優先順位テーブルを作成する際、各ロボットの残りの作業時間と作業点での待ち時間の和を比較して、長い方を選択することにより優先順位を決定している（例えば、特許文献３）。
【０００６】
従来例４では、複数の機械（溶接ロボット）に作業（溶接線）の分担が与えられたとき、それぞれの機械の作業経路を作業量の多い機械から優先的に決定する制御装置と制御方法が開示されている。図１５は、その制御装置の構成図を示している。同図において、ＣＡＤ／ＣＡＭシステム２は複数の機械に割当てられた作業に必要な情報を作成する。作業情報記憶部４ではＣＡＤ／ＣＡＭシステム２によって作成された作業情報を記憶する。作業量評価部６では各機械の作業量を評価する。機械選択部８では作業量の多い機械を優先的に所定個数（ここではＮ個とする）選択する。作業経路選択部１０では機械選択部８で選択されたＮ個の機械それぞれについて、複数の作業経路を作成してその作業時間を評価する。作業経路選択部１２では、機械選択部８で選択されたＮ個の機械それぞれについて、作業経路評価部１０で作成した複数の経路の中から作業時間の短いものを優先的に所定個数（ここではＭ個とする）選択する。全作業経路評価部１４では、作業経路選択部１２で選択されたＮ×Ｍ個の作業経路それぞれについて、その作業と並行して作業する全ての機械の作業経路を複数作成して、その全てについて作業時間を評価する。全作業経路選択部１６では、Ｎ×Ｍ個の作業経路の中から作業時間が最も短いものを選択し、選択された作業を担当する機械以外の全ての機械について、全作業経路評価部１４で作成した複数の作業経路の中から作業時間が最も短いものを選択する。機械制御部２２では、全作業経路選択部１６で選択された全機械の作業経路にしたがって複数の機械を制御する。複数の溶接ロボットの作業（溶接線）経路に沿った動作が衝突する場合には、干渉状態が少なくなるようにその溶接線を複数に分割して、全作業経路評価部で処理する（例えば、特許文献４）。
【０００７】
【特許文献１】
特許２９８４２１８号公報
【特許文献２】
特許２７７８９２２号公報
【特許文献３】
特開平１１−３４７９８４号公報
【特許文献４】
特開２００２−１１６８１６号公報
【０００８】
【発明が解決しようとする課題】
従来例１および従来例２で開示された方法では、溶接線あるいは打点グループ（スポット溶接の複数の打点）全体を単位として、ロボットの作業実行を待機させることによりロボット間の衝突を回避して全体の作業時間をシミュレートし、そのシミュレーション値を評価基準として作業分担と作業順を決定している。したがって、１つの作業（溶接線あるいは打点グループ）内での移動距離が長くなると、その作業に対するロボットの通過領域が広くなり、動作時間も長くなるので、ロボットの待ち時間が増えて全体の作業時間（計算値）が長くなってしまうという問題がある。また、複数台のロボットがより近接されて配置され、動作領域のほとんどをロボット同士で共有する場合には、衝突の可能性が頻繁に起こり、同様に作業時間の増大をまねくという問題がある。
【０００９】
従来例３で開示された方法では、図１４で説明すると、ロボットＡが作業点２ａの作業を終えて干渉領域２ａを通過し終えるまで、ロボットＢを作業点１ｂで待機させている。しかしながら、実際には、ロボットＢが作業点１ｂから２ｂに移動するための時間があるため、必ずしもロボットＡが干渉領域２ａを通過するまでロボットＢを作業点１ｂに待機させておく必要はない。つまり、全体の作業時間を更に短縮できる余地は十分残されているが、作業点間の移動軌道については何も考慮していないため、この方法ではこれ以上対処できないという問題がある。
【００１０】
従来例４で開示された方法では、ロボット同士が衝突する場合、該当する溶接線を複数に分割して、全作業経路評価部（図１５の１４）での演算を行っているが、優先順位の設定など衝突を回避するための直接の演算をしているわけではない。作業経路は溶接線の処理順、溶接方向、溶接開始点までの移動経路を考慮して作業経路を作成するため、溶接線を分割することによって膨大な数の組み合わせが生じる。その膨大な作業経路の組み合わせの中から衝突が生じないものを選択するという処理を行っている。そのため、演算量の爆発的な増大を招き、効率的な衝突回避ができないという問題がある。また、溶接線から溶接線への移動軌道については分割の対象にしていないため、溶接線間の移動において大きな待ち時間が生じるという問題もある。
【００１１】
本発明は、上記問題に鑑みてなされたものであり、１つの作業全体や作業点だけを考慮せず、作業（点）間の移動軌道や作業内の各軌道を細かく考慮することによって、作業内のロボットの移動距離が長い場合や動作領域のほとんどをロボット間で共有する場合でも作業時間の増加を極力抑えることができ、なおかつロボット間でデッドロック状態が生じることがないロボットの教示システムを提供することを目的としている。
さらに、軌道を細かく考慮しても演算量の急激な増加を招くことなく、効率的なロボット間衝突回避機能を備えたロボットの教示システムを提供することを目的としている。
【００１２】
【課題を解決するための手段】
上記課題を解決するため、請求項１記載のロボットの教示システムは、複数のロボットに対して所定の作業を実施するように前記各ロボットに対して作業分担と作業処理順の組み合わせの中から評価基準を最小あるいは最大にするものを優先的に探索して動作プログラムを生成するロボットの教示システムにおいて、前記作業を前記複数のロボットに分配するタスク分配計画部と、前記分配されたタスクの各ロボット内でのタスク処理順序を計画するタスク処理順計画部と、前記タスク分配計画と前記タスクの処理順序に基づいて各ロボットと障害物との衝突を回避し、かつ、各ロボットの動作開始位置と終了位置をロボット同士が衝突しない領域とする動作プログラムの生成及び動作時間の算出とを行うロボット動作計画部と、前記動作プログラムの中でロボット間で衝突が発生する軌道がある場合、前記軌道を複数に分割し、前記分割された軌道に対してロボット間での衝突を回避するように前記動作プログラムの変更及び動作時間の算出を行うロボット間衝突回避動作計画部と、前記ロボット動作計画部の動作時間と前記ロボット間衝突回避動作計画部の動作時間とに基づいて前記評価基準を計算する評価基準計算部とを備えることを特徴とするものである。
【００１３】
請求項２記載のロボットの教示システムは、前記ロボット間衝突回避動作計画部は、複数ロボット全体の動作時間が最短となるように各ロボットの動作計画を変更する最適化処理部を備えることを特徴とするものである。
請求項３記載のロボットの教示システムは、同一ロボットの複数の前記動作プログラムを実行順序にしたがって１つの動作プログラムに併合する動作プログラム併合部を備えることを特徴とするものである。
請求項４記載のロボットの教示システムは、前記動作プログラム併合部は、動作プログラムの最終作業点から終了位置までの軌道と次工程動作プログラムの開始位置から開始作業点までの軌道を削除する軌道削除部と、前記最終作業点から前記開始作業点までの軌道を両動作プログラム間に追加する軌道追加部とを備えることを特徴とするものである。
【００１４】
請求項５記載のロボットの教示システムは、前記タスク処理順計画部は、前記タスク間の先後関係を記述したタスクグラフに基づいて並列実行可能な複数のタスクを１つのタスクセットとし、前記タスクセットを直列に接続したタスクセットリストを生成する機能を備え、前記タスク分配計画部は、前記タスクセットリストの先頭の前記タスクセットから各作業を実行するロボットの組み合わせを探索する機能を備えることを特徴とするものである。
請求項６記載のロボットの教示システムは、前記タスク間の先後関係をロボット間の動作先後関係に対応付ける展開ルール情報部を備え、前記ロボット間衝突回避動作計画部は、前記タスク間の先後関係に基づいて動作プログラムを変更する先後関係考慮部を備えることを特徴とするものである。
【００１５】
請求項７記載のロボットの教示システムは、前記タスク分配計画部、前記タスク処理順計画部及び前記ロボット間衝突回避動作計画部は、それぞれ独立して分散処理可能なソフトウェアオブジェクトであることを特徴とするものである。
請求項８記載のロボットの教示システムは、前記ロボット動作計画部は、各ロボット毎に独立したソフトウェアオブジェクトであることを特徴とするものである。
【００１６】
【発明の実施の形態】
以下、本発明の実施の形態を図を参照して説明する。図１は、本発明の実施の形態におけるシステム構成図を示している。図１の１０１は本システムにタスクを入力するタスク入力部である。タスク入力部１０１によって入力されたタスクは、タスク情報１０２に記憶される。１０３はタスクによって処理されるワークや部品に関する処理条件などを入力する条件入力部である。条件入力部１０３によって入力された情報は、ワーク・部品情報１０４に記憶される。１０５はロボットや部品・ワークなど環境の幾何学モデルを入力するモデル入力部である。モデル入力部１０５によって入力された情報は、幾何モデル１０６に記憶される。１０７は対象となるロボットを登録し、その情報を設定するロボット登録部である。ロボット登録部１０７によって登録された情報は、ロボット情報１０８に記憶される。１０９はロボットの動作展開に関するルールを登録するルール登録部である。ルール登録部によって登録された情報は、展開ルール情報１１０に記憶される。ワーク・部品情報１０４、幾何モデル１０６、ロボット情報１０８および展開ルール情報１１０のデータベースは、タスクが入力される以前に設定しておく必要がある。またこれらのデータベースは全て関連付けられて記憶されている。
【００１７】
図１において、１１１はタスク情報１０２にアクセスして、タスクの複数ロボットへの分配（割当て）を最良優先探索により決定するタスク分配計画部である。１１２はタスク情報１０２にアクセスしてタスクの処理順序を最良優先探索により決定するタスク処理順計画部である。タスク分配計画部１１１およびタスク処理順計画部１１２は、その内部に、優先探索処理時の評価基準を計算する評価基準計算部（１１１ａ，１１２ａ）を備えている。１１３は各ロボットに割当てられたタスクについて、ロボットの動作手順と軌道を生成するロボット動作計画部である。ロボット動作計画部１１３によって生成された軌道は、動作プログラム１１４に記憶される。１１５は複数台のロボット同士が衝突を起こす危険性がある場合に、ロボット同士が衝突を起こさないように動作プログラム１１４に修正を加えるロボット間衝突回避動作計画部である。
【００１８】
図２は、３台のロボット２０１ａ，２０１ｂ，２０１ｃ（Ｒ１，Ｒ２，Ｒ３）によってワークＷに部品Ａ〜Ｅを組み付ける組立ロボットセルを示している。部品が組み付けられる前のワークＷがベルトコンベア２０２によって図の位置に供給され、組み付け後、同様にベルトコンベア２０２によってワークＷが搬出される。２０３ａ〜２０３ｄは部品供給装置である。部品Ａ〜Ｅは部品供給装置２０３ａ〜２０３ｄのいずれかから供給される。２０４ａ〜２０４ｃはツールホルダである。部品の組み付けに必要なハンド（グリッパ）を数種類保持している。ロボット２０１ａ〜２０１ｃは組み付ける部品に応じて、ハンド部分を交換しながら作業を遂行する。
【００１９】
図３は、図２に示した組立作業の作業情報を示している。図３（ａ）は、組立作業のタスクを記述している。同図において、Ｔ０−０〜Ｔ０−５はワークＷおよび部品Ａ〜Ｅを所定位置に供給するタスクを示している。Ｔ１〜Ｔ５はそれぞれ部品Ａ〜ＥをワークＷの指定位置に組み付けるタスクを示している。Ｔ６は組み付け後のワークＷを搬出するタスクを示している。ここで、ロボットＲ１〜Ｒ３が実行可能なタスクはＴ１〜Ｔ５である。また、Ｔ０−０からＴ６までのタスクをこの順に実行するのではなく、組立の工程上、制約されるタスク間の先後関係を満足するように実行する。図３（ｂ）はタスク間の先後関係を指定するタスクグラフを示している。図中の矢印が先後関係を示している。例えば、Ｔ３（部品Ｃの組み付け）はＴ１（部品Ａの組み付け）およびＴ２（部品Ｂの組み付け）の後でなければ実行できない。
【００２０】
まず、本発明に係わる第１の実施の形態について説明する。
図３（ａ）のタスク記述と（ｂ）のタスクグラフ（先後関係）は、図１のタスク入力部１０１から入力され、タスク情報１０２に記憶される。タスク記述とタスクグラフが入力されると、タスク処理順計画部１１２は、図３（ｃ）に示すように、並列して処理可能な複数のタスクを１つのタスクセットにまとめ、タスクセットの処理順序を示すタスクセットリストを生成する。すなわち、ＴａｓｋＳｅｔ０→ＴａｓｋＳｅｔ１→ＴａｓｋＳｅｔ２→ＴａｓｋＳｅｔ３→ＴａｓｋＳｅｔ４の順に処理される。ここで、破線で示したＴａｓｋＳｅｔ０およびＴａｓｋＳｅｔ４はロボット担当外のタスクセットなので、以降は省略して（削除されているとして）説明する。
タスク処理順計画部１１２によって図３（ｃ）に示すタスクセットリストが生成されると、図１のタスク分配計画部１１１では、タスクセットに対する担当ロボットの組（以降、担当ロボットセットと記述）の候補の中から、最良なものを繰り返し探索（最良優先探索）することによって、ロボットへのタスク分配（割当て）を決定する。
【００２１】
図４は、最良優先探索で使用する探索木のデータ構造を示している。図４（ａ）に示すように探索木はツリー構造で表され、図中のｎ０〜ｎ６はツリーのノードを示している。探索木の各ノードは探索過程の状態を示し、ノードの親子関係は探索状態の遷移過程を示している。本発明では、探索木の各ノードをタスクセットに対する担当ロボットセットの候補に対応させる。また、各ノードは、実際には図４（ｂ）に示す２つの連結リスト４０１および４０２に分けて保存される。４０１は展開済み（子ノードを持つ）ノードを格納するＣｌｏｓｅｄＬｉｓｔである。４０２は展開候補（未展開：子ノードを持たない）ノードを格納するＯｐｅｎＬｉｓｔである。４０３ａ〜４０３ｆは親ノードへのポインタであり、（ａ）に示したツリーの枝に相当する。図４（ｃ）は、連結リスト内の次ノードを示すリンク（破線の矢印）と親ノードへのポインタ以外に各ノードが保持するデータを示している。（ｃ）に示したデータの詳細については後述する。
【００２２】
図５は、タスク分配計画部１１１のフローチャートを示している。
図５の探索木の初期化（Ｓ５−１）では、図４に示した探索木のルートノードのみを生成する処理を行う。すなわち、ＣｌｏｓｅｄＬｉｓｔは空で、ＯｐｅｎＬｉｓｔにノードが１つ生成される。この初期ノードにおいて、現在のタスクセットｐｔｒ＿ＣｕｒＴａｓｋＳｅｔはＮｕｌｌを指し、次のタスクセットｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔは図３（ｃ）に示したタスクセットリストの先頭ノードＴａｓｋＳｅｔ１へのポインタを指すように設定する。また、作業時間合計をゼロに設定する。Ｓ５−２では、探索木の未展開ノード（ＯｐｅｎＬｉｓｔ）から評価値が最小となるノードを選択し（選択されたノードをＮとする）、Ｓ５−３にてノードＮをＣｌｏｓｅｄＬｉｓｔに移し変える。本発明では、各ノードが保持する作業時間合計値を評価基準としてノードの選択を行う。Ｓ５−１の初期化直後では、ルートノードが選択される。Ｓ５−４では、ノードＮが保持するｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔがＮｕｌｌかどうかチェックされる。Ｎｕｌｌではない場合は、ノードＮが保持するｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔが指すＴａｓｋＳｅｔについて、担当ロボットセットの候補を求めるループに処理が移る。
【００２３】
例えば、図３（ｃ）のＴａｓｋＳｅｔ１  （  Ｔ１，  Ｔ２  ）  に対して図２のロボットＲ１〜Ｒ３から担当ロボットセットの候補を全て求めると、（  Ｒ１，  Ｒ１  ），  （  Ｒ１，  Ｒ２  ），  （  Ｒ１，  Ｒ３  ），  （  Ｒ２，  Ｒ１  ），  （  Ｒ２，  Ｒ２  ），  （  Ｒ２，  Ｒ３  ），  （  Ｒ３，  Ｒ１  ），  （  Ｒ３，  Ｒ２  ），  （  Ｒ３，  Ｒ３  ）の９通りとなる。Ｓ５−５ａのループの先頭では、ループを回る度に例に示した担当ロボットセットの候補を１つづつ生成する。Ｓ５−５ｂでは生成された候補に対して、各ロボットの実行可否を判断し、可能であればＳ５−５ｃで各ロボットの担当タスク候補について動作プログラムを生成する。Ｓ５−５ｂおよびＳ５−５ｃの処理は図１のロボット動作計画部１１３に依頼される。
【００２４】
ロボット動作計画部１１３では、ワーク・部品情報１０４、幾何モデル１０６、ロボット情報１０８、展開ルール情報１１０を利用して、担当タスク候補に対する実行可否判断と動作プログラム生成を各ロボット別々に処理する。なお、ワーク部品情報や展開ルールなど作業用各種データベースを利用して、タスク記述（作業プログラム）からロボットの動作プログラムを生成する技術は、文献「新井，井床，野吾：産業用ロボット簡易教示システム，日本ロボット学会誌  Ｖｏｌ．１７，  Ｎｏ．２，  ｐｐ．１８６−１８９，  １９９９」などに開示されており、公知の技術である。ここでは、図２に示した組立作業を例に具体例を説明する。
図６はワーク・部品情報１０４の例を示している。図６において、６０１および６０２はそれぞれ部品Ａ、部品供給装置を示している。図中のｔｏｏｌ＿ｔｙｐｅは部品Ａを把持するのに適合するハンドのタイプを示している。ｐｏｓｉｔｉｏｎは部品Ａに固定された座標系６０３の原点の位置（姿勢を含む）を示している。この位置データは、部品が供給される部品供給装置６０２に固定された座標系６０４を基準にした値として記述されている。ａｐｐｒｏａｃｈ＿ｐｏｓは、ロボットを部品Ａの傍に接近させる際に、ロボットのＴＣＰを到達させる位置を示している。この位置データは部品Ａの座標系６０３を基準にした座標系６０５の原点位置として表される。ｃａｔｃｈ＿ｐｏｓは、ロボットが部品Ａを把持する際に、ロボットのＴＣＰを到達させる位置を示している。この位置データは部品Ａの座標系６０３を基準にした座標系６０６の原点位置として表される。ｌｅａｖｅ＿ｐｏｓは、ロボットが部品Ａを把持した後、部品供給装置から一定距離離脱する際に、ロボットのＴＣＰを到達させる位置を示している。この位置データは部品Ａの座標系６０３を基準にした座標系６０７の原点位置として表される。
【００２５】
ロボット動作計画部１１３の実行可否判断処理では、図６に示した部品情報を参照して、適合ツールがロボット自身あるいはツールホルダに保持されているか、座標系６０５から６０７の原点位置がロボットの動作範囲内にあるか、をチェックする。担当タスク候補が実行可能と判断された場合は、ロボット動作計画部１１３は展開ルール情報１１０に従って、タスク記述をサブタスクへと可能な限り展開する。図７は展開ルール情報１１０の例を示している。
図７において、７０１はＰｌａｃｅタスクの展開ルールを示している。これは、タスク記述  「Ｐｌａｃｅ    Ｘ    （  ｐｏｓｉｔｉｏｎ  ）  ｏｎ  Ｙ」を矢印（⇒）以降のサブタスクの列に展開することを示している。７０１内の「ＩＦ    Ｒｏｂｏｔ．ｔｏｏｌ＿ｔｙｐｅ  ！＝  Ｘ．ｔｏｏｌ＿ｔｙｐｅ    ｔｈｅｎ    ＣｈａｎｇｅＴｏｏｌ    Ｘ」は、ロボットが現在装着しているツールタイプが部品Ｘのツールタイプに一致しない場合にツールの交換（ＣｈａｎｇｅＴｏｏｌ    Ｘ）を行うことを示している。７０２は「ＣｈａｎｇｅＴｏｏｌ    Ｘ」の展開ルールを示している。７０１内の「Ａｐｐｒｏａｃｈ    Ｘ」はロボットのＴＣＰを部品Ｘのａｐｐｒｏａｃｈ＿ｐｏｓまで接近させるサブタスク記述である。「ＰｉｃｋＵｐ    Ｘ」はロボットに部品Ｘをピックアップさせるサブタスク記述である。７０３は「ＰｉｃｋＵｐ    Ｘ」の展開ルールを示している。このように、タスクがサブタスク列に、サブタスクがサブサブタスク列に次々に展開され、最終的にロボットコントローラが直接実行可能なロボット言語で記述された動作プログラムまでブレークダウンされる。その際、ワーク・部品情報１０４、幾何モデル１０６およびロボット情報１０８を参照して具体的なロボットの動作経路データを生成する。
【００２６】
ただし、「Ａｐｐｒｏａｃｈ    Ｘ」については、展開ルールに基づくタスク展開ではなく、ロボット動作計画部１１３内部で障害物回避軌道計算処理を行う。障害物回避軌道計算処理では、「Ａｐｐｒｏａｃｈ    Ｘ」の前のサブタスク終了位置を開始点として、ツールや把持ワークを含めたロボット全体が障害物と衝突しないように、ロボットのＴＣＰをＸのａｐｐｒｏａｃｈ＿ｐｏｓまで到達させる動作軌道を計算する。ただし、対象とするロボット以外のロボットの可動部分は障害物に含めず、対象ロボット自身と固定障害物との衝突回避を考慮する。
また、「Ａｐｐｒｏａｃｈ    Ｒｏｂｏｔ．ｈｏｍｅ＿ｐｏｓ」において、Ｒｏｂｏｔ．ｈｏｍｅ＿ｐｏｓは図１のロボット情報１０８に登録されたロボットのホーム位置である。このホーム位置は、ロボット同士が衝突する可能性の無い安全な領域内に設定する。このサブタスクは、「Ｐｕｔ    Ｘ    Ｙ．ｐｏｓｉｔｉｏｎ１」を実行後、ロボットを安全な領域内に固定障害物との衝突回避を考慮して退避させるためのものである。また、ロボットが図２の組み立てセルに登録された時点では、各ロボットは各ホーム位置にあるものとする。したがって、各ロボットが最初のタスクを実行するときは、必ずホーム位置から動作を開始するものとする。
【００２７】
以上のようにして、ロボット動作計画部１１３は図３（ａ）に示すタスク記述を図８に示すようなロボット言語で記述された動作プログラムに変換する。
タスクセットの担当ロボットセットの候補について、各ロボットの動作プログラム生成が終了すると、図５に示すロボット間衝突回避（Ｓ５−５ｄ）が行われる。この処理は、図１のロボット間衝突回避動作計画部１１５に依頼される。
ロボット間衝突回避動作計画部１１５は、Ｓ５−５ｃで生成された各ロボットの動作プログラムの各移動命令（ＭＯＶＪやＭＯＶＬ）の軌道、あるいはその軌道の経路に内分点を追加することによって複数に分割された各軌道に対して、ロボット同士が衝突せず、かつ全体の作業時間が最小となるように異なるロボット間での軌道の実行順序を決定し、その実行順序に従って各ロボットの各軌道を実行させられるように各動作プログラムに変更を加える。また、図１には、全体の作業時間が最小となる軌道の実行順序を決定するため、ロボット間衝突回避動作計画部１１５は内部に最適化処理部１１５ａを備えている。
【００２８】
図１０は、異なるロボット間での軌道の実行順序の例を示している。図１０において、Ａ１〜Ａ３、Ａ４−０〜Ａ４−３はロボットＡの移動命令の軌道を示している。Ｂ１−０〜Ｂ１−３、Ｂ２〜Ｂ４はロボットＢの移動命令の軌道を示している。ここで、Ａ４−０〜Ａ４−３は元々の移動命令Ａ４の軌道を４分割した軌道を示している。Ｂ１−０〜Ｂ１−３についても同様である。図中の矢印１１０５ａ〜１１０５ｃは異なるロボット間での軌道の実行順序を示している（冗長なものを省いて必要最小限の実行順序関係のみを記述）。例えば、１１０５ａはロボットＡの軌道Ａ３が実行された後にロボットＢの軌道Ｂ−１を実行させることを示している。
図１１は、図１０に示した軌道の実行順序にしたがって修正が加えられた動作プログラムの例を示している。１１０５ａ〜１１０５ｃの始点と終点にＩＯ命令（ＤＯＵＴおよびＷＡＩＴ）が挿入されている。図１１のＯＴ＃とＩＮ＃はロボットコントローラのＩＯ入出力チャンネル間の接続情報（ＩＯマップ）を参照して番号が割り振られる。
また図１０に示したように異なるロボット間での軌道の実行順序を計算することにより、複数ロボット全体の作業時間（図のＴｅ−Ｔｓ）を計算することが可能である。
【００２９】
図５のＳ５−５ｅでは、ｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔで示されるタスクセットについて、ロボット間衝突回避Ｓ５−５ｄを行った結果得られる作業時間を取得し、親ノード（ノードＮ）の作業時間合計値との和を該当タスクセットまで含めた作業時間合計値とする。このＳ５−５ｅは、タスク分配計画部１１１内部の評価基準計算部１１１ａの処理に相当する。
図５のＳ５−５ｆでは探索木のＯｐｅｎＬｉｓｔに新規ノードを作成し、Ｓ５−５ａで選択した担当ロボットセットの候補、Ｓ５−５ｄのロボット間衝突回避で求まる該当タスクセットの作業時間、Ｓ５−５ｅで計算した該当タスクセットまでの作業時間合計値を保存する。さらに、ノードＮのｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔを新規作成ノードのｐｔｒ＿ＣｕｒＴａｓｋＳｅｔとして保存し、図３（ｃ）のタスクセットリストからｐｔｒ＿ＣｕｒＴａｓｋＳｅｔに該当するタスクセットの次のタスクセットへのポインタを取得し、そのポインタを新規作成ノードのｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔとして保存する。
【００３０】
以上のＳ５−５ａ〜Ｓ５−５ｆまでの処理を全ての担当ロボットセットの候補について行い、Ｓ５−５ａにて候補の選択がすべて終了したと判断されると、Ｓ５−２に戻る。Ｓ５−４にてノードＮのｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔがＮｕｌｌとなった場合、タスクセットリストの最後のタスクセットまで探索処理が到達し、かつ、ノードＮが作業時間合計値の最小であることを意味している。その場合はＳ５−６にて、探索木のルートノードからノードＮへ至るツリー上の経路を解として保存する。実際には、ノードＮから親ノードを辿ってルートノードまでの経路を求めて順序を逆にする。
Ｓ５−７ではＳ５−６で保存された解の個数をカウントし、解が所定個数得られた場合は全ての処理を終了させ（Ｓ５−８ａ）、解の個数が所定個数以下の場合はＳ５−２に戻る。
Ｓ５−２にてＯｐｅｎＬｉｓｔからノードの選択に失敗した場合、ＯｐｅｎＬｉｓｔが空であり、全ての担当ロボットセットの候補について探索が終了したことを意味するので、全ての処理を終了する（Ｓ５−８ｂ）。
動作プログラムにしたがって、シミュレータ上のロボットあるいは実機ロボットを動作させる場合には、図３（ｃ）のタスクセットリストの先頭タスクセットから該当する動作プログラムを順次プレイバックすればよい。
【００３１】
以上説明したように、タスク分配・処理順の各候補に対する各ロボットの動作プログラムを作成する際、動作開始位置と動作終了位置をロボット同士が衝突することの無い安全な領域内に設定し、他のロボットを除いた固定障害物と該当ロボットとの衝突回避を考慮している。複数台のロボットが衝突する可能性がある場合は、該当するロボットの該当する動作プログラムを構成する動作命令の軌道、あるいはその軌道を有限個に分割した軌道それぞれに対して、該当する動作プログラム全体の作業時間が最小となるように異なるロボット間での軌道の実行順序を決定することによってロボット間の衝突を回避している。したがって、作業内のロボットの移動距離が長い場合や動作領域のほとんどをロボット間で共有する場合でも作業時間の増加を極力抑えることができ、なおかつロボット間でデッドロック状態が生じることがない。また、ロボット間衝突回避動作計画は、動作プログラム内の軌道を細かく分割するが、同一動作プログラム内での実行順序は変更しないので、演算量の急激な増加を抑えることができる。
【００３２】
つぎに、本発明に係わる第２の実施の形態を説明する。第２の実施の形態では、図５のロボット間衝突回避処理（Ｓ５−５ｄ）において、図３（ｃ）のタスクセットリストの先頭のタスクセットからＮｅｘｔＴａｓｋＳｅｔで指定されたタスクセットまでの全てのタスクセットを考慮し、そのタスクセット全てに係わるロボットの動作プログラムを対象として、ロボット間衝突回避動作計画を行う。例えば、図５のフローチャートにおいて、ｐｔｒ＿ＮｅｘｔＴａｓｋＳｅｔが図３（ｃ）のＴａｓｋＳｅｔ２を指している場合、Ｓ５−５ｄではＴａｓｋＳｅｔ１とＴａｓｋＳｅｔ２を含めてロボット間衝突回避動作計画を行う。
複数のタスクセットを含めてロボット間衝突回避動作計画を行う場合、タスク間の先後関係を満足するようにしなければならない。例えば、図３（ｂ）は、部品ＡおよびＢをワークＷに組み付けた後、部品ＣをワークＷに組み付けることを示している。そこで、タスク間の先後関係とロボット動作間の先後関係との対応を明確にするために、図９に示すようにトリガ入力箇所（ＴＲＧ＿ＩＮ）とトリガ出力箇所（ＴＲＧ＿ＯＵＴ）を予め記述した展開ルールを、展開ルール情報部（図１の１１０）に用意する。そして、ロボット間衝突回避動作計画部（図１の１１５）は内部の先後関係考慮部１１５ｂを使用して、先行タスクのＴＲＧ＿ＯＵＴ以降に後行タスクのＴＲＧ＿ＩＮ以降を動作させる制約の元でロボット間衝突回避動作計画を行う。つまり、部品Ａおよび部品Ｂの組み付け動作が完了する前に、ロボットに部品ＣをピックアップさせてワークＷ付近まで移動させることが可能となる。
【００３３】
また、連続する２つのタスクセットにおいて同じロボットが両方のタスクセットでタスクを実行する場合、Ｓ５−５ｃで別々の動作プログラムとして作成されたものを１つの動作プログラムに併合する処理を行う。ここでは、図１に示したようにロボット動作計画部１１３の内部に動作プログラム併合部１１３ａを実装する。動作プログラム併合部１１３ａは内部に軌道削除部１１３ａ１と軌道追加部１１３ａ２を備えている。軌道削除部１１３ａ１は、動作プログラムの最終作業点から終了位置への退避動作と次工程動作プログラムの開始位置から開始作業点へのアプローチ動作を削除する。そして、軌道追加部１１３ａ２は、動作プログラムの最終作業点と次工程動作プログラムの開始作業点間を移動する軌道を追加する。この移動軌道の削除処理と追加処理の働きによって２つの動作プログラムが１つに併合される。
以上説明したように、複数の動作プログラムを１つに併合する際にロボットの無駄な動作を削除し、かつ、タスク間の先後関係をロボット動作の先後関係に厳密に反映させてロボット間衝突回避を行っているので、ロボットの待ち時間がより短くなり、全体の作業時間がさらに短縮される。
【００３４】
つぎに、本発明に係わる第３の実施の形態を説明する。第３の実施の形態では、図１に示したタスク分配計画部１１１、タスク処理順計画部１１２、ロボット動作計画部１１３、ロボット間衝突回避動作計画部１１５をそれぞれ独立したソフトウエアオブジェクト（エージェント）として、計算機ネットワーク上に実装する。これらのエージェントは、タスク情報１０２を介して計算機ネットワーク上で分散処理を進める。また、タスク情報１０２も１つの独立したエージェントしても良い。
さらに、ロボット動作計画部１１３をロボットごとに独立したエージェントとして、計算機ネットワーク上に実装する。これらのエージェントは、タスク情報１０２を介して計算機ネットワーク上で並列かつ分散して処理を進める。
【００３５】
以上説明したように、ロボット動作計画部はロボット自身と固定障害物（他のロボットを除く）との衝突回避を考慮しているだけなので、ロボットごとの動作計画演算を独立に行うことができる。したがって、ロボット動作計画部をロボットごとに独立したエージェントとして計算機ネットワーク上に実装することにより、並列分散処理が可能となる。
【００３６】
【発明の効果】
以上述べたように本発明では、動作開始位置と動作終了位置をロボット同士が衝突することの無い安全な領域内に設定して各ロボットの動作プログラムを作成し、その動作プログラムをもとにロボット間衝突回避処理を行うので、ロボット間でデッドロック状態が生じることがないという効果がある。
また、ロボット間衝突回避動作計画部では、複数台ロボットの動作プログラムを構成する動作命令の軌道あるいはその軌道を有限個に分割した軌道それぞれに対して、ロボット同士が衝突せず、かつ全体の作業時間が最小となるように異なるロボット間の軌道の実行順序を決定しているので、作業内のロボットの移動距離が長い場合や動作領域のほとんどをロボット間で共有する場合でも作業時間の増加を極力抑えることができるという効果がある。
また、ロボット間衝突回避動作動作計画部は、動作プログラム内の軌道を細かく分割するが、同一動作プログラム内での実行順序は変更しないので、演算量の急激な増加を抑えることができるという効果がある。
また、複数の動作プログラムを１つに併合する際にロボットの無駄な動作を削除し、かつ、タスク間の先後関係をロボット動作の先後関係に厳密に反映させてロボット間衝突回避を行っているので、ロボットの待ち時間がより短くなり、全体の作業時間がさらに短縮される。
さらに、ロボット動作計画部はロボット自身と固定障害物（他のロボットを除く）との衝突回避を考慮しているだけなので、ロボット動作計画部をロボットごとに独立したエージェントとして計算機ネットワーク上に実装することにより並列分散処理が可能となるという効果もある。
【図面の簡単な説明】
【図１】本発明の実施の形態にかかわるロボット教示システムの構成図
【図２】組立ロボットセルの例を示す図
【図３】作業情報の例を示す図
【図４】本発明の実施の形態にかかわる探索木のデータ構造を示す図
【図５】本発明の実施の形態にかかわるタスク分配の優先探索のフローチャート
【図６】ワーク・部品情報の例を示す図
【図７】展開ルール情報の例を示す図
【図８】ロボットの動作プログラムの例を示す図
【図９】トリガ入出力箇所を指定した展開ルール情報の例を示す図
【図１０】ロボット間衝突回避動作計画の概要を示す図
【図１１】ロボット間衝突回避動作計画によって修正された動作プログラムの例を示す図
【図１２】従来例１の初期解を示す図
【図１３】従来例２のロボット間衝突回避の原理を示す図
【図１４】従来例３の動作原理を示す図
【図１５】従来例４の構成を示す図
【符号の説明】
１０１：タスク入力部
１０２：タスク情報
１０３：条件入力部
１０４：ワーク・部品情報
１０５：モデル入力部
１０６：幾何モデル
１０７：ロボット登録部
１０８：ロボット情報
１０９：ルール登録部
１１０：展開ルール情報
１１１：タスク分配計画部
１１２：タスク処理順計画部
１１１ａ，  １１２ａ：評価基準計算部
１１３：ロボット動作計画部
１１３ａ：動作プログラム併合部
１１３ａ１：軌道削除部
１１３ａ２：軌道追加部
１１４：動作プログラム
１１５：ロボット間衝突回避動作計画部
１１５ａ：最適化処理部
１１５ｂ：先後関係考慮部
２０１ａ〜２０１ｃ：ロボット
２０２：ベルトコンベヤ
２０３ａ〜２０３ｄ：部品供給装置
２０４ａ〜２０４ｃ：ツールホルダ
４０１：探索木のＣｌｏｓｅｄＬｉｓｔ
４０２：探索木のＯｐｅｎＬｉｓｔ
４０３ａ〜４０３ｆ：探索木ノードの親ノードへのポインタ
６０１：部品Ａ
６０２：部品供給装置
６０３：部品Ａに固定された座標系ΣＡ
６０４：部品供給装置に固定された座標系Σｐｆ１
６０５：部品Ａへの接近位置を示す座標系Σａｐｒｃｈ
６０６：部品Ａの把持位置を示す座標系Σｃａｔｃｈ
６０７：部品Ａ把持後の離脱位置を示す座標系Σｌｅａｖｅ
７０１：Ｐｌａｃｅタスクの展開ルール
７０２：ＣｈａｎｇｅＴｏｏｌサブタスクの展開ルール
７０３：ＰｉｃｋＵｐサブタスクの展開ルール
【図１】
2004243461.tif 000003
【図２】
2004243461.tif 000004
【図３】
2004243461.tif 000005
【図４】
2004243461.tif 000006
【図５】
2004243461.tif 000007
【図６】
2004243461.tif 000008
【図７】
2004243461.tif 000009
【図８】
2004243461.tif 000010
【図９】
2004243461.tif 000011
【図１０】
2004243461.tif 000012
【図１１】
2004243461.tif 000013
【図１２】
2004243461.tif 000014
【図１３】
2004243461.tif 000015
【図１４】
2004243461.tif 000016
【図１５】
2004243461.tif 000017