(57)【特許請求の範囲】
【請求項１】
教示データにしたがって作業する複数のロボットが互いに干渉しないように各ロボットの教示データを作成する作業教示方法において、
他のロボットの存在を無視して作成したロボット単体の単体教示データを全てのロボットに関して入力し、
複数ロボットの動作範囲が互いに重なり合う共有作業空間を複数領域に分割し、
各分割領域に番号付けした共有作業空間マップを作成し、
前記複数ロボットの前記各動作命令に対して、動作開始時刻から動作終了時刻までのタイムスロットごとにロボットの移動予定位置を求め、
全ての前記移動予定位置について、前記各ロボットが前記共有作業空間マップの何番の分割領域を占有するかを求め、
同一の前記タイムスロットにおいて複数のロボットが前記共有作業空間マップの同一番号の分割領域を占有せず、かつ前記複数ロボット全体の作業時間が最小となるように、
スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間マップの分割領域」に対応させて動作命令開始スケジュールを求める、
ことを特徴とする複数ロボットの作業教示方法。
【請求項２】
前記動作命令開始スケジュールの際に、
各動作命令をスケジューリング理論の「作業」と見なして動作命令処理時間単位に粗いマクロレベル大域スケジュールを求め、
前記共有作業空間マップの同じ分割領域を占有する「マクロレベル大域スケジュールのクリティカルパス」上の動作命令間に対して、動作命令をその開始時刻から終了時刻までタイムスロットごとに走査して、各移動予定位置においてロボットが前記共有作業空間マップ上で占有する分割領域が変化する度にその動作命令を仮想的なサブ動作命令に分割し、前記サブ動作命令をスケジューリング理論の「作業」と見なして局所範囲での細かなスケジュール（ミクロレベル局所スケジュール）を求め、
前記マクロレベル大域スケジュールを前記ミクロレベル局所スケジュールにより部分的に修正（大域スケジュールミクロレベル修正）する階層的なスケジューリングを行って前期動作命令開始スケジュールを求める、
ことを特徴とする請求項１に記載の複数ロボットの作業教示方法。
【請求項３】
前記動作命令開始スケジュールの際に、
複数ロボットの動作範囲が互いに重なり合う共有作業空間を定義し、
各動作命令を実行したときのロボットの一部あるいは全てのリンクモデルおよびツールモデルが共有作業空間内を通過（ｓｗｅｅｐ）する領域（占有領域）を求め、
スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間の部分領域」に対応させ、各動作命令をスケジューリング理論における「選択グラフ（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｇｒａｐｈ）のノード」とし、異なるロボット間の動作命令の占有領域同士を比較し、占有領域同士が交わる動作命令の対をスケジューリング理論における「選択枝（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｅｄｇｅ）」とし、予め指定された動作命令の実行順序（先後関係）をスケジューリング理論における「選択グラフのアーク」としてスケジューリング理論における「選択グラフ」を設定し、
前記選択グラフに基づいて干渉回避スケジューリングをする、
ことを特徴とする請求項１〜２のいずれか１項に記載の複数ロボットの作業教示方法。
【請求項４】
前記干渉回避スケジューリングは前記選択枝の向き、すなわちアーク、の組み合わせを決めることによって前記動作命令開始スケジュールを作成するものであり、
冗長なアークおよび冗長な選択枝を削除するルールを１つあるいは複数有し、
ロボット間衝突回避が保証されないアークと選択枝の組を排除するルールを１つあるいは複数有し、
前記ルールを逐次適用しながら前記干渉回避スケジューリングを行う、
ことを特徴とする請求項３に記載の複数ロボットの作業教示方法。
【請求項５】
動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する機能を有し、
一部の連続した動作命令を一つに併合して１つの動作命令とする機能を有し、
前記動作命令開始スケジュールを決定する前に教示者が分割あるいは併合する動作命令を指定して単体教示データセットを編集し、
編集済み単体教示データセット内の全ての動作命令（分割動作命令、併合動作命令、オリジナルの動作命令）を、便宜上、編集済み動作命令としたとき、各編集済み動作命令をスケジューリング理論の「作業」と見なして、動作命令開始スケジュールを作成し、
前記動作命令開始スケジュールにしたがって前記修正教示データを作成する際は、前記併合動作命令を元の連続した複数の動作命令に置き換え、
間にインタロック命令を挿入する必要の無い複数の連続した分割動作命令を１つの動作命令にまとめる、
ことを特徴とする請求項１〜４のいずれか１項に記載の複数ロボットの作業教示方法。
【請求項６】
動作命令の経路上に内分点を追加してその動作命令を分割する際、
分割された各動作命令の指令速度時間変化パターンが定速度領域を持つように内分点間隔の最小値を制限する、
ことを特徴とする請求項５に記載の複数ロボットの作業教示方法。
【請求項７】
教示データにしたがって作業する複数のロボットに対して、ロボットが互いに干渉しないように各ロボットの教示データを作成する装置であって、
他のロボットの存在を無視して作成したロボット単体の単体教示データを全てのロボットに関して入力する単体教示データセット入力手段と、
複数ロボットの動作範囲が互いに重なり合う共有作業空間を複数領域に分割し、各分割領域に番号付けした共有作業空間マップを作成する共有作業空間マップ作成手段と、
各ロボットの各動作命令に対して、動作開始時刻から動作終了時刻までのタイムスロットごとのロボットの移動予定位置を求める移動予定位置計算手段と、
各ロボットの各動作命令の前記各タイムスロットでの移動予定位置に対して、ロボットが前記共有作業空間マップの何番の分割領域を占有するかを求める共有作業空間占有状態計算手段と、
同一の前記タイムスロットにおいて複数のロボットが前記共有作業空間マップの同一番号の分割領域を占有せず、かつ複数ロボット全体の作業時間、すなわち最大完了時刻、が最小となるように、
スケジューリング理論における「仕事」、「機械」の概念をそれぞれ「単体教示データ」、「共有作業空間マップの分割領域」に対応させ、各動作命令をスケジューリング理論の「作業」と見なして動作命令処理時間単位の粗いスケジュールを求めるマクロレベル大域スケジューリング手段と、
前記共有作業空間マップの同じ分割領域を占有する「マクロレベル大域スケジュールのクリティカルパス」上の動作命令間に対して、動作命令をサブ動作命令に分割し、サブ動作命令をスケジューリング理論の「作業」と見なして局所範囲での細かなスケジュールを求めるミクロレベル局所スケジューリング手段と、
前記マクロレベル大域スケジューリング手段により得られた大域スケジュールを、前記ミクロレベル局所スケジューリング手段により得られた局所スケジュールを利用して、部分的に修正する大域スケジュールミクロレベル修正手段と
を備えたことを特徴とする複数ロボットの作業教示装置。
【請求項８】
前記動作命令開始スケジュール作成手段は、
複数ロボットの動作範囲が互いに重なり合う共有作業空間を定義する共有空間定義手段と、
各動作命令を実行したときにロボットの一部あるいは全てのリンクモデルおよびツールモデルが共有作業空間内を通過（ｓｗｅｅｐ）する領域（占有領域）を求める動作命令占有領域計算手段と、
スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間の部分領域」に対応させ、各動作命令をスケジューリング理論における「選択グラフ（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｇｒａｐｈ）のノード」とし、異なるロボット間の動作命令の占有領域同士を比較し、占有領域同士が交わる動作命令の対をスケジューリング理論における「選択枝（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｅｄｇｅ）」とし、予め指定された動作命令の実行順序（先後関係）をスケジューリング理論における「選択グラフのアーク」として、スケジューリング理論における「選択グラフ」を設定する選択グラフ設定手段と、
前記選択グラフ設定手段によって設定された選択グラフに基づいて前記動作命令開始スケジュールを計算する干渉回避スケジューリング手段と、
を備えたことを特徴とする請求項７に記載の複数ロボットの作業教示装置。
【請求項９】
前記干渉回避スケジューリング手段は、スケジューリングの最中に逐次、冗長なアークおよび冗長な選択枝の存在を調べてこれを削除する冗長アーク・冗長選択枝削除手段と、
スケジューリングの最中に逐次、ロボット間衝突回避が保証されない不適切なアークと選択枝の組みの存在を調べてこれを排除するアーク選択手段と、
を備えたことを特徴とする請求項８に記載の複数ロボットの作業教示装置。
【請求項１０】
動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する機能と、
一部の連続した動作命令を一つに併合して１つの動作命令とする機能を使用して、前記動作命令開始スケジュールを作成する前に教示者が分割あるいは併合する動作命令を指定して単体教示データセットを編集する単体教示データセット編集手段を備え、
編集済み単体教示データセット内の全ての動作命令（分割動作命令、併合動作命令、オリジナルの動作命令）を、便宜上、編集済み動作命令としたとき、前記選択グラフ設定手段は、各編集済み動作命令をスケジューリング理論の「作業」と見なして選択グラフを設定し、
前記動作命令開始スケジュールにしたがって前記修正教示データを作成する際、前記単体教示データセット修正手段は、前記併合動作命令を元の連続した複数の動作命令に置き換え、
間にインタロック命令を挿入する必要の無い複数の連続した分割動作命令を１つの動作命令にまとめる、
ことを特徴とする請求項７〜９のいずれか１項に記載の複数ロボットの作業教示装置。
【請求項１１】
前記単体教示データセット編集手段は、動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する際に、
分割された各動作命令の指令速度時間変化パターンが一定速度領域を有するように内分点間隔の最小値を制限する分割間隔制限手段、
を備えたことを特徴とする請求項１０に記載の複数ロボットの作業教示装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、教示データにしたがって作業する複数のロボットの教示方法と教示装置に関するものであり、特に複数のロボットが互いに干渉を起こさず、全体の作業時間を短くすることができる教示方法と教示装置に関する。
【０００２】
【従来の技術】
自動車の生産ラインでは、複数台の産業用ロボットマニピュレータを投入して、スポット溶接などの作業を自動化している。ここでは、多数のロボットが互いの動作領域が重なり合うほど近接して配置されている。
このような近接する複数のロボットの教示作業は、従来、教示者が個々のロボットの動作を１ステップづつ実際に動作させながら、複数ロボット間で干渉が生じないように各ロボットの動作軌道と、各動作軌道間の実行タイミング（インタロック）を試行錯誤的に教示していた。しかし、教示者による試行錯誤的な教示では、複数のロボットを安全かつ効率的に動作させるのが非常に難しいという問題がある。複数のロボットを効率的に動作させようとすると、その教示作業は非常に複雑になり、かつ教示および動作確認に非常に時間がかかる。特に、製品の種類が頻繁に変わる多品種少量生産では、製品の種類が変更される度に教示者が教示作業を全てやり直すことになるので、実際にロボットが稼動して生産を行なう直接工程よりも、教示作業などの間接工程時間の比率が増大し、生産性が極端に低下してしまう。また、教示者が教示作業に直接に係わる割合が大きいので、人件費の高騰も問題となる。
【０００３】
近年では、教示者による直接教示に代わって、計算機を用いて複数ロボットの教示作業と動作制御を効率化する方法や装置が提案されている。
例えば、特開平11−347984「ロボット制御装置」では、複数ロボット間の干渉を回避し、なおかつロボットの待ち時間を最小にして効率的にロボットを動作させる制御装置が開示されている。図２２は、そのロボット制御装置の動作原理を説明している。同図において、(A)は、ロボットＡとロボットＢの作業点と作業点間の動作経路を示している。(B)は、(A)の作業点データをもとに干渉抽出手段によって計算されたロボットＡとＢの作業点間の干渉テーブルを示している。(C)は、非干渉通過順序決定手段により計算された干渉する作業点におけるロボットの優先順序テーブルを示している。図２２(B)は、ロボットＡとロボットＢが、作業点2aと2b、3aと3b、4aと4bで同時に作業を行なうと干渉が生じることを示している。図２２(C)は、ロボットＢの作業2b,3b,4bに優先させてロボットＡの作業2a,3a,4aを実行させることを示している。優先順位テーブルを作成する際、各ロボットの残りの作業時間と作業点での待ち時間の和を比較して、長い方を選択することにより優先順位を決定している。
【０００４】
また、特開平7−44214「ロボット群の制御システム」には、各ロボットに割り当てられた作業プログラム群の中から、ロボット相互の干渉を回避する適切なタスクを選択して実行させる制御システムが開示されている。図２３は、この制御システムのフローチャートを示している。同図の隣接ロボット干渉チェック領域定義手順（S1a〜S4a）は、タスク実行中の隣接ロボットが現在位置からタスク終了までに作業空間を掃引する領域を求める。対象ロボット干渉チェック領域定義手順（S1〜S3）は未実行のタスクそれぞれに対して、タスク開始からタスク終了までに対象ロボットが作業空間を掃引する領域を求める。同図のS5において、隣接ロボット干渉チェック領域と未実行タスク群に対する対象ロボット干渉チェック領域の干渉チェックを行ない、現在タスク実行中の隣接ロボットに干渉せずに実行できる対象ロボットのタスク候補が選択される。S6において、特定のルール（例えば対象ロボットの現在位置から最も近いタスクを選択）に基づいて実行するタスクが選択・決定される。
【０００５】
【発明が解決しようとする課題】
特開平11−347984「ロボット制御装置」で開示された方法を図２２で説明すると、ロボットＡが作業点2aの作業を終えて干渉領域2aを通過し終えるまで、ロボットＢを作業点1bで待機させている。しかしながら、実際には、ロボットＢが作業点1bから2bに移動するための時間があるため、必ずしもロボットＡが干渉領域2aを通過するまでロボットＢを作業点1bに待機させておく必要はない。つまり、全体の作業時間を更に短縮できる余地は十分残されているが、作業点間の移動軌道については何も考慮していないため、この方法ではこれ以上対処できないという問題がある。
【０００６】
特開平7−44214「ロボット群の制御システム」に開示されている方法では、各ロボットのタスク開始位置と終了位置およびその間の動作経路を用いて、タスク開始から終了までロボットが作業空間を掃引する領域を干渉チェック領域としている。したがって、実際には一方のロボットがタスクを途中まで実行した時点で他方のロボットのタスクを開始させても干渉が生じない場合でも、前者ロボットのタスク終了まで後者ロボットは待機してしまう。この方法においても、作業時間を更に短縮できる余地が十分残されているが、この方法の枠組みではこれ以上対処できないという同様の問題を持つ。
【０００７】
さらに、上述した２つの方法は、複数ロボットの教示作業の大半を自動化するための方法を提示しているが、教示者の主観、経験則や意図を反映する構造にはなっていないため、現場での教示者による微妙な調整が困難であるという問題もある。
【０００８】
本発明は、上記問題に鑑みてなされたものであり、作業点だけでなく作業点間の移動軌道も考慮し、作業実行中についても一定時間間隔ごとに干渉回避を保証することにより、複数ロボット全体の作業時間が最小となる教示データを作成する方法、およびその方法を実施する装置を提供することを目的とする。
さらに、教示者の主観、経験則や意図を教示データ作成のプロセスに取り入れ、現場での微妙な調整を行ない易い複数ロボットの教示データを作成する方法、およびその方法を実施する装置を提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記課題を解決するため、請求項１記載の複数ロボットの作業教示方法は、教示データにしたがって作業する複数のロボットに対して、ロボットが互いに干渉しないように各ロボットの教示データを作成する方法において、ロボット単体のみを考慮し、他のロボットの存在を無視して作成したロボット単体の教示データ（単体教示データ）を全てのロボットに関して入力し、複数ロボットの動作範囲が互いに重なり合う共有作業空間を複数領域に分割し、各分割領域に番号付けした共有作業空間マップを作成し、各ロボットの各動作命令それぞれに対して、動作開始時刻から動作終了時刻までの一定時間間隔（タイムスロット）ごとのロボットの移動予定位置を求め、各ロボットの各動作命令の前期各タイムスロットでの移動予定位置について、ロボットが前記共有作業空間マップのどの（何番の）分割領域を占有するかを求め、同一の前記タイムスロットにおいて複数のロボットが前記共有作業空間マップの同一番号の分割領域を占有せず、かつ前記複数ロボット全体の作業時間が最小となるように、スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間マップの分割領域」に対応させて動作命令開始スケジュールを求めることを特徴としている。請求項２記載の複数ロボットの作業教示方法は、前記動作命令開始スケジュールの際に、各動作命令をスケジューリング理論の「作業」と見なして動作命令処理時間単位の粗いスケジュール（マクロレベル大域スケジュール）を求め、前記共有作業空間マップの同じ分割領域を占有する「マクロレベル大域スケジュールのクリティカルパス」上の動作命令間に対して、動作命令をその開始時刻から終了時刻までタイムスロットごとに走査して、各異動予定位置においてロボットが前記共有作業空間マップ上で占有する分割領域が変化する度にその動作命令をサブ動作命令に分割し、このサブ動作命令をスケジューリング理論の「作業」と見なして局所範囲での細かなスケジュール（ミクロレベル局所スケジュール）を求め、前記マクロレベル大域スケジュールを前記ミクロレベル局所スケジュールにより部分的に修正（大域スケジュールミクロレベル修正）する階層的なスケジューリングを行って前期動作命令開始スケジュールを求めることを特徴としている。また、請求項３記載の複数ロボットの作業教示方法は、前記動作命令開始スケジュールの際に、複数ロボットの動作範囲が互いに重なり合う共有作業空間を定義し、各動作命令を実行したときのロボットの一部あるいは全てのリンクモデルおよびツールモデルが共有作業空間内を通過（ｓｗｅｅｐ）する領域（占有領域）を求め、スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間の部分領域」に対応させ、各動作命令をスケジューリング理論における「選択グラフ（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｇｒａｐｈ）のノード」とし、異なるロボット間の動作命令の占有領域同士を比較し、占有領域同士が交わる動作命令の対をスケジューリング理論における「選択枝（Ｄｉｓｊｕｎｃｔ���ｖｅ  Ｅｄｇｅ）」とし、予め指定された動作命令の実行順序（先後関係）をスケジューリング理論における「選択グラフのアーク」としてスケジューリング理論における「選択グラフ」を設定し、前記選択グラフに基づいて干渉回避スケジューリングをすることを特徴としている。また、請求項４記載の複数ロボットの作業教示方法は、前記干渉回避スケジューリングは前記選択枝の向き、すなわちアーク、の組み合わせを決めることによって前記動作命令開始スケジュールを作成するものであり、冗長なアークおよび冗長な選択枝を削除するルールを１つあるいは複数有し、ロボット間衝突回避が保証されないアークと選択枝の組を排除するルールを１つあるいは複数有し、前記ルールを逐次適用しながら前記干渉回避スケジューリングを行うことを特徴としている。また、請求項５記載の複数ロボットの作業教示方法は、動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する機能を有し、一部の連続した動作命令を一つに併合して１つの動作命令とする機能を有し、前記動作命令開始スケジュールを決定する前に教示者が分割あるいは併合する動作命令を指定して単体教示データセットを編集し、編集済み単体教示データセット内の全ての動作命令（分割動作命令、併合動作命令、オリジナルの動作命令）を、便宜上、編集済み動作命令としたとき、各編集済み動作命令をスケジューリング理論の「作業」と見なして、動作命令開始スケジュールを作成し、前記動作命令開始スケジュールにしたがって前記修正教示データを作成する際は、前記併合動作命令を元の連続した複数の動作命令に置き換え、間にインタロック命令を挿入する必要のない複数の連続した分割動作命令を１つの動作命令にまとめることを特徴としている。また、請求項６記載の複数ロボットの作業教示方法は、動作命令の経路上に内分点を追加してその動作命令を分割する際、分割された各動作命令の指令速度時間変化パターンが定速度領域を持つように内分点間隔の最小値を制限することを特徴としている。また、請求項７記載の複数ロボットの作業教示装置は、教示データにしたがって作業する複数のロボットに対して、ロボットが互いに干渉しないように各ロボットの教示データを作成する装置であって、ロボット単体のみを考慮し、他のロボットの存在を無視して作成したロボット単体の単体教示データ（単体教示データ）を全てのロボットに関して入力する単体教示データセット入力手段と、複数ロボットの動作範囲が互いに重なり合う共有作業空間を複数領域に分割し、各分割領域に番号付けした共有作業空間マップを作成する共有作業空間マップ作成手段と、各ロボットの各動作命令に対して、動作開始時刻から動作終了時刻までの一定時間間隔（タイムスロット）ごとのロボットの移動予定位置を求める移動予定位置計算手段と、各ロボットの各動作命令の前記各タイムスロットでの移動予定位置に対して、ロボットが前記共有作業空間マップのどの（何番の）分割領域を占有するかを求める共有作業空間占有状態計算手段と、同一の前記タイムスロットにおいて複数のロボットが前記共有作業空間マップの同一番号の分割領域を占有せず、かつ複数ロボット全体の作業時間、すなわち��大完了時刻、が最小となるように、スケジューリング理論における「仕事」、「機械」の概念をそれぞれ「単体教示データ」、「共有作業空間マップの分割領域」に対応させ、各動作命令をスケジューリング理論の「作業」と見なして動作命令処理時間単位の粗いスケジュールを求めるマクロレベル大域スケジューリング手段と、前記共有作業空間マップの同じ分割領域を占有する「マクロレベル大域スケジュールのクリティカルパス」上の動作命令に分割し、サブ動作命令をスケジューリング理論の「作業」と見なして局所範囲での細かなスケジュールを求めるミクロレベル局所スケジューリング手段と、前記マクロレベル大域スケジューリング手段により得られた大域スケジュールを、前記ミクロレベル局所スケジューリング手段により得られた局所スケジュールを利用して、部分的に修正する大域スケジュールミクロレベル修正手段とを備えたことを特徴としている。また、請求項８記載の複数ロボットの作業教示装置は、前記動作命令開始スケジュール作成手段が、複数ロボットの動作範囲が互いに重なり合う共有作業空間を定義する共有空間定義手段と、各動作命令を実行したときにロボットの一部あるいは全てのリンクモデルおよびツールモデルが共有作業空間内を通過（ｓｗｅｅｐ）する領域（占有領域）を求める動作命令占有領域計算手段と、スケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念をそれぞれ「単体教示データ」、「動作命令」、「共有作業空間の部分領域」に対応させ、各動作命令をスケジューリング理論における「選択グラフ（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｇｒａｐｈ）のノード」とし、異なるロボット間の動作命令の占有領域同士を比較し、占有領域同士が交わる動作命令の対をスケジューリング理論における「選択枝（Ｄｉｓｊｕｎｃｔｉｖｅ  Ｅｄｇｅ）」とし、予め指定された動作命令の実行順序（先後関係）をスケジューリング理論における「選択グラフのアーク」として、スケジューリング理論における「選択グラフ」を設定する選択グラフ設定手段と、前記選択グラフ設定手段によって設定された選択グラフに基づいて前記動作命令開始スケジュールを計算する干渉回避スケジューリング手段とを備えたことを特徴としている。また、請求項９記載の複数ロボットの作業教示装置は、前記干渉回避スケジューリング手段が、スケジューリングの最中に逐次、冗長なアークおよび冗長な選択枝の存在を調べてこれを削除する冗長アーク・冗長選択枝削除手段と、スケジューリングの最中に逐次、ロボット間衝突回避が保証されない不適切なアークと選択枝の組みの存在を調べてこれを排除するアーク選択手段とを備えたことを特徴としている。また、請求項１０記載の複数ロボットの作業教示装置は、動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する機能と、一部の連続した動作命令を一つに併合して１つの動作命令とする機能を使用して、前記動作命令開始スケジュールを作成する前に教示者が分割あるいは併合する動作命令を指定して単体教示データセットを編集する単体教示データセット編集手段を備え、編集済み単体教示データセット内の全ての動作命令（分割動作���令、併合動作命令、オリジナルの動作命令）を、便宜上、編集済み動作命令としたとき、前記選択グラフ設定手段は、各編集済み動作命令をスケジューリング理論の「作業」と見なして選択グラフを設定し、前記動作命令開始スケジュールにしたがって前記修正教示データを作成する際、前記単体教示データセット修正手段は、前記併合動作命令を元の連続した複数の動作命令に置き換え、間にインタロック命令を挿入する必要のない複数の連続した分割動作命令を１つの動作命令にまとめることを特徴としている。また、請求項１１記載の複数ロボットの作業教示装置は、前記単体教示データセット編集手段が、動作命令に対してその経路上に内分点を追加してその動作命令を複数個の連続した動作命令に分割する際に、分割された各動作命令の指令速度時間変化パターンが一定速度領域を有するように内分点間隔の最小値を制限する分割間隔制限手段を備えたことを特徴としている。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態を、図を参照して説明する。
図４は２台の隣接するロボットとその作業空間を示している。同図において、401a, 401bはそれぞれロボットＡ、ロボットＢであり、402a, 402bはロボットＡ、ロボットＢの各動作範囲である。403は動作範囲402aと402bが重なり合う領域であり、共有作業空間である。なお、以降、説明を簡略化するため、図４のように2次元作業空間における2台のロボットについて話を進めるが、本発明はこれにとらわれるものではなく、3次元作業空間における任意の台数、任意の自由度のロボットに対して同様に適用できる。
【００１１】
図５はロボットＡ、ロボットＢに割り当てられた作業点（Pa1〜Pa3, Pb1〜Pb3）と作業点間の移動順序を示している。作業点Pa1〜Pa3がロボットＡに割り当てられた作業点であり、Pb1〜Pb3がロボットＢに割り当てられた作業点である。Pa0、Pb0はそれぞれロボットＡ、ロボットＢの動作開始位置である。図６は図５に示した作業を、互いに他方のロボットの存在を無視してロボットＡ、ロボットＢに教示したJOBデータ（単体教示データ）を示している。図６では、作業点での作業をスポット溶接とした例である。これ以外にも、アーク溶接やハンドリング作業などさまざまな作業に適用できる。また、以降、ロボットＡの単体教示データ（図６(a)）とロボットＢの単体教示データ（図６(b)）を併せて単体教示データセットと呼ぶ。
【００１２】
互いに他方のロボットの存在を無視して教示しているので、図６(a)、(b)のJOBを不適切なタイミングで実行すると2台のロボットは干渉を起こしてしまう。例えば、両者を同時に実行するとロボットＡがPa1からPa2に移動し、ロボットＢがPb1からPb2に移動する途中で干渉が起きる。本発明は、図６に示した単体教示データセットを、各ロボットが互いに干渉せず、なおかつ全体の作業時間が最小あるいはできるだけ短くなるように修正するものである。
【００１３】
図１に本発明の第１の実施の形態に係わる複数ロボットの作業教示方法のフローチャートを示す。
図のS1-1では、図６に示したような単体教示データセット、すなわち複数ロボットの単体教示データ、を入力する。
S1-2では、S1-3, S1-5などにおける処理分岐方向を選択するパラメータ（Flag1, Flag2）を指定する。
まず、Flag1, Flag2がすべてFalseの場合の処理を説明する。
【００１４】
これらがすべてFalseの場合、S1-1にて単体教示データセットが入力された後、S1-7にて単体教示データセット内の各動作命令の開始時刻（動作命令開始スケジュール）をＫ通り決定し、S1-8にて決定したＫ通りの動作命令開始スケジュールにしたがって単体教示データセットの修正が行なわれる。すなわち、S1-8では修正された各ロボットの教示データ（修正教示データセット）がＫ通り作成される。ここで、Ｋは１以上の整数である。
【００１５】
図２は、図１の動作命令開始スケジュール決定部（S1-7）の内部フローチャートを示している。図２より、動作命令開始スケジュール決定部（S1-7）は、動作命令開始スケジュール作成部（S2-1）と動作命令開始スケジュール選択部（S2-2）の２つの処理に大別される。
動作命令開始スケジュール作成部（S2-1）は、共有作業空間マップ作成部（S2-1a）、各動作命令の移動予定位置計算部（S2-1b）、共有作業空間の占有状態計算部（S2-1c）、干渉回避スケジューリング（S2-1d）に大別される。
以下、この順番に処理の詳細を説明する。
【００１６】
共有作業空間マップ作成部（S2-1a）では、図７の404に示すようにロボットＡ、ロボットＢの共有作業空間403（図４参照）を複数のブロック領域に分割し、各ブロック領域に番地を割り付けた共有作業空間マップを作成する。
各動作命令の移動予定位置計算部（S2-1b）では、図６に示した各動作命令に対して、動作開始時刻から終了時刻まで一定時間間隔、すなわちタイムスロット、ごとの移動予定位置を求める。図８は、図６(a)に示したロボットＡの単体教示データの001：MOVL  Pa1, VL=100,…を例にして、各タイムスロットごとの移動予定位置計算過程を模式的に示したものである。始点、終点、速度パラメータVLおよび速度指令の生成パターンから計算可能である。
【００１７】
共有作業空間の占有状態計算部（S2-1c）では、各ロボットの各動作命令の各タイムスロットに対して、ロボットの幾何モデルと共有作業空間マップ404の各ブロック領域との干渉チェックを行なう。図９は、図８に示した例について、各タイムスロットにおける干渉チェックの様子を模式的に示したものである。図９において、405は各タイムスロットにおけるロボットのエンドエフェクタの位置（TCP）を示している。例えば、図９においてロボットＡが作業点Pa1に到達した最後のタイムスロットでは、ロボットＡは共有作業空間マップの02〜07番のブロック領域と干渉している。
【００１８】
具体的に、ロボットＡと共有作業空間マップとの干渉チェックを行なうには、まず、ロボットＢの作業領域402b（円あるいは球）とロボットＡモデルとの干渉チェックを行なう。ロボットＡモデルがロボットＢ作業領域402bと干渉する場合のみ、共有作業空間マップの各ブロック領域とロボットモデルＡとの干渉チェックを行なう。こうすることにより、干渉チェック計算の無駄を省くことができる。また、図１０に示すように共有作業空間マップ404aの各ブロック領域を階層的に管理し、上位階層のブロック（404b1,404b2,404b3, …）から下位階層のブロック（404c1,404c2, …）に向かって干渉チェックを進めていくことにより、最終的にどの（何番）のブロック領域とロボットモデルが干渉するかを高速に特定することができる。
【００１９】
以上のように行なった各動作命令ごとの（各タイムスロットにおける）干渉チェック結果は、図１１に示すコマンドデータに、各タイムスロットにおける移動予定位置と干渉するブロック領域リスト、および共有作業空間マップの占有情報（共有作業空間マップのブロック領域を占有するタイムスロット区間のリスト）として保存される。
【００２０】
つぎに、干渉回避スケジューリング（S2-1d）では、図１１の上記干渉チェック結果を参照して、各ロボットが干渉しないように各動作命令の開始時刻のスケジュール候補をＫ通り以上作成する。（S2-1d）のスケジュール候補作成は、図２に示すように、マクロレベル大域スケジューリング（S2-1d-a）とミクロレベル局所スケジューリング（S2-1d-b）、大域スケジュールミクロレベル修正（S2-1d-c）の３つのステップに別れている。以下、（S2-1d-a）, （S2-1d-b）, （S2-1d-c）の順に処理の内容を説明する。
【００２１】
（S2-1d-a）でマクロレベル大域スケジュールを作成するにあたり、「単体教示データ」、「動作命令」、「共有作業空間マップのブロック領域」をそれぞれスケジューリング理論における「仕事（ジョブ）」、「作業（オペレーション）」、「機械（マシン）」の概念に対応させてスケジューリング方式を適用する。
図１２は、上記定式化における選択グラフを示している（選択グラフについては公知の技術）。同図において、ＳとＴはスケジュールの始点と終点を表す特別なノードである。その他のノードは、図６に示したロボットＡ、ロボットＢの単体教示データ（仕事）の動作命令（作業）を示している。A001〜A006がそれぞれロボットＡの001〜006、B001〜B006がそれぞれロボットＢの001〜006の動作命令に対応している。ノード内に括弧で示した数字は、その動作命令の動作時間（作業の処理時間）である。ノード間を結ぶ実線の有向枝は、動作命令（作業）の実行順序を示している。ノードの上あるいは下に付記した番号は、そのノードに対応する動作命令を実行したときに占有する共有作業空間マップのブロック領域（機械）番号を示している。破線の無向枝は選択枝と呼ばれ、ロボット間の動作命令の干渉関係を表している。すなわち、共有作業空間マップの同じ番号のブロック領域を占有するため、同時刻には実行できない可能性のある動作命令を示している。また、有向枝のコスト（長さ）は始点ノードにおける動作命令の動作時間とする。
【００２２】
上述した選択グラフを用いると、スケジューリング問題は「選択グラフに閉路が生じないように、選択枝の方向を定めること」と一般化できる。このように一般化した後は、分岐限定法（公知の技術）などにより、クリティカルパス（ＳからＴへ至る最長路）が最小（最大完了時刻の最小化）あるいはできるだけ小さくなるスケジュール候補を複数求めることができる。
【００２３】
図１３に、図１２の選択枝の方向を定めたスケジューリング候補の１つを示す。選択枝は全てロボットＡの移動コマンドからロボットＢの移動コマンドの方向に向いている。また、太線はクリティカルパスを示しており、その経路長は12.5である。また、図１４に図１３のスケジュールのガントチャートを示す。
【００２４】
ここで、図１３のA003およびB003ノードに付記した共有作業空間マップの占有ブロック領域は、ロボットが該当する動作命令実行中に通過するブロック領域を全て列挙したものであり、動作命令開始から終了まで全てのブロック領域を占有し続けるわけではない。したがって、上記のように求めたマクロレベル大域スケジュールは、粗いスケジュールであり、まだサイクルタイムを短縮できる余地がある。
【００２５】
ミクロレベル局所スケジューリング（S2-1d-b）では、マクロレベル大域スケジュールで求めたクリティカルパス上の選択枝で結ばれた動作命令間に対して、動作命令がタイムスロットごとに共有作業空間マップの何番のブロック領域を占有するかを考慮することによって、局所スケジュールを詳細に作成する。
【００２６】
図１３に示したマクロレベル大域スケジュールを例に取れば、A003およびB003に対してミクロレベル局所スケジューリングを行なう。図１５に図１３のA003およびB003ノード間ミクロレベル局所スケジュールの選択グラフを示す。図１５に示したA003-1〜A003-5およびB003-1〜B003-5は、図１３のA003およびB003を動作命令開始時刻からタイムスロットごとに走査して、占有する共有作業空間マップのブロック領域が変化する度に仮想的なサブ動作命令に分割することにより生成する。図１５を例に説明すれば、A003の動作命令を実行すると、ロボットＡは最初の0.5秒間で02〜07番のブロック領域を占有し、つぎの0.5秒間で05、06、08、09番のブロック領域を占有し、つぎの0.5秒間で08、09、11、12番のブロック領域を占有する。
【００２７】
ミクロレベル局所スケジュールもマクロレベル大域スケジュールと全く同様の方式により解を複数求めることが可能である。図１６に図１５の選択グラフにおけるスケジュール候補の１つとそのクリティカルパスを示す。図１７には、図１６のスケジュールのガントチャートを示す。
【００２８】
大域スケジュールミクロレベル修正（S2-1d-c）では、ミクロレベル局所スケジューリングの結果を用いて、先に求めたマクロレベル大域スケジュールをミクロレベルで修正する。具体的には、マクロレベル大域スケジュールのミクロレベル局所スケジューリング対象個所に対して、ミクロレベル局所スケジューリングで短縮された時間分だけシフトさせる。図１６および図１７の例では、A003およびB003の最大動作完了時間は3.5秒なので、図１４のマクロレベル大域スケジュールの最大完了時刻は1.5秒短縮され、最終的に図１８の大域スケジュールが得られる。
【００２９】
S2-1d-aのマクロレベル大域スケジューリングでは、動作命令の最大完了時刻を評価関数として、最大Ｌ通りのスケジュール候補を作成する。このＬ通りのスケジュール候補それぞれに対して、S2-1d-bのミクロレベル局所スケジューリングを行なう。ミクロレベル局所スケジューリングでも、同様に動作命令の最大完了時刻を評価関数として、最大Ｎ通りのスケジュール候補を作成する。第ｉ番目のマクロレベル大域スケジュールには、Mi個所のミクロレベル局所スケジューリング対象個所があるとした場合、S2-1d-cで得られる大域スケジュールの候補は最大、
【００３０】
【数１】
0004228387.tif 000002
通りになる。
【００３１】
図２のS2-1において、動作命令開始時刻スケジュール候補の作成が終了すると、S2-2では、作成したＨ通りのスケジュール候補の中からＫ通りのスケジュールを選択する。S2-2aにおけるFlag3は、スケジュールを自動選択するか、教示者の判断で選択するかを指定するフラグである。このFlag3も図１のS1-2において指定する。
【００３２】
自動選択を行なう場合（Flag3=False）には、S2-2bにおいてＨ通りのスケジュール候補の中から最大完了時刻（全ての動作命令が完了する時刻）が小さいものから順番にＫ通りのスケジュールを選択し、処理を終了する（S2-3）。
教示者の判断でスケジュールの選択を行なう場合（Flag3=True）は、まず、S2-2cにて、Ｈ通りのスケジュールに基づく各ロボットの動作を、ロボットシミュレータなどを利用して視覚化する。教示者はロボットシミュレータ上での動作を確認し、S2-2dにおいて、教示者の主観、あるいは教示者の経験則などに基づいてＫ通りのスケジュールを選択する。Realistic Robot Simulator（RRS）が実装されているロボットシミュレータを用いて動作確認を行なえば、実機動作に近い動作を再現することができる（RRSについては公知の技術）。スケジュールが教示者の判断基準を満たす場合は、処理を終了する（S2-3）。教示者の判断基準を満たさない場合は、S2-2eにて全ての処理を終了するか（図１のS1-11）、図１のS1-2に戻るかを教示者が判断する。
【００３３】
以上説明した処理に沿って、S1-7にてＫ通りの動作命令開始スケジュールが決定されると、S1-8ではＫ通りのスケジュールにしたがって各ロボットを動作させられるように、図６に示した単体教示データセットを修正し、Ｋ通りの修正教示データセットを作成する。
実際に２台のロボットを動作させる場合、例えば、ロボットＡとロボットＢのデジタル入出力（DIO）チャンネルを図１９のように結線し、互いの教示データ間でDOUT OT#N ON/OFF, WAIT IN#N=ON/OFF（Nはチャンネル番号）を組み合わせることにより、動作命令の実行タイミングを制御（インタロック）する。
【００３４】
まず、S1-8では、図１７および図１８のスケジュールをもとにDOUTとWAIT INの挿入個所とその対応関係を求める（図２０）。図１７より、ロボットＢの動作命令B003は、ロボットＡがサブ動作命令A003-2の最終位置を通過直後（理想的にはロボットＢの動作命令B003開始後1.0s後）に開始させれば良いことが分かる。また、ロボットＢの動作命令B001は、ロボットＡの動作命令001開始直後に開始させても差し支えない（干渉は生じない）。図２０に示したDOUTとWAIT INの挿入個所とその対応関係、および図１９のDIO結線情報から、図６の単体教示データセットを修正し、図２１に示すように修正教示データセットを作成する。ここでPa1-2は、図１５〜１７に示したロボットＡのサブ動作命令A003-2の最終位置（最終タイムスロットでの移動予定位置）である。
【００３５】
S1-8にて単体教示データセットの修正を行なった後、S1-9にて修正教示データセットにしたがった複数ロボットの動作を、Ｋ通り全てあるいはその１部について、実機ロボットにより教示者に提示する。S1-10では、教示者が教示者の主観、あるいは教示者の経験則に基づいて修正教示データセットを１つ選択し、全ての処理を終了する（S1-11）。
【００３６】
以上説明したように、本発明では作業点間の移動軌道も考慮し、各ロボットの各動作命令の開始時刻（動作命令開始スケジュール）を、マクロレベル大域スケジューリングとミクロレベル局所スケジューリングによる階層的なスケジューリング方式により求めるため、複数ロボット全体の作業時間を最小化する動作命令の開始時刻を決定できる。
また、最適化した動作命令開始スケジュールをもとに、ロボット単体教示データの適切な個所にインタロック命令を挿入して教示データを修正するので、現状のロボット制御装置を用いてその最適なスケジュールに基づく作業を簡単に実行できる。
【００３７】
さらに、作成した複数の動作命令開始スケジュール候補の動作をロボットシミュレータおよび実機ロボットにより確認した上で、教示者がその候補の中から教示者自身の判断に基づいてスケジュールを選択できるので、ユーザフレンドリな教示装置を提供できる。
【００３８】
つぎに、図１のS1-3およびS1-5において、Flag1およびFlag2が両方ともTrueの場合の処理を説明する。
Flag1=Trueの場合、図１のS1-4にて、対象動作命令限定処理を行なう。これは、動作命令開始スケジュール決定（S1-7）の対象とする動作命令群を指定する。例えば、図６に示した各単体教示データの動作命令001〜006の内、教示者が001〜004という具合に指定する。
この機能により、非常に長い単体教示データに対して一度に動作開始スケジュールを決定するのではなく、教示者がいくつかの部分に分割し、部分ごとに動作命令開始スケジュールを作成して動作確認することが可能になる。したがって、現場での教示者による微妙な調整が行ない易くなる。
【００３９】
Flag2=Trueの場合、図１のS1-6にて、動作命令実行順序指定処理を行なう。これは、複数ロボットの動作命令間の一部あるいは全てに対して実行順序を教示者が予め指定する処理である。例えば、図６に示したロボットＡおよびロボットＢの動作命令の内、ロボットＡの動作命令002より先にロボットＢの動作命令002を動作させるという具合に指定する。動作命令002, 004, 006のように作業点における動作命令だけではなく、001, 003, 005の作業点間移動の動作命令に対してロボットＡおよびロボットＢ間の実行順序を指定することもできる。作業工程に起因してロボット間のタスク実行順序（同一ロボット内のタスク実行順序ではない）を守らなければならないとき、この機能を利用する。また、それに加えて、教示者の持つ経験則を取り入れて動作命令開始スケジュールを作成する場合にも有効である。動作命令実行順序指定は、図１２で説明すれば、例えばノードB002からノードA002に向かって予め有向枝を張っておく処理に相当する。スケジューリングは、前述したように選択グラフに閉路が生じないように選択枝（破線で示した無向枝）の向きを決定することである（閉路が生じるということは、実行順序と時間との間に矛盾が生じるということである）。つまり、選択グラフのノード間に予め有向枝という拘束条件を付加するだけで、特別な処理が必要になるわけではない。また、図１２の選択枝の向きを予め指定しておくこともできる。
予め選択枝の向きを指定することは、スケジューリング問題のサイズを小さくすることになるので、教示者の主観や経験則を取り入れられるばかりでなく、スケジューリングに要する計算時間を短くできる。また、対象動作命令限定処理と同様に現場での教示者による微妙な調整が行ない易くなる。
【００４０】
つぎに、本発明の第２の実施の形態について図を参照して説明する。
図３は本発明の第２の実施の形態に係わる複数ロボットの作業教示装置のブロック図である。
図３において、301は図６に示したような単体教示データセット（複数ロボットの単体教示データ）を入力する単体教示データセット入力手段である。302は単体教示データセット内の各動作命令の開始時刻をＫ通り決定する動作命令開始スケジュール決定手段である。ここで、Ｋは１以上の整数である。303は動作命令開始スケジュール決定手段302で決定したＫ通りのスケジュールにしたがって各ロボットを動作させられるように単体教示データセットに修正を行なう単体教示データセット修正手段である。304は、単体教示データセット修正手段で作成されたＫ通りの修正教示データセットにしたがった複数ロボットの動作を、実機ロボットにより教示者に提示する実機動作提示手段である。305は、実機動作提示手段304によって提示された複数実機ロボットの動作を教示者が確認し、教示者の主観あるいは教示者の経験則により修正教示データセットを１つ選択する修正教示データセット選択手段である。306は動作命令開始スケジュール決定の対象となる動作命令群を指定する対象動作命令限定手段である。307は複数ロボットの動作命令間の一部あるいは全ての実行順序を予め指定しておく動作命令実行順序指定手段である。
【００４１】
動作命令開始スケジュール決定手段302は、動作命令開始スケジュール候補をＫ通り以上作成する動作命令開始スケジュール作成手段302a、作成された複数のスケジュールの中から全作業の完了時刻（最大完了時刻）が小さいものから順番にＫ通りスケジュールを選択する最適化選択手段302b、作成された複数のスケジュールにしたがった複数ロボットの動作を仮想環境上にて教示者に提示する仮想環境動作提示手段302c、仮想環境動作提示手段302cに提示された動作をもとに教示者が教示者自身の判断によりスケジュールをＫ通り選択する教示者選択手段302dから構成される。
【００４２】
動作命令開始スケジュール作成手段302aは、複数ロボットの動作領域が重なり合う共有作業空間を複数領域に分割し、分割された各領域に番号付けを行なう共有作業空間マップ作成手段302a-1、各単体教示データの各動作命令に対して一定時間間隔（タイムスロット）でのロボットの移動予定位置を計算する移動予定位置計算手段302a-2、各動作命令の各タイムスロットにおいて、各ロボットが共有作業空間マップのどの（何番の）分割領域と干渉（分割領域を占有）するかを計算する共有作業空間マップ占有状態計算手段302a-3、共有作業空間マップの占有状態に基づき、各ロボットが互いに干渉しないような動作命令開始スケジュールを求める干渉回避スケジューリング手段302a-4から構成される。
【００４３】
干渉回避スケジューリング手段302a-4は、動作命令単位の粗い大域的なスケジュールを求めるマクロレベル大域スケジューリング手段302a-4a、マクロレベル大域スケジュールのクリティカルパス上の異なるロボット間の動作命令に関して、タイムスロット間隔の詳細な局所スケジュールを求めるミクロレベル局所スケジューリング手段302a-4b、マクロレベル大域スケジューリング手段で求めた大域スケジュールを、ミクロレベル局所スケジューリング手段で求めた詳細な局所スケジュールにより修正する大域スケジュールミクロレベル修正手段302a-4cから構成される。
【００４４】
単体教示データセット修正手段303は、具体的には、単体教示データセットの適切な個所にインタロック命令を挿入するインタロック命令挿入手段303aにより構成される。
以上のような構成をしているので、第１の実施の形態で説明した複数ロボットの教示方法を実施できる。
【００４５】
図２４に第３の実施の形態に係わる複数ロボットの作業教示方法のフローチャートを示す。
第３の実施の形態と第１の実施の形態では共通する部分も多いので、第１の実施の形態とは異なる部分を以下に説明する。
図２４のS5-1では、図１９に示したIO間接続といったロボットコントローラ間の接続情報を入力する。また、図１９のように２台のロボットコントローラのIO間を直接結線するのではなく、PLCを介してIOを接続する場合は、PLCに設定したロジックから得られるIO間の論理的な接続情報をS5-1で入力する。
【００４６】
図２４のS5-7は、第１の実施の形態で説明したように異なるロボット間の動作命令の実行順序（先後関係）を教示者が予め指定する処理である。第３の実施の形態では、まず、教示者はS5-7aにおいて図２９に示すように単体教示データセット内にインタロック命令（DOUT,WAIT）を挿入する。S5-7bでは、単体教示データセットに予め挿入されたインタロック命令とS5-1で入力したロボットコントローラ間接続情報を参照して、「ロボットA動作命令001→ロボットB動作命令003」という動作命令の先後関係を抽出する。また、S5-7bでは新たに動作命令間の先後関係を追加することもできる。
図２４のS5-9は、教示者が単体教示データセット内の動作命令に対して、動作命令の分割あるいは併合を指定する動作命令編集処理である。図３０は動作命令編集の概念を示している。図３０において、C000〜C007はロボットA（401a）の単体教示データの手先位置教示点を示している。すなわち、単体教示データは、MOVJ C000, MOVL C001, MOVL C002, … のような動作命令の系列となる。901a〜901cは、C006からC007への移動命令（MOVL C007）の手先位置経路を4分割したときの内分点である。同図の例ではC006からC007への移動動作命令を、内分点901a〜901cを手先位置教示点として4つの動作命令に分割している。902a〜902dは4分割された移動命令に対応する選択グラフノードを示している。予め（動作命令決定処理S5-10を行う前に）分割指定をしておくことにより、元来１つの移動命令の途中でインタロックを取ることができる。教示者が予めどの動作命令を何分割するかを指定する。一方、903は、単体教示データのMOVL C002, MOVL C003, MOVL C004, MOVL C005の4つの動作命令を１つに併合した動作命令に対応する選択グラフノードを示している。このように併合指定をしておくことにより、MOVL C002からMOVL C005の間でインタロックを取らないようにできる。904aおよび904bは分割指定も併合指定もされなかった動作命令に対応する選択グラフノードを示している。
【００４７】
図２５は、図２４の動作命令開始スケジュール決定部（S5-10）の内部フローチャートを示している。
図２５の動作命令開始スケジュール選択処理（S6-2）については、第１の実施の形態（図２のS2-2）と同様なので、S6-1の動作命令開始スケジュール作成処理について以下で説明する。
S6-1aでは、図４の403に示したような複数ロボットの共有作業空間を定義する。第１の実施の形態では図７や図１０のように共有作業空間をブロック領域に分割して定義した（図２のS2-1a）が、第３の実施の形態では必ずしも領域分割する必要はない。
S6-1bでは、単体教示データセット内の各動作命令あるいは編集済み（図２４のS5-9の処理済み）の各動作命令に対して、図３１の406に示すような占有領域を計算する。図３１において、401a，403はそれぞれロボットA、共有作業空間である。C001，C002はロボットAの単体教示データの手先位置教示点を示している。図３１の例では、占有領域406は、ロボットAがC001からC002への移動動作命令MOVL C002を実行したときにロボットAの全てのリンクおよびツールが共有作業空間内を通過する領域を示している。
動作命令の占有領域を効率よく計算するためには、共有作業空間を図７に示すようにブロック領域分割し、図１０に示すように大きなブロック領域から内部の小さなブロック領域へと階層的に管理すると都合が良い。
【００４８】
図３２に再帰的ブロック分割による共有作業空間（２次元）の定義（(a)）とそのツリー構造による管理（(b)）の概念を示す。図３２(a)において402a，402bはそれぞれロボットA、ロボットBの最大動作範囲球である。403は共有作業空間である。同図において407は作業空間全体を示すルートブロック領域であり、そのID番号を0とする。408a, 408b, 408c, 408dはブロック領域0（407）を均等に４分割したブロック領域であり、そのID番号をそれぞれ01, 02, 03, 04とする。409a, 409b, 409c, 409dはブロック領域01（408a）を均等に４分割したブロック領域であり、そのID番号をそれぞれ011, 012, 013, 014とする。410a, 410b, 410c, 410dはブロック領域014（409d）を均等に４分割したブロック領域であり、そのID番号をそれぞれ0141, 0142, 0143, 0144とする。以下、同様にしてロボットAおよびロボットBの両方の最大動作範囲球に交わるブロック領域をそのサイズが指定したサイズになるまで再帰的に分割する。図３１(b)に示したようにID番号の桁数はツリー構造のレベル（階層の深さ）とブロック領域のサイズを表している。共有作業空間が３次元の場合は、立方体のルートブロック領域を再帰的に8分割して同様の処理を繰り返せば良い。
【００４９】
図３１に示した動作命令の占有領域は、図３２に示したブロック領域の集合として表すことができる。具体的には、図９に示したように動作命令の軌道上の十分に微少間隔な各点において、リンクモデルに交わるブロック領域を求め、その集合を（重複を省いて）求める。第１の実施の形態では、一定時間（タイムスロット）間隔の軌道上の各点でリンクモデルとブロック領域との干渉チェックを行っているが、第３の実施の形態はこれに拘るものではなく、ブロック領域とリンクモデルとの干渉チェックを行う軌道上の点の間隔は一定時間間隔である必要も無く、一定距離間隔である必要も無い。第１の実施の形態では、図１１に示すように各タイムスロットごとにリンクモデルと干渉するブロック領域IDをテーブル形式（リスト形式）で管理していたが、第３の実施の形態では、動作命令の占有領域を図３３に示すようなツリー構造で管理する。
【００５０】
図３３(a)および(b)に動作命令占有領域のツリー表現（占有領域ツリー）の例を示す。同図において、ツリーの各ノードは一桁の0以上の整数番号とBOOL型（TrueまたはFalse）の属性値を持つ。ルートノードから属性値がTrueとなるノードへ向かって順番にノードを辿ったとき、通過するノードの番号を左から順にならべた多数桁の番号（例えば(a)の0244）が、占有領域に含まれる共有作業空間のブロック領域ID番号を示している。このようなツリー表現によって、重複を省いて効率よく占有領域にブロック領域ID番号を追加することができ、占有領域同士の交わりのチェックについても効率的に行うことができる。また、共有作業空間の再帰的なブロック分割と占有領域のツリー表現という性質を利用することによって、占有領域を効率よく更新できる。例えば、(a)の占有領域ツリーにブロック領域ID-01233を追加する場合、同図の破線で示したノード1001をTrueとして追加することになる。このときブロック領域ID-012以下の階層の占有状態を図示すると図３２(c)のようになる。ブロック領域ID-01233が占有状態として登録されることにより、ブロック領域ID-0123を4分割した全てのブロック領域が占有状態になるので、ブロック領域ID-0123も占有状態となる。この処理は、(a)のツリーにおいてノード1001の親ノード1002の属性値をTrueに変更することによって実現できる。すなわち、占有領域ツリーにブロック領域IDを追加するとき、ツリーの末端にTrueとして追加されたノードとその兄弟ノードで属性値がTrueとなるノードの数（あるいはノード番号の合計）をチェックして、そのノード数が4あるいはノード番号の合計が10（共有作業空間が2次元の場合）のとき、親ノードの属性値をTrueに変更する処理を再帰的に行う。(a)の例では、ノード1001がTrueとして追加されることによって、ノード1002に続いてノード1003の属性値がTrueに変更される。すなわち、ブロック領域ID-012が占有領域に含まれるという状態に占有領域ツリーのデータが更新されることになる。
【００５１】
図２５のS6-1cの選択グラフの設定（初期化）処理では、図３４に示すように編集済み各動作命令をノードとする選択グラフを設定する。
図３４において、A1, A2〜5, A6, A7-0〜7-3はロボットAの編集済み動作命令に対応するノードである。B1-0〜1-3, B2, B3〜6, B7はロボットBの編集済み動作命令に対応するノードである。A2〜5は図２４のS5-9の処理において併合指定された動作命令、A7-0, A7-1,…はS5-9において分割指定された動作命令を示している。この標記はロボットBについても同様である。選択グラフの各ノードには、ロボット番号と編集済み動作命令のシリアル番号（通し番号）を設定する。また、各編集済み動作命令の動作時間を計算してノードに設定する。
図３４に破線で示した選択枝（Disjunctive Edges）は、占有領域同士が交わる異なるロボット間の編集済み動作命令の対である。選択枝を計算するためには、異なるロボット間の編集済み動作命令の全ての対に対して、占有領域同士が交わるかどうかのチェックを行う必要がある。図３３に示したような占有領域ツリーを用いて占有領域同士の交わりをチェックする場合、一方の占有領域ツリーに含まれる属性値がTrueとなる全ノードへのルートノードからの経路が、他方の占有領域ツリーに含まれるかどうかを調べれば良い。全ての経路が他方に含まれないとき両者は交わらず、経路が１つでも他方に含まれるとき両者は交わる。例えば、図３３(a)の占有領域と同図(b)の占有領域との交わりをチェックする場合を考える（1001のノードは追加されていない状態とする）。占有領域(a)の経路0→1→2は占有領域(b)には含まれないので、(a)のノード1003以下の子ノードについてはチェックせずに、(a)の経路0→1→3について処理を進めていく。占有領域(a)の経路0→2→4→4については、その終点ノード1004の属性はTrueであり、この経路は占有領域(b)に含まれているので、(b)の経路0→2→4→4の終点ノード1005の属性に係わらず、占有領域(a)および(b)が交わることは明らかである。このように、占有領域を図３３に示したツリー構造で表現することにより、占有領域同士の交わりチェックを効率よく行うことができる。
【００５２】
以上のようにして求めた選択枝は、
A1 --- B1-1
A1 --- B1-2
A2〜5 --- B1-1
A2〜5 --- B1-2
A6 --- B1-1
A6 --- B1-2
A6 --- B2
・
・
のように選択グラフノードのIDまたはポインタの対を連結リストEdgeListOrgに保存する。あるいは、(ロボット番号１，動作命令シリアル番号１)−(ロボット番号２，動作命令シリアル番号２)の形式でリストに保存しても良い。また、図３４の選択枝を除いた状態のグラフを初期選択グラフIniDisjGraphに保存する。
【００５３】
つぎに図２５のS6-1dの干渉回避スケジューリング処理について説明する。図２６はS6-1dの内部フローチャートを示している。
図２６において、S7-1では求めるスケジュール解の個数の上限値Lを入力する。S7-2はスケジュールの中間解（TempSol）の初期化処理である。ここで中間解とは、選択枝のリストEdgeListと、選択枝の向きを決定したアークのリストArcListの組である。初期状態では、EdgeListはEdgeListOrgに一致する。図２４のS5-7で異なるロボット間の動作命令実行順序（先後関係）が予め指定された場合、その先後関係をArcListに保存する。予め動作命令の先後関係が指定されなかった場合はArcListを空（サイズがゼロ）にする。また、スケジュール解とはEdgeListが空になった（全ての選択枝の向きを決定した）状態を指す。初期化されたTempSolは、空の状態のOPENLISTに保存される。OPENLISTは探索問題で一般的に使用される展開候補ノードを格納するための連結リストである。
【００５４】
S7-3では求まったスケジュール解の個数とOPELISTのサイズがチェックされる。スケジュール解の個数がL以上またはOPENLISTが空のとき、全ての処理を終了する（S7-4）。スケジュール解の個数がL未満かつOPENLISTが空でないとき、S7-5にてOPENLISTからTempSolを１つ選択する。TempSolの選択基準に関しては後述する。S7-6では選択されたTempSolのEdgeListのサイズがチェックされる。サイズがゼロのとき、このTempSolはスケジュール解であるから、選択されたTempSolをSOLUTIONLISTに保存する（S7-7）。SOLUTIONLISTはスケジュール解を保存するための連結リストである。S7-3においてスケジュール解の個数をチェックするときはSOLUTIONLISTのサイズを調べれば良い。S7-8では選択したTempSolをOPENLISTから抜き取り、CLOSEDLISTに移し替える処理を行う。CLOSEDLISTは探索問題で一般的に使用される展開済みノードを格納するための連結リストである。
【００５５】
S7-9では、S7-5で選択されたTempSolのEdgeListから１つ選択枝を選び、その選択枝の可能な向きを定めてアークを生成し、それをArcBuffListに保存する。図２７にS7-9の内部フローチャートを示す。
S7-9-1ではArcBuffListを空にする。S7-9-2でTempSolのEdgeListの先頭ノードへのポインタをpEdgeに取得する。S7-9-3でpEdgeがNULLかどうかのチェックを行い、これがNULLの場合は全ての処理を終了する（S7-9-4）。pEdgeがNULLでない場合は、S7-9-5にてループカウンタiをゼロにする。S7-9-6ではiが2未満かどうかをチェックし、2以上の場合はS7-9-7にてArcBuffListが空かどうかをチェックする。ArcBuffListが空ではない場合は、全ての処理を終了する（S7-9-8）。ArcBuffListが空の場合は、S7-9-9にてpEdgeをEdgeListのつぎのノードに進めてS7-9-3に戻る。
【００５６】
S7-9-6にてループカウンタが2未満の場合は、S7-9-10ではpEdgeが指すEdgeListのノードに格納されている選択枝情報とループカウンタiの値からアークArcを生成する。例えば、pEdgeに格納されている選択枝情報を、(rn1,sn1)-(rn2,sn2)と表した場合、i=0のとき(rn1,sn1)→(rn2,sn2)とし、i=1のとき(rn1,sn1)←(rn2,sn2)としてArcを生成する。ここでrn1,rn2はロボット番号、sn1,sn2は編集済み動作命令のシリアル番号を示す。
つぎにS7-9-11およびS7-9-12では、生成されたArcがある条件（アーク選択条件１、アーク選択条件２と呼ぶ）を満足するかどうかをチェックする。
図３５はアーク選択条件１を満足しない状況を示している。
図３５において1101a〜1101cはロボットrの選択グラフノード（編集済み動作命令）を、1102a〜1102cロボットsの選択グラフノード（編集済み動作命令）を示す。ここで、RN，SNはそれぞれロボット番号、編集済み動作命令のシリアル番号である。1103はS7-9-10で生成されたアーク(r,j)→(s,k)である。1104a, 1104bはEdgeListOrgに格納されている選択枝を示す。同図(a)は、アーク1103の始点ノード(r,j)と終点ノード(s,k)の一つ手前のノード(s,k-1)がEdgeListOrgに含まれる場合、アーク選択条件１を満足しないことを意味している。同様に(b)は、アーク1103の終点ノード(s,k)と始点ノード(r,j)のつぎのノード(r,j+1)がEdgeListOrgに含まれる場合、アーク選択条件１を満足しないことを意味している。
【００５７】
S7-9-10で生成されたArcが図３５(a)(b)の状況に該当しない（アーク選択条件１を満足する）場合は、S7-9-12にてアーク選択条件２が満足されているかどうかがチェックされる。
図３６はアーク選択条件２が満足されない状況を示している。
同図において1105a, 1105bは中間解TempSolのArcListに登録されているアークを示している。その他の符号の意味については図３５と同じである。図３６(a)は、アーク1103の終点ノード(s,k)の一つ手前のノード(s,k-1)を始点とし、終点がアーク1103の始点ノード(r,j)よりも２つ以上手前のノード(r,j-n)となるアーク1105aが既にArcListに登録済みで、(s,k-1)−(r,j-n+1), (s,k-1)−(r,j-n+2), … ,(s,k-1)−(r,j-1)のいずれかの選択枝（1104a〜1104b）がEdgeListOrgに含まれている場合、アーク選択条件２が満足されないことを意味している。同様に図３６(b)は、アーク1103の始点ノード(r,j)のつぎのノード(r,j+1)を終点とし、アーク1103の終点ノード(s,k)よりも２つ以上先のノード(s,k+n)を始点とするアーク1105aが既にArcListに登録済みで、(r,j)−(s,k+1), (r,j)−(s,k+2), … ,(r,j)−(s,k+n-1)のいずれかの選択枝（1104a〜1104b）がEdgeListOrgに含まれている場合、アーク選択条件２が満足されないことを意味している。
【００５８】
S7-9-10で生成されたArcが図３６(a)(b)の状況に該当しない（アーク選択条件２を満足する）場合は、S7-9-13にてArcがArcBuffListに保存され、A7-9-14にてループカウンタiが１だけ増加され、S7-9-6に戻る。S7-9-11においてArcがアーク選択条件１を満足しない、あるいはS7-9-12においてArcがアーク選択条件２を満足しない場合、ArcはArcBuffListに保存されることなく、A7-9-14にてループカウンタが増加される。
S7-9-8で図２７のアーク生成処理が終了した場合、ArcBuffListには２または１個のアーク情報が保存される。S7-9-4で処理が終了した場合、ArcBuffListは空になっている。
アーク選択条件１および２が満足されない状況（図３５および３６に該当する状況）では、複数ロボット間衝突回避が必ずしも保証されない。上記で説明したようにアーク選択条件１および２を満足するアークのみを生成し、他の組み合わせを除外することによって、ロボット間衝突回避が確実に保証される中間解およびスケジュール解を求めることができる。
【００５９】
図２６のS7-9にてArcが生成されると、S7-10にてArcBuffListのサイズがチェックされる。ArcBuffListが空のときはS7-3の処理に戻る。ArcBuffListが空でないとき、S7-11にて新しい中間解NewTempSolを生成し、TempSolのデータ（EdgeList, ArcListなど）をNewTempSolにコピーする。S7-12ではArcBuffListからArcを１つ抜き取る。S7-12で抜き取られたArcを(r,j)→(s,k)と表すと、S7-13ではNewTempSolのEdgeListから上記Arcに相当するエッジ(r,j)−(s,k)あるいは(s,k)−(r,j)を削除し、NewTempSolのArcListに(r,j)→(s,k)を追加する処理を行う。
つぎにS7-14では、NewTempSolのEdgeListとArcListに格納されている選択枝とアークに関して、S7-12で選択されたアークに対して冗長なものを全て削除する処理を行う。図３７は冗長な選択枝とアークの削除ルールを示している。
【００６０】
図３７において、符号1101a〜1101c，1102a〜1102c，1103，1105a〜1105cの意味は図３５および３６と同じである。1106a〜1106cはEdgeListに格納されている選択枝を示す。
まず、新規追加されたアーク1103と1105a〜1105cのアークに着目する。アーク1103で指定される動作命令間の先後関係が満足されれば、アーク1105a〜1105cで指定される動作命令間の先後関係が必ず満足されることは明らかである。したがって、アーク1105a〜1105cは冗長であり、削除しても差し支えない（削除した方が後々の処理が効率化される）。つぎに新規追加されたアーク1103と選択枝1106a〜1106cに着目する。仮に選択枝1106a〜1106cの向きをロボット番号sからロボット番号rへの向きに設定した場合、いずれもアーク1103を通る閉ループを構成してしまうため、この向きは物理的に実現できない。したがって、アーク1103が存在する場合、選択枝1106a〜1106cの向きはいずれもロボット番号rからロボット番号sへの向きに設定しなければならない。ところが、これらのアークは1105a〜1105cと同様にアーク1103に対して冗長になってしまう。よって、選択枝1106a〜1106cについても削除できる。
【００６１】
新規追加されたアーク1103を(r,j)→(s,k)、ArcList内のアークを(rn0,sn0)→(rn1,sn1)と表すと、
rn0=r, sn0<=j, rn1=s, sn1>=k（sn0=j,sn1=kは除く）
の条件を満たすアークを削除する。また、EdgeList内の選択枝を(rn0,sn0)−(rn1,sn1)と表すと、
( rn0=r, sn0<=j, rn1=s, sn1>=k ) or ( rn0=s, sn0>=k, rn1=r, sn1<=j )
の条件を満たす選択枝を削除する。
つぎにS7-15にて、初期選択グラフIniDisjGraphにArcListに登録されているアークを全て張って、中間解NewTempSolに対応するテンポラリな選択グラフTempDisjGraphを作成する（図３８）。
S7-16では、TempDisjGraph上で冗長なアークを削除する処理を行う。S7-16の冗長アーク削除処理はS7-14（図３７）の処理とは異なり、ロボットが3台以上の場合に必要な処理であり、S7-14では検出できない冗長アークを削除することができる。
図３９はS7-16での冗長アークの削除ルールを示している。図３９において、1107a〜1107cはロボット番号tの選択グラフノードを示している。その他の符号の意味は図３５、３７と同じである。
【００６２】
図３９(a)は、新規追加アーク1103が既に登録済みのアーク1105a,1105bに対して冗長になっていることを示している。同図(b)はアーク1103を追加することによってArcListに既に登録されているアーク1105bが冗長になることを示している。S7-16では図３９(a)(b)に示したような冗長なアークをArcListおよびTempDisjGraphから削除する処理を行う。
以上説明したように、アークの選択条件（アークの生成ルール）、冗長な選択枝と冗長なアークの削除ルールによって、ロボットの台数が増加してもスケジュール解の探索を効率化することができる。
図２６のS7-17では、図４０に示すような閉ループの有無をTempDisjGraph上でチェックし、閉ループが存在する場合は、S7-18にて中間解NewTempSolを削除してS7-10に戻る。閉ループが存在しない場合は、S7-19において、図３８に示したNewTempSolの選択グラフTempDisjGraphに対してクリティカルパスの経路長（中間解の最大動作完了時間）を計算する。計算した値をNewTempSolの評価値として設定し、S7-20にてそのNewTempSolをOPENLISTに保存した後、S7-10に戻る。
S7-5でOPENLISTに保存されている複数の中間解から１つ選択する際は、中間解の評価値（クリティカルパスの経路長）が最小になるものを優先的に選択することによって、複数ロボット全体のサイクルタイムが最小となる動作命令開始スケジュールから順にL個のスケジュール解がSOLUTIONLISTに保存される。
【００６３】
以上説明した干渉回避スケジューリング処理が終了すると、図２５のS6-2の動作命令開始スケジュール選択処理が行われるが、この部分は第１の実施の形態と同じであるので説明を省略する。
動作命令開始スケジュール選択処理を行った後、図２４のS5-11にて単体教示データセットの修正処理を行う。
図４１に図２５のS6-2で選択された動作命令開始スケジュールの例を示す。また、図４２に同スケジュールのガントチャートを示す。
動作命令開始スケジュールにおける異なるロボット間の動作命令の先後関係は、スケジュール解のArcListに保存されているアーク情報に他ならない。したがって、図２４のS5-11aで行われる動作命令の先後関係抽出は、スケジュール解からArcListを取得すればよい。S5-11bでは、S5-11aで取得した動作命令の先後関係とS5-1で入力したロボットコントローラ間接続情報（図１９）を使用して単体教示データセットにインタロック命令を挿入する。具体的には、ロボットA、ロボットBのそれぞれにおいて、ArcListに保存されているアーク（図４１および４２の1105a〜1105c）の始点ノードの直後にDOUT命令を挿入し、アークの終点ノードの直前にWAIT命令を挿入する（各インタロック命令に対して、OT#1から順番にIO#を指定する）。その際、図４３に示すように、S5-9において併合指定した動作命令を元の動作命令群に戻し、間にインタロック命令の挿入されなかった分割動作命令を１つにまとめる処理を行う。また、図４３において、修正教示データの1行めはOT#1〜OT#8（OG#1）をすべてOFFにする処理である。
【００６４】
つぎに、本発明の第４の実施の形態について図を参照して説明する。
図２８は本発明の第４の実施の形態に係わる複数ロボットの作業教示装置のブロック図である。
図２８において、801は図６に示したような単体教示データセット（複数ロボットの単体教示データ）を入力する単体教示データセット入力手段である。802は単体教示データセット内の各動作命令の開始スケジュールをＫ通り決定する動作命令開始スケジュール決定手段である。ここで、Ｋは１以上の整数である。803は動作命令開始スケジュール決定手段802で決定したＫ通りのスケジュールにしたがって各ロボットを動作させられるように単体教示データセットに修正を行なう単体教示データセット修正手段である。804は、単体教示データセット修正手段で作成されたＫ通りの修正教示データセットにしたがった複数ロボットの動作を、実機ロボットにより教示者に提示する実機動作提示手段である。805は、実機動作提示手段804によって提示された複数実機ロボットの動作を教示者が確認し、教示者の主観あるいは教示者の経験則により修正教示データセットを１つ選択する修正教示データセット選択手段である。806は動作命令開始スケジュール決定の対象となる動作命令群を指定する対象動作命令限定手段である。807は複数ロボットの動作命令間の一部あるいは全ての実行順序を予め指定しておく動作命令実行順序指定手段である。808はロボットコントローラ間の接続情報を入力するロボットコントローラ間接続情報入力手段である。809は単体教示データセット内の動作命令に対して分割・併合を指定する単体教示データセット編集手段である。
【００６５】
動作命令実行順序指定手段807は、教示者が予めインタロック命令を挿入するためのインタロック命令挿入手段807a、インタロック命令挿入手段807aによって挿入されたインタロック命令とロボットコントローラ間接続情報入力手段によって入力されたロボット間接続情報から動作命令間の実行順序（先後関係）を抽出する動作命令先後関係抽出手段807bから構成される。
動作命令開始スケジュール決定手段802は、動作命令開始スケジュール候補をＫ通り以上作成する動作命令開始スケジュール作成手段802a、作成された複数のスケジュールの中から全作業の完了時刻（最大完了時刻）が小さいものから順番にＫ通りスケジュールを選択する最適化選択手段802b、作成された複数のスケジュールにしたがった複数ロボットの動作を仮想環境上にて教示者に提示する仮想環境動作提示手段802c、仮想環境動作提示手段802cに提示された動作をもとに教示者が教示者自身の判断によりスケジュールをＫ通り選択する教示者選択手段802dから構成される。
【００６６】
動作命令開始スケジュール作成手段802aは、複数ロボットの動作領域が重なり合う共有作業空間を定義する共有作業空間定義手段802a-1、単体教示データセット編集手段809で編集された各編集済み動作命令に対して動作命令を実行したときにロボットおよびツールモデルが共有作業空間内を通過する領域を計算する動作命令占有領域計算手段802a-2、各編集済み動作命令、動作命令間の先後関係、占有領域同士が交わる動作命令の対をそれぞれノード、アーク、エッジとしてスケジューリング理論における選択グラフを設定する選択グラフ設定手段802a-3、選択グラフに基づき、各ロボットが互いに干渉しないような動作命令開始スケジュールを求める干渉回避スケジューリング手段802a-4から構成される。
干渉回避スケジューリング手段802a-4は、スケジューリングの最中にロボット間衝突回避を保証するアークを逐次選択するアーク選択手段802a-4a、スケジューリングの最中に冗長なアークと冗長な選択枝を削除する冗長アーク・冗長選択枝削除手段802a-4bから構成される。
単体教示データセット修正手段803は、具体的には、動作命令開始スケジュールから異なるロボット間動作命令の先後関係を抽出する動作命令先後関係抽出手段803a、動作命令の先後関係とロボットコントローラ間の接続情報を使用して単体教示データセットの適切な個所にインタロック命令を挿入するインタロック命令挿入手段803bにより構成される。
以上のような構成をしているので、第３の実施の形態で説明した複数ロボットの教示方法を実施できる。
【００６７】
【発明の効果】
以上説明したように、本発明では作業点間の移動軌道も考慮し、各ロボットの各動作命令の開始時刻（動作命令開始スケジュール）を、マクロレベル大域スケジューリングとミクロレベル局所スケジューリングによる階層的なスケジューリング方式により求めるため、複数ロボット全体の作業時間を最小化する動作命令開始スケジュールを決定できるという効果がある。
また、最適化した動作命令開始スケジュールをもとに、単体教示データセットの適切な個所にインタロック命令を挿入して教示データを修正するので、現状のロボット制御装置を用いてその最適なスケジュールに基づく作業を簡単に実行できるという効果もある。
また、作成した複数の動作命令開始スケジュール候補の動作をロボットシミュレータおよび実機複数ロボットにより確認した上で、教示者がその候補の中から教示者自身の判断に基づいてスケジュールを選択できるので、教示者の主観、経験則や意図を考慮可能でユーザフレンドリな教示装置を提供できるという効果もある。
また、単体教示データセット内の動作命令に対して、動作命令開始スケジュール決定の対象とする動作命令群を教示者が指定できるので、大規模な単体教示データセットをいくつかの部分に分割して部分ごとにスケジュール検討ができるという効果もある。
また、複数ロボットの動作命令間の実行順序を教示者が予め指定できるので、教示者の主観、経験則や意図を反映し、なおかつ短時間で動作命令開始スケジュールを作成できるという効果もある。
さらに、教示者による対象動作命令の指定、教示者による複数ロボット間の動作命令実行順序の指定、ロボットシミュレータなどの仮想環境や実機複数ロボットにおける動作提示を介した教示者によるスケジュール選択、が可能なので、現場での微調整が行ない易く、使い勝手の良い複数ロボットの教示装置を提供できるという効果もある。
また、本発明では、動作命令の分割や併合を考慮して予め動作命令を編集し、各編集済み動作命令の占有領域をツリー構造により管理し、異なるロボット間の各編集済み動作命令の実行順序（先後関係）をアーク選択条件や冗長アーク・冗長選択枝削除ルールを適用したスケジューリング方式により求めるので、教示者の意図や主観をより反映させることができ、ロボットの台数が増加したとしても動作命令開始スケジュールを高速に求めることができるという効果がある。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係わる複数ロボットの作業教示方法
のフローチャート
【図２】動作命令開始スケジュール決定処理（図１のS1-7）のフローチャート
【図３】本発明の第２の実施の形態に係わる複数ロボットの作業教示装置のブロック図
【図４】複数ロボットの共有作業空間を表す図
【図５】共有作業空間内での作業例を表す図
【図６】単体教示データセットの例を示す図
【図７】共有作業空間マップを示す図
【図８】動作命令の各タイムスロットでの移動予定位置計算の過程を示す図
【図９】動作命令の各タイムスロットの移動予定位置におけるロボットと共有作業空間マップとの干渉検査の過程を示す図
【図１０】階層的な共有作業空間マップを表す図
【図１１】ロボットの動作命令データを示す図
【図１２】マクロレベル大域スケジューリングにおける選択グラフの例を示す図
【図１３】マクロレベル大域スケジュールの例とそのクリティカルパスを示す図
【図１４】マクロレベル大域スケジュールのガントチャートを示す図
【図１５】ミクロレベル局所スケジューリングにおける選択グラフを示す図
【図１６】ミクロレベル局所スケジュールの例とそのクリティカルパスを示す図
【図１７】ミクロレベル局所スケジュールのガントチャートを示す図
【図１８】ミクロレベルで修正された大域スケジュールのガントチャートを示す図
【図１９】複数ロボットのデジタルIOポート間の接続例を示す図
【図２０】大域スケジュールのガントチャートをもとにインタロック命令の挿入個所とその対応関係を示した図
【図２１】修正教示データセットの例を示す図
【図２２】特開平11-347984「ロボット制御装置」の動作を説明する図
【図２３】特開平7-44214「ロボット群の制御システム」のフローチャート
【図２４】本発明の第３の実施に形態に係わる複数ロボットの作業教示方式のフローチャート
【図２５】動作命令開始スケジュール決定処理（図２４のS5-10）のフローチャート
【図２６】干渉回避スケジューリング（図２５のS6-1d）のフローチャート
【図２７】アーク生成処理（図２６のS7-9）のフローチャート
【図２８】本発明の第４の実施の形態に係わる複数ロボットの作業教示装置のブロック図
【図２９】動作命令の先後関係を予め指定した単体教示データセットの例を示す図
【図３０】動作命令の分割・併合の概念を示す図
【図３１】動作命令の占有領域を示す図
【図３２】再帰的なブロック分割による共有作業空間の定義を示す図
【図３３】動作命令の占有領域のツリー表現を示す図
【図３４】編集済み各動作命令に対して初期設定された選択グラフを示す図
【図３５】アーク選択条件１を満足しない状況を示す図
【図３６】アーク選択条件２を満足しない状況を示す図
【図３７】冗長アーク・冗長選択枝削除ルールを示す図
【図３８】中間解に対応するテンポラリな選択グラフを示す図
【図３９】ロボットが３台以上の場合の冗長アーク削除ルールを示す図
【図４０】選択グラフ内の閉ループの例を示す図
【図４１】スケジュール解の例を示す選択グラフ
【図４２】スケジュール解の例を示すガントチャート
【図４３】本発明の第３の実施の形態のよる修正教示データセットの例を示す図
【符号の説明】
301：単体教示データセット入力手段
302：動作命令開始スケジュール決定手段
302a-1：共有作業空間マップ作成手段
302a-2：移動予定位置計算手段
302a-3：共有作業空間マップ占有状態計算手段
302a-4：干渉回避スケジューリング手段
302a-4a：マクロレベル大域スケジューリング手段
302a-4b：ミクロレベル局所スケジューリング手段
302a-4c：大域スケジュールミクロレベル修正手段
302b：最適化選択手段
302c：仮想環境動作提示手段
302d：教示者選択手段
303：単体教示データ修正手段
303a：インタロック命令挿入手段
304：実機動作提示手段
305：修正教示データセット選択手段
306：対象動作命令限定手段
307：動作命令実行順序指定手段
401a、401b：ロボットＡおよびロボットＢ
402a、402b：ロボットＡおよびロボットＢの動作範囲
403：ロボットＡおよびロボットＢの共有作業空間
404：共有作業空間マップ
404a、404b1、404b2、404b3、404b4、404c1、404c2、404c3：共有作業空間マップの階層化
405：動作命令のタイムスロットにおけるロボットTCP位置
406：動作命令の占有領域
407：作業空間全体を示すルートブロック領域
408a〜408d：ブロック領域407を4分割したブロック領域
409a〜409d：ブロック領域408aを4分割したブロック領域
410a〜410d：ブロック領域409dを4分割したブロック領域
801：単体教示データセット入力手段
802：動作命令開始スケジュール決定手段
802a-1：共有作業空間定義手段
802a-2：動作命令占有領域計算手段
802a-3：選択グラフ設定手段
802a-4：干渉回避スケジューリング手段
802a-4a：アーク選択手段
802a-4b：冗長アーク・冗長選択枝削除手段
802b：最適化選択手段
802c：仮想環境動作提示手段
802d：教示者選択手段
803：単体教示データ修正手段
803a：動作命令先後関係抽出手段
803b：インタロック命令挿入手段
804：実機動作提示手段
805：修正教示データセット選択手段
806：対象動作命令限定手段
807：動作命令実行順序指定手段
807a：インタロック命令挿入手段
807b：動作命令先後関係抽出手段
808：ロボットコントローラ間接続情報入力手段
809：単体教示データセット編集手段
901a〜901c：動作命令の経路を4分割する手先位置教示位置の内分点
902a〜902d：4分割された動作命令に対応する選択グラフのノード
903：4つの動作命令が併合された動作命令に対応する選択グラフのノード
904a, 904b：分割も併合指定もされなかった動作命令の選択グラフのノード
1001〜1005：占有領域ツリーのノード
1101a〜1101c：選択グラフのロボットrに対応するノード
1102a〜1102c：選択グラフのロボットsに対応するノード
1103：新規生成されたアーク
1104a, 1104b：EdgeListOrgに保存されている選択枝
1105a〜1105c：ArcListに保存されている選択グラフのアーク
1106a〜1106c：EdgeListに保存されている選択枝
1107a〜1107c：選択グラフのロボットsに対応するノード
【図１】
0004228387.tif 000003
【図２】
0004228387.tif 000004
【図３】
0004228387.tif 000005
【図４】
0004228387.tif 000006
【図５】
0004228387.tif 000007
【図６】
0004228387.tif 000008
【図７】
0004228387.tif 000009
【図８】
0004228387.tif 000010
【図９】
0004228387.tif 000011
【図１０】
0004228387.tif 000012
【図１１】
0004228387.tif 000013
【図１２】
0004228387.tif 000014
【図１３】
0004228387.tif 000015
【図１４】
0004228387.tif 000016
【図１５】
0004228387.tif 000017
【図１６】
0004228387.tif 000018
【図１７】
0004228387.tif 000019
【図１８】
0004228387.tif 000020
【図１９】
0004228387.tif 000021
【図２０】
0004228387.tif 000022
【図２１】
0004228387.tif 000023
【図２２】
0004228387.tif 000024
【図２３】
0004228387.tif 000025
【図２４】
0004228387.tif 000026
【図２５】
0004228387.tif 000027
【図２６】
0004228387.tif 000028
【図２７】
0004228387.tif 000029
【図２８】
0004228387.tif 000030
【図２９】
0004228387.tif 000031
【図３０】
0004228387.tif 000032
【図３１】
0004228387.tif 000033
【図３２】
0004228387.tif 000034
【図３３】
0004228387.tif 000035
【図３４】
0004228387.tif 000036
【図３５】
0004228387.tif 000037
【図３６】
0004228387.tif 000038
【図３７】
0004228387.tif 000039
【図３８】
0004228387.tif 000040
【図３９】
0004228387.tif 000041
【図４０】
0004228387.tif 000042
【図４１】
0004228387.tif 000043
【図４２】
0004228387.tif 000044
【図４３】
0004228387.tif 000045