(58)【調査した分野】(Int.Cl.,DB名)
前記移動装置は、前記全方位カメラから前記検査対象物までの距離を一定に維持した状態で、前記全方位カメラの周囲を前記検査対象物に周回させる、請求項1に記載の検査システム。
【発明を実施するための形態】
【0018】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【0019】
<第1の実施の形態>
[A.検査システム1]
図1を参照して、本実施の形態に従う検査システム1の基本構成について説明する。
図1は、本実施の形態に従う検査システム1の基本構成を示す模式図である。
【0020】
図1に示されるように、検査システム1は、たとえば、コントローラ100と、移動装置としてのロボット200と、全方位カメラ300とで構成されている。
【0021】
コントローラ100は、たとえば、PLC(Programmable Logic Controller)であり、検査システム1全体を制御する。一例として、コントローラ100は、画像センサ51、ロボット200、全方位カメラ300などを制御する。
【0022】
コントローラ100は、たとえば、画像センサ51およびカウンタ52とデイジーチェーンでフィールドネットワーク54に接続されている。フィールドネットワーク54として、たとえば、EtherCAT(登録商標)が採用される。また、コントローラ100は、フィールドネットワーク56を介してロボット200と通信接続されている。フィールドネットワーク56として、たとえば、EtherNET(登録商標)が採用される。
【0023】
検査システム1は、コンベア20A上を搬送されるワークW(検査対象物)に対して所定の作業を行う。ワークWは、製品または半製品であり、たとえば、電子部品であってもよいし、食料品であってもよい。
【0024】
画像センサ51は、コンベア20Aを定期的に撮影し、得られた入力画像からワークWを検知する。一例として、画像センサ51は、テンプレートマッチングなどの画像処理によりワークWを検知する。入力画像内のワークWの座標値は、コントローラ100に出力される。
【0025】
カウンタ52は、エンコーダ53から発生するパルス波に基づいてコンベア20Aの移動量を計測する。より具体的には、エンコーダ53は、コンベア20Aの移動量に応じてパルス信号を発生する。カウンタ52は、エンコーダ53からパルス信号を受け、当該パルス信号に含まれるパルス数をカウントすることでコンベア20Aの移動量を計測する。カウンタ52は、パルス波のカウント値をコントローラ100に一定の通信間隔で送信する。
【0026】
コントローラ100は、画像センサ51から受信した入力画像内のワークWの座標値(カメラ座標系)を予め定められた座標変換式に代入し、カメラ座標系のワークWの座標値をワールド座標系の座標値に変換する。ワールド座標系は、ロボット200を制御するための座標系である。コントローラ100は、カウンタ52からカウント値を受信する度に、前回からのコンベア20A上の移動量を算出し、ワールド座標系で示されるワークWの座標値に当該移動量を加算する。1カウントに相当するコンベア20Aの移動量は、予め設定されている。コントローラ100は、ワールド座標系で示されるワークWの座標値を逐次的に更新することで、コンベア20Aを搬送されるワークWをトラッキングすることができる。
【0027】
コントローラ100は、ワークWがコンベア20A上の予め定められた範囲に到達したことに基づいて、ロボット200にワークWのピックアップ命令を送る。このとき、コントローラ100は、コンベア20A上のワークWの座標値をロボット200に逐次的に送る。これにより、ロボット200は、ワークWの現在位置を把握することができ、コンベア20A上のワークWをピックアップすることができる。
【0028】
その後、ロボット200は、ワークWの姿勢を維持した状態で全方位カメラ300の周囲をワークWに周回させ、当該ワークWをコンベア20Bに移動する。「ワークWの姿勢を維持した状態」とは、ワークWが自転しないようにワークWを固定している状態を意味し、周回過程でワークWの各面が常に同じ方向を向いている状態のことをいう。コントローラ100は、ワークWが全方位カメラ300の周囲を周回している間にワークWを撮影し、その撮影結果として得られた入力画像を用いてワークWの外観を検査する。当該検査処理の詳細については後述する。
【0029】
なお、
図1には、検査システム1が1つのコントローラ100で構成されている例が示されているが、検査システム1は、複数のコントローラ100で構成されてもよい。また、
図1には、検査システム1が1つのロボット200で構成されている例が示されているが、検査システム1は、複数のロボット200で構成されてもよい。また、
図1には、検査システム1が1つの全方位カメラ300で構成されている例が示されているが、検査システム1は、複数の全方位カメラ300で構成されてもよい。
【0030】
[B.ワークWの撮影処理]
図2〜
図4を参照して、全方位カメラ300によるワークWの撮影処理について説明する。
【0031】
図2は、検査対象物であるワークWの一例を表わす図である。以下では、ワークWの向きを説明する便宜のために、ワークWが立方体である前提で説明を行う。
図2に示されるように、ワークWの「E面」は、ワークWの「A面」〜「D面」に直交しているとする。ワークWの「A面」は、ワークWの「C面」に対向しているとする。ワークWの「B面」は、ワークWの「D面」に対向しているとする。
【0032】
なお、検査対象物であるワークWの形状は、立方体に限定されず、直方体などの多面体であってもよいし、円筒形であってもよいし、その他の形状であってもよい。
【0033】
図3は、ロボット200が全方位カメラ300の周囲をワークWに周回させている過程を示す図である。
【0034】
全方位カメラ300は、全方位ミラー331と、撮影ユニット332とで構成されている。全方位ミラー331は、周囲360°から受けた光を反射し、当該反射光を撮影ユニット332に導く。これにより、全方位カメラ300は、周囲360°を撮影することができる。
【0035】
上述したように、ロボット200は、ワークWの姿勢を維持した状態で全方位カメラ300の周囲をワークWに周回させる。このとき、ワークWの姿勢が維持されているので、全方位カメラ300から見た場合のワークWの外観は、ワークWの位置ごとに変わる。
【0036】
典型的には、ワークWの周回軌道は、円形である。すなわち、ロボット200は、全方位カメラ300からワークWまでの距離を一定に維持した状態で、全方位カメラ300の周囲をワークWに周回させる。これにより、ワークWが全方位カメラ300を周回している間、ワークWと全方位カメラ300との間の距離が常に一定になり、全方位カメラ300から得られた画像に写るワークWの大きさは一定になる。
【0037】
典型的には、ロボット200は、ワークWが全方位カメラ300を周回している間、当該ワークWを停止させない。これにより、順次搬送されるワークWを停止させずに連続的に検査することができる。また、ワークWの周回処理がワークWのピック&プレース動作の途中に実施されることで、ワークWの周回処理が追加されたとしても、タクトタイムは増加しない。
【0038】
ロボット200は、ワークWを周回させている間、ワークWの位置(またはアームの位置)を定期的にコントローラ100に送信する。コントローラ100は、受信したワークWの位置が予め定められた周回軌道上に存在する場合に、ロボット200が全方位カメラ300の周囲をワークWに周回させていると判断する。コントローラ100は、ワークWが全方位カメラ300を周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力する。これにより、全方位カメラ300は、様々な方向からワークWを撮影することができる。その結果、コントローラ100は、ワークWを異なる方向から表わした複数の入力画像を全方位カメラ300から取得することができる。
【0039】
図4は、全方位カメラ300から得られた入力画像の一例を示す図である。一例として、タイミングt1において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークWの「D面」を表わす入力画像33Aが得られる。同様に、タイミングt2において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークWの「A面」を表わす入力画像33Bが得られる。同様に、タイミングt3において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークWの「B面」を表わす入力画像33Cが得られる。同様に、タイミングt4において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークWの「C面」を表わす入力画像33Dが得られる。
【0040】
撮影指示が出力される間隔は、たとえば、ワークWが全方位カメラ300を1周するのにかかる周回時間を撮影回数で割ることで算出される。たとえば、周回時間が1秒であり、撮影回数が4回である場合には、撮影間隔は、0.25秒(=1/4)となる。当該周回時間および当該撮影回数は、予め設定されていてもよいし、任意に設定されてもよい。
【0041】
このように、コントローラ100は、ワークWが周回している間の異なるタイミングで全方位カメラ300に撮影指示を出力することで、ワークWを異なる方向から表わした入力画像30A〜30Dを1つの全方位カメラ300から取得することができる。
【0042】
なお、
図3には、ワークWが全方位カメラ300の周囲を1周している例について説明を行ったが、必ずしも、ワークWは、全方位カメラ300の周囲を1周する必要はない。すなわち、ワークWは、姿勢を維持した状態で全方位カメラ300の周囲の少なくとも一部を周回すればよい。また、ワークWは、水平面を周回する必要はなく、全方位カメラ300の視野内の一部または全部において姿勢が維持されていれば、任意の方向に周回させることができる。
【0043】
[C.コントローラ100の機能構成]
図5〜
図10を参照して、コントローラ100の機能について説明する。
【0044】
図5は、コントローラ100の機能構成の一例を示す図である。
図5に示されるように、コントローラ100は、主要なハードウェア構成として、プロセッサ102と、二次記憶装置108とを含む。プロセッサ102は、機能構成として、取得部150と、特定部152と、検査部154とを含む。
【0045】
なお、
図5には、取得部150、特定部152、検査部154がコントローラ100に実装されている例が示されているが、これらの機能の少なくとも一部は、他の外部装置に実装されてもよい。たとえば、当該機能の少なくとも一部は、画像センサ51(
図1参照)やサーバなどの外部装置に実装されてもよい。この場合、コントローラ100と外部装置とが協働して本実施の形態に従う各種処理を実現する。
【0046】
以下では、取得部150、特定部152、検査部154について順に説明する。
(C1.取得部150)
取得部150は、ワークWが全方位カメラ300を周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力し、ワークWを異なる方向から表わした複数の入力画像を全方位カメラ300から取得する。ワークWの撮影方法については
図3で説明した通りであるので、その説明については繰り返さない。
【0047】
(C2.特定部152)
上述したように、ロボット200は、ワークWの姿勢を維持した状態で全方位カメラ300を周回させる。このとき、ワークW自体は自転しないが、全方位カメラ300から見た場合のワークWの向きが変わる。以下では、全方位カメラ300に対してワークWが向いている方向を「ワークの向き」とも称する。すなわち、ワークの向きとは、周回面上を通り、ワークWの中心を通る所定の基準軸と、ワークWおよび全方位カメラ300を結ぶ直線との間の角度のことをいう。
【0048】
特定部152は、ワークWの撮影タイミングにおけるワークWの向きを特定する。ワークWの向きの特定方法には様々な方法が採用される。以下では、
図6〜
図9を参照して、ワークWの向きの特定方法について説明する。
【0049】
図6は、ワークWの向きを特定するための第1特定方法を説明するための図である。
図6には、全方位カメラ300の位置P1と、ワークWが全方位カメラ300を周回している所定タイミングにおけるワークWの位置P2とが示されている。
【0050】
全方位カメラ300の位置P1は、たとえば、カメラ位置134(
図5参照)として規定されている。カメラ位置134は、全方位カメラ300の設置時に設定されていてもよいし、ユーザによって任意に設定されてもよい。カメラ位置134は、たとえば、xy平面上の座標値として表わされてもよいし、xyz平面上の座標値として表わされてもよい。当該座標値は、たとえば、全方位カメラ300の中心を表わす。
【0051】
ワークWの位置P2は、ロボット200から取得される。より具体的には、コントローラ100は、ワークWの撮影指示を全方位カメラ300に出力したのと同時に、ワークWの位置P2を取得するための要求をロボット200に出力する。これにより、コントローラ100は、撮影時におけるワークWの位置P2をロボット200から取得することができる。ワークWの位置P2は、たとえば、xy平面上の座標値として表わされてもよいし、xyz平面上の座標値として表わされてもよい。当該座標値は、たとえば、ワークWの中心を表わす。
【0052】
特定部152は、全方位カメラ300の位置P1からワークWの位置P2に向かう方向をワークWの撮影方向として特定する。当該撮影方向は、全方位カメラ300から見た場合のワークWの方向に相当する。ワークWが周回軌道に到達した時点でのワークWの向きが常に同じであれば、当該撮影方向とワークWの向きとは、一対一に対応する。すなわち、ワークWの向きは、周回軌道上の同じ地点では常に同じになる。特定部152は、ワークWの撮影方向とワークWの向きとの対応関係に基づいて、ワークWの撮影方向からワークWの向きを特定する。
【0053】
特定部152は、全方位カメラ300から得られた全ての入力画像(たとえば、第1,第2入力画像)についてワークWの向きを特定する。より具体的には、特定部152は、第1入力画像の撮影タイミングにおけるワークWの位置と、全方位カメラ300の位置とに基づいて、当該第1入力画像に写るワークWの向きを特定する。同様に、特定部152は、第2入力画像の撮影タイミングにおけるワークWの位置と、全方位カメラ300の位置とに基づいて、当該第2入力画像に写るワークWの向きを特定する。
【0054】
次に、
図7を参照して、ワークWの向きの他の特定方法について説明する。
図7は、ワークWの向きを特定するための第2特定方法を説明するための図である。
【0055】
図7には、全方位カメラ300から得られた入力画像の一例として入力画像33Bが示されている。全方位カメラ300を用いた場合、入力画像33Bの長辺方向の位置が全方位カメラ300から見た場合の被写体の向きに対応する。すなわち、入力画像33B内のワークWの座標値とワークWの向きとは、一対一に対応する。この点に着目して、特定部152は、入力画像内のワークWの座標値と当該ワークWの向きとの対応関係に基づいて、入力画像33Bから検知されたワークWの座標値に対応するワークWの向きを特定する。
図7の例では、特定部152は、ワークWの中心位置P3に対応する「135°」を入力画像33Bの撮影タイミングにおけるワークWの向きとして特定している。
【0056】
次に、
図8および
図9を参照して、ワークWの向きの他の特定方法について説明する。
図8は、ロボット200がワークWを把持する部分である把持部分210を示す図である。
【0057】
図8には、把持部分210の拡大図が示されている。把持部分210の表面の異なる位置には、それぞれ、異なるマークが付されている。当該マークは、ワークWの向きを特定するための基準となる。マークの違いは、色の違いにより表わされてもよいし、形状の違いにより表れてもよい。
図8の例では、把持部分210にメモリ211が付されており、メモリ211は、色が異なるマーク211A,211Bで表わされている。
【0058】
なお、マークが付される場所は、把持部分210に限定されず、マークは、全方位カメラ300の視野に含まれる位置であればロボット200の任意の場所に付される。
【0059】
図9は、ワークWの向きを特定するための第3特定方法を説明するための図である。特定部152は、ワークWを撮影して得られた入力画像38から把持部分210を検知する。次に、特定部152は、検知した把持部分210の中心または略中心に写っているマークの種類を特定する。その後、特定部152は、マークの種類ごとにワークWの向きを規定しているマーク情報128を参照して、特定されたマークに関連付けられている向きを、ワークWの向きとして特定する。
図9の例では、マーク情報128においてマーク211Bに対応付けられている「90°」がワークWの向きとして特定される。
【0060】
特定部152は、全方位カメラ300から得られた全ての入力画像(たとえば、第1,第2入力画像)についてワークWの向きを特定する。より具体的には、特定部152は、第1入力画像に写っているマークを検知し、マーク情報128において当該検知されたマークに対応付けられている向きを特定し、当該特定された向きを第1入力画像に写るワークWの向きとして特定する。同様に、特定部152は、第2入力画像に写っているマークを検知し、マーク情報128において当該検知されたマークに対応付けられている向きを特定し、当該特定された向きを第2入力画像に写るワークWの向きとして特定する。
【0061】
なお、上述では、ワークWが周回軌道に到達した時点におけるワークWの向きが常に同じである前提で説明を行ったが、ワークWが周回軌道に到達した時点におけるワークWの向きは、常に同じである必要はない。当該時点でのワークWの向きが常に同じなくとも、周回軌道上の一地点でのワークWの向きが検知されれば、特定部152は、当該一地点でのワークWの向きを基準として、ワークWの向きを特定することができる。当該一地点でのワークWの向きの特定は、たとえば、テンプレートマッチングなどの画像処理によって実現される。
【0062】
(C3.検査部154)
上述したように、取得部150は、ワークWが全方位カメラ300を周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力し、ワークWを異なる方向から表わした複数の入力画像を全方位カメラ300から取得する。検査部154は、取得部150によって取得された複数の入力画像を用いて検査対象物であるワークWを検査する。
【0063】
図10を参照して、検査部154によるワークWの検査処理について説明する。
図10は、検査部154によるワークWの検査処理を概略的に示す概念図である。
【0064】
図10には、入力画像の一例として、ワークWの「A面」を撮影して得られた入力画像33Bが示されている。以下では、取得部150から得られた入力画像の1つである入力画像33Bを例に挙げて、検査部154による検査処理について説明する。
【0065】
検査部154は、基準画像情報135を参照して、入力画像33Bに写るワークWを検査する。基準画像情報135は、検査対象物と同種類の物体を予め撮影して得られた複数の基準画像を含む。各基準画像には、当該基準画像に写る物体の向きが対応付けられている。基準画像情報135は、検査処理が実行される前に予め準備されており、たとえば、コントローラ100の二次記憶装置108(
図12参照)などに予め格納されている。
【0066】
上述したように、特定部152は、入力画像33Bに写るワークWの向きを特定する。検査部154は、基準画像情報135を参照して、入力画像33Bに写るワークWの向きに対応付けられている基準画像を特定する。
図10例では、ワークWの向き「135°」に対応付けられている基準画像135Aが特定される。検査部154は、特定された基準画像135Aと入力画像33Bとを比較し、当該比較結果に基づいて入力画像33Bに写るワークWを検査する。
【0067】
典型的には、検査部154は、特定された基準画像135Aを入力画像33B上で走査しながら、基準画像135Aの各部分と入力画像33Bとの類似度群を算出し、当該類似度群の内の最大値を基準画像135Aと入力画像33Bとの類似度として採用する。類似度は、たとえば、基準画像135Aの画像情報(たとえば、画素値)と、入力画像33Bの画像情報(たとえば、画素値)との相関値で表わされる。検査部154は、算出された類似度が予め定められた値を超えている場合には、ワークWの外観が正常であると判断する。一方で、検査部154は、算出された類似度が予め定められた値以下である場合には、ワークWの外観が異常であると判断する。
【0068】
検査部154は、このような検査処理を取得部150から取得した全入力画像(たとえば、第1,第2入力画像)について実行する。より具体的には、検査部154は、第1入力画像に写るワークWの向き(第1の向き)に対応付けられている基準画像と、当該第1入力画像とを比較する。同様に、検査部154は、第2入力画像に写るワークWの向き(第2の向き)に対応する基準画像と、当該第2入力画像とを比較する。検査部154は、これらの比較結果に基づいて、ワークWを検査する。
【0069】
典型的には、検査部154は、各入力画像についての算出された類似度が全て予め定められた値を超えている場合に、ワークWの外観が正常であると判断する。一方で、検査部154は、各入力画像についての算出された類似度の少なくとも1つが予め定められた値以下である場合には、ワークWの外観に異常があると判断する。
【0070】
典型的には、検査部154は、入力画像33BにおいてワークWが写っている部分を切り出した上で、当該切り出し部分と基準画像135Aとを比較する。より具体的には、全方位カメラ300が用いられる場合には、入力画像33BにワークWが写っている位置は、ワークWと全方位カメラ300との位置関係に依存する。この点に着目して、検査部154は、入力画像33Bの撮影タイミングにおけるワークWの実際の位置と、全方位カメラ300との位置関係に基づいて、入力画像33B内に写る検査対象物の位置を特定する。その後、検査部154は、特定された位置に写っているワークWと、ワークWの向きに対応付けられている基準画像とを比較し、当該比較結果に基づいてワークWを検査する。入力画像内に写るワーク部分を特定した上で当該ワーク部分と基準画像とを比較することで、検査処理にかかる処理時間は、入力画像33B内を基準画像135Aに走査させるよりも短くなる。
【0071】
[D.コントローラ100の制御構造]
図11を参照して、コントローラ100による検査処理について説明する。
図11は、コントローラ100による検査処理を表わすフローチャートである。
図11に示される処理は、コントローラ100のプロセッサ102(
図5参照)がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【0072】
ステップS110において、プロセッサ102は、検査処理の実行指示を受け付けたことに基づいて、ロボット200によるワークWの移動を開始する。ワークWは、当該移動過程で、全方位カメラ300の周囲を周回する。
【0073】
ステップS112において、プロセッサ102は、撮影タイミングが到来したか否かを判断する。一例として、撮影タイミングは、ワークWが全方位カメラ300の周回軌道に到達してから一定時間ごとに到来する。プロセッサ102は、撮影タイミングが到来したと判断した場合(ステップS112においてYES)、制御をステップS114に切り替える。そうでない場合には(ステップS112においてNO)、プロセッサ102は、ステップS112の処理を再び実行する。
【0074】
ステップS114において、プロセッサ102は、上述の取得部150(
図5参照)として、全方位カメラ300に撮影指示を出力し、ワークWを表わす入力画像を全方位カメラ300から取得する。
【0075】
ステップS116において、プロセッサ102は、上述の特定部152(
図5参照)として、ステップS114で取得した入力画像に写るワークWの向きを特定する。ワークWの向きの特定方法については
図6〜
図9で説明した通りであるので、その説明については繰り返さない。
【0076】
ステップS118において、プロセッサ102は、上述の検査部154(
図5参照)として、上述の基準画像情報135(
図10参照)を参照して、ステップS116で特定されたワークWの向きに対応付けられている基準画像を取得し、当該基準画像と入力画像とを比較する。基準画像と入力画像との比較処理については
図10で説明した通りであるので、その説明については繰り返さない。
【0077】
ステップS120において、プロセッサ102は、ステップS118での比較結果に基づいて、検査対象物であるワークWの外観が異常であるか否かを判断する。一例として、プロセッサ102は、基準画像と入力画像との類似度が予め定められた値以下である場合に、ワークWの外観が異常であると判断する。プロセッサ102は、ワークWの外観が異常であると判断した場合(ステップS120においてYES)、制御をステップS130に切り替える。そうでない場合には(ステップS120においてNO)、プロセッサ102は、制御をステップS122に切り替える。
【0078】
ステップS122において、プロセッサ102は、1つのワークWに対して規定回数の検査が行われたか否かを判断する。当該規定回数は、予め設定されていてもよいし、任意に設定せれてもよい。当該規定回数は、1つのワークWに対する撮影回数に相当する。プロセッサ102は、1つのワークWに対して規定回数の検査が行われたと判断した場合(ステップS122においてYES)、制御をステップS124に切り替える。そうでない場合には(ステップS122においてNO)、プロセッサ102は、制御をステップS112に戻す。
【0079】
ステップS124において、プロセッサ102は、ワークWの外観が正常であることを報知する。当該報知の方法は、任意である。一例として、ワークWの外観が正常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【0080】
ステップS130において、プロセッサ102は、ワークWの外観が異常であることを報知する。当該報知の方法は、任意である。一例として、ワークWの外観が異常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【0081】
[E.コントローラ100のハードウェア構成]
図12を参照して、本実施の形態に従うコントローラ100のハードウェア構成について説明する。
図12は、コントローラ100のハードウェア構成例を示すブロッグ図である。
【0082】
コントローラ100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などのプロセッサ102と、チップセット104と、主記憶装置106と、二次記憶装置108と、ローカルネットワークコントローラ110と、USB(Universal Serial Bus)コントローラ112と、メモリカードインターフェイス114と、内部バスコントローラ122と、フィールドバスコントローラ118,120と、I/Oユニット124−1,124−2,…とを含む。
【0083】
プロセッサ102は、二次記憶装置108に格納された各種プログラムを読み出して、主記憶装置106に展開して実行することで、制御対象に応じた制御、および、上述の検査処理などを実現する。チップセット104は、プロセッサ102と各コンポーネントを制御することで、コントローラ100全体としての処理を実現する。
【0084】
二次記憶装置108には、PLCエンジンを実現するためのシステムプログラムに加えて、PLCエンジンを利用して実行されるユーザプログラム130が格納される。さらに、二次記憶装置108には、上述のカメラ位置134(
図5参照)、上述の基準画像情報135なども格納される。ユーザプログラム130は、論理的な演算を主とするシーケンスシーケンスプログラム131、位置制御や速度制御などの数値的な演算を主とするモーションプログラム132、ワークの検査処理を実現するための演算を主とする検査プログラム133などを含む。
【0085】
ローカルネットワークコントローラ110は、ローカルネットワークを介した他の装置(たとえば、サーバなど)との間のデータの遣り取りを制御する。USBコントローラ112は、USB接続を介して他の装置(たとえば、PC(Personal Computer)など)との間のデータの遣り取りを制御する。
【0086】
メモリカードインターフェイス114は、メモリカード116を着脱可能に構成されており、メモリカード116に対してデータを書込み、メモリカード116から各種データ(ユーザプログラムやトレースデータなど)を読出すことが可能になっている。
【0087】
内部バスコントローラ122は、コントローラ100に搭載されるI/Oユニット124−1,124−2,…との間でデータを遣り取りするインターフェイスである。
【0088】
フィールドバスコントローラ118は、フィールドネットワーク54を介した他の装置(たとえば、画像センサ51やカウンタ52など)との間のデータの遣り取りを制御する。同様に、フィールドバスコントローラ120は、フィールドネットワーク56を介した他の装置(たとえば、ロボット200)との間のデータの遣り取りを制御する。
【0089】
図12には、プロセッサ102がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(たとえば、ASIC(Application Specific Integrated Circuit)またはFPGA(Field-Programmable Gate Array)など)を用いて実装してもよい。あるいは、コントローラ100の主要部を、汎用的なアーキテクチャに従うハードウェア(たとえば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOS(Operating System)を並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。
【0090】
[F.第1の実施の形態のまとめ]
以上のようにして、本実施の形態に従うコントローラ100は、検査対象物の姿勢を維持した状態で全方位カメラ300の周囲をワークWに周回させるようにロボット200に指示する。コントローラ100は、ロボット200が全方位カメラ300の周囲をワークWに周回させている間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力する。このとき、ワークWの姿勢が維持されているので、全方位カメラ300から見た場合のワークWの外観は、ワークWの位置ごとに変わる。そのため、ワークWを異なる方向から表わした複数の入力画像が得られる。コントローラ100は、当該複数の入力画像を用いてワークWを検査する。
【0091】
このように、コントローラ100は、ワークWが周回している間の異なるタイミングで全方位カメラ300に撮影指示を出力することで、ワークWを異なる方向から表わした入力画像30A〜30Dを1つの全方位カメラ300から取得することができる。
【0092】
<第2の実施の形態>
[A.概要]
第1の実施の形態においては、ワークWは、ロボット200によって全方位カメラ300を周回させられていた。これに対して、第2の実施の形態においては、ワークWは、コンベア200Aによって全方位カメラ300を周回させられる。これにより、全方位カメラ300は、複数のワークWを同時に撮影することができ。
【0093】
その他の点については「第1の実施の形態」で説明した通りであるので、以下ではそれらの説明については繰り返さない。
【0094】
[B.ワークWの撮影処理]
図13および
図14を参照して、第2の実施の形態におけるワークWの撮影処理について説明する。
【0095】
図13は、移動装置としてのコンベア200AがワークWを搬送している様子を示す図である。
図13には、検査対象物の一例として、ワークW1〜W6が示されている。本実施の形態においては、複数のワークW1〜W6がコンベア200Aによって同時に全方位カメラ300の周囲を搬送される。このとき、コンベア200Aは、ワークW1〜W6のそれぞれの姿勢を維持させた状態で、全方位カメラ300の周囲をワークW1〜W6に周回させる。ワークW1〜W6の姿勢が維持されているので、全方位カメラ300から見た場合の各ワークの外観は、各ワークの位置ごとに変わる。
【0096】
コントローラ100は、ワークW1〜W6が周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力する。これにより、全方位カメラ300は、各ワークを様々な方向から撮影することができる。その結果、コントローラ100は、各ワークを異なる方向から表わした複数の入力画像を取得することができる。
【0097】
図14は、第2の実施の形態に従う全方位カメラ300から得られた入力画像の一例を示す図である。一例として、タイミングt11において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークW2の「C面」と、ワークW3の「D面」と、ワークW4の「A面」と、ワークW5の「B面」とを表わす入力画像37Aが得られる。タイミングt12において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークW3の「C面」と、ワークW4の「D面」と、ワークW5の「A面」と、ワークW6の「B面」とを表わす入力画像37Bが得られる。タイミングt13において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークW4の「C面」と、ワークW5の「D面」と、ワークW6の「A面」と、ワークW7の「B面」とを表わす入力画像37Cが得られる。タイミングt14において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、ワークW5の「C面」と、ワークW6の「D面」と、ワークW7の「A面」と、ワークW8の「B面」とを表わす入力画像37Dが得られる。
【0098】
撮影指示が出力される間隔は、たとえば、コンベア200Aが各ワークを周回(1周)させるためにかかる周回時間を撮影回数で割ることで算出される。たとえば、周回時間が1秒であり、撮影回数が4回である場合には、撮影間隔は、0.25秒(=1/4)となる。周回時間および撮影回数は、予め設定されていてもよいし、任意に設定されてもよい。
【0099】
このように、コントローラ100は、ワークW1〜W6が周回している間の異なるタイミングで全方位カメラ300に撮影指示を出力することで、各ワークを異なる方向から表わした複数の入力画像を1つの全方位カメラ300から取得することができる。
【0100】
典型的には、コンベア200Aは、各ワークが周回軌道に到達した時点での各ワークの向きが常に同じなるように、各ワークを搬送する。その結果、
図14に示されるように、入力画像37A〜37D内の同じ位置には各ワークの同じ面が写る。
【0101】
なお、
図13には、ワークW1〜W6が全方位カメラ300の周囲を1周している例について説明を行ったが、必ずしも、ワークW1〜W6は、全方位カメラ300の周囲を1周する必要はない。すなわち、ワークW1〜W6は、姿勢を維持した状態で全方位カメラ300の周囲の少なくとも一部を周回すればよい。
【0102】
[C.ワークWの検査処理]
図15を参照して、第2の実施の形態に従う検査部154(
図5参照)によるワークの検査処理について説明する。
図15は、第2の実施の形態におけるワークの検査処理を概略的に示す概念図である。
【0103】
図15には、入力画像の一例として、ワークW2の「C面」と、ワークW3の「D面」と、ワークW4の「A面」と、ワークW5の「B面」とを同時に撮影して得られた入力画像37Aが示されている。以下では、得られた入力画像の1つである入力画像37Aを例に挙げて、検査部154による検査処理について説明する。
【0104】
上述の特定部152(
図5参照)は、入力画像37Aに写るワークW2〜W5のそれぞれの向きを特定する。各ワークの向きの特定方法には、「第1の実施の形態」において説明した「第1〜第3特定方法」が採用される。特定部152によって特定された各ワークの向きは、検査部154に出力される。
図15の例では、各ワークの向きとして「45°」、「135°」、「225°」、「315°」が検査部154に出力されている。
【0105】
検査部154は、基準画像情報135を参照して、入力画像37Aに写るワークW2〜W5を検査する。検査対象物と同種類の物体を予め撮影して得られた複数の基準画像を含む。各基準画像には、当該基準画像に写る物体の向きが対応付けられている。基準画像情報135は、検査処理が実行される前に予め準備されており、たとえば、コントローラ100の二次記憶装置108(
図12参照)などに予め格納されている。
【0106】
検査部154は、基準画像情報135を参照して、入力画像37Aに写るワークWの向きに対応する基準画像を特定する。
図15例では、ワークの向き「45°」に対応する基準画像136Aと、ワークの向き「135°」に対応する基準画像136Bと、ワークの向き「225°」に対応する基準画像136Cと、ワークの向き「315°」に対応する基準画像136Dとが特定される。検査部154は、特定された基準画像136A〜136Dのそれぞれと入力画像37Aとを比較し、当該比較結果に基づいて入力画像37Aに写るワークW2〜W5を検査する。入力画像と基準画像との比較処理については
図10で説明した通りであるので、その説明については繰り返さない。
【0107】
検査部154は、取得部150によって取得された複数の入力画像の全てについて、入力画像と基準画像との比較処理を実行する。典型的には、検査部154は、各入力画像から同一のワークを抽出し、抽出された各ワーク部分と対応する基準画像との類似度を算出する。たとえば、ワークW5についての検査を行う場合には、検査部154は、入力画像37AのワークW5と基準画像136Aとの類似度を算出し、入力画像37B(
図14参照)のワークW5と基準画像136Bとの類似度を算出し、入力画像37C(
図14参照)のワークW5と基準画像136Cとの類似度を算出し、入力画像37D(
図14参照)のワークW5と基準画像136Dとの類似度を算出する。検査部154は、ワークW5について算出された全ての類似度が予め定められた値を超えている場合に、ワークW5の外観が正常であると判断する。一方で、検査部154は、ワークW5についての算出された類似度の少なくとも1つが予め定められた値以下である場合には、ワークW5の外観に異常があると判断する。
【0108】
[D.コントローラ100の制御構造]
図16を参照して、第2の実施の形態に従うコントローラ100による検査処理について説明する。
図16は、第2の実施の形態に従うコントローラ100による検査処理を表わすフローチャートである。
図16に示される処理は、コントローラ100のプロセッサ102(
図5参照)がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【0109】
ステップS210において、プロセッサ102は、検査処理の実行指示を受け付けたことに基づいて、コンベア200Aによるワークの搬送を開始する。ワークは、当該搬送過程で、全方位カメラ300を周回する。
【0110】
ステップS220において、プロセッサ102は、撮影タイミングが到来したか否かを判断する。撮影タイミングは、たとえば、一定時間ごとに到来する。プロセッサ102は、撮影タイミングが到来したと判断した場合(ステップS220においてYES)、制御をステップS222に切り替える。そうでない場合には(ステップS220においてNO)、プロセッサ102は、ステップS220の処理を再び実行する。
【0111】
ステップS222において、プロセッサ102は、上述の取得部150(
図5参照)として、全方位カメラ300に撮影指示を出力し、ワークを表わす入力画像を全方位カメラ300から取得する。
【0112】
ステップS224において、プロセッサ102は、ステップS222で取得した入力画像からワークを検知する。
図1で説明したように、プロセッサ102は、トラッキング処理によりコンベア200A上の各ワークの位置を把握している。コンベア200A上の各ワークの位置と、入力画像内の各ワークの位置とは対応しているため、プロセッサ102は、トラッキング処理により特定されるコンベア200A上の各ワークの位置から入力画像内の各ワークの位置を特定することができる。なお、プロセッサ102は、テンプレートマッチングなどの画像処理技術を用いて入力画像内のワークの位置を特定してもよい。
【0113】
ステップS226において、プロセッサ102は、上述の特定部152(
図5参照)として、ステップS224で検知されたワークから未検査のワークのいずれかを検査対象のワークとして決定し、当該検査対象のワークの向きを特定する。ワークの向きの特定方法には、「第1の実施の形態」において説明した「第1〜第3特定方法」が採用される。
【0114】
ステップS228において、プロセッサ102は、上述の検査部154(
図5参照)として、上述の基準画像情報135(
図15参照)を参照して、ステップS226で特定されたワークの向きに対応する基準画像を取得し、当該基準画像と入力画像とを比較する。基準画像と入力画像との比較処理については
図15で説明した通りであるので、その説明については繰り返さない。
【0115】
ステップS230において、プロセッサ102は、ステップS228での比較結果に基づいて、検査対象のワークの外観が異常であるか否かを判断する。一例として、プロセッサ102は、基準画像と入力画像との類似度が予め定められた値以下である場合に、検査対象のワークの外観が異常であると判断する。プロセッサ102は、検査対象のワークの外観が異常であると判断した場合(ステップS230においてYES)、制御をステップS234に切り替える。そうでない場合には(ステップS230においてNO)、プロセッサ102は、制御をステップS232に切り替える。
【0116】
ステップS232において、プロセッサ102は、検査対象のワークの外観が正常であることを報知する。当該報知の方法は、任意である。一例として、ワークの外観が正常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【0117】
ステップS234において、プロセッサ102は、検査対象のワークの外観が異常であることを報知する。当該報知の方法は、任意である。一例として、ワークの外観が異常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【0118】
ステップS240において、プロセッサ102は、ステップS224において検知された全ワークの検査が終了したか否かを判断する。プロセッサ102は、ステップS224において検知された全ワークの検査が終了したと判断した場合(ステップS240においてYES)、制御をステップS250に切り替える。そうでない場合には(ステップS240においてNO)、プロセッサ102は、制御をステップS226に戻す。
【0119】
ステップS250において、プロセッサ102は、検査処理を終了するか否かを判断する。一例として、プロセッサ102は、検査処理の終了操作を受け付けた場合に、検査処理を終了すると判断する。プロセッサ102は、検査処理を終了すると判断した場合(ステップS250においてYES)、
図16に示される検査処理を終了する。そうでない場合には(ステップS250においてNO)、プロセッサ102は、制御をステップS220に戻す。
【0120】
[E.第2の実施の形態のまとめ]
以上のようにして、第2の実施の形態においては、検査対象物であるワークは、コンベア200Aによって全方位カメラ300を周回させられる。これにより、全方位カメラ300は、複数のワークを同時に撮影することができ、複数のワークを同時に検査することができる。
【0121】
また、コンベア200Aは、ワークの姿勢を維持させた状態で全方位カメラ300を各ワークに周回させる。コントローラ100は、ワークが周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力する。これにより、全方位カメラ300は、様々な方向から各ワークを撮影することができる。その結果、コントローラ100は、ワークを異なる方向から表わした複数の入力画像を各ワークについて取得することができる。
【0122】
<第3の実施の形態>
[概要]
第1の実施の形態においては、検査対象物であるワークWの形状が立方体であった。これに対して、第3の実施の形態においては、検査対象物であるワークWの形状は円筒形である。ワークが円筒形である場合には、ワークの側面を異なる方向から撮影したとしても、画像内に写るワークの形状は変化しない。そのため、第3の実施の形態に従うコントローラ100は、検査対象物の形状が円筒形である場合には、ワークの向きを特定しない。これにより処理時間が短縮化される。
【0123】
その他の点については「第1の実施の形態」で説明した通りであるので、以下ではそれらの説明については繰り返さない。
【0124】
[B.ワークWの撮影処理]
図17および
図18を参照して、第3の実施の形態におけるワークWの撮影処理について説明する。
【0125】
図17は、第3の実施の形態に従うロボット200が全方位カメラ300の周囲をワークWに周回させている過程を示す図である。
図17に示されるように、本実施の形態においては、ワークWの形状が円筒形である。コントローラ100は、ワークWが全方位カメラ300の周囲を周回している間の複数のタイミングにおいて全方位カメラ300に撮影指示を出力する。これにより、全方位カメラ300は、様々な方向からワークWを撮影することができる。その結果、コントローラ100は、ワークWを異なる方向から表わした複数の入力画像を全方位カメラ300から取得することができる。
【0126】
図18は、第3の実施の形態に従う全方位カメラ300から得られた入力画像の一例を示す図である。一例として、タイミングt21において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、入力画像39Aが得られる。同様に、タイミングt22において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、入力画像39Bが得られる。同様に、タイミングt23において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、入力画像39Cが得られる。同様に、タイミングt24において、コントローラ100は、全方位カメラ300に撮影指示を出力したとする。その結果、入力画像39Dが得られる。
【0127】
入力画像39A〜39Dに示されるように、ワークWが円筒形である場合には、ワークWの側面を異なる方向から撮影したとしても、入力画像内に写るワークWの形状は変化しない。そのため、本実施の形態に従うコントローラ100は、入力画像内に写るワークの向きを特定しなくてもよい。また、本実施の形態においては、ワークWの向きごとに基準画像を準備する必要がなく、少なくとも1つの基準画像が準備されていれば十分である。
【0128】
コントローラ100は、ワークWを各方向から撮影して得られた入力画像のそれぞれと、予め準備されている基準画像とを比較し、当該比較結果に基づいて、ワークWを検査する。これにより、コントローラ100は、あらゆる方向から円筒形状のワークWを検査することができる。
【0129】
[第3の実施の形態のまとめ]
以上のようにして、ワークが円筒形である場合には、ワークの側面を異なる方向から撮影したとしても、入力画像内に写るワークの形状は変化しない。そのため、本実施の形態に従うコントローラ100は、検査対象物の形状が円筒形である場合には、ワークの向きを特定しない。これにより処理時間が短縮化される。
【0130】
<第4の実施の形態>
第1の実施の形態においては、ロボット200は、全方位カメラ300の周囲をワークWに円形に周回させていた。これに対して、第4の実施の形態においては、ロボット200は、全方位カメラ300の周囲をワークWに正方形に周回させる。
【0131】
図19は、ロボット200が、全方位カメラ300の周囲をワークWに正方形に周回させている様子を示す図である。このように、ワークWの周回軌道は、円形に限定されない。ワークWの姿勢が維持された状態であれば、ワークWの周回軌道は任意である。たとえば、ワークWの周回軌道は、楕円形であってもよいし、矩形であってもよいし、その他の形状であってもよい。
【0132】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。