(57)【要約】【課題】複数の産業用ロボットに協働して作業を行わせるための制御プログラムの作成を支援する技術を提供する。【解決手段】複数のロボットに協働して作業を行わせるための、複数のロボットを制御する制御プログラムの作成を支援するプログラム作成支援装置において、軌跡取得部は、複数のロボットそれぞれについて、作業において移動する軌跡を取得する。衝突解析部は、軌跡取得部が取得した軌跡をもとに、複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する。インターロック設定部は、衝突解析部の解析の結果をもとに、２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定する。通知部は、インターロック設定部が設定したインターロックを、組とする２つのロボットを単位として通知する。【選択図】図４
2016190315.tif 000002
【特許請求の範囲】
【請求項１】
複数のロボットに協働して作業を行わせるための、前記複数のロボットを制御する制御プログラムの作成を支援するプログラム作成支援装置であって、
前記複数のロボットそれぞれについて、前記作業において移動する軌跡を取得する軌跡取得部と、
前記軌跡取得部が取得した軌跡をもとに、前記複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する衝突解析部と、
前記衝突解析部の解析の結果をもとに、前記２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定するインターロック設定部と、
前記インターロック設定部が設定したインターロックを、組とする２つのロボットを単位として通知する通知部とを備えるプログラム作成支援装置。
【請求項２】
前記軌跡は、前記ロボットの移動の単位となるステップ情報を含み、
前記通知部は、組とする２つのロボットのうち一方のロボットのステップ情報を第１座標軸、当該第１座標軸と非平行であり他方のロボットのステップ情報を第２座標軸とするグラフに、前記インターロックを示す領域をマッピングして通知する請求項１に記載のプログラム作成支援装置。
【請求項３】
前記衝突解析部は、前記複数のロボットのうち異なる２つのロボットの組それぞれについて前記軌跡を解析し、組となるロボットが描く軌跡のうち前記ステップ同士の距離が所定の距離未満となる場合、衝突またはニアミスの可能性がある組と判定する請求項２に記載のプログラム作成支援装置。
【請求項４】
前記衝突解析部は、衝突またはニアミスの可能性がある組を判定した場合、所定の距離未満となるステップと、その前のステップまたは後ろのステップとの少なくともいずれか一方のステップとを結ぶ軌跡を解析し、前記組を構成するロボット同士が衝突またはニアミスがあるか否かを解析する請求項３に記載のプログラム作成支援装置。
【請求項５】
前記複数のロボットは、それぞれ複数の異なる制御プログラムによって制御され、制御される制御プログラムに応じて複数の異なる軌跡を描くものであり、
前記衝突解析部は、組とする２つのロボットを選択し、一方のロボットが描きうる軌跡と、他方のロボットが描きうる軌跡との全ての組み合わせについて、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する請求項１から４のいずれか一項の記載のプログラム作成支援装置。
【請求項６】
前記複数のロボットそれぞれについて、物品を搬送するか否か、および搬送する場合はその軌跡を示すマテリアルハンドリング情報を取得する搬送情報取得部をさらに含み、
前記衝突解析部は、前記搬送情報取得部が取得したマテリアルハンドリング情報をもとに、搬送対象とする物品が描く軌跡も含めた衝突またはニアミスを解析する請求項１から５のいずれか一項に記載のプログラム作成支援装置。
【請求項７】
前記プログラム作成支援装置は、さらに、複数のデータ処理を実行するデータ処理部を備え、
前記データ処理部は、
複数のデータの演算処理を実行する複数の演算処理部と、
前記演算処理部によって実行されるデータの演算処理を、実行可能な２以上の処理に分割する分割部と、
前記分割部によって分割された各処理を、複数の前記演算処理部のうちのいずれかの演算処理部にそれぞれ割り当てる割当部と、を備え、
前記演算処理部を用いて複数のデータの演算処理を実行する場合において、
前記分割部は、前記演算処理部の処理状況に応じて、分割した前記処理のうち未処理データの演算処理を、実行可能な２以上の処理にさらに分割することを特徴とする請求項１から６のいずれか一項に記載のプログラム作成支援装置。
【請求項８】
複数の前記演算処理部のうち、演算処理が実行されていない空きの演算処理部がある場合において、
前記分割部は、
空きの前記演算処理部の数が、前記分割した処理のうち未処理データの演算処理の数を超える場合、前記未処理データの演算処理を、実行可能な２以上の処理にさらに分割し、
前記割当部は、
前記分割部によってさらに分割された各処理を、空きの前記演算処理部のうちのいずれかの演算処理部にそれぞれ割り当てることを特徴とする請求項７に記載のプログラム作成支援装置。
【請求項９】
複数のロボットに協働して作業を行わせるための、前記複数のロボットを制御する制御プログラムの作成を支援するプログラム作成支援方法であって、
前記複数のロボットそれぞれについて、前記作業において移動する軌跡を取得する軌跡取得工程と、
取得した軌跡をもとに、前記複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する解析工程と、
前記解析の結果をもとに、前記２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定する設定工程と、
設定したインターロックを、組とする２つのロボットを単位として通知する通知工程とをプロセッサが実行するプログラム作成支援方法。
【請求項１０】
複数のロボットに協働して作業を行わせるための、前記複数のロボットを制御する制御プログラムの作成を支援するプログラムであって、
コンピュータに、
前記複数のロボットそれぞれについて、前記作業において移動する軌跡を取得する軌跡取得機能と、
取得した軌跡をもとに、前記複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する解析機能と、
前記解析の結果をもとに、前記２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定する設定機能と、
設定したインターロックを、組とする２つのロボットを単位として通知する通知機能とを実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はプログラム作成支援方法およびプログラム作成支援装置ならびにプログラムに関し、特に複数の産業用ロボットに協働して作業を行わせるため制御プログラムの作成支援技術に関する。
【背景技術】
【０００２】
自動車等の生産は、産業用ロボットを用いた自動化が実現されている。自動車等の生産においては、複数の産業用ロボットが同時に用いられることが一般的であり、そのようなロボット同士が干渉ないし衝突することを防止するために、インターロックが設けられている。このインターロックを設けるために、オフラインのシミュレーションによって、インターロックのタイミングをティーチングする技術が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−１３４０１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
インターロックを適切に設定することは、生産ラインの遅延や停止を抑制し、生産効率を上げるために重要である。しかしながら、自動車等の生産には多くの産業用ロボットが密集配置され、かつそれぞれのロボットが複雑な工程を実行するのが通常である。ロボット間の干渉を避けるために制御プログラムが作成されるが、干渉を確認するための組み合わせが膨大となり、それらを全てシミュレーションするのは計算時間の観点から現実的ではない。ましてや、全ての干渉を人手で確認するのは非常に困難である。このため、複数の産業用ロボットに協働して作業を行わせるための制御プログラムの作成を支援するための手法の開発が望まれている。
【０００５】
本発明はこのような課題に鑑みてなされたものであり、その目的は、複数の産業用ロボットに協働して作業を行わせるための制御プログラムの作成を支援する技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様のプログラム作成支援装置は、複数のロボットに協働して作業を行わせるための、複数のロボットを制御する制御プログラムの作成を支援するプログラム作成支援装置である。この装置は、複数のロボットそれぞれについて、作業において移動する軌跡を取得する軌跡取得部と、軌跡取得部が取得した軌跡をもとに、複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する衝突解析部と、衝突解析部の解析の結果をもとに、２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定するインターロック設定部と、インターロック設定部が設定したインターロックを、組とする２つのロボットを単位として通知する通知部とを備える。
【０００７】
軌跡は、ロボットの移動の単位となるステップ情報を含んでもよい。通知部は、組とする２つのロボットのうち一方のロボットのステップ情報を第１座標軸、当該第１座標軸と非平行であり他方のロボットのステップ情報を第２座標軸とするグラフに、インターロックを示す領域をマッピングして通知してもよい。
【０００８】
衝突解析部は、複数のロボットのうち異なる２つのロボットの組それぞれについて軌跡を解析し、組となるロボットが描く軌跡のうちステップ同士の距離が所定の距離未満となる場合、衝突またはニアミスの可能性がある組と判定してもよい。
【０００９】
衝突解析部は、衝突またはニアミスの可能性がある組を判定した場合、所定の距離未満となるステップと、その前のステップまたは後ろのステップとの少なくともいずれか一方のステップとを結ぶ軌跡を解析し、組を構成するロボット同士が衝突またはニアミスがあるか否かを解析してもよい。
【００１０】
複数のロボットは、それぞれ複数の異なる制御プログラムによって制御され、制御される制御プログラムに応じて複数の異なる軌跡を描くものであり、衝突解析部は、組とする２つのロボットを選択し、一方のロボットが描きうる軌跡と、他方のロボットが描きうる軌跡との全ての組み合わせについて、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析してもよい。
【００１１】
複数のロボットそれぞれについて、物品を搬送するか否か、および搬送する場合はその軌跡を示すマテリアルハンドリング情報を取得する搬送情報取得部をさらに含んでもよい。衝突解析部は、搬送情報取得部が取得したマテリアルハンドリング情報をもとに、搬送対象とする物品が描く軌跡も含めた衝突またはニアミスを解析してもよい。
【００１２】
プログラム作成支援装置は、さらに、複数のデータ処理を実行するデータ処理部を備え、データ処理部は、複数のデータの演算処理を実行する複数の演算処理部と、演算処理部によって実行されるデータの演算処理を、実行可能な２以上の処理に分割する分割部と、分割部によって分割された各処理を、複数の演算処理部のうちのいずれかの演算処理部にそれぞれ割り当てる割当部と、を備え、演算処理部を用いて複数のデータの演算処理を実行する場合において、分割部は、演算処理部の処理状況に応じて、分割した処理のうち未処理データの演算処理を、実行可能な２以上の処理にさらに分割してもよい。
【００１３】
複数の演算処理部のうち、演算処理が実行されていない空きの演算処理部がある場合において、分割部は、空きの演算処理部の数が、分割した処理のうち未処理データの演算処理の数を超える場合、未処理データの演算処理を、実行可能な２以上の処理にさらに分割し、割当部は、分割部によってさらに分割された各処理を、空きの演算処理部のうちのいずれかの演算処理部にそれぞれ割り当ててもよい。
【００１４】
本発明の別の態様は、複数のロボットに協働して作業を行わせるための、複数のロボットを制御する制御プログラムの作成を支援するプログラム作成支援方法である。この方法は、複数のロボットそれぞれについて、作業において移動する軌跡を取得する軌跡取得工程と、取得した軌跡をもとに、複数のロボットのうち異なる２つのロボットの組を単位として、当該２つのロボット同士の衝突またはニアミスがあるか否かを解析する解析工程と、解析の結果をもとに、２つのロボット同士の衝突およびニアミスを防止するためのインターロックを設定する設定工程と、設定したインターロックを、組とする２つのロボットを単位として通知する通知工程とをプロセッサが実行する。
【００１５】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１６】
本発明によれば、複数の産業用ロボットに協働して作業を行わせるための制御プログラムの作成を支援する技術を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態に係るオフラインティーチングシステムの概要を模式的に示す図である。
【図２】ロボット同士の干渉およびニアミスを示す図である。
【図３】図３（ａ）−（ｂ）は、２つのロボットについて、干渉を解析する際の組み合わせの数を説明する図である。
【図４】実施の形態に係るオフラインティーチング装置の機能構成を模式的に示す図である。
【図５】記憶部が格納する情報のデータ構造を模式的に示す図である。
【図６】５つのロボットとその軌跡とを示す図である。
【図７】２つの異なるロボットの軌跡の一例を示す図である。
【図８】図８（ａ）−（ｂ）は、衝突解析部によるロボット間の衝突またはニアミスの解析を説明する模式図である。
【図９】実施の形態に係るインターロック設定部が設定するインターロックを説明するための模式図である。
【図１０】ロボットとマテハンロボットとの間の干渉を説明する模式図である。
【図１１】マテリアルハンドリング情報を考慮した場合におけるインターロックを説明するための模式図である。
【図１２】実施の形態に係るオフラインティーチング装置が実行するプログラム作成支援処理の流れを説明するフローチャートである。
【図１３】実施の形態に係る軌跡取得部が実行する軌跡取得工程の流れを説明するフローチャートである。
【図１４】実施の形態に係る衝突解析部が実行する解析工程の流れを説明するフローチャートである。
【図１５】２つの異なるロボットについて、干渉を解析する際のデータ処理を行う処理プロセスの機能構成を模式的に示す図である。
【図１６】２つの異なるロボットについて、干渉を解析する際の処理プロセスの分割の一例を示す模式図である。
【図１７】空きＣＰＵに未処理データの演算処理を分割して割り当ててデータ処理を実行する処理プロセスを説明するための模式図である。
【図１８】２つのロボットについて、干渉を解析する際のデータ処理の処理プロセスの流れを説明するフローチャートである。
【発明を実施するための形態】
【００１８】
図１は、実施の形態に係るオフラインティーチングシステム１の概要を模式的に示す図である。自動車の車体の組み立て等に用いられる産業用ロボット（以下、単に「ロボット２００」という）は、ロボット２００の動作を制御する情報処理装置（不図示）が実行する制御プログラムによる制御の下で動作する。この制御プログラムは、ロボット２００が動作する際に参照される１または複数のステップ情報が含まれている。ここで「ステップ情報」は、ロボットが、例えばスポット溶接等の作業を実行するために停止する空間上の位置情報であり、ロボット２００の移動の単位となる情報である。位置情報は、ロボット２００の基準位置からの相対位置座標であり、例えばロボット２００が有するアームの先端部の位置座標である。
【００１９】
図１に示す例は、ロボット２００が１回の工程において第１ステップ１０ａから第７ステップ１０ｇまでの７つのステップを踏むことを示している。以下、特に区別する場合を除き、各ステップを「ステップ１０」と総称する。ロボット２００は、１回の工程において各ステップ１０を結ぶ領域を移動する。以下、ロボット２００が移動する領域を「軌跡１２」と記載する。なお、軌跡１２は３次元空間上の線分ではなく、ロボット２００が作業空間を移動する際にロボット２００が掃く（スウィープ（sweep）する）空間を意味する。
【００２０】
ステップ情報は、ロボット２００が各ステップ１０間を移動する際の速度や移動方向と、後述するインターロック領域に進入する前に他のロボットに対して発信する「進入前信号」の発信命令とを補助情報として含む。この補助情報にはさらに、ロボット２００がインターロック領域を脱出した後に他のロボットに対して発信する「待避後信号」の発信命令も含む。
【００２１】
図１においてオフラインティーチング装置１００は、協働で作業する複数のロボット２００の制御プログラムをもとに、必要となるインターロックをシミュレーションによって探索する。オフラインティーチング装置１００はさらに、探索したインターロックの前後においてロボット２００が適切に待避動作をするためのプログラムが実装されているか否かを確認する。これにより、オフラインティーチング装置１００は、ユーザが制御プログラムを作成することを支援することができる。この意味で、オフラインティーチング装置１００は、プログラム作成支援装置として機能する。なお、表示装置１０２は、オフラインティーチング装置１００の計算結果等の情報をユーザに通知するための装置であり、例えば液晶モニタや有機ＥＬモニタ等で実現できる。
【００２２】
図２は、ロボット２００同士の干渉およびニアミスを示す図である。図２に示す例では、第１ロボット２００ａおよび第２ロボット２００ｂと、各ロボット２００の軌跡である第１軌跡１２ａおよび第２軌跡１２ｂとが示されている。図２において、第１ロボット２００ａの第１ステップ１０ａと、第２ロボット２００ｂの第７ステップ１０ｄとの距離がＬであり、Ｌが所定の距離ＬＴ未満であることを示している。
【００２３】
ここで所定の「距離ＬＴ」とは、ある二つのロボット２００が干渉する可能性があるか否かを判定するためにオフラインティーチング装置１００が参照する基準閾値となる距離である。あるロボット２００が通るステップ１０と、別のロボット２００が通るステップ１０との距離Ｌが距離ＬＴ未満の場合、オフラインティーチング装置１００はそれらのロボット２００が干渉する可能性があり、少なくともニアミスすると判定する。距離ＬＴは、作業に用いるロボット２００の大きさや軌跡１２の複雑さ、製品の形状等を考慮して実験により定めればよい。
【００２４】
図２において、第１ロボット２００ａによる第１ステップ１０ａから第２ステップ１０ｂに至るまでの第１軌跡１２ａと、第２ロボット２００ｂによる第６ステップ１０ｃから第７ステップ１０ｄに至るまでの第２軌跡１２ｂとは、交差している。図２において、斜線で示す領域は第１軌跡１２ａと第２軌跡１２ｂとによって囲まれる領域であり、この領域は第１ロボット２００ａと第２ロボット２００ｂとが衝突する恐れがある領域である。以下本明細書において、このような領域を「干渉領域１４」と記載する。この意味で、本明細書において「干渉」と「衝突」とは同じ意味で用いる。なお上述したように軌跡１２は３次元的な広がりを持つ領域であるため、干渉領域１４も３次元空間となる。
【００２５】
第１ロボット２００ａの第１軌跡１２ａと第２ロボット２００ｂの第２軌跡１２ｂとが交差していても、第１ロボット２００ａと第２ロボット２００ｂとが正常に動作している場合には、両者は干渉領域１４で衝突しない場合もあり得る。例えば、通常の工程において第１ロボット２００ａが第１ステップ１０ａから第２ステップ１０ｂに至るまで移動する時刻が、第２ロボット２００ｂが第６ステップ１０ｃから第７ステップ１０ｄに至るまで移動する時刻よりも早い場合等である。
【００２６】
しかしながら、第１ロボット２００ａが干渉領域１４を移動中に何らかの理由で停止したり、速度が低下したりすることも起こりうる。この様な場合には、干渉領域１４において第１ロボット２００ａと第２ロボット２００ｂとが衝突するかもしれない。そこで、オフラインティーチング装置１００は、ロボット２００が軌跡１２において各ステップ１０を通る時刻を考慮に入れず、異なる２つのロボットが通りうる２つの軌跡１２が交差していれば、干渉領域１４を定義する。
【００２７】
ロボット２００の動作を制御する制御プログラムが干渉領域１４を考慮している場合、ロボット２００が干渉領域１４に進入する前および干渉領域１４を脱出した後に、それぞれ「進入前信号」と「待避後信号」とを、対となるロボット２００に送信する。例えば図２において、第１ロボット２００ａが第１ステップ１０ａにあるときに、進入前信号を第２ロボット２００ｂに送信する。その後、干渉領域１４を抜けて第２ステップ１０ｂに到達すると、第１ロボット２００ａは待避後信号を第２ロボット２００ｂに送信する。
【００２８】
第２ロボット２００ｂは、第１ロボット２００ａから進入前信号を受信した後は、待避後信号を受信するまでは、第６ステップ１０ｃ以降のステップには進まずに待機する。なお、第２ロボット２００ｂが第６ステップより前のステップにいるときは、第１ロボット２００ａとの衝突の恐れはないため、作業を継続する。第２ロボット２００ｂは、第１ロボット２００ａから待避後信号を受信した後に、はじめて第７ステップ１０ｄに進む。これにより、第１ロボット２００ａと第２ロボット２００ｂとが干渉領域１４で衝突することが抑制できる。
【００２９】
なお、第１ロボット２００ａと第２ロボット２００ｂとのどちらが先に干渉領域１４に進入するかは、あらかじめいずれかのロボット２００に「優先情報」としてあらかじめ定めおく。すなわち、優先情報をもつロボット２００が、優先情報を持たないロボット２００に対し、進入前信号と待避後信号とを送信するように制御プログラムが組まれる。いずれのロボット２００に優先情報を設定するかは、例えば正常動作時における干渉領域１４の進入時刻等を考慮してあらかじめ実験により定めればよい。
【００３０】
続いて、実施の形態に係るオフラインティーチング装置１００による、制御プログラムのインターロックの設定支援処理について説明する。
【００３１】
オフラインティーチング装置１００は、協働して作業させる複数のロボット２００のうち、異なる２つのロボット２００の組み合わせ全てについて、干渉およびニアミスを解析する。ひとつのロボット２００が複数の制御プログラムで実行される場合には、それによってロボット２００が動きうる軌跡の全ての組み合わせについて、オフラインティーチング装置１００は干渉およびニアミスを解析する。
【００３２】
例えば、各ロボット２００には管理用の制御プログラムが存在する。管理用のプログラムとは、例えばロボット２００の基準位置を設定するための「原点プログラム」、ロボット２００を待避させるための「保全プログラム」、ロボット２００自体または一部の部品を交換するために移動させる「交換プログラム」である。また、ひとつの生産ラインで複数種類の製品を生産する場合には、製品の種類に応じた制御プログラムが存在する。仮に、ひとつの生産ラインで４種類の製品を生産する場合には、４種類の生産用制御プログラムが存在することになる。この場合、ひとつのロボット２００は、計７つの制御プログラムによって動作し、７種類の軌跡１２を描くことになる。
【００３３】
図３（ａ）−（ｂ）は、２つのロボット２００について衝突の有無を解析する際の組み合わせ数を説明する図である。より具体的に、図３（ａ）は、３種類の管理用制御プログラムと、４種類の生産用制御プログラムが存在する場合の組み合わせを示す図である。図３（ａ）に示すように、第１ロボット２００ａが製品Ａを生産するときには、第２ロボット２００ｂも製品Ａを生産する。一方、第１ロボット２００ａがいずれの制御プログラムで動作していても、第２ロボット２００ｂが管理用制御プログラムで動作する可能性がある。その逆も同様である。したがって、２つのロボット２００について制御プログラムの組み合わせは３７通りとなる。なお、図３（ａ）中考え得る組み合わせは「○」で示している。
【００３４】
いま、生産ライン上に１２台のロボット２００が存在すると仮定すると、１２台のロボット２００の中から２つの異なるロボット２００を選ぶ組み合わせは１２×１１／２＝６６通りとなる。このため、全ての制御プログラムの組み合わせは、３７×６６＝２４４２通りとなる。さらに、製品を生産するための工程が５工程あったと仮定すると、同一工程における制御プログラムの組み合わせは２４４２×５＝１２２１０通りとなる。
【００３５】
図３（ｂ）は、工程間の組み合わせを説明する図である。上述のとおり製品を生産するための工程が５工程ある場合、工程間の組み合わせは、（工程１、工程２）、（工程２、工程３）、（工程３、工程４）、および（工程４、工程５）の４通りとなる。すなわち、全工程数から同一工程の組み合わせを除いた数となる。異なる工程においては、第１ロボット２００ａと第２ロボット２００ｂとが異なる製品を生産する場合もあるため、図３（ｂ）に示すように、２台のロボット２００における制御プログラムの組み合わせは４９通りとなる。したがって工程間における制御プログラムの組み合わせは、ロボット２００の組み合わせ数（６６）×工程の組み合わせ（４）×２台のロボットにおける制御プログラムの組み合わせ（４９）＝１２９３６通りとなる。
【００３６】
同一工程における制御プログラムの組み合わせ数と工程間における制御プログラムの組み合わせ数とは合計で２．５万通りの組み合わせとなる。仮に１つの制御プログラムの組み合わせについて計算機による干渉およびニアミスの解析が仮に１０秒で終了したとしても、全ての組み合わせを解析するためにはおよそ７０時間を要し現実的ではない。このため実施の形態に係るオフラインティーチング装置１００は、干渉およびニアミスを解析するために高速化の工夫を実装している。以下、オフラインティーチング装置１００についてより詳細に説明する。
【００３７】
図４は、実施の形態に係るオフラインティーチング装置１００の機能構成を模式的に示す図である。オフラインティーチング装置１００は、軌跡取得部１１０、衝突解析部１２０、インターロック設定部１３０、通知部１４０、搬送情報取得部１５０、および記憶部１６０を備える。
【００３８】
図４は、実施の形態に係るオフラインティーチング装置１００が実行するインターロックの設定支援処理を実現するための機能構成を示しており、他の構成は省略している。図４において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、ＣＰＵ（Central Processing Unit）、メインメモリ、その他のＬＳＩ（Large Scale Integration）で構成することができる。またソフトウェア的には、メインメモリにロードされた設定支援プログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。限定はしないが、一例として、オフラインティーチング装置１００は、ＰＣ（Personal Computer）、メインフレーム、ワークステーション、クラウドコンピューティングシステム等、種々の計算リソースを用いて実現できる。
【００３９】
図４に示すオフラインティーチング装置１００の各機能部をソフトウェアにより実現する場合、オフラインティーチング装置１００は、各機能を実現するソフトウェアであるプログラムの命令を実行することで実現される。このプログラムを格納する記録媒体は、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、このプログラムは、当該検索プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。本発明は、上記検索プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【００４０】
記憶部１６０は、オフラインティーチング装置１００が解析の対象とする複数のロボット２００それぞれについて、ロボット２００の外形を表す形状データとそのロボット２００を動作させる制御プログラムとを記憶する。図５は、記憶部１６０が格納する情報のデータ構造を模式的に示す図である。図５に示すように、オフラインティーチング装置１００が解析の対象とする複数のロボット２００には、それぞれロボット２００を一意に特定するためのロボット識別子が割り当てられている。ロボット識別子の割り当ては、例えば複数のロボット２００にあらかじめ通し番号を付与することで実現できる。図５に示すように、ロボット識別子と、そのロボット識別子で識別されるロボット２００の形状データ、およびそのロボットの動作制御に用いる１以上の制御プログラムが対応づけられて格納されている。
【００４１】
図４の説明に戻る。軌跡取得部１１０は、解析の対象とする複数のロボット２００それぞれについて、作業において移動する軌跡を取得する。より具体的には、軌跡取得部１１０は、複数のロボット２００のうちひとつのロボット２００を特定するためのロボット識別子を選択する。続いて軌跡取得部１１０は、選択したロボット識別子で特定されるロボット２００の動作を制御するための制御プログラムを、記憶部１６０から全て読み出す。
【００４２】
軌跡取得部１１０は、読み出した制御プログラムをもとにシミュレーションを実行し、各制御プログラムを実行した場合にロボット２００が移動するステップ１０の位置座標を取得する。これにより、軌跡取得部１１０は全てのロボット２００について、各ロボット２００に割り当てられた制御プログラムを実行した場合に移動しうる軌跡を、ステップ１０の単位で離散的に取得できる。
【００４３】
図６は、５つのロボット２００とその軌跡１２とを示す図である。より具体的には、図６は、第１ロボット２００ａから第５ロボット２００ｅまでの５つのロボット２００と、それぞれ対応する第１軌跡１２ａから第５軌跡１２ｅとを示している。なお、第１軌跡１２ａから第５軌跡１２ｅの各軌跡１２は破線で示している。煩雑となることを避けるため図中符号を付していないが、各軌跡１２上に存在する黒丸は、軌跡取得部１１０が取得したステップ１０の位置を示している。
【００４４】
衝突解析部１２０は、複数のロボット２００の中から異なる２つのロボット２００の組を取得する。衝突解析部１２０は、軌跡取得部１１０が取得した軌跡１２をもとに、組となる２つのロボットがそれぞれ取り得る軌跡の中から、１対の軌跡１２の組を取得する。同一のロボット２００であっても、制御プログラムが異なれば異なる軌跡を描くため、衝突解析部１２０は制御プログラムの組毎に解析を実行する。
【００４５】
衝突解析部１２０は、取得した１対の軌跡１２の組に含まれるステップ１０同士が、上述した距離ＬＴ未満にあるか否かを比較する。これの比較は、シミュレーション空間上に離散的に存在する２点間の距離求めて距離ＬＴと比較する処理であるため、計算量は少ない。このため、衝突解析部１２０はこの比較処理を高速に実行することができる。以下本明細書において、衝突解析部１２０が実行するステップ１０同士と距離ＬＴとの比較処理を、点の位置（ポジション；position）をもとにする確認処理であるため、「ポジションチェック」と記載することがある。
【００４６】
図７は、２つの異なるロボット２００の軌跡の一例を示す図であり、より具体的には、図６における第３ロボット２００ｃの軌跡１２ｃと、第５ロボット２００ｅの軌跡１２ｄとを示す図である。図７に示すように、軌跡１２ｃと軌跡１２ｄとは離れており、これらの軌跡１２の間には干渉領域１４は存在しない。衝突解析部１２０は、全てのロボット２００の組み合わせにおける全ての制御プログラムの組み合わせを解析し、軌跡１２のポジションチェックを総当たりで実行する。これにより、衝突解析部１２０は干渉しないことが明らかな軌跡１２の組み合わせを迅速に除去することができる。ゆえに、衝突解析部１２０は、ロボット２００間の干渉およびニアミスの解析の高速化、解析時間の短縮化を実現できる。
【００４７】
衝突解析部１２０は、２つのロボットの組それぞれについてポジションチェックを実行し、組となるロボットが描く軌跡１２のうちステップ１０同士の距離が距離ＬＴ未満となる場合、２つのロボット２００同士の衝突またはニアミスの可能性がある組と判定する。衝突解析部はさらに、衝突またはニアミスの可能性がある組を判定した場合、所定の距離以下となるステップと、その前のステップまたは後ろのステップとの少なくともいずれか一方のステップとを結ぶ軌跡１２を解析し、組を構成するロボット同士が衝突またはニアミスがあるか否かを解析する。
【００４８】
図８（ａ）−（ｂ）は、衝突解析部１２０によるロボット２００間の衝突またはニアミスの解析を説明する模式図である。図８（ａ）は、第１ステップ１０ａから第２ステップ１０ｂに至るまでの第１軌跡１２ａと、第３ステップ１０ｃから第４ステップ１０ｄに至るまでの第２軌跡１２ｂと２を図示している。図８（ａ）に示す例では、第１ステップ１０ａと第３ステップ１０ｃとの間の距離Ｌが、距離ＬＴ未満となっている。そこで衝突解析部１２０は、少なくとも第１軌跡１２ａと第２軌跡１２ｂとは「ニアミス」であると判定する。第１軌跡１２ａと第２軌跡１２ｂとが少なくともニアミスすると判定した場合、衝突解析部１２０は、第１軌跡１２ａにおける第１ステップ１０ａから第２ステップ１０ｂに至るまでの第１軌跡１２ａ、および第３ステップ１０ｃから第４ステップ１０ｄに至るまでの第２軌跡１２ｂについて、単位時間毎に衝突があるか否かを解析する。
【００４９】
図８（ｂ）は、第１軌跡１２ａと第２軌跡１２ｂとにおける、単位時間毎の解析箇所を示す模式図である。ここで「単位時間」とは、衝突解析部１２０がニアミス判定のあった軌跡１２の組を詳細に解析する際のサンプリングレートである。単位時間はロボット２００の数や工程数、軌跡１２の距離等を考慮して実験により定めればよいが、例えば０．０２秒である。
【００５０】
上述したように、制御プログラムが有するステップ情報には、ロボット２００が各ステップ１０間を移動する際の速度や移動方向等の補助情報も含まれる。衝突解析部１２０は、この補助情報とサンプリングレートとを用いて、単位時間毎にロボット２００の存在位置を計算により取得する。図８（ｂ）において、白い丸は第１軌跡１２ａにおける単位時間毎のロボット２００の位置を示し、斜線で示す丸は第２軌跡１２ｂにおける単位時間毎のロボット２００の位置を示す。図８（ｂ）より、衝突解析部１２０は第１軌跡１２ａと第２軌跡１２ｂとが交差すること、すなわちロボット２００同士が衝突する可能性があることが判定できる。以下本明細書において、衝突解析部１２０による補助情報とサンプリングレートとを用いた軌跡１２の解析を、軌跡チェックと記載することがある。
【００５１】
このように、衝突解析部１２０は離散的なポジションチェックを実行することで交差しないことが明白な軌跡１２の組み合わせを迅速に除去し、ニアミスしている軌跡１２の組についてのみ詳細な軌跡チェックを実行する。これにより、衝突解析部１２０は衝突解析の迅速化と精度向上とを達成することができる。
【００５２】
インターロック設定部１３０は、衝突解析部１２０の解析の結果をもとに、２つのロボット２００同士の衝突およびニアミスを防止するためのインターロックを設定する。通知部１４０は、インターロック設定部１３０が設定したインターロックを示す領域を図示し、２つのロボット２００を制御する制御プログラムの組を単位として通知する。
【００５３】
図９は、実施の形態に係るインターロック設定部１３０が設定するインターロックを説明するための模式図であり、通知部１４０がユーザに提示する画像を示す図である。図９に示す画像は、組とする２つのロボット２００のうち一方のロボット２００のステップ情報を第１座標軸、第１座標軸と非平行であり他方のロボット２００のステップ情報を第２座標軸とするグラフに、インターロックを示すインターロック領域をマッピングした図である。より具体的に、図９に示すグラフは、第１ロボット２００ａを制御する制御プログラム００１によるステップ情報を横軸、第２ロボット２００ｂを制御する制御プログラム００３のステップ情報を縦軸とするマトリクスに、衝突領域２０、ニアミス領域２２、およびインターロック領域２４をマッピングして示している。
【００５４】
図９に示す例では、第１ロボット２００ａの第５ステップと、第２ロボット２００ｂの第３ステップとでニアミスが発生している。また、第１ロボット２００ａの第６ステップと第２ロボット２００ｂの第３ステップ、第１ロボット２００ａの第５ステップと第２ロボット２００ｂの第４ステップ、および第１ロボット２００ａの第６ステップと第２ロボット２００ｂの第４ステップのあたりにおいて、衝突が発生していることを示している。そこでインターロック設定部１３０は、第１ロボット２００ａと第２ロボット２００ｂとがニアミスまたは干渉するステップの周囲に、インターロック領域２４を設定する。
【００５５】
第１ロボット２００ａを制御する制御プログラム００１と第２ロボット２００ｂを制御する制御プログラム００３とのいずれかに、インターロック領域２４の前後において進入前信号と待避後信号とを対となるロボット２００に送信することが定められていれば、衝突が防止できる。したがって、図９に示すように、通知部１４０は制御プログラムを解析し、進入前信号Ｓｉｎと待避後信号Ｓｏｕｔとを示す情報をマトリクスに表示する。これにより、ユーザはマトリクスを見ることで、インターロックが動作するか否かを判別することが可能となる。これにより、ユーザは制御プログラムが正しく記述できているか否かの検証が容易となり、制御プログラムの作成の支援となる。
【００５６】
以上は、ロボット２００が単独で動作することを前提として説明した。しかしながら、ロボットの２００の中には部材やワーク等を搬送するマテリアルハンド（いわゆるマテハンロボット）も存在する。
【００５７】
図１０は、第１ロボット２００ａとマテハンロボットである第２ロボット２００ｂとの間の干渉を説明する模式図である。図１０に示す例では、第２ロボット２００ｂはワーク２０２を把持し、駆動部２０４を動力として移動する。図１０では、第１ロボット２００ａの軌跡１２は第２ロボット２００ｂ自体とは衝突しないが、ワーク２０２とは衝突する可能性があることを示している。このため、第１ロボット２００ａと第２ロボット２００ｂとの間の干渉を判定するためには、ワーク２０２の大きさと、第２ロボット２００ｂがどのステップ１０においてワーク２０２を把持しているかを示す情報も必要となる。
【００５８】
そこで記憶部１６０は複数のロボット２００それぞれについて、物品を搬送するマテハンロボットであるか否か、および搬送する場合は物品の軌跡を示すマテリアルハンドリング情報を格納する。搬送情報取得部１５０は、記憶部１６０を参照してマテリアルハンドリング情報取得する。衝突解析部１２０は、搬送情報取得部１５０が取得したマテリアルハンドリング情報をもとに、搬送対象とする物品が描く軌跡も含めた衝突またはニアミスを解析する。これにより、衝突解析部１２０は、ワーク２０２との干渉も含めた衝突またはニアミスを解析することができる。
【００５９】
図１１は、マテリアルハンドリング情報を考慮した場合におけるインターロックを説明するための模式図である。図１１に示すマトリクスは、図９に示すマトリクスと同様に、通知部１４０がユーザに提示する画像を示す。図９に示すマトリクスとは異なり、図１１に示すマトリクスは、マテハンロボットがワーク２０２を把持しているか否かも示されている。これにより、マトリクスを見たユーザはワーク２０２の有無を適切に考慮して制御プログラムが記述されているか否かを確認するための手がかりを得ることができる。
【００６０】
図１２は、実施の形態に係るオフラインティーチング装置１００が実行するプログラム作成支援処理の流れを説明するフローチャートである。本フローチャートにおける処理は、例えばオフラインティーチング装置１００が起動したときに開始する。
【００６１】
軌跡取得部１１０は、記憶部１６０を参照して、複数のロボット２００がそれぞれ取り得る軌跡１２を全て取得する（Ｓ１００；軌跡取得工程）。衝突解析部１２０は、複数のロボット２００のうち異なる２つのロボット２００の組を取得する（Ｓ２００）。衝突解析部１２０は、組となる２つのロボット２００がそれぞれ取り得る軌跡１２をもとに、当該２つのロボットが衝突またはニアミスするか否かを解析する（Ｓ３００；解析工程）。
【００６２】
インターロック設定部１３０は、組となる２つのロボットの衝突またはニアミスを防止するためのインターロックを設定する（Ｓ４００；設定工程）。通知部１４０は、インターロック設定部１３０が設定したインターロックを示すマトリクスをユーザに通知する（Ｓ５００；通知工程）。通知部１４０がマトリクスをユーザに通知すると、本フローチャートにおける処理は終了する。
【００６３】
図１３は、実施の形態に係る軌跡取得部１１０が実行する軌跡取得工程の流れを説明するフローチャートであり、図１２におけるステップＳ１００をより詳細に説明する図である。
【００６４】
軌跡取得部１１０は、複数のロボット２００のうちから１つのロボット２００を選択する（Ｓ１１０）。続いて軌跡取得部１１０は、選択したロボット２００の動作を制御するための制御プログラムを全て読み出す（Ｓ１２０）。軌跡取得部１１０は、読み出した制御プログラムそれぞれで制御された場合における、選択したロボット２００が動く軌跡１２を取得する（Ｓ１３０）。全てのロボット２００について選択するまでの間（ステップＳ１４０のＮｏ）、軌跡取得部１１０はステップ１１０からステップ１３０までの処理を継続する。全てのロボット２００について選択が終了すると（Ｓ１４０のＹｅｓ）、本フローチャートにおける処理は終了する。
【００６５】
図１４は、実施の形態に係る衝突解析部１２０が実行する解析工程の流れを説明するフローチャートであり、図１２におけるステップＳ３００をより詳細に説明する図である。
【００６６】
衝突解析部１２０は、複数のロボット２００の中から異なる２つのロボット２００の組を取得する（Ｓ３１０）。衝突解析部１２０は、組を構成する２つのロボット２００それぞれが取り得る軌跡１２の中から、１対の軌跡１２の組を取得する（Ｓ３２０）。
【００６７】
衝突解析部１２０は、軌跡１２の組に含まれるステップ１０間の距離が、所定の距離ＬＴ未満であるか否かの比較、すなわち上述したポジションチェックを実行する（Ｓ３３０）。軌跡１２の組に含まれるステップ１０間の距離が、所定の距離ＬＴ以上の場合（Ｓ３４０のＮｏ）、衝突解析部１２０は取得した１対の軌跡１２はニアミスしないと判定し、ステップＳ３１０に戻って処理を継続する。
【００６８】
軌跡１２の組に含まれるステップ１０間の距離が、所定の距離ＬＴ未満の場合（Ｓ３４０のＹｅｓ）、衝突解析部１２０はステップ１０とその前後いずれかのまたは両方のステップ１０を結ぶ軌跡１２が交差するか否かを解析、すなわち上述した軌跡チェックを実行する（Ｓ３５０）。軌跡１２が交差する場合（Ｓ３６０のＹｅｓ）、衝突解析部１２０は、組とした２つのロボット２００が衝突すると判定する（Ｓ３７０）。軌跡１２が交差しない場合（Ｓ３６０のＮｏ）、衝突解析部１２０は、組とした２つのロボット２００はニアミスすると判定する（Ｓ３８０）。
【００６９】
複数のロボット２００について取り得る全ての軌跡１２の組み合わせを取得するまでの間（Ｓ３９０のＮｏ）、衝突解析部１２０はステップＳ３１０〜ステップＳ３９０までの処理を繰り返す。取り得る全ての軌跡１２の組み合わせを取得すると（Ｓ３９０のＹｅｓ）、本フローチャートにおける処理は終了する。
【００７０】
以上の構成によるオフラインティーチングシステム１の動作は以下のとおりである。まず、オフラインティーチング装置１００は、複数のロボット２００のうち異なる２つのロボット２００の組を単位として制御プログラムを解析し、全ての軌跡１２の組み合わせについてインターロック領域２４を示すマトリクスを生成する。また、オフラインティーチング装置１００は設定したインターロック領域２４の前後において制御プログラムが適切に進入前信号と待避後信号を送信しているか否かを判定する。オフラインティーチング装置１００は、制御プログラムが適切に進入前信号と待避後信号を送信していない場合のマトリクスを抽出してユーザに通知する。これにより、オフラインティーチング装置１００は、複数のロボット２００に協働して作業を行わせるための制御プログラムをユーザが作成する際の有用なデバッグ情報を提供することができる。
【００７１】
以上説明したように、実施形態に係るオフラインティーチングシステム１によれば、複数のロボット２００に協働して作業を行わせるための制御プログラムの作成を支援することができる。特に、ロボット２００の衝突またはニアミスを抑制するための制御に利用するインターロックの設定を支援することができる。通知部１４０がインターロック領域２４を可視化してユーザに提示するため、ユーザはインターロックの確認作業の効率を上げることができる。
【００７２】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７３】
上記の説明では、オフラインティーチング装置１００はＰＣやワークステーション等で実現する場合について説明した。これに代えて、オフラインティーチング装置１００を分散並列処理が実行可能なスーパーコンピュータを用いて実現してもよい。これにより、ロボット２００間の衝突またはニアミスの解析をさらに高速化することができる。
【００７４】
上記の説明では、通知部１４０は衝突領域２０、ニアミス領域２２、およびインターロック領域２４を示すマトリクスをユーザに通知する場合について説明した。これに加えて、マトリクス上の各領域をユーザが選択すると、それぞれのロボット２００の動きをシミュレーションした結果をユーザに提示するようにしてもよい。より具体的には、ユーザがマウス等のポインティングデバイスを用いてマトリクスの所望の領域を選択すると、衝突解析部１２０は、制御プログラムを用いてそのマトリクスに対応するステップまでロボット２００を動作させるシミュレーションを実行する。その結果を既知の３次元レンダリング技術を用いて画像化することによりユーザに提示すればよい。これにより、ユーザはどの位置に置いてロボット２００の衝突ないしニアミスが発生しているかを視覚的に確認することができる。
【００７５】
次に、オフラインティーチング装置１００が実現する２つのロボットを組とした、干渉の有無を解析する際のデータ処理について、図面を参照しながら詳細に説明する。図１５は、２つの異なるロボットについて、干渉を解析する際のデータ処理を行う処理プロセスの機能構成を模式的に示す図である。
【００７６】
図１５は、２つの異なるロボットについて、干渉を解析する際にオフラインティーチング装置１００が実行するデータ処理を実現するための機能構成を示しており、他の構成は省略している。このデータ処理は、オフラインティーチング装置１００が備えるデータ処理部３００が実行する。データ処理部３００は、複数の演算処理部３１０、分割部３２０、および割当部３３０を備える。
【００７７】
演算処理部３１０はＣＰＵ（Central Processing Unit）として機能する。以下の説明において、演算処理部３１０をＣＰＵという。ＣＰＵ３１０は、２つのロボットについて、干渉の有無を解析する際の複数のデータの演算処理を行う。オフラインティーチング装置１００はＣＰＵ３１０を複数備え、それぞれが例えば並列に複数台接続されている。
【００７８】
分割部３２０は、ＣＰＵ３１０によって実行されるデータの演算処理を、実行可能な２以上の処理に分割する機能を有する。図１６の例では、ＣＰＵ３１０が処理すべきデータの演算処理を実行可能な４つの演算処理に分割し、複数のＣＰＵ３１０（ＣＰＵ３１０ａ、３１０ｂ、３１０ｃ、３１０ｄ）のうちのいずれかのＣＰＵにそれぞれ割り当てる場合を示している。この分割は分割部３２０が実行する。
【００７９】
これによって、複数のデータの演算処理を同時に実行することができるため、解析に要する全体の処理時間を短縮することができる。
【００８０】
図１６は、２つの異なるロボットについて、干渉を解析する際の処理プロセスの分割の一例を示す模式図である。図１６に示すマトリクスは図９に示すマトリクスと同様に、第１ロボット２００ａを制御する制御プログラム００１によるステップ情報を横軸、第２ロボット２００ｂを制御する制御プログラム００３のステップ情報を縦軸とするマトリクスを示し、４台のＣＰＵ３１０を用いて制御プログラム００１、００３を実行する処理プロセスを示している。
【００８１】
分割部３３０は、衝突解析部１２０が２つのロボット２００ａ、２００ｂの組それぞれについてポジションチェックを実行するに際して必要とされる複数データの演算処理を実行可能な２つ以上の処理に分割する。図１６の例では、ＣＰＵ３１０によって実行されるデータの演算処理を、実行可能な４つの処理に分割する場合を示している。ＣＰＵ３１０によって実行されるデータ処理を４分割し複数のデータ処理を同時に実行する。
【００８２】
分割された処理は複数台のＣＰＵ３１０のうちいずれかのＣＰＵにそれぞれ割り当てられる。図１６ではＣＰＵ３１０ａ、ＣＰＵ３１０ｂ、ＣＰＵ３１０ｃ、ＣＰＵ３１０ｄにそれぞれ割り当てる場合を示している。この割り当ては割当部３３０が実行する。割り当てられた４分割の演算処理についてＣＰＵが同時に演算処理を実行する。図１６では、第１ロボット２００ａの第１ステップから第Ｎ１ステップと第２ロボット２００ａの第１ステップから第Ｍ１ステップで囲まれるデータの演算処理をＣＰＵ３１０ａ、第１ロボット２００ａの第Ｎ２ステップから第Ｎ４ステップと第２ロボット２００ｂの第１ステップから第Ｍ２ステップで囲まれるデータの演算処理をＣＰＵ３１０ｂに割り当てる場合を例示して示している。さらに、図１６では、第１ロボット２００ａの第１ステップから第Ｎ１ステップと第２ロボット２００ｂの第Ｍ２ステップから第Ｍ４ステップで囲まれるデータの演算処理をＣＰＵ３１０ｃ、第１ロボット２００ａの第Ｎ２ステップから第Ｎ４ステップと第２ロボット２００ａの第Ｍ２ステップから第Ｍ４ステップで囲まれるデータの演算処理をＣＰＵ３１０ｄに割り当てる場合を例示して示している。第１ロボット２００ａと第２ロボット２００ｂの組それぞれについてポジションチェックを、複数台のＣＰＵ３１０が処理能力に応じて実行する。各ＣＰＵそれぞれの処理能力および処理状況に応じて、分割部３２０によって分割された演算処理をＣＰＵ３１０ａからＣＰＵ３１０ｄのうちいずれかのＣＰＵにそれぞれ割り当て、衝突解析部１２０は制御プログラムの組毎に解析を実行する。なお、図１６では、ＣＰＵを４台備え、ＣＰＵ３１０のデータ処理を４分割した場合を例示して示したが、本実施の形態はこれに限定されるものではない。また、データ処理部３００は、オフラインティーチング装置１００に別途備えられていてもよいし、衝突解析部１２０がデータ処理に関する機能を有し、衝突解析部１２０によってデータ処理と干渉解析が実行されてもよい。
【００８３】
本実施の形態に係るプログラム作成支援装置ならびにプログラムによれば、複数台のＣＰＵに、分割した処理をそれぞれ割り当て複数データの演算処理を同時に実行することができるため、解析処理の高速化を実現することができる。
【００８４】
なお、分割したデータの演算処理はＣＰＵに順次割り当てられることになるが、処理すべきデータ量に応じてデータ処理の時間に差が生じ得る。すなわち、演算に時間を要するＣＰＵと演算が早く終了するＣＰＵが存在することになり、ＣＰＵを有効に利用することができない場合が生じ得る。
【００８５】
そこで、オフラインティーチング装置１００は、さらに、ＣＰＵ３１０の使用状況を確認し、演算処理が実行されていない、或はすでに演算処理が終了している空きのＣＰＵ（以下、「空きＣＰＵ」という）がある場合、当該空きＣＰＵを有効に利用することができる機能を備える。具体的には、オフラインティーチング装置１００は、演算処理が実行されていない空きＣＰＵを確認する機能を備える。そして、オフラインティーチング装置１００は、ＣＰＵ３１０の処理状況に応じて空きＣＰＵがある場合には、上述にてすでに分割した演算処理のうち未処理データの演算処理を、実行可能な２以上の処理にさらに分割して、この分割した未処理データの演算処理を空きＣＰＵに割り当てることができる。
【００８６】
オフラインティーチング装置１００において空きＣＰＵがあると判断された場合、空きＣＰＵの数が、上述にてすでに分割した処理のうち未処理データの演算処理の数を超えているか否かを判定する。この判断および判定は、例えば、オフラインティーチング装置１００が別途備える判定部（不図示）によって実行される。そして、この判定の結果に基づき、「空きＣＰＵの数が、すでに分割した処理のうち未処理データの演算処理の数を超えている」と判定された場合は、分割部３２０において未処理データの演算処理をさらに分割する処理を実行する。次いで、割当部３３０において、分割された各データの演算処理を、空きＣＰＵに割り当てる。
【００８７】
例えば、ＣＰＵ３１０ｃおよびＣＰＵ３１０ｄが空きＣＰＵである場合、未処理データの演算処理がさらに分割された各データの演算処理を、空きＣＰＵ３１０ｃおよびＣＰＵ３１０ｄにそれぞれ割り当てる。図１７では、未処理データは、第１ロボット２００ａの第１ステップから第Ｎ４ステップと第２ロボット２００ａの第Ｍ２ステップから第Ｍ４ステップで囲まれる領域とした場合を例示して示している。そして、当該領域で囲まれるデータの演算処理を、第１ロボット２００ａの第１ステップから第Ｎ１ステップと第２ロボット２００ａの第Ｍ２ステップから第Ｍ４ステップで囲まれるデータの演算処理と、第１ロボット２００ａの第Ｎ２ステップから第Ｎ４ステップと第２ロボット２００ａの第Ｍ２ステップから第Ｍ４ステップで囲まれるデータの演算処理と、の２分割に分割し分割された各データの演算処理を、空きＣＰＵ３１０ｃおよび空きＣＰＵ３１０ｄにそれぞれ割り当てる場合を例示して示している。なお、具体的な分割方法および割り当て方法に関しては、基本的に図１６と同様であるため説明は省略する。
【００８８】
本実施の形態に係るプログラム作成支援装置ならびにプログラムによれば、空きＣＰＵを有効に利用することができる。これによって、データ処理が実行されていない空きＣＰＵに複数分割したデータの演算処理を割り当て解析を実行することができるため、解析処理の高速化をさらに向上させることができる。
【００８９】
次に、２つのロボットについて干渉を解析する際のデータ処理プロセスの流れについて、図面を参照しながら詳細に説明する。図１８は、データ処理部における２つのロボットについて、干渉を解析する際のデータ処理の処理プロセスの流れを説明するフローチャートである。
【００９０】
図１８は、空きＣＰＵがある場合に、データをさらに分割し分割した各データの演算処理を空きＣＰＵに割り当てる際のデータ処理プロセスの流れを示している。
【００９１】
判定部（不図示）は、演算処理が実行されていない空きＣＰＵがあるか否かの確認を行う。そして、空きＣＰＵがあると判断された場合、空きＣＰＵの数が、すでに分割した処理のうち未処理データの演算処理の数を超えているか否かの判定を行う（Ｓ１０００；判定工程）。空きＣＰＵの数が未処理データの演算処理の数を超えていないと判断される場合（Ｓ１０００のＹＥＳ）、未処理データの演算処理を空きＣＰＵに割り当てデータの演算処理を実行する（Ｓ１１００；割当工程）。未処理データを空きＣＰＵに割り当てることにより全てのデータの演算処理を終え、ロボットの組に対して干渉の有無の解析が全て完了すると（Ｓ１２００のＹＥＳ）、本フローチャートにおける処理は終了する。
【００９２】
一方、空きＣＰＵの数が、すでに分割した処理のうち未処理データの演算処理の数を超えていると判断される場合（Ｓ１０００のＮＯ）、分割部３２０は、未処理データの演算処理をさらに複数に分割する処理を行う（Ｓ１３００；再分割工程）。割当部３３０は、さらに分割された各演算処理を、空きＣＰＵにそれぞれ割り当てデータの演算処理を実行する（Ｓ１４００；再割当工程）。未処理データの演算処理を空きＣＰＵに割り当てることによりデータの演算処理を終え、ロボットの組に対して干渉の有無の解析が完了すると（Ｓ１５００のＹＥＳ）、解析が完了した処理済みのデータの演算処理を順次結合し（Ｓ１６００；結合工程）、ロボットの組に対して干渉の有無の解析が全て完了すると（Ｓ１２００のＹＥＳ）、本フローチャートにおける処理は終了する。
【００９３】
このように、データの演算処理状況に応じて、演算処理の分割および結合を行うことにより、解析時間をより短縮することが可能になる。データの演算処理の効率をより向上させることができる。この分割処理および結合処理は上述の場合に限定されるものではない。分割処理は任意の未処理データに対して行うことができる。また、分割処理は空きＣＰＵの数に対する未処理のデータ処理の数の割合が所定値を超えると判断される場合に、自動的に実行されるように構成してもよい。この判断は、例えば、オフラインティーチング装置１００が備える判定部（不図示）が実行する。
【００９４】
なお、分割処理を行うに際しては、分割したデータの演算処理を結合することを考慮し、分割した複数のデータの演算処理に当該演算処理をそれぞれ識別するための識別子を割り当てることが好ましい。識別子の割り当ては、例えば複数のデータファイルにあらかじめ通し番号を付与することで実現できる。
【００９５】
以上説明したように、実施形態に係るデータ処理部３００のデータ処理によれば、ＣＰＵの処理状況に応じて、データ処理が実行されていない空きのＣＰＵにデータの演算処理を割り当て解析を実行することによって、効率よく解析処理を行うことができ、解析処理の高速化をさらに向上させることができる。
【符号の説明】
【００９６】
１  オフラインティーチングシステム、  １２  軌跡、  １４  干渉領域、  １００  オフラインティーチング装置、  １１０  軌跡取得部、  １２０  衝突解析部、  １３０  インターロック設定部、  １４０  通知部、  １５０  搬送情報取得部、  １６０  記憶部、  ２００  ロボット、  ２０２  ワーク、  ２０４  駆動部、  ３００  データ処理部、  ３１０  演算処理部（ＣＰＵ）、  ３２０  分割部、  ３３０  割当部
【図１】
2016190315.tif 000003
【図２】
2016190315.tif 000004
【図３】
2016190315.tif 000005
【図４】
2016190315.tif 000006
【図５】
2016190315.tif 000007
【図６】
2016190315.tif 000008
【図７】
2016190315.tif 000009
【図８】
2016190315.tif 000010
【図９】
2016190315.tif 000011
【図１０】
2016190315.tif 000012
【図１１】
2016190315.tif 000013
【図１２】
2016190315.tif 000014
【図１３】
2016190315.tif 000015
【図１４】
2016190315.tif 000016
【図１５】
2016190315.tif 000017
【図１６】
2016190315.tif 000018
【図１７】
2016190315.tif 000019
【図１８】
2016190315.tif 000020