(57)【要約】【課題】ロボットの動作プログラムの生成に要するオペレータの作業を減らすことが求められている。【解決手段】プログラミング装置６０は、ワークモデル、ロボットモデル、及び撮像部モデルを仮想空間に配置するモデル配置部６２と、ワークの撮像対象箇所に対応するワークモデルの目的箇所を、予め定められた抽出条件に従って抽出する目的箇所抽出部６４と、目的箇所が撮像部モデルの視野内に入る撮像位置に、撮像部モデル又はワークモデルをロボットモデルによって移動するシミュレート部６６と、ロボットモデルが撮像部モデル又はワークモデルを撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、撮像部が撮像対象箇所を撮像するための動作プログラムを生成するプログラム生成部６８とを備える。【選択図】図２３
2019018250.tif 000002
【特許請求の範囲】
【請求項１】
ロボットによって撮像部又はワークを移動し、該撮像部によって該ワークを撮像する動作プログラムを生成するプログラミング装置であって、
前記ワークをモデル化したワークモデル、前記ロボットをモデル化したロボットモデル、及び前記撮像部をモデル化した撮像部モデルを仮想空間に配置するモデル配置部と、
前記ワークの撮像対象箇所に対応する前記ワークモデルの目的箇所を、予め定められた抽出条件に従って抽出する目的箇所抽出部と、
前記目的箇所抽出部が抽出した前記目的箇所を前記撮像部モデルが撮像する撮像位置に、前記撮像部モデル又は前記ワークモデルを前記ロボットモデルによって移動するシミュレート部と、
前記ロボットモデルが前記撮像部モデル又は前記ワークモデルを前記撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、前記撮像部が前記撮像対象箇所を撮像するための動作プログラムを生成するプログラム生成部と、を備える、プログラミング装置。
【請求項２】
前記抽出条件は、前記目的箇所の形状、色、又はサイズを特定する第１条件を含み、
前記目的箇所抽出部は、前記第１条件に合致する前記ワークモデルの箇所を、前記目的箇所として抽出する、請求項１に記載のプログラミング装置。
【請求項３】
前記抽出条件は、前記撮像部の撮像対象外とする前記ワークの箇所に対応する、前記ワークモデルの箇所の形状、色、又はサイズを特定する第２条件を含み、
前記目的箇所抽出部は、前記第２条件に合致する前記ワークモデルの箇所を、前記目的箇所として抽出しない、請求項２に記載のプログラミング装置。
【請求項４】
前記抽出条件の入力を受け付ける抽出条件受付部をさらに備える、請求項１〜３のいずれか１項に記載のプログラミング装置。
【請求項５】
前記撮像位置を計算する撮像位置計算部をさらに備える、請求項１〜４のいずれか１項に記載のプログラミング装置。
【請求項６】
前記撮像位置計算部は、
前記撮像部モデルの視線が、前記目的箇所の中心を通過し、
前記撮像部モデルと前記目的箇所との間の距離が、予め定められた前記撮像部の視野の高さに一致する、前記撮像部モデルと前記ワークモデルとの相対位置を、前記撮像位置として計算する、請求項５に記載のプログラミング装置。
【請求項７】
前記シミュレート部が、前記撮像部モデル又は前記ワークモデルを前記ロボットモデルによって前記撮像位置へ移動しているときに、前記撮像部の視野内に前記目的箇所が収まっているか否かを判定する判定部と、
前記判定部が、前記視野内に前記目的箇所が収まっていないと判定した場合に、該視野内に該目的箇所が収まる前記撮像部モデルと前記ワークモデルとの相対位置を検索する撮像位置検索部と、
前記撮像位置検索部が検索した前記相対位置に基づいて前記撮像位置を修正する第１の撮像位置修正部と、をさらに備え、
前記プログラム生成部は、前記ロボットモデルが前記撮像部モデル又は前記ワークモデルを、前記第１の撮像位置修正部が修正した前記撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、前記動作プログラムを生成する、請求項１〜６のいずれか１項に記載のプログラミング装置。
【請求項８】
前記モデル配置部は、少なくとも１つの環境物をモデル化した環境物モデルを前記仮想空間にさらに配置し、
前記プログラミング装置は、
前記シミュレート部が、前記撮像部モデル又は前記ワークモデルを前記ロボットモデルによって前記撮像位置へ移動しているときに、前記ロボットモデル又は前記撮像部モデルと、前記ワークモデル又は前記環境物モデルとの干渉を検出する干渉検出部と、
前記干渉検出部が前記干渉を検出した場合に、前記目的箇所が前記撮像部の視野内に収まり、且つ前記干渉が生じなくなる非干渉位置を検索する非干渉位置検索部と、
前記非干渉位置に基づいて前記撮像位置を修正する第２の撮像位置修正部と、をさらに備え、
前記プログラム生成部は、前記ロボットモデルが前記撮像部モデル又は前記ワークモデルを、前記第２の撮像位置修正部が修正した前記撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、前記動作プログラムを生成する、請求項１〜７のいずれか１項に記載のプログラミング装置。
【請求項９】
前記撮像部が前記撮像対象箇所を撮像する撮像動作の開始時点及び終了時点を設定する撮像タイミング設定部をさらに備え、
前記プログラム生成部は、前記撮像タイミング設定部が設定した前記開始時点から前記終了時点までの期間に亘って前記撮像動作を前記撮像部に実行させる前記動作プログラムを生成する、請求項１〜８のいずれか１項に記載のプログラミング装置。
【請求項１０】
前記目的箇所抽出部が抽出した複数の前記目的箇所を前記撮像部がそれぞれ撮像する複数の前記撮像位置に、前記撮像部モデル又は前記ワークモデルを前記ロボットモデルによって移動する順序を決定する順序決定部をさらに備え、
前記シミュレート部は、前記順序決定部が決定した前記順序に従って、前記撮像部モデル又は前記ワークモデルを前記複数の撮像位置にそれぞれ移動する、請求項１〜９のいずれか１項に記載のプログラミング装置。
【請求項１１】
ロボットによって撮像部又はワークを移動し、該撮像部によって該ワークを撮像する動作プログラムを生成する方法であって、
前記ワークをモデル化したワークモデル、前記ロボットをモデル化したロボットモデル、及び前記撮像部をモデル化した撮像部モデルを仮想空間に配置することと、
前記ワークの撮像対象箇所に対応する前記ワークモデルの目的箇所を、予め定められた抽出条件に従って抽出することと、
抽出した前記目的箇所を前記撮像部モデルが撮像する撮像位置に、前記撮像部モデル又は前記ワークモデルを前記ロボットモデルによって移動することと、
前記ロボットモデルが前記撮像部モデル又は前記ワークモデルを前記撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、前記撮像部が前記撮像対象箇所を撮像するための動作プログラムを生成することと、を備える、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作プログラムを生成するプログラミング装置、及びプログラム生成方法に関する。
【背景技術】
【０００２】
ロボットの動作プログラムを自動で生成する技術が知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００４−０８５１２０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ロボットによって撮像部又はワークを移動し、該撮像部によって該ワークを撮像する動作プログラムを生成する場合がある。この場合において、該動作プログラムの生成に要するオペレータの作業を減らすことが求められている。
【課題を解決するための手段】
【０００５】
本開示の一態様において、ロボットによって撮像部又はワークを移動し、該撮像部によって該ワークを撮像する動作プログラムを生成するプログラミング装置は、ワークをモデル化したワークモデル、ロボットをモデル化したロボットモデル、及び撮像部をモデル化した撮像部モデルを仮想空間に配置するモデル配置部と、ワークの撮像対象箇所に対応するワークモデルの目的箇所を、予め定められた抽出条件に従って抽出する目的箇所抽出部と、目的箇所抽出部が抽出した目的箇所を撮像部モデルが撮像する撮像位置に、撮像部モデル又はワークモデルをロボットモデルによって移動するシミュレート部と、ロボットモデルが撮像部モデル又はワークモデルを撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、撮像部が撮像対象箇所を撮像するための動作プログラムを生成するプログラム生成部とを備える。
【０００６】
本開示の他の態様において、ロボットによって撮像部又はワークを移動し、該撮像部によって該ワークを撮像する動作プログラムを生成する方法は、ワークをモデル化したワークモデル、ロボットをモデル化したロボットモデル、及び撮像部をモデル化した撮像部モデルを仮想空間に配置することと、ワークの撮像対象箇所に対応するワークモデルの目的箇所を、予め定められた抽出条件に従って抽出することと、抽出した目的箇所を撮像部モデルが撮像する撮像位置に、撮像部モデル又はワークモデルをロボットモデルによって移動するシミュレート部と、ロボットモデルが撮像部モデル又はワークモデルを撮像位置に位置決めしたときの該ロボットモデルの位置データに基づいて、撮像部が撮像対象箇所を撮像するための動作プログラムを生成することとを備える。
【発明の効果】
【０００７】
本開示によれば、オペレータの経験に依存することなく、ロボットシステムの一連の動作の動作プログラムの教示を実行することができるので、システムの立ち上げ作業に掛かる時間を大幅に削減できる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態に係るプログラミング装置のブロック図である。
【図２】一実施形態に係るロボットシステム及びワークを示す。
【図３】図１に示すプログラミング装置の動作フローの一例を示すフローチャートである。
【図４】図３中のステップＳ１で生成される仮想空間の一例を示す。
【図５】撮像部モデルがワークに対して第１の撮像位置に配置された状態を示す拡大図である。
【図６】図３中のステップＳ５のフローの一例を示すフローチャートである。
【図７】他の実施形態に係るプログラミング装置のブロック図である。
【図８】図７に示すプログラミング装置の動作フローの一例を示すフローチャートである。
【図９】図８中のステップＳ２２のフローの一例を示すフローチャートである。
【図１０】撮像部モデルの視野内に入る仮想画像の例を示す。
【図１１】撮像部モデルの視野内に入る仮想画像の例を示す。
【図１２】図８中のステップＳ２５のフローの一例を示すフローチャートである。
【図１３】さらに他の実施形態に係るプログラミング装置のブロック図である。
【図１４】図１３に示すプログラミング装置の動作フローの一例を示すフローチャートである。
【図１５】図１４中のステップＳ４１で生成される仮想空間の一例を示す。
【図１６】図１６中のステップＳ４２のフローの一例を示すフローチャートである。
【図１７】図１６中のステップＳ４４のフローの一例を示すフローチャートである。
【図１８】さらに他の実施形態に係るプログラミング装置のブロック図である。
【図１９】図１８に示すプログラミング装置の動作フローの一例を示すフローチャートである。
【図２０】さらに他の実施形態に係るプログラミング装置のブロック図である。
【図２１】図２０に示すプログラミング装置の動作フローの一例を示すフローチャートである。
【図２２】図２１中のステップＳ６０のフローの一例を示すフローチャートである。
【図２３】さらに他の実施形態に係るプログラミング装置のブロック図である。
【発明を実施するための形態】
【０００９】
以下、本開示の実施の形態を図面に基づいて詳細に説明する。なお、以下に説明する種々の実施形態において、同様の要素には同じ符号を付し、重複する説明を省略する。また、以下の説明においては、便宜上、ロボット座標系ＣＲのｘ軸プラス方向を右方、ｙ軸プラス方向を後方、ｚ軸プラス方向を上方として言及する。
【００１０】
図１を参照して、一実施形態に係るプログラミング装置１０について説明する。プログラミング装置１０は、プロセッサ１２、システムメモリ１４、ワークメモリ１６、入力／出力インターフェース（Ｉ／Ｏインターフェース）１８、データ入力部２０、及び表示部２２を備える。
【００１１】
プロセッサ１２は、システムメモリ１４、ワークメモリ１６、及びＩ／Ｏインターフェース１８と、バス２４を介して通信可能に接続されており、これらの要素と通信しつつ、後述する各種プロセスを実行する。
【００１２】
システムメモリ１４は、電気的に消去・記録可能な不揮発性メモリであり、例えば、ＥＥＰＲＯＭ（登録商標）等から構成される。システムメモリ１４は、後述する各種プロセスを実行するのに要する定数、変数、設定値、コンピュータプログラム等を、プログラミング装置１０の非動作時にも失われないように記録している。
【００１３】
ワークメモリ１６は、プロセッサ１２が各種プロセスを実行するのに要するデータを一時的に保管する。また、ワークメモリ１６には、システムメモリ１４に記録されている定数、変数、設定値、コンピュータプログラム等が適宜展開され、プロセッサ１２は、ワークメモリ１６に展開されたデータを、各種プロセスを実行するために利用する。
【００１４】
Ｉ／Ｏインターフェース１８は、データ入力部２０と通信可能に接続され、プロセッサ１２からの指令の下、データ入力部２０からデータを受信する。また、Ｉ／Ｏインターフェース１８は、表示部２２と通信可能に接続され、プロセッサ１２からの指令の下、表示部２２に画像データを送信する。
【００１５】
Ｉ／Ｏインターフェース１８は、例えばイーサネットポート又はＵＳＢポート等から構成され、データ入力部２０及び表示部２２と有線で通信してもよい。又は、Ｉ／Ｏインターフェース１８は、Ｗｉ−Ｆｉ等の無線ＬＡＮを介して、表示部２２及びデータ入力部２０と無線で通信してもよい。
【００１６】
データ入力部２０は、例えばキーボード、タッチパネル、又はマウスから構成され、オペレータは、データ入力部２０を操作することによって、データを入力できる。データ入力部２０は、入力されたデータを、Ｉ／Ｏインターフェース１８を介して、プロセッサ１２に送信する。
【００１７】
表示部２２は、例えばＣＲＴ、液晶ディスプレイ（ＬＣＤ）、又は有機ＥＬディスプレイから構成され、Ｉ／Ｏインターフェース１８から送信された画像データを受信し、オペレータが視認可能な画像として表示する。
【００１８】
プログラミング装置１０は、ロボット１０２によって撮像部１０４及びワーク１５０を相対的に移動し、該撮像部１０４によって該ワーク１５０を撮像する動作プログラムを生成する。
【００１９】
以下、図２を参照して、実空間におけるロボットシステム１００の一例について説明する。ロボットシステム１００は、ロボット１０２及び撮像部１０４を備える。ロボット１０２は、垂直多関節ロボットであって、ロボットベース１０６、旋回胴１０８、ロボットアーム１１０、及び手首部１１２を有する。ロボットベース１０６は、実空間の作業セルの床に固定される。
【００２０】
旋回胴１０８は、ロボットベース１０６に鉛直軸周りに回動可能に設けられる。ロボットアーム１１０は、旋回胴１０８に回動可能に連結された上腕部１１６と、該上腕部１１６の先端に回動可能に連結された下腕部１１８とを有する。手首部１１２は、下腕部１１８の先端に連結され、撮像部１０４を回動可能に支持する。
【００２１】
ロボット１０２に対して、ロボット座標系ＣＲが設定される。ロボット１０２は、該ロボット座標系ＣＲを基準として、ロボット１０２の各可動要素（すなわち、旋回胴１０８、上腕部１１６、下腕部１１８、手首部１１２）を動作させる。例えば、ロボット座標系ＣＲのｚ軸は、実空間の鉛直方向に平行に配置され、旋回胴１０８は、ロボット座標系ＣＲのｚ軸周りに回動される。
【００２２】
一方、ロボット１０２の手先部（本実施形態では、撮像部１０４）に対して、ツール座標系ＣＴが設定される。このツール座標系ＣＴは、ロボット座標系ＣＲにおける撮像部１０４の位置及び姿勢を規定する座標系である。
【００２３】
ロボット１０２は、撮像部１０４の位置及び姿勢を、ツール座標系ＣＴによって規定される位置及び姿勢に一致させるように、ロボット座標系ＣＲにおいて旋回胴１０８、ロボットアーム１１０、及び手首部１１２を動作させる。
【００２４】
撮像部１０４は、手首部１１２の先端に連結されている。撮像部１０４は、例えば視覚センサであって、ＣＣＤ又はＣＭＯＳ等の撮像センサと、フォーカスレンズ等の光学系とを有する。撮像部１０４は、ワーク１５０等の物体を撮像し、該ワーク１５０の画像を取得する。
【００２５】
撮像部１０４に対して、センサ座標系ＣＳが設定される。例えば、センサ座標系ＣＳのｚ軸方向は、撮像部１０４の視線の方向と一致するように、設定される。撮像部１０４の視線とは、撮像部１０４の光学系に入射する光の光軸に一致する。
【００２６】
本実施形態においては、ツール座標系ＣＴとセンサ座標系ＣＳとは、既知である所定の位置関係となっている。具体的には、ツール座標系ＣＴのｘ−ｙ平面と、センサ座標系ＣＳのｘ−ｙ平面とが、互いに平行になっている。
【００２７】
ロボットシステム１００は、ワーク１５０の複数の箇所を、撮像部１０４によってそれぞれ撮像する。図２に示す例においては、ワーク１５０は、本体部１５２と、該本体部１５２から突出するように設けられた複数の部材１５４、１５６、１５８、１６０、１６２、１６４、及び１６６とを有する。
【００２８】
より具体的には、本体部１５２は、上端面１６８と、該上端面１６８と直交し、該上端面１６８から下方へ延在する後端面１７０及び右端面１７２を有する。部材１５４、１５６及び１５８は、上端面１６８から上方へ突出している。部材１６０及び１６２は、後端面１７０から後方へ突出している。部材１６４及び１６６は、右端面１７２から右方へ突出している。
【００２９】
以下、オペレータが、複数の部材１５４、１５６、１５８、１６０、１６２、１６４、及び１６６のうち、部材１５４、１５６、１５８及び１６０のみを、撮像部１０４の撮像対象箇所とする場合について説明する。
【００３０】
ロボット１０２は、部材１５４、１５６、１５８及び１６０を、撮像部１０４によって、所定の順序で撮像する。一例として、ロボット１０２は、撮像部１０４を移動させて、該撮像部１０４をワーク１５０に対して第１の撮像位置に位置決めする。
【００３１】
撮像部１０４がワーク１５０に対して第１の撮像位置に配置されたとき、部材１５４が撮像部１０４の視野内に入り、該部材１５４を該撮像部１０４によって撮像可能となる。そして、撮像部１０４は、部材１５４を撮像する。
【００３２】
次いで、ロボット１０２は、撮像部１０４を移動させて、該撮像部１０４をワーク１５０に対して第２の撮像位置に位置決めする。撮像部１０４がワーク１５０に対して第２の撮像位置に配置されたとき、部材１５６が撮像部１０４の視野内に入り、該部材１５６を該撮像部１０４によって撮像可能となる。そして、撮像部１０４は、部材１５６を撮像する。
【００３３】
次いで、ロボット１０２は、撮像部１０４を移動させて、該撮像部１０４をワーク１５０に対して第３の撮像位置に位置決めする。撮像部１０４がワーク１５０に対して第３の撮像位置に配置されたとき、部材１５８が撮像部１０４の視野内に入り、該部材１５８を該撮像部１０４によって撮像可能となる。そして、撮像部１０４は、部材１５８を撮像する。
【００３４】
次いで、ロボット１０２は、撮像部１０４を移動させて、該撮像部１０４をワーク１５０に対して第４の撮像位置に位置決めする。撮像部１０４がワーク１５０に対して第４の撮像位置に配置されたとき、部材１６０が撮像部１０４の視野内に入り、該部材１６０を該撮像部１０４によって撮像可能となる。そして、撮像部１０４は、部材１６０を撮像する。
【００３５】
こうして、ロボットシステム１００は、ロボット１０２によって撮像部１０４を順次移動し、該撮像部１０４によって撮像対象箇所の部材１５４、１５６、１５８及び１６０を順次撮像する一連の動作を実行する。
【００３６】
本実施形態に係るプログラミング装置１０は、このようなロボットシステム１００の一連の動作の動作プログラムを生成する。以下、図３を参照して、プログラミング装置１０の機能の一例について説明する。図３に示すフローは、プログラミング装置１０が起動されたときに、開始する。
【００３７】
ステップＳ１において、プロセッサ１２は、ワークモデル１５０Ｍ、ロボットモデル１０２Ｍ、及び撮像部モデル１０４Ｍを仮想空間２００に配置する。このときの仮想空間２００の一例を図４に示す。
【００３８】
なお、本稿においては、実空間における構成要素の名称が「ＸＸ」であった場合、その構成要素の仮想空間２００におけるモデルを「ＸＸモデル」として言及する。例えば、実空間における「ロボットベース」のモデルは、「ロボットベースモデル」として言及される。また、本実施形態においては、「ＸＸモデル」は、いずれも３次元モデルである。
【００３９】
プロセッサ１２は、オペレータの入力操作に応じて、仮想空間２００においてロボットモデル１０２Ｍを配置する。ロボットモデル１０２Ｍは、図２に示すロボット１０２をモデル化した３次元コンピュータグラフィックス（ＣＧ）であって、ロボットベースモデル１０６Ｍ、旋回胴モデル１０８Ｍ、ロボットアームモデル１１０Ｍ、及び手首部モデル１１２Ｍを有する。
【００４０】
一例として、システムメモリ１４は、ロボットモデル１０２Ｍを含む、複数種類のロボットモデルを、予め記憶する。プロセッサ１２は、システムメモリ１４に記憶された複数種類のロボットモデルをリストの形態で表した画像データを生成し、表示部２２に表示させる。オペレータは、データ入力部２０を操作して、表示部２２に表示されたリストの中から、所望のロボットモデルを選択する。
【００４１】
オペレータが、図４に示すロボットモデル１０２Ｍを選択すると、データ入力部２０は、オペレータが入力した入力データを、Ｉ／Ｏインターフェース１８を介して、プロセッサ１２に送信する。
【００４２】
プロセッサ１２は、受信した入力データに応じて、システムメモリ１４に記憶された複数種類のロボットモデルの中から、ロボットモデル１０２Ｍを読み出し、仮想空間２００に配置する。次いで、プロセッサ１２は、ロボットモデル１０２Ｍに対して、図２と同様の位置に、ロボット座標系ＣＲ及びツール座標系ＣＴを設定する。
【００４３】
同様にして、プロセッサ１２は、オペレータの入力操作に応じて、仮想空間２００において撮像部モデル１０４Ｍを配置する。撮像部モデル１０４Ｍは、図２に示す撮像部１０４をモデル化した３次元ＣＧである。
【００４４】
一例として、システムメモリ１４は、撮像部モデル１０４Ｍを含む、複数種類の撮像部モデルを、予め記憶する。プロセッサ１２は、システムメモリ１４に記憶された複数種類の撮像部モデルをリストの形態で表した画像データを生成し、表示部２２に表示させる。オペレータは、データ入力部２０を操作して、表示部２２に表示されたリストの中から、所望の撮像部モデルを選択する。
【００４５】
オペレータが、図４に示す撮像部モデル１０４Ｍを選択すると、プロセッサ１２は、Ｉ／Ｏインターフェース１８を介してデータ入力部２０から受信した入力データに応じて、システムメモリ１４に記憶された複数種類の撮像部モデルの中から、撮像部モデル１０４Ｍを読み出し、仮想空間２００に配置する。
【００４６】
このとき、プロセッサ１２は、撮像部モデル１０４Ｍを、実機の撮像部１０４の取付位置に対応するように、手首部モデル１１２Ｍの先端に配置する。次いで、プロセッサ１２は、撮像部モデル１０４Ｍに対してセンサ座標系ＣＳを図２と同様に設定する。
【００４７】
同様にして、プロセッサ１２は、オペレータの入力操作に応じて、仮想空間２００においてワークモデル１５０Ｍを配置する。一例として、システムメモリ１４は、ワークモデル１５０Ｍを含む、複数種類のワークモデルを、予め記憶する。
【００４８】
そして、プロセッサ１２は、システムメモリ１４に記憶された複数種類のワークモデルをリストの形態で表した画像データを生成し、表示部２２に表示させる。オペレータは、データ入力部２０を操作して、表示部２２に表示されたリストの中から、所望のワークモデルを選択する。
【００４９】
オペレータが、図４に示すワークモデル１５０Ｍを選択すると、プロセッサ１２は、Ｉ／Ｏインターフェース１８を介してデータ入力部２０から受信した入力データに応じて、システムメモリ１４に記憶された複数種類のワークモデルの中から、ワークモデル１５０Ｍを読み出し、仮想空間２００に配置する。
【００５０】
ワークモデル１５０Ｍは、図２に示すワーク１５０をモデル化した３次元ＣＧであって、本体部モデル１５２Ｍと、複数の部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ、１６２Ｍ、１６４Ｍ、及び１６６Ｍとを有する。
【００５１】
次いで、プロセッサ１２は、ワークモデル１５０Ｍに対してワーク座標系ＣＷを設定する。図４に示す例では、ワーク座標系ＣＷは、その原点が本体部モデル１５２Ｍの上端面モデル１６８Ｍの左後方の角に位置し、そのｘ−ｙ平面が上端面モデル１６８Ｍと平行となり、そのｘ−ｚ平面が後端面モデル１７０Ｍと平行になり、且つ、そのｙ−ｚ平面が右端面モデル１７２Ｍと平行になるように、設定されている。
【００５２】
図４に示す例においては、部材モデル１５４Ｍ、１５６Ｍ、及び１６４Ｍは、円形の外形を有し、部材モデル１５８Ｍ、１６０Ｍ、及び１６６Ｍは、四角形の外形を有し、部材モデル１６２Ｍは、三角形の外形を有している。
【００５３】
また、部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ、１６２Ｍ、１６４Ｍ、及び１６６Ｍのサイズが以下のように設定されている。すなわち、部材モデル１５４Ｍ及び１５６Ｍのサイズは「１００」であり、部材モデル１５８Ｍ及び１６６Ｍのサイズは「３００」であり、部材モデル１６０Ｍのサイズは「１５０」であり、部材モデル１６２Ｍのサイズは「８０」であり、部材モデル１６４Ｍのサイズは「２０」である。このサイズの単位は、例えば、ｍ、ｍ２、又はｍ３であり得る。
【００５４】
また、部材モデル１６６Ｍは、本体部モデル１５２Ｍ、部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ、１６２Ｍ、及び１６４Ｍとは異なる色（すなわち、黒色）に色付けされている。オペレータは、データ入力部２０を操作して、ワークモデル１５０Ｍの任意の箇所を、部材モデル１６６Ｍのように色付けできる。
【００５５】
こうして、図４に示すように、ロボットモデル１０２Ｍ及び撮像部モデル１０４Ｍを有するロボットシステムモデル１００Ｍと、ワークモデル１５０Ｍとが、仮想空間２００内に配置される。
【００５６】
このように、本実施形態においては、プロセッサ１２は、ワークモデル１５０Ｍ、ロボットモデル１０２Ｍ、及び撮像部モデル１０４Ｍを仮想空間２００に配置するモデル配置部２６（図１）として機能する。プロセッサ１２は、仮想空間２００を画像データとして生成し、図４に示すような仮想空間２００の画像として、表示部２２に表示させる。
【００５７】
ステップＳ２において、プロセッサ１２は、抽出条件を受け付ける。この抽出条件は、後述するステップＳ３でワークモデル１５０Ｍから目的箇所を抽出するときに、抽出すべき箇所を特定するための条件である。
【００５８】
ここで、本稿における「目的箇所」とは、実空間で撮像部１０４の撮像対象とするワーク１５０の撮像対象箇所（すなわち、部材１５４、１５６、１５８及び１６０）に対応する、ワークモデル１５０Ｍの箇所（すなわち、部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ及び１６０Ｍ）を示す。
【００５９】
本実施形態においては、抽出条件は、目的箇所の形状、色、及びサイズを特定する第１条件を含む。一例として、プロセッサ１２は、目的箇所とする「形状」、「色」、及び「サイズ」に対応する欄が示された画像データを生成し、表示部２２に表示させる。
【００６０】
オペレータは、データ入力部２０を操作して、「形状」の欄に、例えば「丸形」、「三角形」、又は「四角形」というように、後述のステップＳ３で抽出したい目的箇所の形状を入力する。
【００６１】
また、オペレータは、データ入力部２０を操作して、「色」の欄に、例えば「白色」、「黒色」、又は「青色」というように、ステップＳ３で抽出したい目的箇所の色を入力する。
【００６２】
また、オペレータは、データ入力部２０を操作して、「サイズ」の欄に、例えば「１００〜２００」というように、ステップＳ３で抽出したい目的箇所のサイズの範囲を入力する。こうして、オペレータは、抽出したいワークモデル１５０Ｍ上の目的箇所を特定する第１条件を入力することができる。
【００６３】
また、本実施形態においては、抽出条件は、実空間で撮像部１０４の撮像対象外とするワーク１５０の箇所に対応する、ワークモデル１５０Ｍの箇所の形状、色、又はサイズを特定する第２条件を含む。
【００６４】
一例として、プロセッサ１２は、対象外とすべき「形状」、「色」、及び「サイズ」に対応する欄が示された画像データを生成し、表示部２２に表示させる。オペレータは、データ入力部２０を操作して、「形状」の欄に、例えば「丸形」、「三角形」、又は「四角形」というように、後述のステップＳ３で抽出対象外とする箇所の形状を入力する。
【００６５】
また、オペレータは、データ入力部２０を操作して、「色」の欄に、例えば「白色」、「黒色」、又は「青色」というように、ステップＳ３で抽出対象外とする箇所の色を入力する。
【００６６】
また、オペレータは、データ入力部２０を操作して、「サイズ」の欄に、例えば「５００〜６００」というように、ステップＳ３で抽出対象外とする箇所のサイズの範囲を入力する。こうして、オペレータは、抽出対象外とするワークモデル１５０Ｍ上の箇所を特定する第２条件を入力することができる。
【００６７】
以下、オペレータが、抽出条件の第１条件として、「形状」の欄に「丸形」と「四角形」を入力し、「サイズ」の欄に「９０〜３５０」と入力する一方、抽出条件の第２条件として、「色」の欄に「黒色」を入力した場合について説明する。
【００６８】
データ入力部２０は、オペレータから抽出条件の入力を受け付けて、Ｉ／Ｏインターフェース１８を介して、プロセッサ１２に送信する。プロセッサ１２は、受信した抽出条件をシステムメモリ１４に記憶する。このように、本実施形態は、データ入力部２０は、抽出条件の入力を受け付ける抽出条件受付部２８（図１）として機能する。
【００６９】
ステップＳ３において、プロセッサ１２は、ステップＳ２で受け付けた抽出条件に従って目的箇所を抽出する。具体的には、プロセッサ１２は、ステップＳ２で受け付けた抽出条件に含まれる第１条件（すなわち、「形状」＝「丸形」及び「四角形」、「サイズ」＝「９０〜３５０」）を参照し、該第１条件に合致するワークモデル１５０Ｍの箇所を、目的箇所として抽出する。
【００７０】
図４に示すワークモデル１５０Ｍにおいて、形状が「丸形」であるのは、部材モデル１５４Ｍ、１５６Ｍ及びであり、また、形状が「四角形」である箇所は、１５８Ｍ、１６０Ｍ、及び１６６Ｍである。また、ワークモデル１５０Ｍにおいて、サイズが「９０〜３５０」である箇所は、部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ、及び１６６Ｍである。
【００７１】
したがって、抽出条件の第１条件に合致しているワークモデル１５０Ｍの箇所は、部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ、及び１６６Ｍとなる。
【００７２】
一方、プロセッサ１２は、ステップＳ２で受け付けた抽出条件に含まれる第２条件（すなわち、「色」＝「黒色」）を参照し、該第２条件に合致するワークモデル１５０Ｍの箇所を、目的箇所として抽出しない。
【００７３】
図４に示す例においては、部材モデル１６６Ｍが、オペレータによって黒色に色付けされている。したがって、プロセッサ１２は、該部材モデル１６６Ｍを、目的箇所から除外する。
【００７４】
その結果、プロセッサ１２は、ワークモデル１５０Ｍの部材モデル１５４Ｍ、１５６Ｍ、１５８Ｍ、及び１６０Ｍを、目的箇所として抽出する。プロセッサ１２は、抽出条件と、ワークモデル１５０Ｍの図面データ（例えば、３ＤＣＡＤデータ）とを照らし合わせて、ワークモデル１５０Ｍから抽出条件に合致する目的箇所を抽出できる。
【００７５】
このように、本実施形態においては、プロセッサ１２は、抽出条件に従って目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、及び１６０Ｍを抽出する目的箇所抽出部３０（図１）として機能する。
【００７６】
ステップＳ４において、プロセッサ１２は、撮像位置を計算する。具体的には、プロセッサ１２は、目的箇所１５４が撮像部モデル１０４Ｍの視野内に入る、ワークモデル１５０Ｍに対する撮像部モデル１０４Ｍの位置を、第１の撮像位置として計算する。
【００７７】
実機の撮像部１０４は、撮像可能な範囲を示す視野と、該視野の高さとを有する。図５に、撮像部１０４の視野に対応する、撮像部モデル１０４Ｍの視野Ａを示す。撮像部モデル１０４Ｍの視野Ａのサイズと視野高さＢとは、実機の撮像部１０４の撮像センサの画素数及び光学系の仕様等によって、定められ得る。
【００７８】
又は、オペレータが、撮像部モデル１０４Ｍの視野Ａのサイズと視野高さＢとを、データ入力部２０を操作して、予め指定してもよい。本実施形態においては、視野高さＢは、視野Ａの中心と、撮像座標系ＣＳの原点との距離に一致する。
【００７９】
プロセッサ１２は、第１の撮像位置として、図５に示すワークモデル１５０Ｍと撮像部モデル１０４Ｍとの相対位置を算出する。ワークモデル１５０Ｍと撮像部モデル１０４Ｍとが図５に示す第１の撮像位置に配置されているとき、撮像部モデル１０４Ｍの視線Ｏ（すなわち、センサ座標系のｚ軸）が、目的箇所１５４Ｍの中心Ｃ１を通過する。
【００８０】
また、視線Ｏの方向における撮像部モデル１０４Ｍと目的箇所１５４Ｍとの間の距離が、視野高さＢに一致する。また、センサ座標系ＣＳのｘ−ｙ平面（すなわち、ツール座標系ＣＴのｘ−ｙ平面）と、ワーク座標系のｘ−ｙ平面とが、互いに平行になっている。
【００８１】
プロセッサ１２は、ロボット座標系ＣＲにおけるワーク座標系Ｃｗの位置と、ワーク座標系Ｃｗにおける中心Ｃ１の位置とに基づいて、ロボット座標系ＣＲにおける中心Ｃ１の位置を算出する。そして、プロセッサ１２は、算出した中心Ｃ１の位置と視野高さＢとに基づいて、第１の撮像位置に対応するセンサ座標系ＣＳの位置及び姿勢（すなわち、原点位置及び各軸の方向）を求める。
【００８２】
同様にして、プロセッサ１２は、目的箇所１５６Ｍが撮像部モデル１０４Ｍの視野Ａ内に入る、ワークモデル１５０Ｍに対する撮像部モデル１０４Ｍの位置を、第２の撮像位置として計算する。
【００８３】
ワークモデル１５０Ｍと撮像部モデル１０４Ｍとが第２の撮像位置に配置されているとき、撮像部モデル１０４Ｍの視線Ｏが、目的箇所１５６Ｍの中心Ｃ２を通過し、視線Ｏの方向における撮像部モデル１０４Ｍと目的箇所１５６Ｍとの間の距離が、視野高さＢに一致する。また、センサ座標系ＣＳのｘ−ｙ平面と、ワーク座標系のｘ−ｙ平面とが、互いに平行になっている。
【００８４】
また、プロセッサ１２は、目的箇所１５８Ｍが撮像部モデル１０４Ｍの視野Ａ内に入る、ワークモデル１５０Ｍに対する撮像部モデル１０４Ｍの位置を、第３の撮像位置として計算する。
【００８５】
ワークモデル１５０Ｍと撮像部モデル１０４Ｍとが第３の撮像位置に配置されているとき、撮像部モデル１０４Ｍの視線Ｏが、目的箇所１５８Ｍの中心Ｃ３を通過し、視線Ｏの方向における撮像部モデル１０４Ｍと目的箇所１５８Ｍとの間の距離が、視野高さＢに一致する。また、センサ座標系ＣＳのｘ−ｙ平面と、ワーク座標系のｘ−ｙ平面とが、互いに平行になっている。
【００８６】
また、プロセッサ１２は、目的箇所１６０Ｍが撮像部モデル１０４Ｍの視野Ａ内に入る、ワークモデル１５０Ｍに対する撮像部モデル１０４Ｍの位置を、第４の撮像位置として計算する。
【００８７】
ワークモデル１５０Ｍと撮像部モデル１０４Ｍとが第４の撮像位置に配置されているとき、撮像部モデル１０４Ｍの視線Ｏが、目的箇所１６０Ｍの中心Ｃ４を通過し、視線Ｏの方向における撮像部モデル１０４Ｍと目的箇所１６０Ｍとの間の距離が、視野高さＢに一致する。また、センサ座標系ＣＳのｘ−ｙ平面と、ワーク座標系のｘ−ｚ平面とが、互いに平行になっている。
【００８８】
このようにして、プロセッサ１２は、ステップＳ３で抽出した全ての目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍに対応する第ｎの撮像位置（ｎ＝１，２，３，４）を計算し、システムメモリ１４に記憶する。したがって、本実施形態においては、プロセッサ１２は、撮像位置を計算する撮像位置計算部３２（図１）として機能する。
【００８９】
なお、オペレータは、第ｎの撮像位置の条件（すなわち、撮像部モデル１０４Ｍの視線Ｏが中心Ｃｎを通過するという条件、撮像部モデル１０４Ｍと目的箇所１５４Ｍとの間の距離が視野高さＢに一致するという条件、又は、センサ座標系ＣＳによって規定される平面と、ワーク座標系によって規定される平面とが互いに平行になっているという条件）を、データ入力部２０を操作して、予め設定してもよい。
【００９０】
ステップＳ５において、プロセッサ１２は、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作のシミュレーションを実行する。このステップＳ５について、図６を参照して説明する。ステップＳ１１において、プロセッサ１２は、撮像位置を特定する番号「ｎ」を「１」にセットする。
【００９１】
ステップＳ１２において、プロセッサ１２は、撮像部モデル１０４Ｍとワークモデル１５０Ｍとを第ｎの撮像位置に位置決めする。仮に、このステップＳ１２の開始時点でｎ＝１にセットされていたとすると、プロセッサ１２は、仮想空間２００内でロボットモデル１０２Ｍを模擬的に動作させて撮像部モデル１０４Ｍを移動させ、該撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第１の撮像位置に位置決めする。その結果、撮像部モデル１０４Ｍは、ワークモデル１５０Ｍに対して、図５に示す第１の撮像位置に位置決めされる。
【００９２】
ステップＳ１３において、プロセッサ１２は、ステップＳ１２で撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めしたときのロボットモデル１０２Ｍの第ｎの位置データを取得する。
【００９３】
一例として、プロセッサ１２は、第ｎの位置データとして、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めしたときの、ロボット座標系ＣＲにおけるツール座標系ＣＴの位置及び姿勢（すなわち、原点位置及び各軸の方向）に係るデータを取得し、システムメモリ１４に記憶する。
【００９４】
又は、プロセッサ１２は、第ｎの位置データとして、撮像部モデル１０４Ｍとワークモデル１５０Ｍとを第ｎの撮像位置に位置決めしたときの、ロボットモデル１０２Ｍの各可動要素モデル（すなわち、旋回胴モデル１０８Ｍ、上腕部モデル１１６Ｍ、下腕部モデル１１８Ｍ、手首部モデル１１２Ｍ）の回動角度を取得し、システムメモリ１４に記憶する。
【００９５】
ステップＳ１４において、プロセッサ１２は、撮像位置を特定する番号「ｎ」を、「１」だけインクリメントする（すなわち、ｎ＝ｎ＋１）。
【００９６】
ステップＳ１５において、プロセッサ１２は、撮像位置を特定する番号「ｎ」が、ｎＤよりも大きい数になったか否かを判定する。ここで、ｎＤは、ステップＳ３で抽出された目的箇所の数である。本実施形態においては、ｎＤ＝４である。
【００９７】
プロセッサ１２は、番号「ｎ」がｎＤよりも大きい（すなわち、ｎ＞ｎＤ）場合、ＹＥＳと判定し、図６に示すステップＳ５を終了し、図３に示すステップＳ６へ進む。一方、プロセッサ１２は、番号「ｎ」がｎＤ以下である（すなわち、ｎ≦ｎＤ）場合、ＮＯと判定し、ステップＳ１２へ戻る。こうして、プロセッサ１２は、ステップＳ１５でＹＥＳと判定するまで、ステップＳ１２〜Ｓ１５をループする。
【００９８】
このように、プロセッサ１２は、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作のシミュレーションを実行し、第ｎの撮像位置に位置決めしたときのロボットモデル１０２Ｍの第ｎの位置データを、それぞれ取得する。したがって、プロセッサ１２は、位置決め動作のシミュレーションを実行するシミュレート部３４（図１）として機能する。
【００９９】
再度、図３を参照して、ステップＳ６において、プロセッサ１２は、ステップＳ１３で取得した第ｎの位置データ（ｎ＝１〜４）に基づいて、ロボットシステム１００の動作プログラムを生成する。具体的には、プロセッサ１２は、第ｎの位置データを、実機のロボット１０２を位置決めすべき教示点とし、上述したような実機のロボットシステム１００の一連の動作の動作プログラムを生成する。
【０１００】
この動作プログラムは、ステップＳ５のシミュレーションにおいて撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作と同じ動作を、実機のロボット１０２に実行させる。これにより、ロボット１０２は、撮像部１０４をワーク１５０に対して第ｎの撮像位置にそれぞれ位置決めできる。
【０１０１】
また、該動作プログラムは、ロボット１０２が撮像部１０４をワーク１５０に対して第ｎの撮像位置に位置決めする毎に、撮像対象であるワーク１５０の部材１５４、１５６、１５８又は１６０を撮像する撮像動作を、撮像部１０４に実行させる。こうして、撮像対象の部材１５４、１５６、１５８及び１６０の画像を取得することができる。
【０１０２】
以上に述べたように、本実施形態においては、プロセッサ１２は、ワークモデル１５０Ｍ上の目的箇所（１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ）を自動で抽出し（ステップＳ３）、抽出した目的箇所に対する位置決め動作のシミュレーションを実行している（ステップＳ５）。
【０１０３】
そして、プロセッサ１２は、該シミュレーションにおいて第ｎの位置データを自動で取得し（ステップＳ１３）、該第ｎの位置データを用いて、実機のロボットシステム１００の動作プログラムを生成している。
【０１０４】
この構成によれば、オペレータの経験に依存することなく、ロボットシステム１００の一連の動作の動作プログラムの教示を実行することができるので、システムの立ち上げ作業に掛かる時間を大幅に削減できる。
【０１０５】
また、本実施形態においては、抽出条件は、目的箇所（１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍ）の形状、色、及びサイズを特定する第１条件を含む。この構成によれば、オペレータは、抽出すべきワークモデル１５０Ｍの箇所を、形状、色、及びサイズを指定することによって、容易に選定できる。
【０１０６】
また、本実施形態においては、抽出条件は、対象外とするワークモデル１５０Ｍの箇所の形状、色、又はサイズを特定する第２条件を含む。この構成によれば、オペレータは、抽出したくないワークモデル１５０Ｍの箇所を、形状、色、及びサイズを指定することによって、抽出対象から容易に除外できる。
【０１０７】
例えば、オペレータは、抽出したくないワークモデル１５０Ｍの箇所を、特定の色で色付けし、抽出条件の第２条件の「色」として該特定の色を指定すれば、該箇所を容易に抽出対象から除外できる。
【０１０８】
また、本実施形態においては、プログラミング装置１０は、抽出条件の入力を受け付ける抽出条件受付部２８として機能するデータ入力部２０を備えている。この構成によれば、オペレータは、抽出条件を任意に設定して入力することができるので、目的箇所を容易且つ詳細に指定することができる。
【０１０９】
また、本実施形態においては、プロセッサ１２は、第ｎの撮像位置を計算している（ステップＳ４）。この構成によれば、オペレータが第ｎの撮像位置を手動で指定することなく、該第ｎの撮像位置を自動で計算できるので、システムの立ち上げ作業に掛かる時間を効果的に削減できる。
【０１１０】
次に、図７〜図１０を参照して、プログラミング装置１０の他の機能について説明する。図７は、プログラミング装置１０の他の機能を表すブロック図である。本実施形態においては、プロセッサ１２は、さらに、判定部３８、撮像位置検索部４０、及び第１の撮像位置修正部４２として機能する。
【０１１１】
以下、図８を参照して、本実施形態に係るプログラミング装置１０の機能について、説明する。なお、図８において、図３に示すフローと同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１１２】
ステップＳ４の後、ステップＳ２１において、プロセッサ１２は、後述するステップＳ２２のシミュレーションにおいてロボットモデル１０２Ｍが撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置の各々へ移動させるときの移動経路を設定する。
【０１１３】
このステップＳ２１の技術的意味について、以下に説明する。実際の製造現場においては、サイクルタイム縮減のために、ロボット１０２によって撮像部１０４を移動させながら、該撮像部１０４によって撮像対象箇所を撮像する場合がある。このような場合、ロボット１０２によって撮像部１０４を移動させる経路を、滑らかに連続するように（すなわち、移動経路に不連続な角が生じないように）、設定する必要がある。
【０１１４】
本実施形態においては、プロセッサ１２は、後述のステップＳ２２のシミュレーションにおいてロボットモデル１０２Ｍによって撮像部モデル１０４Ｍを第１の撮像位置、第２の撮像位置、・・・第ｎの撮像位置へ連続的に移動させるときの移動経路が、滑らかに連続する経路となるように、ステップＳ４で計算した第ｎの撮像位置の各々を、新たな第ｎの撮像位置へ変更する。
【０１１５】
ステップＳ２２において、プロセッサ１２は、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作のシミュレーションを実行する。このステップＳ２２について、図９を参照して説明する。なお、図９に示すフローにおいて、図６と同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１１６】
ステップＳ１２の後、ステップＳ２３において、プロセッサ１２は、仮想画像を取得する。具体的には、プロセッサ１２は、ロボットモデル１０２Ｍが撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めしたときに、撮像部モデル１０４Ｍの視野Ａ内に入る仮想画像を生成する。
【０１１７】
なお、プロセッサ１２は、このステップＳ２３において、ステップＳ１２でロボットモデル１０２Ｍが撮像部モデル１０４Ｍを移動させているときに、仮想画像を生成してもよい。
【０１１８】
図１０及び図１１に、撮像部モデル１０４Ｍがワークモデル１５０Ｍに対して第１の撮像位置に位置決めされたときに、撮像部モデル１０４Ｍの視野Ａ内に入る仮想画像を示す。なお、図１０及び図１１においては、理解の容易のために、撮像部モデル１０４Ｍの視線Ｏと、目的箇所１５４Ｍの中心Ｃ１とを図示している。
【０１１９】
図１０に示す仮想画像２０２においては、目的箇所１５４Ｍが仮想画像２０２の中央から紙面左方へずれており、目的箇所１５４Ｍの一部が、仮想画像２０２に写っていない。
【０１２０】
すなわち、この場合は、撮像部モデル１０４Ｍがワークモデル１５０Ｍに対して第１の撮像位置に位置決めされたとき、撮像部モデル１０４Ｍの視線Ｏと、目的箇所１５４Ｍの中心Ｃ１とが互いに一致しておらず、且つ、目的箇所１５４Ｍの一部が撮像部モデル１０４Ｍの視野Ａ内に収まっていないことになる。
【０１２１】
一方、図１１に示す仮想画像２０４においては、目的箇所１５４が仮想画像２０４の中央から紙面左方へずれているものの、目的箇所１５４の全体が、仮想画像２０２に写っている。
【０１２２】
すなわち、この場合は、撮像部モデル１０４Ｍがワークモデル１５０Ｍに対して第１の撮像位置に位置決めされたとき、撮像部モデル１０４Ｍの視線Ｏと、目的箇所１５４Ｍの中心Ｃ１とが互いに一致していないものの、目的箇所１５４Ｍの全体が撮像部モデル１０４Ｍの視野Ａ内に収まっていることになる。
【０１２３】
このように撮像部モデル１０４Ｍの視線Ｏと目的箇所１５４Ｍの中心Ｃ１とがずれる事態は、上述のステップＳ２１で第ｎの撮像位置を変更したことによって、起こり得る。プロセッサ１２は、このステップＳ２３において、仮想画像２０２又は２０４のような仮想画像を生成し、システムメモリ１４に記憶する。
【０１２４】
ステップＳ２４において、プロセッサ１２は、ステップＳ１２で撮像部モデル１０４Ｍとワークモデル１５０Ｍとを第ｎの撮像位置に位置決めしたときに、目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが視野Ａ内に収まっているか否かを判定する。
【０１２５】
仮に、このステップＳ２４の開始時点でｎ＝１にセットされていたとすると、プロセッサ１２は、ステップＳ２３で取得した仮想画像を画像解析し、該仮想画像に写る目的箇所１５４Ｍの輪郭を抽出する。
【０１２６】
一方、プロセッサ１２は、システムメモリ１４からロボットモデル１０２Ｍの図面データを読み出し、該図面データから、目的箇所である部材モデル１５４Ｍの形状（例えば、部材モデル１５４Ｍの上端面モデルの輪郭形状）を取得する。
【０１２７】
そして、プロセッサ１２は、仮想画像に写る目的箇所１５４Ｍの輪郭の形状と、図面データの部材モデル１５４Ｍの形状とが、互いに一致するか否かを判定する。プロセッサ１２は、仮想画像に写る目的箇所１５４Ｍの形状が図面データと一致する場合、目的箇所１５４Ｍが視野Ａ内に収まっている（すなわち、ＹＥＳ）と判定し、ステップＳ２６へ進む。
【０１２８】
一方、プロセッサ１２は、仮想画像に写る目的箇所１５４Ｍの形状が図面データと一致していない場合、目的箇所１５４Ｍが視野Ａ内に収まっていない（すなわち、ＮＯ）と判定し、ステップＳ２５へ進む。
【０１２９】
例えば、図１０に示す仮想画像２０２の場合、仮想画像に写る目的箇所１５４Ｍの輪郭の形状は、一部が欠けた円形となっており、図面データの部材モデル１５４Ｍの形状（すなわち、真円）と一致していない。したがって、ステップＳ２３で仮想画像２０２を取得した場合は、プロセッサ１２は、このステップＳ２４でＮＯと判定することになる。
【０１３０】
一方、図１１に示す仮想画像２０４の場合は、仮想画像に写る目的箇所１５４Ｍの輪郭の形状は、真円となっており、図面データの部材モデル１５４Ｍの形状と一致する。したがって、ステップＳ２３で仮想画像２０４を取得した場合は、プロセッサ１２は、このステップＳ２４でＹＥＳと判定することになる。
【０１３１】
なお、プロセッサ１２は、仮想画像に写る目的箇所１５４Ｍの輪郭の形状と、図面データの部材モデル１５４Ｍの形状との類似度を算出し、該類似度が予め定められた閾値以上である場合に、ＹＥＳと判定してもよい。この類似度は、２つの形状が類似する度合を表すパラメータであって、例えば、２つの形状の面積比を含む。
【０１３２】
このように、本実施形態においては、プロセッサ１２は、視野Ａ内に目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが収まっているか否かを判定する判定部３８（図７）として機能する。
【０１３３】
ステップＳ２５において、プロセッサ１２は、第ｎの撮像位置の検索及び修正スキームを実行する。このステップＳ２５について、図１２を参照して説明する。
【０１３４】
ステップＳ２７において、プロセッサ１２は、第ｎの撮像位置を変更する。具体的には、プロセッサ１２は、ステップＳ２５の開始時点で設定されていた第ｎの撮像位置を、該第ｎの撮像位置に配置された撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸、ｙ軸、又はｚ軸の方向へ所定の距離δ１だけずらしたときの撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置に、変更する。
【０１３５】
このようにして、プロセッサ１２は、ステップＳ２５の開始時点で設定されていた第ｎの撮像位置を、新たな第ｎの撮像位置に変更することができる。変更後の第ｎの撮像位置においては、撮像部モデル１０４Ｍが、変更前の第ｎの撮像位置から、ツール座標系ＣＴのｘ軸、ｙ軸、又はｚ軸の方向へ距離δ１だけずれることになる。
【０１３６】
ステップＳ２８において、プロセッサ１２は、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置へ位置決めする位置決め動作を再実行する。具体的には、プロセッサ１２は、仮想空間２００内で、撮像部モデル１０４Ｍの位置を、第ｎの撮像位置へ向かう移動経路の途中位置に戻す。
【０１３７】
そして、プロセッサ１２は、該途中位置から撮像部モデル１０４Ｍをロボットモデル１０２Ｍによって変更後の第ｎの撮像位置へ位置決めする位置決め動作のシミュレーションを行う。
【０１３８】
ステップＳ２９において、プロセッサ１２は、上述のステップＳ２３と同様に、仮想画像を再度取得する。
【０１３９】
ステップＳ３０において、プロセッサ１２は、上述のステップＳ２４と同様に、ステップＳ２９で取得した仮想画像に写る目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが視野Ａ内に収まっているか否かを判定する。
【０１４０】
プロセッサ１２は、ＹＥＳと判定した場合、ステップＳ３１へ進む一方、ＮＯと判定した場合、ステップＳ２７へ戻る。こうして、プロセッサ１２は、ステップＳ２４でＹＥＳと判定するまで、ステップＳ２７〜Ｓ３０をループする。
【０１４１】
このようにステップＳ２７〜Ｓ３０を繰り返し実行することによって、プロセッサ１２は、視野Ａ内に目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが収まるような、撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置を検索する。したがって、本実施形態においては、プロセッサ１２は、該相対位置を検索する撮像位置検索部４０（図７）として機能する。
【０１４２】
なお、プロセッサ１２は、ステップＳ３０でＹＥＳと判定するまでにステップＳ２７で第ｎの撮像位置を変更するときに、撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸方向へずらす変更、ｙ軸方向へずらす変更、又は、ｚ軸方向へずらす変更を、所定の順番に従って実行してもよい。
【０１４３】
例えば、所定の順番として、プロセッサ１２は、ｘ軸方向への変更を１０回実行し、次いで、ｙ軸方向への変更を１０回実行し、次いで、ｚ軸方向への変更を１０回実行するという順番で、第ｎの撮像位置を変更してもよい。
【０１４４】
また、ステップＳ３０でＹＥＳと判定するまでにステップＳ２７で第ｎの撮像位置を変更するときに、撮像部モデル１０４Ｍをツール座標系ＣＴの各軸の方向へずらす範囲［α，β］が設定されてもよい。
【０１４５】
例えば、撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸方向へずらす範囲が、［−１０，１０］と設定された場合、プロセッサ１２は、撮像部モデル１０４Ｍを、ステップＳ２５の開始時点での第ｎの撮像位置から、ツール座標系ＣＴのｘ軸方向において、−１０≦ｘ≦１０の範囲でずらす。
【０１４６】
また、プロセッサ１２は、ステップＳ３０でＹＥＳと判定するまでにステップＳ２７で第ｎの撮像位置を変更するときに、撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸方向へずらす変更、ｙ軸方向へずらす変更、及びｚ軸方向へずらす変更の有効又は無効の設定を受け付けてもよい。
【０１４７】
例えば、ｚ軸方向へずらす変更が「無効」に設定された場合、プロセッサ１２は、ステップＳ２７で第ｎの撮像位置を変更するときに、撮像部モデル１０４Ｍをツール座標系ＣＴのｚ軸方向へずらす変更を行わない。
【０１４８】
上述の所定の順番、範囲［α，β］、及び有効／無効の設定は、予め定められてもよいし、又は、プロセッサ１２は、データ入力部２０を介して、オペレータから、これら所定の順番、範囲［α，β］、及び有効／無効の設定の入力を受け付けてもよい。
【０１４９】
ステップＳ３１において、プロセッサ１２は、ステップＳ２５の開始時点で設定されていた第ｎの撮像位置を、ステップＳ３０でＹＥＳと判定した時点で設定されている第ｎの撮像位置に修正し、システムメモリ１４に記憶する。
【０１５０】
このように、本実施形態においては、プロセッサ１２は、ステップＳ２７〜Ｓ３０で検索した撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置に基づいて第ｎの撮像位置を修正する第１の撮像位置修正部４２（図７）として機能する。そして、プロセッサ１２は、図１２に示すステップＳ２５を終了し、図９に示すステップＳ１３へ進む。
【０１５１】
このように、本実施形態においては、プロセッサ１２は、ステップＳ２３の実行時に視野Ａ内に目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが収まっていない場合に、視野Ａ内に該目的箇所が収まるような撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置を検索し（ステップＳ２７〜Ｓ３０）、該相対位置に基づいて第ｎの撮像位置を修正している（ステップＳ３１）。
【０１５２】
この構成によれば、ロボットモデル１０２Ｍによって撮像部モデル１０４Ｍを移動させるときの移動経路を滑らかな経路に設定した（ステップＳ２１）場合において、視野Ａ内に目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍを確実に収めることができる第ｎの撮像位置を取得できる。
【０１５３】
したがって、実機のロボット１０２によって撮像部１０４を移動させながら該撮像部１０４によって撮像対象箇所を撮像するような動作プログラムを効果的に生成することができる。
【０１５４】
次に、図１３〜図１７を参照して、プログラミング装置１０のさらに他の機能について説明する。図１３は、プログラミング装置１０のさらに他の機能を表すブロック図である。本実施形態においては、プロセッサ１２は、さらに、干渉検出部４４、非干渉位置検索部４６、及び第２の撮像位置修正部４８として機能する。
【０１５５】
以下、図１４を参照して、本実施形態に係るプログラミング装置１０の機能について、説明する。なお、図１４において、図３に示すフローと同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１５６】
ステップＳ４１において、プロセッサ１２は、モデル配置部２６として機能して、ワークモデル１５０Ｍ、ロボットモデル１０２Ｍ、撮像部モデル１０４Ｍ、及び環境物モデル２０６Ｍを仮想空間２００に配置する。このときの仮想空間２００の一例を図１５に示す。環境物モデル２０６Ｍは、作業セルの柱又は壁等といった、ロボットシステム１００及びワーク１５０の周囲に存在する物体をモデル化した３次元ＣＧである。
【０１５７】
ステップＳ４の後、ステップＳ４２において、プロセッサ１２は、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作のシミュレーションを実行する。このステップＳ４２について、図１６を参照して説明する。なお、図１６に示すフローにおいて、図６と同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１５８】
ステップＳ１２の後、ステップＳ４３において、プロセッサ１２は、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間で干渉が検出されたか否かを判定する。
【０１５９】
具体的には、プロセッサ１２は、ロボットモデル１０２Ｍ、撮像部モデル１０４Ｍ、ワークモデル１５０Ｍ、及び環境物モデル２０６Ｍの図面データと、これら要素のロボット座標系ＣＲにおける位置データ等に基づいて、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間で干渉が生じたか否かを判定する。
【０１６０】
プロセッサ１２は、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間で干渉が生じた（すなわち、ＹＥＳ）と判定した場合、ステップＳ４４へ進む。
【０１６１】
一方、プロセッサ１２は、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間で干渉が生じていない（すなわち、ＮＯ）と判定した場合、ステップＳ１３へ進む。
【０１６２】
このように、本実施形態においては、プロセッサ１２は、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間の干渉を検出する干渉検出部４４（図１３）として機能する。
【０１６３】
ステップＳ４４において、プロセッサ１２は、非干渉位置の検索及び撮像位置修正スキームを実行する。このステップＳ４４について、図１７を参照して説明する。
【０１６４】
ステップＳ４５において、プロセッサ１２は、ステップＳ１２で第ｎの撮像位置に配置されている撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置を変更する。具体的には、プロセッサ１２は、撮像部モデル１０４Ｍを、ツール座標系ＣＴのｘ軸、ｙ軸、又はｚ軸の方向へ所定の距離δ２だけずらす。
【０１６５】
又は、プロセッサ１２は、撮像部モデル１０４Ｍを、ツール座標系ＣＴ（又はセンサ座標系ＣＴ）のｘ軸又はｙ軸の周りの方向へ、所定の角度θだけ回転させる。このようにして、プロセッサ１２は、撮像部モデル１０４Ｍの位置を、距離δ２又は角度θだけ変更することができる。
【０１６６】
ここで、プロセッサ１２は、このステップＳ４５において、視野Ａ内に目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍが収まるように、撮像部モデル１０４Ｍの位置を変更する。例えば、プロセッサ１２は、撮像部モデル１０４Ｍの視線Ｏが目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍの中心Ｃｎ（又は、目的箇所上の任意の点）を通過するように、撮像部モデル１０４Ｍの位置を変更する。
【０１６７】
ステップＳ４６において、プロセッサ１２は、上述のステップＳ４３と同様に、プロセッサ１２は、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍと、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍとの間で干渉が検出されたか否かを判定する。
【０１６８】
プロセッサ１２は、ＹＥＳと判定した場合、ステップＳ４７へ進む一方、ＮＯと判定した場合、ステップＳ４５へ戻る。こうして、プロセッサ１２は、ステップＳ４６でＹＥＳと判定するまで、ステップＳ４５〜Ｓ４６をループする。
【０１６９】
ステップＳ４６でＹＥＳと判定されたとき、ロボットモデル１０２Ｍ又は撮像部モデル１０４Ｍは、ワークモデル１５０Ｍ又は環境物モデル２０６Ｍと干渉しない非干渉位置に配置されることになる。
【０１７０】
このようにステップＳ４５〜Ｓ４６を繰り返し実行することによって、プロセッサ１２は、上記干渉が生じなくなる非干渉位置を検索する。したがって、本実施形態においては。非干渉位置を検索する非干渉位置検索部４６（図１３）として機能する。
【０１７１】
なお、プロセッサ１２は、ステップＳ４６でＹＥＳと判定するまでにステップＳ４５を繰り返し実行するとき、撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸方向へ移動する動作、ｙ軸方向へずらす動作、ｚ軸方向へずらす動作、ツール座標系ＣＴ（又はセンサ座標系ＣＴ）のｘ軸周りへ回転する動作、又はｙ軸周りへ回転させる動作を、所定の順番に従って実行してもよい。
【０１７２】
また、ステップＳ４６でＹＥＳと判定するまでにステップＳ４５を繰り返し実行するときに、撮像部モデル１０４Ｍをツール座標系ＣＴの各軸の方向又は各軸周りへ移動させる範囲［γ，ε］が設定されてもよい。
【０１７３】
例えば、撮像部モデル１０４Ｍをセンサ座標系ＣＳのｙ軸周りへ回転させる範囲が、［−１０°，１０°］と設定された場合、ステップＳ４５において、プロセッサ１２は、撮像部モデル１０４Ｍを、ステップＳ２５の開始時点の位置から、センサ座標系ＣＳのｙ軸周りへ、−１０°≦ｘ≦１０°の範囲で回転させる。
【０１７４】
また、プロセッサ１２は、ステップＳ４５を実行するときに、撮像部モデル１０４Ｍをツール座標系ＣＴのｘ軸方向へ移動する動作、ｙ軸方向へずらす動作、ｚ軸方向へずらす動作、ツール座標系ＣＴ（又はセンサ座標系ＣＴ）のｘ軸周りへ回転する動作、又はｙ軸周りへ回転させる動作の有効又は無効の設定を受け付けてもよい。
【０１７５】
例えば、センサ座標系ＣＴのｙ軸周りへ回転させる動作が「無効」に設定された場合、プロセッサ１２は、ステップＳ４５を実行するときに、センサ座標系ＣＴのｙ軸周りへ回転させる動作を行わない。
【０１７６】
ステップＳ４５で参照する所定の順番、範囲［γ，ε］、及び有効／無効の設定は、予め定められてもよいし、又は、プロセッサ１２は、データ入力部２０を介して、オペレータから、これら所定の順番、範囲［γ，ε］、及び有効／無効の設定の入力を受け付けてもよい。
【０１７７】
ステップＳ４７において、プロセッサ１２は、ステップＳ４４の開始時点で設定されていた第ｎの撮像位置を、ステップＳ４６でＹＥＳと判定した時点における撮像部モデル１０４Ｍとワークモデル１５０Ｍとの相対位置に修正し、システムメモリ１４に記憶する。
【０１７８】
このように、本実施形態においては、プロセッサ１２は、ステップＳ４５〜Ｓ４６で検索した非干渉位置に基づいて第ｎの撮像位置を修正する第２の撮像位置修正部４８（図１３）として機能する。ステップＳ４７の後、プロセッサ１２は、図１７に示すステップＳ４４を終了し、図１６に示すステップＳ１３へ進む。
【０１７９】
以上のように、本実施形態においては、プロセッサ１２は、ステップＳ４３で検出した干渉が生じなくなる非干渉位置を検索し（ステップＳ４５〜Ｓ４６）、該非干渉位置に基づいて修正した第ｎの撮像位置を用いて、動作プログラムを生成する（ステップＳ６）。
【０１８０】
この構成によれば、実空間において、ロボットシステム１００の周囲に環境物が存在しているような環境において、ロボット１０２又は撮像部１０４と、ワーク１５０又は環境物との間で干渉が生じないように、撮像部１０４で目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、又は１６０Ｍを撮像する一連の動作の動作プログラムを生成できる。
【０１８１】
次に、図１８及び図１９を参照して、プログラミング装置１０のさらに他の機能について説明する。図１８は、プログラミング装置１０のさらに他の機能を表すブロック図である。本実施形態においては、プロセッサ１２は、さらに、撮像タイミング設定部５０として機能する。
【０１８２】
以下、図１９を参照して、本実施形態に係るプログラミング装置１０の機能について、説明する。なお、図１９において、図３に示すフローと同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１８３】
ステップＳ５の後、ステップＳ５１において、プロセッサ１２は、実機の撮像部１０４による撮像動作の開始時点ｔｓ及び終了時点ｔｅを設定する。一例として、プロセッサ１２は、撮像部１０４をワーク１５０に対して第ｎの撮像位置に位置決めするときの、ロボット１０２の動作速度ＶＲの指定を受け付ける。
【０１８４】
具体的には、プロセッサ１２は、動作速度ＶＲを入力可能とする画像データを生成し、表示部２２に表示させる。オペレータは、データ入力部２０を操作して、所望の動作速度ＶＲを入力し、プロセッサ１２は、Ｉ／Ｏインターフェース１８を介して、動作速度ＶＲを受け付ける。
【０１８５】
そして、プロセッサ１２は、受け付けた動作速度ＶＲに基づいて、撮像動作の開始時点ｔｓ及び終了時点ｔｅを自動で設定する。例えば、プロセッサ１２は、開始時点ｔｓを、実機のロボット１０２が撮像部１０４を第ｎの撮像位置に到達させるｔ１秒前の時点に設定する一方、終了時点ｔｅを、ロボット１０２が撮像部１０４を第ｎの撮像位置を通過してｔ２秒後の時点に設定する。
【０１８６】
これら時間ｔ１及びｔ２は、ロボット１０２の動作速度ＶＲから求めることができる。このようにして、プロセッサ１２は、動作速度ＶＲに基づいて開始時点ｔｓ及び終了時点ｔｅを自動で設定する。
【０１８７】
他の例として、開始時点ｔｓ及び終了時点ｔｅは、オペレータによって任意に指定されてもよい。プロセッサ１２は、オペレータからの指定に応じて開始時点ｔｓ及び終了時点ｔｅを設定し、システムメモリ１４に記憶する。このように、本実施形態においては、プロセッサ１２は、撮像動作の開始時点ｔｓ及び終了時点ｔｅを設定する撮像タイミング設定部５０として機能する。
【０１８８】
ステップＳ５２において、プロセッサ１２は、ステップＳ１３（図６）で取得した第ｎの位置データ（ｎ＝１〜４）と、ステップＳ５１で設定した開始時点ｔｓ及び終了時点ｔｅとに基づいて、ロボットシステム１００の動作プログラムを生成する。
【０１８９】
具体的には、プロセッサ１２は、ステップＳ５１で設定した開始時点ｔｓから終了時点ｔｅまでの期間Ｔ（＝ｔｅ−ｔｓ。例えば、Ｔ＝０．５秒）に亘って、撮像動作を撮像部１０４に実行させる動作プログラムを生成する。
【０１９０】
例えば、この動作プログラムは、ロボット１０２が撮像部１０４を第ｎの撮像位置に到達させるｔ１秒前の時点ｔｓで、撮像部１０４に撮像動作を開始させ（具体的には、シャッタを開いて撮像センサを露光させる）、ロボット１０２が撮像部１０４を第ｎの撮像位置を通過してｔ２秒後の時点ｔｅで、撮像部１０４の撮像動作を終了させる（具体的には、シャッタを閉じる）ように、生成される。
【０１９１】
本実施形態によれば、例えばロボット１０２によって撮像部１０４を移動させながら該撮像部１０４によって撮像対象箇所を撮像する場合において、撮像対象箇所を確実に撮像することができる。
【０１９２】
次に、図２０〜図２３を参照して、プログラミング装置１０のさらに他の機能について説明する。図２０は、プログラミング装置１０のさらに他の機能を表すブロック図である。本実施形態においては、プロセッサ１２は、さらに、順序決定部５２として機能する。
【０１９３】
以下、図２１を参照して、本実施形態に係るプログラミング装置１０の機能について、説明する。なお、図２１において、図３に示すフローと同様のプロセスには同じステップ番号を付し、重複する説明を省略する。
【０１９４】
ステップＳ５の後、ステップＳ６０において、プロセッサ１２は、最短移動経路検索スキームを実行する。このステップＳ６０について、図２２を参照して説明する。
【０１９５】
なお、図２２に示すステップＳ６０においては、後述するステップＳ６５でＹＥＳと判定するまで、図２２中のステップＳ６２、Ｓ１１〜Ｓ１３、Ｓ１５、Ｓ６３〜Ｓ６５の一連の動作を、所定の回数μだけ、繰り返して実行する。この回数μは、オペレータによって予め定められ（例えば、μ＝５０）、システムメモリ１４に記憶される。
【０１９６】
ステップＳ６１において、プロセッサ１２は、ステップＳ６０中のステップＳ６２、Ｓ１１〜Ｓ１３、Ｓ１５、Ｓ６３〜Ｓ６５の一連の動作の実行回数を特定する番号「ｍ」を、「１」に設定する。
【０１９７】
ステップＳ６２において、ステップＳ４で計算された複数の撮像位置に、撮像部モデル１０４Ｍとワークモデル１５０Ｍとを位置決めする順序を決定する。
【０１９８】
上述したように、第１の撮像位置は、目的箇所１５４Ｍが視野Ａ内に入る位置として設定され、第２の撮像位置は、目的箇所１５６Ｍが視野Ａ内に入る位置として設定され、第３の撮像位置は、目的箇所１５８Ｍが視野Ａ内に入る位置として設定され、第４の撮像位置は、目的箇所１６０Ｍが視野Ａ内に入る位置として設定されていた。
【０１９９】
これにより、プロセッサ１２は、撮像部モデル１０４Ｍを移動させるシミュレーション（Ｓ５、Ｓ２２、Ｓ４２）において、目的箇所１５４に対応する第１の撮像位置、目的箇所１５６に対応する第２の撮像位置、目的箇所１５８に対応する第３の撮像位置、及び目的箇所１６０に対応する第４の撮像位置の順序で、撮像部モデル１０４Ｍを移動させていた。
【０２００】
本実施形態においては、プロセッサ１２は、このステップＳ６２で、この順序をランダムに決定する。具体的には、撮像位置を特定する番号「ｎ」（＝１〜４）を、目的箇所１５４、目的箇所１５６、目的箇所１５８、及び目的箇所１６０に対して、ランダムに付与する。
【０２０１】
例えば、プロセッサ１２は、目的箇所１５６Ｍが視野Ａ内に入る位置を第１の撮像位置とし、目的箇所１６０Ｍが視野Ａ内に入る位置を第２の撮像位置とし、目的箇所１５８Ｍが視野Ａ内に入る位置を第３の撮像位置とし、目的箇所１５４Ｍが視野Ａ内に入る位置を第４の撮像位置とするように、番号「ｎ」を、目的箇所１５４、目的箇所１５６、目的箇所１５８、及び目的箇所１６０に対して付与する。
【０２０２】
この場合、プロセッサ１２は、ステップＳ６０中のステップＳ１１、Ｓ１２、Ｓ１３及びＳ１５をループするときに、撮像部モデル１０４Ｍを、目的箇所１５６を視野Ａ内に入れる第１の撮像位置、目的箇所１６０Ｍを視野Ａ内に入れる第２の撮像位置、目的箇所１５８を視野Ａ内に入れる第３の撮像位置、及び目的箇所１５４を視野Ａ内に入れる第４の撮像位置の順序で、撮像部モデル１０４Ｍを移動させることになる。
【０２０３】
このように、本実施形態においては、プロセッサ１２は、複数の撮像位置に撮像部モデル１０４Ｍとワークモデル１５０Ｍとを位置決めする順序を決定する順序決定部５２として機能する。
【０２０４】
ステップＳ６２の後、プロセッサ１２は、直近のステップＳ６２で決定した番号「ｎ」に基づいて上述のステップＳ１１、Ｓ１２、Ｓ１３及びＳ１５を順次実行し、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に順次位置決めする。
【０２０５】
ステップＳ１５でＹＥＳと判定した場合、ステップＳ６３において、直近のステップＳＳ１２、Ｓ１３、及びＳ１５のループにおいて撮像部モデル１０４Ｍを移動させた移動経路（すなわち、第１の撮像位置、第２の撮像位置、・・・第ｎＤの撮像位置へ至る経路）の長さＬｍを算出する。プロセッサ１２は、算出した長さＬｍを、システムメモリ１４に記憶する。
【０２０６】
ステップＳ６４において、プロセッサ１２は、番号「ｍ」を、「１」だけインクリメントする（すなわち、ｍ＝ｍ＋１）。
【０２０７】
ステップＳ６５において、プロセッサ１２は、番号「ｍ」がμよりも大きい数になったか否かを判定する。プロセッサ１２は、番号「ｍ」がμよりも大きい（すなわち、ｍ＞μ）場合、ＹＥＳと判定しステップＳ６６へ進む。
【０２０８】
一方、プロセッサ１２は、番号「ｍ」がμ以下である（すなわち、ｍ≦μ）場合、ＮＯと判定し、ステップＳ６２へ戻る。こうして、プロセッサ１２は、ステップＳ６５でＹＥＳと判定するまで、ステップＳ６２〜Ｓ６５をループし、ステップＳ６２でランダムに決定した順序で複数の撮像位置に撮像部モデル１０４Ｍを移動させたときの移動経路の長さＬｍ（ｍ＝１，２，３，・・・μ）を順次取得する。
【０２０９】
ステップＳ６６において、プロセッサ１２は、最短移動経路ＰＭＩＮを取得する。具体的には、プロセッサ１２は、ステップＳ６３を実行する毎に取得した移動経路の長さＬ１〜Ｌμを、システムメモリから読み出して比較し、長さＬ１〜Ｌμの中で最も短いものに対応する移動経路を、最短移動経路ＰＭＩＮとして取得する。
【０２１０】
そして、プロセッサ１２は、図２２に示すステップＳ６０を終了し、図２１中のステップＳ６へ進む。そして、ステップＳ６において、ステップＳ６６で取得した最短移動経路ＰＭＩＮに対応する順序で、撮像部モデル１０４Ｍとワークモデル１５０Ｍとを第ｎの撮像位置へ位置決めする動作プログラムを生成する。
【０２１１】
本実施形態によれば、プロセッサ１２は、撮像部モデル１０４Ｍとワークモデル１５０Ｍとを、最短移動経路ＰＭＩＮで第ｎの撮像位置の各々へ位置決めする動作プログラムを、自動で生成できる。したがって、該動作プログラムに従って実機のロボットシステム１００を動作させたときのサイクルタイムを最小化できる。
【０２１２】
次に、図２３を参照して、他の実施形態に係るプログラミング装置６０について説明する。プログラミング装置６０は、モデル配置部６２、目的箇所抽出部６４、シミュレート部６６、及びプログラム生成部６８を備える。
【０２１３】
モデル配置部６２は、上述のモデル配置部２６と同様に、ワークモデル１５０Ｍ、ロボットモデル１０２Ｍ、及び撮像部モデル１０４Ｍを仮想空間２００に配置する（ステップＳ１）。目的箇所抽出部６４は、予め定められた抽出条件に従って、ワークモデル１５０Ｍ上の目的箇所１５４Ｍ、１５６Ｍ、１５８Ｍ、１６０Ｍを抽出する（ステップＳ３）。
【０２１４】
シミュレート部６６は、上述のシミュレート部３４と同様に、撮像部モデル１０４Ｍをワークモデル１５０Ｍに対して第ｎの撮像位置に位置決めする位置決め動作のシミュレーションを実行する（ステップＳ５）。
【０２１５】
プログラム生成部６８は、上述のプログラム生成部３６と同様に、シミュレート部６６が実行するシミュレーションで取得したロボットモデル１０２Ｍの位置データに基づいて、ロボットシステム１００の動作プログラムを生成する（ステップＳ６）。
【０２１６】
なお、プログラミング装置６０は、プロセッサ及びメモリ（システムメモリ１４又はワークメモリ１６）を有する１つのコンピュータから構成されてもよい。又は、モデル配置部６２、目的箇所抽出部６４、シミュレート部６６、及びプログラム生成部６８の各々が、プロセッサ及びメモリを有する１つのコンピュータから構成されてもよい。
【０２１７】
なお、抽出条件の第１条件または第２条件として、ワークモデル１５０Ｍの要素モデル名称を特定する条件を追加してもよい。この場合、オペレータは、データ入力部２０を操作して、各部材モデルに名称（「ボスＡ」、「ジョイントＢ」等）を登録してもよい。
【０２１８】
また、モデル配置部２６、６２は、ロボット座標系ＣＲに加えて、基準座標系Ｃ０を設定し、基準座標系Ｃ０を基準としてもよい。また、第ｎの撮像位置は、撮像部モデル１０４Ｍの視線Ｏが目的箇所上の任意の点を通過するように、設定されてもよい。
【０２１９】
また、上述の実施形態においては、ロボット１０２（ロボットモデル１０２Ｍ）が、撮像部１０４（撮像部モデル１０４Ｍ）を移動させて、ワーク１５０（ワークモデル１５０Ｍ）に対して撮像位置へ移動する場合について述べた。
【０２２０】
しかしながら、これに限らず、ロボット１０２（ロボットモデル１０２Ｍ）によってワーク１５０（ワークモデル１５０Ｍ）を移動させて、撮像部１０４（撮像部モデル１０４Ｍ）に対して撮像位置に位置決めしてもよい。この場合、ワーク１５０（ワークモデル１５０Ｍ）は、手首部１１２（手首部モデル１１２Ｍ）に連結される。
【０２２１】
また、図１、図７、図１３、図１８、及び図２０に示す実施形態の特徴を、互いに組み合わせるでもよい。例えば、図１３に示す干渉検出部４４、非干渉位置検索部４６及び第２の撮像位置修正部４８を、図７に示す実施形態に追加してもよい。また、ロボット１０２は、垂直多関節型ロボットに限らず、パラレルリンク型ロボット又はローダ等であってもよい。
【０２２２】
以上、実施形態を通じて本開示を説明したが、上述の実施形態は、特許請求の範囲に係る発明を限定するものではない。
【符号の説明】
【０２２３】
１０，６０    プログラミング装置
１２    プロセッサ
２６，６２    モデル配置部
３０，６４    目的箇所抽出部
３２    撮像位置計算部
３４，６６    シミュレート部
３６，６８    プログラム生成部
【図１】
2019018250.tif 000003
【図２】
2019018250.tif 000004
【図３】
2019018250.tif 000005
【図４】
2019018250.tif 000006
【図５】
2019018250.tif 000007
【図６】
2019018250.tif 000008
【図７】
2019018250.tif 000009
【図８】
2019018250.tif 000010
【図９】
2019018250.tif 000011
【図１０】
2019018250.tif 000012
【図１１】
2019018250.tif 000013
【図１２】
2019018250.tif 000014
【図１３】
2019018250.tif 000015
【図１４】
2019018250.tif 000016
【図１５】
2019018250.tif 000017
【図１６】
2019018250.tif 000018
【図１７】
2019018250.tif 000019
【図１８】
2019018250.tif 000020
【図１９】
2019018250.tif 000021
【図２０】
2019018250.tif 000022
【図２１】
2019018250.tif 000023
【図２２】
2019018250.tif 000024
【図２３】
2019018250.tif 000025