(57)【要約】【課題】複雑な流れを持つロボットプログラムであっても、短時間で位置データの教示が可能なプログラム作成・教示装置及び方法を得ること。【解決手段】作成したロボットプログラムを解析して、その中で使用される位置変数を抽出する工程（ステップＳ１１）と、抽出した位置変数の中から、値を教示する必要のある位置変数を教示対象変数として選出する工程(ステップＳ１２)と、ロボットプログラムの処理の流れに基づいて、教示対象変数を使用する命令が実行される順序に応じたグラフ構造で教示対象変数を配列させる工程（ステップＳ１３）と、教示対象変数の教示受付時に、グラフ構造での配列に従って教示対象変数を順次表示する工程（ステップＳ１４）とを有する。【選択図】図２
2011059801.tif 000002
【特許請求の範囲】
【請求項１】
作成したロボットプログラムを解析して、その中で使用される位置変数を抽出する抽出手段と、
抽出した位置変数の中から、値を教示する必要のある位置変数を教示対象変数として選出する手段と、
前記ロボットプログラムの処理の流れに基づいて、前記教示対象変数を使用する命令が実行される順序に応じたグラフ構造で前記教示対象変数を配列させる手段と、
前記教示対象変数の教示受付時に、前記グラフ構造での配列に従って前記教示対象変数を順次表示する表示手段とを有することを特徴とするプログラム作成・教示装置。
【請求項２】
前記抽出手段は、前記位置変数に関連づけられて前記ロボットプログラム中に記載された文字列を前記位置変数とともに抽出し、
前記表示手段は、教示時に前記文字列を前記位置変数と合わせて表示することを特徴とする請求項１記載のプログラム作成・教示装置。
【請求項３】
外部から取得した位置情報に基づいた値を前記教示対象変数に設定する手段と、
前記ロボットプログラムに従って動作するロボットを、前記教示対象変数の教示受付に先立って前記位置情報が示す位置の近傍に設定する教示開始位置へ移動させる手段とを有することを特徴とする請求項１又は２記載のプログラム作成・教示装置。
【請求項４】
前記ロボットを前記教示開始位置へ移動させるのに先立って、前記ロボットの軌跡をシミュレーション表示する手段を有することを特徴とする請求項３記載のプログラム作成・教示装置。
【請求項５】
作成したロボットプログラムを解析して、その中で使用される位置変数を抽出する工程と、
抽出した位置変数の中から、値を教示する必要のある位置変数を教示対象変数として選出する工程と、
前記ロボットプログラムの処理の流れに基づいて、前記教示対象変数を使用する命令が実行される順序に応じたグラフ構造で前記教示対象変数を配列させる工程と、
前記教示対象変数の教示受付時に、前記グラフ構造での配列に従って前記教示対象変数を順次表示する工程とを有することを特徴とするプログラム作成・教示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボットのプログラムの作成、教示を行うプログラム作成・教示装置及び方法に関する。
【背景技術】
【０００２】
ロボットを動作させるためには、ロボット言語を用いてロボットプログラムを作成し、作業を行う位置をロボットプログラム中の位置データに記憶させる教示作業が必要である。
【０００３】
従来のロボットへの教示方法は、ロボットプログラムを１行ずつ表示装置に表示して教示作業者に提示し、表示された情報を参照しつつ教示作業者が位置教示装置を操作して、位置データを登録するものであった（例えば、特許文献１参照。）。
【０００４】
また、教示作業を簡便化するために、ロボットが扱う対象物であるワークの特徴量と、予め設定したティーチングルールとからティーチング位置を算出し、ロボットの移動軌跡などの幾何学的情報に基づいて教示点を並べ替えた上で、作業者に教示させるものであった（例えば、特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平２−２５７３１１号公報
【特許文献２】特開平１０−２２２２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されるような教示方法は、ロボットプログラムの全ての行を１行ずつ表示し、教示が必要な位置データがその行に含まれているかを教示作業者自身が判断しながら教示作業を行うため、教示作業に非常に時間がかかるという問題があった。
【０００７】
また、特許文献２に開示されるような教示方法は、塗装用ロボットのように移動軌跡が比較的連続して繋がっている場合には、並び順に教示できるので教示作業に要する時間を短縮できる。しかし、組み立てロボットのように作業位置が飛び飛びに配置される場合には、幾何学的情報など形状特徴だけによる並べ替えでは、作業者が効率よく位置データを教示できず、教示作業に時間がかかるという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、複雑な流れを持つロボットプログラムであっても、短時間で位置データの教示が可能なプログラム作成・教示装置及び方法を得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、作成したロボットプログラムを解析して、その中で使用される位置変数を抽出する手段と、抽出した位置変数の中から、値を教示する必要のある位置変数を教示対象変数として選出する手段と、ロボットプログラムの処理の流れに基づいて、教示対象変数を使用する命令が実行される順序に応じたグラフ構造で教示対象変数を配列させる手段と、教示対象変数の教示受付時に、グラフ構造での配列に従って教示対象変数を順次表示する手段とを有することを特徴とする。
【発明の効果】
【００１０】
本発明は、教示作業者がロボットプログラムの教示不要な行を見る必要がなくなり、また、短時間で教示が可能となるという従来にはない顕著な効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施の形態１にかかるプログラム作成・教示装置の構成を示す図である。
【図２】図２は、実施の形態１にかかるプログラム作成・教示装置による教示手順の流れを示す図である。
【図３】図３は、実施の形態１による位置変数のグラフ構造を示す図である。
【図４】図４は、実施の形態１にかるプログラム作成・教示装置の教示時の画面の一例を示す図である。
【図５】図５は、本発明の実施の形態２にかかるプログラム作成・教示装置の構成を示す図である。
【図６】図６は、本発明の実施の形態３にかかるプログラム作成・教示装置の構成を示す図である。
【図７】図７は、実施の形態３にかかるプログラム作成・教示装置による教示手順の流れを示す図である。
【図８】図８は、本発明の実施の形態４にかかるプログラム作成・教示装置の教示時の画面の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明にかかるプログラム作成・教示装置及び方法の実施の形態を図面に基づいて詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
【００１３】
実施の形態１．
図１は、本発明にかかるプログラム作成・教示装置の実施の形態１としての構成を示す図である。ロボット１は、部品等を把持するためのハンド１１を備えており、ロボット制御装置２で実行されるロボットプログラムに従って動作する。ロボット制御装置２は、データ通信部２１、プログラム実行部２２、ロボット制御部２３及びプログラム・データ記憶部２４を備える。データ通信部２１は、プログラム作成・教示装置３と通信する。プログラム実行部２２は、ロボットプログラムを実行する。ロボット制御部２３は、ロボットを制御し、動作させる。プログラム・データ記憶部２４は、ロボット１を動作させるプログラムや位置データを記憶する。プログラム作成・教示装置３は、プログラム作成・教示部３１、データ通信部３２及び表示部３３を備える。プログラム作成・教示部３１は、ロボットプログラムの作成、位置データの教示を行う。データ通信部３２は、ロボット制御装置２と通信する。表示部３３は、プログラムやデータを表示する。
【００１４】
作業者は、プログラム作成・教示装置３を用いて、ロボットプログラムを作成、保存する。
【００１５】
ここで、以下のロボットプログラムを対象に本実施の形態での処理について説明する。
1 DEF POSE A01,A02,A03,A04,A05
2 DEF JOINT B01
3 DEF INT C01
4 INPUT #1,C01
5 INPUT #1,A01
6 P11=(0,0,100,0,0,0)
7 P01=A01+P11 '@c:"","","部品把持待避量"
8 MOVE B01 '@c:"作業待機位置"
9 MOVE P01 '@c:"部品待避位置"
10 MOVE A01 '@c:"部品把持位置"
11 OUTPUT #2,1
12 MOVE P01 '@c:"部品待避位置"
13 IF C01=1 THEN GOTO 16
14 IF C01>=2 THEN GOTO 21
15 GOTO 36
16 MOVE P02 '@c:"待避位置１"
17 MOVE A02 '@c:"組付位置１"
18 OUTPUT #2,0
19 MOVE P02 '@c:"待避位置１"
20 GOTO 40
21 MOVE P03 '@c:"待避位置２"
22 MOVE A03 '@c:"組付位置２"
23 OUTPUT #2,0
24 MOVE P03 '@c:"待避位置２"
25 IF C01=3 THEN GOTO 26 ELSE GOTO 40
26 MOVE B01 '@c:"作業待機位置"
27 MOVE P01 '@c:"部品待避位置"
28 MOVE A01 '@c:"部品把持位置"
29 OUTPUT #2,1
30 MOVE P01 '@c:"部品待避位置"
31 MOVE P04 '@c:"待避位置３"
32 MOVE A04 '@c:"組付位置３"
33 OUTPUT #2,1
34 MOVE A04 '@c:"組付位置３"
35 GOTO 40
36 MOVE B01 '@c:"作業待機位置"
37 MOVE A05 '@c:"破棄位置"
38 OUTPUT #2,1
39 GOTO 40
40 MOVE J01 '@c:"次工程待機位置"
【００１６】
まず、上記ロボットプログラムで用いられている変数について説明する。各行の先頭の数字は行番号を表している。DEFは変数の型定義のための変数宣言である。
【００１７】
１行目のDEF POSEは直交型位置変数を定義する。ここでは、A01,A02,A03,A04,A05が直交型位置変数であることを表している。直交型位置変数とは、直交座標系で表されるデータであり、（X,Y,Z,A,B,C）の形式で表現される。ここで、（X,Y,Z）は三次元直交座標系における位置、（A,B,C）は三次元の姿勢を表す。
【００１８】
２行目のDEF JOINTは、関節型位置変数を定義する。ここでは、変数B01が関節型位置変数であることを表している。関節型位置変数とは、ロボットの各関節の角度を要素として持つデータであり、垂直多関節型ロボットでは、（J1,J2,J3,J4,J5,J6）と表される。ここで、Ji（i=1,2,・・・,6）は、ロボットの関節角を表す。
【００１９】
３行目のDEF INTは、整数変数を定義する。ここでは、変数C01が整数変数であることを表している。整数変数とは整数値を格納するデータである。
【００２０】
また、このロボット言語では、暗黙の型宣言として、Pで始まる変数は直交型位置変数、Jで始まる変数は関節型位置変数と定義されているものとする。上記ロボットプログラムにおいては、変数P01、P11などは直交型位置変数、J01は関節型位置変数となる。
【００２１】
次に、命令について説明する。INPUTは、通信などによって外部から値を読み込み、変数にその値を設定する命令である。例えば、４行目の「INPUT #1,C01」では、外部の通信ポート＃１から整数値を読み込み、読み込んだ値をC01に設定する。OUTPUTは、通信などによって外部に値を送出する命令である。例えば、１１行目の「OUTPUT #2,1」では、外部の通信ポート＃２へ整数値１を送出する。MOVEは、ロボット１を動作させる命令であり、MOVEの後に書かれた位置にロボット１を動かす。例えば、９行目の「MOVE P01」では、ロボット１がP01の示す位置及び姿勢をとるように動く。GOTOは、その後に書かれた番号の行にジャンプする命令である。例えば、１５行目の「GOTO 36」では、次の処理として３６行目の処理を実行する。IFは、式を評価し、その条件判定によって以降の動作を決定する分岐命令である。例えば、１３行目の「IF C01=1 THEN GOTO 16」では、C01が整数値１に等しい場合、１６行目にジャンプする。
【００２２】
また、各行において、’（アポストロフィー）以降はコメントを表し、プログラム実行には影響しない。コメント中の「＠ｃ：」以降の””で囲まれた文字列は、後述する教示時の変数表示のときに変数名と一緒に表示される。従って、「＠ｃ：」以降に各変数の説明を記載しておくことで、教示時に教示すべき位置が明確となり、教示作業に要する時間を短縮できる。ここで、行中に複数の変数がある場合は、ロボットプログラム中に変数が書かれた順番に説明を記載する。例えば、７行目では、P01、A01の説明に対応する部分は””となっており、文字列が無いので説明無しとなり、P11の説明は「部品把持待避量」となる。
【００２３】
次に、上記ロボットプログラムの流れについて説明する。上記ロボットプログラムは、組み立て工程における部品の組付けを行うものである。まず、プログラム実行部２２は、ロボットプログラムの４行目を実行して、整数変数C01に組み立て中の製品の種別を読み込み、プログラム・データ記憶部２４に記憶させる。ここで、製品種別は、１、２、３のいずれかとする。次に、プログラム実行部２２は、ロボットプログラムの５行目を実行して、位置変数A01に部品位置を読み込み、プログラム・データ記憶部２４に記憶させる。続いて、プログラム実行部２２は、ロボットプログラムの６行目から１２行目を実行して、ロボット１に部品を部品置き場から取り出させる。ここで、P11は部品把持待避量で、部品の把持位置から部品把持後の待避位置までの移動量を表す。具体的には、プログラム実行部２２は、ロボットプログラムの６行目を実行して部品把持待避量を設定し、ロボットプログラムの７行目を実行して部品待避位置を計算する。プログラム実行部２２は、ロボットプログラムの８行目を実行することによってロボット制御部２３を介してロボット１を制御し、ロボット１を作業待機位置へ移動させる。プログラム実行部２２は、ロボットプログラムの９行目を実行することによってロボット制御部２３を介してロボット１を制御し、部品待避位置P01にハンド１１を移動させる。プログラム実行部２２は、ロボットプログラムの１０行目を実行することによってロボット制御部２３を介してロボット１を制御し、ハンド１１を部品把持位置A01へ移動させる。プログラム実行部２２は、ロボットプログラムの１１行目を実行することによってロボット制御部２３を介してロボット１を制御し、ハンド１１の開閉を操作する通信ポート＃２に整数値１を送出してハンド１１を閉じて部品を把持する。プログラム実行部２２は、ロボットプログラムの１２行目を実行することによってロボット制御部２３を介してロボット１を制御し、ハンド１１を待避位置P11へ移動させて部品を持ち上げ、部品の取り出しを完了させる。
【００２４】
次に、プログラム実行部２２は、ロボットプログラムの１３行目から１５行目を実行することで、製品種別に従って以降の作業工程を選択する。製品種別が１の場合、プログラム実行部２２は、ロボットプログラムの１６行目から１９行目を実行してロボット１に組み付け作業を行わせる。製品種別が２又は３の場合、プログラム実行部２２は、ロボットプログラムの２１行目から３４行目を実行してロボット１に組み付け作業を行わせる。なお、製品種別が０又はマイナス値の場合、プログラム実行部２２は、エラー処理としてロボットプログラムの３６行目から３８行目を実行する。
【００２５】
製品種別が１の場合の組み付け作業について説明する。プログラム実行部２２はロボットプログラムの１６行目を実行することによってロボット制御部２３を介してロボット１を制御し、ロボット１を組み付け作業の準備点である待避位置P02へ移動させる。プログラム実行部２２は、ロボットプログラムの１７行目を実行することによってロボット制御部２３を介してロボット１を制御し、組付位置A02に部品を装着させる。プログラム実行部２２は、ロボットプログラムの１８行目を実行することによってロボット制御部２３を介してロボット１を制御し、通信ポート＃２に整数値０を送出してハンド１１を開かせる。プログラム実行部２２は、ロボットプログラムの１９行目を実行することによってロボット制御部２３を介してロボット１を制御し、ロボット１を待避位置P02へ移動させて部品の装着を完了する。
【００２６】
製品種別が２の場合の組み付け作業を説明する。製品種別が１の場合と同様に、プログラム実行部２２はロボットプログラムの２１行目から２４行目を実行し、ロボット１に組み付け作業を行わせる。ここで、製品種別が１の場合とは異なり、製品種別が２又は３の場合は、組み付け作業における待避位置はP03、組付位置はA03となる。次に、プログラム実行部２２は、ロボットプログラムの２５行目を実行することによって製品種別を判断し、製品種別が３の場合はロボットプログラムの２６行目から３４行目も実行する。ロボットプログラムの２６行目から３０行目は、ロボットプログラムの８行目から１２行目の部品取り出しと同様である。ロボットプログラムの３１行目から３４行目は、製品種別が１又は２の場合の組み付け作業と同じである。ここでの組み付け作業における待避位置はP04、組付位置はA04となる。
【００２７】
製品種別が０又は負の値の場合に行うエラー処理について説明する。プログラム実行部２２は、ロボットプログラムの３６行目を実行することによってロボット制御部２３を介してロボット１を制御し、ロボット１を作業待機位置へ移動させる。プログラム実行部２２は、ロボットプログラムの３７行目を実行することによりロボット制御部２３を介してロボット１を制御しロボット１を破棄位置A05へ移動させる。これは、取り出した部品を次工程に持ち越さないように破棄するためである。プログラム実行部２２は、ロボットプログラムの３８行目を実行することによってロボット制御部２３を介してロボット１を制御し、ハンド１１を開いて部品を破棄させる。最終的には、プログラム実行部２２は、ロボットプログラムの４０行目を実行することによってロボット制御部２３を介してロボット１を制御し、ロボット１を次工程待機位置へ移動させる。
【００２８】
図２に、プログラム作成・教示部３１において実行されるロボットプログラムの位置データを教示する手順のフローチャートを示す。図２に基づいて、ロボットプログラムの位置変数を教示する手順について説明する。
【００２９】
まず、プログラム作成・教示部３１は、ロボットプログラムの変数宣言及びロボットプログラム中で使用された暗黙の型宣言から位置変数を抽出する（ステップＳ１１）。ここでは、ロボットプログラムの構文解析を行い、位置変数を抽出する。上記ロボットプログラムでは、変数A01、A02、A03、A04、A05、B01、P01、P02、P03、P04、P11、J01が位置変数として抽出される。ここで、C01は整数変数として宣言されているため、抽出対象から外す。
【００３０】
次に、プログラム作成・教示部３１は、抽出した変数の一覧から、数式によって代入されている変数を削除する。これは、数式によって代入される位置変数は教示する必要がないためである。また、外部から値が設定される位置変数についても、同様に教示する必要がないため、プログラム作成・教示部３１は、一覧から削除する（ステップＳ１２）。上記ロボットプログラムにおいては、P11が６行目、P01が７行目で数式によって代入されているため、一覧から削除する。また、上記ロボットプログラムでは５行目のINPUT文によって値が設定されているため、A01を一覧から削除する。削除の結果、残る位置変数はA02、A03、A04、A05、B01、P02、P03、P04、J01となる。
【００３１】
そして、プログラム作成・教示部３１は、残った位置変数をロボットプログラムの実行順に並べ替える（ステップＳ１３）。ここで、ロボットプログラムが分岐処理を含むため、グラフ構造を用いて位置変数を並べる。上記ロボットプログラムには、１３、１４、２５行目にIF文があり、条件によって分岐が発生する。また、１５、２０、３５、３９行目にGOTO文があり、処理のジャンプが発生する。
【００３２】
図３に、ロボットプログラムの処理分岐に従って位置変数の初出位置をグラフ構造化した状態を示す。上記ロボットプログラムでは処理分岐により処理の流れが４通りとなる。ここで、１番目の処理の流れは製品種別が１の場合を示しており、B01→P02→A02→J01の順に位置変数が使用される。２番目の処理の流れは製品種別が２の場合を示しており、B01→P03→A03→J01の順に位置変数が使用される。３番目の処理の流れは製品種別が３の場合を示しており、B01→P03→A03→P04→A04→J01の順に位置変数が使用される。４番目の処理の流れは製品種別が０以下の場合のエラー処理を示しており、B01→A05→J01の順に位置変数が使用される。
【００３３】
その後、プログラム作成・教示部３１は、ステップＳ１３で並べた位置変数を、グラフ構造に基づいて処理の流れの順に選択し、表示部３３に一覧表示する（ステップＳ１４）。図４に、表示部３３における表示画面の一例を示す。図４は、グラフ構造の１番目の処理の流れを示している。教示すべき位置変数の一覧が表示され、現在教示中の位置変数が三角形のマーカーによって示されている。位置変数名の右側には、ロボットプログラム中に記載した位置変数に関する説明（””で囲まれた文字列）が表示される。なお、ステップＳ１４では、プログラム作成・教示部３１は、ステップＳ１３でグラフ構造化した他の処理の流れについても順次表示して教示者に教示作業を行わせる。すなわち、上記ロボットプログラムの例では、プログラム作成・教示部３１は、計４回教示画面を表示部３３に表示し、教示を必要とする全ての位置変数について、教示者に教示を行わせる。
【００３４】
ここで、既に教示済みの点（位置変数）については、再度教示する必要はない。例えば、上記のロボットプログラムでは、位置変数B01やJ01は全ての処理の流れにおいても使用されるが、１番目の処理の流れに沿って教示したならば、２〜４番目の処理の流れに即して再度教示する必要はない。このため、プログラム作成・教示部３１は、教示済みの点については教示作業の対象から外し、教示すべき点とは異なる表示をする（文字をグレーに変更する、ボックスの色を変えるなど）ようにしても良い。
【００３５】
逆に、教示済みの点について再教示することも可能である。これは、ロボットの姿勢や部品の重さによってたわみが発生したり、内部のギヤのバックラッシュなどの原因で僅かに位置がずれる可能性があり、同一のロボットプログラムでも処理の流れによって教示データを変更することがあるためである。よって、処理の流れごとに教示データを保持することで、組み立て時の僅かなずれによる作業エラーの発生を低減できる。再教示可能とする場合には、各教示点に対して１個のデータ領域ではなく、各処理の流れごとにデータを保持できるように複数個のエリアを持たせることで処理を行う。
【００３６】
なお、図１においては、プログラム作成・教示部３１がプログラム作成・教示装置３にある構成としたが、これがロボット制御装置２内に存在する構成や、プログラム作成・教示装置３とロボット制御装置２とが一体となった構成でも同様の効果が得られることはいうまでも無い。
【００３７】
さらに、図３においては、各処理の流れにおいて、一度グラフ構造上に現れた位置変数をグラフ構造から除外した（同じ処理の流れの中に同一の位置変数が重複して出現しないように初出位置をグラフ構造化した）が、組み立ての手順と完全に一致させるために、出現済みの位置変数を除外せずに、ロボットプログラム上で使用される順番に全ての位置変数をグラフ構造に格納し、表示しても良い。
【００３８】
またさらに、図４においては、位置変数を一覧表示し、教示するデータを三角形のマーカーで指示する例を示したが、三角形のマーカーで指示する代わりに、該当する行に色を付けたり、一覧表示ではなく教示すべき位置変数だけを順次表示しても同様の効果が得られる。
【００３９】
本実施の形態においては、ロボットプログラム中の教示不要な行や変数を教示作業者が自身で見分ける必要がなく、また、組み立て手順に沿ったロボットの動作順に教示位置が表示されるため、教示作業に要する時間を短縮できる。また、ロボットプログラムの作成時に、教示すべき位置変数の説明をロボットプログラム内に記述しておくだけで、教示作業の際に説明が表示される。このため、ロボットプログラムの処理の内容が理解しやすくなるとともに、教示時にどのような位置を教示すればよいか明確になり、教示作業に要する時間の短縮を図れる。教示作業時にロボットやプログラム作成・教示装置を稼働する時間が短縮されることにより省エネルギー化を実現でき、ひいては、生産設備としてのロボット自体が環境に与える負荷を低減できる。
【００４０】
さらに、処理の流れごとに組み立て誤差が発生する場合でも、ロボットプログラム自体を変更することなく処理の流れごとに教示点を保持できるため、組み立て作業時のエラー発生を低減できる。
【００４１】
実施の形態２．
図５は、本発明にかかるプログラム作成・教示装置の実施の形態２としての構成を示す図である。プログラム作成・教示装置３は、プログラム作成・教示部３１、表示部３３、ロボットシミュレーション部３４及びデータ記憶部３５を有する。プログラム作成・教示部３１は実施の形態１と同様である。表示部３３は、ロボットのモデルやロボットプログラム、位置データを表示する。ロボットシミュレーション部３４は、ロボットの動作をシミュレーションする。データ記憶部３５は、プログラムや位置データを記憶する。本実施の形態において、プログラム作成・教示装置３は、パーソナルコンピュータやワークステーションなどのコンピュータ上にソフトウェア処理によって実現される。
【００４２】
プログラム作成・教示部３１の処理内容は、実施の形態１と同様であるが、位置データを教示する際にロボット実機を用いるのではなく、コンピュータの画面上（表示部３３）に表示されたロボットモデルを用いて行う。また、データ記憶部３５は、実施の形態１のロボット制御装置２のプログラム・データ記憶部２４と同等の機能を持つが、データ記憶部３５はロボットを実際には動作させないオフライン状態のみで使用する。また、ロボットシミュレーション部３４は、ロボットモデルを用いてロボットの動きを模擬するものであり、ロボットプログラムを実行し、ハンド１１の座標データ、ロボットの各軸の角度データなどを取得することができる。ロボットシミュレーション部３４は、ロボットだけでなく、ロボットの周囲の物体も定義することができる。例えば、架台、作業対象物であるワーク、ワークを保持する冶具、ワークに取り付ける部品、部品を保持する部品台などである。また、表示部３３は、実施の形態１と同様であるが、ロボットシミュレータの三次元データ（三次元画像）を表示することができる。表示部３３は、三次元画像の表示画面において、三次元上の座標位置を指定することが可能である。
【００４３】
実施の形態２における教示作業の手順について説明する。まず、ロボットシミュレーション部３４において、ロボットの周囲の物体を定義する。このロボットの周囲の物体の定義は、３Ｄ−ＣＡＤを用いたり、物体の頂点データを入力したりしてもよい。次に、実施の形態１と同様に、図２のステップＳ１１、ステップＳ１２、ステップＳ１３で命令の実行順にグラフ構造で変数を並べる。次に、ステップＳ１４では、表示部３３で、先に定義したロボット及びロボットの周囲の物体である架台、ワーク、冶具などを三次元画像で表示する。教示作業者は、部品の把持、部品の組み付けに使用する三次元の座標を表示部３３の画面上で指定する。ロボットシミュレーション部３４は、指定された三次元座標に基づき、ロボットの各軸の角度を計算し、ロボットモデルを指定した位置に動かして画面表示する。これによって、ロボットの位置及び姿勢が正しいか否かを判断できる。
【００４４】
ここで、三次元座標、姿勢の指定方法は表示部３３の画面上で指定する以外に、座標値を数値で入力する方法や、画面上に表示された物体を指定するなどの方法を用いることも可能であり、このようにして三次元座標や姿勢を指定した場合も同様の効果を奏する。
【００４５】
本実施の形態においては、ロボット本体が無くとも教示が可能となるため、教示作業中にロボットを周りの物体に衝突させてしまう恐れがない。また、複数の作業者で分担して同時に教示作業を行うことが可能となるため、教示作業に要する時間を短縮することが可能である。
【００４６】
実施の形態３．
図６は、本発明にかかるプログラム作成・教示装置の実施の形態３としての構成を示す図である。ロボット１は、実施の形態１と同様である。ロボット制御装置２は、実施の形態１のロボット制御装置２の構成に加え、教示作業時にロボット制御部２３に指令を出す移動指示実行部２６と、移動指示実行部２６とプログラム作成・教示装置３との間で通信を行うためのデータ通信部２５とを有する。また、プログラム作成・教示装置３は、実施の形態１や実施の形態２のプログラム作成・教示装置３の構成に加え、移動指示部３６と、移動指示部３６とロボット制御装置２との間で通信を行うためのデータ通信部３７とを有し、これらはパーソナルコンピュータやワークステーションなどのコンピュータ上に実現される。
【００４７】
プログラム作成・教示装置３の処理において、ロボットシミュレーション部３４を使用してデータ記憶部３５にオフライン状態でロボットの位置を指定する処理は、実施の形態２と同様であるが、この位置指定処理後に移動指示部３６からデータ通信部３７、２５を介してロボット制御装置２に移動指示を送ることにより、移動指示実行部２６は指定した教示点近くまでロボット１を移動させる。その後、作業者が教示作業を行い、教示したデータを現物に合わせて使用する。
【００４８】
図７は、ロボットプログラムの位置データを教示する動作の手順を示すフローチャートである。この動作は、プログラム作成・教示部３１において実行される。ステップＳ１１、Ｓ１２の処理は、実施の形態１と同様である。その後、実施の形態２と同様に、ロボットシミュレーション部３４を用いてオフラインで三次元情報を教示者により設定させる（ステップＳ２１）。この際には、実施の形態２と同様に三次元座標系での座標値を指定することに加え、部品から見てロボットのハンド１１が指定位置に向けて移動してくる方向を示したアプローチベクトルも同時に指定する。例えば、上方向から下方向（つまりＺ軸の下方向）に部品を組み付ける組付作業位置の教示では、部品を組みつけられるワークの組み付け位置の三次元座標と、この組み付け位置にロボットが移動するアプローチベクトル、例えば（０，０，１００）を指定する。このアプローチベクトルは、ロボット周辺の物体の形状の面と面上の座標値とを指定することで算出することも可能である。この時は、面の法線ベクトルをアプローチベクトルの単位ベクトルとして扱い、ロボットのハンド１１と面とが衝突しない位置をベクトル長として計算する。例えば、部品把持位置の教示では、部品の三次元画像の把持する側の面の中心点を指定することで、アプローチベクトルを計算できる。
【００４９】
次に、プログラム作成・教示部３１は、ステップＳ２１で設定された三次元座標とアプローチベクトルとから教示開始点を計算する（ステップＳ２２）。ここで、教示開始点は、ロボット１を動かして教示作業を行うときに、オフラインで教示した座標の近傍までロボットを動かす点である。教示開始点は、作業位置とアプローチベクトルとを加算することによって算出する。
【００５０】
ステップＳ１３、Ｓ１４の処理は、実施の形態１と同様である。その後、移動指示部３６からロボット制御装置２に移動指示を送り、ロボット１を教示開始点まで動かして教示作業を行い、教示したデータを現物に合わせて使用する（ステップＳ２３）。
【００５１】
本実施の形態のように、教示作業時に教示開始点へロボットを動かすことで、ロボットを大きく動かすことなく教示作業を行えるため、作業に要する時間を短縮できる。また、異なる教示点を教示してしまうミスを防ぐことができる。
【００５２】
実施の形態４．
図８は、本発明にかかるプログラム作成・教示装置の実施の形態４における教示時の画面の一例を示す図である。プログラム作成・教示装置３の構成は、実施の形態３と同様であり、表示部３３は三次元表示機能を備えている。ロボットプログラムの位置データを教示する動作の手順は、ステップＳ１１、Ｓ１２、Ｓ２１、Ｓ２２、Ｓ１３、Ｓ２３については実施の形態３と同様である。ステップＳ１４において、プログラム作成・教示部３１は、表示部３３に教示点、属性情報、順序だけでなく、三次元表示で教示点の前の位置から教示点までのロボットの軌跡５２も表示させる。
【００５３】
このように、教示開始前に教示位置までのロボットの軌跡５２を事前に三次元画像として表示することで、ロボットが教示開始位置へ動く際に周りの物体と衝突しないことを事前に確認することが可能となる。これにより、ロボットを教示開始位置へ動かす際の確認動作が不要となり、教示作業に要する時間を短縮できる。
【００５４】
なお、ここではロボットの軌跡を三次元画像として表示する場合を例としたが、必ずしも三次元の画像として表示する必要はなく、ロボットの移動先が想定している場所であるか否かや、他の物体との衝突の有無を教示作業者が確認できさえすれば、二次元の画像などとして表示しても良い。
【００５５】
この他については第３の実施の形態と同様であるため、重複する説明は割愛する。
【００５６】
なお、上記各実施の形態は、本発明の好適な実施の一例であり、本発明はこれらに限定されることなく、様々な変形が可能である。
【産業上の利用可能性】
【００５７】
以上のように、本発明にかかるプログラム作成・教示装置及び方法は、ロボットを教示するのに有用であり、特に、短時間でロボットを教示するのに適している。
【符号の説明】
【００５８】
１  ロボット
２  ロボット制御装置
３  プログラム作成・教示装置
１１  ハンド
２１、２５、３２、３７  データ通信部
２２  プログラム実行部
２３  ロボット制御部
２４  プログラム・データ記憶部
２６  移動指示実行部
３１  プログラム作成・教示部
３３  表示部
３４  ロボットシミュレーション部
３５  データ記憶部
３６  移動指示部
５２  ロボットの軌跡
【図１】
2011059801.tif 000003
【図２】
2011059801.tif 000004
【図３】
2011059801.tif 000005
【図４】
2011059801.tif 000006
【図５】
2011059801.tif 000007
【図６】
2011059801.tif 000008
【図７】
2011059801.tif 000009
【図８】
2011059801.tif 000010