(57)【要約】【課題】それぞれの時計を有し、それぞれ異なる周期で位置情報を更新する機器をコントローラで制御する際、それぞれの位置情報のずれをなくし、高精度な位置制御を行う。【解決手段】コントローラ１００と処理装置５１０等を備える制御システム１であって、処理装置５１０等は、計時部５１１等と、位置情報を所定周期で更新する位置情報更新部と、更新した位置情報とその際の時刻情報をコントローラ１００に送信する送信部とを備え、コントローラ１００は、位置情報と時刻情報を受信する受信部１０６と、座標変換式により位置情報をワールド座標系位置情報に変換する座標変換部１０４と、ワールド座標系位置情報と時刻情報に基づいてワールド座標系位置情報間の位置情報を推定する推定部１０５と、ワールド座標系位置情報と推定した位置情報を時間軸上で管理するワールド座標系管理部１０４とを備える。【選択図】図２
2019212123.tif 000002
【特許請求の範囲】
【請求項１】
コントローラと、前記コントローラに接続され、ワークに関する所定の処理を行う処理装置とを備える制御システムであって、
前記処理装置は、
時刻を計時する計時部と、
前記処理装置から出力される位置情報を、前記処理装置における座標系で所定の周期により更新する位置情報更新部と、
前記位置情報更新部により更新した前記位置情報と、更新を行った時刻情報とを、前記コントローラに送信する送信部と、を備え、
前記コントローラは、
前記位置情報と前記時刻情報とを、前記処理装置から受信する受信部と、
前記位置情報が出力された前記処理装置における前記座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて、前記位置情報を、前記ワールド座標系のワールド座標系位置情報に変換する座標変換部と、
前記ワールド座標系位置情報と前記時刻情報とに基づいて、前記ワールド座標系位置情報間における位置情報を推定する推定部と、
前記ワールド座標系位置情報と、前記推定部により推定した位置情報とを、時間軸上で管理するワールド座標系管理部と、を備える、
制御システム。
【請求項２】
前記計時部は、時刻補正機能を備える、
請求項１に記載の制御システム。
【請求項３】
前記ワールド座標系位置情報を表示する表示部を備える、
請求項１または請求項２に記載の制御システム。
【請求項４】
コントローラと、前記コントローラに接続され、ワークに関する所定の処理を行う処理装置とを備える制御システムにおける制御方法であって、
前記処理装置において、
時刻を計時するステップと、
前記処理装置から出力される位置情報を、前記処理装置における座標系で所定の周期により更新するステップと、
更新した前記位置情報と、更新を行った時刻情報とを、前記コントローラに送信するステップと、を備え、
前記コントローラにおいて、
前記位置情報と前記時刻情報とを、前記処理装置から受信するステップと、
前記位置情報が出力された前記処理装置における前記座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて、前記位置情報を、前記ワールド座標系のワールド座標系位置情報に変換するステップと、
前記ワールド座標系位置情報と前記時刻情報とに基づいて、前記ワールド座標系位置情報間における位置情報を推定するステップと、を備える、
前記ワールド座標系位置情報と、前記推定した位置情報とを、時間軸上で管理するステップと、を備える、
制御システムの制御方法。
【請求項５】
コントローラと、前記コントローラに接続され、ワークに関する所定の処理を行う処理装置とを備える制御システムにおけるプログラムであって、コンピュータに、
前記処理装置において、
時刻を計時するステップと、
前記処理装置から出力される位置情報を、前記処理装置における座標系で所定の周期により更新するステップと、
更新した前記位置情報と、更新を行った時刻情報とを、前記コントローラに送信するステップと、を備え、
前記コントローラにおいて、
前記位置情報と前記時刻情報とを、前記処理装置から受信するステップと、
前記位置情報が出力された前記処理装置における前記座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて、前記位置情報を、前記ワールド座標系のワールド座標系位置情報に変換するステップと、
前記ワールド座標系位置情報と前記時刻情報とに基づいて、前記ワールド座標系位置情報間における位置情報を推定するステップと、を備える、
前記ワールド座標系位置情報と、前記推定した位置情報とを、時間軸上で管理するステップと、を備える、
制御システムのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ロボットを含む複数の制御アプリケーションを制御装置により制御する制御システム、制御システムの制御方法、および制御システムのプログラムに関する。
【背景技術】
【０００２】
ロボットがワークを工作機のワーク固定位置まで搬送する場合、ロボットにワーク固定位置をティーチングする必要がある。この際の位置は、ロボット座標系で表現する。さらに、工作機がワークを加工する場合、工作機の座標系で表現した加工位置を指定する必要がある。したがって、プログラミングを行う際には、複数の座標系を意識する必要があり、非常に煩雑な作業となっていた。
【０００３】
従来は、このような課題を解決するために、例えば特許文献１のように、ロボット座標系をワールド座標系として、ロボット座標系上の設定点の位置を取得し、さらに工作機座標系上の当該設定点の位置を計測することにより、ロボット座標系と工作機座標系の相対関係を導出することが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−４８４６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、画像処理装置、ロボット、および工作機は、それぞれの周期で位置情報を更新する。例えば、画像処理装置のカメラ座標系での位置は、数百ｍｓおきに更新されるが、ロボット座標系の位置は、数ｍｓおきに更新される。そのため、コンベア上に流れるワークの位置をカメラで計測した場合、その位置情報をロボットコントローラが受信した時には、ワークは計測時とは異なる位置に進んでいる。
【０００６】
また、画像処理装置、ロボット、工作機、コントローラは、それぞれ時計を有しており、これらの時計は常にずれが生じる。上述のようにそれぞれの周期が異なる上に、周期を作り出す時計にもずれが生じるため、上述のような位置情報のずれを解消することは困難であった。
【０００７】
そこで、この発明の課題は、それぞれの時計を有し、それぞれ異なる周期で位置情報を更新する機器をコントローラで制御する場合に、それぞれの位置情報のずれをなくし、高精度な位置制御を行うことのできる制御システム、制御システムの制御方法、および制御システムのプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、この開示の制御システムは、
コントローラと、前記コントローラに接続され、ワークに関する所定の処理を行う処理装置とを備える制御システムであって、
前記処理装置は、
時刻を計時する計時部と、
前記処理装置から出力される位置情報を、前記処理装置における座標系で所定の周期により更新する位置情報更新部と、
前記位置情報更新部により更新した前記位置情報と、更新を行った時刻情報とを、前記コントローラに送信する送信部と、を備え、
前記コントローラは、
前記位置情報と前記時刻情報とを、前記処理装置から受信する受信部と、
前記位置情報が出力された前記処理装置における前記座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて、前記位置情報を、前記ワールド座標系のワールド座標系位置情報に変換する座標変換部と、
前記ワールド座標系位置情報と前記時刻情報とに基づいて、前記ワールド座標系位置情報間における位置情報を推定する推定部と、
前記ワールド座標系位置情報と、前記推定部により推定した位置情報とを、時間軸上で管理するワールド座標系管理部と、を備える、
【０００９】
上述の制御システムでは、処理装置は、位置情報更新部によりワーク等の位置情報を所定の周期で更新し、送信部により、更新した位置情報と、更新を行った時刻情報とを、コントローラに送信する。更新を行った時刻情報は、計時部により計時した時刻に基づいている。コントローラは、受信部により位置情報と時刻情報とを処理装置から受信し、座標変換部により位置情報をワールド座標系のワールド座標系位置情報に変換する。座標変換部による変換は、位置情報が出力された処理装置における座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて行われる。さらに、推定部により、ワールド座標系位置情報と時刻情報とに基づいて、ワールド座標系位置情報間における位置情報を推定する。そして、ワールド座標系管理部は、ワールド座標系位置情報と、推定部により推定した位置情報とを、時間軸上で管理する。
【００１０】
上述の制御システムによれば、処理装置における座標系がそれぞれ異なり、それぞれ異なる周期で位置情報の更新を行う場合であっても、処理装置から出力される位置情報は、位置情報を更新した時刻情報と共にコントローラに送信される。したがって、コントローラにおいて処理装置の座標系による位置情報をワールド座標系位置情報に変換することにより、それぞれの処理装置の位置情報を、統一したワールド座標系において、時間軸上で管理することができる。しかも、処理装置における位置情報の更新期間が長い場合、あるいは、更新に定時性がない場合であっても、ワールド座標系位置情報間における位置情報が時刻情報に基づいて推定される。したがって、処理装置の位置情報、および推定した位置情報を、統一したワールド座標系において、時間軸上で管理することができ、それぞれの処理装置における位置情報のずれをなくし、高精度な位置制御を行うことができる。
【００１１】
一実施形態の制御システムは、前記計時部は、時刻補正機能を備えることが好ましい。
【００１２】
この一実施形態の制御システムでは、それぞれの処理装置における計時部は、時刻補正機能を備えているので、通信による遅れ等が補正され、コントローラとそれぞれの処理装置との間で、共通の時間軸上における時刻情報を伴った位置情報がやり取りされることになる。その結果、処理装置における座標系がそれぞれ異なり、それぞれ異なる周期で位置情報の更新を行う場合であっても、それぞれの処理装置における位置情報のずれをなくし、高精度な位置制御を行うことができる。
【００１３】
一実施形態の制御システムは、前記ワールド座標系位置情報を表示する表示部を備えていてもよい。
【００１４】
この一実施形態の制御システムでは、処理装置の座標系における位置情報が、ワールド座標系位置情報に変換され、表示部において表示される。したがって、ユーザは、コントローラと処理装置との相対的な関係の設定等を容易に行うことができる。
【００１５】
上記課題を解決するため、この開示の制御システムの制御方法は、
コントローラと、前記コントローラに接続され、ワークに関する所定の処理を行う処理装置とを備える制御システムにおける制御方法であって、
前記処理装置において、
時刻を計時するステップと、
前記処理装置から出力される位置情報を、前記処理装置における座標系で所定の周期により更新するステップと、
更新した前記位置情報と、更新を行った時刻情報とを、前記コントローラに送信するステップと、を備え、
前記コントローラにおいて、
前記位置情報と前記時刻情報とを、前記処理装置から受信するステップと、
前記位置情報が出力された前記処理装置における前記座標系と、ワールド座標系との相対関係を表す予め与えられた座標変換式を用いて、前記位置情報を、前記ワールド座標系のワールド座標系位置情報に変換するステップと、
前記ワールド座標系位置情報と前記時刻情報とに基づいて、前記ワールド座標系位置情報間における位置情報を推定するステップと、を備える、
前記ワールド座標系位置情報と、前記推定した位置情報とを、時間軸上で管理するステップと、を備える。
【００１６】
この開示の制御システムの制御方法によれば、処理装置における座標系がそれぞれ異なり、それぞれ異なる周期で位置情報の更新を行う場合であっても、処理装置から出力される位置情報は、位置情報を更新した時刻情報と共にコントローラに送信される。したがって、コントローラにおいて処理装置の座標系による位置情報をワールド座標系位置情報に変換することにより、それぞれの処理装置の位置情報を、統一したワールド座標系において、時間軸上で管理することができる。しかも、処理装置における位置情報の更新期間が長い場合、あるいは、更新に定時性がない場合であっても、ワールド座標系位置情報間における位置情報が時刻情報に基づいて推定される。したがって、処理装置の位置情報、および推定した位置情報を、統一したワールド座標系において、時間軸上で管理することができ、それぞれの処理装置における位置情報のずれをなくし、高精度な位置制御を行うことができる。
【００１７】
上記課題を解決するため、この開示の制御システムのプログラムは、上記制御システムの制御方法をコンピュータに実行させるためのプログラムである。
【００１８】
この開示のプログラムをコンピュータに実行させることによって、上記制御システムの制御方法を実施することができる。
【発明の効果】
【００１９】
以上より明らかなように、この開示の制御システム、制御システムの制御方法および制御システムのプログラムによれば、それぞれの時計を有し、それぞれ異なる周期で位置情報を更新する機器をコントローラで制御する場合に、それぞれの位置情報のずれをなくし、高精度な位置制御を行うことができる。
【図面の簡単な説明】
【００２０】
【図１】第１実施形態における制御システムの概略構成を示す図である。
【図２】制御システムの機能ブロック図である。
【図３】第１制御アプリケーションおよび第２制御アプリケーションと、コントローラとの通信のタイミングの一例を示す図である。
【図４】制御システムの処理の手順を示すフローチャートである。
【図５】統合開発環境におけるＧＵＩの一例を示す図である。
【図６】基準座標系と物体座標系との関係を説明するための図である。
【図７】基準座標系と物体座標系との関係を説明するための図である。
【図８】ターゲットパターンが描画されたキャリブレーション用シートの一例を示す図である。
【図９】ファンクションブロックを概略的に示す概念図である。
【図１０】ファンクションブロックを概略的に示す概念図である。
【図１１】ラダーダイアグラムでのプログラム例を示す図である。
【図１２】第２実施形態における制御システムの機能ブロックを示す図である。
【発明を実施するための形態】
【００２１】
以下、この発明の実施の形態を、図面を参照しながら詳細に説明する。
【００２２】
（第１実施形態）
図１は、第１実施形態における制御システム１の概略構成を示す図である。図１に示すように、制御システム１は、コントローラ１００と、統合開発環境２００と、画像処理装置５１０と、ロボット５２０と、工作機５３０と、第１コンベア５４６と、第２コンベア５４４とを備えている。
【００２３】
コントローラ１００は、上位ネットワーク３を介して、上位コンピュータ３００と、タッチパネル４００とに接続されている。また、コントローラ１００は、産業用ネットワーク２を介して、画像処理装置５１０と、ロボットコントローラ５２２と、工作機５３０と、サーボアンプ５４０とに接続されている。さらに、コントローラ１００は、統合開発環境２００と接続されている。産業用ネットワーク２は、例えば、ＥｔｈｅｒＣＡＴ（登録商標）が用いられる。
【００２４】
コントローラ１００は、一例として、ＰＬＣ（Programmable Logic Controller）であり、アーム型ロボット５２０の動作を制御するロボット制御プログラムと、ロボット５２０に取り付けられたエンドエフェクタの動作および工作機５３０の動作を制御するシーケンス制御プログラムとを実行し、制御信号を出力する。
【００２５】
統合開発環境２００は、一例として、パーソナルコンピュータ等のコンピュータであり、コントローラ１００と通信可能に接続されている。統合開発環境２００は、コントローラ１００で実行されるロボット制御プログラムおよびシーケンス制御プログラムをコントローラ１００にダウンロードする機能、これらのプログラムをデバッグする機能、並びに、これらのプログラムをシミュレートする機能等を有している。
【００２６】
ロボット５２０は、一例として、６軸の垂直多関節ロボットであり、ロボットコントローラ５２２と通信可能に接続されている。ロボット５２０は、サーボモータ等の動力源を備えており、ロボット制御プログラムに基づいてコントローラ１００から出力される制御信号により、ロボットコントローラ５２２を介してサーボモータを駆動し、各関節軸を動作させる。
【００２７】
ロボット５２０の先端部には、エンドエフェクタが取り付けられており、エンドエフェクタは、シーケンス制御プログラムに基づいてコントローラ１０から出力される制御信号により、ロボットコントローラ５２２を介してエンドエフェクタ内のサーボモータを駆動する。エンドエフェクタは、ロボット５２０の先端部に取り付けられ、一例として、部品を把持する機構等を備えている。
【００２８】
工作機５３０は、テーブルや刃物台等の搭載部上のワークＷをツールにより加工する。加工後のワークＷは、ロボット５２０に取り付けられたエンドエフェクタにより把持され、第１コンベア５４６上に載置される。
【００２９】
第２コンベア５４４は、サーボモータ５４２を備えており、サーボモータ５４２は、サーボアンプ５４０と接続されている。サーボアンプ５４０には、カウンタとエンコーダとを備えており、カウンタおよびエンコーダは、電気的に接続されている。エンコーダは、第２コンベア５４４を駆動するためのサーボモータ５４２に電気的に接続されている。
【００３０】
カウンタは、エンコーダから発生するパルス波に基づいて、第２コンベア５４４の移動量を計測する。より具体的には、エンコーダは、第２コンベア５４４の移動量に応じて、パルス信号を発生する。カウンタは、エンコーダからパルス信号を受け、このパルス信号に含まれるパルス数をカウントすることで、第２コンベア５４４の移動量を計測する。カウンタは、パルス波のカウント値を、サーボアンプ５４０を介して、コントローラ１００に一定の通信周期ごとに送信する。
【００３１】
画像処理装置５１０には、カメラ５１２が接続されている。カメラ５１２は、第２コンベア５４４上を移動するワークＷを撮影する。画像処理装置５１０は、撮影された画像をコントローラ１００に一定の通信周期ごとに送信する。
【００３２】
ワークＷは、製品または半製品であり、例えば、コネクタ等の電子部品であってもよい。
【００３３】
図２は、本実施形態における制御システム１の機能ブロック図である。図２に示すように、コントローラ１００は、上位ネットワークインターフェース１０１と、ロジック処理部１０２と、ワールド座標系管理部１０４と、位置データ推定処理部１０５と、フィールドネットワークインターフェース１０６と、時計１０８とを備えている。ロジック処理部１０２は、モーション処理部１０３を備えている。
【００３４】
コントローラ１００は、上位ネットワークインターフェース１０１を介して、上位コンピュータ３００、タッチパネル４００、および統合開発環境２００と接続されている。
【００３５】
さらに、コントローラ１００は、フィールドネットワークインターフェース１０６を介して、処理装置としての第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０と接続されている。
【００３６】
また、第１制御アプリケーションエンジン７００、および第２制御アプリケーションエンジン７１０は、ロボット５２０、工作機５３０等の制御アプリケーション６００と接続されている。
【００３７】
第１制御アプリケーションエンジン７００は、ロボット５２０に取り付けられるエンドエフェクタ、および工作機５３０を制御する。第１制御アプリケーションエンジン７００についても、図２においては、簡略化のために１つのみを示している。第２制御アプリケーションエンジン７１０は、ロボット５２０を制御する。図１に示すロボットコントローラ５２２は、第１制御アプリケーションエンジン７００と第２制御アプリケーションエンジン７１０の機能を備えている。
【００３８】
コントローラ１００、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０には、それぞれ計時部としての時計１０８，７０１，７１１，５１１，５４１が備えられている。また、第１制御アプリケーションエンジン７００、および第２制御アプリケーションエンジン７１０には、Ｉ／Ｏインターフェースを介してアクチュエータ６００が接続されている。さらに、画像処理装置５１０には、Ｉ／Ｏインターフェースを介してカメラ５１２が接続されている。
【００３９】
（全体処理）
次に、本実施形態の制御システム１における全体処理について説明する。コントローラ１００のワールド座標系管理部１０４は、ワールド座標系を管理している。画像処理装置５１０、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、工作機５３０、およびサーボアンプ５４０は、それぞれのローカル座標系を管理している。
【００４０】
第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０は、位置情報更新部としての機能を有しており、それぞれの周期でそれぞれのローカル座標系での位置を更新する。ここで、位置とは、第１制御アプリケーションエンジン７００においては、エンドエフェクタの位置、および工作機５３０の搭載部上のワークＷや工作機５３０におけるツールの位置のことを言う。また、第２制御アプリケーションエンジン７１０においては、ロボット５２０の６軸で表される座標値を言う。さらに、画像処理装置５１０においては、カメラ５１２で撮影した画像のことを言う。また、サーボアンプ５４０は、エンコーダの値のことを言う。
【００４１】
図３は、第１制御アプリケーションエンジン７００および第２制御アプリケーションエンジン７１０と、コントローラ１００との通信のタイミングの一例を示す図である。図３に示すように、第１制御アプリケーションエンジン７００と第２制御アプリケーションエンジン７１０は、それぞれ、コントローラ１００の制御周期とは異なる周期でデータの送受信を行っている。
【００４２】
第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０は、位置情報を更新すると、それぞれ位置情報を更新した時刻を位置情報に付与する。
【００４３】
第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０は、位置情報と時刻情報とを産業用ネットワーク２を介して、コントローラ１００に送信する。つまり、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０は、更新した位置情報と時刻情報とをコントローラ１００に送信する送信部としての機能を有している。
【００４４】
コントローラ１００のワールド座標系管理部１０４は、フィールドネットワークインターフェース１０６を介して、位置情報と時刻情報と受信する。したがって、ワールド座標系管理部１０４とフィールドネットワークインターフェース１０６は受信部としての機能を有している。
【００４５】
コントローラ１００の座標変換部としてのワールド座標系管理部１０４は、予め与えられたワールド座標系と各座標系との相対関係を表す座標変換式を用いてワールド座標系に変換する。また、コントローラ１００の推定部としての位置データ推定処理部１０５は、第１制御アプリケーションエンジン７００等からから新たなデータを得られるまでの間、位置データの推定処理を行う。
【００４６】
コントローラ１００のワールド座標系管理部１０４は、第１制御アプリケーションエンジン７００等から得られた位置データや推定した位置データを、所定時刻の位置データとしてワールド座標系で管理する。
【００４７】
コントローラ１００上で動作するユーザプログラムでは、ワールド座標系表現の位置を使って各制御アプリケーションに対する位置制御を行うことができ、ワールド座標系表現の指令位置を管理することができる。
【００４８】
統合開発環境２００は、コントローラ１００が管理するワールド座標系での位置情報を表示することができる。ユーザは、統合開発環境２００からワールド座標系での位置情報を入力することができる。したがって、統合開発環境２００は、コントローラ１００の表示部としての機能を有している。
【００４９】
次に、図４に示すフローチャートを参照しつつ、制御システム１における処理の手順について説明する。図４は、制御システム１の処理の手順を示すフローチャートである。
【００５０】
まず、ユーザは、上位コンピュータ３００において３次元ＣＡＤ／ＣＡＭ等のＣＡＥソフトウェアを実行させ、ワールド座標系と、制御アプリケーションおよびカメラとの位置関係を設定する（Ｓ１０）。次に、ユーザは、上位コンピュータ３００から、統合開発環境２００にＣＡＥデータを取り込む（Ｓ２０）。統合開発環境２００においてＣＡＥデータを取り込む方法として、例えば、ＣＡＥデータをＤＦＸファイルに変換し、この変換したデータを取り込む方法が挙げられる。
【００５１】
ユーザは、統合開発環境２００の設定画面で、ワールド座標系と、それぞれの制御アプリケーション６００におけるそれぞれのローカル座標系との座標系間の設定を行う（Ｓ３０）。
【００５２】
図５は、統合開発環境２００におけるＧＵＩ（Graphical User Interface）２１０の一例を示す図である。図５に示すように、ユーザは、ワールド座標系と各制御アプリケーションの各ローカル座標系との相対関係を、このＧＵＩ２１０において入力する。ＧＵＩ２１０上には計測ツールが備えられており、この計測ツールのデータが参考値としてＧＵＩ２１０上に表示される。
【００５３】
以上のような座標系間の設定を行った後、ユーザは、統合開発環境２００において、ユーザプログラムを作成する（Ｓ４０）。ユーザプログラムの作成後、ユーザは、統合開発環境２００からコントローラ１００にユーザプログラムをダウンロードする。
【００５４】
コントローラ１００は、ユーザプログラムに従い、制御アプリケーション６００の動作、および画像処理装置５１０における画像処理、およびサーボアンプ５４０の動作の制御を開始する（Ｓ６０）。
【００５５】
コントローラ１００、ユーザプログラムに従い、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０の時計７０１，７１１，５１１，５４１を補正する（Ｓ７０）。
【００５６】
第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０は、それぞれの更新周期で、所定時刻における位置データをコントローラ１００に送信する（Ｓ８０）。
【００５７】
コントローラ１００のワールド座標系管理部１０４は、同一時刻に更新された位置データについては、同一時刻の位置データとして、ワールド座標系の位置表現に変換する（Ｓ９０）。
【００５８】
コントローラ１００の位置データ推定処理部１０５は、画像処理装置５１０から新たな位置データを得られない場合に、サーボアンプ５４０から得られるエンコーダの値に基づいて、位置データの推定を行う（Ｓ１００）。
【００５９】
コントローラ１００のワールド座標系管理部１０４は、ユーザプログラムや統合開発環境２００にワールド座標系表現の位置を渡す（Ｓ１１０）。
【００６０】
ユーザプログラムは、ワールド座標系表現の指令位置をコントローラ１００に渡す（Ｓ１２０）。
【００６１】
コントローラ１００は、ワールド座標系表現の指令位置を各制御アプリケーション６００のそれぞれのローカル座標系に逆変換して第１制御アプリケーションエンジン７００、および第２制御アプリケーションエンジン７１０に渡す（Ｓ１３０）。
【００６２】
以下、図４においては図示を省略するが、ステップＳ７０〜Ｓ１３０の処理を制御の終了まで繰り返す。
【００６３】
（ワールド座標系と各ローカル座標系の座標変換式）
次に、ワールド座標系と各ローカル座標系の座標変換式について、図６および図７を参照しつつ説明する。図６および図７は、基準座標系と物体座標系との関係を説明するための図である。
【００６４】
ロボット５２０自身、工具、ワークＷ等の位置および姿勢を表現するには、ある基準となる直交座標系から見た場合の、物体に固定した直交座標系の原点位置、および各座標軸の方向によって表示を行う。前者を基準座標系、後者を物体座標系と呼ぶ。
【００６５】
図６に示すように、基準座標系をΣＡとし、その原点をＯＡ、直交する３軸をＸＡ，ＹＡ，ＺＡとする。また、物体座標系をΣＢとし、その原点をＯＢ、直交する３軸をＸＢ，ＹＢ，ＺＢとする。さらに、原点ＯＡから原点ＯＢ向かうベクトル（ＯＢ位置ベクトル）を基準座標系ΣＡで表示したものをＡＰＢと書き、３軸ＸＢ，ＹＢ，ＺＢの方向を向く単位ベクトルを基準座標系ΣＡで表したものを、ＡＸＢ，ＡＹＢ，ＡＺＢと書くこととする。
【００６６】
このとき、基準座標系ΣＡから見た物体の位置はＡＰＢで表現でき、その姿勢は（ＡＸＢ，ＡＹＢ，ＡＺＢ）で表現できる。なお、左上つき添字Ａは、そのベクトルが基準座標系ΣＡで表されていることを示す。
【００６７】
物体の姿勢は、３つのベクトル（ＡＸＢ，ＡＹＢ，ＡＺＢ）で表現することができ、これらを回転行列ＡＲＢで表す。
ＡＲＢ＝［ＡＸＢ，ＡＹＢ，ＡＺＢ］
【００６８】
図７に示すように、基準座標系ΣＡと物体座標系ΣＢとが与えられ、物体座標系ΣＢの基準座標系ΣＡに対する位置がＡｐＢ］で、また姿勢の回転行列がＡＲＢで与えられているとする。このとき、物体座標系ΣＢに関してＢｒで表示された点を、基準座標系ΣＡで表示すると、
Ａｒ＝ＡＲＢＢｒ＋ＡｐＢ
となる。
【００６９】
この関係は、４×４行列ＡＴＢを用いて
Ａｒ＝ＡＴＢＢｒ
と表すことができる。
【００７０】
この式は同次変換式と呼ばれ、ＡＴＢは同次変換行列と呼ばれる。同次変換式を用いることにより、並行移動と回転移動の両方を表すことが可能である。
【００７１】
本実施形態においては、コントローラ１００のワールド座標系管理部１０４は、このような同次変換式を用いることにより、各ローカル座標系からワールド座標系への変換と、ワールド座標系から各ローカル座標系への逆変換を行っている。
【００７２】
本実施形態においては、ローカル座標系Ａを用いた位置表現は次のようになる。
（ＸＡ，ＹＡ，ＺＡ，φＡ，θＡ，ψＡ，ｔＡ）
【００７３】
また、ワールド座標系を用いた位置表現
（ＸＷ，ＹＷ，ＺＷ，φＷ，θＷ，ψＷ，ｔＷ）は次のようになる。
【００７４】
ここで、（φｎ，θｎ，ψｎ）は、ロール、ピッチ、ヨー角であり、回転角を表す。また、ｔｎは時刻情報を表す。
【００７５】
（キャリブレーション方法）
次に、ロボット座標系とカメラ座標系との位置関係を同定するためのキャリブレーション方法について説明する。キャリブレーション方法は、従来のキャリブレーション方法を用いることができ、例えば、特開２０１２−１８７６５１号公報に開示されたキャリブレーション方法用いることができる。
【００７６】
本実施形態に係るキャリブレーションにおいては、図８に示すターゲットパターンが描画されたキャリブレーション用シートＳを用いられる。図８は、本実施形態におけるターゲットパターンが描画されたキャリブレーション用シートＳの一例を示す図である。このキャリブレーション用シートＳに示されたターゲットパターンは、その内部が約９０°ずつ塗り分けられた５個の円（マーク）を含む。なお、後述するように、基本的には４個のマークを用いてキャリブレーションが行われるが、追加的に配置された１個のマークは、キャリブレーション用シートＳの配置向きを所定方向に統一するために用いられる。
【００７７】
［第１段階］
第１段階としては、ユーザは、ターゲットパターンが描画されたキャリブレーション用シートＳをカメラ５１２の視野内に配置する。そして、ユーザは、コントローラ１００から画像処理装置５１０に対して撮像指示を与える。すると、画像処理装置５１０は、撮像によって得られた画像（ターゲットパターンが被写体として含まれる画像）をコントローラ１００に送信する。
【００７８】
コントローラ１００は、受信した画像に対して計測処理を行い、ターゲットパターンに含まれる四隅に配置された４個のマークについての各中心点の座標値を決定する。これによって、ターゲットパターンに含まれる４個のマークについての画像座標系の座標値［ｐｉｘｅｌ］がそれぞれ取得される。この取得される４個の座標値を、（ｘｉ１，ｙｉ１）、（ｘｉ２，ｙｉ２）、（ｘｉ３，ｙｉ３）、（ｘｉ４，ｙｉ４）とする。
【００７９】
［第２段階］
第２段階としては、ユーザは、第２コンベア５４４を動かしてターゲットパターンが描画されたキャリブレーション用シートＳをロボット５２０のトラッキング範囲（稼動範囲）内に配置するとともに、ロボット５２０を操作して、ターゲットパターンに含まれる４個のマークとロボット５２０との位置関係を対応付ける。
【００８０】
より具体的には、まず、ユーザは、コンベア５４４を動かして、キャリブレーション用シートＳをロボット５２０のトラッキング範囲（稼動範囲）内に配置する。なお、この第２コンベア５４４の移動前（キャリブレーション開始時）のエンコーダのカウント値が、予め取得されているものとする。このカウント値をＥ１とする。
【００８１】
続いて、ユーザは、ロボットコントローラ５２２に付属しているティーチングペンダントを操作するなどによって、ロボット５２０のハンド先端をキャリブレーション用シートＳ上の１つのマークと対応するように位置決めする。ユーザは、この位置決めされた状態で指示を与えることで、ロボットコントローラ５２２が把握しているロボット５２０の位置情報（ロボット５２０のハンド先端の位置を示すロボット座標系での座標値）が画像処理装置５１０からコントローラ１００へ送信される。このロボット５２０のハンド先端の位置決め、および、位置決め状態におけるロボット５２０の位置情報をコントローラ１００へ送信する処理は、ターゲットパターンに含まれる４個のマークのすべてに対して繰り返し実行される。
【００８２】
このような手順によって、ターゲットパターンに含まれる４個のマークに対応するロボット５２０の位置情報がそれぞれ取得される。この取得される４個のマークに対応するロボット５２０の位置情報を、例えば、（Ｘ１，Ｙ１）、（Ｘ２，Ｙ２）、（Ｘ３，Ｙ３）、（Ｘ４，Ｙ４）とする。
【００８３】
なお、キャリブレーション用シートＳがロボット５２０のトラッキング範囲（稼動範囲）内に配置された状態は、４個のマークすべてに対応するロボット５２０の位置情報が画像処理装置５１０からコントローラ１００へ送信されるまで維持される。
【００８４】
また、コントローラ１００は、第２コンベア５４４をロボット稼動範囲（上流）まで移動させた状態におけるカウント値についても格納する。このカウント値をＥ２とする。
【００８５】
［第３段階］
第３段階としては、ユーザは、第２コンベア５４４をさらに動かしてキャリブレーション用シートＳをロボット５２０のトラッキング範囲（稼動範囲）の最下流の位置に配置するとともに、ロボット５２０を操作して、ターゲットパターンに含まれる１個のマークとロボット５２０との位置関係を対応付ける。
【００８６】
より具体的には、まず、ユーザは、第２コンベア５４４を動かして、キャリブレーション用シートＳをロボット５２０のトラッキング範囲（稼動範囲）の下流側端部に配置する。
【００８７】
続いて、ユーザは、ティーチングペンダントを操作するなどによって、ロボット５２０のハンド先端をキャリブレーション用シートＳ上の１番目のマーク（第２段階で座標値（Ｘ１，Ｙ１）を取得したマーク）と対応するように位置決めする。ユーザは、この位置決めされた状態で指示を与えることで、ロボットコントローラ５２２が把握しているロボット５２０の位置情報（ロボット５２０のハンド先端の位置を示すロボット座標系での座標値）がコントローラ１００へ送信される。
【００８８】
このような手順によって、ターゲットパターンに含まれる１番目のマークに対応するロボット５２０の位置情報がそれぞれ取得される。この取得される１番目のマークに対応するロボット５２０の位置情報を（Ｘ５，Ｙ５）とする。
【００８９】
また、コントローラ１００は、第２コンベア５４４をロボット５２０の稼動範囲（下流）まで移動させ状態におけるカウント値についても格納する。このカウント値をＥ３とする。
【００９０】
［パラメータ算出処理］
上述したような第１〜第３段階の処理によって取得されたパラメータを用いて、まず、エンコーダからの１カウントあたりのワークＷの移動量ｄＸおよびｄＹが算出される。より具体的には、以下の式に従って算出される。
【００９１】
ｄＸ＝（Ｘ５−Ｘ１）／（Ｅ３−Ｅ２）
ｄＹ＝（Ｙ５−Ｙ１）／（Ｅ３−Ｅ２）
これらの式は、第２コンベア５４４をロボット５２０の稼動範囲（上流）まで移動させた状態と、第２コンベア５４４をロボット５２０の稼動範囲（下流）まで移動させた状態との間で、ロボット５２０のハンド先端がキャリブレーション用シートＳ内の同一のマークに位置決めされた場合に生じる、カウント値の変化量に対するロボット５２０の位置情報の変化量を算出することを意味する。これらの演算式によって、１カウントあたりのワークＷの移動量ｄＸおよびｄＹが決定される。すなわち、ロボット−コンベア間のキャリブレーションが実現される。
【００９２】
また、キャリブレーション用シートＳをカメラ５１２の視野内に配置した状態で取得されるカメラ座標系の座標値（ｘｉ１，ｙｉ１），（ｘｉ２，ｙｉ２），（ｘｉ３，ｙｉ３），（ｘｉ４，ｙｉ４）と、第２コンベア５４４をロボット５２０の稼動範囲（上流）まで移動させた状態で取得されるロボット座標系の座標値（Ｘ１，Ｙ１），（Ｘ２，Ｙ２），（Ｘ３，Ｙ３），（Ｘ４，Ｙ４）との対応関係に基づいて、座標系の変換に係る変換式の６個のパラメータＡ〜Ｆが決定される。すなわち、公知の手法を用いて、以下の式を満たす（あるいは、誤差が最小となる）パラメータＡ〜Ｆが決定される。
【００９３】
Ｘ＝Ａ・ｘｉ＋Ｂ・ｙｉ＋Ｃ
Ｙ＝Ｄ・ｘｉ＋Ｅ・ｙｉ＋Ｆ
これにより、ロボット座標系とカメラ座標系との位置関係を同定するためのキャリブレーションが実現される。
【００９４】
（位置を推定する方法）
次に、本実施形態におけるワークＷの位置の推定方法について説明する。画像処理装置５１０の計測は、コントローラ１００の通信周期に比べて長く、計測時間に定時性がない。したがって、コントローラ１００は、画像処理装置５１０から位置データを得られない周期では、コントローラ１００がワークＷの位置の推定を行う。
【００９５】
画像処理装置５１０は、時刻Ｎ−１と時刻Ｎで撮影した２枚の画像と、２枚の画像が撮影された時刻データを、産業用ネットワーク２を介して、コントローラ１００に送信する。
【００９６】
コントローラ１００の位置データ推定処理部１０５は、２枚の画像中のワークＷにおける端等の特徴点の移動ピクセル数と時刻の差を計測する。これにより、コントローラ１００の位置データ推定処理部１０５は、ワークＷの移動速度と移動方向を割り出す。そして、コントローラ１００の位置データ推定処理部１０５は、このベクトル情報を基に、コントローラ１００の制御周期におけるワークの位置を推定する。
【００９７】
（時計補正の方法）
次に、時計補正の方法について説明する。時計補正の方法は、従来の方法を用いることができ、例えば、特許第５７９４４４９号に開示された方法用いることができる。
【００９８】
コントローラ１００は、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０に対して、時刻合わせのための時間同期フレームを送信する機能を有している。以下、説明を簡単にするために、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０をスレーブユニットと呼びこととする。
【００９９】
各スレーブユニットは、コントローラ１００から時間同期フレームを受信すると、そのフレームにデータを追加したりすることなくそのまますぐに次のスレーブユニットに向けて時間同期フレームを送信する。これにより、１つのスレーブユニットで時間同期フレームを受信してから、次のスレーブユニットに送信するまでに要する時間はほぼ一定となる。また、時間同期フレームがスレーブユニット内部の線路や、スレーブユニット間のシステムバスを移動する時間も、線路長から一意に規定され一定となる。よって、次のスレーブユニットに時間同期フレームを転送するための要する時間は、スレーブユニットであればほぼ等しいと言える。
【０１００】
従って、あるスレーブユニットから時間同期フレームが送信されたときから、その時間同期フレームが次のスレーブユニットで受信されるとともに当該次のスレーブユニットから出力されるまでに要する時間は、各スレーブユニットとも等しく一定とみなせる。係る一定の時間を基準時間と称してｔ０とすると、つまり、コントローラ１００から時間同期フレームが送信されたときから、その時間同期フレームが１番目のスレーブユニットから出力されるまでに要する伝搬遅延時間は、ｔ０となる。
【０１０１】
同様に、その１番目のスレーブユニットから時間同期フレームが送信されたときから、その時間同期フレームが２番目のスレーブユニットで受信され、次のスレーブユニットに対して出力されるまでに要する伝搬遅延時間は、ｔ０となる。従って、コントローラ１００から時間同期フレームが送信されたときから、その時間同期フレームが２番目のスレーブユニットから送信されるまでに要する伝搬遅延時間は、２×ｔ０となる。同様に、コントローラ１００から時間同期フレームが送信されたときから、その時間同期フレームがＮ番目のスレーブユニットの送信制御部から送信されるまでに要する伝搬遅延時間は、Ｎ×ｔ０となる。なお、各スレーブユニットの内部処理、すなわち、時間同期フレームを受信してから次のスレーブユニットに対して出力するまでに要する時間に比べて、スレーブユニット間のシステムバス上を伝送する時間は非常に短く無視することもできる。よって、係るｔ０は、スレーブユニットの内部処理に要する時間としてもよい。
【０１０２】
このように、各スレーブユニットの接続位置で、ほぼ固定的な伝搬遅延時間となるので、Ｎ番目のスレーブユニットにおいては、伝搬遅延時間に基づく補正時間として、“Ｎ×ｔ０”をメモリあるいはレジスタに格納する。本実施形態の例では、１番目の画像処理装置５１０のレジスタには、“ｔ０”が格納され、２番目の第１制御アプリケーションエンジン７００のレジスタには、“２×ｔ０”が格納され、３番目の第２制御アプリケーションエンジン７１０のレジスタには、“３×ｔ０”が格納される。
【０１０３】
このように、各スレーブユニットのレジスタに格納する補正時間は、コントローラ１００に近いスレーブユニットから順にｔ０ずつ加算した時間（Ｎ番目のスレーブユニットは“Ｎ×ｔ０”）となる。従って、ユーザがマニュアル操作で補正時間をレジスタに格納する場合、ユーザは設定対象のスレーブユニットがコントローラ１００から何番目のスレーブユニットであるかを確認し、設定ツール装置を用いて対応する補正時間を個々に設定したり、各スレーブユニットに補正時間の設定用のスイッチなどを設け、ユーザがそのスイッチを操作してユニットごとに設定したりすることもできる。このスイッチは、例えばＮ番目であることを特定するスイッチとする。すると、各スレーブユニットは、予め記憶保持しておいた補正の基準時間ｔ０とスイッチで特定されるＮを乗算して補正時間を求めレジスタに格納する。
【０１０４】
また、マスタであるコントローラ１００が、各スレーブユニットのレジスタに対して補正時間を自動的に設定するようにしても良い。すなわち、電源投入時やシステム立ち上げ時の初期処理として、コントローラ１００が、各スレーブユニットの接続位置情報を取得し、補正時間の設定対象の各スレーブユニットの補正時間を算出すると共に、その算出した補正時間をそれぞれのスレーブユニットに通知する。そして、係る通知を受けたスレーブユニットは、送られてきた補正時間をレジスタに格納する。すなわち、コントローラ１００は、通信に先立ち、各スレーブユニットに対し、プロファイル要求メッセージを送信する。各スレーブユニットは、自己のプロファイル（機種情報等）を送る。これにより、コントローラ１００は、受信した各ノードを構成するスレーブユニットのプロファイル情報から各ノードに何のスレーブユニットがセットされているのかの構成情報を認識する。そこでコントローラ１００は、その収集した構成情報に基づき、各スレーブユニットが何番目に接続されているのかを求めるとともに、基準時間ｔ０を乗算して補正時間を求めることができる。
【０１０５】
次に、実際の制御実行時の時刻合わせについて説明する。コントローラ１００は、時計１０８の時刻情報をブロードキャスト配信する。すなわち、コントローラ１００は、時刻合わせの条件を満たすと、時間同期フレームのための送信データ（時刻情報）を送信準備を開始する。なお、送信条件は、本実施形態では、送信タイマのタイムアップである。よって、時間同期フレームの送信処理は、送信タイマで設定される時間間隔で定時処理されることになる。この時間同期フレームは、最優先で送信される。
【０１０６】
コントローラ１００は、マスタ時刻となる時計１０８の時刻情報をラッチし、時間同期フレームのデータ部内に格納する。コントローラ１００は、このようにして生成した時間同期フレームを符号化し、１番目のスレーブユニットに対して送信する。コントローラ１００は、時刻情報をラッチしたならば、時間同期フレームを最優先で遅滞なく送信する。
【０１０７】
そして、時間同期フレーム（シリアル）は、１番目のスレーブユニット（本実施形態では、画像処理装置５１０）に受信される。１番目のスレーブユニットは、時間同期フレームに格納されたマスタ時刻を取得できる。
【０１０８】
１番目のスレーブユニットは、受信した時間同期フレームで送られてきたマスタ時刻をラッチし、当該マスタ時刻に対して、レジスタに格納された補正時間を加算することで現在の時刻を求め、その求めた時刻に基づいて自己の時計（本実施形態では、画像処理装置５１０の時計５１１）を補正する。
【０１０９】
求めた現在時刻に基づく時計の補正は、例えば、時計の時刻を、上記の求めた現在の時刻によって上書きすることにより更新する処理を行うことで実現できる。また、このように上書きにより更新すると、補正前後で時計の示す値が離散的に飛んでしまう。それを防ぐために、１番目のスレーブユニットは、所定の補正アルゴリズム等を用い、時計の時間の進む速度を速めたり遅らせたりすることで、時刻を連続的に徐々にマスタ時刻に合わせるように修正するようにしてもよい。
【０１１０】
また、１番目のスレーブユニットは、２番目のスレーブユニットに対して、時間同期フレームを送信する。
【０１１１】
このようにしてデジチェーン方式で送信された時間同期フレームは、次段に隣接するスレーブユニット（ここでは、２番目の第１制御アプリケーションエンジン７００）にて受信される。そして、上記と同様に、２番目のスレーブユニットは、受信した時間同期フレームに格納されていたマスタ時刻を取得し、補正時間（２×ｔ０）を加算した値を現在時刻となるように時計（本実施形態では、第１制御アプリケーションエンジン７００の時計７０１）を補正する。そして、第１制御アプリケーションエンジン７００は、受信した時間同期フレームを３番目のスレーブユニットに対して送信する。
【０１１２】
このようにすることで、各スレーブユニットは、コントローラ１００から送られてきた時間同期フレームをデジチェーン方式で順次隣接するスレーブユニットに転送する。さらに、Ｎ番目のスレーブユニットの時刻は、マスタ時刻に対してコントローラ１００との間に存在するＮ−１個分のスレーブユニットの局遅延（（Ｎ−１）×ｔ０）だけ加算することで補正する
【０１１３】
なお、上述した時計補正の方法は、あくまでも一例であり、例えば、特許第５１４１９７２号に開示された方法の他、他の方法を用いてもよい。
【０１１４】
（ファクションブロック）
ワールド座標系で表現された位置情報は、ＩＥＣ６１１３１−３のファンクションブロックの出力情報として出力されるようにしてもよい。図９は、ファンクションブロック１８０を概略的に示す概念図である。また、図１０は、ファンクションブロック１９０を概略的に示す概念図である。
【０１１５】
ファンクションブロック１８０は、たとえば、コントローラ１００の主メモリや記憶装置等に格納されている。ファンクションブロック１８０は、図９に示すように、ワールド座標系の位置と時刻が可能された構造配列変数Ｗｏｒｌｄを受け付ける受付部１８１と、ＴＲＵＥまたはＦＡＬＳＥを受け付けるＥｎａｂｌｅ部１８２と、第Ｎ制御アプリケーションのローカル座標系の位置と時刻が格納された構造体変数Ａｐｐｌｉ［Ｎ］を受け付ける受付部１８３とを備えている。
【０１１６】
また、ファンクションブロック１８０は、ワールド座標系の位置と時刻が可能された構造配列変数Ｗｏｒｌｄを出力する出力部１８４と、ファンクションブロック１８０が正常に動作しているかどうかを示す出力変数Ｓｔａｔｕｓを出力する出力部１８５と、異常になった場合に出力変数Ｅｒｒｏｒを出力する出力部１８６と、エラーコードが格納される出力変数ＥｒｒｏｒＩＤを出力する出力部１８７とを備えている。
【０１１７】
ファンクションブロック１９０は、たとえば、コントローラ１００の主メモリや記憶装置等に格納されている。ファンクションブロック１９０は、図１０に示すように、ワールド座標系の位置と時刻が可能された構造配列変数Ｗｏｒｌｄを受け付ける受付部１９１を備えている。
【０１１８】
また、ファンクションブロック１９０は、ワールド座標系の位置と時刻が可能された構造配列変数Ｗｏｒｌｄを出力する出力部１９３と、第Ｎ制御アプリケーションのローカル座標系の位置と時刻が格納された構造体変数Ａｐｐｌｉ［Ｎ］を出力する出力部１９４と、ファンクションブロック１９０が正常に動作しているかどうかを示す出力変数Ｓｔａｔｕｓを出力する出力部１９５と、異常になった場合に出力変数Ｅｒｒｏｒを出力する出力部１９６と、エラーコードが格納される出力変数ＥｒｒｏｒＩＤを出力する出力部１９７とを備えている。
【０１１９】
図１１は、ＩＥＣ６１１３１−３で定義されたラダーダイアグラムでのプログラム例を示す図である。図１１に示すように、ＳＷ１がＴＲＵＥのとき、第１制御アプリケーションの座標系の位置と時刻が格納された構造体配列変数Ａｐｐｌｉ［１］が変換され、変換された座標系の位置と時刻は、ワールド座標系の構造体配列変数Ｗｏｒｌｄに格納され、出力部１８４から出力される。
【０１２０】
ファンクションブロック１８０が正常に動作している際には、出力部１８５から出力される出力変数ＳｔａｔｕｓはＴＲＵＥとなる。異常になった場合には、出力部１８６から出力される出力変数ＥｒｒｏｒがＴＲＵＥとなり、出力変数ＥｒｒｏｒＩＤにエラーコードが格納されて出力部１８７から出力される。
【０１２１】
また、図１１に示すように、ＳＷ２がＴＲＵＥのとき、ワールド座標系の位置と時刻が可能された構造配列変数Ｗｏｒｌｄが受付部１９１に受け付けられると、第１制御アプリケーションのローカル座標系の位置と時刻に変換され、構造体配列変数Ａｐｐｌｉ［１］に格納されて出力部１９４から出力される。
【０１２２】
ファンクションブロック１９０が正常に動作している際には、出力部１９５から出力される出力変数ＳｔａｔｕｓはＴＲＵＥとなる。異常になった場合には、出力部１９６から出力される出力変数ＥｒｒｏｒがＴＲＵＥとなり、出力変数ＥｒｒｏｒＩＤにエラーコードが格納されて出力部１９７から出力される。
【０１２３】
ワールド座標系で表現された位置情報は、上述のようなファンクションブロックの出力情報として出力する態様の他に、図５に示した統合開発環境２００のＧＵＩに表示させるようにしてもよい。
【０１２４】
以上のように本実施形態によれば、コントローラ１００、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０におけるそれぞれの時計１０８，７０１，７１１，５１１，５４１を補正した上で、コントローラ１００は、第１制御アプリケーションエンジン７００、第２制御アプリケーションエンジン７１０、画像処理装置５１０、およびサーボアンプ５４０から、それぞれの周期で更新したそれぞれのローカル座標系の位置と、更新した時刻情報とを受信する。したがって、異なる座標系で表され、かつ、異なる周期で更新されるそれぞれの位置情報を、統一されたワールド座標系の位置情報として、それぞれに共通した時刻で管理することが可能になる。
【０１２５】
その結果、コントローラ１００で動作するユーザプログラムは、ワールド座標系で表現された位置を使って指令を行ったり、位置の監視を行ったりすることができる。
【０１２６】
また、更新周期が長い場合や、定時性がない制御アプリケーションエンジンや画像処理装置５１０から位置データが出力されるであっても、コントローラ１００における制御周期で位置を推定することができる。その結果、コントローラ１００における制御周期で制御アプリケーションエンジンに指令位置を出力することができる。
【０１２７】
さらに、本実施形態によれば、ワールド座標系の位置を管理するだけでなく、速度および加速度データを算出することができるので、ワールド座標系の位置、速度および加速度データを、上位コンピュータ３００、タッチパネル４００、および統合開発環境２００に送信することができる。また、統合開発環境２００においては、出力されたワールド座標系の位置、速度および加速度データを、ＧＵＩで表示することができる。
【０１２８】
本実施形態においては、第１制御アプリケーションエンジン７００、および第２制御アプリケーションエンジン７１０から、速度、加速度、トルク、電流値等の情報を、コントローラ１００に送信するようにしてもよい。なお、第１制御アプリケーションエンジン７００、および第２制御アプリケーションエンジン７１０はあくまでも例示であり、必要に応じて制御アプリケーションエンジンの数は適宜増減可能である。
【０１２９】
（第２実施形態）
次に、本開示の第２実施形態について添付図面を参照しつつ説明する。第１実施形態においては、第１制御アプリケーションエンジン７００と、第２制御アプリケーションエンジン７１０とが、コントローラ１００の外部に設けられた態様について説明した。しかしながら、本実施形態では、第１制御アプリケーションエンジン７００と、第２制御アプリケーションエンジン７１０とが、コントローラ１００の内部に設けられている点が第１実施形態と異なる。
【０１３０】
図１２は、本実施形態における制御システム１の機能ブロックを示す図である。図１２に示すように、本実施形態においては、第１制御アプリケーションエンジン７００と、第２制御アプリケーションエンジン７１０とが、コントローラ１００の内部に設けられている。
【０１３１】
また、第１制御アプリケーションエンジン７００および第２制御アプリケーションエンジン７１０には時計が設けられておらず、ロボット５２０、工作機５３０等の制御アプリケーション６００に時計６０１が設けられている。
【０１３２】
さらに、図示は省略するが、位置情報を更新する位置情報更新部と、位置情報を更新した時刻と位置情報とをコントローラ１００に送信する送信部も、制御アプリケーション６００に設けられている。
【０１３３】
このように構成した場合でも、制御アプリケーション６００、画像処理装置５１０、およびサーボアンプ５４０におけるそれぞれの時計６０１，５１１，５４１を補正した上で、コントローラ１００は、制御アプリケーション６００、画像処理装置５１０、およびサーボアンプ５４０から、それぞれの周期で更新したそれぞれのローカル座標系の位置と、更新した時刻情報とを受信する。したがって、異なる座標系で表され、かつ、異なる周期で更新されるそれぞれの位置情報を、統一されたワールド座標系の位置情報として、それぞれに共通した時刻で管理することが可能になる。
【０１３４】
（変形例）
上述した実施形態では、画像処理装置５１０から送信される画像に基づいてワークＷの位置を推定する態様について説明した。しかしながら、本発明はこのような態様に限定される訳ではない。例えば、サーボアンプ５４０に備えられたによるカウンタ値を、サーボアンプ５４０からコントローラ１００に送信し、このカウンタ値を基にしてワークＷの位置を推定するようにしてもよい。
【０１３５】
また、上述した実施形態では、画像処理装置５１０から画像を送信し、コントローラ１００において画像を解析することにより、ワークＷの位置を推定する態様について説明した。しかしながら、本発明はこのような態様に限定される訳ではない。例えば、画像処理装置５１０において、時刻Ｎ−１と時刻Ｎで撮影した２枚の画像中のワークＷにおける端等の特徴点の移動ピクセル数と時刻の差を計測し、ワークＷの移動速度と移動方向を割り出すようにしてもよい。そして、画像処理装置５１０からコントローラ１００に対して、ワークＷの移動速度と移動方向の情報を送信し、コントローラ１００においてワークＷの位置を推定するようにしてもよい。
【０１３６】
以上の実施形態は例示であり、この発明の範囲から離れることなく様々な変形が可能である。上述した複数の実施の形態は、それぞれ単独で成立し得るものであるが、実施の形態同士の組みあわせも可能である。また、異なる実施の形態の中の種々の特徴も、それぞれ単独で成立し得るものであるが、異なる実施の形態の中の特徴同士の組みあわせも可能である。
【符号の説明】
【０１３７】
１      制御システム
１００  コントローラ
１０１  時計
５１０  画像処理装置
５１１  時計
６００  制御アプリケーション
７００  第１制御アプリケーションエンジン
７０１  時計
７１０  第２制御アプリケーションエンジン
７１１  時計
【図１】
2019212123.tif 000003
【図２】
2019212123.tif 000004
【図３】
2019212123.tif 000005
【図４】
2019212123.tif 000006
【図５】
2019212123.tif 000007
【図６】
2019212123.tif 000008
【図７】
2019212123.tif 000009
【図８】
2019212123.tif 000010
【図９】
2019212123.tif 000011
【図１０】
2019212123.tif 000012
【図１１】
2019212123.tif 000013
【図１２】
2019212123.tif 000014