(57)【要約】      （修正有）【課題】作業ブロックの設定作業において作業者の負担を軽減する技術を提供する。【解決手段】プログラム作成装置は、作業ブロック定義部４１と、工程フロー編集部４２と、制御プログラム生成部４３とを備える。工程フロー編集部４２は、複数の作業ブロック情報を所望の順序で並べて得られる工程フローにおいて、処理対象作業ブロック情報よりも後続の設定対象ブロック情報の内部状態情報を、当該処理対象ブロック情報の事後条件を用いて設定する。制御プログラム生成部４３は、工程フロー編集部４３により内部状態情報が設定された複数の作業ブロック情報に基づいて制御プログラムを生成する。【選択図】図３
2011238041.tif 000002
【特許請求の範囲】
【請求項１】
組み立てセルにおいて使用されるロボットを制御するための制御プログラムを作成するプログラム作成装置であって、
未設定の内部状態情報と事後条件とを含む作業ブロックを、前記ロボットの作業単位ごとに定義する作業ブロック定義部と、
複数の前記作業ブロックを所望の順序で並べて得られる工程フローにおいて、処理対象の作業ブロックよりも後続の複数の作業ブロックの前記内部状態情報を、当該処理対象の作業ブロックの前記事後条件を用いて設定する工程フロー編集部と、
前記工程フロー編集部により前記内部状態情報が設定された前記複数の作業ブロックに基づいて前記制御プログラムを生成する制御プログラム生成部と
を備える、プログラム作成装置。
【請求項２】
請求項１に記載のプログラム作成装置であって、
前記作業ブロック定義部は、
前記未設定の内部状態情報と、前記事後条件と、事前条件とを含む作業ブロックを、前記ロボットの作業単位ごとに定義し、
前記工程フロー編集部は、
前記処理対象の作業ブロックよりも後続の複数の作業ブロックを一つずつ順次に設定対象の作業ブロックとして取得し、
当該設定対象の作業ブロックの前記事前条件が、当該処理対象の作業ブロックの前記事後条件の終了条件でない場合には、当該事後条件を用いて当該設定対象の作業ブロックの前記内部状態情報を設定し、
当該設定対象の作業ブロックの前記事前条件が、当該処理対象の作業ブロックの前記事後条件の終了条件である場合には、当該事後条件を用いて当該設定対象の作業ブロックの前記内部状態情報を設定するのを停止する、プログラム作成装置。
【請求項３】
請求項１または請求項２に記載のプログラム作成装置であって、
前記工程フローの終端に配置されている前記作業ブロックの前記内部状態情報に基づいて、当該作業ブロックの後に配置可能な前記作業ブロックを絞り込む作業ブロック絞込部をさらに備える、プログラム作成装置。
【請求項４】
請求項１乃至請求項３のいずれかに記載のプログラム作成装置であって、
前記ロボットを模擬的に動かして、前記ロボットの可動範囲を取得するロボットシミュレータ部と、
ハンド、部品、ワーク、供給台を含む供給装置及び治具のそれぞれをパーツとして、各前記パーツの模擬的な位置が前記ロボットの可動範囲内にあるか否かの判定結果と、前記ロボット、前記ハンド、前記部品、前記供給装置、前記治具及び前記ワークのそれぞれの種類とに基づいて、選択可能な前記パーツを絞り込むパーツ絞込部と
をさらに備える、プログラム作成装置。
【請求項５】
請求項１乃至請求項４のいずれかに記載のプログラム作成装置であって、
前記ロボットは複数設けられ、
複数の前記ロボットのうち、第１ロボットの可動範囲と、当該第１ロボットと可動範囲の一部分が重なる第２ロボットの可動範囲とを取得するロボットシミュレータ部を備え、
前記工程フロー編集機能は、
前記第１及び第２ロボットについて、同期すべき前記作業ブロックを定義し、
前後する二つの前記同期すべき作業ブロックの間において、前記ロボットシミュレータ部で取得された前記第１ロボットの可動範囲と前記第２ロボットの可動範囲とが互いに重なるかを判定する複数台対応干渉チェック部をさらに備える、プログラム作成装置。
【請求項６】
組み立てセルにおいて使用されるロボットを制御するための制御プログラムを作成するプログラム作成方法であって、
（ａ）未設定の内部状態情報と事後条件とを含む作業ブロックを、前記ロボットの作業単位ごとに定義する工程と、
（ｂ）複数の前記作業ブロックを所望の順序で並べて得られる工程フローにおいて、処理対象の作業ブロックよりも後続の複数の作業ブロックの前記内部状態情報を、当該処理対象の作業ブロックの前記事後条件を用いて設定する工程と、
（ｃ）前記工程（ｂ）により前記内部状態情報が設定された前記複数の作業ブロックに基づいて前記制御プログラムを生成する工程と
を備える、プログラム作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組み立てセルにおいて使用されるロボットを制御するための制御プログラムを作成するプログラム作成装置、及び、プログラム作成方法に関するものである。
【背景技術】
【０００２】
自動組み立てセルにおいて使用されるロボットには、当該ロボットの遠隔地において作成される制御プログラム、いわゆるオフラインプログラムにより制御されものがある。制御プログラムの作成方法には、ロボットの作業単位、例えば、部品の移動、ネジ締めごとに作業ブロック等を定義し、当該作業ブロック等を示すアイコンを組み合わせて作成する方法がある。この方法によれば、制御プログラムの作成工数を削減するとともに、多種多様な動作を実現することが可能となっている。
【０００３】
特許文献１に開示されている技術では、複数の作業ブロックを連結することにより処理のシーケンスを定義している。さらに、この技術では、定義したシーケンスに従って駆動部を動作させる制御手段を備えている。特許文献２に開示されているような、業務システムに関わるプログラムの作成を行うソフトウェアの生産支援システムでは、データの流れに着目して業務仕様を作業部品に分割化して登録し、複数の作業部品を用いて処理のシーケンスを定義している。さらに、この技術では、画面項目の遷移に関する項目遷移条件を用いて項目間の遷移を行うことにより、プログラムが作成されている。
【０００４】
このように、従来においては、部品の移動、ワークの姿勢変更、組み付け、ネジ締め、嵌め合いなどの作業単位ごとに作業ブロックまたは作業部品を定義し、それらを所望の順序で並べてシーケンスとして定義することにより、装置やシステムの制御プログラムを作成するものが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１４７７０４号公報
【特許文献２】特開平７−４４３５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
さて、工場の設備の一つであるロボットを使用した自動組み立てセルのような装置は、自由度の高い可動部を複数有しており、主にロボットが、ネジなどの部品を治具に仮置きする作業や、組み立て対象物たるワークに部品を組み付ける作業などを行う。そのロボットには、組み立て工程における多様な作業を行うことができるように、複数種類のハンドが用意されている。しかし、作業者は、作業ブロックを追加して配置する度に、配置した作業ブロックにハンドの情報等をいちいち最初から設定しなければならず、設定作業に多くの時間を費やさなければならなかった。
【０００７】
また、組み立て作業を構成する作業単位が多いこと、製品設計に応じて組み付け手順などの作業内容が異なることから、作業ブロックが多数登録されている。しかし、使用するハンドによって把持可能な部品が限定されたり、把持する部品によって仮置き可能な治具が限定されたりすることから、作業者は、作業ブロックを配置する度に、前後の作業ブロックの内容を確認しながら適切な作業ブロックを選定しなければならず、手間がかかるものとなっていた。
【０００８】
また、組立作業では、ロボットは部品を供給台から取外し、位置決めを行うために治具に一時的に部品を仮置きする。さらに、ロボットは治具から部品を取り出してワークに組み付ける作業を行う。このように、同一部品を扱う場合であっても、取り出し座標、取り付け座標などのロボットの動作位置が工程の組み方に応じて変化する。このため、工程の進行を考慮しながら座標値を計算し、各作業ブロックに個別に設定する必要があった。
【０００９】
そこで、本発明は、上記のような問題点を鑑みてなされたものであり、主に作業ブロックの設定作業において作業者の負担を軽減する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るプログラム作成装置は、組み立てセルにおいて使用されるロボットを制御するための制御プログラムを作成するプログラム作成装置であって、未設定の内部状態情報と事後条件とを含む作業ブロックを、前記ロボットの作業単位ごとに定義する作業ブロック定義部を備える。そして、複数の前記作業ブロックを所望の順序で並べて得られる工程フローにおいて、処理対象の作業ブロックよりも後続の複数の作業ブロックの前記内部状態情報を、当該処理対象の作業ブロックの前記事後条件を用いて設定する工程フロー編集部と、前記工程フロー編集部により前記内部状態情報が設定された前記複数の作業ブロックに基づいて前記制御プログラムを生成する制御プログラム生成部とを備える。
【００１１】
また、本発明に係るプログラム作成方法は、組み立てセルにおいて使用されるロボットを制御するための制御プログラムを作成するプログラム作成方法であって、（ａ）未設定の内部状態情報と事後条件とを含む作業ブロックを、前記ロボットの作業単位ごとに定義する工程を備える。そして、（ｂ）複数の前記作業ブロックを所望の順序で並べて得られる工程フローにおいて、処理対象の作業ブロックよりも後続の複数の作業ブロックの前記内部状態情報を、当該処理対象の作業ブロックの前記事後条件を用いて設定する工程と、（ｃ）前記工程（ｂ）により前記内部状態情報が設定された前記複数の作業ブロックに基づいて前記制御プログラムを生成する工程とを備える。
【発明の効果】
【００１２】
本発明によれば、作業者が作業ブロックの内部状態情報において一部の設定作業をするだけで、残りの内部状態情報が自動的に設定される。したがって、作業ブロック情報の設定作業における作業者の負担を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係るロボットシステムの構成を示す図である。
【図２】実施の形態１に係るロボットの動作を示す図である。
【図３】実施の形態１に係るプログラム作成・教示部の構成を示すブロック図である。
【図４】実施の形態１に係る作業ブロックデータ記憶部の構成を示す図である。
【図５】実施の形態１に係る工程フローデータ記憶部の構成を示す図である。
【図６】実施の形態１に係る内部状態情報の構成を示す図である。
【図７】実施の形態１に係る工程フロー編集部の動作を示すフローチャートである。
【図８】実施の形態２に係るプログラム作成・教示部の構成を示すブロック図である。
【図９】実施の形態２に係る作業ブロック絞込部の動作を示すフローチャートである。
【図１０】実施の形態２に係る作業ブロック絞込部の動作を示す図である。
【図１１】実施の形態３に係るプログラム作成・教示部の構成を示すブロック図である。
【図１２】実施の形態３に係るパーツ絞込部の動作を示すフローチャートである。
【図１３】実施の形態３に係るパーツ絞込部の動作を示す図である。
【図１４】実施の形態４に係るプログラム作成・教示部の構成を示すブロック図である。
【図１５】実施の形態４に係る工程フローデータ記憶部の構成を示す図である。
【図１６】実施の形態４に係る複数台対応干渉チェック部の動作を示すフローチャートである。
【発明を実施するための形態】
【００１４】
＜実施の形態１＞
図１は、本発明の実施の形態１に係るロボットシステムの構成を示す図である。図に示すように、本実施の形態に係るロボットシステムは、組み立てセルにおいて使用されるロボット１と、ロボット制御装置２と、プログラム作成装置たるプログラム作成・教示装置３とを備える。
【００１５】
プログラム作成・教示装置３は、ロボット１を遠隔的に制御するための制御プログラム、いわゆるオフラインプログラムを作成する装置である。作業者（ユーザ）は、プログラム作成・教示装置３を用いて制御プログラムを作成することが可能となっている。このプログラム作成・教示装置３は、プログラム作成・教示部３１と、表示部３２と、通信部３３とを備える。
【００１６】
プログラム作成・教示部３１は制御プログラムを作成するとともに、ロボット１を教示（ティーチング）する。また、プログラム作成・教示部３１は、制御プログラムと、ロボット１を教示することにより得られるロボット１の各部分の位置データとを記憶する。表示部３２は、制御プログラムや位置データ等を表示する。通信部３３は、ロボット制御装置２の通信部２３と通信を行うものであり、制御プログラム等を送信する。
【００１７】
ロボット制御装置２は、プログラム作成・教示装置３で生成された制御プログラムに基づいてロボット１を制御する装置である。このロボット制御装置２は、ロボット制御部２１と、プログラム実行部２２と、通信部２３と、プログラム・データ記憶部２４とを備える。
【００１８】
通信部２３は、通信部３３と通信を行うものであり、プログラム作成・教示装置３から送信される制御プログラム等を受信する。プログラム・データ記憶部２４は、ロボット１の制御プログラム及び位置データ等を記憶するものであり、通信部２３で受信された制御プログラムを記憶する。プログラム実行部２２は、ロボットプログラムを実行するものであり、通信部２３からの制御プログラムや、プログラム・データ記憶部２４に記憶されている制御プログラムを実行し、ロボット１を制御するための制御信号をロボット制御部２１に出力する。ロボット制御部２１は、当該制御信号に基づいてロボット１の動作を制御する。
【００１９】
図２は、ロボット１を使用する組み立てセルの構成を示す図である。図に示すように、ロボット１は、ハンド１１を着脱可能となっている。ロボット１は、製品の一部分である部品１２を把持して、当該部品１２を製品の別部分であるワーク１５に組み付けて製品を組み立てていく。ハンド１１は、複数種類存在し、その種類ごとに把持可能な部品１２の種類が決まっている。供給装置１３は、一以上の部品１２をロボット１に供給する。この供給装置１３は、複数の部品１２が載置される単なる台（供給台（作業台ともいう））であってもよいし、例えばネジ供給装置のように、ネジ（部品１２）をロボット１まで移送する移送機構を有する専用装置であってもよい。
【００２０】
治具１４は、ワーク１５に組み付けられる前の部品１２が仮置きされるものであり、部品１２の位置・姿勢を一時的に保持するものである。治具１４は、その種類ごとに仮置き可能な部品１２の種類が決まっている。なお、この治具１４は、複数種類の部品１２について複数個の部品１２が同時に仮置きされるものであってもよい。ワーク１５は、部品１２の組み付け対象物である。最終的に供給装置１３から供給される全ての部品１２をワーク１５に組み付けることで製品の組み立てが行われる。
【００２１】
次に、ロボット１が制御プログラムの制御により行う基本的な一連の組み立て動作について説明する。まず、ロボット１は用意されているハンド１１を装着する。次に、ロボット１は、供給装置１３に載置されている部品１２を把持し、把持した部品１２を治具１４の所定の箇所に仮置きする。この際、複数種類の部品１２について複数の部品１２を治具１４に同時に仮置きしてもよい。それから、ロボット１は、治具１４に仮置きされた部品１４を把持し、ワーク１５へ予め決められた順に組み付ける。この組み付けの際、ロボット１は、複数の部品１１が仮置きされた治具１４を把持して移送することにより、当該複数の部品１１を移送してもよいし、ワーク１５を把持して移動させたり回転させたりしてもよい。なお、本実施の形態では、１台のロボット１が、供給装置１３から治具１４への部品１２の移動と、治具１４からワーク１５への部品１２の組み付けとを行う場合について説明するが、後の実施の形態のように、例えば、複数台のロボット１がこれらの作業を行ってもよい。
【００２２】
さて、図１に示されるプログラム作成・教示部３１では、ロボット１が行う作業単位、例えば、部品の移動、組み付け、ネジ締め、嵌め合いごとに、当該作業単位の内容を示す作業ブロックが定義される。そして、複数の作業ブロックが選択され、選択された複数の作業ブロックが所望の順序で並べて配置される。それから、配置された複数の作業ブロックのそれぞれにおいて、後で説明する図６に示される、ロボット１を動作させるのに必要な内部状態情報１２２が設定される。それから、設定後の複数の作業ブロックに基づいて、ロボット１に一連の動作及び作業をさせる制御プログラムが作成される。
【００２３】
従来の技術では、作業者は、作業ブロックごとに、内部状態情報１２２の多くの項目についていちいち最初から設定及び入力をしなければならず、その作業は非常に時間がかかるものとなっていた。そこで、本実施の形態に係るプログラム作成・教示部３１では、内部状態情報１２２の設定作業における作業者の負担を軽減することが可能となっている。以下、プログラム作成・教示部３１の構成について詳細に説明する。
【００２４】
図３は、プログラム作成・教示部３１の構成を示すブロック図である。プログラム作成・教示部３１は、例えば、ＣＰＵ、記憶装置（いずれも図示せず）及び表示部３２などから構成されている。そして、ＣＰＵが記憶装置に記憶されているプログラムを実行することにより、作業ブロック定義部４１と、工程フロー編集部４２と、制御プログラム生成部４３と、ロボットシミュレータ部４４と、作業ブロックデータ記憶部６１と、工程フローデータ記憶部６２とが、プログラム作成・教示部３１に機能ブロックとして形成される。
【００２５】
作業ブロック定義部４１は、作業ブロックの雛形（以下、「作業ブロックテンプレート１１０」と呼ぶ）を作成する。作業ブロックデータ記憶部６１は、作業ブロック定義部４１が作成した複数の作業ブロックテンプレート１１０を記憶する。
【００２６】
工程フロー編集部４２は、作業者により選択された複数の作業ブロックテンプレート１１０をコピーし、複数の作業ブロック情報１２０として工程フローデータ記憶部６２に記憶する。そして、工程フロー編集部４２は、作業者により所望の順序で並べられた複数の作業ブロック情報１２０からなる「工程フロー」を作成する。
【００２７】
工程フロー編集部４２にて複数の作業ブロック情報１２０が並べられる際には、工程フロー編集部４２は、例えばＧＵＩ（Graphical User Interface）を用いて当該複数の作業ブロック情報１２０を表示する。工程フロー編集部４２は、この表示において、前後する複数の作業ブロック情報１２０の間を線または矢印で接続する。以下においては、工程フロー編集部４２は、作業ブロック情報１２０の間を線で接続するものとして説明する。
【００２８】
また、工程フロー編集部４２は、作業者による部分的な設定に基づいて自動設定を行うことにより、工程フローの設定を完了させる。
【００２９】
制御プログラム生成部４３は、工程フロー設定完了後に、工程フロー編集部４２によって起動される。制御プログラム生成部４３は、工程フローデータ記憶部６２から設定完了後の工程フローを読み込み、ロボット１を制御するための制御プログラムを生成する。
【００３０】
ロボットシミュレータ部４４は、工程フロー設定完了後に、工程フロー編集部４２によって起動される。ロボットシミュレータ部４４は、工程フローデータ記憶部６２から設定完了後の工程フローを読み込み、ロボット１の動きを模擬する。この模擬においては、例えば三次元におけるロボット１の模擬的な位置、姿勢及び動きが制御プログラムに基づいて算出される。この模擬においては、ロボット１だけでなく、ロボット１、ハンド１１及び部品１１等の関係を考慮して、ハンド１１、部品１２等についてもロボット１と同様に模擬する。例えば、ロボット「Ａ」が、ハンド「Ｂ」を装着して部品「Ｃ」を把持する場合、ロボットシミュレータ部４４が制御プログラムを解釈して、ロボット「Ａ」を模擬的に動作させてハンド「Ｂ」の模擬的な位置及び姿勢等を算出し、ハンド「Ｂ」の模擬的な位置及び姿勢等から部品「Ｃ」の模擬的な位置及び姿勢等を算出する。
【００３１】
図４は、作業ブロックデータ記憶部６１に複数の作業ブロックテンプレート１１０が記憶されている様子を示す図である。図に示すように、作業ブロックテンプレート１１０は、プログラムテンプレート１１１と、内部状態初期値１１２と、事前条件１１３と、事後条件１１４とを含む。本実施の形態では、事前条件１１３及び事後条件１１４のそれぞれは複数設けられている。
【００３２】
図５は、工程フローデータ記憶部６２に複数の作業ブロック情報１２０が記憶されている様子を示す図である。図に示すように、作業ブロック情報１２０は、プログラム１２１と、先に簡単に説明された内部状態情報１２２と、事前条件１１３と、事後条件１１４とを含む。本実施の形態では、事前条件１１３及び事後条件１１４のそれぞれは複数設けられている。
【００３３】
作業ブロック情報１２０は、作業ブロックデータ記憶部６１に記憶されている作業ブロックテンプレート１１０が工程フローデータ記憶部６２に配置されることにより生成されるものであり、一つの作業ブロック情報１２０は、一つの作業ブロックテンプレート１１０を実質的にコピーしたものとなっている。具体的には、工程フロー編集部４２により、プログラムテンプレート１１１の内容がプログラム１２１にコピーされる。内部状態初期値１１２は、内部状態情報１２２の初期値から構成されている。工程フロー編集部４２により、内部状態初期値１１２の内容が内部状態情報１２２にコピーされることにより、内部状態情報１２２の予め決められた項目に対して初期値が設定される。また、工程フロー編集部４２によって、複数の事前条件１１３及び複数の事後条件１１４が、作業ブロックテンプレート１１０から作業ブロック情報１２０にそのままコピーされる。
【００３４】
次に、作業ブロックテンプレート１１０等に含まれる各種情報について説明する。プログラムテンプレート１１１及び内部状態初期値１１２は、テキスト形式のデータである。内部状態初期値１１２における各項目の初期値の設定は、例えば、下記の形式で記述される。
【００３５】
【数１】
2011238041.tif 000003
【００３６】
ここで、式には定数値や文字列を使用することができる。定数値には整数、実数が用いられる。文字列は“”（ダブルクォート）で囲まれる。また、内部状態情報１２２で初期値が設定されていない項目には、値の設定が無効である状態を示す予約語として“ＮＵＬＬ”が設定される。
【００３７】
事前条件１１３及び事後条件１１４は、テキスト形式のデータである。事前条件１１３は、それが属する作業ブロックの作業単位をロボット１が実行する前の条件であり、条件文から構成されている。事後条件１１４は、それが属する作業ブロックの作業単位をロボット１が実行した後の条件であり、条件文から構成されている。これら条件文は、例えば、下記の形式で記述される。
【００３８】
【数２】
2011238041.tif 000004
【００３９】
ここで、式には定数値や文字列を使用することができる。定数値には整数、実数が用いられる。文字列は“”（ダブルクォート）で囲まれる。また、式には変数名が使用可能である。式に使用可能な変数名は内部状態の項目名、及び、プログラム中で使用可能な変数名である。プログラム中で使用可能な変数には、ロボット１の動作状態を示す予め決められた変数名と、作業者が定義した変数名との２種類がある。式における演算としては、四則演算が可能である。また、ｓｉｎやｃｏｓのような一般的な算術関数を利用してもよい。また、内部状態のクリア処理をするための条件文は、例えば、下記の形式で記述される。ここで、“ＮＵＬＬ”は値の設定が無効である状態を示す。
【００４０】
【数３】
2011238041.tif 000005
【００４１】
図６は、本実施の形態に係る作業ブロックの内部状態情報１２２のデータ構造を示す図である。内部状態情報１２２は、ハンド情報１５１と、部品情報１５２と、把持した部品１２等を移動するときの始点となるＦＲＯＭ情報、及び、把持した部品１２等を移動するときの終点となるＴＯ情報からなる位置情報１５３とから構成されている。
【００４２】
ハンド情報１５１は、ハンド１１が装着されるか否かを示すハンド１１の有無と、装着されるハンド１１の種類と、装着されるハンド１１のＩＤとから構成される。ハンド１１の種類及びＩＤは、文字列で示される。ハンド１１の種類ごとに把持可能な部品１２は、ハンド１１の機構設計時に決定されていることから、予めハンド１１が把持可能な部品１２の一覧を作成しておき、外部ファイルなどに格納しておく。ハンド１１のＩＤは、組み立てセルに同一種類のハンド１１が複数個存在する場合に、どのハンド１１がロボット１に装着されているかを一意に識別するための識別子である。なお、ハンド１１のＩＤには文字列の代わりに整数値などを用いて示されてもよい。
【００４３】
部品情報１５２は、部品１２が把持されるか否かを示す部品１２の有無と、把持される部品１２の種類、把持される部品１２のＩＤとから構成される。部品１２の種類及びＩＤは、文字列で示される。部品１２の種類ごとに仮置き可能な治具１４の種類、及び、治具１４における仮置き箇所は、治具１４の設計時に決定されていることから、予め部品１２を仮置き可能な治具１４の一覧を作成しておき、外部ファイルなどに格納しておく。また、部品１２の種類ごとに取り付け可能なワーク１５の種類、及び、ワーク１５における組み付け箇所は製品の設計時に決定されているため、予め部品１２を組み付け可能なワーク１５の一覧を作成しておき、外部ファイルなどに格納しておく。部品１２のＩＤは、組み立てセルに同一種類の部品１２が複数個存在する場合に、どの部品１２が把持されるかを一意に識別するための識別子である。なお、部品１２のＩＤには文字列の代わりに整数値などを用いて示されてもよい。
【００４４】
位置情報１５３は、作業位置の教示点を示す教示点名と、教示点に対応するプログラム中の変数を示す変数名と、作業位置の対象である供給装置１３もしくは治具１４の分類を示す対象分類と、対象の種類を示す対象種類と、対象の識別子を示す対象ＩＤと、対象の仮置きまたは組み付け位置を示す対象箇所と、教示座標であるＸ，Ｙ，Ｚとから構成されている。
【００４５】
教示点名は、文字列で示され、教示作業を行う際に教示点を一意に識別するために使用される。変数名は、文字列で示され、プログラム中で教示点に対応する変数を示す。対象分類は、文字列で示され、供給装置１３、作業台、治具１４、退避位置などの分類を示す。対象分類は、これ以外に作業者定義の指定位置などが設定されてもよい。対象種類は、文字列で示され、対象分類ごとに種類の一覧が設けられている。この種類の一覧は、組み立てセルの設計時に決定されているため、予め種類の一覧を作成しておき、外部ファイルなどに格納しておく。対象ＩＤは、文字列で示され、組み立てセルに同一種類の複数の対象が存在する場合、どの対象を指しているかを一意に識別するための識別子である。この対象ＩＤには文字列の代わりに整数値などを用いて示されてもよい。
【００４６】
対象箇所は、文字列で示され、複数の部品１２を仮置き可能な治具１４に部品１２を仮置きする場合に、治具１４においてどの箇所を指しているかを一意に識別するための識別子である。対象箇所は文字列の代わりに整数値などを用いて示されてもよい。対象箇所は、治具１４のほか、供給装置１３、作業台、ワーク１５などの設計時に決定されるため、予め治具１４、供給装置１３、作業台、ワーク１５などの種類ごとに対象箇所の一覧を作成しておき、外部ファイルなどに格納しておく。教示座標であるＸ，Ｙ，Ｚには、教示の際に三次元の位置座標値が格納される。教示座標には、三次元の位置座標値だけでなく、姿勢を示すパラメータ、例えば、「Ａ」、「Ｂ」、「Ｃ」などを加えてもよい。
【００４７】
次に、本実施の形態に係るプログラム作成・教示部３１の動作について説明する。
【００４８】
＜作業ブロックテンプレートの定義＞
まず、プログラム作成・教示部３１は、作業ブロック定義部４１を用いて作業ブロックテンプレート１１０を定義する。具体的には、作業ブロック定義部４１が、作業者の操作に基づいて、作業ブロックテンプレート１１０における事後条件１１４と事前条件１１３とを定義する。
【００４９】
より具体的には、作業ブロック定義部４１は、内部状態情報１２２において値などの設定が自動的に行われるようにするための条件を含む事後条件１１４を定義する。
【００５０】
例えば、ロボット１がハンド「Ａ」を装着する作業ブロックテンプレートｋにおいては、事後条件１１４は次のように記される。
【００５１】
【数４】
2011238041.tif 000006
【００５２】
ここで、“．”（ドット）は、項目名を階層的に示すために使用される。また、ロボット１が供給装置「Ｃ」上の部品「Ｂ」を把持する作業ブロックテンプレートｌにおいては、事後条件１１４は次のように記される。
【００５３】
【数５】
2011238041.tif 000007
【００５４】
また、ロボット１が把持した部品１２を治具「Ｄ」へ移送する作業ブロックテンプレートｍにおいては、事後条件１１４は次のように記される。
【００５５】
【数６】
2011238041.tif 000008
【００５６】
本実施の形態では、内部状態のクリアに関する条件文が、内部状態情報１２２における自動設定を停止させるようにするための条件（以下、「終了条件」と呼ぶ）を示す条件文として用いられる。作業ブロック定義部４１は、終了条件を含む事前条件１１３を定義する。
【００５７】
例えば、ロボット１がハンド１１を取り外してから作業を行う作業ブロックテンプレート１１０においては、事前条件１１３が次のように記される。
【００５８】
【数７】
2011238041.tif 000009
【００５９】
作業ブロック定義部４１は、複数の事前条件１１３及び複数の事後条件１１４が作成された作業ブロックテンプレート１１０を作業ブロックデータ記憶部６１に記憶する。
【００６０】
＜工程フローの作成＞
次に、プログラム作成・教示部３１は、工程フロー編集部４２を用いて工程フローを作成する。具体的には、まず、工程フロー編集部４２は、作業ブロックデータ記憶部６１から作業者により選択された複数の作業ブロックテンプレート１１０をコピーし、それによって得られた複数の作業ブロック情報１２０を工程フローデータ記憶部６２に記憶する。
【００６１】
そして、工程フロー編集部４２は、複数の作業ブロック情報１２０をＧＵＩ表示する。作業者により、ＧＵＩ表示された複数の作業ブロック情報１２０が並べて配置されると、工程フロー編集部４２が、前後する二つの作業ブロック情報１２０の間を線で接続し、工程フローを作成する。
【００６２】
例えば、上述の作業ブロックテンプレートｋ，ｌ，ｍのコピーである作業ブロック情報Ｋ，Ｌ，Ｍを用いて、ロボット１にハンド「Ａ」を装着し、供給装置「Ｃ」上にある部品「Ｂ」をハンド「Ａ」で把持して治具「Ｄ」へ移送する作業を実現しようとする場合には、作業者により、作業ブロック情報Ｋ，Ｌ，Ｍがこの順に並べられる。この場合に、工程フロー編集部４２は、ＧＵＩ表示において、作業ブロック情報Ｋと作業ブロック情報Ｌとを線で互いに接続し、作業ブロック情報Ｌと作業ブロック情報Ｍとを線で互いに接続する。
【００６３】
工程フロー編集部４２は、工程フローにおける複数の作業ブロック情報１２０の並び順に関する情報を工程フロー接続情報１２５として生成する。そして、工程フロー編集部４２は、図５に示すように、生成した工程フロー接続情報１２５を工程フローデータ記憶部６２に記憶する。
【００６４】
＜作業者による内部状態情報の設定＞
次に、作業者により、工程フローを構成する複数の作業ブロック情報１２０において、内部状態情報１２２が部分的に設定される。
【００６５】
具体的には、まず、作業者により、作業ブロック情報１２０の内部状態情報１２２において、ハンド１１のＩＤ及び部品１２のＩＤが設定される。これにより、組み立てセルに存在する複数のハンド１１及び複数の部品１２から、使用すべきハンド１１及び部品１２がそれぞれ指定される。この際、ハンド１１のＩＤは、ハンド１１が装着される最初の作業ブロック情報１２０の内部状態情報１２２にのみ設定され、部品１２のＩＤは、部品１２が把持される最初の作業ブロック情報１２０の内部状態情報１２２にのみ設定される。
【００６６】
例えば、上述の作業ブロック情報Ｋ，Ｌ，Ｍのうち、ハンド１１を装着する最初の作業ブロック情報１２０は作業ブロック情報Ｋであるから、作業ブロック情報Ｋにおいてのみハンド１１のＩＤが設定される。また、作業ブロック情報Ｋ，Ｌ，Ｍのうち、部品１２を把持する最初の作業ブロック情報１２０は作業ブロック情報Ｌであるから、作業ブロック情報Ｌにおいてのみ部品１２のＩＤが設定される。以下、作業ブロック情報Ｋのハンド１１のＩＤ、及び、作業ブロック情報Ｌの部品１２のＩＤには、「Ａ１」及び「Ｂ１」がそれぞれ設定されたものとして説明する。
【００６７】
また、作業者により、作業ブロック情報１２０の内部状態情報１２２において、ハンド１１のＩＤと同様に、対象ＩＤ及び対象箇所が設定される。これにより組み立てセルに存在する複数の対象、つまり、複数の供給装置１３及び複数の治具１４から、使用すべき供給装置１３及び治具１４がそれぞれ指定される。
【００６８】
以下、作業ブロック情報Ｌの対象ＩＤ及び対象箇所においてのみ、例えば「Ｃ１」及び「Ｃ１１」がそれぞれ設定され、上述の作業ブロック情報Ｍの対象ＩＤ及び対象箇所においてのみ、例えば「Ｄ１」及び「Ｄ１１」がそれぞれ設定されたものとして説明する。
【００６９】
以上により、内部状態情報１２２においては、ハンド１１等の項目について部分的に設定されるが、設定されない項目については初期値としてＮＵＬＬに設定されるものとする。なお、三次元ＣＡＤなどを使用している場合、ＣＡＤ部品に予めＩＤの情報を持たせておき、作業者がＣＡＤ部品の中から対象を選択することで、ハンド１１のＩＤ、部品１２のＩＤ、対象ＩＤ及び対象箇所などの入力を行ってもよい。
【００７０】
＜内部状態情報の自動設定＞
次に、プログラム作成・教示部３１は、工程フロー編集部４２を用いて作業ブロック情報１２０の内部状態情報１２２を自動設定する。具体的には、工程フロー編集部４２が、作業者により行われた内部状態情報１２２での部分的な設定に基づいて、内部状態情報１２２での残りの設定を自動的に設定していく。
【００７１】
図７は、工程フロー編集部４２が、作業ブロック情報１２０の内部状態情報１２２を自動設定する際の動作を示すフローチャートである。以下、図７を用いて、工程フロー編集部４２の動作を説明する。
【００７２】
まず、ステップｓ１にて、工程フロー編集部４２は、工程フローデータ記憶部６２に記憶されている工程フローから、一つの作業ブロック情報１２０を処理対象の作業ブロック情報１２０（以下、「処理対象ブロック情報１２０Ａ」と呼ぶこともある）として取得する。工程フロー編集部４２は、ステップｓ１を最初に行う際には、工程フローの先頭にある作業ブロック情報１２０を処理対象ブロック情報１２０Ａとして取得し、ステップｓ１を行うごとに、次の作業ブロック情報１２０を処理対象ブロック情報１２０Ａとして取得していく。
【００７３】
ステップｓ２にて、工程フロー編集部４２は、処理対象ブロック情報１２０Ａから、一つの事後条件１１４を「処理対象事後条件１１４Ａ」として取得する。工程フロー編集部４２は、ステップｓ２を最初に行う際には、先頭の事後条件１１４を処理対象事後条件１１４Ａとして取得し、ステップｓ２を行うごとに、次の事後条件１１４を処理対象事後条件１１４Ａとして取得する。
【００７４】
ステップｓ３にて、工程フロー編集部４２は、工程フローにおいて、処理対象ブロック情報１２０Ａよりも後続の一つの作業ブロック情報１２０を、設定対象の作業ブロック情報１２０（以下、「設定対象ブロック情報１２０Ｂ」と呼ぶこともある）として取得する。工程フロー編集部４２は、ステップｓ３を最初に行う際には、処理対象ブロック情報１２０Ａ直後の作業ブロック情報１２０を設定対象ブロック情報１２０Ｂとして取得し、ステップｓ３を行うごとに、次の作業ブロック情報１２０を設定対象ブロック情報１２０Ｂとして取得する。
【００７５】
ステップｓ４にて、工程フロー編集部４２は、設定対象ブロック情報１２０Ｂの事前条件１１３が、処理対象事後条件１１４Ａの終了条件であるかを判定する。具体的には、工程フロー編集部４２は、このステップｓ４にて、設定対象ブロック情報１２０Ｂから一つの事前条件１１３を取得し、当該取得した一つの事前条件１１３が処理対象事後条件１１４Ａの終了条件であるかを判定する。ステップｓ４において、一つの事前条件１１３が処理対象事後条件１１４Ａの終了条件であると判定した場合にはステップｓ６に進む。一方、ステップｓ４において、一つの事前条件１１３が処理対象事後条件１１４Ａの終了条件でないと判定した場合には、工程フロー編集部４２は、設定対象ブロック情報１２０Ｂの残りの事前条件１１３についても同様に判定していく。そして、工程フロー編集部４２は、設定対象ブロック情報１２０Ｂの事前条件１１３のいずれも、処理対象事後条件１１４Ａの終了条件ではないと判定した場合にはステップｓ５に進む。
【００７６】
ステップｓ５にて、工程フロー編集部４２は、処理対象ブロック情報１２０Ａの内部状態情報１２２の設定に処理対象事後条件１１４Ａを適用して、設定用の情報を取得する。そして、工程フロー編集部４２は、設定対象ブロック情報１２０Ｂの内部状態情報１２２に、当該設定用の情報を書き込む。つまり、工程フロー編集部４２は、処理対象ブロック情報１２０Ａの処理対象事後条件１１４Ａを用いて、設定対象ブロック情報１２０Ｂの内部状態情報１２２を設定する。それからステップｓ３に戻る。
【００７７】
工程フロー編集部４２は、ステップｓ４において事前条件１１３が処理対象事後条件１１４Ａの終了条件であると判定するまで、以上のステップｓ３〜ｓ５の処理を繰り返す。したがって、工程フロー編集部４２は、ステップｓ４において当該判定をするまで、処理対象ブロック情報１２０Ａよりも後続の複数の作業ブロック情報１２０の内部状態情報１２２を、処理対象ブロック情報１２０Ａの処理対象事後条件１１４Ａを用いて自動的に設定していく。一方、工程フロー編集部４２は、ステップｓ４において事前条件１１３が処理対象事後条件１１４Ａの終了条件であると判定する場合には、処理対象事後条件１１４Ａを用いて設定対象ブロック情報１２０Ｂの内部状態情報１２２を自動設定するのを停止する。
【００７８】
ステップｓ６にて、工程フロー編集部４２は、処理対象ブロック情報１２０Ａにおいて、処理対象事後条件１１４Ａとすべき次の事後条件１１４があるかを判定する。ステップｓ６において、次の事後条件１１４があると判定した場合にはステップｓ２に戻り、次の事後条件１１４がないと判定した場合にはステップｓ７に進む。
【００７９】
工程フロー編集部４２は、ステップｓ６において次の事後条件１１４がないと判定するまで、ステップｓ２〜ｓ６の処理を繰り返す。したがって、工程フロー編集部４２は、処理対象ブロック情報１２０Ａの全ての事後条件１１４について、ステップｓ２〜ｓ６の処理を繰り返すことになる。
【００８０】
ステップｓ７にて、工程フロー編集部４２は、工程フローにおいて、処理対象ブロック情報１２０Ａとすべき次の作業ブロック情報１２０があるかを判定する。ステップｓ７において、次の作業ブロック情報１２０があると判定した場合にはステップｓ１に戻り、次の作業ブロック情報１２０がないと判定した場合には処理を終了する。
【００８１】
以上により、工程フローを構成する複数の作業ブロック情報１２０の内部状態情報１２２の大部分または全部が自動設定される。例えば、作業ブロック情報Ｋ，Ｌ，Ｍに対して以上の処理を行った場合、作業ブロック情報Ｍの内部状態情報１２２は下記のようになる。
【００８２】
【数８】
2011238041.tif 000010
【００８３】
この場合、作業ブロック情報Ｍの内部状態情報１２２において、作業者が設定したのは位置の対象ＩＤと位置の対象箇所だけであったが、工程フロー編集部４２の自動設定により大部分または全ての設定が完了することになる。したがって、作業者の設定作業が軽減されることになる。
【００８４】
＜その後の処理＞
その後、プログラム作成・教示部３１は、ロボットシミュレータ部４４を用いてオフラインティーチング作業を行う。具体的には、まず、工程フロー編集部４２が、工程フローデータ記憶部６２に記憶されている設定完了後の工程フローをロボットシミュレータ部４４に渡す。そして、ロボットシミュレータ部４４が、当該工程フローに沿ってロボット１を模擬動作させる。ロボットシミュレータ部４４は、この模擬動作を工程フローの作業ブロック情報１２０ごとに順番に行い、その時のハンド１１などの模擬的な位置などを三次元で計算する。
【００８５】
ここで、ロボット１がハンド１１を装着し、ハンド１１が部品１２を把持する場合には、ハンド１１のサイズ、部品１２のサイズなどを考慮してロボット１の教示座標の計算を行う。また、部品１２が仮置きされている治具１４を模擬的に移動すること、もしくは、組み付けの際にワーク１５の姿勢を模擬的に変更することも可能である。いずれの場合も、ロボット１の模擬動作により、現実に行われる動作とほぼ同じ位置を取得することができることから、ロボット１等を実際に動かさなくても、ロボット１等が正しく動作するか等について予測することができる。
【００８６】
プログラム作成・教示部３１は、制御プログラム生成部４３を用いて、組み立てセルのロボット１の制御プログラムを生成する。具体的には、まず、工程フロー編集部４２が、工程フローデータ記憶部６２に記憶されている設定完了後の工程フローを制御プログラム生成部４３に渡す。そして、制御プログラム生成部４３が、設定完了後の複数の作業ブロック情報１２０に基づいて制御プログラムを生成する。制御プログラム生成直前においては、作業ブロック情報１２０の内部状態情報１２２は全て設定されていることから、制御プログラム生成部４３は、プログラム中の変数に教示点の位置情報を設定し、工程フローに従ってプログラムを連結することで、ロボット１の制御プログラムを生成することができる。
【００８７】
以上のようなプログラム作成・教示装置３によれば、作業者が作業ブロック情報１２０の内部状態情報１２２において一部の設定作業をするだけで、残りの内部状態情報１２２が自動的に設定される。したがって、作業ブロック情報１２０の設定作業における作業者の負担を軽減することができ、工程フローの作成時間を短縮することができる。
【００８８】
また、事前条件１１３が事後条件１１４の終了条件である場合には、その事後条件１１４を用いて行う自動設定が停止する。したがって、所望の事後条件１１４のみを用いて自動設定を行うことができる。
【００８９】
なお、以上の説明では、自動設定する情報として、ハンド情報、部品情報、位置情報について説明したが、これに限ったものではない。例えば、上記と同様のアルゴリズムを用いて、ロボット１の付帯機器である、ビジョンセンサなどの機器の装着有無などの情報も自動設定可能である。また、組み立てセルが処理中の製品情報、組み立てレシピ、個々の製品のカスタマイズ情報などの付加情報を自動設定する処理にも上記の技術を適用することができる。
【００９０】
＜実施の形態２＞
図８は、本実施の形態２に係るプログラム作成・教示装置が備えるプログラム作成・教示部の構成を示すブロック図である。以下、本実施の形態に係るプログラム作成・教示装置の説明においては、実施の形態１と同一の部分には同一符号を付与するものとする。
【００９１】
本実施の形態に係るプログラム作成・教示装置３では、複数の作業ブロックテンプレート１１０の中から、工程フローの終端に配置可能な作業ブロックテンプレート１１０を自動的に絞り込むことが可能となっている。以下、実施の形態１と異なる部分を中心に本実施の形態に係るプログラム作成・教示装置３について説明する。
【００９２】
図８に示すように、本実施の形態に係るプログラム作成・教示装置３のプログラム作成・教示部３１は、実施の形態１に係るプログラム作成・教示部３１に作業ブロック絞込部４５を加えたものである。この作業ブロック絞込部４５は、工程フローの終端に配置されている作業ブロック情報１２０（以下、「終端ブロック情報１２０Ｃ」と呼ぶ）の内部状態情報１２２に基づいて、終端ブロック情報１２０Ｃの後に配置可能な作業ブロックテンプレート１１０の候補を絞り込む機能を有する。
【００９３】
この作業ブロック絞込部４５の機能を実現すべく、作業ブロックテンプレート１１０の複数の事前条件１１３は、作業ブロックテンプレート１１０の前に配置可能な作業ブロック情報１２０を絞り込むための条件を含んでいる。この条件を示す条件文は、例えば、下記の形式で記述される。
【００９４】
【数９】
2011238041.tif 000011
【００９５】
ここで、項目名は内部状態情報１２２の項目名である。比較演算子には、等価（＝＝）、不等（！＝）、比較（＞、≧、≦、＜）のいずれかが用いられる。論理演算式は、比較演算子、否定（！）、論理積（ＡＮＤ）、論理和（ＯＲ）、四則演算、算術関数と、定数、項目名、プログラム中の変数名などの組合せによる式である。演算の優先度を付けるために“（”、“）”などの括弧を用いてもよい。例えば、作業ブロック情報１２０が示す部分作業において扱うことができるハンド種類が「Ａ」に限定される場合には、その作業ブロック情報１２０の事前条件１１３に格納される条件文は、例えば、下記のように記述される。
【００９６】
【数１０】
2011238041.tif 000012
【００９７】
作業ブロック絞込部４５は、複数の作業ブロックテンプレート１１０の事前条件１１３の中から「ＩＦ（〜）」という条件文を抽出し、終端ブロック情報１２０Ｃの内部状態情報１２２が、当該条件文が示す条件を満たしているかを判定する。そして、作業ブロック絞込部４５は、例えば、作業ブロックテンプレート１１０の事前条件１１３の「ＩＦ（〜）」という条件が全て「真」である場合には、当該作業ブロックテンプレート１１０は終端ブロック情報１２０Ｃの後に配置可能であると判定する。
【００９８】
なお、本実施の形態においては、作業ブロックテンプレート１１０が終端ブロック情報１２０Ｃの後に配置不可能であることを示すマークが用いられる。そして、そのマークの有無が設定される領域が、各作業ブロックテンプレート１１０に設けられている。作業ブロック絞込部４５は、上述の判定結果に応じて各作業ブロックテンプレート１１０のマークの有無を変更する。
【００９９】
図９は、本実施の形態に係る作業ブロック絞込部４５の動作を示すフローチャートである。以下、図９を用いて作業ブロック絞込部４５の動作について説明する。
【０１００】
まず、ステップｓ１１にて、作業ブロック絞込部４５は、作業ブロックデータ記憶部６１に定義（登録）された全ての作業ブロックテンプレート１１０のマークをクリア（解除）する。ステップｓ１２にて、作業ブロック絞込部４５は、作成中の工程フローから終端ブロック情報１２０Ｃを検索する。
【０１０１】
ステップｓ１３にて、作業ブロック絞込部４５は、作業ブロックデータ記憶部６１から、一つの作業ブロックテンプレート１１０を「処理対象テンプレート１１０Ａ」として取得する。作業ブロック絞込部４５は、次にステップｓ１３を行う際には、取得した作業ブロックテンプレート１１０とは別の作業ブロックテンプレート１１０を、処理対象テンプレート１１０Ａとして取得する。
【０１０２】
ステップｓ１４にて、作業ブロック絞込部４５は、処理対象テンプレート１１０Ａの複数の事前条件１１３から、一つの事前条件１１３を「処理対象事前条件１１３Ａ」として取得する。作業ブロック絞込部４５は、ステップｓ１４を最初に行う際には、複数の事前条件１１３から、先頭の事前条件１１３を処理対象事前条件１１３Ａとして取得し、ステップｓ１４を行うごとに、次の事前条件１１３を処理対象事前条件１１３Ａとして取得する。
【０１０３】
ステップｓ１５にて、作業ブロック絞込部４５は、ステップｓ１２にて検索した終端ブロック情報１２０Ｃの内部状態情報１２２が、処理対象事前条件１１３Ａを満たすかを判定する。ステップｓ１５において、満たすと判定した場合にはステップｓ１７に進み、満たさないと判定した場合にはステップｓ１６に進む。
【０１０４】
ステップｓ１６にて、作業ブロック絞込部４５は、満たさなかった処理対象事前条件１１３Ａの処理対象テンプレート１１０Ａにマークを設定し、ステップｓ１７に進む。
【０１０５】
ステップｓ１７にて、作業ブロック絞込部４５は、処理対象テンプレート１１０Ａにおいて、処理対象事前条件１１３Ａとすべき次の事前条件１１３があるかを判定する。ステップｓ１７において次の事前条件１１３があると判定した場合にはステップｓ１４に戻り、次の事前条件１１３がないと判定した場合にはステップｓ１８に進む。
【０１０６】
作業ブロック絞込部４５は、ステップｓ１７において次の事前条件１１３がないと判定するまで、ステップｓ１４〜ｓ１７の処理を繰り返す。したがって、作業ブロック絞込部４５は、処理対象テンプレート１１０Ａの全ての事前条件１１３についてステップｓ１４〜ｓ１７の処理を繰り返すことになる。よって、作業ブロック絞込部４５は、終端ブロック情報１２０Ｃの内部状態情報１２２が処理対象テンプレート１１０Ａの事前条件１１３のいずれか一つでも満たさないと判定した場合に、当該処理対象テンプレート１１０Ａにマークを設定することになる。
【０１０７】
ステップｓ１８にて、作業ブロック絞込部４５は、作業ブロックデータ記憶部６１において、処理対象テンプレート１１０Ａとすべき別の作業ブロックテンプレート１１０があるかを判定する。ステップｓ１８において、別の作業ブロックテンプレート１１０があると判定した場合にはステップｓ１３に戻り、そうでない場合にはステップｓ１９に進む。
【０１０８】
ステップｓ１９にて、作業ブロック絞込部４５は、マークが設定されていない作業ブロックテンプレート１１０をハイライト表示する。なお、マークが設定されていない作業ブロックテンプレート１１０を表示する態様は、ハイライト表示に限ったものではなく、マークの設定の有無を区別可能な表示態様であればよい。例えば、マークが設定されていない作業ブロックテンプレート１１０の色やフォントを変えてもよいし、当該作業ブロックテンプレート１１０のみを表示すれば、選択時のスクロール作業を減らすこともできる。
【０１０９】
次に、以上の処理の動作結果の例を示す。ここでは、部品１２の把持において３種類の作業ブロックテンプレートｐ，ｑ，ｒがある場合を例にして説明する。作業ブロックテンプレートｐは部品１２を「上」からロボット１が把持する動作、作業ブロックテンプレートｑは部品１２を「横」からロボット１が把持する動作、作業ブロックテンプレートｒは部品１２を「上下」から挟み込むようにロボット１が把持する動作にそれぞれ対応しているものとする。
【０１１０】
そして、ワーク１５に部品「Ｂ」を複数個組み付ける場合には、部品１２を「上」から把持して下方向に組み付ける作業と、部品１２を「横」から把持して横方向に組み付ける作業とが存在するものとする。そして、ワーク１５に部品「Ｃ」を複数個組み付ける場合には、部品１２を「上」から把持して下方向に組み付ける作業と、部品１２を「上下」から把持して向きを変えてから組み付ける作業とが存在するものとする。
【０１１１】
この場合、作業ブロックテンプレートｐの事前条件１１３は、次のように記述される。
【０１１２】
【数１１】
2011238041.tif 000013
【０１１３】
また、作業ブロックテンプレートｑの事前条件１１３は、次のように記述される。
【０１１４】
【数１２】
2011238041.tif 000014
【０１１５】
また、作業ブロックテンプレートｒの事前条件１１３は、次のように記述される。
【０１１６】
【数１３】
2011238041.tif 000015
【０１１７】
工程フローの終端において、部品「Ｂ」を把持可能なハンド１１がロボット１に装着されている際に、作業ブロック絞込部４５が上述した絞込作業をした場合には、作業部ブロックテンプレートｐ、ｑが絞り込まれてハイライト表示される。一方、工程フローの終端において、部品「Ｃ」を把持可能なハンド１１がロボット１に装着されている際に、作業ブロック絞込部４５が上述した絞込作業をした場合には、作業ブロックテンプレートｐ，ｒが絞り込まれてハイライト表示される。
【０１１８】
図１０は、作業ブロック絞込部４５により作業ブロックテンプレート１１０を絞り込まれる際の画面１７０の例を示す図である。画面１７０の右側には工程フローが表示される工程フロー表示領域１７１が設けられている。画面１７０の左上側には作業ブロックテンプレート１１０の一覧が表示されるテンプレート表示領域１７２が設けられている。画面１７０の左下側には工程フローの中でマウスクリックなどにより選択された作業ブロック情報１２０のプログラム１２１及び内部状態情報１２２などを表示する詳細情報表示領域１７３が設けられている。
【０１１９】
この図においては、作成中の工程フローが工程フロー表示領域１７１に表示されており、当該工程フローの終端が閉じていない箇所が破線で示されている。作業ブロック絞込部４５は、この破線の位置に配置可能な作業ブロックテンプレート１１０の候補を作業ブロックデータ記憶部６１から抽出し、テンプレート表示領域１７２に記される作業ブロックテンプレート１１０の名称を四角形で囲ってハイライト表示する。
【０１２０】
以上のようなプログラム作成・教示装置３によれば、作業ブロック絞込部４５が、工程フローの終端に配置されている作業ブロック情報１２０の内部状態情報１２２に基づいて、当該作業ブロック情報１２０の後に配置可能な作業ブロックテンプレート１１０を自動的に絞り込む。したがって、作業者は、工程フローにおける作業ブロック情報１２０の前後関係を意識することなく、作業ブロック絞込部４５により絞り込まれた作業ブロックテンプレート１１０の中から、工程フローの終端に配置すべきものを選択することができる。よって、作業ブロック情報１２０の配置作業における作業者の負担を軽減することができ、工程フローの作成時間を短縮することができる。また、本実施の形態に係るプログラム作成・教示装置３は、実施の形態１に係るプログラム作成・教示装置３と同様の構成を備えるため、それと同じ効果を得ることができる。
【０１２１】
＜実施の形態３＞
図１１は、本実施の形態３に係るプログラム作成・教示装置が備えるプログラム作成・教示部の構成を示すブロック図である。以下、本実施の形態に係るプログラム作成・教示装置の説明においては、実施の形態２と同一の部分には同一符号を付与するものとする。
【０１２２】
本実施の形態に係るプログラム作成・教示装置３では、オフライン教示する際にロボット１による作用対象として選択可能なパーツ１８２を絞り込むことが可能となっている。ここでパーツ１８２とは、後で説明する図１２に示されるように、形状情報及び位置情報により示される、三次元におけるハンド１１、部品１２、供給台を含む供給装置１３、治具１４、ワーク１５などの要素単位である。以下、実施の形態２と異なる部分を中心に本実施の形態に係るプログラム作成・教示装置３について説明する。
【０１２３】
図１１に示されるように、本実施の形態に係るプログラム作成・教示装置３のプログラム作成・教示部３１は、実施の形態２に係るプログラム作成・教示部３１にパーツ絞込部４６を加えたものである。このパーツ絞込部４６は、ロボットシミュレータ部４４を用いてオフライン教示する際に選択可能なパーツ１８２を絞り込む機能を有する。
【０１２４】
具体的には、ロボットシミュレータ部４４は、ロボット１を模擬的に動かして、ロボット１の可動範囲を取得する。そして、パーツ絞込部４６は、パーツの模擬的な位置がロボット１の可動範囲内にあるか否かの判定結果と、ロボット１、ハンド１１、部品１２、供給装置１３、治具１４及びワーク１５のそれぞれの種類とに基づいて、選択可能なパーツ１８２を絞り込む。
【０１２５】
なお、本実施の形態においては、ロボット１によりパーツ１８２が選択されることができないことを示すマークが用いられる。そして、作業ブロック情報１２０には、パーツ１８２ごとにそのマークの有無が設定される領域が設けられている。パーツ絞込部４６は、干渉チェックの結果に応じて、作業ブロック情報１２０におけるマークの有無を変更する。
【０１２６】
図１２は、本実施の形態に係るパーツ絞込部４６がパーツを絞り込む際の動作を示すフローチャートである。以下、図１２を用いてパーツ絞込部４６における当該動作について説明する。
【０１２７】
まず、ステップｓ２１にて、作業者により、選択可能なパーツ１８２を絞り込む対象とされる作業ブロック情報１２０が指定される。ステップｓ２２にて、パーツ絞込部４６は、指定された作業ブロック情報１２０において、全てのパーツ１８２のマークをクリアする。
【０１２８】
ステップｓ２３にて、パーツ絞込部４６は、複数のパーツ１８２から一つのパーツ１８２を「処理対象パーツ１８２Ａ」として取得する。パーツ絞込部４６は、次にステップｓ２３を行う際には、取得したパーツ１８２とは別のパーツ１８２を、「処理対象パーツ１８２Ａ」として取得する。ステップｓ２４にて、パーツ絞込部４６は、複数の教示点の中から一つの教示点を「処理対象教示点」として取得する。パーツ絞込部４６は、次にステップｓ２４を行う際には、取得した教示点とは別の教示点を、処理対象教示点として取得する。
【０１２９】
ステップｓ２５にて、パーツ絞込部４６は、処理対象パーツ１８２Ａの種類が処理対象教示点の種類と一致しているかを判定する。一致していないと判定した場合にはステップｓ２６に進み、一致すると判定した場合にはステップｓ２７に進む。
【０１３０】
ステップｓ２６では、パーツ絞込部４６は、処理対象パーツ１８２Ａにマークを設定する。
【０１３１】
ステップｓ２７にて、パーツ絞込部４６は、ロボットシミュレータ部４４で取得された処理対象パーツ１８２Ａの模擬的な位置が、ロボットシミュレータ部４４で取得されたロボット１の可動範囲内にあるかを判定する。ステップｓ２７において、パーツ絞込部４６は、模擬的な位置がロボット１の可動範囲内にあると判定した場合にはステップｓ２８に進み、模擬的な位置がロボット１の可動範囲内にないと判定した場合にはステップｓ２９に進む。
【０１３２】
ステップｓ２８にて、パーツ絞込部４６は、処理対象パーツ１８２Ａにマークを設定する。
【０１３３】
ステップｓ２９にて、パーツ絞込部４６は、複数の教示点のうち処理対象教示点とすべき別の教示点があるかを判定する。ステップｓ２９において、別の教示点があると判定した場合にはステップｓ２４に戻り、別の教示点がないと判定した場合には、ステップｓ３０に進む。
【０１３４】
ステップｓ３０にて、パーツ絞込部４６は、複数のパーツ１８２のうち、処理対象パーツ１８２Ａとすべき別のパーツ１８２があるかを判定する。ステップｓ３０において、別のパーツ１８２があると判定した場合にはステップｓ２３に進み、別のパーツ１８２がないと判定した場合にはステップｓ３１に進む。
【０１３５】
ステップｓ３１にて、パーツ絞込部４６は、マークが設定されていないパーツ１８２をハイライト表示する。
【０１３６】
図１３は、パーツ絞込部４６によりパーツ１８２が絞り込まれたときの画面１８１の例を示す図である。この画面１８１においては、ロボット１等が、三次元ＣＡＤなどによって三次元表示されている。パーツ絞込部４６は、現在教示しようとしている教示点と条件が合致するパーツ１８２をハイライト表示する。この図１３においては、ハッチングが施された部品１２のパーツ１８２がハイライト表示されている。作業者は、三次元表示されたパーツ１８２のうち、ハイライト表示されたパーツ１８２を教示の対象としてマウスのクリックなどの操作により選択することが可能となる。
【０１３７】
なお、ここでは、オフライン教示の際に選択可能なパーツ１８２が三次元で表示される場合について説明したが、これに限ったものではない。例えば、当該パーツ１８２の表示は、二次元表示であってもよいし、パーツ名の一覧表示や順次表示であってもよい。また、パーツ候補及びその周辺への自動ズームが併用されてもよい。
【０１３８】
以上のようなプログラム作成・教示装置３によれば、パーツ絞込部４６が、オフライン教示の際に選択可能なパーツ１８２を自動的に絞り込む。したがって、作業者がどのパーツ１８２を選択できるかを知ることができるので教示作業が容易になる。よって、オフライン教示時の作業時間を短縮することができる。また、本実施の形態に係るプログラム作成・教示装置３は、実施の形態２に係るプログラム作成・教示装置３と同様の構成を備えるため、それと同じ効果を得ることができる。
【０１３９】
＜実施の形態４＞
図１４は、本実施の形態４に係るプログラム作成・教示装置が備えるプログラム作成・教示部の構成を示すブロック図である。以下、本実施の形態に係るプログラム作成・教示装置の説明においては、実施の形態３と同一の部分には同一符号を付与するものとする。
【０１４０】
これまでの制御プログラムは、１台のロボット１を制御するものであったが、本実施の形態では、互いに可動範囲（作業範囲）の一部分が重複する複数台のロボット１を制御するものである。本実施の形態に係るプログラム作成・教示装置３は、そのような複数のロボット１同士が作業中に互いに衝突するのを事前に防止することが可能となっている。以下、実施の形態３と異なる部分を中心に本実施の形態に係るプログラム作成・教示装置３について説明する。
【０１４１】
図１４に示すように、本実施の形態に係るプログラム作成・教示装置３のプログラム作成・教示部３１は、実施の形態３に係る工程フロー編集部４２及びロボットシミュレータ部４４の代わりに、複数台対応工程フロー編集部５２及び複数対応ロボットシミュレータ部５４がそれぞれ設けられている。そして、その構成に、複数台対応干渉チェック部５７が加わったものとなっている。
【０１４２】
複数台対応工程フロー編集部５２は、工程フロー編集部４２において、複数のロボット１の工程フローを作成可能にしたものである。この複数台対応工程フロー編集部５２は、複数のロボット１のそれぞれに対して工程フロー編集部４２と同様の動作を行い、ロボット１ごとに工程フローの作成等を行う。そして、ロボット１の作業ブロック情報１２０と、他のロボット１の作業ブロック情報１２０とが作業者によって互いに線で接続された場合に、複数台対応工程フロー編集部５２は、線で接続された二つの作業ブロック情報１２０のそれぞれを、同期すべき作業ブロック情報１２０（以下、「同期ブロック情報１２０Ｄ」と呼ぶ）として定義する。
【０１４３】
この同期の定義は、一つのロボット１の工程フローにおいて複数行われる。そして、本実施の形態に係る複数のロボット１は、それらロボット１全てが同期ブロック情報１２０Ｄの作業を行うまで次の作業を行わず、それらロボット１全てが同期ブロック情報１２０Ｄの作業を行った時点で次の作業を行うようになっている。
【０１４４】
図１５は、本実施の形態に係る工程フローデータ記憶部６２の様子を示す図である。複数台対応工程フロー編集部５２は、同期に関する情報を同期接続情報１２６として生成する。そして、複数台対応工程フロー編集部５２は、同図１５に示すように、生成した同期接続情報１２６を工程フローデータ記憶部６２に記憶する。
【０１４５】
図１４に戻って、複数台対応ロボットシミュレータ部５４は、ロボットシミュレータ部４４において、複数のロボット１の可動範囲を取得可能にしたものである。本実施の形態では、複数台対応ロボットシミュレータ部５４は、ロボットプログラムを解釈して複数のロボット１の動作を計算することにより、複数のロボット１を同時に模擬的に動かすことができる。なお、複数台対応ロボットシミュレータ部５４は、時間を合わせて複数のロボット１を模擬的に動かすものとする。また、ハンド１１、部品１２、供給装置１３、治具１４及びワーク１５など、ロボット１の作業に関する物は、二以上のロボット１において共通しているものとする。これにより、例えば、ロボット「Ａ」が部品１２を供給装置１３から治具１４に移送し、ロボット「Ｂ」が当該部品１２を当該治具１４から取り出しでワーク１５に組み付けるといった組み立て作業が可能となる。
【０１４６】
複数台対応干渉チェック部５７は、同期ブロック情報１２０Ｄから次の同期ブロック情報１２０Ｄまでの間に存在する複数の作業ブロック情報１２０（以下、「同期ブロック情報群」と呼ぶ）を取得する。つまり、複数台対応干渉チェック部５７は、前後する二つの同期ブロック情報１２０Ｄの間に存在する複数の作業ブロック情報１２０を、同期ブロック情報群として取得する。
【０１４７】
そして、複数台対応干渉チェック部５７は、複数台対応ロボットシミュレータ部５４を用いて、同期ブロック情報群の作業が模擬的に行われる際の複数のロボット１の可動範囲を、ロボット１ごとに取得する。そして、複数台対応干渉チェック部５７は、複数台対応ロボットシミュレータ部５４で取得した複数のロボット１の可動範囲が互いに重複するか否かを判定する。つまり、複数台対応干渉チェック部５７は、同期ブロック情報群の作業が模擬的に行われる場合に、複数のロボット１が互いに干渉するか否かを判定する。以下、この判定を「干渉チェック」と呼ぶこともある。
【０１４８】
なお、本実施の形態においては、複数のロボット１の可動範囲の一部分が互いに重複していることを示すマークが用いられる。そして、各作業ブロック情報１２０には、そのマークの有無が設定される領域が設けられている。複数台対応干渉チェック部５７は、干渉チェックの結果に応じて各作業ブロック情報１２０のマークの有無を変更する。
【０１４９】
図１６は、本実施の形態に係る複数台対応干渉チェック部５７が、複数のロボット１のうちの第１ロボット１と第２ロボット２との間において干渉チェックを行うときの動作を示すフローチャートである。以下、図１６を用いて複数台対応干渉チェック部５７における当該動作について説明する。なお、このステップｓ４１の前には、複数台対応工程フロー編集部５２により、複数の同期ブロック情報１２０Ｄがすでに定義されているものとする。
【０１５０】
まず、ステップｓ４１にて、複数台対応干渉チェック部５７は、工程フローにおける全ての作業ブロック情報１２０のマークをクリアする。ステップｓ４２にて、複数台対応干渉チェック部５７は、干渉チェックの対象となる第１ロボット１の工程フローから同期ブロック情報群を取得する。複数台対応干渉チェック部５７は、ステップｓ４１を最初に行う際には、干渉チェックすべき工程フローの先頭の同期ブロック情報群を取得し、ステップｓ４１を行うごとに、次の同期ブロック情報群を取得する。
【０１５１】
ステップｓ４３にて、複数台対応干渉チェック部５７は、干渉チェックの対象となる第２ロボット１の工程フローから、ステップｓ４２と同様にして同期ブロック情報群を取得する。
【０１５２】
ステップｓ４４にて、複数台対応干渉チェック部５７は、複数台対応ロボットシミュレータ部５４を用いて、ステップｓ４２で取得した同期ブロック情報群の作業が行われる際の第１ロボット１の可動範囲と、ステップｓ４３で取得した同期ブロック情報群の作業が行われる際の第２ロボット１の可動範囲とが、互いに重複しているかを判定する。本実施の形態では、この判定が、ステップｓ４２で取得された同期ブロック情報群に含まれる複数の作業ブロック情報１２０と、ステップｓ４３で取得された同期ブロック情報群に含まれる複数の作業ブロック情報１２０との全ての組合せにおいて行われる。ステップｓ４４において、重複していると判定した場合にはステップｓ４５に進み、重複していないと判定した場合にはステップｓ４６に進む。
【０１５３】
ステップｓ４５にて、複数台対応干渉チェック部５７は、ステップｓ４２で取得した同期ブロック情報群の各作業ブロック情報１２０にマークを設定する。同様に、複数台対応干渉チェック部５７は、ステップｓ４３で取得した同期ブロック情報群の各作業ブロック情報１２０にマークを設定する。
【０１５４】
ステップｓ４６にて、複数台対応干渉チェック部５７は、干渉チェックすべき次の同期ブロック情報群があるかを判定する。ステップｓ４６において、次の同期ブロック情報群があると判定した場合にはステップｓ４２に戻り、次の同期ブロック情報群がないと判定した場合にはステップｓ４７に進む。
【０１５５】
ステップｓ４７にて、複数台対応干渉チェック部５７は、マークが設定された作業ブロック情報１２０を表示するとともに、干渉している旨の警告を表示する。この警告表示は、ダイアログボックスを出して表示してもよいし、特定のウィンドウに表示してもよい。また、その際にログファイルに書き込むようにしてもよい。
【０１５６】
以上のようなプログラム作成・教示装置３によれば、複数台対応干渉チェック部５７が、複数のロボット１の可動範囲が互いに重なるかを判定する。したがって、複数のロボット１を実際に動作させて確認する作業を省くことができるため、時間を短縮することができるとともに、ロボット１同士が衝突して故障するのを事前に防ぐことができる。また、本実施の形態に係るプログラム作成・教示装置３は、実施の形態３に係るプログラム作成・教示装置３と同様の構成を備えるため、それと同じ効果を得ることができる。
【符号の説明】
【０１５７】
１  ロボット、３  プログラム作成・教示装置、１１  ハンド、１２  部品、１３  供給装置、１４  治具、１５  ワーク、４１  作業ブロック定義部、４２  工程フロー編集部、４３  制御プログラム生成部、４４  ロボットシミュレータ部、４５  作業ブロック絞込部、４６  パーツ絞込部、５７  複数台対応干渉チェック部、１１０  作業ブロックテンプレート、１１３  事前条件、１１４  事後条件、１２０  作業ブロック情報、１２２  内部状態情報、１８２  パーツ。
【図１】
2011238041.tif 000016
【図２】
2011238041.tif 000017
【図３】
2011238041.tif 000018
【図４】
2011238041.tif 000019
【図５】
2011238041.tif 000020
【図６】
2011238041.tif 000021
【図７】
2011238041.tif 000022
【図８】
2011238041.tif 000023
【図９】
2011238041.tif 000024
【図１０】
2011238041.tif 000025
【図１１】
2011238041.tif 000026
【図１２】
2011238041.tif 000027
【図１３】
2011238041.tif 000028
【図１４】
2011238041.tif 000029
【図１５】
2011238041.tif 000030
【図１６】
2011238041.tif 000031