(58)【調査した分野】(Int.Cl.,DB名)
前記予測演算工程では、前記第1の撮影工程で撮影した複数の画像それぞれから算出した複数の前記対象物の重心位置に基づき、前記対象物の移動経路を演算し、該移動経路に基づいて前記到達するタイミングを予測演算する、
ことを特徴とする請求項1記載の画像撮像方法。
前記予測演算工程では、前記第1の撮影工程で撮影した複数の画像において、連続する2枚の前記画像で対応する画素同士の撮影輝度を比べ、前記撮影輝度が所定の閾値以下の差分である場合に当該画素を背景として第1の輝度に変更し、前記撮影輝度が前記閾値を超える差分である場合に当該画素を前記第1の輝度とは異なる第2の輝度に変更することにより背景除去処理し、これら背景除去処理した複数の画像を利用して前記到達するタイミングを演算する、
ことを特徴とする請求項1乃至3のいずれか1項に記載の画像撮像方法。
前記カメラ制御部は、前記第1の画質で撮影した複数の画像において、連続する2枚の前記画像で対応する画素同士の撮影輝度を比べ、前記撮影輝度が所定の閾値以下の差分である場合に当該画素を背景として第1の輝度に変更し、前記撮影輝度が前記閾値を超える差分である場合に当該画素を前記第1の輝度とは異なる第2の輝度に変更することにより背景除去処理し、これら背景除去処理した複数の画像を利用して前記到達するタイミングを予測演算する、
ことを特徴とする請求項8乃至10のいずれか1項に記載の画像撮像装置。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。
【0015】
[第1実施形態]
図1に示すように、生産システムとしてのロボット装置1は、生産装置としてのロボット本体2と
、対象物としてのワークWを上方から撮影可能な画像撮像装置3と、ロボット本体2及び画像撮像装置3を制御する制御装置4と、を備えている。本実施形態では、ロボット本体2は、ワークWを把持して500mm×500mmの作業領域を予め教示した軌道に沿って、最大2000mm/sの速度で搬送可能になっている。
【0016】
ロボット本体2は、多関節ロボットであり、6軸の垂直多関節アーム(以下、アームと呼ぶ)21と、エンドエフェクタである把持ツールとしてのハンド22とを有している。本実施形態では、アーム21として6軸の垂直多関節アームを適用しているが、軸数は用途や目的に応じて適宜変更してもよい。また、本実施形態では、エンドエフェクタとしてハンド22を適用しているが、これには限られず、ワークWを把持あるいは保持して移動させることができるツールの全般を含めることができる。
【0017】
アーム21は、7つのリンク61〜67と、各リンク61〜67を揺動又は回動可能に連結する6つの関節71〜76とを備えている。各リンク61〜67としては、長さが固定されたものを採用している。但し、例えば、直動アクチュエータにより伸縮可能なリンクを採用してもよい。各関節71〜76には、各関節71〜76を各々駆動するモータと、モータの回転角度を検知するエンコーダと、各モータに供給する電流を検知する電流センサと、各関節71〜76のトルクを検知するトルクセンサと、が設けられている。
【0018】
ハンド22は、アーム21の先端リンク67に取り付けられて支持され、アーム21の動作により位置及び姿勢の少なくとも一自由度が調整されるようになっている。ハンド22は、2本の指23と、これら指23の間隔を開閉可能に支持するハンド本体24とを備え、指23同士が接近する閉動作によりワークWを把持可能になっている。
【0019】
ハンド本体24には、指23を動作させるためのモータと、該モータの回転角度を検知するエンコーダと、先端リンク67に連結される連結部とが設けられている。尚、本実施形態では、ハンド22は指23を2本有するものとしているが、これには限られず、ワークWを把持するために指の数は2本以上あればよい。
【0020】
図3に示すように、ハンド22の少なくとも画像撮像装置3から撮影される側面は、輝度の低い色、例えば黒色に塗装されている。画像撮像装置3により撮影されるハンド22の撮影背景も輝度の低い色、例えば黒色とされている。尚、ハンド22の少なくとも画像撮像装置3から撮影される側面の色は黒色には限られず、後述するようにワークWの輝度に対して十分な差がある色であれば、黒色でなくてもよい。また、
図3ではアーム21の図示を省略しているが、実際にはアーム21がハンド22を支持しているのは勿論である。
【0021】
図2に示すように、制御装置4は、コンピュータにより構成され、ロボット本体2及び画像撮像装置3を制御するようになっている。制御装置4を構成するコンピュータは、例えばCPU40と、各部を制御するためのプログラムを記憶するROM41と、データを一時的に記憶するRAM42と、入出力インタフェース回路(I/F)43とを備えている。
【0022】
本実施形態では、ワークWは、製品を構成する部品であり、上方から視て例えば50mm×50mm角程度の大きさとしている。ワークWは、パレット上に厳密な位置決めがされることなく置かれており、ハンド22によりピックアップされ、製品組立てのため所定の位置まで搬送されるようになっている。ワークWは、ハンド22にピックアップされた状態では、どのような位置姿勢を取っているか不明である。このため、画像撮像装置3により精細画像を撮影した後に、制御装置4での画像処理により位置姿勢を計測して、アーム21により位置姿勢を修正された上で、例えば、他のワークに組み付けられるようになっている。
【0023】
図3に示すように、本実施形態では、ワークWは輝度の高い色、例えば白色であるようにしている。このため、画像撮像装置3により撮影された画像では、ワークWが、黒色のハンド22及び撮影背景に対して明確に認識されるようになっている。但し、ワークWの色は白色には限られず、ワークW及び撮影背景の輝度に対して十分な差がある色であれば、白色でなくてもよい。
【0024】
次に、本実施形態の特徴部である画像撮像装置3について、
図2に基づいて詳細に説明する。画像撮像装置3は、ロボット本体2から離隔して配置され、例えば、基台に支持された架台に固定されて支持されている。画像撮像装置3は、ワークWを撮影するカメラ部30と、該カメラ部30を制御して画像データを取得して処理するカメラ制御部50とを備えている。
【0025】
カメラ部30は、撮影光学系としてのレンズ31と、該レンズ31からの画像を取り込んで電気信号に変換する撮像素子32とを備えている。レンズ31と撮像素子32とを組み合わせた光学系は、100mm×100mmの撮影視野33を持つようにしている(
図3参照)。
【0026】
撮像素子32としては、例えばCMOSイメージセンサを適用している。但し、これには限られず、CCDセンサ等を適用してもよい。撮像素子32は、約4メガピクセル(2048×2048画素)の空間解像度を持ち、各画素は8bitのbit深度を持ち、10対のLVDS信号により画像を出力する。即ち、撮像光学系の画素分解能は、約50μm×50μmである。撮像素子32により4メガピクセルを出力する場合のフレームレートは、例えば160fpsである。
【0027】
尚、
図3に示すように、撮影視野33の座標系は、画像撮像装置3で撮影可能な2048×2048画素の画像エリア上に構成し、画像エリアの水平方向の右向きをx方向、垂直方向の下向きをy方向と定義する。座標の原点(x=1、y=1)は、画像エリアの左上の点とする。また、画像エリアの右上の点は(x=2048、y=1)、左下の点は(x=1、y=2048)、右下の点は(x=2048、y=2048)とする。
【0028】
撮像素子32は、SPI(Serial Peripheral Interface)等の通信を介して、内蔵されるレジスタへ設定値を書き込んだ上で、約4メガピクセルの精細画像を読み出すようになっている。撮像素子32は、内蔵されるレジスタに書き込んだ設定値により、1/2×1/2(1画素飛ばし)、1/4×1/4(3画素飛ばし)等の間引き量で画像を間引きした低画質(第1の画質)の間引き画像を読み出しできる。また、間引きした量に応じてフレームレートを高速化でき、例えば1/4×1/4の間引きであれば、例えばフレームレートは16倍の2560fpsとなる。
【0029】
また、撮像素子32の撮影モードは、一定のフレームレートで連続的に画像を撮影する連続撮影モードと、外部トリガによって1枚の画像を撮影するトリガ撮影モードとに切換可能になっている。更に、撮像素子32は、2048×2048画素の有効画素の中から、実際に読み出す矩形領域を指定する部分読み出し機能を備えている。部分読み出し機能を有効にすると、読み出し範囲のピクセル数に応じてフレームレートは高速になる。
【0030】
撮像素子32は、ベイヤ型のRGBカラーフィルタを搭載しており、例えば撮像した画像を1/4×1/4(縦横3画素飛ばし)で間引けば、全画素がR(赤色)のカラーフィルタを搭載した画像となる。撮像素子32は、各撮影フレームで、信号伝送中は垂直同期信号がHighとなる。
【0031】
本実施形態においては、後述するコントローラ58が、1/4×1/4の間引き読み出しで、かつ連続撮影モードとする設定値を、撮像素子32のレジスタへ書込んで、高速撮影状態で待機する。本実施形態では、この撮影モードを動画撮影モードと呼ぶ。例えば、
図5(a)〜(e)に示すように、動画撮影モードで撮影した場合は、フレームレートによって定められる一定時間ごとに連続撮影される。
【0032】
ワークWが撮影視野33に入り、カメラ制御部50が、精細画像での撮影タイミングと撮影位置を算出する。そして、コントローラ58は、間引き設定を解除して、部分読み出し領域34を指定することで(
図6(f)参照)、撮像素子32のレジスタにトリガ撮影モードとする設定値を書き込む。コントローラ58は、撮像素子32を、撮影トリガを待機する状態とし、トリガが入力されたら間引きの無い高画質(第2の画質)の精細画像を1枚撮影する。本実施形態では、この撮影モードをトリガ撮影モードと呼ぶ。即ち、カメラ部30は、ワークWを、少なくとも2つの異なる画質を切り換えて撮影可能になっている。
【0033】
図2に示すように、撮像素子32で得られた間引き画像及び精細画像は、いずれも後述する画像入力インタフェース(I/F)51へ出力される。
【0034】
カメラ制御部50は、画像入力インタフェース51と、画像分岐部52と、画像出力インタフェース(I/F)53と、位置検出部54と、内部メモリ55と、時刻予測部56と、位置予測部57と、コントローラ58と、遅延部59とを備える。また、カメラ制御部50は、これらを搭載する電子回路基板からなる。画像分岐部52と、位置検出部54と、内部メモリ55と、時刻予測部56と、位置予測部57と、コントローラ58と、遅延部59とは、電子回路基板上に実装されるFPGAデバイスの中の演算ブロックとして実装されている。FPGAとは、Field−Programmable Gate Arrayである。演算ブロックは、周知のHDL言語でのハードウェア記述を基にした合成回路と、FPGAが備えるマクロ回路とにより実装されている。
【0035】
尚、本実施形態では、画像入力インタフェース51及び画像出力インタフェース53はFPGAとは別個に実装されているが、これには限られずFPGA内に実装してもよい。また、本実施形態では、FPGAにより演算ブロックを構成しているが、これには限られず、例えば、プログラムにより動作するコンピュータ(CPUやMPU等を含む)や、ASIC等を適用してもよい。ASICとは、Application Specific Integrated Circuitである。これらの構成は、回路面積、コスト、演算速度等の性能のバランスを考慮した上で、適宜設計することができる。
【0036】
画像入力インタフェース51としては、撮像素子32から入力したLVDS信号を、電子回路内で扱いやすいパラレル信号に変換する周知のデシリアライザICを用いる。LVDS信号とは、Low Voltage Differential Signal、即ち、低電圧差動シグナリングである。デシリアライザICとしては、LVDS信号の差動ペアを10対入力できるものを用いる。デシリアライザICとして、差動ペアの入力数が不足するものを複数個並列で用いてもよい。ここでは、画像入力インタフェース51の出力は、80bit(8bit×10TAP)のパラレル信号、画素クロック信号、水平同期信号、垂直同期信号とし、画像分岐部52へ出力される。尚、上述のデシリアライザICを用いずに、LVDS信号の入力が可能な周知のFPGAデバイスに入力し、パラレル信号に変換するようにしてもよい。
【0037】
画像分岐部52は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックである。画像分岐部52は、画像入力インタフェース51から入力したパラレル信号、画素クロック信号、水平同期信号、垂直同期信号を、コントローラ58から入力した撮影設定に基づいて、画像出力インタフェース53あるいは位置検出部54へ出力する。撮影設定とは、撮像する画像が間引き画像であれば「0」、撮像する画像が精細画像であれば「1」とする1bit信号である。例えば、パラレル信号、画素クロック信号、水平同期信号、垂直同期信号は、撮影設定が「0」であれば位置検出部54へ出力され、撮影設定が「1」であれば画像出力インタフェース53へ出力される。
【0038】
画像出力インタフェース53は、画像分岐部52から入力した80bitのパラレル信号、画素クロック信号、水平同期信号、垂直同期信号を、カメラリンク等のLVDS映像信号に変換する周知のシリアライザICを用いている。若しくは、LVDS信号の出力が可能なFPGAデバイスを用い、FPGA内でパラレル信号をシリアル信号に変換してもよい。画像出力インタフェース53から出力されたLVDS信号は、制御装置4に入力され、外部のカメラリンクグラバボード等で受信され、CPU40等で画像処理される。
【0039】
位置検出部54は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックである。位置検出部54は、画像分岐部52から入力した80bitのパラレル信号、画素クロック信号、水平同期信号、垂直同期信号からなる画像信号に対して、画像上におけるワークWの位置を移動経路に基づき計算して検出する。具体的な計算手法については後述する。位置検出部54は、検出されたワークWの画像の重心のx座標及びy座標を時刻予測部56に出力する。
【0040】
内部メモリ55は、位置検出部54で検出されたワークWの画像の重心のx座標及びy座標を、例えば2フレーム分保存する程度の小容量としている。
【0041】
時刻予測部56は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックである。時刻予測部56は、位置検出部54から入力したワークWの画像の重心のx座標及びy座標と、コントローラ58から入力したフレームレートの値を基に、目標撮影位置35a(
図6(f)参照)にワークWが至る時刻(タイミング)を予測する。
【0042】
コントローラ58は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックである。コントローラ58は、予め撮像素子32に対しSPIインタフェースを介して1/4×1/4の間引き設定、及び外部トリガによらない連続撮影設定を指令して動画撮影モードにする。また、コントローラ58は、画像分岐部52に対して撮影設定として「0」を出力し、ワークWが撮影視野に現れて位置予測部57から入力があるまで待機する。
【0043】
ワークWが撮影視野33に現れて、位置予測部57から予測時刻と、ワークWの画像の重心のx座標及びy座標とが入力された場合、コントローラ58は以下のように動作する。まず、コントローラ58は、撮像素子32に対しSPIインタフェースを介して動画撮影モードを解除し、外部トリガによるトリガ撮影モードに設定する。そして、コントローラ58は、ワークWの画像の重心のx座標及びy座標を中心とした画像内でのワークWのサイズと同サイズの範囲をROI(Region Of Interest)とし、撮像素子32の読み出し範囲として設定する。更に、コントローラ58は、画像分岐部52に対して撮影設定として「1」を出力し、予測時刻を遅延部59へ出力する。
【0044】
遅延部59は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックである。遅延部59は、内部にタイマを持ち、撮像素子32からはストローブ信号を、コントローラ58からは予測時刻を入力し、最後に入力したストローブ信号を基準に、入力した予測時刻まで待機し、予測時刻になったら撮像素子32にトリガ信号を出力する。
【0045】
次に、本実施形態のロボット装置1によってワークWを把持して搬送する際に、画像撮像装置3によりワークWを撮影してその位置姿勢を算出する動作の手順について、
図4に示すフローチャートに沿って説明する。
【0046】
ワークWを搬送する前に、予めロボット本体2に教示を行っておく。ここでは、ハンド22にワークWを把持させ、ワークWが画像撮像装置3の撮影視野33を一定速度で直線上を通過するよう、ロボット本体2に教示する。ワークWは、撮影視野33をほぼ水平方向(x方向)に移動するようにハンド22の動作を教示し、ワークWが撮影視野33で水平方向の中心位置に至った瞬間の画像を撮影するようにする。
【0047】
本実施形態では、ワークWを把持したハンド22が、撮影視野33を2000mm/sの一定速度で移動され、ワークWは撮影視野33の中心付近を通り、移動方向は撮影視野33においてx方向に近い方向となるようにする。即ち、撮影視野33の左端(x=1)から現れて、ほぼx方向へ直線的に移動し、撮影視野33の右端(x=2048)へ消失するように移動させる。
【0048】
また、
図6(f)に示すように、時刻予測部56の予測に使用する目標撮影位置35aは、所定のタイミングでワークWの重心が位置すると予測される目標点であり、目標位置範囲35の中にあるものとする。
図3に示すように、目標位置範囲35は、x座標を1024、y座標を1〜2048とするy方向に沿った直線であり、撮影視野33での中心点を通るy方向の線(x座標)としている。
【0049】
ここで、例えば、ワークWが複数箇所に区切られたトレイの中で各区画に1つずつ収納されている等、ワークWの供給位置が個別に異なる場合は、ワークWが目標位置範囲35に達した場合でも、ハンド22がワークWを把持する位置は毎回異なる。このため、ハンド22がワークWを把持してから組付先へ向かう軌道は、必ずしも一定ではない。そこで、ワークWが目標位置範囲35に達した際に、ワークWのy方向の位置は様々であり、ワークWの位置を中心とした適切な画像領域でワークWを撮影して読み出すために、y方向の位置を予測して1点の目標撮影位置35aを予測するようにしている。尚、ワークWが撮影視野33において目標位置範囲35に至った際のy方向の位置、即ち目標撮影位置35aは、後述のように位置予測部57が予測する。
【0050】
ロボット装置1の動作が開始されると、コントローラ58は、SPI等の通信により、撮像素子32を動画撮影モードに設定し、撮影を開始する(ステップS1)。コントローラ58は、撮像素子32が動画撮影モードであることを示す信号を画像分岐部52へ出力する。これにより、コントローラ58は、画像分岐部52に、撮像素子32により動画撮影モードで撮影され画像入力インタフェース51から入力された画像を、位置検出部54へ分岐させるための制御信号を与える。また、コントローラ58は、撮像素子32のフレームレートを時刻予測部56へ出力し、時刻予測部56が予測計算にフレームレートの値を使用できるようにする。
【0051】
撮影が開始されると、ロボット本体2はワークWを搬送する(ステップS2)。ワークWの搬送中は、画像撮像装置3での処理は撮影モードによって異なる(ステップS3)。撮影モードが動画撮影モードである場合は、撮像素子32は、撮影モードが変更されるまでの間、撮影視野33の全域において連続的に間引き画像を撮影し続け、そのデータを以下の手順で位置検出部54に送信する(ステップS4、第1の撮影工程)。
【0052】
まず、撮像素子32により撮影された画像は、例えばLVDS信号として、順次画像入力インタフェース51へ出力される。この時、LVDS信号は、例えば10対の差動信号線で伝送され、各々の差動信号線では7逓倍でシリアライズされたシリアル信号が出力される。同時に、撮像素子32は、毎回の撮影時に発生するストローブ信号を遅延部59へ出力し、後に精細画像を撮影する際の撮影トリガを正確なタイミングで発生させるための基準信号として機能させる。
【0053】
画像入力インタフェース51は、撮像素子32からLVDS信号として連続的に入力された間引き画像を、順次パラレル信号の画像データに変換し、画像分岐部52へ出力する。画像分岐部52は、予めコントローラ58により、撮像素子32が動画撮影モードであることを示す信号を入力されており、動画撮影モードで撮影された画像データを位置検出部54に順次出力する。
【0054】
位置検出部54は、入力された間引き画像の中で、ワークWが存在する位置を計算して検出する(ステップS5)。本実施形態では、位置検出部54は画像内でワークWが存在する位置として、ワークWの画像の重心のx座標及びy座標を算出するようにしており、その計算手法を、以下に詳細に説明する。
【0055】
本実施形態では、ハンド22及び撮影背景は黒色、ワークWは白色であるため、位置検出部54に入力される画像信号は、
図5に示す画像となる。位置検出部54は、入力されたパラレル画像信号に対し、1画素を意味する8bit毎に、二値化処理を行う。二値化処理は、予め定めた閾値(例えば128)を超えればHIGH(1)、閾値以下ならばLOW(0)とすることで実行する。
図5(a)〜(e)の各画像を二値化した画像のイメージを、同じ図番で対応させて
図6(a)〜(e)の二値画像に示す。但し、本実施形態では後述するように二値化処理は画素レベルでパイプライン処理されるので、
図6(a)〜(e)のようなまとまった二値画像が保存あるいは出力されることはない。
【0056】
ここで、画素値(輝度値)が0か1である二値画像の重心を計算する方法について説明する。画像の重心とは、一般に、輝度値を質量とみなした時の質量分布の中心座標を表すもので、二値画像においては輝度値が1である複数の画素の中心座標となる。また、画像の重心を計算するには、画像の0次モーメント及び1次モーメントを利用する。画像のモーメントも、一般に輝度値を質量とみなした時の重力のモーメントを表している。二値画像における0次モーメントは、輝度値が1である画素数の総和を表し、二値画像における1次モーメントは、輝度値が1である画素の位置座標値の総和を表す。本実施形態では、x方向について計算した画像の1次モーメントを画像の水平1次モーメント、y方向について計算した画像の1次モーメントを画像の垂直1次モーメントと呼ぶ。画像の重心のx座標は、画像の水平1次モーメントに画像の0次モーメントの逆数を乗じることにより計算でき、画像の重心のy座標は、画像の垂直1次モーメントに画像の0次モーメントの逆数を乗じることにより計算できる。
【0057】
以上を踏まえ、得られた二値信号に対して画像の0次モーメントと、画像の水平1次モーメントと、画像の垂直1次モーメントとを計算する。位置検出部54は、FPGAの演算ブロック内に、水平座標レジスタと、垂直座標レジスタと、0次モーメントレジスタと、水平1次モーメントレジスタと、垂直1次モーメントレジスタとを備えている。水平座標レジスタは、画素クロックに同期してインクリメントされ、水平同期信号に同期してリセットされる。垂直座標レジスタは、水平同期信号に同期してインクリメントされ、垂直同期信号に同期してリセットされる。0次モーメントレジスタは、画像の0次モーメントの累積値を保持する。水平1次モーメントレジスタは、画像の水平1次モーメントの累積値を保持する。垂直1次モーメントレジスタは、画像の垂直1次モーメントの累積値を保持する。
【0058】
各レジスタは初期値として0を保持する。初めに1bitの二値画像信号が入力されると、1bitの値が0次モーメントレジスタの値に足し合わされる。また、(bitの値×(水平座標レジスタの値)×4)を計算し、水平1次モーメントレジスタの値に足し合わす。また、(bitの値×(垂直座標レジスタの値)×4)を計算し、垂直1次モーメントレジスタの値に足し合わす。
【0059】
以上の計算を、画素クロックに同期して全画素分(2048×2048画素)の回数繰り返す。これにより、間引き画像全体の画像の0次モーメントと、画像の水平1次モーメントと、画像の垂直1次モーメントとが、それぞれ0次モーメントレジスタ、水平1次モーメントレジスタ、垂直1次モーメントレジスタに格納される。
【0060】
次に、計算された画像の0次モーメントと、画像の水平1次モーメントと、画像の垂直1次モーメントとから、画像の重心を計算する。画像の重心のx座標は、(水平1次モーメントレジスタ値/0次モーメントレジスタ値)の式でハードウェア演算される。画像の重心のy座標は、(垂直1次モーメントレジスタ値/0次モーメントレジスタ値)の式でハードウェア演算される。
【0061】
以上のように演算されたワークWの画像の重心のx座標及びy座標が、位置検出部54から出力され、時刻予測部56に入力される。ここで、撮影視野にワークWが存在しない場合は、位置検出部54は、ワークWの画像の重心の水平座標及び垂直座標として「0」を出力する。
【0062】
尚、以上で述べた演算のうち、各画素における二値化処理と画像の0次モーメント、画像の水平1次モーメント、画像の垂直1次モーメントの計算のための累積計算は、パイプライン処理により行われる。即ち、例えば全ての画素の二値化処理が終わるまで待つのではなく、2画素目の二値化処理を行っている時間には同時に1画素目の累積計算を行い、3画素目の二値化処理を行っている時間には同時に2画素目の累積計算を行う。
【0063】
本実施形態の説明では、ワークWの位置を間引き画像から検出する方法として、画像の二値化処理と、画像の0次モーメントと、画像の水平1次モーメントと、画像の垂直1次モーメントとの計算を行った上で画像の重心を計算する方法について説明した。しかしながら、これには限られず、撮影背景が黒色であることを前提とした周知の物体検出方法を用いてもよい。例えば、予め間引き画像と対応する分解能を持つワークWのテンプレート画像をFPGA内に格納し、周知のテンプレートマッチングを行う処理回路をFPGAに実装し、ワークWの位置を検出してもよい。また、画像にノイズが混じり、ワークWがカメラの撮影視野33に存在しなくてもワークWが検出されてしまう場合には、画像の0次モーメントの値を閾値にして出力座標を「0」にする等のフィルタ処理を施してもよい。
【0064】
時刻予測部56は、コントローラ58からフレームレートを入力したときに、予めフレーム間の時間間隔を求めておく。時間間隔は、フレームレートと時間間隔とを紐付けるLUT(Look Up Table)をFPGA内に実装することで求める。若しくは、FPGA内に除算回路を構成して、フレームレートの逆数を計算してもよい。
【0065】
時刻予測部56は、位置検出部54から入力したワークWの画像の重心のx座標及びy座標を、FPGA内の内部メモリ55に保存する。内部メモリ55は、座標を少なくとも2フレーム分保存し、ワークWの画像の重心のx座標及びy座標が書き込まれると、最も古い1フレーム分の値を削除し、常に最新の2フレーム分の値を保存する。初期状態として、2フレーム分の画像の重心のx座標及びy座標に「0」が保存されている。撮影視野33にワークWが出現するまでは、以上の保存サイクルを繰り返す。
【0066】
更に、時刻予測部56は、保持したワークWの画像の重心のx座標及びy座標の両値が、2フレーム連続で所定の閾値を超えたか否かを判断する(ステップS6)。閾値は、ワークWの全体が撮影視野33に現れるまで待機するためのパラメータであり、例えば、x座標についてはワークWのx方向のサイズに相当するピクセル数の半分とし、y座標についてはワークWのy方向のサイズに相当するピクセル数の半分とする。
【0067】
具体的には、
図6(a)〜(c)に示す状態では、ワークWはx方向において撮影視野33に入り切っていないので、重心のx座標は閾値より小さくなる。これに対し、
図6(d)(e)に示す状態では、ワークWの画像の全体が撮影視野33に入っているので、重心のx座標及びy座標の両値が閾値を超える。
【0068】
時刻予測部56が、保持したワークWの画像の重心のx座標及びy座標の両値が2フレーム連続では閾値を超えていないと判断した場合は、ワークWの搬送及び動画撮影モードでの撮影を続行する(ステップS2)。
【0069】
時刻予測部56が、保持したワークWの画像の重心のx座標及びy座標の両値が2フレーム連続で所定の閾値を超えたと判断した場合は、ワークWが目標位置範囲35を通過する予測時刻を算出する(ステップS7、予測演算工程)。以下、時刻予測部56が2フレーム分の位置の値とフレーム間の時間間隔の値とを使った線形予測によって予測時刻を算出する手順を、詳細に説明する。
【0070】
まず、2フレーム分のワークWの画像の重心のx座標及びy座標、フレーム間の時間間隔を用い、周知の線形補間処理により、画像の重心のx座標及び時間tとの関係を表す関数と、画像の重心のy座標及び時間tの関係を表す関数とを導出する。
【0071】
具体的には、
図6(d)(e)に示すように、2フレーム分の画像の重心のx座標をそれぞれx1,x2と定義し、2フレーム分の画像の重心のy座標をそれぞれy1,y2と定義する。そして、
図7に示すように、フレーム間の時間間隔をTとし、2フレーム目を撮影した時間を時刻0、即ちt=0とする。また、ワークWの画像の重心のx座標及び時間tの関係を表す関数を、傾きをa、切片をbとした直線の式としてx=at+bとする。同様に、ワークWの画像の重心のy座標及び時間tの関係を表す関数を、傾きをc、切片をdとした直線の式としてy=ct+dとする。
【0072】
これらの式からa,b,c,dを求める。a,b,c,dはそれぞれ、a=(x2−x1)/T、b=x2、c=(y2−y1)/T、d=y2により求めることができる。ここで、目標位置範囲35のx座標を目標x座標xとすると、予測時刻は、t=(x−b)/aで算出できる。尚、目標位置範囲35をy座標にした場合には、t=(y−d)/cとなる。
【0073】
時刻予測部56は、上述の2つの式に、予め定めた目標位置範囲35のx座標あるいはy座標を代入して予測時刻を算出し、a,b,c,dの値及び予測時刻を位置予測部57へ出力する。尚、本実施形態では、2フレーム分の画像の重心のx座標及びy座標を用いて線形補間により予測時刻を算出したが、3フレーム分以上の重心座標を用いて、2次式、3次式、楕円、その他の曲線等で近似してもよい。また、前述した通り、目標位置範囲35をy座標とした場合には、画像の重心のy座標を用いて同様に予測時刻を算出する。以上の処理は、FPGA内で加算回路、減算回路、乗算回路、除算回路を構成することにより実装する。
【0074】
位置予測部57は、時刻予測部56から入力されたa,b,c,dの値と予測時刻より、予測時刻におけるワークWの画像の重心のx座標及びy座標、即ち予測位置である目標撮影位置35aを算出する(ステップS8、予測演算工程)。位置予測部57は、ワークWの画像の重心のx座標及びy座標を、時間関数x=at+b,y=ct+dに予測時刻を代入することにより計算する。位置予測部57は、算出した予測時刻と、ワークWの画像の重心のx座標及びy座標とを、コントローラ58へ出力する。
【0075】
尚、本実施形態のように目標位置範囲35をx座標とした場合は、位置予測部57で計算するワークWの画像の重心のx座標は目標位置範囲35と同じであるので、予め値をFPGA内のレジスタに記憶しておいて利用してもよい。また、目標位置範囲35をy座標とした場合には、位置予測部57で計算するワークWの画像の重心のy座標は目標位置範囲35と同じであるので、予め値をFPGA内のレジスタに記憶しておいて利用してもよい。この処理は、FPGA内で加算回路及び乗算回路を構成することにより実装する。
【0076】
コントローラ58は、予測位置を中心としたワークWの画像内でのサイズと同サイズの範囲をROIとし、それを
図6(f)に示すように、撮像素子32の目標撮影位置35aを中心とする部分読み出し領域34として設定する。コントローラ58は、動画撮影モードを解除し、トリガ信号に同期して精細画像を撮影するトリガ撮影モードに変更する(ステップS9)。更に、撮像素子32がトリガ撮影モードであることを示す信号を画像分岐部52へ出力すると共に、予測時刻を遅延部59へ出力する。
【0077】
その後も、ワークWの搬送は続けられ(ステップS2)、ステップS3においては撮影モードがトリガ撮影モードであるので、遅延部59の動作に移行する。即ち、遅延部59がコントローラ58から予測時刻をタイマに入力されることにより、ストローブ信号を基準として、入力した予測時刻分の時間を待機し、予測時刻に至ったか否かを判断する(ステップS10)。遅延部59が、予測時刻に至っていないと判断した場合は、ワークWの搬送は続けられ(ステップS2)、再度、予測時刻に至ったか否かを判断する(ステップS10)。
【0078】
遅延部59は、予測時刻に至ったと判断した場合は、遅延部59は撮像素子32に対してトリガ信号を出力する(ステップS11、第2の撮影工程)。遅延部59からのトリガ信号を入力した撮像素子32は、レンズ31を介して精細画像を撮像する。この時、
図5(f)に示すように、ワークWは予測位置まで移動している。
図6(f)に示すように、撮像素子32は、予め部分読み出し領域34が設定されており、移動するワークWが目標撮影位置35aに位置する瞬間のワークWを撮影するのに過不足のない必要最小限のサイズの画像で撮影することができる。得られた画像は、画像入力インタフェース51及び画像分岐部52を介して、画像出力インタフェース53へ出力される。
【0079】
画像出力インタフェース53は、精細画像をパラレル信号として入力し、入力されたパラレル信号の画像データを、例えば7逓倍でシリアライズし、カメラリンク等の映像信号規格に則って10対の差動信号線に乗せて出力する(ステップS12)。出力された映像信号は、制御装置4等のフレームグラバボード等で受信されて処理され、その結果に基づいて制御装置4はワークWの位置姿勢を算出する(ステップS13)。
【0080】
上述したように本実施形態の画像撮像装置3によれば、カメラ制御部50が、連続撮影して得られた間引き画像に基づいて、ワークWが目標撮影位置35aを通過するタイミングを予測し、該タイミングで精細画像の撮影を行うことができる。このため、ワークWを停止することなく精細画像を得ることができると共に、精細画像の撮影時におけるワークWの位置が分かるので、撮影範囲をワークWと同程度の大きさの部分読み出し領域34に絞ることができ、精細画像のサイズを抑えることができる。即ち、高速に移動するワークWでも、位置が外れることを考慮して実際の部品サイズよりも大きな画像領域を撮影する必要が無くなるため、画像サイズを小さくすることができる。このため、画像の撮像、画像伝送、画像処理にかかる時間を短縮することができ、ロボット装置1による自動組立作業を高速化できる。
【0081】
また、本実施形態の画像撮像装置3によれば、ワークWが目標撮影位置35aに至る時刻と画像上の位置を予測できるので、ワークWが目標撮影位置35aを通過する厳密なタイミングで撮影トリガを発生させることができる。このため、ワークWが高速に移動する場合等、フレーム間のワークWの移動量が大きくても、予め設定した目標撮影位置35a付近でワークWを撮影することができる。よって、高速に移動するワークWでも、照明装置との位置関係がずれずに鮮明な画像を得ることができる。
【0082】
[第2実施形態]
次に、本発明の第2実施形態に係る画像撮像装置103について
図8〜
図10に沿って説明する。
【0083】
画像撮像装置103のカメラ制御部150は、第1実施形態の内蔵のメモリ55を省略し、より大容量のメモリであるカメラRAM155を備えている点で異なる。その他の構成については、第1実施形態と同様の構成であるので、同一符号を付して詳細な説明を省略する。また、ロボット本体2の動作、ワークWの経路、撮影の解像度等も第1実施形態と同様とする。
【0084】
ここで、第1実施形態では、撮影背景は黒色であったが、撮影背景に別のワークが存在する場合等においては、撮影背景を全て黒色にできるとは限らない。また、撮影背景の全てを黒色に設定できたとしても、外乱光の反射等により表面が光り、明るくなることで撮影背景を黒色にできない場合が有り得る。本実施形態では、
図9に示すように、撮影視野33に白い他のワーク36が見えるものとする。そこで、第2実施形態では、カメラ制御部150が背景除去処理を実現可能となっている。
【0085】
カメラ制御部150が備えるカメラRAM155は、電子回路基板上に実装されるRAMであり、例えば10個の256KByte SDRAMである。各SDRAMのbit幅は8bitとする。SDRAMは、ROWアドレスとCOLUMNアドレスを指定し、同期信号に同期して読み出しと書き込みを行うことができる。
【0086】
位置検出部154は、カメラRAM155にアクセスするためのメモリインタフェースを備えている。メモリインタフェースの演算ブロックは、10個のSDRAMに合わせて並列に10ブロック用意する。メモリインタフェースは、垂直同期信号がHIGHになったとき、メモリアクセスを開始し、画素クロック信号をメモリアクセスの同期信号としてSDRAMに供給する。また、画素クロック信号に同期してROWアドレスをインクリメントし、水平同期信号に同期してCOLUMNアドレスをインクリメントすることでSDRAMにアクセスするアドレスを設定する。垂直同期信号がLOWになったとき、メモリアクセスを終了する。カメラRAM155には、1フレーム前の画像信号が格納されている。
【0087】
次に、本実施形態の画像撮像装置103によりワークWを撮影してその位置姿勢を算出する動作の手順について説明する。ここでは、第1実施形態での動作の手順と異なる部分について詳細に説明する。それ以外の手順は第1実施形態と同様であるので、説明を省略する。
【0088】
第1実施形態のステップS5では、位置検出部54は、間引き画像を直接二値化処理することによりワークWの重心位置を算出している。これに対し、本実施形態では、位置検出部154は、撮影されて入力されたばかりの最新の画像と、その直前の画像との差分値を、1画素ずつ順に計算することで、背景除去処理した複数の画像を利用して、ワークWの重心位置を算出している。
【0089】
具体的には、位置検出部154は、直前の画像を、入力されたパラレル画像信号と、画素クロック信号と水平同期信号と垂直同期信号に同期して、メモリインタフェースを介してカメラRAM155から読み出して得る。位置検出部154は、最新の画像と直前の画像との各画素の差分値に対し、背景除去処理(二値化処理)を行う。即ち、連続する2枚の間引き画像で対応する画素同士の撮影輝度を比べている。背景除去処理は、画素値が予め定めた閾値(例えば128)以下であれば背景としてのLOW(0、第1の輝度)とし、閾値を超えればHIGH(1、第2の輝度)とすることで実行する。
【0090】
二値化された画像のイメージを
図10に示す。例えば、
図10(d)の画像は、最新画像(
図9(d))と、直前画像(
図9(c))とを比較して、差分値に対して二値化処理したものである。但し、本実施形態では、後述するように二値化処理は画素レベルでパイプライン処理されるので、
図10のようなまとまった二値画像が保存あるいは出力されることはない。
【0091】
位置検出部154は、第1実施形態のステップS5と同様に、画像の0次モーメントと、画像の水平1次モーメント及び垂直1次モーメントを計算し、ワークWの画像の重心のx座標及びy座標を算出する。
【0092】
更に、位置検出部154は、入力されたパラレル画像信号を、画素クロック信号と水平同期信号と垂直同期信号により、メモリインタフェースを介してカメラRAM155に上書きする。これにより、10個のSDRAMに、1フレーム分の間引き画像(512×512画素)が記憶される。この記憶画像は、次のフレームにおいて、1フレーム前の画像として使用される。
【0093】
上述したように、本実施形態の画像撮像装置3によれば、ワークWの撮影背景が黒色でなく明るさを持っていても、ワークWが目標撮影位置35aを通過する厳密なタイミングで撮影トリガを発生させることができる。このため、高速に移動するワークWでも目標撮影位置35aで撮影することができ、背景を黒くすることが困難な装置においても、予め設定した位置付近でワークWを撮影することができる。
【0094】
尚、本実施形態では、ワークWの撮影背景をフレーム間差分を利用して除去する方法について説明したが、これには限られず、他の周知または新規の背景除去処理を適用してもよい。例えば、カメラRAM155を不揮発メモリとして、カメラRAM155に予めワークW及びハンド22の写っていない背景画像を格納しておき、その差分を計算して背景を除去してもよい。また、画像にノイズが混じり、ワークWが撮影視野33に存在しなくてもワークWが検出されてしまう場合には、画像の0次モーメントの値を閾値にして出力座標を「0」にする等のフィルタ処理を施してもよい。
【0095】
また、上述した第1及び第2実施形態の画像撮像装置3では、目標位置範囲35をy方向の線とする場合について説明しているが、これには限られない。例えば、目標位置範囲35をx方向の線とし、ハンド22の教示方向を撮影視野33でのx方向とするようにしてもよい。
【0096】
また、上述した第1及び第2実施形態の画像撮像装置3では、目標位置範囲35を撮影視野33での中心を通るy方向の線とする場合について説明しているが、これには限られない。例えば、照明環境等に応じて、撮影視野33の中心を通らないy方向の線を目標位置範囲35としてもよい。この場合、例えば、目標位置範囲35を撮影視野33の中心よりもワークWの移動方向下流側に配置することで、ワークWの軌道計算に使用可能な間引き画像を増加させて予測精度を向上させ、より高精度に精細画像を撮影することができる。
【0097】
また、上述した第1及び第2実施形態の画像撮像装置3では、目標位置範囲35はワークWの移動方向にほぼ直交する線であるが、これには限られず、ワークWの移動方向に幅を有する円形や矩形等であってもよい。この場合、目標撮影位置は、目標位置範囲の内部の任意の位置であればよく、目標位置範囲の中であれば複数枚の精細画像の撮影を行うことも可能である。
【0098】
また、上述した第1及び第2実施形態の画像撮像装置3では、コントローラ58は、ワークWの画像の重心のx座標及びy座標を中心とした画像内でのワークWのサイズと同サイズの範囲をROIとしているが、これには限られない。処理速度等に制約が無ければ、ROIをより広い範囲に設定して、撮像素子32の部分読み出し領域34をワークWより大きくしてもよい。
【0099】
また、上述した第1及び第2実施形態の画像撮像装置3では、生産システムとしてロボット装置1を適用した場合について説明したが、これには限られない。即ち、本発明の画像撮像装置は、ワークWを移動可能な生産装置を備える生産システムの全般に適用することができる。
【0100】
また、上述した第1及び第2実施形態では、カメラ制御部50,150は、FPGAから構成された場合について説明したが、これには限られない。例えば、CPU、ROM、RAM、各種インタフェースを有するコンピュータにより、カメラ制御部50,150を構成するようにしてもよい。
【0101】
この場合、第1及び第2実施形態の各処理動作は、具体的にはカメラ制御部により実行される。従って、上述した機能を実現するソフトウェアのプログラムを記録した記録媒体をカメラ制御部に供給し、記録媒体に格納された画像撮像プログラムを各CPUが読み出し実行することによって達成されるようにしてもよい。この場合、記録媒体から読み出されたプログラム自体が上述した各実施形態の機能を実現することになり、プログラム自体及びそのプログラムを記録した記録媒体は本発明を構成することになる。
【0102】
また、上述した例では、コンピュータ読み取り可能な記録媒体がROMであり、ROMにプログラムが格納される場合について説明したが、これに限定するものではない。プログラムは、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラムを供給するための記録媒体としては、HDD、外部記憶装置、記録ディスク等を用いてもよい。