(57)【要約】【課題】１つのカメラで検査対象物の外観を様々な方向から検査することができる検査システムを提供する。【解決手段】ワークＷを検査するための検査システムは、全方位カメラ３００と、ワークＷの姿勢を維持した状態で全方位カメラ３００の周囲をワークＷに周回させるための移動装置と、移動装置が全方位カメラ３００の周囲をワークＷに周回させている間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力し、ワークＷを異なる方向から表わした複数の入力画像を全方位カメラ３００から取得するための取得部と、複数の入力画像を用いてワークＷを検査するための検査部とを備える。【選択図】図３
2018116007.tif 000002
【特許請求の範囲】
【請求項１】
検査対象物を検査するための検査システムであって、
全方位カメラと、
前記検査対象物の姿勢を維持した状態で前記全方位カメラの周囲を前記検査対象物に周回させるための移動装置と、
前記移動装置が前記全方位カメラの周囲を前記検査対象物に周回させている間の複数のタイミングにおいて前記全方位カメラに撮影指示を出力し、前記検査対象物を異なる方向から表わした複数の入力画像を前記全方位カメラから取得するための取得部と、
前記複数の入力画像を用いて前記検査対象物を検査するための検査部とを備える、検査システム。
【請求項２】
前記移動装置は、前記全方位カメラから前記検査対象物までの距離を一定に維持した状態で、前記全方位カメラの周囲を前記検査対象物に周回させる、請求項１に記載の検査システム。
【請求項３】
前記移動装置は、前記検査対象物が前記全方位カメラを周回している間、当該検査対象物を停止させない、請求項１または２に記載の検査システム。
【請求項４】
前記検査システムは、さらに、
前記検査対象物と同種類の物体を異なる方向から予め撮影して得られた基準画像を当該基準画像に写る当該物体の向きに対応付けて格納するための記憶部と、
前記複数の入力画像の第１入力画像に写る前記検査対象物の第１の向きと、前記複数の入力画像の第２入力画像に写る前記検査対象物の第２の向きとを特定するための特定部とを備え、
前記検査部は、
前記第１の向きに対付けられている前記基準画像と前記第１入力画像とを比較し、
前記第２の向きに対付けられている前記基準画像と前記第２入力画像とを比較し、
当該比較結果に基づいて前記検査対象物を検査する、請求項１〜３のいずれか１項に記載の検査システム。
【請求項５】
前記特定部は、
前記第１入力画像の撮影タイミングにおける検査対象物の位置と、前記全方位カメラの位置とに基づいて、前記第１の向きを特定し、
前記第２入力画像の撮影タイミングにおける検査対象物の位置と、前記全方位カメラの位置とに基づいて、前記第２の向きを特定する、請求項４に記載の検査システム。
【請求項６】
前記移動装置の表面の異なる位置には、それぞれ、異なるマークが付されており、
複数の前記マークの各々には、前記検査対象物の向きが予め対応付けられており、
前記特定部は、
前記第１入力画像に写っているマークに対応付けられている向きを前記第１の向きとして特定し、
前記第２入力画像に写っているマークに対応付けられている向きを前記第２の向きとして特定する、請求項４に記載の検査システム。
【請求項７】
前記検査部は、
前記第１入力画像の撮影タイミングにおける前記検査対象物の位置と、前記全方位カメラとの位置関係に基づいて、前記第１入力画像内に写る検査対象物の位置を特定するとともに、当該位置に写っている検査対象物と前記第１の向きに対応付けられている前記基準画像とを比較し、
前記第２入力画像の撮影タイミングにおける前記検査対象物の位置と、前記全方位カメラとの位置関係に基づいて、前記第２入力画像内に写る検査対象物の位置を特定するとともに、当該位置に写っている検査対象物と前記第２の向きに対応付けられている前記基準画像とを比較し、
当該比較結果に基づいて前記検査対象物を検査する、請求項４〜６のいずれか１項に記載の検査システム。
【請求項８】
検査対象物を移動するための移動装置と、前記検査対象物を撮影するための全方位カメラとを制御するためのコントローラであって、
前記コントローラは、
前記検査対象物の姿勢を維持した状態で前記全方位カメラの周囲を前記検査対象物に周回させるための命令を前記移動装置に出力し、前記移動装置が前記全方位カメラの周囲を前記検査対象物に周回させている間の複数のタイミングにおいて前記全方位カメラに撮影指示を出力し、前記検査対象物を異なる方向から表わした複数の入力画像を前記全方位カメラから取得するための取得部と、
前記複数の入力画像を用いて前記検査対象物を検査するための検査部とを備える、コントローラ。
【請求項９】
検査対象物を検査するための検査方法であって、
前記検査対象物の姿勢を維持した状態で全方位カメラの周囲を前記検査対象物に周回させるステップと、
前記検査対象物が前記全方位カメラの周囲を周回している間の複数のタイミングにおいて前記全方位カメラに撮影指示を出力し、前記検査対象物を異なる方向から表わした複数の入力画像を前記全方位カメラから取得するステップと、
前記複数の入力画像を用いて前記検査対象物を検査するステップとを備える、検査方法。
【請求項１０】
検査対象物を検査するための検査プログラムであって、
前記検査プログラムは、コンピュータに、
前記検査対象物の姿勢を維持した状態で全方位カメラの周囲を前記検査対象物に周回させるステップと、
前記検査対象物が前記全方位カメラの周囲を周回している間の複数のタイミングにおいて前記全方位カメラに撮影指示を出力し、前記検査対象物を異なる方向から表わした複数の入力画像を前記全方位カメラから取得するステップと、
前記複数の入力画像を用いて前記検査対象物を検査するステップとを実行させる、検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、全方位カメラを用いて検査対象物を検査するための技術に関する。
【背景技術】
【０００２】
ＦＡ（Factory  Automation）分野では、カメラを用いて検査対象物の外観を検査するための技術が開発されている。当該技術に関し、特開２０００−１８０３８２号公報（特許文献１）は、コンベア上にランダムに配置された検査対象物の表面を高速に検査することができる外観検査装置を開示している。より具体的には、当該外観検査装置は、コンベア上を搬送される検査対象物を複数のカメラで異なる方向から撮影し、各方向から撮影して得られた入力画像を用いて検査対象物を検査する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１８０３８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に開示される外観検査装置においては、検査対象物を様々な方向から撮影するために、複数のカメラを設ける必要がある。そのため、外観検査装置のコストが高くなり、外観検査装置の構成も複雑になる。したがって、１つのカメラで検査対象物の外観を様々な方向から検査するための技術が望まれている。
【課題を解決するための手段】
【０００５】
ある局面に従うと、検査対象物を検査するための検査システムは、全方位カメラと、上記検査対象物の姿勢を維持した状態で上記全方位カメラの周囲を上記検査対象物に周回させるための移動装置と、上記移動装置が上記全方位カメラの周囲を上記検査対象物に周回させている間の複数のタイミングにおいて上記全方位カメラに撮影指示を出力し、上記検査対象物を異なる方向から表わした複数の入力画像を上記全方位カメラから取得するための取得部と、上記複数の入力画像を用いて上記検査対象物を検査するための検査部とを備える。
【０００６】
好ましくは、上記移動装置は、上記全方位カメラから上記検査対象物までの距離を一定に維持した状態で、上記全方位カメラの周囲を上記検査対象物に周回させる。
【０００７】
好ましくは、上記移動装置は、上記検査対象物が上記全方位カメラを周回している間、当該検査対象物を停止させない。
【０００８】
好ましくは、上記検査システムは、さらに、上記検査対象物と同種類の物体を異なる方向から予め撮影して得られた基準画像を当該基準画像に写る物体の向きに対応付けて格納するための記憶部と、上記複数の入力画像の第１入力画像に写る上記検査対象物の第１の向きと、上記複数の入力画像の第２入力画像に写る上記検査対象物の第２の向きとを特定するための特定部とを備える。上記検査部は、上記第１の向きに対付けられている上記基準画像と上記第１入力画像とを比較し、上記第２の向きに対付けられている上記基準画像と上記第２入力画像とを比較し、当該比較結果に基づいて上記検査対象物を検査する。
【０００９】
好ましくは、上記特定部は、上記第１入力画像の撮影タイミングにおける検査対象物の位置と、上記全方位カメラの位置とに基づいて、上記第１の向きを特定し、上記第２入力画像の撮影タイミングにおける検査対象物の位置と、上記全方位カメラの位置とに基づいて、上記第２の向きを特定する。
【００１０】
好ましくは、上記移動装置の表面の異なる位置には、それぞれ、異なるマークが付されている。複数の上記マークの各々には、上記検査対象物の向きが予め対応付けられている。上記特定部は、上記第１入力画像に写っているマークに対応付けられている向きを上記第１の向きとして特定し、上記第２入力画像に写っているマークに対応付けられている向きを上記第２の向きとして特定する。
【００１１】
好ましくは、上記検査部は、上記第１入力画像の撮影タイミングにおける上記検査対象物の位置と、上記全方位カメラとの位置関係に基づいて、上記第１入力画像内に写る検査対象物の位置を特定するとともに、当該位置に写っている検査対象物と上記第１の向きに対応付けられている上記基準画像とを比較し、上記第２入力画像の撮影タイミングにおける上記検査対象物の位置と、上記全方位カメラとの位置関係に基づいて、上記第２入力画像内に写る検査対象物の位置を特定するとともに、当該位置に写っている検査対象物と上記第２の向きに対応付けられている上記基準画像とを比較し、当該比較結果に基づいて上記検査対象物を検査する。
【００１２】
他の局面に従うと、検査対象物を移動するための移動装置と、上記検査対象物を撮影するための全方位カメラとを制御するためのコントローラは、上記コントローラは、上記検査対象物の姿勢を維持した状態で上記全方位カメラの周囲を上記検査対象物に周回させるための命令を上記移動装置に出力し、上記移動装置が上記全方位カメラの周囲を上記検査対象物に周回させている間の複数のタイミングにおいて上記全方位カメラに撮影指示を出力し、上記検査対象物を異なる方向から表わした複数の入力画像を上記全方位カメラから取得するための取得部と、上記複数の入力画像を用いて上記検査対象物を検査するための検査部とを備える。
【００１３】
他の局面に従うと、検査対象物を検査するための検査方法は、上記検査対象物の姿勢を維持した状態で全方位カメラの周囲を上記検査対象物に周回させるステップと、上記検査対象物が上記全方位カメラの周囲を周回している間の複数のタイミングにおいて上記全方位カメラに撮影指示を出力し、上記検査対象物を異なる方向から表わした複数の入力画像を上記全方位カメラから取得するステップと、上記複数の入力画像を用いて上記検査対象物を検査するステップとを備える。
【００１４】
他の局面に従うと、検査対象物を検査するための検査プログラムは、コンピュータに、上記検査対象物の姿勢を維持した状態で全方位カメラの周囲を上記検査対象物に周回させるステップと、上記検査対象物が上記全方位カメラの周囲を周回している間の複数のタイミングにおいて上記全方位カメラに撮影指示を出力し、上記検査対象物を異なる方向から表わした複数の入力画像を上記全方位カメラから取得するステップと、上記複数の入力画像を用いて上記検査対象物を検査するステップとを実行させる。
【発明の効果】
【００１５】
ある局面において、１つのカメラで検査対象物の外観を様々な方向から検査することができる。
【００１６】
本開示の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解される本発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１７】
【図１】第１の実施の形態に従う検査システムの基本構成を示す模式図である。
【図２】検査対象物であるワークの一例を表わす図である。
【図３】第１の実施の形態に従うロボットが全方位カメラの周囲をワークに周回させている過程を示す図である。
【図４】第１の実施の形態に従う全方位カメラから得られた入力画像の一例を示す図である。
【図５】第１の実施の形態に従うコントローラの機能構成の一例を示す図である。
【図６】ワークの向きを特定するための第１特定方法を説明するための図である。
【図７】ワークの向きを特定するための第２特定方法を説明するための図である。
【図８】第１の実施の形態に従うロボットがワークを把持する部分である把持部分２１０を示す図である。
【図９】ワークの向きを特定するための第３特定方法を説明するための図である。
【図１０】検査部によるワークの検査処理を概略的に示す概念図である。
【図１１】第１の実施の形態に従うコントローラによる検査処理を表わすフローチャートである。
【図１２】第１の実施の形態に従うコントローラのハードウェア構成例を示すブロッグ図である。
【図１３】移動装置としてのコンベアがワークＷを搬送している様子を示す図である。
【図１４】第２の実施の形態に従う全方位カメラから得られた入力画像の一例を示す図である。
【図１５】第２の実施の形態におけるワークの検査処理を概略的に示す概念図である。
【図１６】第２の実施の形態に従うコントローラによる検査処理を表わすフローチャートである。
【図１７】第３の実施の形態に従うロボットが全方位カメラの周囲をワークに周回させている過程を示す図である。
【図１８】第３の実施の形態に従う全方位カメラから得られた入力画像の一例を示す図である。
【図１９】第４の実施の形態に従うロボットが全方位カメラの周囲をワークＷに正方形に周回させている様子を示す図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００１９】
＜第１の実施の形態＞
［Ａ．検査システム１］
図１を参照して、本実施の形態に従う検査システム１の基本構成について説明する。図１は、本実施の形態に従う検査システム１の基本構成を示す模式図である。
【００２０】
図１に示されるように、検査システム１は、たとえば、コントローラ１００と、移動装置としてのロボット２００と、全方位カメラ３００とで構成されている。
【００２１】
コントローラ１００は、たとえば、ＰＬＣ（Programmable Logic Controller）であり、検査システム１全体を制御する。一例として、コントローラ１００は、画像センサ５１、ロボット２００、全方位カメラ３００などを制御する。
【００２２】
コントローラ１００は、たとえば、画像センサ５１およびカウンタ５２とデイジーチェーンでフィールドネットワーク５４に接続されている。フィールドネットワーク５４として、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）が採用される。また、コントローラ１００は、フィールドネットワーク５６を介してロボット２００と通信接続されている。フィールドネットワーク５６として、たとえば、ＥｔｈｅｒＮＥＴ（登録商標）が採用される。
【００２３】
検査システム１は、コンベア２０Ａ上を搬送されるワークＷ（検査対象物）に対して所定の作業を行う。ワークＷは、製品または半製品であり、たとえば、電子部品であってもよいし、食料品であってもよい。
【００２４】
画像センサ５１は、コンベア２０Ａを定期的に撮影し、得られた入力画像からワークＷを検知する。一例として、画像センサ５１は、テンプレートマッチングなどの画像処理によりワークＷを検知する。入力画像内のワークＷの座標値は、コントローラ１００に出力される。
【００２５】
カウンタ５２は、エンコーダ５３から発生するパルス波に基づいてコンベア２０Ａの移動量を計測する。より具体的には、エンコーダ５３は、コンベア２０Ａの移動量に応じてパルス信号を発生する。カウンタ５２は、エンコーダ５３からパルス信号を受け、当該パルス信号に含まれるパルス数をカウントすることでコンベア２０Ａの移動量を計測する。カウンタ５２は、パルス波のカウント値をコントローラ１００に一定の通信間隔で送信する。
【００２６】
コントローラ１００は、画像センサ５１から受信した入力画像内のワークＷの座標値（カメラ座標系）を予め定められた座標変換式に代入し、カメラ座標系のワークＷの座標値をワールド座標系の座標値に変換する。ワールド座標系は、ロボット２００を制御するための座標系である。コントローラ１００は、カウンタ５２からカウント値を受信する度に、前回からのコンベア２０Ａ上の移動量を算出し、ワールド座標系で示されるワークＷの座標値に当該移動量を加算する。１カウントに相当するコンベア２０Ａの移動量は、予め設定されている。コントローラ１００は、ワールド座標系で示されるワークＷの座標値を逐次的に更新することで、コンベア２０Ａを搬送されるワークＷをトラッキングすることができる。
【００２７】
コントローラ１００は、ワークＷがコンベア２０Ａ上の予め定められた範囲に到達したことに基づいて、ロボット２００にワークＷのピックアップ命令を送る。このとき、コントローラ１００は、コンベア２０Ａ上のワークＷの座標値をロボット２００に逐次的に送る。これにより、ロボット２００は、ワークＷの現在位置を把握することができ、コンベア２０Ａ上のワークＷをピックアップすることができる。
【００２８】
その後、ロボット２００は、ワークＷの姿勢を維持した状態で全方位カメラ３００の周囲をワークＷに周回させ、当該ワークＷをコンベア２０Ｂに移動する。「ワークＷの姿勢を維持した状態」とは、ワークＷが自転しないようにワークＷを固定している状態を意味し、周回過程でワークＷの各面が常に同じ方向を向いている状態のことをいう。コントローラ１００は、ワークＷが全方位カメラ３００の周囲を周回している間にワークＷを撮影し、その撮影結果として得られた入力画像を用いてワークＷの外観を検査する。当該検査処理の詳細については後述する。
【００２９】
なお、図１には、検査システム１が１つのコントローラ１００で構成されている例が示されているが、検査システム１は、複数のコントローラ１００で構成されてもよい。また、図１には、検査システム１が１つのロボット２００で構成されている例が示されているが、検査システム１は、複数のロボット２００で構成されてもよい。また、図１には、検査システム１が１つの全方位カメラ３００で構成されている例が示されているが、検査システム１は、複数の全方位カメラ３００で構成されてもよい。
【００３０】
［Ｂ．ワークＷの撮影処理］
図２〜図４を参照して、全方位カメラ３００によるワークＷの撮影処理について説明する。
【００３１】
図２は、検査対象物であるワークＷの一例を表わす図である。以下では、ワークＷの向きを説明する便宜のために、ワークＷが立方体である前提で説明を行う。図２に示されるように、ワークＷの「Ｅ面」は、ワークＷの「Ａ面」〜「Ｄ面」に直交しているとする。ワークＷの「Ａ面」は、ワークＷの「Ｃ面」に対向しているとする。ワークＷの「Ｂ面」は、ワークＷの「Ｄ面」に対向しているとする。
【００３２】
なお、検査対象物であるワークＷの形状は、立方体に限定されず、直方体などの多面体であってもよいし、円筒形であってもよいし、その他の形状であってもよい。
【００３３】
図３は、ロボット２００が全方位カメラ３００の周囲をワークＷに周回させている過程を示す図である。
【００３４】
全方位カメラ３００は、全方位ミラー３３１と、撮影ユニット３３２とで構成されている。全方位ミラー３３１は、周囲３６０°から受けた光を反射し、当該反射光を撮影ユニット３３２に導く。これにより、全方位カメラ３００は、周囲３６０°を撮影することができる。
【００３５】
上述したように、ロボット２００は、ワークＷの姿勢を維持した状態で全方位カメラ３００の周囲をワークＷに周回させる。このとき、ワークＷの姿勢が維持されているので、全方位カメラ３００から見た場合のワークＷの外観は、ワークＷの位置ごとに変わる。
【００３６】
典型的には、ワークＷの周回軌道は、円形である。すなわち、ロボット２００は、全方位カメラ３００からワークＷまでの距離を一定に維持した状態で、全方位カメラ３００の周囲をワークＷに周回させる。これにより、ワークＷが全方位カメラ３００を周回している間、ワークＷと全方位カメラ３００との間の距離が常に一定になり、全方位カメラ３００から得られた画像に写るワークＷの大きさは一定になる。
【００３７】
典型的には、ロボット２００は、ワークＷが全方位カメラ３００を周回している間、当該ワークＷを停止させない。これにより、順次搬送されるワークＷを停止させずに連続的に検査することができる。また、ワークＷの周回処理がワークＷのピック＆プレース動作の途中に実施されることで、ワークＷの周回処理が追加されたとしても、タクトタイムは増加しない。
【００３８】
ロボット２００は、ワークＷを周回させている間、ワークＷの位置（またはアームの位置）を定期的にコントローラ１００に送信する。コントローラ１００は、受信したワークＷの位置が予め定められた周回軌道上に存在する場合に、ロボット２００が全方位カメラ３００の周囲をワークＷに周回させていると判断する。コントローラ１００は、ワークＷが全方位カメラ３００を周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力する。これにより、全方位カメラ３００は、様々な方向からワークＷを撮影することができる。その結果、コントローラ１００は、ワークＷを異なる方向から表わした複数の入力画像を全方位カメラ３００から取得することができる。
【００３９】
図４は、全方位カメラ３００から得られた入力画像の一例を示す図である。一例として、タイミングｔ１において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷの「Ｄ面」を表わす入力画像３３Ａが得られる。同様に、タイミングｔ２において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷの「Ａ面」を表わす入力画像３３Ｂが得られる。同様に、タイミングｔ３において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷの「Ｂ面」を表わす入力画像３３Ｃが得られる。同様に、タイミングｔ４において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷの「Ｃ面」を表わす入力画像３３Ｄが得られる。
【００４０】
撮影指示が出力される間隔は、たとえば、ワークＷが全方位カメラ３００を１周するのにかかる周回時間を撮影回数で割ることで算出される。たとえば、周回時間が１秒であり、撮影回数が４回である場合には、撮影間隔は、０．２５秒（＝１／４）となる。当該周回時間および当該撮影回数は、予め設定されていてもよいし、任意に設定されてもよい。
【００４１】
このように、コントローラ１００は、ワークＷが周回している間の異なるタイミングで全方位カメラ３００に撮影指示を出力することで、ワークＷを異なる方向から表わした入力画像３０Ａ〜３０Ｄを１つの全方位カメラ３００から取得することができる。
【００４２】
なお、図３には、ワークＷが全方位カメラ３００の周囲を１周している例について説明を行ったが、必ずしも、ワークＷは、全方位カメラ３００の周囲を１周する必要はない。すなわち、ワークＷは、姿勢を維持した状態で全方位カメラ３００の周囲の少なくとも一部を周回すればよい。また、ワークＷは、水平面を周回する必要はなく、全方位カメラ３００の視野内の一部または全部において姿勢が維持されていれば、任意の方向に周回させることができる。
【００４３】
［Ｃ．コントローラ１００の機能構成］
図５〜図１０を参照して、コントローラ１００の機能について説明する。
【００４４】
図５は、コントローラ１００の機能構成の一例を示す図である。図５に示されるように、コントローラ１００は、主要なハードウェア構成として、プロセッサ１０２と、二次記憶装置１０８とを含む。プロセッサ１０２は、機能構成として、取得部１５０と、特定部１５２と、検査部１５４とを含む。
【００４５】
なお、図５には、取得部１５０、特定部１５２、検査部１５４がコントローラ１００に実装されている例が示されているが、これらの機能の少なくとも一部は、他の外部装置に実装されてもよい。たとえば、当該機能の少なくとも一部は、画像センサ５１（図１参照）やサーバなどの外部装置に実装されてもよい。この場合、コントローラ１００と外部装置とが協働して本実施の形態に従う各種処理を実現する。
【００４６】
以下では、取得部１５０、特定部１５２、検査部１５４について順に説明する。
（Ｃ１．取得部１５０）
取得部１５０は、ワークＷが全方位カメラ３００を周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力し、ワークＷを異なる方向から表わした複数の入力画像を全方位カメラ３００から取得する。ワークＷの撮影方法については図３で説明した通りであるので、その説明については繰り返さない。
【００４７】
（Ｃ２．特定部１５２）
上述したように、ロボット２００は、ワークＷの姿勢を維持した状態で全方位カメラ３００を周回させる。このとき、ワークＷ自体は自転しないが、全方位カメラ３００から見た場合のワークＷの向きが変わる。以下では、全方位カメラ３００に対してワークＷが向いている方向を「ワークの向き」とも称する。すなわち、ワークの向きとは、周回面上を通り、ワークＷの中心を通る所定の基準軸と、ワークＷおよび全方位カメラ３００を結ぶ直線との間の角度のことをいう。
【００４８】
特定部１５２は、ワークＷの撮影タイミングにおけるワークＷの向きを特定する。ワークＷの向きの特定方法には様々な方法が採用される。以下では、図６〜図９を参照して、ワークＷの向きの特定方法について説明する。
【００４９】
図６は、ワークＷの向きを特定するための第１特定方法を説明するための図である。図６には、全方位カメラ３００の位置Ｐ１と、ワークＷが全方位カメラ３００を周回している所定タイミングにおけるワークＷの位置Ｐ２とが示されている。
【００５０】
全方位カメラ３００の位置Ｐ１は、たとえば、カメラ位置１３４（図５参照）として規定されている。カメラ位置１３４は、全方位カメラ３００の設置時に設定されていてもよいし、ユーザによって任意に設定されてもよい。カメラ位置１３４は、たとえば、ｘｙ平面上の座標値として表わされてもよいし、ｘｙｚ平面上の座標値として表わされてもよい。当該座標値は、たとえば、全方位カメラ３００の中心を表わす。
【００５１】
ワークＷの位置Ｐ２は、ロボット２００から取得される。より具体的には、コントローラ１００は、ワークＷの撮影指示を全方位カメラ３００に出力したのと同時に、ワークＷの位置Ｐ２を取得するための要求をロボット２００に出力する。これにより、コントローラ１００は、撮影時におけるワークＷの位置Ｐ２をロボット２００から取得することができる。ワークＷの位置Ｐ２は、たとえば、ｘｙ平面上の座標値として表わされてもよいし、ｘｙｚ平面上の座標値として表わされてもよい。当該座標値は、たとえば、ワークＷの中心を表わす。
【００５２】
特定部１５２は、全方位カメラ３００の位置Ｐ１からワークＷの位置Ｐ２に向かう方向をワークＷの撮影方向として特定する。当該撮影方向は、全方位カメラ３００から見た場合のワークＷの方向に相当する。ワークＷが周回軌道に到達した時点でのワークＷの向きが常に同じであれば、当該撮影方向とワークＷの向きとは、一対一に対応する。すなわち、ワークＷの向きは、周回軌道上の同じ地点では常に同じになる。特定部１５２は、ワークＷの撮影方向とワークＷの向きとの対応関係に基づいて、ワークＷの撮影方向からワークＷの向きを特定する。
【００５３】
特定部１５２は、全方位カメラ３００から得られた全ての入力画像（たとえば、第１，第２入力画像）についてワークＷの向きを特定する。より具体的には、特定部１５２は、第１入力画像の撮影タイミングにおけるワークＷの位置と、全方位カメラ３００の位置とに基づいて、当該第１入力画像に写るワークＷの向きを特定する。同様に、特定部１５２は、第２入力画像の撮影タイミングにおけるワークＷの位置と、全方位カメラ３００の位置とに基づいて、当該第２入力画像に写るワークＷの向きを特定する。
【００５４】
次に、図７を参照して、ワークＷの向きの他の特定方法について説明する。図７は、ワークＷの向きを特定するための第２特定方法を説明するための図である。
【００５５】
図７には、全方位カメラ３００から得られた入力画像の一例として入力画像３３Ｂが示されている。全方位カメラ３００を用いた場合、入力画像３３Ｂの長辺方向の位置が全方位カメラ３００から見た場合の被写体の向きに対応する。すなわち、入力画像３３Ｂ内のワークＷの座標値とワークＷの向きとは、一対一に対応する。この点に着目して、特定部１５２は、入力画像内のワークＷの座標値と当該ワークＷの向きとの対応関係に基づいて、入力画像３３Ｂから検知されたワークＷの座標値に対応するワークＷの向きを特定する。図７の例では、特定部１５２は、ワークＷの中心位置Ｐ３に対応する「１３５°」を入力画像３３Ｂの撮影タイミングにおけるワークＷの向きとして特定している。
【００５６】
次に、図８および図９を参照して、ワークＷの向きの他の特定方法について説明する。図８は、ロボット２００がワークＷを把持する部分である把持部分２１０を示す図である。
【００５７】
図８には、把持部分２１０の拡大図が示されている。把持部分２１０の表面の異なる位置には、それぞれ、異なるマークが付されている。当該マークは、ワークＷの向きを特定するための基準となる。マークの違いは、色の違いにより表わされてもよいし、形状の違いにより表れてもよい。図８の例では、把持部分２１０にメモリ２１１が付されており、メモリ２１１は、色が異なるマーク２１１Ａ，２１１Ｂで表わされている。
【００５８】
なお、マークが付される場所は、把持部分２１０に限定されず、マークは、全方位カメラ３００の視野に含まれる位置であればロボット２００の任意の場所に付される。
【００５９】
図９は、ワークＷの向きを特定するための第３特定方法を説明するための図である。特定部１５２は、ワークＷを撮影して得られた入力画像３８から把持部分２１０を検知する。次に、特定部１５２は、検知した把持部分２１０の中心または略中心に写っているマークの種類を特定する。その後、特定部１５２は、マークの種類ごとにワークＷの向きを規定しているマーク情報１２８を参照して、特定されたマークに関連付けられている向きを、ワークＷの向きとして特定する。図９の例では、マーク情報１２８においてマーク２１１Ｂに対応付けられている「９０°」がワークＷの向きとして特定される。
【００６０】
特定部１５２は、全方位カメラ３００から得られた全ての入力画像（たとえば、第１，第２入力画像）についてワークＷの向きを特定する。より具体的には、特定部１５２は、第１入力画像に写っているマークを検知し、マーク情報１２８において当該検知されたマークに対応付けられている向きを特定し、当該特定された向きを第１入力画像に写るワークＷの向きとして特定する。同様に、特定部１５２は、第２入力画像に写っているマークを検知し、マーク情報１２８において当該検知されたマークに対応付けられている向きを特定し、当該特定された向きを第２入力画像に写るワークＷの向きとして特定する。
【００６１】
なお、上述では、ワークＷが周回軌道に到達した時点におけるワークＷの向きが常に同じである前提で説明を行ったが、ワークＷが周回軌道に到達した時点におけるワークＷの向きは、常に同じである必要はない。当該時点でのワークＷの向きが常に同じなくとも、周回軌道上の一地点でのワークＷの向きが検知されれば、特定部１５２は、当該一地点でのワークＷの向きを基準として、ワークＷの向きを特定することができる。当該一地点でのワークＷの向きの特定は、たとえば、テンプレートマッチングなどの画像処理によって実現される。
【００６２】
（Ｃ３．検査部１５４）
上述したように、取得部１５０は、ワークＷが全方位カメラ３００を周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力し、ワークＷを異なる方向から表わした複数の入力画像を全方位カメラ３００から取得する。検査部１５４は、取得部１５０によって取得された複数の入力画像を用いて検査対象物であるワークＷを検査する。
【００６３】
図１０を参照して、検査部１５４によるワークＷの検査処理について説明する。図１０は、検査部１５４によるワークＷの検査処理を概略的に示す概念図である。
【００６４】
図１０には、入力画像の一例として、ワークＷの「Ａ面」を撮影して得られた入力画像３３Ｂが示されている。以下では、取得部１５０から得られた入力画像の１つである入力画像３３Ｂを例に挙げて、検査部１５４による検査処理について説明する。
【００６５】
検査部１５４は、基準画像情報１３５を参照して、入力画像３３Ｂに写るワークＷを検査する。基準画像情報１３５は、検査対象物と同種類の物体を予め撮影して得られた複数の基準画像を含む。各基準画像には、当該基準画像に写る物体の向きが対応付けられている。基準画像情報１３５は、検査処理が実行される前に予め準備されており、たとえば、コントローラ１００の二次記憶装置１０８（図１２参照）などに予め格納されている。
【００６６】
上述したように、特定部１５２は、入力画像３３Ｂに写るワークＷの向きを特定する。検査部１５４は、基準画像情報１３５を参照して、入力画像３３Ｂに写るワークＷの向きに対応付けられている基準画像を特定する。図１０例では、ワークＷの向き「１３５°」に対応付けられている基準画像１３５Ａが特定される。検査部１５４は、特定された基準画像１３５Ａと入力画像３３Ｂとを比較し、当該比較結果に基づいて入力画像３３Ｂに写るワークＷを検査する。
【００６７】
典型的には、検査部１５４は、特定された基準画像１３５Ａを入力画像３３Ｂ上で走査しながら、基準画像１３５Ａの各部分と入力画像３３Ｂとの類似度群を算出し、当該類似度群の内の最大値を基準画像１３５Ａと入力画像３３Ｂとの類似度として採用する。類似度は、たとえば、基準画像１３５Ａの画像情報（たとえば、画素値）と、入力画像３３Ｂの画像情報（たとえば、画素値）との相関値で表わされる。検査部１５４は、算出された類似度が予め定められた値を超えている場合には、ワークＷの外観が正常であると判断する。一方で、検査部１５４は、算出された類似度が予め定められた値以下である場合には、ワークＷの外観が異常であると判断する。
【００６８】
検査部１５４は、このような検査処理を取得部１５０から取得した全入力画像（たとえば、第１，第２入力画像）について実行する。より具体的には、検査部１５４は、第１入力画像に写るワークＷの向き（第１の向き）に対応付けられている基準画像と、当該第１入力画像とを比較する。同様に、検査部１５４は、第２入力画像に写るワークＷの向き（第２の向き）に対応する基準画像と、当該第２入力画像とを比較する。検査部１５４は、これらの比較結果に基づいて、ワークＷを検査する。
【００６９】
典型的には、検査部１５４は、各入力画像についての算出された類似度が全て予め定められた値を超えている場合に、ワークＷの外観が正常であると判断する。一方で、検査部１５４は、各入力画像についての算出された類似度の少なくとも１つが予め定められた値以下である場合には、ワークＷの外観に異常があると判断する。
【００７０】
典型的には、検査部１５４は、入力画像３３ＢにおいてワークＷが写っている部分を切り出した上で、当該切り出し部分と基準画像１３５Ａとを比較する。より具体的には、全方位カメラ３００が用いられる場合には、入力画像３３ＢにワークＷが写っている位置は、ワークＷと全方位カメラ３００との位置関係に依存する。この点に着目して、検査部１５４は、入力画像３３Ｂの撮影タイミングにおけるワークＷの実際の位置と、全方位カメラ３００との位置関係に基づいて、入力画像３３Ｂ内に写る検査対象物の位置を特定する。その後、検査部１５４は、特定された位置に写っているワークＷと、ワークＷの向きに対応付けられている基準画像とを比較し、当該比較結果に基づいてワークＷを検査する。入力画像内に写るワーク部分を特定した上で当該ワーク部分と基準画像とを比較することで、検査処理にかかる処理時間は、入力画像３３Ｂ内を基準画像１３５Ａに走査させるよりも短くなる。
【００７１】
［Ｄ．コントローラ１００の制御構造］
図１１を参照して、コントローラ１００による検査処理について説明する。図１１は、コントローラ１００による検査処理を表わすフローチャートである。図１１に示される処理は、コントローラ１００のプロセッサ１０２（図５参照）がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【００７２】
ステップＳ１１０において、プロセッサ１０２は、検査処理の実行指示を受け付けたことに基づいて、ロボット２００によるワークＷの移動を開始する。ワークＷは、当該移動過程で、全方位カメラ３００の周囲を周回する。
【００７３】
ステップＳ１１２において、プロセッサ１０２は、撮影タイミングが到来したか否かを判断する。一例として、撮影タイミングは、ワークＷが全方位カメラ３００の周回軌道に到達してから一定時間ごとに到来する。プロセッサ１０２は、撮影タイミングが到来したと判断した場合（ステップＳ１１２においてＹＥＳ）、制御をステップＳ１１４に切り替える。そうでない場合には（ステップＳ１１２においてＮＯ）、プロセッサ１０２は、ステップＳ１１２の処理を再び実行する。
【００７４】
ステップＳ１１４において、プロセッサ１０２は、上述の取得部１５０（図５参照）として、全方位カメラ３００に撮影指示を出力し、ワークＷを表わす入力画像を全方位カメラ３００から取得する。
【００７５】
ステップＳ１１６において、プロセッサ１０２は、上述の特定部１５２（図５参照）として、ステップＳ１１４で取得した入力画像に写るワークＷの向きを特定する。ワークＷの向きの特定方法については図６〜図９で説明した通りであるので、その説明については繰り返さない。
【００７６】
ステップＳ１１８において、プロセッサ１０２は、上述の検査部１５４（図５参照）として、上述の基準画像情報１３５（図１０参照）を参照して、ステップＳ１１６で特定されたワークＷの向きに対応付けられている基準画像を取得し、当該基準画像と入力画像とを比較する。基準画像と入力画像との比較処理については図１０で説明した通りであるので、その説明については繰り返さない。
【００７７】
ステップＳ１２０において、プロセッサ１０２は、ステップＳ１１８での比較結果に基づいて、検査対象物であるワークＷの外観が異常であるか否かを判断する。一例として、プロセッサ１０２は、基準画像と入力画像との類似度が予め定められた値以下である場合に、ワークＷの外観が異常であると判断する。プロセッサ１０２は、ワークＷの外観が異常であると判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１３０に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１２２に切り替える。
【００７８】
ステップＳ１２２において、プロセッサ１０２は、１つのワークＷに対して規定回数の検査が行われたか否かを判断する。当該規定回数は、予め設定されていてもよいし、任意に設定せれてもよい。当該規定回数は、１つのワークＷに対する撮影回数に相当する。プロセッサ１０２は、１つのワークＷに対して規定回数の検査が行われたと判断した場合（ステップＳ１２２においてＹＥＳ）、制御をステップＳ１２４に切り替える。そうでない場合には（ステップＳ１２２においてＮＯ）、プロセッサ１０２は、制御をステップＳ１１２に戻す。
【００７９】
ステップＳ１２４において、プロセッサ１０２は、ワークＷの外観が正常であることを報知する。当該報知の方法は、任意である。一例として、ワークＷの外観が正常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【００８０】
ステップＳ１３０において、プロセッサ１０２は、ワークＷの外観が異常であることを報知する。当該報知の方法は、任意である。一例として、ワークＷの外観が異常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【００８１】
［Ｅ．コントローラ１００のハードウェア構成］
図１２を参照して、本実施の形態に従うコントローラ１００のハードウェア構成について説明する。図１２は、コントローラ１００のハードウェア構成例を示すブロッグ図である。
【００８２】
コントローラ１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、主記憶装置１０６と、二次記憶装置１０８と、ローカルネットワークコントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、メモリカードインターフェイス１１４と、内部バスコントローラ１２２と、フィールドバスコントローラ１１８，１２０と、Ｉ／Ｏユニット１２４−１，１２４−２，…とを含む。
【００８３】
プロセッサ１０２は、二次記憶装置１０８に格納された各種プログラムを読み出して、主記憶装置１０６に展開して実行することで、制御対象に応じた制御、および、上述の検査処理などを実現する。チップセット１０４は、プロセッサ１０２と各コンポーネントを制御することで、コントローラ１００全体としての処理を実現する。
【００８４】
二次記憶装置１０８には、ＰＬＣエンジンを実現するためのシステムプログラムに加えて、ＰＬＣエンジンを利用して実行されるユーザプログラム１３０が格納される。さらに、二次記憶装置１０８には、上述のカメラ位置１３４（図５参照）、上述の基準画像情報１３５なども格納される。ユーザプログラム１３０は、論理的な演算を主とするシーケンスシーケンスプログラム１３１、位置制御や速度制御などの数値的な演算を主とするモーションプログラム１３２、ワークの検査処理を実現するための演算を主とする検査プログラム１３３などを含む。
【００８５】
ローカルネットワークコントローラ１１０は、ローカルネットワークを介した他の装置（たとえば、サーバなど）との間のデータの遣り取りを制御する。ＵＳＢコントローラ１１２は、ＵＳＢ接続を介して他の装置（たとえば、ＰＣ（Personal Computer）など）との間のデータの遣り取りを制御する。
【００８６】
メモリカードインターフェイス１１４は、メモリカード１１６を着脱可能に構成されており、メモリカード１１６に対してデータを書込み、メモリカード１１６から各種データ（ユーザプログラムやトレースデータなど）を読出すことが可能になっている。
【００８７】
内部バスコントローラ１２２は、コントローラ１００に搭載されるＩ／Ｏユニット１２４−１，１２４−２，…との間でデータを遣り取りするインターフェイスである。
【００８８】
フィールドバスコントローラ１１８は、フィールドネットワーク５４を介した他の装置（たとえば、画像センサ５１やカウンタ５２など）との間のデータの遣り取りを制御する。同様に、フィールドバスコントローラ１２０は、フィールドネットワーク５６を介した他の装置（たとえば、ロボット２００）との間のデータの遣り取りを制御する。
【００８９】
図１２には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field-Programmable Gate Array）など）を用いて実装してもよい。あるいは、コントローラ１００の主要部を、汎用的なアーキテクチャに従うハードウェア（たとえば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００９０】
［Ｆ．第１の実施の形態のまとめ］
以上のようにして、本実施の形態に従うコントローラ１００は、検査対象物の姿勢を維持した状態で全方位カメラ３００の周囲をワークＷに周回させるようにロボット２００に指示する。コントローラ１００は、ロボット２００が全方位カメラ３００の周囲をワークＷに周回させている間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力する。このとき、ワークＷの姿勢が維持されているので、全方位カメラ３００から見た場合のワークＷの外観は、ワークＷの位置ごとに変わる。そのため、ワークＷを異なる方向から表わした複数の入力画像が得られる。コントローラ１００は、当該複数の入力画像を用いてワークＷを検査する。
【００９１】
このように、コントローラ１００は、ワークＷが周回している間の異なるタイミングで全方位カメラ３００に撮影指示を出力することで、ワークＷを異なる方向から表わした入力画像３０Ａ〜３０Ｄを１つの全方位カメラ３００から取得することができる。
【００９２】
＜第２の実施の形態＞
［Ａ．概要］
第１の実施の形態においては、ワークＷは、ロボット２００によって全方位カメラ３００を周回させられていた。これに対して、第２の実施の形態においては、ワークＷは、コンベア２００Ａによって全方位カメラ３００を周回させられる。これにより、全方位カメラ３００は、複数のワークＷを同時に撮影することができ。
【００９３】
その他の点については「第１の実施の形態」で説明した通りであるので、以下ではそれらの説明については繰り返さない。
【００９４】
［Ｂ．ワークＷの撮影処理］
図１３および図１４を参照して、第２の実施の形態におけるワークＷの撮影処理について説明する。
【００９５】
図１３は、移動装置としてのコンベア２００ＡがワークＷを搬送している様子を示す図である。図１３には、検査対象物の一例として、ワークＷ１〜Ｗ６が示されている。本実施の形態においては、複数のワークＷ１〜Ｗ６がコンベア２００Ａによって同時に全方位カメラ３００の周囲を搬送される。このとき、コンベア２００Ａは、ワークＷ１〜Ｗ６のそれぞれの姿勢を維持させた状態で、全方位カメラ３００の周囲をワークＷ１〜Ｗ６に周回させる。ワークＷ１〜Ｗ６の姿勢が維持されているので、全方位カメラ３００から見た場合の各ワークの外観は、各ワークの位置ごとに変わる。
【００９６】
コントローラ１００は、ワークＷ１〜Ｗ６が周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力する。これにより、全方位カメラ３００は、各ワークを様々な方向から撮影することができる。その結果、コントローラ１００は、各ワークを異なる方向から表わした複数の入力画像を取得することができる。
【００９７】
図１４は、第２の実施の形態に従う全方位カメラ３００から得られた入力画像の一例を示す図である。一例として、タイミングｔ１１において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷ２の「Ｃ面」と、ワークＷ３の「Ｄ面」と、ワークＷ４の「Ａ面」と、ワークＷ５の「Ｂ面」とを表わす入力画像３７Ａが得られる。タイミングｔ１２において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷ３の「Ｃ面」と、ワークＷ４の「Ｄ面」と、ワークＷ５の「Ａ面」と、ワークＷ６の「Ｂ面」とを表わす入力画像３７Ｂが得られる。タイミングｔ１３において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷ４の「Ｃ面」と、ワークＷ５の「Ｄ面」と、ワークＷ６の「Ａ面」と、ワークＷ７の「Ｂ面」とを表わす入力画像３７Ｃが得られる。タイミングｔ１４において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、ワークＷ５の「Ｃ面」と、ワークＷ６の「Ｄ面」と、ワークＷ７の「Ａ面」と、ワークＷ８の「Ｂ面」とを表わす入力画像３７Ｄが得られる。
【００９８】
撮影指示が出力される間隔は、たとえば、コンベア２００Ａが各ワークを周回（１周）させるためにかかる周回時間を撮影回数で割ることで算出される。たとえば、周回時間が１秒であり、撮影回数が４回である場合には、撮影間隔は、０．２５秒（＝１／４）となる。周回時間および撮影回数は、予め設定されていてもよいし、任意に設定されてもよい。
【００９９】
このように、コントローラ１００は、ワークＷ１〜Ｗ６が周回している間の異なるタイミングで全方位カメラ３００に撮影指示を出力することで、各ワークを異なる方向から表わした複数の入力画像を１つの全方位カメラ３００から取得することができる。
【０１００】
典型的には、コンベア２００Ａは、各ワークが周回軌道に到達した時点での各ワークの向きが常に同じなるように、各ワークを搬送する。その結果、図１４に示されるように、入力画像３７Ａ〜３７Ｄ内の同じ位置には各ワークの同じ面が写る。
【０１０１】
なお、図１３には、ワークＷ１〜Ｗ６が全方位カメラ３００の周囲を１周している例について説明を行ったが、必ずしも、ワークＷ１〜Ｗ６は、全方位カメラ３００の周囲を１周する必要はない。すなわち、ワークＷ１〜Ｗ６は、姿勢を維持した状態で全方位カメラ３００の周囲の少なくとも一部を周回すればよい。
【０１０２】
［Ｃ．ワークＷの検査処理］
図１５を参照して、第２の実施の形態に従う検査部１５４（図５参照）によるワークの検査処理について説明する。図１５は、第２の実施の形態におけるワークの検査処理を概略的に示す概念図である。
【０１０３】
図１５には、入力画像の一例として、ワークＷ２の「Ｃ面」と、ワークＷ３の「Ｄ面」と、ワークＷ４の「Ａ面」と、ワークＷ５の「Ｂ面」とを同時に撮影して得られた入力画像３７Ａが示されている。以下では、得られた入力画像の１つである入力画像３７Ａを例に挙げて、検査部１５４による検査処理について説明する。
【０１０４】
上述の特定部１５２（図５参照）は、入力画像３７Ａに写るワークＷ２〜Ｗ５のそれぞれの向きを特定する。各ワークの向きの特定方法には、「第１の実施の形態」において説明した「第１〜第３特定方法」が採用される。特定部１５２によって特定された各ワークの向きは、検査部１５４に出力される。図１５の例では、各ワークの向きとして「４５°」、「１３５°」、「２２５°」、「３１５°」が検査部１５４に出力されている。
【０１０５】
検査部１５４は、基準画像情報１３５を参照して、入力画像３７Ａに写るワークＷ２〜Ｗ５を検査する。検査対象物と同種類の物体を予め撮影して得られた複数の基準画像を含む。各基準画像には、当該基準画像に写る物体の向きが対応付けられている。基準画像情報１３５は、検査処理が実行される前に予め準備されており、たとえば、コントローラ１００の二次記憶装置１０８（図１２参照）などに予め格納されている。
【０１０６】
検査部１５４は、基準画像情報１３５を参照して、入力画像３７Ａに写るワークＷの向きに対応する基準画像を特定する。図１５例では、ワークの向き「４５°」に対応する基準画像１３６Ａと、ワークの向き「１３５°」に対応する基準画像１３６Ｂと、ワークの向き「２２５°」に対応する基準画像１３６Ｃと、ワークの向き「３１５°」に対応する基準画像１３６Ｄとが特定される。検査部１５４は、特定された基準画像１３６Ａ〜１３６Ｄのそれぞれと入力画像３７Ａとを比較し、当該比較結果に基づいて入力画像３７Ａに写るワークＷ２〜Ｗ５を検査する。入力画像と基準画像との比較処理については図１０で説明した通りであるので、その説明については繰り返さない。
【０１０７】
検査部１５４は、取得部１５０によって取得された複数の入力画像の全てについて、入力画像と基準画像との比較処理を実行する。典型的には、検査部１５４は、各入力画像から同一のワークを抽出し、抽出された各ワーク部分と対応する基準画像との類似度を算出する。たとえば、ワークＷ５についての検査を行う場合には、検査部１５４は、入力画像３７ＡのワークＷ５と基準画像１３６Ａとの類似度を算出し、入力画像３７Ｂ（図１４参照）のワークＷ５と基準画像１３６Ｂとの類似度を算出し、入力画像３７Ｃ（図１４参照）のワークＷ５と基準画像１３６Ｃとの類似度を算出し、入力画像３７Ｄ（図１４参照）のワークＷ５と基準画像１３６Ｄとの類似度を算出する。検査部１５４は、ワークＷ５について算出された全ての類似度が予め定められた値を超えている場合に、ワークＷ５の外観が正常であると判断する。一方で、検査部１５４は、ワークＷ５についての算出された類似度の少なくとも１つが予め定められた値以下である場合には、ワークＷ５の外観に異常があると判断する。
【０１０８】
［Ｄ．コントローラ１００の制御構造］
図１６を参照して、第２の実施の形態に従うコントローラ１００による検査処理について説明する。図１６は、第２の実施の形態に従うコントローラ１００による検査処理を表わすフローチャートである。図１６に示される処理は、コントローラ１００のプロセッサ１０２（図５参照）がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１０９】
ステップＳ２１０において、プロセッサ１０２は、検査処理の実行指示を受け付けたことに基づいて、コンベア２００Ａによるワークの搬送を開始する。ワークは、当該搬送過程で、全方位カメラ３００を周回する。
【０１１０】
ステップＳ２２０において、プロセッサ１０２は、撮影タイミングが到来したか否かを判断する。撮影タイミングは、たとえば、一定時間ごとに到来する。プロセッサ１０２は、撮影タイミングが到来したと判断した場合（ステップＳ２２０においてＹＥＳ）、制御をステップＳ２２２に切り替える。そうでない場合には（ステップＳ２２０においてＮＯ）、プロセッサ１０２は、ステップＳ２２０の処理を再び実行する。
【０１１１】
ステップＳ２２２において、プロセッサ１０２は、上述の取得部１５０（図５参照）として、全方位カメラ３００に撮影指示を出力し、ワークを表わす入力画像を全方位カメラ３００から取得する。
【０１１２】
ステップＳ２２４において、プロセッサ１０２は、ステップＳ２２２で取得した入力画像からワークを検知する。図１で説明したように、プロセッサ１０２は、トラッキング処理によりコンベア２００Ａ上の各ワークの位置を把握している。コンベア２００Ａ上の各ワークの位置と、入力画像内の各ワークの位置とは対応しているため、プロセッサ１０２は、トラッキング処理により特定されるコンベア２００Ａ上の各ワークの位置から入力画像内の各ワークの位置を特定することができる。なお、プロセッサ１０２は、テンプレートマッチングなどの画像処理技術を用いて入力画像内のワークの位置を特定してもよい。
【０１１３】
ステップＳ２２６において、プロセッサ１０２は、上述の特定部１５２（図５参照）として、ステップＳ２２４で検知されたワークから未検査のワークのいずれかを検査対象のワークとして決定し、当該検査対象のワークの向きを特定する。ワークの向きの特定方法には、「第１の実施の形態」において説明した「第１〜第３特定方法」が採用される。
【０１１４】
ステップＳ２２８において、プロセッサ１０２は、上述の検査部１５４（図５参照）として、上述の基準画像情報１３５（図１５参照）を参照して、ステップＳ２２６で特定されたワークの向きに対応する基準画像を取得し、当該基準画像と入力画像とを比較する。基準画像と入力画像との比較処理については図１５で説明した通りであるので、その説明については繰り返さない。
【０１１５】
ステップＳ２３０において、プロセッサ１０２は、ステップＳ２２８での比較結果に基づいて、検査対象のワークの外観が異常であるか否かを判断する。一例として、プロセッサ１０２は、基準画像と入力画像との類似度が予め定められた値以下である場合に、検査対象のワークの外観が異常であると判断する。プロセッサ１０２は、検査対象のワークの外観が異常であると判断した場合（ステップＳ２３０においてＹＥＳ）、制御をステップＳ２３４に切り替える。そうでない場合には（ステップＳ２３０においてＮＯ）、プロセッサ１０２は、制御をステップＳ２３２に切り替える。
【０１１６】
ステップＳ２３２において、プロセッサ１０２は、検査対象のワークの外観が正常であることを報知する。当該報知の方法は、任意である。一例として、ワークの外観が正常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【０１１７】
ステップＳ２３４において、プロセッサ１０２は、検査対象のワークの外観が異常であることを報知する。当該報知の方法は、任意である。一例として、ワークの外観が異常であることは、メッセージとして表示されてもよいし、音声として出力されてもよい。
【０１１８】
ステップＳ２４０において、プロセッサ１０２は、ステップＳ２２４において検知された全ワークの検査が終了したか否かを判断する。プロセッサ１０２は、ステップＳ２２４において検知された全ワークの検査が終了したと判断した場合（ステップＳ２４０においてＹＥＳ）、制御をステップＳ２５０に切り替える。そうでない場合には（ステップＳ２４０においてＮＯ）、プロセッサ１０２は、制御をステップＳ２２６に戻す。
【０１１９】
ステップＳ２５０において、プロセッサ１０２は、検査処理を終了するか否かを判断する。一例として、プロセッサ１０２は、検査処理の終了操作を受け付けた場合に、検査処理を終了すると判断する。プロセッサ１０２は、検査処理を終了すると判断した場合（ステップＳ２５０においてＹＥＳ）、図１６に示される検査処理を終了する。そうでない場合には（ステップＳ２５０においてＮＯ）、プロセッサ１０２は、制御をステップＳ２２０に戻す。
【０１２０】
［Ｅ．第２の実施の形態のまとめ］
以上のようにして、第２の実施の形態においては、検査対象物であるワークは、コンベア２００Ａによって全方位カメラ３００を周回させられる。これにより、全方位カメラ３００は、複数のワークを同時に撮影することができ、複数のワークを同時に検査することができる。
【０１２１】
また、コンベア２００Ａは、ワークの姿勢を維持させた状態で全方位カメラ３００を各ワークに周回させる。コントローラ１００は、ワークが周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力する。これにより、全方位カメラ３００は、様々な方向から各ワークを撮影することができる。その結果、コントローラ１００は、ワークを異なる方向から表わした複数の入力画像を各ワークについて取得することができる。
【０１２２】
＜第３の実施の形態＞
［概要］
第１の実施の形態においては、検査対象物であるワークＷの形状が立方体であった。これに対して、第３の実施の形態においては、検査対象物であるワークＷの形状は円筒形である。ワークが円筒形である場合には、ワークの側面を異なる方向から撮影したとしても、画像内に写るワークの形状は変化しない。そのため、第３の実施の形態に従うコントローラ１００は、検査対象物の形状が円筒形である場合には、ワークの向きを特定しない。これにより処理時間が短縮化される。
【０１２３】
その他の点については「第１の実施の形態」で説明した通りであるので、以下ではそれらの説明については繰り返さない。
【０１２４】
［Ｂ．ワークＷの撮影処理］
図１７および図１８を参照して、第３の実施の形態におけるワークＷの撮影処理について説明する。
【０１２５】
図１７は、第３の実施の形態に従うロボット２００が全方位カメラ３００の周囲をワークＷに周回させている過程を示す図である。図１７に示されるように、本実施の形態においては、ワークＷの形状が円筒形である。コントローラ１００は、ワークＷが全方位カメラ３００の周囲を周回している間の複数のタイミングにおいて全方位カメラ３００に撮影指示を出力する。これにより、全方位カメラ３００は、様々な方向からワークＷを撮影することができる。その結果、コントローラ１００は、ワークＷを異なる方向から表わした複数の入力画像を全方位カメラ３００から取得することができる。
【０１２６】
図１８は、第３の実施の形態に従う全方位カメラ３００から得られた入力画像の一例を示す図である。一例として、タイミングｔ２１において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、入力画像３９Ａが得られる。同様に、タイミングｔ２２において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、入力画像３９Ｂが得られる。同様に、タイミングｔ２３において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、入力画像３９Ｃが得られる。同様に、タイミングｔ２４において、コントローラ１００は、全方位カメラ３００に撮影指示を出力したとする。その結果、入力画像３９Ｄが得られる。
【０１２７】
入力画像３９Ａ〜３９Ｄに示されるように、ワークＷが円筒形である場合には、ワークＷの側面を異なる方向から撮影したとしても、入力画像内に写るワークＷの形状は変化しない。そのため、本実施の形態に従うコントローラ１００は、入力画像内に写るワークの向きを特定しなくてもよい。また、本実施の形態においては、ワークＷの向きごとに基準画像を準備する必要がなく、少なくとも１つの基準画像が準備されていれば十分である。
【０１２８】
コントローラ１００は、ワークＷを各方向から撮影して得られた入力画像のそれぞれと、予め準備されている基準画像とを比較し、当該比較結果に基づいて、ワークＷを検査する。これにより、コントローラ１００は、あらゆる方向から円筒形状のワークＷを検査することができる。
【０１２９】
［第３の実施の形態のまとめ］
以上のようにして、ワークが円筒形である場合には、ワークの側面を異なる方向から撮影したとしても、入力画像内に写るワークの形状は変化しない。そのため、本実施の形態に従うコントローラ１００は、検査対象物の形状が円筒形である場合には、ワークの向きを特定しない。これにより処理時間が短縮化される。
【０１３０】
＜第４の実施の形態＞
第１の実施の形態においては、ロボット２００は、全方位カメラ３００の周囲をワークＷに円形に周回させていた。これに対して、第４の実施の形態においては、ロボット２００は、全方位カメラ３００の周囲をワークＷに正方形に周回させる。
【０１３１】
図１９は、ロボット２００が、全方位カメラ３００の周囲をワークＷに正方形に周回させている様子を示す図である。このように、ワークＷの周回軌道は、円形に限定されない。ワークＷの姿勢が維持された状態であれば、ワークＷの周回軌道は任意である。たとえば、ワークＷの周回軌道は、楕円形であってもよいし、矩形であってもよいし、その他の形状であってもよい。
【０１３２】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１３３】
１  検査システム、２０Ａ，２０Ｂ，２００Ａ  コンベア、３０Ａ〜３０Ｄ，３３Ａ〜３３Ｄ，３７Ａ〜３７Ｄ，３８，３９Ａ〜３９Ｄ  入力画像、５１  画像センサ、５２  カウンタ、５３  エンコーダ、５４，５６  フィールドネットワーク、１００  コントローラ、１０２  プロセッサ、１０４  チップセット、１０６  主記憶装置、１０８  二次記憶装置、１１０  ローカルネットワークコントローラ、１１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１１８，１２０  フィールドバスコントローラ、１２２  内部バスコントローラ、１２４  Ｉ／Ｏユニット、１２８  マーク情報、１３０  ユーザプログラム、１３１  シーケンスシーケンスプログラム、１３２  モーションプログラム、１３３  検査プログラム、１３４  カメラ位置、１３５  基準画像情報、１３５Ａ，１３６Ａ〜１３６Ｄ  基準画像、１５０  取得部、１５２  特定部、１５４  検査部、２００  ロボット、２１０  把持部分、２１１  メモリ、２１１Ａ，２１１Ｂ  マーク、３００  全方位カメラ、３３１  全方位ミラー、３３２  撮影ユニット。
【図１】
2018116007.tif 000003
【図２】
2018116007.tif 000004
【図３】
2018116007.tif 000005
【図４】
2018116007.tif 000006
【図５】
2018116007.tif 000007
【図６】
2018116007.tif 000008
【図７】
2018116007.tif 000009
【図８】
2018116007.tif 000010
【図９】
2018116007.tif 000011
【図１０】
2018116007.tif 000012
【図１１】
2018116007.tif 000013
【図１２】
2018116007.tif 000014
【図１３】
2018116007.tif 000015
【図１４】
2018116007.tif 000016
【図１５】
2018116007.tif 000017
【図１６】
2018116007.tif 000018
【図１７】
2018116007.tif 000019
【図１８】
2018116007.tif 000020
【図１９】
2018116007.tif 000021