(57)【特許請求の範囲】
【請求項１】
ロボットの動作パターンを規定する複数の作業ジョブを記憶する作業ジョブ記憶部と、
前記複数の作業ジョブのいずれかについて、前記ロボットの動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定する第一条件設定部と、
前記複数の作業ジョブのうち、前記ロボットに実行させる複数の実行対象の作業ジョブを、前記ユーザインタフェースへの入力に応じて設定する第二条件設定部と、
前記第二条件設定部により設定された前記複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの前記作業ジョブが前記環境条件を満たすか否かを、当該実行順序に基づいて判定するプランニング支援部と、を備えるプログラミング支援装置。
【請求項２】
前記プランニング支援部は、前記実行フローのいずれか一つの前記作業ジョブの実行タイミングにおける環境状態を、当該実行フローの他の作業ジョブにおける前記ロボットの動作内容と、当該実行フローの前記実行順序とに基づいて特定し、当該環境状態が当該一つの作業ジョブの前記環境条件を満たすか否かを判定する、請求項１記載のプログラミング支援装置。
【請求項３】
前記実行フローが第一作業ジョブ及び第二作業ジョブを順に含む場合に、前記プランニング支援部は、少なくとも前記第一作業ジョブにおける前記ロボットの動作内容に基づいて前記第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が前記第二作業ジョブの前記環境条件を満たすか否かを判定する、請求項１又は２記載のプログラミング支援装置。
【請求項４】
前記実行フローが前記第一作業ジョブ、前記第二作業ジョブ及び第三作業ジョブを順に含む場合に、前記プランニング支援部は、少なくとも前記第一作業ジョブにおける前記ロボットの動作内容に基づいて前記第二作業ジョブの実行タイミングにおける前記環境状態を特定し、当該環境状態を少なくとも前記第二作業ジョブにおける前記ロボットの動作内容に基づいて更新して前記第三作業ジョブの実行タイミングにおける前記環境状態を特定し、当該環境状態が前記第三作業ジョブの前記環境条件を満たすか否かを判定する、請求項３記載のプログラミング支援装置。
【請求項５】
前記第一作業ジョブにより規定される動作パターンが、作業対象物を物理的に操作する動作を含み、前記第二作業ジョブの前記環境条件が、当該作業対象物の状態を指定する条件を含む場合に、前記プランニング支援部は、前記第一作業ジョブに従って前記ロボットが動作した後の当該作業対象物の状態を前記第二作業ジョブの実行タイミングにおける環境状態として特定し、当該環境状態が前記第二作業ジョブの前記環境条件を満たすか否かを判定する、請求項３又は４記載のプログラミング支援装置。
【請求項６】
前記プランニング支援部は、前記実行フローのいずれか一つの前記作業ジョブの環境条件と、当該実行フローの他の前記作業ジョブにおける前記ロボットの動作内容とに基づいて、当該一つの作業ジョブが当該環境条件を満たすために、当該一つの作業ジョブと当該他の作業ジョブとの間に必要とされる順序条件を生成し、当該実行フローの実行順序が当該順序条件を満たすか否かを判定する、請求項１記載のプログラミング支援装置。
【請求項７】
前記実行フローが、作業対象物を物理的に操作する動作を含む動作パターンを規定する第一作業ジョブと、当該作業対象物の状態を指定する条件を含む前記環境条件が設定された第二作業ジョブとを含む場合に、前記プランニング支援部は、前記第一作業ジョブに従って前記ロボットが動作した後の当該作業対象物の状態と、前記第二作業ジョブの前記環境条件が指定する当該作業対象物の状態との関係に基づいて、前記第一作業ジョブと前記第二作業ジョブとの間の前記順序条件を生成する、請求項６記載のプログラミング支援装置。
【請求項８】
前記第二条件設定部は、前記ユーザインタフェースへの入力に基づいて、少なくとも二つの前記実行対象の作業ジョブの間に、実行タイミングの関係を指定するタイミング条件を更に設定するように構成され、
前記プランニング支援部は、前記タイミング条件を満たすように前記実行順序を定めた前記実行フローにおいて、少なくとも一つの前記作業ジョブが前記環境条件を満たすか否かを当該実行順序に基づいて判定する、請求項１〜７のいずれか一項記載のプログラミング支援装置。
【請求項９】
前記環境条件を入力するための第一入力エリアと、前記複数の実行対象の作業ジョブを選択する第二入力エリアと、を含む入力画面を前記ユーザインタフェースに表示するためのデータを生成する画面データ生成部を更に備える、請求項８記載のプログラミング支援装置。
【請求項１０】
前記ユーザインタフェースへの入力に応じて前記第一入力エリアの表示用データを更新する第一更新部と、
前記ユーザインタフェースへの入力に応じて前記第二入力エリアの表示用データを更新する第二更新部と、を更に備え、
前記画面データ生成部は、前記複数の作業ジョブのリストを示すリスト表示エリアを更に含む前記入力画面の表示用データを生成し、
前記第一更新部は、前記リスト表示エリアにおいて選択された前記作業ジョブの前記環境条件を入力可能とするように前記第一入力エリアの表示用データを更新し、
前記第二更新部は、前記リスト表示エリアにおいて選択された複数の前記作業ジョブを表示して当該複数の作業ジョブ間の前記タイミング条件を入力可能とするように前記第二入力エリアの表示用データを更新する、請求項９記載のプログラミング支援装置。
【請求項１１】
前記第二入力エリアに表示される前記複数の作業ジョブの仮フローを生成する仮フロー生成部を更に備え、
前記第二更新部は、前記仮フローを表示し、前記仮フローにおける前記作業ジョブ間に前記タイミング条件を入力可能とするように前記第二入力エリアの表示用データを更新する、請求項１０記載のプログラミング支援装置。
【請求項１２】
前記画面データ生成部は、前記リスト表示エリアが前記第一入力エリア及び前記第二入力エリアの間に配置されるように前記入力画面の表示用データを生成する、請求項１０又は１１記載のプログラミング支援装置。
【請求項１３】
少なくとも前記環境条件を前記作業ジョブに対応付けて条件記憶部に登録する条件登録部と、
前記条件記憶部から前記環境条件を読み込む条件読込部とを更に備える、請求項１〜１２のいずれか一項記載のプログラミング支援装置。
【請求項１４】
前記プランニング支援部は、
前記実行フローにおいて少なくとも一つの前記作業ジョブが前記環境条件を満たすか否かを、当該実行フローの前記実行順序に基づいて判定する判定部と、
前記実行フローにおいていずれかの前記作業ジョブが前記環境条件を満たしていないと判定した場合に、前記タイミング条件を満たすように前記実行順序を変更するフロー調節部と、
前記実行フローが前記環境条件を満たさない前記作業ジョブを含んでいない場合に、前記環境条件及び前記タイミング条件とは異なる評価条件に基づいて当該実行フローを評価し、評価結果に基づいて当該実行フローの採用可否を判定するフロー評価部と、を有する、請求項８〜１２のいずれか一項記載のプログラミング支援装置。
【請求項１５】
前記プランニング支援部は、
前記実行フローと、前記ロボットの動作シミュレーション用のモデルデータとに基づいて、前記作業ジョブ間における前記ロボットの動作パターンを規定するつなぎジョブを生成するつなぎジョブ生成部を更に有し、
前記フロー評価部は、前記実行フロー、前記複数の実行対象の作業ジョブ及び少なくとも一つの前記つなぎジョブを前記評価条件に基づいて評価し、評価結果に基づいて前記実行フローの採用可否を判定する、請求項１４記載のプログラミング支援装置。
【請求項１６】
前記実行フローの採用可否を判定するための基準を調節する演算レベルを、前記ユーザインタフェースへの入力に応じて設定する演算レベル設定部を更に備える、請求項１４又は１５記載のプログラミング支援装置。
【請求項１７】
前記プランニング支援部により採用可と判定された前記実行フローに基づいて、前記ロボットの動作プログラムを生成するプログラム生成部を更に備える、請求項１４〜１６のいずれか一項記載のプログラミング支援装置。
【請求項１８】
請求項１７記載のプログラミング支援装置と、
前記ロボットと、
前記プログラム生成部により生成された前記動作プログラムに従って前記ロボットを制御するコントローラと、を備えるロボットシステム。
【請求項１９】
プログラミング支援装置により実行される方法であって、
ロボットの動作パターンを規定する複数の作業ジョブを記憶することと、
前記複数の作業ジョブのいずれかについて、前記ロボットの動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定することと、
前記複数の作業ジョブのうち、前記ロボットに実行させる複数の実行対象の作業ジョブを、前記ユーザインタフェースへの入力に応じて設定することと、
前記複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの前記作業ジョブが前記環境条件を満たすか否かを、当該実行順序に基づいて判定することと、を含むプログラミング支援方法。
【請求項２０】
プログラミング支援装置により実行されるプログラム生成方法であって、
ロボットの動作パターンを規定する複数の作業ジョブを記憶することと、
前記複数の作業ジョブのいずれかについて、前記ロボットの動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定することと、
前記複数の作業ジョブのうち、前記ロボットに実行させる複数の実行対象の作業ジョブを、前記ユーザインタフェースへの入力に応じて設定することと、
少なくとも一つの前記作業ジョブについて、前記ロボットの動作パスを規定する第一パス情報を取得することと、
前記複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの前記作業ジョブが前記環境条件を満たすか否かを、当該実行順序に基づいて判定することと、
前記実行フローが前記環境条件を満たさない前記作業ジョブを含んでいない場合に、
当該実行フローに基づいて、前記ロボットの動作プログラムを生成することと、を含むプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プログラミング支援装置、ロボットシステム、プログラミング支援方法及びプログラム生成方法に関する。
【背景技術】
【０００２】
実行主体を複数含むアクションを実行主体ごとに複数のアクションに分割する分割部と、分割部によって分割されたアクションを含む複数のアクション間の依存関係をあらわす依存情報に基づき、複数のアクションのうち実行主体が一致する複数のアクションの少なくとも一つの開始タイミングを調整する調整部と、を備える作業計画装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−５９９８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示は、ロボットの動作プログラミングの負担軽減に有効なプログラミング支援装置、ロボットシステム、プログラミング支援方法及びプログラム生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本開示の一側面に係るプログラミング支援装置は、ロボットの動作パターンを規定する複数の作業ジョブを記憶するジョブ記憶部と、複数の作業ジョブのいずれかについて、ロボットの動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定する第一条件設定部と、複数の作業ジョブのうち、ロボットに実行させる複数の実行対象の作業ジョブを、ユーザインタフェースへの入力に応じて設定する第二条件設定部と、第二条件設定部により設定された複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定するプランニング支援部と、を備える。
【発明の効果】
【０００６】
本開示によれば、ロボットの動作プログラミングの負担軽減に有効なプログラミング支援装置、ロボットシステム、プログラミング支援方法及びプログラム生成方法を提供することができる。
【図面の簡単な説明】
【０００７】
【図１】ロボットシステムの全体構成を示す模式図である。
【図２】プログラミング支援装置の機能的な構成を示すブロック図である。
【図３】メイン画面を例示する模式図である。
【図４】環境構築モジュールの機能的な構成を示すブロック図である。
【図５】環境構築画面を例示する模式図である。
【図６】モデル選択画面を例示する模式図である。
【図７】属性入力画面を例示する模式図である。
【図８】アイコン選択画面を例示する模式図である。
【図９】状態入力画面を例示する模式図である。
【図１０】条件設定モジュールの機能的な構成を示すブロック図である。
【図１１】プランニング画面を例示する模式図である。
【図１２】第一制約条件の入力画面を例示する模式図である。
【図１３】順序指定画面を例示する模式図である。
【図１４】プログラミングモジュールの機能的な構成を示すブロック図である。
【図１５】シミュレーションモジュールの機能的な構成を示すブロック図である。
【図１６】シミュレーション画面を例示する模式図である。
【図１７】シミュレーション対象の選択画面を例示する模式図である。
【図１８】プログラミング支援装置のハードウェア構成を示すブロック図である。
【図１９】プログラミング支援手順を示すフローチャートである。
【図２０】環境構築手順を示すフローチャートである。
【図２１】属性データの登録手順を示すフローチャートである。
【図２２】状態データの登録手順を示すフローチャートである。
【図２３】プログラミング支援条件の設定手順を示すフローチャートである。
【図２４】第一制約条件の設定手順を示すフローチャートである。
【図２５】個々の条件の設定手順を示すフローチャートである。
【図２６】個々の条件の作成手順を示すフローチャートである。
【図２７】第二制約条件の設定手順を示すフローチャートである。
【図２８】演算レベルの設定手順を示すフローチャートである。
【図２９】プログラム生成手順を示すフローチャートである。
【図３０】シミュレーション手順を示すフローチャートである。
【図３１】複数の作業ジョブの実行フローを例示する模式図である。
【図３２】作業ジョブごとの環境条件を例示する表である。
【図３３】作業ジョブの実行タイミングにおける環境状態を例示する表である。
【図３４】タイミング条件を例示する表である。
【図３５】チェック手順を示すフローチャートである。
【発明を実施するための形態】
【０００８】
以下、実施形態について、図面を参照しつつ詳細に説明する。説明において、同一要素又は同一機能を有する要素には同一の符号を付し、重複する説明を省略する。本実施形態に係るロボットシステムは、オペレータにより教示された動作をロボットに実行させることにより、加工、組立等の様々な作業を自動化するシステムである。
【０００９】
１．ロボットシステム
図１に示すように、ロボットシステム１は、ロボット２と、ロボットコントローラ３と、プログラミング支援装置１００とを備える。
【００１０】
ロボット２は、例えば多軸（例えば６軸又は７軸）のシリアルリンク型の垂直多関節ロボットであり、その先端部２ａにツールを保持した状態で様々な作業を実行できるように構成されている。ロボット２は、所定の範囲内において、先端部２ａの位置及び姿勢を自在に変更し得るものであればよく、必ずしも６軸の垂直多関節ロボットに限られない。例えばロボット２は、６軸に１軸の冗長軸を追加した７軸の垂直多関節ロボットであってもよい。
【００１１】
ロボットコントローラ３は、予め生成された動作プログラムに従ってロボット２を制御する。動作プログラムは、例えばロボット２の先端部２ａのパス情報を含む。パス情報は、先端部２ａの位置・姿勢の経時的な推移を指定する情報である。例えばパス情報は、時系列に並ぶ複数の位置・姿勢目標値を含む。ロボットコントローラ３は、先端部２ａの位置・姿勢を上記位置・姿勢目標値に一致させるための関節角度目標値（ロボット２の各関節の角度目標値）を算出し、当該関節角度目標値に従ってロボット２を制御する。
【００１２】
プログラミング支援装置１００は、上記動作プログラムのプログラミングを支援する装置である。プログラミング支援装置１００は、ロボット２の動作パターンを規定する複数の作業ジョブを記憶することと、複数の作業ジョブのいずれかについて、ロボット２の動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定することと、複数の作業ジョブのうち、ロボット２に実行させる複数の実行対象の作業ジョブを、ユーザインタフェースへの入力に応じて設定することと、複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定することと、を実行するように構成されている。
【００１３】
動作パターンとは、ロボット２に所定の作業を実行させるように、予め作成された動作命令である。動作パターンは、当該所定の作業の実行中における上記パス情報を含む。
【００１４】
プログラミング支援装置１００は、実行フローのいずれか一つの前記作業ジョブの実行タイミングにおける環境状態を、当該実行フローの他の作業ジョブにおけるロボット２の動作内容と、当該実行フローの実行順序とに基づいて特定し、当該環境状態が当該一つの作業ジョブの環境条件を満たすか否かを判定してもよい。
【００１５】
図３１は、例えば、蓋１２を有しボルト１３を収容する箱１１を含む環境にてロボット２を動作させるための三つの作業ジョブを含む実行フローを模式的に示す。図３１の（ａ）は、蓋１２を開く作業ジョブ「ジョブ０１」を示す。図３１の（ｂ）は、箱１１からボルト１３を取り出す別の作業ジョブ「ジョブ０２」を示す。図３１の（ｃ）は、箱１１の蓋１２を閉じる更に別のジョブ「ジョブ０３」を示す。
【００１６】
ジョブ０１，０２，０３のそれぞれにより規定される動作パターンは、作業対象物を物理的に操作する動作を含む。例えばジョブ０１により規定される動作パターンは、蓋１２を作業対象物として、蓋１２を閉じた状態から開いた状態にする動作を含む。ジョブ０２により規定される動作パターンは、箱１１内からボルト１３を取り出す動作を含む。ジョブ０３により規定される動作パターンは、蓋１２を開いた状態から閉じた状態にする動作を含む。
【００１７】
図３２に示すように、ジョブ０１，０２，０３のそれぞれには、上述した環境条件が設定されている。それぞれの環境条件は、ロボットの作業環境に含まれる物の状態を指定する条件を含む。ロボットの作業環境に含まれる物とは、上述した作業対象物及びその他の物を含み得る。例えばジョブ０１の蓋１２を開く動作は、蓋１２が閉じた状態でなければ実行することができない。このためジョブ０１には、当該ジョブの作業対象物である蓋１２の状態を指定する環境条件として、「蓋１２が閉じていること」が設定されている。ジョブ０２の箱１１からボルト１３を取り出す動作は、箱１１内にボルト１３が位置し、蓋１２が開いている状態でなければ実行することができない。このためジョブ０２には、当該ジョブの作業対象物であるボルト１３の状態を指定する環境条件として、「ボルト１３が箱１１の中にあること」が設定され、他の物である蓋１２の状態を指定する環境条件として、「蓋１２が開いていること」が設定されている。更に、ジョブ０３の蓋１２を閉じる動作は、蓋１２が開いた状態でなければ実行することができない。このためジョブ０３には、当該ジョブの作業対象物である蓋１２の状態を指定する環境条件として、「蓋１２が開いていること」が設定されている。
【００１８】
図３１のように、実行フローが二つ以上の作業ジョブを順に含む場合に、プログラミング支援装置１００は、少なくとも先行する作業ジョブ（以下、「第一作業ジョブ」という。）におけるロボットの動作内容に基づいて後続する作業ジョブ（以下、「第二作業ジョブ」という。）の実行タイミングにおける環境状態を特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。
【００１９】
より具体的に、第一作業ジョブにより規定される動作パターンが、作業対象物を物理的に操作する動作を含み、第二作業ジョブの環境条件が、当該作業対象物の状態を指定する条件を含む場合に、プログラミング支援装置１００は、第一作業ジョブに従ってロボット２が動作した後の当該作業対象物の状態を第二作業ジョブの実行タイミングにおける環境状態として特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。
【００２０】
環境状態とは、実行フローに従ってロボット２が動作する場合に、実行フローにおける各タイミングにおいてロボット２の作業環境に実際に生じる状態を意味する。環境条件と同様に、環境状態は、ロボット２の作業環境に含まれる物の状態を含む。ロボット２の作業環境に含まれる物とは、上述した作業対象物及びその他の物を含み得る。
【００２１】
例えば、図３３に示すように、プログラミング支援装置１００は、ジョブ０１に従ってロボットが動作した後の蓋１２の状態である「開」を、ジョブ０２の実行タイミングにおける環境状態として特定する。また、ジョブ０１はボルト１３に対する動作を含んでいないので、プログラミング支援装置１００は、ジョブ０１に従ってロボット２が動作する前後でボルト１３の状態を変化させず、ジョブ０２においても引き続きボルト１３の状態を「箱１１の中」とする。プログラミング支援装置１００は、これらの環境状態がジョブ０２の環境条件を満たすか否かを判定する。ジョブ０２における環境条件は、「ボルト１３が箱１１の中にあること」、「蓋１２が開いていること」を含むので、当該環境状態は、ジョブ０２における環境条件を満たすこととなる。
【００２２】
実行フローが第一作業ジョブ、第二作業ジョブ及び第三作業ジョブを順に含む場合に、プログラミング支援装置１００は、少なくとも第一作業ジョブにおけるロボットの動作内容に基づいて第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態を少なくとも第二作業ジョブにおけるロボットの動作内容に基づいて更新して第三作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が第三作業ジョブの環境条件を満たすか否かを判定してもよい。
【００２３】
例えば、プログラミング支援装置１００は、上述したように、ジョブ０１におけるロボットの動作内容に基づいて、ジョブ０２の実行タイミングにおける蓋１２及びボルト１３の状態を「開」、「箱１１の中」とする。更に、プログラミング支援装置１００は、ジョブ０２に従ってロボットが動作した後のボルト１３の状態である「箱１１の外」を、ジョブ０３の実行タイミングにおける環境状態として特定する。また、ジョブ０２は蓋１２に対する動作を含んでいないので、プログラミング支援装置１００は、ジョブ０２に従ってロボット２が動作する前後で蓋１２の状態を変化させず、ジョブ０３においても引き続き蓋１２の状態を「開」とする。プログラミング支援装置１００は、これらの環境状態がジョブ０３の環境条件を満たすか否かを判定する。ジョブ０３における環境条件は、「蓋１２が開いていること」を含み、ボルト１３についての条件は含んでいないので、当該環境状態は、ジョブ０３における環境条件を満たすこととなる。
【００２４】
プログラミング支援装置１００は、実行フローのいずれか一つの作業ジョブの環境条件と、当該実行フローの他の作業ジョブにおけるロボット２の動作内容とに基づいて、当該一つの作業ジョブが当該環境条件を満たすために、当該一つの作業ジョブと当該他の作業ジョブとの間に必要とされる順序条件を生成し、当該実行フローの実行順序が当該順序条件を満たすか否かを判定してもよい。
【００２５】
例えばプログラミング支援装置１００は、実行フローが、ジョブ０１に従ってロボット２が動作した後の蓋１２の状態である「開」と、ジョブ０３に従ってロボット２が動作した後の蓋１２の状態である「閉」と、ジョブ０２の環境条件が指定する「蓋１２が開いていること」との関係に基づいて、ジョブ０２はジョブ０１の後、ジョブ０３の前に実行されること、という順序条件を生成する。図３１において、ジョブ０１、ジョブ０２及びジョブ０３は順に並んでいるので、図３１の実行フローの実行順序は、当該順序条件を満たすこととなる。
【００２６】
プログラミング支援装置１００は、ユーザインタフェースへの入力に基づいて、少なくとも二つの実行対象の作業ジョブの間に、実行タイミングの関係を指定するタイミング条件を更に設定するように構成されていてもよい。タイミング条件の具体例には、作業ジョブの順序を指定する条件が含まれる他、作業ジョブの間に確保すべき待機時間を指定する条件等も含まれる。この場合に、プログラミング支援装置１００は、タイミング条件を満たすように実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを当該実行順序に基づいて判定してもよい。
【００２７】
図３４は、タイミング条件の設定例を示す。図３４の例では、ジョブ０１とジョブ０２との間に「ジョブ０１がジョブ０２よりも前に実行されること」との条件が設定され、ジョブ０２とジョブ０３との間に「ジョブ０３がジョブ０２よりも後に実行されること」との条件が設定されている。このようなタイミング条件が設定される場合、当該タイミング条件を満たす実行フローによれば、ジョブ０２の実行タイミングにおける蓋１２の状態は必然的に「開」となる。このため、図３４に示すタイミング条件が設定される場合、ジョブ０２の環境条件として蓋１２の状態を指定することが必須ではない。換言すると、ジョブ０２の環境条件が「蓋が開いていること」を含んでいるのであれば、図３４のタイミング条件を設定することが必須ではない。
【００２８】
動作プログラムは、例えば、ロボット２等の一つ以上の制御対象を制御するコントローラ（例えばロボットコントローラ３）によって実行される。プログラミング支援装置１００が、動作プログラムのプログラミング支援を実行する制御対象は、一台のロボット２に限られない。例えばプログラミング支援装置１００は、複数の制御対象（例えば複数台のロボット２）を制御するための動作プログラムのプログラミング支援を実行するように構成されていてもよい。
【００２９】
２．プログラミング支援装置
以下、プログラミング支援装置１００の構成を具体的に説明する。図２に示すように、プログラミング支援装置１００は、一つ又は複数のコンピュータにより構成された本体１１０と、ユーザインタフェース１３０とを備える。
【００３０】
ユーザインタフェース１３０は、例えばモニタ１３１及び入力デバイス１３２を有する。モニタ１３１は、本体１１０から出力された情報を表示するための装置である。モニタ１３１は、グラフィック表示が可能であればいかなるものであってもよく、その具体例としては液晶パネルなどが挙げられる。入力デバイス１３２は、本体１１０に対し情報を入力するための装置である。入力デバイス１３２は、所望の情報を入力可能であればいかなるものであってもよく、その具体例としてはキーパッド及びマウス等が挙げられる。なお、モニタ１３１及び入力デバイス１３２は、入力機能と表示機能とを併せ持つタッチパネルとして一体化されていてもよい。
【００３１】
本体１１０は、機能的な構成（以下、「機能モジュール」という。）として、メインモジュール２００と、環境構築モジュール３００と、条件設定モジュール４００と、プログラミングモジュール５００と、シミュレーションモジュール６００とを備える。
【００３２】
メインモジュール２００は、ユーザの入力に応じて、プログラミング支援装置１００の各種機能を呼び出すためのモジュールである。
【００３３】
環境構築モジュール３００は、ロボット２の動作シミュレーション用の環境モデルデータ（モデルデータ）を構築するためのモジュールである。環境モデルデータは、例えばロボット２及びその周辺環境のモデルをポリゴンにより構成した三次元のサーフェスデータである。環境構築モジュール３００は、構築した環境モデルデータを環境データ記憶部１１１に書き込む。
【００３４】
条件設定モジュール４００は、作業ジョブごとの実行上の制約条件である第一制約条件と、作業ジョブ同士の関係についての制約条件である第二制約条件とを含むプログラミング支援条件を設定するためのモジュールである。
【００３５】
第一制約条件は、上述した環境条件等、作業ジョブの目的を達するために不可避な条件を含む。例えば、蓋つきの箱にワークを出し入れするための作業ジョブについては、蓋が空いた状態で実行することが上記不可避な条件となる。また、ツールにより加工を行うための作業ジョブについては、ツールを保持していること、ツールをオン状態にしていること等が上記不可避な条件となる。
【００３６】
第二制約条件は、上述したタイミング条件等、作業ジョブ同士の関係を規定する条件を含む。作業ジョブ同士の関係は、第一制約条件から導出可能なものであってもよいし、第一制約条件からは導出されないものであってもよい。第二制約条件は、個々の作業ジョブの目的を達するために不可避ではない条件も含む。
【００３７】
プログラミングモジュール５００は、条件設定モジュール４００により設定されたプログラミング支援条件に従って動作プログラムのプログラミング支援を実行するモジュールである。例えばプログラミングモジュール５００は、上記プログラミング支援条件に従って動作プログラムを生成し、当該動作プログラムを動作プログラム記憶部１１２に書き込む。プログラミングモジュール５００は、動作プログラムを生成するための仮フローをチェックしてもよい。
【００３８】
シミュレーションモジュール６００は、ロボット２の動作シミュレーションを実行するモジュールである。動作シミュレーションとは、シミュレーション環境下においてロボット２のモデルを動作させることを意味する。例えばシミュレーションモジュール６００は、上記環境モデルデータ（環境データ記憶部１１１に記憶された環境モデルデータ）により特定されるシミュレーション環境下において、上記動作プログラム（動作プログラム記憶部１１２に記憶された動作プログラム）に従ってロボット２のモデルを動作させる。
【００３９】
メインモジュール２００は、画面データ生成部２０１及びモジュール切替部２０２を有する。画面データ生成部２０１は、メイン画面Ａ１（図３参照）をモニタ１３１に表示するためのデータを生成する。メイン画面Ａ１は、プログラミング支援装置１００の各種機能を呼び出すための操作画面である。モジュール切替部２０２は、メイン画面Ａ１への操作入力に応じて、実行するモジュールを切り替える、ユーザインタフェース上の一つ以上のボタンと関連付けられている。
【００４０】
図３に示すように、メイン画面Ａ１は、例えば環境構築ボタンＡ２と、プランニングボタンＡ３と、シミュレーションボタンＡ４と、終了ボタンＡ５とを有する。環境構築ボタンＡ２は、環境構築モジュール３００を起動するためのボタンである。プランニングボタンＡ３は、条件設定モジュール４００及びプログラミングモジュール５００を起動するためのボタンである。シミュレーションボタンＡ４は、シミュレーションモジュール６００を起動するためのボタンである。終了ボタンＡ５は、メイン画面をクローズし、メインモジュール２００による処理を終了させるためのボタンである。
【００４１】
以下、環境構築モジュール３００、条件設定モジュール４００、プログラミングモジュール５００及びシミュレーションモジュール６００の構成を説明する。
【００４２】
（１）環境構築モジュール
図４に示すように、環境構築モジュール３００は、より細分化された機能モジュールとして、画面データ生成部３０１と、更新部３０２と、モデル追加部３０３と、描画データ生成部３０４と、属性データ登録部３０５と、状態データ登録部３０６とを有する。
【００４３】
画面データ生成部３０１は、環境構築画面Ｂ１をモニタ１３１に表示するためのデータを生成する。環境構築画面Ｂ１は、環境モデルデータの構築用の入力画面である。
【００４４】
図５を参照して、環境構築画面Ｂ１によれば、モデルをシミュレーション環境（シミュレーション環境エリアＢ２によって表される）に追加する（モデル追加ボタンＢ３によって）こと、モデルの属性を規定すること（属性設定ボタンＢ４によって）こと、及びモデルの状態を設定すること（状態設定ボタンＢ５によって）ができる。以下、モデルを「入力ターゲットモデル」ともいう。モデルは、シミュレーション環境において物を表す。環境構築画面Ｂ１のいくつかの機能的な特徴として、入力ターゲットモデルは、シミュレーション環境エリア（Ｂ２）に表示される画像から選択されてもよい。図５に示すように、環境構築画面Ｂ１は、例えばシミュレーション環境エリアＢ２と、モデル追加ボタンＢ３と、属性設定ボタンＢ４と、状態設定ボタンＢ５と、終了ボタンＢ６とを有する。シミュレーション環境エリアＢ２は、構築中の環境モデルデータにより示されるシミュレーション環境を三次元画像等により表示するエリアである。
【００４５】
モデル追加ボタンＢ３は、環境モデルデータにモデルデータを追加するためのボタンである。モデルデータは、例えばポリゴンにより構成された三次元のサーフェスデータである。
【００４６】
属性設定ボタンＢ４は、環境モデルデータに含まれる物を特定するデータ（以下、「属性データ」という。）を入力するためのボタンである。
【００４７】
状態設定ボタンＢ５は、環境モデルデータに含まれる物の状態を示すデータ（以下、「状態データ」という。）を入力するためのボタンである。状態データの具体例として、物が蓋つきの箱である場合には、「蓋が開いた状態」、「蓋が閉じた状態」等が挙げられる。物がオン・オフを切り替えて用いられるツールである場合には、「オン状態」、「オフ状態」等が挙げられる。
【００４８】
終了ボタンＢ６は、環境構築画面Ｂ１をクローズし、環境構築モジュール３００による処理を終了させるためのボタンである。
【００４９】
図４に戻り、更新部３０２は、入力デバイス１３２への操作入力に応じて、環境構築画面Ｂ１の表示用データを更新する。例えば更新部３０２は、モデル追加ボタンＢ３がクリックされるのに応じて、モデル選択画面Ｃ１を表示するように環境構築画面Ｂ１の表示用データを更新する。また、更新部３０２は、属性設定ボタンＢ４がクリックされるのに応じて、属性入力画面Ｄ１を表示するように環境構築画面Ｂ１の表示用データを更新する。更に、更新部３０２は、状態設定ボタンＢ５がクリックされるのに応じて、状態入力画面Ｆ１を表示するように環境構築画面Ｂ１の表示用データを更新する。
【００５０】
モデル追加ボタンＢ３がクリックされると（図５）、図６に示すモデル選択画面Ｃ１がユーザインタフェース上で開く。モデル選択画面Ｃ１は、環境モデルデータに追加すべきモデルデータを選択するための画面である。図６に示すように、モデル選択画面Ｃ１は、リスト表示エリアＣ２と、追加ボタンＣ３とを有する。リスト表示エリアＣ２は、環境モデルデータに追加可能なモデルデータのリストを表示する。追加ボタンＣ３は、リスト表示エリアＣ２において選択されたモデルデータの追加を指示するボタンである。
【００５１】
属性設定ボタンＢ４がクリックされると（図５）、図７に示す属性入力画面Ｄ１がユーザインタフェース上で開く。属性入力画面Ｄ１は、入力対象モデルの属性データを入力するための画面である。入力対象モデルは、環境モデルデータの構成要素としてシミュレーション環境エリアＢ２（図５）に表示されているモデルのいずれかをクリックすることによって選択可能である。図７に示すように、属性入力画面Ｄ１は、入力ボックスＤ２と、入力ボックスＤ３と、アイコン追加ボタンＤ４と、登録ボタンＤ５とを有する。入力ボックスＤ２は、入力対象モデルの種別（例えば「ロボット」、「ツール」、「ワーク」、「装置」等）を入力するための入力ボックスである。入力ボックスＤ２は、予め登録された選択肢の選択入力を可能とするように構成されていてもよい（図７の（ｂ）参照）。入力ボックスＤ３は、上記入力対象モデルの名称を入力するための入力ボックスである。アイコン追加ボタンＤ４は、入力対象モデルに関連付けるアイコンデータを入力するためのボタンである。例えば、アイコンデータは、アイコン追加ボタンＤ４のクリックに伴い表示されるアイコン選択画面Ｅ１（図８）において入力可能である。
【００５２】
図８に示すように、アイコン選択画面Ｅ１は、リスト表示エリアＥ２と、追加ボタンＥ３とを有する。リスト表示エリアＥ２は、使用可能なアイコンデータのリストを表示する。追加ボタンＥ３は、リスト表示エリアＥ２において選択されたアイコンデータの追加を指示するボタンである。
【００５３】
図７に戻り、登録ボタンＤ５は、属性入力画面Ｄ１において入力されたデータの登録を指示するためのボタンである。登録ボタンＤ５は、入力された属性データを、入力ターゲットモデル（又は「物」、又はシミュレーション環境における「モデル部品」）と関連付けてストレージに登録（又は記録）するためのボタンである。
【００５４】
状態設定ボタンＢ５がクリックされると（図５）、図９に示す状態入力画面Ｆ１がユーザインタフェース上で開く。図９に示すように、状態入力画面Ｆ１は、入力ボックスＦ２と、入力ボックスＦ３と、登録ボタンＦ４とを含む。入力ボックスＦ２は、入力対象モデルを選択するための入力ボックスである。入力ボックスＦ２は、環境データ記憶部１１１に登録済みのモデル名の選択入力を可能とするように構成されていてもよい。入力ボックスＦ３は、状態の名称を入力するための入力ボックスである。登録ボタンＦ４は、状態入力画面Ｆ１において入力されたデータの登録を指示するためのボタンである。登録ボタンＦ４は、入力された状態を、入力ターゲットモデル（又は「物」、又はシミュレーション環境における「モデル部品」）と関連付けてストレージに登録（又は記録）するためのボタンである。
【００５５】
図４に戻り、更新部３０２は、環境構築画面Ｂ１（図５）においてモデル追加ボタンＢ３がクリックされ、モデルデータが環境モデルデータに追加された後に、追加後のシミュレーション環境の画像を表示するようにシミュレーション環境エリアＢ２の表示用データを更新する。
【００５６】
さらに図４を参照し、モデル追加部３０３は、ユーザインタフェース１３０への入力に応じて、環境データ記憶部１１１の環境モデルデータにモデルデータを追加する。例えばモデル追加部３０３は、モデル追加ボタンＢ３（図５）がクリックされるのに応じ、モデルデータ記憶部１１３を参照してモデルデータのリストを生成し、リスト表示エリアＣ２（図６）の表示用データとして更新部３０２に出力する。
【００５７】
モデルデータ記憶部１１３は、予め作成されてもよい複数のモデルデータ（又はデータ要素）を記憶する。モデルデータ記憶部１１３は、プログラミング支援装置１００に設けられていてもよいし、プログラミング支援装置１００の他の装置（例えば三次元設計用のコンピュータ）に設けられていてもよい。
【００５８】
図６に示すモデル選択画面Ｃ１をさらに参照して、その後、モデル追加部３０３は、追加ボタンＣ３のクリックにより選択されたモデルデータをモデルデータ記憶部１１３から取得して環境データ記憶部１１１の環境モデルデータに追加する。
【００５９】
描画データ生成部３０４は、環境データ記憶部１１１に記憶された環境モデルデータを用いてシミュレーション環境の描画データを生成し、シミュレーション環境エリアＢ２（図５）の表示用データとして更新部３０２に出力する。
【００６０】
属性データ登録部３０５は、ユーザインタフェース１３０への入力に応じて、環境データ記憶部１１１の環境モデルデータに上記属性データを追加する。例えば属性データ登録部３０５は、属性入力画面Ｄ１（図７）において入力されたデータを登録ボタンＤ５（図７）のクリックに応じて取得し、入力対象モデルに対応付けて環境データ記憶部１１１に書き込む。
【００６１】
状態データ登録部３０６は、ユーザインタフェース１３０への入力に応じて、環境データ記憶部１１１の環境モデルデータに上記状態データを追加する。例えば状態データ登録部３０６は、状態入力画面Ｆ１（図９）において入力されたデータを登録ボタンＦ４（図９）のクリックに応じて取得し、入力対象モデルに対応付けて環境データ記憶部１１１に書き込む。
【００６２】
（２）条件設定モジュール
条件設定モジュール４００（図２）は、上記第一制約条件及び上記第二制約条件を分けて設定する。図１０に示すように、条件設定モジュール４００は、より細分化された機能モジュールとして、画面データ生成部４０１と、第一更新部４０２と、第二更新部４０３と、第三更新部４０４と、リスト生成部４０５と、制約メニュー生成部４０６と、第一入力サポート部４０８と、第二入力サポート部４０９と、オプション情報取得部４１０と、条件読込部４１１と、第一条件設定部４１２と、仮フロー生成部４１６と、第二条件設定部４１７と、演算レベル設定部４１８と、条件登録部４１９とを有する。
【００６３】
画面データ生成部４０１は、第一制約条件を入力するための第一入力エリア及び第二制約条件を入力するための第二入力エリアを含む入力画面（図１１参照）をモニタ１３１の表示用データを生成し、モニタ１３１に出力する。画面データ生成部４０１は、複数の作業ジョブのリストを示すリスト表示エリアを更に含む入力画面の表示用データを生成してもよい。画面データ生成部４０１は、リスト表示エリアが第一入力エリア及び第二入力エリアの間に配置されるように入力画面の表示用データを生成してもよい。
【００６４】
例えば画面データ生成部４０１は、図１１に示すプランニング画面Ｇ１（入力画面）の表示用データを生成する。プランニング画面Ｇ１は、リスト表示エリアＧ２と、第一入力エリアＧ９と、第二入力エリアＧ２０と、制約メニュー表示エリアＧ３２と、第三入力エリアＧ３４と、条件登録ボタンＧ３６と、プランニングボタンＧ３７と、保存ボタンＧ３８とを有する。
【００６５】
リスト表示エリアＧ２は、予め作成されている複数の作業ジョブのリストを表示する。リスト表示エリアＧ２は、複数の作業ジョブにそれぞれ対応する複数のリスト要素Ｇ３を並べて表示する。リスト要素Ｇ３は、所定の時系列順に並んでいてもよい。リスト要素Ｇ３は、名称表示部Ｇ５及びアイコン表示部Ｇ６を含む。名称表示部Ｇ５は、作業ジョブの名称をテキスト形式で表示する。アイコン表示部Ｇ６は、作業ジョブの内容に関する一つ以上のアイコン（例えば作業対象物のアイコン）を表示する。
【００６６】
第一入力エリアＧ９は、第一制約条件を入力するためのエリアである。第一入力エリアＧ９は、作業内容入力エリアＧ１０及び制約条件入力エリアＧ１６を含む。
【００６７】
作業内容入力エリアＧ１０は、作業ジョブの内容を特定する情報（以下、「作業内容情報」という。）を入力するためのエリアである。作業内容情報は、例えば作業対象物を特定する情報と、作業対象物に対する操作内容を特定する情報とを含む。なお、作業対象物は、ロボット２による作業の対象となればいかなる物であってもよい。ワークに対する作業に際してロボット２が用いるツールも、ロボット２による搬送作業の対象となるので、作業対象物に含まれる。
【００６８】
例えば作業内容入力エリアＧ１０は、複数の項目指定ボタンＧ１１と、アイコン選択エリアＧ１２と、入力内容表示エリアＧ１３と、名称入力エリアＧ１５とを含む。項目指定ボタンＧ１１は、上記作業内容情報の項目を選択するためのボタンである。アイコン選択エリアＧ１２は、項目指定ボタンＧ１１のクリックにより選択された項目に入力し得る選択肢をアイコン表示する。例えば、項目指定ボタンＧ１１のうち「対象」ボタンがクリックされると、対象の選択肢（例えば、箱、ボルト、箱に収容された物等）がアイコンとして表示される。また、例えば、項目指定ボタンＧ１１のうち「ツール」ボタンがクリックされると、ツールの選択肢（例えば、ねじ回し、レンチ、治具等）がアイコンとして表示される。入力内容表示エリアＧ１３は、入力済みの作業内容情報を表示する。名称入力エリアＧ１５は、作業ジョブの名称の入力を取得する。
【００６９】
制約条件入力エリアＧ１６は、制約条件を入力するためのエリアである。制約条件入力エリアＧ１６は、複数の条件入力部Ｇ１７を有する。個々の条件入力部Ｇ１７は、一つの制約条件の入力を取得する。条件入力部Ｇ１７は、新規作成ボタンＧ１８と、表示部Ｇ１９とを有する。新規作成ボタンＧ１８は、条件作成画面Ｈ１（図１２を参照して後述）を表示させるためのボタンである。表示部Ｇ１９は、条件作成画面Ｈ１において作成された条件を表示する。
【００７０】
第二入力エリアＧ２０は、第二制約条件を入力するためのエリアである。第二入力エリアＧ２０は、条件入力部Ｇ２１及び結果出力部Ｇ２９を有する。条件入力部Ｇ２１は、フロー表示部Ｇ２２と、タブＧ２８とを含む。フロー表示部Ｇ２２は、複数のフロー要素Ｇ２４を並べた仮フローＧ２３と、少なくとも一つの条件要素Ｇ２５とを表示する。仮フローＧ２３は、制御対象（例えばロボット２）によって実行される作業ジョブを含む手順を表す。仮フローＧ２３は、動作プログラムを構成するために選択された複数の作業ジョブの実行順序を示す。複数のフロー要素Ｇ２４は、複数の作業ジョブにそれぞれ対応する。
【００７１】
プログラミング支援装置１００が、複数の制御対象（例えばロボット）について動作プログラムのプログラミング支援を実行する場合、第二入力エリアＧ２０は、複数の制御対象にそれぞれ対応する複数の仮フローＧ２３を、図１１の「手順１」、「手順２」と名付けられたタブによって例示されるように表示してもよい。
【００７２】
条件要素Ｇ２５は、仮フローＧ２３における作業ジョブ間に設定された第二制約条件を図示する。例えば、条件要素Ｇ２５は、第二制約条件の設定対象となっている二つの作業ジョブにそれぞれ対応する二つのフロー要素Ｇ２４に関連付けて表示される。
【００７３】
図示の例においては、三つの条件要素Ｇ２５，Ｇ２６，Ｇ２７が表示されている。条件要素Ｇ２５は、一番目の作業ジョブと、二番目の作業ジョブとを一セットのジョブとしてグループ化する制約条件を示しており、一番目のフロー要素Ｇ２４と二番目のフロー要素Ｇ２４とを囲む枠体として表示されている。条件要素Ｇ２６は、五番目の作業ジョブと、六番目の作業ジョブとの間に確保すべき時間間隔を定める制約条件を示しており、五番目のフロー要素Ｇ２４と六番目のフロー要素Ｇ２４とを結ぶライン上に図示されている。条件要素Ｇ２７は、三番目の作業ジョブと、五番目の作業ジョブとの間に確保すべき時間間隔を定める制約条件を示しており、四番目のフロー要素Ｇ２４を経ずに三番目のフロー要素Ｇ２４と五番目のフロー要素Ｇ２４とを結ぶライン上に図示されている。タブＧ２８は、フロー表示部Ｇ２２の上部に設けられており、条件入力部Ｇ２１と結果出力部Ｇ２９との表示切替に用いられる。
【００７４】
結果出力部Ｇ２９は、プログラミングモジュール５００により生成された実行フローを表示する。結果出力部Ｇ２９は、実行フローを表示するフロー表示部Ｇ３０と、タブＧ３１とを含む。フロー表示部Ｇ３０は、フロー表示部Ｇ２２と同一の位置に表示される。タブＧ３１は、上述のタブＧ２８とは異なる位置にて、フロー表示部Ｇ３０の上部に設けられている。フロー表示部Ｇ２２が表示されている状態にてタブＧ３１をクリックすると、フロー表示部Ｇ３０を表示させることができ、フロー表示部Ｇ３０が表示されている状態にてタブＧ２８をクリックすると、フロー表示部Ｇ２２を表示させることができる。
【００７５】
制約メニュー表示エリアＧ３２は、第二入力エリアＧ２０に入力可能な複数の制約条件のリストを表示する。制約メニュー表示エリアＧ３２は、複数の制約条件にそれぞれ対応する複数のメニュー要素Ｇ３３を並べて表示する。一例として、制約メニュー表示エリアＧ３２は、第一入力エリアＧ９及び第二入力エリアＧ２０の間において、リスト表示エリアＧ２に隣接するように配置されている。
【００７６】
第三入力エリアＧ３４は、プログラミング支援における演算レベル（後述）の入力を取得する。例えば、第三入力エリアＧ３４は、予め設定された複数の演算レベルをラジオボタンＧ３５により選択し得るように構成されている。一例として、第三入力エリアＧ３４は、第一入力エリアＧ９及び第二入力エリアＧ２０の間に配置されており、制約メニュー表示エリアＧ３２とは逆側にてリスト表示エリアＧ２に隣接するように配置されている。
【００７７】
条件登録ボタンＧ３６は、第一入力エリアＧ９、第二入力エリアＧ２０及び第三入力エリアＧ３４への入力内容の登録を指示するためのボタンである。プランニングボタンＧ３７は、第一入力エリアＧ９、第二入力エリアＧ２０及び第三入力エリアＧ３４への入力内容に従ったプログラミング支援の実行を指示するためのボタンである。プログラミング支援を実行することは、例えば、ロボットコントローラを動作させるための動作プログラムを生成することであってもよい。保存ボタンＧ３８は、プログラミング支援により生成された動作プログラムの保存を指示するためのボタンである。
【００７８】
なお、プランニング画面Ｇ１の構成はあくまで一例である。入力画面は、第一入力エリア及び第二入力エリアを含む限りどのように構成されていてもよい。例えば入力画面は、第一入力エリア及び第二入力エリアがリスト表示エリアの上下に位置するように構成されていてもよい。入力画面は、第一入力エリアの少なくとも一部と、第二入力エリアの少なくとも一部とを同じ位置に切り替えて表示するように構成されていてもよい。
【００７９】
図１０に戻り、第一更新部４０２は、ユーザインタフェース１３０への入力に応じて第一入力エリアＧ９の表示用データを更新する。第一更新部４０２は、リスト表示エリアＧ２において選択された作業ジョブの第一制約条件を入力可能とするように第一入力エリアＧ９の表示用データを更新してもよい。例えば、第一更新部４０２は、リスト表示エリアＧ２においていずれかのリスト要素Ｇ３がクリックされる（選択される）と、当該リスト要素Ｇ３に対応する作業ジョブの第一制約条件を入力可能とするように第一入力エリアＧ９の表示用データを更新する。より具体的に、第一更新部４０２は、当該作業ジョブについて既登録の情報が有る項目については、当該情報を当該項目の入力部分に表示し、他の項目については、当該項目の入力部分を空欄にするように第一入力エリアＧ９の表示用データを更新する。例えば、作業ジョブは、いくつかの項目（対象、ツール等）について、既に設定された条件を有していてもよい。なお、第一更新部４０２は、既登録の情報を後述の条件読込部４１１から取得する。
【００８０】
また、第一更新部４０２は、第一入力エリアＧ９への入力に応じて第一入力エリアＧ９の表示用データを更新する。例えば第一更新部４０２は、項目指定ボタンＧ１１及びアイコン選択エリアＧ１２への操作により、作業内容情報が入力されると、入力内容を反映させるように入力内容表示エリアＧ１３を更新する。第一更新部４０２は、名称入力エリアＧ１５へのテキスト入力に応じて、入力内容を名称入力エリアＧ１５に表示する。第一更新部４０２は、条件入力部Ｇ１７における新規作成ボタンＧ１８のクリックに応じて、条件作成画面Ｈ１を表示するように第一入力エリアＧ９の表示用データを更新する。
【００８１】
例えば条件作成画面Ｈ１は、図１２に示すように、入力ボックスＨ２と、入力ボックスＨ３と、入力ボックスＨ４と、作成ボタンＨ５とを有する。入力ボックスＨ２は、作業対象物を入力するための入力ボックスである。入力ボックスＨ３は、制約条件の適用タイミングを入力するための入力ボックスである。適用タイミングとは、作業ジョブの実行中のどの時点に制約条件を適用するかを示す情報である。入力ボックスＨ４は、制約条件の一例として、作業対象物の状態を指定する状態指定条件を入力するための入力ボックスである。入力ボックスＨ２，Ｈ３，Ｈ４は、予め登録された選択肢の選択入力を可能とするように構成されていてもよい（図１２の（ｂ）参照）。作成ボタンＨ５は、条件作成画面Ｈ１において入力されたデータに従った条件の作成を指示するためのボタンである。
【００８２】
図１０に戻り、第一更新部４０２は、条件作成画面Ｈ１において入力されたデータに従った条件を作成し、当該条件を表示部Ｇ１９に表示するように第一入力エリアＧ９の表示用データを更新する。
【００８３】
第二更新部４０３は、ユーザインタフェース１３０への入力に応じて第二入力エリアＧ２０の表示用データを更新する。第二更新部４０３は、リスト表示エリアＧ２において選択された複数の作業ジョブを表示して当該複数の作業ジョブ間の第二制約条件を入力可能とするように第二入力エリアＧ２０の表示用データを更新する。
【００８４】
第二更新部４０３は、リスト表示エリアＧ２において選択された複数の作業ジョブの仮フローＧ２３を表示し、仮フローＧ２３における作業ジョブ間に第二制約条件を入力可能とするように第二入力エリアＧ２０の表示用のデータを更新してもよい。例えば、第二更新部４０３は、リスト表示エリアＧ２において選択したリスト要素Ｇ３を第二入力エリアＧ２０に配置する入力がなされる度に、当該リスト要素Ｇ３に対応する作業ジョブを第二入力エリアＧ２０の表示に追加するように表示用データを更新する。より具体的に、第二更新部４０３は、当該作業ジョブに対応するフロー要素Ｇ２４を仮フローＧ２３に追加するように表示用データを更新する。
【００８５】
なお、リスト表示エリアＧ２において選択したリスト要素Ｇ３を第二入力エリアＧ２０に配置する入力の具体例としては、リスト表示エリアＧ２から第二入力エリアＧ２０へのリスト要素Ｇ３のドラッグ入力、リスト表示エリアＧ２においてコピーしたリスト要素Ｇ３を第二入力エリアＧ２０にペーストする入力等が挙げられるが、必ずしもこれらに限られない。
【００８６】
プログラミング支援装置１００が、複数の制御対象について動作プログラムのプログラミング支援を実行する場合、第二更新部４０３は、複数の制御対象にそれぞれ対応する複数の仮フローＧ２３を表示するように第二入力エリアＧ２０の表示用データを更新してもよい。
【００８７】
第二入力エリアＧ２０に仮フローＧ２３が表示されることにより、仮フローＧ２３における作業ジョブ間（フロー要素Ｇ２４間）に第二制約条件を入力することが可能となる。例えば第二更新部４０３は、制約メニュー表示エリアＧ３２において選択したメニュー要素Ｇ３３を第二入力エリアＧ２０のフロー要素Ｇ２４間に配置する入力がなされると、当該メニュー要素Ｇ３３に対応する制約条件を当該フロー要素Ｇ２４間に挿入するように第二入力エリアＧ２０の表示用データを更新する。
【００８８】
なお、制約メニュー表示エリアＧ３２において選択したメニュー要素Ｇ３３を第二入力エリアＧ２０に配置する入力の具体例としては、制約メニュー表示エリアＧ３２から第二入力エリアＧ２０へのメニュー要素Ｇ３３のドラッグ入力、制約メニュー表示エリアＧ３２においてコピーしたメニュー要素Ｇ３３を第二入力エリアＧ２０にペーストする入力等が挙げられるが、必ずしもこれらに限られない。
【００８９】
プログラミング支援装置１００が、複数の制御対象について動作プログラムのプログラミング支援を実行する場合、第二更新部４０３は、異なる制御対象のフロー要素Ｇ２４間に制約条件を挿入するように第二入力エリアＧ２０の表示用データを更新してもよい。
【００９０】
第二制約条件は、例えば、最初に２つのフロー要素を選択することによって、挿入又は追加されてもよい。２つのフロー要素を選択することは、二つのフロー要素Ｇ２４を結ぶ線をクリックする（又は選択する）ことを含んでいてもよい。第二更新部４０３は、フロー要素Ｇ２４間を結ぶ線がクリックされるのに応じ、規制入力画面Ｊ１を表示するように第二入力エリアＧ２０の表示用データを更新する。規制入力画面Ｊ１は、フロー要素Ｇ２４間に対応する作業ジョブ間に制約条件を入力するための画面である。図１３に示すように、規制入力画面Ｊ１は、入力ボックスＪ２を含む。入力ボックスＪ２は、順番制約（順番変更の禁止）の有無を入力するための入力ボックスである。例えば入力ボックスＪ２は、「あり」（順番制約があることを示す）、「なし」（順番制約がないことを示す）の選択入力を可能とするように構成されていてもよい（図１３の（ｂ）参照）。
【００９１】
図１０に戻り、また、図１１を参照して、仮フローＧ２３は、仮フロー生成部４１６により生成される。仮フロー生成部４１６は、第二入力エリアＧ２０に一つ目の作業ジョブのフロー要素Ｇ２４が表示されている状態で、二つ目の作業ジョブのリスト要素Ｇ３が第二入力エリアＧ２０にドラッグされた際に、ドラッグ完了位置と、既存のフロー要素Ｇ２４との位置関係に基づいて、一つ目の作業ジョブと二つ目の作業ジョブの順序を設定し、最初の仮フローＧ２３を生成する。例えば、仮フローＧ２３が、一つ目の作業ジョブに対応する第一フロー要素Ｇ２４を含み、第二作業ジョブに対応するリスト要素Ｇ３のドラッグの完了位置がフロー要素Ｇ２４の下である場合、二つ目のフロー要素Ｇ２４が生成され、仮フローＧ２３は、二つ目の作業ジョブを一つ目の作業ジョブの後に実行するように更新される。ドラッグの完了位置が一つ目のフロー要素Ｇ２４の上である場合、仮フローＧ２３は、二つ目の作業ジョブを一つ目の作業ジョブの前に実行するように更新される。
【００９２】
以後、仮フロー生成部４１６は、リスト表示エリアＧ２から第二入力エリアＧ２０にリスト要素Ｇ３がドラッグされる度に（又は、仮フローＧ２３への挿入のために作業ジョブが他の何らかの方法で選択される度に）、当該リスト要素Ｇ３に対応する作業ジョブを仮フローＧ２３に挿入する。この際に、仮フロー生成部４１６は、既存のフロー要素Ｇ２４とドラッグ完了位置との関係に応じて作業ジョブの挿入位置を求める。
【００９３】
プログラミング支援装置１００が、複数の制御対象について動作プログラムのプログラミング支援を実行する場合、仮フロー生成部４１６は、複数の制御対象にそれぞれ対応する複数の仮フローＧ２３を生成してもよい。
【００９４】
第三更新部４０４は、ユーザインタフェース１３０への入力に応じて第三入力エリアＧ３４の表示用データを更新する。例えば、第三更新部４０４は、第三入力エリアＧ３４においてクリック又は選択されたラジオボタンＧ３５をオンにするように表示用データを更新する。
【００９５】
リスト生成部４０５は、リスト表示エリアＧ２に表示するための作業ジョブのリストを生成し、画面データ生成部４０１に出力する。例えばリスト生成部４０５は、作業ジョブ記憶部１１４を参照して作業ジョブのリストを生成する。
【００９６】
作業ジョブ記憶部１１４は、ユーザにより予め作成された複数の作業ジョブを記憶する。作業ジョブ記憶部１１４は、プログラミング支援装置１００に設けられていてもよいし、プログラミング支援装置１００の他の装置（例えばロボットコントローラ３）に設けられていてもよい。
【００９７】
制約メニュー生成部４０６は、制約メニュー表示エリアＧ３２に表示するための制約条件のリストを生成し、画面データ生成部４０１に出力する。例えば制約メニュー生成部４０６は、制約メニュー記憶部４０７を参照して制約メニューのリストを生成する。制約メニュー記憶部４０７は、予め作成された複数の制約メニューを記憶する。
【００９８】
オプション情報取得部４１０は、上記環境データ記憶部１１１から、環境モデルデータに含まれる物を特定する第一オプション情報と、当該物の状態を示す第二オプション情報とを取得する。
【００９９】
第一入力サポート部４０８は、作業対象物の選択肢を設定し、当該選択肢の表示用のデータを生成する。例えば第一入力サポート部４０８は、条件作成画面Ｈ１において、入力ボックスＨ２（図１２）に作業対象物を選択入力させるための選択肢を生成する。第一入力サポート部４０８は、第一オプション情報に基づいて作業対象物の選択肢を設定してもよい。この場合、環境構築モジュール３００により取得された情報が作業対象物の選択肢として利用される。
【０１００】
第二入力サポート部４０９は、状態の指定対象となる作業対象物に応じて、状態指定条件の選択肢を設定し、当該選択肢の表示用のデータを生成する。例えば第二入力サポート部４０９は、条件作成画面Ｈ１において、入力ボックスＨ２に入力された作業対象物に応じて、入力ボックスＨ４（図１２）に状態を選択入力させるための選択肢を生成する。第二入力サポート部４０９は、第二オプション情報に基づいて状態指定条件の選択肢を設定してもよい。この場合、環境構築モジュール３００により取得された情報が状態指定条件の選択肢として利用される。例えば第二入力サポート部４０９は、入力ボックスＨ２に入力された作業対象物の状態を、第二オプション情報から抽出し、抽出結果を状態指定条件の選択肢とする。
【０１０１】
第一条件設定部４１２は、第一制約条件を、ユーザインタフェース１３０への入力に応じて設定し、当該第一制約条件の対象となる作業ジョブの識別情報と対応付けて一時記憶用の条件バッファ４１５に書き込む。
【０１０２】
上述のように、第一制約条件は、作業ジョブの作業対象物の状態を指定する状態指定条件を含んでもよい。この場合、第一条件設定部４１２は、より細分化された機能モジュールとして、対象物設定部４１３と状態設定部４１４とを含んでもよい。対象物設定部４１３は、第一入力エリアＧ９への入力に基づいて作業ジョブの作業対象物を設定する。例えば対象物設定部４１３は、入力内容表示エリアＧ１３に表示される内容に基づいて作業ジョブの作業対象物を設定する。状態設定部４１４は、第一入力エリアＧ９への入力に基づいて状態指定条件を設定する。例えば状態設定部４１４は、条件入力部Ｇ１７に入力された内容に基づいて作業対象物の状態指定条件を設定する。
【０１０３】
第二条件設定部４１７は、作業ジョブ同士の関係についての制約条件である第二制約条件を、ユーザインタフェース１３０への入力に応じて設定する。例えば、第二条件設定部４１７は、第二入力エリアＧ２０において作業ジョブ間に入力された制約条件に基づいて第二制約条件を設定する。
【０１０４】
プログラミング支援装置１００が、複数の制御対象について動作プログラムのプログラミング支援を実行する場合、第二条件設定部４１７は、異なる制御対象の作業ジョブ間に制約条件を設定してもよい。
【０１０５】
演算レベル設定部４１８は、プログラミング支援における演算レベル（後述）を、ユーザインタフェース１３０への入力に応じて設定する。例えば、演算レベル設定部４１８は、後述の実行フローの採用可否を判定するための基準を調節する演算レベルを設定する。
【０１０６】
条件登録部４１９は、第一制約条件及び第二制約条件の少なくとも一方を条件記憶部に登録する。例えば条件登録部４１９は、条件バッファ４１５の記憶内容（例えば第一制約条件と関連付けられている）を個別条件記憶部４２０に書き込む。また、条件登録部４１９は、第二条件設定部４１７により設定された第二制約条件を、当該第二制約条件の対象となる作業ジョブと対応付けてジョブ間条件記憶部４２２に書き込む。更に、条件登録部４１９は、第二入力エリアＧ２０に表示されている複数の作業ジョブを実行対象のジョブとして実行対象記憶部４２１に書き込む。例えば、条件登録部４１９は、仮フローＧ２３の複数のフロー要素Ｇ２４にそれぞれ対応する複数の作業ジョブを実行対象のジョブとして実行対象記憶部４２１に書き込む。更に、条件登録部４１９は、演算レベル設定部４１８により設定された演算レベルを演算条件記憶部４２３に書き込む。
【０１０７】
条件読込部４１１は、条件記憶部から第一制約条件及び第二制約条件の少なくとも一方を読み込む。例えば条件読込部４１１は、個別条件記憶部４２０から第一制約条件を読み込む。
【０１０８】
（３）プログラミングモジュール
プログラミングモジュール５００は、プランニングボタンＧ３７（図１１）のクリックに応じて起動される。図１４に示すように、プログラミングモジュール５００は、より細分化された機能モジュールとして、プランニング支援部５０１と、プログラム生成部５１０とを有する。
【０１０９】
プランニング支援部５０１は、第一制約条件及び第二制約条件に基づいて、少なくとも一つの作業ジョブの実行タイミングをチェックする。チェックとは、第一制約条件及び第二制約条件を満たしているかを確認することを意味する。例えばプランニング支援部５０１は、ロボットの動作パターンを規定する複数の作業ジョブを記憶することと、複数の作業ジョブのいずれかについて、ロボット２の動作環境を指定する環境条件を、ユーザインタフェースへの入力に応じて設定することと、複数の作業ジョブのうち、ロボット２に実行させる複数の実行対象の作業ジョブを、ユーザインタフェースへの入力に応じて設定することと、複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定することと、を実行する。実行フローは、プランニング支援部５０１が自動生成するものであってもよいし、ユーザが設定して入力したものであってもよい。以下においては、プランニング支援部５０１が実行フローを自動生成する場合を説明する。
【０１１０】
例えばプランニング支援部５０１は、より細分化された機能モジュールとして、判定部５０４と、フロー調節部５０３と、パス情報取得部５０５と、つなぎジョブ生成部５０６と、フロー評価部５０７と、更新部５０２とを含む。
【０１１１】
判定部５０４は、個別条件記憶部４２０に記憶された第一制約条件と、ジョブ間条件記憶部４２２に記憶された第二制約条件とに基づいて、少なくとも一つの作業ジョブの実行タイミングをチェックする。判定部５０４は、複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定する。
【０１１２】
例えば判定部５０４は、実行フローのいずれか一つの作業ジョブの実行タイミングにおける環境状態を、当該実行フローの他の作業ジョブにおけるロボット２の動作内容と、当該実行フローの実行順序とに基づいて特定し、当該環境状態が当該一つの作業ジョブの環境条件を満たすか否かを判定する。
【０１１３】
実行フローが第一作業ジョブ及び第二作業ジョブを順に含む場合に、判定部５０４は、少なくとも第一作業ジョブにおけるロボット２の動作内容に基づいて第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。
【０１１４】
より具体的に、第一作業ジョブにより規定される動作パターンが、作業対象物を物理的に操作する動作を含み、第二作業ジョブの環境条件が、当該作業対象物の状態を指定する条件を含む場合に、判定部５０４は、第一作業ジョブに従ってロボット２が動作した後の当該作業対象物の状態を第二作業ジョブの実行タイミングにおける環境状態として特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。
【０１１５】
実行フローが第一作業ジョブ、第二作業ジョブ及び第三作業ジョブを順に含む場合に、判定部５０４は、少なくとも第一作業ジョブにおけるロボット２の動作内容に基づいて第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態を少なくとも第二作業ジョブにおけるロボット２の動作内容に基づいて更新して第三作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が第三作業ジョブの環境条件を満たすか否かを判定してもよい。
【０１１６】
判定部５０４は、実行フローのいずれか一つの作業ジョブの環境条件と、当該実行フローの他の作業ジョブにおけるロボット２の動作内容とに基づいて、当該一つの作業ジョブが当該環境条件を満たすために、当該一つの作業ジョブと当該他の作業ジョブとの間に必要とされる順序条件を生成し、当該実行フローの実行順序が当該順序条件を満たすか否かを判定してもよい。
【０１１７】
フロー調節部５０３は、タイミング条件を満たすように、判定部５０４による判定対象となる実行フローを生成する。また、実行フローにおいていずれかの作業ジョブが環境条件を満たしていないと判定した場合に、タイミング条件を満たすように実行順序を変更する。例えばフロー調節部５０３は、タイミング条件を満たす範囲にて、実行対象記憶部４２１に記憶された複数の作業ジョブの実行フローをランダムに生成する。その後フロー調節部５０３は、実行フローにおいていずれかの作業ジョブが環境条件を満たしていないと判定した場合に、タイミング条件を満たすように実行順序をランダムに変更する。以後、フロー調節部５０３は、タイミング条件を満たす実行フローが環境条件を満たさない作業ジョブを含んでいない状態となるまで、実行順序の変更を繰り返す。フロー調節部５０３は、実行フローを生成又は変更する度に、その結果を一時記憶用のフローバッファ５０８に上書きする。
【０１１８】
プログラミング支援装置１００が、複数の制御対象について動作プログラムのプログラミング支援を実行する場合、フロー調節部５０３は、複数の制御対象にそれぞれ対応する複数の実行フローを生成してもよい。
【０１１９】
パス情報取得部５０５は、少なくとも一つの作業ジョブについて、ロボット２の動作パス（先端部２ａの位置・姿勢の継時的な推移）を規定する第一パス情報を取得する。例えばパス情報取得部５０５は、実行対象の作業ジョブの全ての第一パス情報を実行対象記憶部４２１から読み込む。
【０１２０】
つなぎジョブ生成部５０６は、フローバッファ５０８に記憶された実行フローと、パス情報取得部５０５により取得された第一パス情報と、環境データ記憶部１１１に記憶された環境モデルデータとに基づいて、作業ジョブ間におけるロボット２の動作パスを規定する第二パス情報を生成する。例えばつなぎジョブ生成部５０６は、先行する作業ジョブの動作パスの終点と、後続する作業ジョブの動作パスの始点との間を結び、ロボット２とその周辺配置物との衝突を回避するように、第二パス情報を生成し、一時記憶用のパスバッファ５０９に書き込む。
【０１２１】
例えばつなぎジョブ生成部５０６は、衝突を回避可能な経由点を生成し、当該経由点を通るようにパスを修正することを、パス全体にわたって衝突回避が可能となるまで繰り返す。より具体的なパスの生成手法は、例えば特許第４１０３０５７号等に開示されている。
【０１２２】
フロー評価部５０７は、第一制約条件及び第二制約条件とは異なる評価条件に基づいて、実行フローと、第一パス情報及び第二パス情報の少なくとも一方を評価し、評価結果に基づいて実行フローの採用可否を判定する。例えばフロー評価部５０７は、実行フロー、第一パス情報及び第二パス情報を上記評価条件に基づいて評価し、評価結果に基づいて実行フローの採用可否を判定する。例えば、評価結果は、実行フローが動作プログラムとして実行された場合の実行時間、動作プログラムが実行された時のエネルギー消費等の目安であってもよい。評価結果は、評価条件が満たされているか、そして実行フローが採用可能であるかを判定するために、基準値と比較されてもよい。
【０１２３】
より具体的に、フロー評価部５０７は、実行フロー、第一パス情報及び第二パス情報に従った動作プログラムについて所定の評価値を導出し、当該評価値が合格ラインに達している場合に実行フローを採用可とし、当該評価値が合格ラインに達していない場合に実行フローを採用不可とする。評価値の具体例としては、動作プログラムの実行時間、又は動作プログラムの消費電力（動作プログラムに従って動作するロボット２の消費電力）等が挙げられる。実行時間及び消費電力を組み合わせて評価値を導出してもよい。
【０１２４】
また、フロー評価部５０７は、実行フローの生成及び上記評価値の導出を所定時間繰り返し、最も好ましい評価値が得られる実行フローを採用可としてもよい。例えばフロー評価部５０７は、動作プログラムの実行時間が最も小さくなる実行フローを採用可としてもよいし、動作プログラムの消費電力が最も小さくなる実行フローを採用可としてもよい。
【０１２５】
なお、フロー評価部５０７は、演算条件記憶部４２３に記憶されている演算レベルに応じて、実行フローの採用可否を判定するための基準を調節してもよい。例えばフロー評価部５０７は、演算条件記憶部４２３に記憶されている演算レベルが高くなるのに応じて上記合格ラインを高くしてもよいし、実行フローの生成及び上記評価値の導出を繰り返す時間を長くしてもよい。
【０１２６】
また、フロー評価部５０７は、演算条件記憶部４２３に記憶されている演算レベルに応じて、評価対象の動作プログラムの精度を調節してもよい。例えばフロー評価部５０７は、演算条件記憶部４２３に記憶されている演算レベルが低くなるのに応じて、評価対象の動作プログラムを簡易化し、演算時間の短縮化を図ってもよい。簡易化の具体例として、第二パス情報の生成を省略し、作業ジョブ間の動作パスを直線状にすること、作業ジョブ間の時間を一定値にすること、環境モデルデータにおけるメッシュを粗くすること等が挙げられる。
【０１２７】
更新部５０２は、フロー評価部５０７により採用可とされた実行フローを結果出力部Ｇ２９に表示するように、第二入力エリアＧ２０の表示用データを更新する。
【０１２８】
プログラム生成部５１０は、プランニング支援部５０１により採用可と判定された実行フローに基づいて、ロボット２の動作プログラムを生成する。動作プログラムは、例えば、上記実行フローに従って上記第一パス情報及び上記第二パス情報を並べたものである。
【０１２９】
プログラム登録部５１１は、プログラム生成部５１０により生成された動作プログラムを、ユーザインタフェース１３０への入力に応じて動作プログラム記憶部１１２に登録する。例えばプログラム登録部５１１は、保存ボタンＧ３８がクリックされるのに応じて、動作プログラムを動作プログラム記憶部１１２に書き込む。
【０１３０】
なお、プログラミングモジュール５００は、少なくとも実行タイミングのチェック結果に基づくプログラミング支援を行っていればよいので、必ずしも動作プログラムの自動生成を実行しなくてよい。例えば、プログラミングモジュール５００は、ユーザが入力した実行フローが第一制約条件及び第二制約条件の少なくとも一方を満たしていない場合に、その旨の警告表示をするように構成されていてもよい。
【０１３１】
（４）シミュレーションモジュール
図１５に示すように、シミュレーションモジュール６００は、より細分化された機能モジュールとして、画面データ生成部６０１と、更新部６０２と、プログラム設定部６０３と、シミュレーション実行部６０４と、動画データ生成部６０５とを有する。
【０１３２】
さらに図１６を参照して、画面データ生成部６０１は、シミュレーション画面Ｋ１をモニタ１３１に表示するためのデータを生成する。シミュレーション画面Ｋ１は、シミュレーション結果をグラフィック表示するための画面である。
【０１３３】
図１６に示すように、シミュレーション画面Ｋ１は、描画エリアＫ２と、プログラム選択ボタンＫ３と、シミュレーション実行ボタンＫ４と、終了ボタンＫ５とを有する。描画エリアＫ２は、シミュレーション結果を三次元画像等により表示するエリアである。プログラム選択ボタンＫ３は、シミュレーション対象の動作プログラムを選択するためのボタンである。シミュレーション実行ボタンＫ４は、シミュレーションの実行を指示するためのボタンである。終了ボタンＫ５は、シミュレーション画面Ｋ１をクローズし、シミュレーションモジュール６００による処理を終了させるためのボタンである。
【０１３４】
図１５に戻り、更新部６０２は、入力デバイス１３２への操作入力に応じて、シミュレーション画面Ｋ１の表示用データを更新する。例えば更新部６０２は、上記プログラム選択ボタンＫ３がクリックされるのに応じて、プログラム選択画面Ｌ１を表示するようにシミュレーション画面Ｋ１の表示用データを更新する。プログラム選択画面Ｌ１は、シミュレーション対象の動作プログラムを選択するための画面である。
【０１３５】
図１７に示すように、プログラム選択画面Ｌ１は、リスト表示エリアＬ２と、選択ボタンＬ３とを有する。リスト表示エリアＬ２は、選択可能な動作プログラム（例えば動作プログラム記憶部１１２に記憶されている動作プログラム）のリストを表示する。選択ボタンＬ３は、リスト表示エリアＬ２において選択された動作プログラムの選択を指示するボタンである。
【０１３６】
また、更新部６０２は、シミュレーション実行ボタンＫ４がクリックされ、シミュレーション結果に応じた動画データ（後述）が生成された後に、当該動画データをリスト表示エリアＬ２に表示するように描画エリアＫ２の表示用データを更新する。
【０１３７】
図１５に戻り、プログラム設定部６０３は、プログラム選択画面Ｌ１において選択された動作プログラムを、シミュレーション対象の動作プログラムに設定する。シミュレーション実行部６０４は、ロボット２の動作シミュレーションを実行する。例えばシミュレーション実行部６０４は、環境データ記憶部１１１に記憶された環境モデルデータにより特定されるシミュレーション環境下において、シミュレーション対象の動作プログラムに従ってロボット２のモデルを動作させる。
【０１３８】
動画データ生成部６０５は、シミュレーション実行部６０４によるシミュレーション結果に従って、ロボット２のモデルの動画データを生成する。
【０１３９】
図１８は、本体１１０のハードウェア構成を例示するブロック図である。図１８に示すように、本体１１０は回路１２０を有し、回路１２０は、一つ又は複数のプロセッサ１２１と、記憶部１２２と、通信ポート１２５と、入出力ポート１２６とを有する。記憶部１２２は、メモリ１２３及びストレージ１２４を含む。ストレージ１２４は、本体１１０の上記各機能モジュールを構成するためのプログラムを記録している。ストレージ１２４は、コンピュータ読み取り可能であればどのようなものであってもよい。具体例として、ハードディスク、不揮発性の半導体メモリ、磁気ディスク及び光ディスク等が挙げられる。メモリ１２３は、ストレージ１２４からロードしたプログラム及びプロセッサ１２１の演算結果等を一時的に記憶する。プロセッサ１２１は、メモリ１２３と協働してプログラムを実行することで、各機能モジュールを構成する。
【０１４０】
通信ポート１２５は、プロセッサ１２１からの指令に応じ、ロボットコントローラ３との間で電気信号の入出力を行う。入出力ポート１２６は、プロセッサ１２１からの指令に応じ、モニタ１３１及び入力デバイス１３２との間で電気信号の入出力を行う。
【０１４１】
３．プログラム生成方法
続いて、プログラム生成方法及びプログラミング支援方法の一例として、プログラミング支援装置１００が実行するプログラム生成手順を説明する。
【０１４２】
（１）概要
図１９に示すように、まず、プログラミング支援装置１００はステップＳ０１を実行する。ステップＳ０１では、画面データ生成部２０１が、メイン画面Ａ１の表示用データを生成し、モニタ１３１に出力する。
【０１４３】
次に、プログラミング支援装置１００はステップＳ０２を実行する。ステップＳ０２では、環境構築ボタンＡ２がクリックされたか否かをモジュール切替部２０２が確認する。
【０１４４】
ステップＳ０２において、環境構築ボタンＡ２がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ０３を実行する。ステップＳ０３では、環境構築モジュール３００が、ロボット２の動作シミュレーション用の環境モデルデータを構築する。具体的な処理内容については後述する。
【０１４５】
ステップＳ０２において、環境構築ボタンＡ２はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ０４を実行する。ステップＳ０４では、プランニングボタンＡ３がクリックされたか否かをモジュール切替部２０２が確認する。
【０１４６】
ステップＳ０４において、プランニングボタンＡ３がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ０５，Ｓ０６を実行する。ステップＳ０５では、条件設定モジュール４００が、上記第一制約条件及び上記第二制約条件を含むプログラミング支援条件を設定する処理を実行する。ステップＳ０６では、プログラミングモジュール５００が、条件設定モジュール４００により設定されたプログラミング支援条件に従って動作プログラムのプログラミング支援を実行する。例えばプログラミングモジュール５００は、上記プログラミング支援条件に従って動作プログラムを生成する。これらの具体的な処理内容については後述する。
【０１４７】
ステップＳ０４において、プランニングボタンＡ３はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ０７を実行する。ステップＳ０７では、シミュレーションボタンＡ４がクリックされたか否かをモジュール切替部２０２が確認する。
【０１４８】
ステップＳ０７において、シミュレーションボタンＡ４がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ０８を実行する。ステップＳ０８では、ロボット２の動作シミュレーションを実行する。具体的な処理内容については後述する。
【０１４９】
ステップＳ０３，Ｓ０６，Ｓ０８を実行した後、プログラミング支援装置１００はステップＳ０９を実行する。ステップＳ０７においてシミュレーションボタンＡ４がクリックされていないと判定した場合も、プログラミング支援装置１００はステップＳ０９を実行する。ステップＳ０９では、終了ボタンＡ５がクリックされたか否かをモジュール切替部２０２が確認する。
【０１５０】
ステップＳ０９において、終了ボタンＡ５がクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ０２に戻す。以後、終了ボタンＡ５がクリックされるまでは、環境構築ボタンＡ２、プランニングボタンＡ３又はシミュレーションボタンＡ４のクリックに応じた処理が繰り返される。
【０１５１】
ステップＳ０９において、終了ボタンＡ５がクリックされたと判定した場合、プログラミング支援装置１００は、メイン画面Ａ１をクローズして処理を終了する。
【０１５２】
（２）環境モデルデータの構築手順
続いて、上記ステップＳ０３における環境モデルデータの構築手順を説明する。図２０に示すように、プログラミング支援装置１００は、まずステップＳ１１を実行する。ステップＳ１１では、画面データ生成部３０１が、環境構築画面Ｂ１の表示用データを生成し、モニタ１３１に出力する。
【０１５３】
次に、プログラミング支援装置１００はステップＳ１２を実行する。ステップＳ１２では、モデル追加ボタンＢ３がクリックされたか否かを更新部３０２が確認する。
【０１５４】
ステップＳ１２において、モデル追加ボタンＢ３がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１３を実行する。ステップＳ１３では、モデル追加部３０３がモデルデータ記憶部１１３を参照してモデルデータのリストを生成し、当該リストを用いて、更新部３０２がモデル選択画面Ｃ１の表示用データを生成し、モデル選択画面Ｃ１を表示するように環境構築画面Ｂ１の表示用データを更新する。
【０１５５】
次に、プログラミング支援装置１００はステップＳ１４を実行する。ステップＳ１４では、モデル追加部３０３が、モデル選択画面Ｃ１におけるモデルデータの選択入力を待機する。
【０１５６】
次に、プログラミング支援装置１００はステップＳ１５を実行する。ステップＳ１５では、モデル追加部３０３が、モデル選択画面Ｃ１において選択されたモデルデータをモデルデータ記憶部１１３から取得して環境データ記憶部１１１の環境モデルデータに追加する。
【０１５７】
次に、プログラミング支援装置１００はステップＳ１６，Ｓ１７を実行する。ステップＳ１６では、描画データ生成部３０４が、環境データ記憶部１１１に記憶された環境モデルデータを用いてシミュレーション環境の描画データを生成し、シミュレーション環境エリアＢ２の表示用データとして更新部３０２に出力する。
【０１５８】
ステップＳ１７では、更新部３０２が、描画データ生成部３０４から出力されたデータによってシミュレーション環境エリアＢ２の表示用データを更新する。
【０１５９】
ステップＳ１２において、モデル追加ボタンＢ３がクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ１８を実行する。ステップＳ１８では、少なくとも一つのモデルデータが環境モデルデータに追加されているか否かをモデル追加部３０３が確認する。
【０１６０】
ステップＳ１８において、環境モデルデータに追加済みのモデルデータが有ると判定した場合、プログラミング支援装置１００はステップＳ１９を実行する。ステップＳ１９では、属性設定ボタンＢ４がクリックされたか否かを更新部３０２が確認する。
【０１６１】
ステップＳ１９において、属性設定ボタンＢ４がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ２０を実行する。ステップＳ２０では、属性データ登録部３０５が、入力対象モデルの属性データを登録する。具体的な処理内容については後述する。
【０１６２】
ステップＳ１９において、属性設定ボタンＢ４はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ２１を実行する。ステップＳ２１では、状態設定ボタンＢ５がクリックされたか否かをモデル追加部３０３が確認する。
【０１６３】
ステップＳ２１において、状態設定ボタンＢ５がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ２２を実行する。ステップＳ２２では、状態データ登録部３０６が、入力対象モデルの状態データを登録する。具体的な処理内容については後述する。
【０１６４】
ステップＳ１７，Ｓ２０，Ｓ２２を実行した後、プログラミング支援装置１００はステップＳ２３を実行する。ステップＳ２１において、状態設定ボタンＢ５がクリックされていないと判定した場合、及びステップＳ１８において、環境モデルデータに追加済みのモデルデータは無いと判定した場合も、プログラミング支援装置１００はステップＳ２３を実行する。ステップＳ２３では、終了ボタンＢ６がクリックされたか否かを更新部３０２が確認する。
【０１６５】
ステップＳ２３において、終了ボタンＢ６がクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ１２に戻す。以後、終了ボタンＢ６がクリックされるまでは、環境モデルデータの構築処理が繰り返される。
【０１６６】
ステップＳ２３において、終了ボタンＢ６がクリックされたと判定した場合、プログラミング支援装置１００は、環境構築画面Ｂ１をクローズして処理を終了する。
【０１６７】
（属性データの登録手順）
図２１に示すように、プログラミング支援装置１００は、まずステップＳ３１を実行する。ステップＳ３１では、更新部３０２が、属性入力画面Ｄ１を表示するように環境構築画面Ｂ１の表示用データに追加する。
【０１６８】
次に、プログラミング支援装置１００はステップＳ３２を実行する。ステップＳ３２では、更新部３０２が、属性入力画面Ｄ１への情報入力の有無を判定する。
【０１６９】
ステップＳ３２において、属性入力画面Ｄ１への情報入力が有ると判定した場合、プログラミング支援装置１００はステップＳ３３を実行する。ステップＳ３３では、更新部３０２が、入力内容を反映させるように属性入力画面Ｄ１の表示用データを更新する。
【０１７０】
次に、プログラミング支援装置１００はステップＳ３４を実行する。ステップＳ３２において、属性入力画面Ｄ１への情報入力が無いと判定した場合、プログラミング支援装置１００はステップＳ３３を実行することなくステップＳ３４を実行する。ステップＳ３４では、登録ボタンＤ５がクリックされたか否かを更新部３０２が確認する。
【０１７１】
ステップＳ３４において、登録ボタンＤ５がクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ３２に戻す。以後、登録ボタンＤ５がクリックされるまでは、属性データの入力に応じた属性入力画面Ｄ１の表示用データの更新が繰り返される。
【０１７２】
ステップＳ３４において、登録ボタンＤ５がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ３５を実行する。ステップＳ３５では、属性データ登録部３０５が、属性入力画面Ｄ１において入力されたデータを取得し、入力対象モデルに対応付けて環境データ記憶部１１１に書き込む。以上で属性データの登録手順が完了する。
【０１７３】
（状態データの登録手順）
図２２に示すように、プログラミング支援装置１００は、まずステップＳ４１を実行する。ステップＳ４１では、更新部３０２が、状態入力画面Ｆ１を表示するように環境構築画面Ｂ１の表示用データに追加する。
【０１７４】
次に、プログラミング支援装置１００はステップＳ４２を実行する。ステップＳ４２では、更新部３０２が、状態入力画面Ｆ１への情報入力の有無を判定する。
【０１７５】
ステップＳ４２において、状態入力画面Ｆ１への情報入力が有ると判定した場合、プログラミング支援装置１００はステップＳ４３を実行する。ステップＳ４３では、更新部３０２が、入力内容を反映させるように状態入力画面Ｆ１の表示用データを更新する。
【０１７６】
次に、プログラミング支援装置１００はステップＳ４４を実行する。ステップＳ４２において、状態入力画面Ｆ１への情報入力が無いと判定した場合、プログラミング支援装置１００はステップＳ４３を実行することなくステップＳ４４を実行する。ステップＳ４４では、登録ボタンＦ４がクリックされたか否かを更新部３０２が確認する。
【０１７７】
ステップＳ４４において、登録ボタンＦ４がクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ４２に戻す。以後、登録ボタンＦ４がクリックされるまでは、状態データの入力に応じた状態入力画面Ｆ１の表示用データの更新が繰り返される。
【０１７８】
ステップＳ４４において、登録ボタンＦ４がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ４５を実行する。ステップＳ４５では、状態データ登録部３０６が、状態入力画面Ｆ１において入力されたデータを取得し、入力対象モデルに対応付けて環境データ記憶部１１１に書き込む。以上で状態データの登録手順が完了する。
【０１７９】
（３）プログラミング支援条件の設定手順
続いて、上記ステップＳ０３におけるプログラミング支援条件の設定手順を説明する。
【０１８０】
（概要）
図２３に示すように、プログラミング支援装置１００は、まずステップＳ５１を実行する。ステップＳ５１では、リスト生成部４０５が、リスト表示エリアＧ２に表示するための作業ジョブのリストを生成し、画面データ生成部４０１に出力する。
【０１８１】
次に、プログラミング支援装置１００はステップＳ５２を実行する。ステップＳ５２では、制約メニュー生成部４０６が、制約メニュー表示エリアＧ３２に表示するための制約条件のリストを生成し、画面データ生成部４０１に出力する。
【０１８２】
次に、プログラミング支援装置１００はステップＳ５３を実行する。ステップＳ５３では、画面データ生成部４０１が、プランニング画面Ｇ１の表示用データを生成し、モニタ１３１に出力する。以後、プランニング画面Ｇ１への入力操作に応じ、プログラミング支援条件を設定する処理が開始され、プランニングボタンＧ３７がクリックされるまで継続される（ステップＳ５４）。プランニングボタンＧ３７がクリックされると、プログラミング支援条件の設定手順が完了する。
【０１８３】
以下、プログラミング支援条件の設定手順を、第一制約条件の設定手順、第二制約条件の設定手順、及び演算レベルの設定手順に分けて説明する。
【０１８４】
（第一制約条件の設定手順）
図２４に示すように、プログラミング支援装置１００は、まずステップＳ６１を実行する。ステップＳ６１では、第一更新部４０２が、リスト表示エリアＧ２における作業ジョブの選択入力（例えばリスト要素Ｇ３のクリック）を待機する。
【０１８５】
次に、プログラミング支援装置１００はステップＳ６２を実行する。ステップＳ６２では、リスト表示エリアＧ２において選択された作業ジョブ（以下、「選択ジョブ」という。）についての第一制約条件が、個別条件記憶部４２０に記憶されているか否かを条件読込部４１１が確認する。
【０１８６】
ステップＳ６２において、選択ジョブの第一制約条件が個別条件記憶部４２０に記憶されていると判定した場合、プログラミング支援装置１００はステップＳ６３を実行する。ステップＳ６３では、条件読込部４１１が、個別条件記憶部４２０に記憶されている第一制約条件を読み込む。
【０１８７】
次に、プログラミング支援装置１００はステップＳ６４を実行する。ステップＳ６２において、選択ジョブの第一制約条件が個別条件記憶部４２０に記憶されていないと判定した場合、プログラミング支援装置１００はステップＳ６３を実行することなくステップＳ６４を実行する。ステップＳ６４では、第一更新部４０２が、選択ジョブの第一制約条件を入力可能とするように第一入力エリアＧ９の表示用データを更新する。
【０１８８】
より具体的に、第一更新部４０２は、ステップＳ６３において個別条件記憶部４２０から読み込まれた情報の有る項目については、当該情報を当該項目の入力部分に表示し、その他の項目についてはその入力部分を空欄にするように、第一入力エリアＧ９の表示用データを更新する。
【０１８９】
次に、プログラミング支援装置１００はステップＳ６５を実行する。ステップＳ６５では、第一制約条件を追加するための入力の有無を第一更新部４０２が確認する。ステップＳ６５において、第一制約条件を追加するための入力が有ると判定した場合、プログラミング支援装置１００はステップＳ６６を実行する。ステップＳ６６は、第一入力エリアＧ９への入力内容に基づいて第一制約条件を設定する処理を含む。具体的な処理内容については後述する。
【０１９０】
次に、プログラミング支援装置１００はステップＳ６７を実行する。ステップＳ６５において、第一制約条件を追加するための入力は無いと判定した場合、プログラミング支援装置１００はステップＳ６６を実行することなくステップＳ６７を実行する。ステップＳ６７では、条件登録ボタンＧ３６がクリックされたか否かを条件登録部４１９が確認する。
【０１９１】
ステップＳ６７において、条件登録ボタンＧ３６はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ６８を実行する。ステップＳ６８では、リスト表示エリアＧ２において他の作業ジョブが選択されたか否かを第一更新部４０２が確認する。
【０１９２】
ステップＳ６８において、他の作業ジョブは選択されていないと判定した場合、プログラミング支援装置１００は処理をステップＳ６５に戻す。以後、条件登録ボタンＧ３６がクリックされるか、リスト表示エリアＧ２において他の作業ジョブが選択されるまでは、第一入力エリアＧ９への入力に基づいて選択ジョブの第一制約条件を設定する処理が繰り返される。
【０１９３】
ステップＳ６８において、他の選択ジョブが選択されたと判定した場合、プログラミング支援装置１００は処理をステップＳ６２に戻し、新たに選択された作業ジョブについての第一制約条件の設定処理を開始する。
【０１９４】
ステップＳ６７において、条件登録ボタンＧ３６がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ６９を実行する。ステップＳ６９では、条件登録部４１９が、第一入力エリアＧ９における第一制約条件の設定結果を個別条件記憶部４２０に書き込む。以上で第一制約条件の設定手順が完了する。
【０１９５】
続いて、上記ステップＳ６６における条件設定手順を説明する。図２５に示すように、プログラミング支援装置１００は、まずステップＳ８１を実行する。ステップＳ８１では、作業内容入力エリアＧ１０の項目指定ボタンＧ１１がクリックされたか否かを第一更新部４０２が確認する。
【０１９６】
ステップＳ８１において、項目指定ボタンＧ１１がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ８２を実行する。ステップＳ８２では、項目指定ボタンＧ１１応じた項目用の選択肢となる作業内容情報（例えば作業対象物等）のアイコンをアイコン選択エリアＧ１２に表示するように、第一更新部４０２がリスト表示エリアＧ２の表示用データを更新する。
【０１９７】
次に、プログラミング支援装置１００はステップＳ８３を実行する。ステップＳ８３では、第一更新部４０２が、アイコン選択エリアＧ１２におけるアイコンの選択入力を待機する。
【０１９８】
次に、プログラミング支援装置１００はステップＳ８４を実行する。ステップＳ８４では、アイコン選択エリアＧ１２において選択されたアイコンを入力内容表示エリアＧ１３に表示するように、第一更新部４０２が第一入力エリアＧ９の表示用データを更新する。
【０１９９】
ステップＳ８１において、項目指定ボタンＧ１１はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ８５を実行する。ステップＳ８５では、作業内容入力エリアＧ１０の名称入力エリアＧ１５へのテキスト入力の有無を判定する。
【０２００】
ステップＳ８５において、名称入力エリアＧ１５へのテキスト入力が有ると判定した場合、プログラミング支援装置１００はステップＳ８６を実行する。ステップＳ８６では、入力された内容を名称入力エリアＧ１５に表示するように、第一更新部４０２が第一入力エリアＧ９の表示用データを更新する。
【０２０１】
ステップＳ８５において、名称入力エリアＧ１５へのテキスト入力は無いと判定した場合、プログラミング支援装置１００はステップＳ８７を実行する。ステップＳ８７では、制約条件入力エリアＧ１６の条件入力部Ｇ１７において新規作成ボタンＧ１８がクリックされたか否かを第一更新部４０２が確認する。
【０２０２】
ステップＳ８７において、新規作成ボタンＧ１８がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ８８を実行する。ステップＳ８８は、第一制約条件として設定すべき条件を作成する処理を含む。具体的な処理内容については後述する。
【０２０３】
ステップＳ８４，Ｓ８６，Ｓ８８を実行した後、プログラミング支援装置１００はステップＳ８９を実行する。ステップＳ８９では、第一条件設定部４１２が、第一入力エリアＧ９への入力に応じて第一制約条件を設定し、当該第一制約条件の対象となる作業ジョブの識別情報と対応付けて一時記憶用の条件バッファ４１５に書き込む。以上でステップＳ６６が完了する。
【０２０４】
ステップＳ８７において、新規作成ボタンＧ１８がクリックされていないと判定した場合、プログラミング支援装置１００は、ステップＳ８９を実行することなくステップＳ６６を完了する。
【０２０５】
続いて、上記ステップＳ８８における条件作成手順を説明する。図２６に示すように、プログラミング支援装置１００は、まずステップＳ９１を実行する。ステップＳ９１では、オプション情報取得部４１０が、上記環境データ記憶部１１１から、環境モデルデータに含まれる物を特定する第一オプション情報を取得する。第一入力サポート部４０８が、第一オプション情報に基づいて作業対象物の選択肢を設定し、当該選択肢の表示用のデータを生成する。
【０２０６】
次に、プログラミング支援装置１００はステップＳ９２を実行する。ステップＳ９２では、第一更新部４０２が、条件作成画面Ｈ１を表示するように第一入力エリアＧ９の表示用データを更新する。この際に、第一更新部４０２は、第一入力サポート部４０８により生成されたデータを用いて、上記作業対象物の選択肢を入力ボックスＨ２にセットする。
【０２０７】
次に、プログラミング支援装置１００はステップＳ９３を実行する。ステップＳ９３では、第一更新部４０２が、入力ボックスＨ２における作業対象物の選択入力を待機する。
【０２０８】
次に、プログラミング支援装置１００はステップＳ９４を実行する。ステップＳ９４では、オプション情報取得部４１０が、入力ボックスＨ２に入力された作業対象物の状態を示す第二オプション情報を環境データ記憶部１１１から取得する。第二入力サポート部４０９が、第二オプション情報に基づいて状態指定条件の選択肢を設定し、当該選択肢の表示用のデータを生成する。第一更新部４０２が、第二入力サポート部４０９により生成されたデータを用いて、上記状態指定条件の選択肢を入力ボックスＨ４にセットする。
【０２０９】
次に、プログラミング支援装置１００は、ステップＳ９５を実行する。ステップＳ９５では、入力ボックスＨ３又は入力ボックスＨ４への入力の有無を第一更新部４０２が確認する。
【０２１０】
ステップＳ９５において、入力ボックスＨ３又は入力ボックスＨ４への入力が有ると判定した場合、プログラミング支援装置１００はステップＳ９６を実行する。ステップＳ９６では、条件作成画面Ｈ１に入力内容を反映させるように、第一更新部４０２が第一入力エリアＧ９の表示用データを更新する。
【０２１１】
次に、プログラミング支援装置１００はステップＳ９７を実行する。ステップＳ９７では、作成ボタンＨ５がクリックされたか否かを第一更新部４０２が確認する。
【０２１２】
ステップＳ９７において、作成ボタンＨ５はクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ９５に戻す。以後、作成ボタンＨ５がクリックされるまで、入力ボックスＨ３又は入力ボックスＨ４への入力に応じた条件作成画面Ｈ１の表示内容の更新が繰り返される。
【０２１３】
ステップＳ９７において、作成ボタンＨ５がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ９８を実行する。ステップＳ９８では、第一更新部４０２が、条件作成画面Ｈ１において入力されたデータに従った条件を作成する。
【０２１４】
次に、プログラミング支援装置１００はステップＳ９９を実行する。ステップＳ９９では、第一更新部４０２が、ステップＳ９８において作成した条件を表示部Ｇ１９に表示するように、第一入力エリアＧ９の表示用データを更新する。以上でステップＳ８８が完了する。
【０２１５】
（第二制約条件の設定手順）
図２７に示すように、プログラミング支援装置１００は、まずステップＳ１０１を実行する。ステップＳ１０１では、第二入力エリアＧ２０に作業ジョブを追加する入力の有無を第二更新部４０３が確認する。例えば、第二更新部４０３は、リスト表示エリアＧ２から第二入力エリアＧ２０にリスト要素Ｇ３がドラッグされたか否かを確認する。
【０２１６】
ステップＳ１０１において、リスト表示エリアＧ２から第二入力エリアＧ２０にリスト要素Ｇ３がドラッグされたと判定した場合、プログラミング支援装置１００はステップＳ１０３を実行する。ステップＳ１０３では、仮フロー生成部４１６が、第二入力エリアＧ２０に表示される複数の作業ジョブの仮フローＧ２３を生成する。仮フロー生成部４１６は、第二入力エリアＧ２０における既存のフロー要素Ｇ２４とドラッグ完了位置との関係に応じて作業ジョブの実行順序を設定し、これに従って仮フローＧ２３を生成する。
【０２１７】
次に、プログラミング支援装置１００はステップＳ１０４を実行する。ステップＳ１０４では、第二更新部４０３が、ステップＳ１０３において生成された仮フローＧ２３を表示し、仮フローＧ２３における作業ジョブ間に第二制約条件を入力可能とするように第二入力エリアＧ２０の表示用データを更新する。
【０２１８】
ステップＳ１０１において、第二入力エリアＧ２０に作業ジョブを追加する入力は無いと判定した場合、プログラミング支援装置１００はステップＳ１０５を実行する。ステップＳ１０５では、第二入力エリアＧ２０に二つ以上の作業ジョブが表示されているか否かを第二更新部４０３が確認する。
【０２１９】
ステップＳ１０５において、第二入力エリアＧ２０に二つ以上の作業ジョブが表示されていると判定した場合、プログラミング支援装置１００はステップＳ１０６を実行する。ステップＳ１０６では、第二入力エリアＧ２０に制約条件を追加する入力の有無を第二更新部４０３が確認する。
【０２２０】
ステップＳ１０６において、制約条件の追加入力が有ると判定した場合、プログラミング支援装置１００はステップＳ１０７を実行する。ステップＳ１０７は、制約条件の追加を仮フローＧ２３の表示に反映させるように、第二更新部４０３が第二入力エリアＧ２０の表示用データを更新する。例えば、第二更新部４０３は、制約メニュー表示エリアＧ３２から第二入力エリアＧ２０にメニュー要素Ｇ３３がドラッグされ、二つのフロー要素Ｇ２４間でドラッグが完了した場合に、当該二つのフロー要素Ｇ２４間にメニュー要素Ｇ３３の制約条件を挿入するように、第二入力エリアＧ２０の表示用データを更新する。
【０２２１】
次に、プログラミング支援装置１００はステップＳ１０８を実行する。ステップＳ１０８では、第二条件設定部４１７が、第二入力エリアＧ２０において作業ジョブ間に入力された制約条件に基づいて第二制約条件を設定する。
【０２２２】
ステップＳ１０４，Ｓ１０８を実行した後、プログラミング支援装置１００はステップＳ１０９を実行する。ステップＳ１０５において、第二入力エリアＧ２０に二つ以上の作業ジョブは表示されていないと判定した場合、及びステップＳ１０６において制約条件を追加する入力は無いと判定した場合、プログラミング支援装置１００はステップＳ１０４，Ｓ１０８を実行することなくステップＳ１０９を実行する。ステップＳ１０９では、条件登録ボタンＧ３６がクリックされたか否かを条件登録部４１９が確認する。
【０２２３】
ステップＳ１０９において、条件登録ボタンＧ３６はクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ１０１に戻す。以後、条件登録ボタンＧ３６がクリックされるまでは、第二入力エリアＧ２０への入力に基づいて第二制約条件を設定する処理が繰り返される。
【０２２４】
ステップＳ１０９において、条件登録ボタンＧ３６がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１１０を実行する。ステップＳ１１０では、条件登録部４１９が、第二条件設定部４１７により設定された第二制約条件を、当該第二制約条件の対象となる作業ジョブと対応付けてジョブ間条件記憶部４２２に書き込む。また、条件登録部４１９は、仮フローＧ２３の複数のフロー要素Ｇ２４にそれぞれ対応する複数の作業ジョブを実行対象のジョブとして実行対象記憶部４２１に書き込む。以上で第二制約条件の設定手順が完了する。
【０２２５】
（演算レベルの設定手順）
図２８に示すように、プログラミング支援装置１００は、まずステップＳ１２１を実行する。ステップＳ１２１では、第三入力エリアＧ３４に演算レベルが入力されたか否かを第三更新部４０４が確認する。
【０２２６】
ステップＳ１２１において、第三入力エリアＧ３４に演算レベルが入力されたと判定した場合、プログラミング支援装置１００はステップＳ１２２を実行する。ステップＳ１２２では、第三更新部４０４が、第三入力エリアＧ３４への入力内容を反映させるように、第三入力エリアＧ３４の表示用データを更新する。例えば、第三更新部４０４は、第三入力エリアＧ３４においてクリックされたラジオボタンＧ３５をオンにするように表示用データを更新する。
【０２２７】
次に、プログラミング支援装置１００はステップＳ１２３を実行する。ステップＳ１２３では、演算レベル設定部４１８が、上記演算レベルを、第三入力エリアＧ３４への入力に応じて設定する。
【０２２８】
次に、プログラミング支援装置１００はステップＳ１２４を実行する。ステップＳ１２１において、第三入力エリアＧ３４に演算レベルは入力されていないと判定した場合、プログラミング支援装置１００はステップＳ１２２，Ｓ１２３を実行することなくステップＳ１２４を実行する。ステップＳ１２４では、条件登録ボタンＧ３６がクリックされたか否かを条件登録部４１９が確認する。
【０２２９】
ステップＳ１２４において、条件登録ボタンＧ３６はクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ１２１に戻す。以後、条件登録ボタンＧ３６がクリックされるまでは、第三入力エリアＧ３４への入力に基づいて演算レベルを設定する処理が繰り返される。
【０２３０】
ステップＳ１２４において、条件登録ボタンＧ３６がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１２５を実行する。ステップＳ１２５では、条件登録部４１９が、演算レベル設定部４１８により設定された演算レベルを演算条件記憶部４２３に書き込む。以上で演算レベルの設定手順が完了する。
【０２３１】
（４）プログラム生成手順
図２９に示すように、プログラミング支援装置１００は、まずステップＳ１３１を実行する。ステップＳ１３１では、フロー調節部５０３が、プランニングボタンＧ３７のクリックを待機する。
【０２３２】
次に、プログラミング支援装置１００はステップＳ１３２を実行する。図３５を参照して後でさらに説明するように、ステップＳ１３２では、プランニング支援部５０１が、第一制約条件及び第二制約条件を満たす実行フローを生成する。
【０２３３】
次に、プログラミング支援装置１００はステップＳ１３４を実行する。ステップＳ１３４では、つなぎジョブ生成部５０６が、フローバッファ５０８に記憶された実行フローと、パス情報取得部５０５により取得された第一パス情報と、環境データ記憶部１１１に記憶された環境モデルデータとに基づいて、作業ジョブ間におけるロボット２の動作パスを規定する第二パス情報を生成する。
【０２３４】
次に、プログラミング支援装置１００はステップＳ１３５を実行する。ステップＳ１３５では、フロー評価部５０７が、第一制約条件及び第二制約条件とは異なる評価条件に基づいて実行フロー、第一パス情報及び第二パス情報を評価する。例えばフロー評価部５０７は、上記評価条件に基づいて、実行フロー、第一パス情報及び第二パス情報の評価値（例えば上記実行時間又は消費電力等）を導出する。
【０２３５】
次に、プログラミング支援装置１００はステップＳ１３６を実行する。ステップＳ１３６では、フロー評価部５０７が、実行フローの採用可否を判定する。例えばフロー評価部５０７は、上記評価値が合格ラインに達している場合に実行フローを採用可とし、当該評価値が合格ラインに達していない場合に実行フローを採用不可とする。
【０２３６】
ステップＳ１３６において、実行フローを採用不可と判定した場合、プログラミング支援装置１００は処理をステップＳ１３２に戻す。以後、実行フローが採用可となるまで、実行フローの生成と、上記評価値の算出とが繰り返される。
【０２３７】
ステップＳ１３６において、上記評価値が採用可であると判定した場合、プログラミング支援装置１００はステップＳ１３７を実行する。ステップＳ１３７では、更新部５０２が、採用可の実行フローを結果出力部Ｇ２９に表示するように、第一入力エリアＧ９の表示用データを更新する。
【０２３８】
次に、プログラミング支援装置１００はステップＳ１３８を実行する。ステップＳ１３８では、プログラム生成部５１０が、ステップＳ１３１〜Ｓ１３６で生成された実行フローに基づいて、ロボット２の動作プログラムを生成する。
【０２３９】
次に、プログラミング支援装置１００はステップＳ１３９を実行する。ステップＳ１３９では、保存ボタンＧ３８がクリックされたか否かをプログラム登録部５１１が確認する。
【０２４０】
ステップＳ１３９において、保存ボタンＧ３８はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ１４０を実行する。ステップＳ１４０では、プランニングボタンＧ３７が再クリックされたか否かをフロー調節部５０３が確認する。
【０２４１】
ステップＳ１４０において、プランニングボタンＧ３７は再クリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ１３９に戻す。
【０２４２】
ステップＳ１４０において、プランニングボタンＧ３７が再クリックされたと判定した場合、プログラミング支援装置１００は処理をステップＳ１３２に戻す。これにより、動作プログラムの生成が再度実行される。
【０２４３】
ステップＳ１３９において、保存ボタンＧ３８がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１４１を実行する。ステップＳ１４１では、プログラム登録部５１１が、ステップＳ１３８において生成された動作プログラムを動作プログラム記憶部１１２に書き込む。以上で動作プログラムの生成手順が完了する。
【０２４４】
続いて、図３５を参照して、上記ステップＳ１３２において、第一制約条件及び第二制約条件を満たす実行フローを生成する手順を具体的に例示する。
【０２４５】
ステップＳ２０１では、フロー調節部５０３が、タイミング条件を満たすように実行フローを生成する。例えばフロー調節部５０３は、複数の実行対象の作業ジョブを、タイミング条件に応じてグループ分けする。具体的には、タイミング条件ごとに、当該タイミング条件に関連する全ての作業ジョブを、当該タイミング条件を満たす状態でグループ化する。タイミング条件に一切関連しない作業ジョブは、単独で一グループを構成することとなる。グループ分けの結果、仮に、複数の実行対象の作業ジョブが一つしかグループを含まなかった場合、タイミング条件を満たす実行フローは一つしか存在しないこととなる。複数の実行対象の作業ジョブが複数のグループに分かれた場合、フロー調節部５０３は、当該複数のグループ同士をランダムに並べて実行フローを生成する。
【０２４６】
次に、プログラミング支援装置１００はステップＳ２０２，Ｓ２０３，Ｓ２０４を実行する。ステップＳ２０２では、判定部５０４が、第一制約条件の確認対象の作業ジョブを選択する。ステップＳ２０３では、実行フローにおいて確認対象の作業ジョブよりも前に位置する作業ジョブの実行順序に基づいて、判定部５０４が確認対象の作業ジョブの実行タイミングにおける環境状態を決定する。例えば、ジョブ０２（図３２〜３４）が作業フローにおける確認対象である場合、判定部５０４は、ジョブ０１がジョブ０２の前に位置し、ジョブ０３がジョブ０２の後に位置するから、ジョブ０２の実行タイミングにおいて蓋１２は開いていると決定する。ステップＳ２０４では、ステップＳ２０３において決定した環境状態が第一制約条件を満たしているか否かを判定部５０４が確認する。
【０２４７】
ステップＳ２０４において、実行環境が第一制約条件を満たしていないと判定した場合、プログラミング支援装置１００はステップＳ２０５を実行する。ステップＳ２０５では、フロー調節部５０３が、タイミング条件を満たすように実行フローを調節する。例えばフロー調節部５０３は、タイミング条件に基づいてグループ化された上記複数のグループ間の順序を変更する。その後、プログラミング支援装置１００は処理をステップＳ２０２に戻す。
【０２４８】
ステップＳ２０４において、実行環境が第一制約条件を満たしていると判定した場合、プログラミング支援装置１００はステップＳ２０６を実行する。ステップＳ２０６では、実行フローの全ての作業ジョブについて第一制約条件の確認が完了したか否かを判定部５０４が確認する。
【０２４９】
ステップＳ２０６において、未確認の作業ジョブが残っていると判定した場合、プログラミング支援装置１００はステップＳ２０７を実行する。ステップＳ２０７では、判定部５０４が未確認の作業ジョブのいずれかを選択する。その後、プログラミング支援装置１００は処理をステップＳ２０２に戻す。以後、全ての作業ジョブが環境条件を満たすと判定されるまで、プログラミング支援装置１００はステップＳ２０２〜Ｓ２０７を繰り返す。
【０２５０】
ステップＳ２０６において、全ての作業ジョブについて第一制約条件の確認が完了したと判定した場合、プログラミング支援装置１００は実行フローの生成処理を完了する。
【０２５１】
（５）シミュレーション手順
図３０に示すように、プログラミング支援装置１００は、まずステップＳ１５１を実行する。ステップＳ１５１では、画面データ生成部６０１が、シミュレーション画面Ｋ１の表示用データを生成し、モニタ１３１に出力する。
【０２５２】
次に、プログラミング支援装置１００はステップＳ１５２を実行する。ステップＳ１５２では、プログラム選択ボタンＫ３がクリックされたか否かを更新部６０２が確認する。
【０２５３】
ステップＳ１５２において、プログラム選択ボタンＫ３がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１５３を実行する。ステップＳ１５３では、プログラム設定部６０３が、動作プログラム記憶部１１２を参照して動作プログラムのリストを生成する。更新部６０２が、当該リストをリスト表示エリアＬ２に含むプログラム選択画面Ｌ１を表示するように、環境構築画面Ｂ１の表示用データを更新する。
【０２５４】
次に、プログラミング支援装置１００はステップＳ１５４を実行する。ステップＳ１５４では、プログラム設定部６０３が、プログラム選択画面Ｌ１における動作プログラムの選択入力を待機する。
【０２５５】
次に、プログラミング支援装置１００はステップＳ１５５を実行する。ステップＳ１５５では、プログラム設定部６０３が、プログラム選択画面Ｌ１において選択された動作プログラムを、シミュレーション対象の動作プログラムに設定する。
【０２５６】
ステップＳ１５２において、プログラム選択ボタンＫ３はクリックされていないと判定した場合、プログラミング支援装置１００はステップＳ１５６を実行する。ステップＳ１５６では、シミュレーション対象の動作プログラムが設定済であるか否かをシミュレーション実行部６０４が確認する。
【０２５７】
ステップＳ１５６において、シミュレーション対象の動作プログラムは設定済であると判定した場合、プログラミング支援装置１００はステップＳ１５７を実行する。ステップＳ１５７では、シミュレーション実行ボタンＫ４がクリックされたか否かを更新部６０２が確認する。
【０２５８】
ステップＳ１５７において、シミュレーション実行ボタンＫ４がクリックされたと判定した場合、プログラミング支援装置１００はステップＳ１５８を実行する。ステップＳ１５８では、シミュレーション実行部６０４が、環境データ記憶部１１１に記憶された環境モデルデータにより特定されるシミュレーション環境下において、シミュレーション対象の動作プログラムに従ってロボット２のモデルを動作させる。
【０２５９】
次に、プログラミング支援装置１００はステップＳ１５９を実行する。ステップＳ１５９では、動画データ生成部６０５が、シミュレーション実行部６０４によるシミュレーション結果に従って、ロボット２のモデルの動画データを生成する。更新部６０２が、当該動画データをリスト表示エリアＬ２に表示するように描画エリアＫ２の表示用データを更新する。
【０２６０】
ステップＳ１５５，Ｓ１５９を実行した後、プログラミング支援装置１００はステップＳ１６０を実行する。ステップＳ１５６において、シミュレーション対象の動作プログラムが未設定であると判定した場合、及びステップＳ１５においてシミュレーション実行ボタンＫ４がクリックされていないと判定した場合も、プログラミング支援装置１００はステップＳ１６０を実行する。ステップＳ１６０では、終了ボタンＫ５がクリックされたか否かを更新部６０２が確認する。
【０２６１】
ステップＳ１６０において、終了ボタンＫ５がクリックされていないと判定した場合、プログラミング支援装置１００は処理をステップＳ１５２に戻す。
【０２６２】
ステップＳ１６０において、終了ボタンＫ５がクリックされたと判定した場合、プログラミング支援装置１００は、シミュレーション画面Ｋ１をクローズして処理を終了する。
【０２６３】
〔本実施形態の効果〕
以上に説明したように、プログラミング支援装置１００は、ロボット２の動作パターンを規定する複数の作業ジョブを記憶する作業ジョブ記憶部１１４と、複数の作業ジョブのいずれかについて、ロボット２の動作環境を指定する環境条件を、ユーザインタフェース１３０への入力に応じて設定する第一条件設定部４１２と、複数の作業ジョブのうち、ロボット２に実行させる複数の実行対象の作業ジョブを、ユーザインタフェース１３０への入力に応じて設定する第二条件設定部４１７と、第二条件設定部４１７により設定された複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定するプランニング支援部５０１と、を備える。
【０２６４】
作業ジョブごとの実行上の制約条件である環境条件は、作業ジョブ同士の関係についての制約条件に比較して高い普遍性を有する傾向がある。実際に、環境条件は、作業ジョブを含んで構成される動作プログラムによらず当該作業ジョブに適用され得る一方、作業ジョブ同士の関係についての制約条件は、動作プログラムごとに特有となり得る。このため、作業ジョブの実行フローに対する条件を環境条件として設定可能とすることで、既登録内容を流用し易くなる。言い換えれば、少なくとも一部の条件を再利用可能なデータとすることができる。従って、プログラミングに際して既登録の動作プログラムを活かし易くなるので、動作プログラミングの負担軽減に有効である。
【０２６５】
プランニング支援部５０１は、実行フローのいずれか一つの作業ジョブの実行タイミングにおける環境状態を、当該実行フローの他の作業ジョブにおけるロボット２の動作内容と、当該実行フローの実行順序とに基づいて特定し、当該環境状態が当該一つの作業ジョブの環境条件を満たすか否かを判定してもよい。この場合、実行順序により特定可能な環境状態と、環境条件とを比較することで、実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを容易に判定することができる。
【０２６６】
実行フローが第一作業ジョブ及び第二作業ジョブを順に含む場合に、プランニング支援部５０１は、少なくとも第一作業ジョブにおけるロボットの動作内容に基づいて第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。この場合、作業ジョブが環境条件を満たすか否かを更に容易に判定することができる。
【０２６７】
実行フローが第一作業ジョブ、第二作業ジョブ及び第三作業ジョブを順に含む場合に、プランニング支援部５０１は、少なくとも第一作業ジョブにおけるロボットの動作内容に基づいて第二作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態を少なくとも第二作業ジョブにおけるロボットの動作内容に基づいて更新して第三作業ジョブの実行タイミングにおける環境状態を特定し、当該環境状態が第三作業ジョブの環境条件を満たすか否かを判定してもよい。この場合、順に並ぶ作業ジョブに応じたロボット２の動作内容に従って、環境状態を順次更新することによって、作業ジョブが環境条件を満たすか否かを更に容易に判定することができる。
【０２６８】
第一作業ジョブにより規定される動作パターンが、作業対象物を物理的に操作する動作を含み、第二作業ジョブの環境条件が、当該作業対象物の状態を指定する条件を含む場合に、プランニング支援部５０１は、第一作業ジョブに従ってロボットが動作した後の当該作業対象物の状態を第二作業ジョブの実行タイミングにおける環境状態として特定し、当該環境状態が第二作業ジョブの環境条件を満たすか否かを判定してもよい。この場合、作業ジョブが環境条件を満たすか否かを更に容易に判定することができる。
【０２６９】
プランニング支援部５０１は、実行フローのいずれか一つの作業ジョブの環境条件と、当該実行フローの他の作業ジョブにおけるロボット２の動作内容とに基づいて、当該一つの作業ジョブが当該環境条件を満たすために、当該一つの作業ジョブと当該他の作業ジョブとの間に必要とされる順序条件を生成し、当該実行フローの実行順序が当該順序条件を満たすか否かを判定してもよい。この場合、環境条件を順序条件に置き換えることによって、作業ジョブが環境条件を満たすか否かを容易に判定することができる。
【０２７０】
実行フローが、作業対象物を物理的に操作する動作を含む動作パターンを規定する第一作業ジョブと、当該作業対象物の状態を指定する条件を含む環境条件が設定された第二作業ジョブとを含む場合に、プランニング支援部５０１は、第一作業ジョブに従ってロボットが動作した後の当該作業対象物の状態と、第二作業ジョブの環境条件が指定する当該作業対象物の状態との関係に基づいて、第一作業ジョブと第二作業ジョブとの間の順序条件を生成してもよい。この場合、作業ジョブが環境条件を満たすか否かを更に容易に判定することができる。
【０２７１】
第二条件設定部４１７は、ユーザインタフェース１３０への入力に基づいて、少なくとも二つの実行対象の作業ジョブの間に、実行タイミングの関係を指定するタイミング条件を更に設定するように構成され、プランニング支援部５０１は、タイミング条件を満たすように実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを当該実行順序に基づいて判定してもよい。この場合、環境条件の入力のみでなく、タイミング条件の入力も可能とする柔軟なユーザインタフェースによって、使い勝手を向上させることができる。また、環境条件の少なくとも一部がタイミング条件として入力されることによって、環境条件を満たすか否かの判定における演算負荷が軽減される。
【０２７２】
プログラミング支援装置１００は、環境条件を入力するための第一入力エリアＧ９と、複数の実行対象の作業ジョブを選択するための第二入力エリアＧ２０と、を含むプランニング画面Ｇ１をユーザインタフェース１３０に表示するためのデータを生成する画面データ生成部４０１を更に備えてもよい。この場合、既登録内容を流用できる部分と、新たな条件設定が必要となる部分との切り分けが更に容易となる。
【０２７３】
プログラミング支援装置１００は、ユーザインタフェース１３０への入力に応じて第一入力エリアＧ９の表示用データを更新する第一更新部４０２と、ユーザインタフェース１３０への入力に応じて第二入力エリアＧ２０の表示用データを更新する第二更新部４０３と、を更に備えてもよい。画面データ生成部４０１は、複数の作業ジョブのリストを示すリスト表示エリアＧ２を更に含むプランニング画面Ｇ１の表示用データを生成してもよい。第一更新部４０２は、リスト表示エリアＧ２において選択された作業ジョブの環境条件を入力可能とするように第一入力エリアＧ９の表示用データを更新し、第二更新部４０３は、リスト表示エリアＧ２において選択された複数の作業ジョブを表示して当該複数の作業ジョブ間のタイミング条件を入力可能とするように第二入力エリアＧ２０用のデータを更新してもよい。この場合、環境条件の入力対象となる作業ジョブの選択、及びタイミング条件の入力対象となる作業ジョブの選択の両方が容易となる。
【０２７４】
プログラミング支援装置１００は、第二入力エリアＧ２０に表示される複数の作業ジョブの仮フローを生成する仮フロー生成部４１６を更に備えてもよい。第二更新部４０３は、仮フローを表示し、仮フローにおける作業ジョブ間にタイミング条件を入力可能とするように第二入力エリアＧ２０の表示用データを更新してもよい。この場合、仮フローを設定した上で、そのうち変更不可の部分を指定する直感的な操作手順で第二制約条件の入力が可能となる。このため、操作者による第二制約条件の入力が更に容易となる。
【０２７５】
環境条件は、作業ジョブの作業対象物の状態を指定する状態指定条件を含んでもよい。第一条件設定部４１２は、第一入力エリアＧ９への入力に基づいて作業対象物を設定する対象物設定部４１３と、第一入力エリアＧ９への入力に基づいて状態指定条件を設定する状態設定部４１４と、を有してもよい。この場合、操作者の判断に迷いの生じ難い作業対象物及び状態指定条件の入力により第一制約条件設定が可能となるので、操作者による第一制約条件の入力が更に容易となる。
【０２７６】
プログラミング支援装置１００は、作業対象物の選択肢を設定し、当該選択肢の表示用のデータを生成する第一入力サポート部４０８と、状態の指定対象となる作業対象物に応じて、状態指定条件の選択肢を設定し、当該選択肢の表示用のデータを生成する第二入力サポート部４０９とを更に備えてもよい。この場合、作業対象物の入力に応じて、状態指定条件の入力がサポートされるので、操作者による第一制約条件の入力が更に容易になる。
【０２７７】
プログラミング支援装置１００は、ロボット２の動作シミュレーション用の環境モデルデータを記憶する環境データ記憶部１１１から、環境モデルデータに含まれる物を特定する第一オプション情報と、当該物の状態を示す第二オプション情報とを取得するオプション情報取得部４１０を更に備えてもよい。第一入力サポート部４０８は、第一オプション情報に基づいて作業対象物の選択肢を設定してもよい。第二入力サポート部４０９は、第二オプション情報に基づいて状態指定条件の選択肢を設定してもよい。この場合、環境モデルデータを利用して選択肢を設定することで、操作者による第一制約条件の入力が更に容易となる。
【０２７８】
画面データ生成部４０１は、リスト表示エリアＧ２が第一入力エリアＧ９及び第二入力エリアＧ２０の間に配置されるようにプランニング画面Ｇ１の表示用データを生成してもよい。この場合、環境条件の入力対象となる作業ジョブの選択、及びタイミング条件の入力対象となる作業ジョブの選択に共用されるリスト表示エリアＧ２を、第一入力エリアＧ９及び第二入力エリアＧ２０の間に配置することで、操作者による作業性が更に高められる。
【０２７９】
プログラミング支援装置１００は、少なくとも環境条件を作業ジョブに対応付けて条件記憶部に登録する条件登録部４１９と、条件記憶部から環境条件を読み込む条件読込部４１１とを更に備えてもよい。この場合、既登録の制約条件を読み込み可能とすることで、既登録の動作プログラムを更に活かし易くなる。
【０２８０】
プランニング支援部５０１は、実行フローにおいて少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行フローの実行順序に基づいて判定する判定部５０４と、実行フローにおいていずれかの作業ジョブが環境条件を満たしていないと判定した場合に、タイミング条件を満たすように実行順序を変更するフロー調節部５０３と、環境条件及びタイミング条件とは異なる評価条件に基づいて当該実行フローを評価し、評価結果に基づいて当該実行フローの採用可否を判定するフロー評価部５０７と、を有してもよい。この場合、制約条件とは異なる評価条件に基づく評価プロセスが加えられることで、より信頼性の高いプログラミング支援が可能である。
【０２８１】
プランニング支援部５０１は、実行フローと、ロボット２の動作シミュレーション用の環境モデルデータとに基づいて、作業ジョブ間におけるロボット２の動作パターンを規定するつなぎジョブを生成するつなぎジョブ生成部５０６を更に有し、フロー評価部５０７は、実行フロー、複数の実行対象の作業ジョブ及び少なくとも一つのつなぎジョブを評価条件に基づいて評価し、評価結果に基づいて実行フローの採用可否を判定してもよい。この場合、作業ジョブ間におけるロボットの動作パターンをも考慮して、実行フローの採用可否が判定されるので、より信頼性の高いプログラミング支援が可能である。
【０２８２】
実行フローの採用可否を判定するための基準を調節する演算レベルを、ユーザインタフェース１３０への入力に応じて設定する演算レベル設定部４１８を更に備えてもよい。この場合、プログラミング支援の速度及び信頼性のバランスを、ユーザニーズに応じて調節可能である。
【０２８３】
以上、実施形態について説明したが、本発明は必ずしも上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で様々な変形が可能である。例えば、プログラミング支援装置１００は、少なくとも条件設定モジュール４００及びプログラミングモジュール５００を有していればよく、メインモジュール２００、環境構築モジュール３００及びシミュレーションモジュール６００を有しなくてもよい。
【０２８４】
上記実施形態に関し、以下を付記する。
（付記１）
ロボットに実行させる複数の作業ジョブについて、前記作業ジョブごとの実行上の制約条件である第一制約条件を、ユーザインタフェースへの入力に応じて設定する第一条件設定部と、
前記作業ジョブ同士の関係についての制約条件である第二制約条件を、前記ユーザインタフェースへの入力に応じて設定する第二条件設定部と、
前記第一制約条件及び前記第二制約条件に基づいて、少なくとも一つの前記作業ジョブの実行タイミングをチェックするプランニング支援部と、を備えるプログラミング支援装置。
（付記２）
前記第一制約条件を入力するための第一入力エリア及び前記第二制約条件を入力するための第二入力エリアを含む入力画面を前記ユーザインタフェースに表示するためのデータを生成する画面データ生成部を更に備える、付記１記載のプログラミング支援装置。
（付記３）
前記ユーザインタフェースへの入力に応じて前記第一入力エリアの表示用データを更新する第一更新部と、
前記ユーザインタフェースへの入力に応じて前記第二入力エリアの表示用データを更新する第二更新部と、を更に備え、
前記画面データ生成部は、前記複数の作業ジョブのリストを示すリスト表示エリアを更に含む前記入力画面の表示用データを生成し、
前記第一更新部は、前記リスト表示エリアにおいて選択された前記作業ジョブの前記第一制約条件を入力可能とするように前記第一入力エリアの表示用データを更新し、
前記第二更新部は、前記リスト表示エリアにおいて選択された複数の前記作業ジョブを表示して当該複数の作業ジョブ間の前記第二制約条件を入力可能とするように前記第二入力エリアの表示用データを更新する、付記２記載のプログラミング支援装置。
（付記４）
前記第二入力エリアに表示される前記複数の作業ジョブの仮フローを生成する仮フロー生成部を更に備え、
前記第二更新部は、前記仮フローを表示し、前記仮フローにおける前記作業ジョブ間に前記第二制約条件を入力可能とするように前記第二入力エリアの表示用データを更新する、付記３記載のプログラミング支援装置。
（付記５）
前記第一制約条件は、前記作業ジョブの作業対象物の状態を指定する状態指定条件を含み、
前記第一条件設定部は、
前記第一入力エリアへの入力に基づいて前記作業対象物を設定する対象物設定部と、
前記第一入力エリアへの入力に基づいて前記状態指定条件を設定する状態設定部と、を有する、付記３又は４記載のプログラミング支援装置。
（付記６）
前記作業対象物の選択肢を設定し、当該選択肢の表示用のデータを生成する第一入力サポート部と、
前記状態の指定対象となる前記作業対象物に応じて、前記状態指定条件の選択肢を設定し、当該選択肢の表示用のデータを生成する第二入力サポート部とを更に備える、付記５記載のプログラミング支援装置。
（付記７）
前記ロボットの動作シミュレーション用の環境データを記憶する環境データ記憶部から、前記環境データに含まれる物を特定する第一オプション情報と、当該物の状態を示す第二オプション情報とを取得するオプション情報取得部を更に備え、
前記第一入力サポート部は、前記第一オプション情報に基づいて前記作業対象物の選択肢を設定し、
前記第二入力サポート部は、前記第二オプション情報に基づいて前記状態指定条件の選択肢を設定する、付記６記載のプログラミング支援装置。
（付記８）
前記画面データ生成部は、前記リスト表示エリアが前記第一入力エリア及び前記第二入力エリアの間に配置されるように前記入力画面の表示用データを生成する、付記７記載のプログラミング支援装置。
（付記９）
前記第一制約条件及び前記第二制約条件の少なくとも一方を条件記憶部に登録する条件登録部と、
前記条件記憶部から前記第一制約条件及び前記第二制約条件の少なくとも一方を読み込む条件読込部とを更に備える、付記２〜８のいずれか一項記載のプログラミング支援装置。
（付記１０）
前記プランニング支援部は、前記実行タイミングのチェック結果に基づいて、前記複数の作業ジョブの実行フローを生成することを更に実行する、付記１〜９のいずれか一項記載のプログラミング支援装置。
（付記１１）
少なくとも一つの前記作業ジョブについて、前記ロボットの動作パスを規定する第一パス情報を取得するパス情報取得部を更に備え、
前記プランニング支援部は、
前記第一制約条件及び前記第二制約条件に基づいて、少なくとも一つの前記作業ジョブの実行タイミングをチェックするタイミングチェック部と、
前記実行タイミングのチェック結果に基づいて、前記第一制約条件及び前記第二制約条件を満たすように前記実行フローを生成するフロー生成部と、
前記第一制約条件及び前記第二制約条件とは異なる評価条件に基づいて前記実行フロー及び前記第一パス情報を評価し、評価結果に基づいて前記実行フローの採用可否を判定するフロー評価部と、を有する、付記１０記載のプログラミング支援装置。
（付記１２）
前記プランニング支援部は、
前記実行フローと、前記第一パス情報と、前記ロボットの動作シミュレーション用の環境データとに基づいて、前記作業ジョブ間における前記ロボットの動作パスを規定する第二パス情報を生成するパス生成部を更に有し、
前記フロー評価部は、前記実行フロー、前記第一パス情報及び前記第二パス情報を前記評価条件に基づいて評価し、評価結果に基づいて前記実行フローの採用可否を判定する、付記１１記載のプログラミング支援装置。
（付記１３）
前記実行フローの採用可否を判定するための基準を調節する演算レベルを、ユーザインタフェースへの入力に応じて設定する演算レベル設定部を更に備える、付記１１又は１２記載のプログラミング支援装置。
（付記１４）
前記プランニング支援部により生成された前記実行フローに基づいて、前記ロボットの動作プログラムを生成するプログラム生成部を更に備える、付記１０〜１３のいずれか一項記載のプログラミング支援装置。
（付記１５）
付記１４記載のプログラミング支援装置と、
前記ロボットと、
前記プログラム生成部により生成された前記動作プログラムに従って前記ロボットを制御するコントローラと、を備えるロボットシステム。
（付記１６）
プログラミング支援装置により実行される方法であって、
ロボットに実行させる複数の作業ジョブについて、前記作業ジョブごとの実行上の制約条件である第一制約条件を、ユーザインタフェースへの入力に応じて設定することと、
前記作業ジョブ同士の関係についての制約条件である第二制約条件を、前記ユーザインタフェースへの入力に応じて設定することと、
前記第一制約条件及び前記第二制約条件に基づいて、少なくとも一つの前記作業ジョブの実行タイミングをチェックすることと、を含むプログラミング支援方法。
（付記１７）
プログラミング支援装置により実行されるプログラム生成方法であって、
ロボットに実行させる複数の作業ジョブについて、前記作業ジョブごとの実行上の制約条件である第一制約条件を、ユーザインタフェースへの入力に応じて設定することと、
前記作業ジョブ同士の関係についての制約条件である第二制約条件を、前記ユーザインタフェースへの入力に応じて設定することと、
少なくとも一つの前記作業ジョブについて、前記ロボットの動作パスを規定する第一パス情報を取得することと、
前記第一制約条件及び前記第二制約条件に基づいて、少なくとも一つの前記作業ジョブの実行タイミングをチェックすることと、
前記実行タイミングのチェック結果に基づいて、前記第一制約条件及び前記第二制約条件を満たすように前記複数の作業ジョブの実行フローを生成することと、
前記実行フローに基づいて、前記ロボットの動作プログラムを生成することと、を含むプログラム生成方法。
【符号の説明】
【０２８５】
１…ロボットシステム、２…ロボット、３…ロボットコントローラ、１００…プログラミング支援装置、１１１…環境データ記憶部、１１４…作業ジョブ記憶部、１３０…ユーザインタフェース、４０１…画面データ生成部、４０２…第一更新部、４０３…第二更新部、４０８…第一入力サポート部、４０９…第二入力サポート部、４１０…オプション情報取得部、４１１…条件読込部、４１２…第一条件設定部、４１３…対象物設定部、４１４…状態設定部、４１６…仮フロー生成部、４１７…第二条件設定部、４１８…演算レベル設定部、４１９…条件登録部、４２０…個別条件記憶部、４２２…ジョブ間条件記憶部、５０１…プランニング支援部、５０３…フロー調節部、５０４…判定部、５０５…パス情報取得部、５０６…つなぎジョブ生成部、５０７…フロー評価部、５１０…プログラム生成部、Ｇ１…プランニング画面（入力画面）、Ｇ２…リスト表示エリア、Ｇ９…第一入力エリア、Ｇ２０…第二入力エリア。
【要約】
プログラミング支援装置１００は、ロボット２の動作パターンを規定する複数の作業ジョブを記憶する作業ジョブ記憶部１１４と、複数の作業ジョブのいずれかについて、ロボット２の動作環境を指定する環境条件を、ユーザインタフェース１３０への入力に応じて設定する第一条件設定部４１２と、複数の作業ジョブのうち、ロボット２に実行させる複数の実行対象の作業ジョブを、ユーザインタフェース１３０への入力に応じて設定する第二条件設定部４１７と、第二条件設定部４１７により設定された複数の実行対象の作業ジョブの実行順序を定めた実行フローにおいて、少なくとも一つの作業ジョブが環境条件を満たすか否かを、当該実行順序に基づいて判定するプランニング支援部５０１と、を備える。【図１】
0006455646.tif 000002
【図２】
0006455646.tif 000003
【図３】
0006455646.tif 000004
【図４】
0006455646.tif 000005
【図５】
0006455646.tif 000006
【図６】
0006455646.tif 000007
【図７】
0006455646.tif 000008
【図８】
0006455646.tif 000009
【図９】
0006455646.tif 000010
【図１０】
0006455646.tif 000011
【図１１】
0006455646.tif 000012
【図１２】
0006455646.tif 000013
【図１３】
0006455646.tif 000014
【図１４】
0006455646.tif 000015
【図１５】
0006455646.tif 000016
【図１６】
0006455646.tif 000017
【図１７】
0006455646.tif 000018
【図１８】
0006455646.tif 000019
【図１９】
0006455646.tif 000020
【図２０】
0006455646.tif 000021
【図２１】
0006455646.tif 000022
【図２２】
0006455646.tif 000023
【図２３】
0006455646.tif 000024
【図２４】
0006455646.tif 000025
【図２５】
0006455646.tif 000026
【図２６】
0006455646.tif 000027
【図２７】
0006455646.tif 000028
【図２８】
0006455646.tif 000029
【図２９】
0006455646.tif 000030
【図３０】
0006455646.tif 000031
【図３１】
0006455646.tif 000032
【図３２】
0006455646.tif 000033
【図３３】
0006455646.tif 000034
【図３４】
0006455646.tif 000035
【図３５】
0006455646.tif 000036