以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。
[第1実施形態]
図1に示すように、ロボット装置1は、ロボット本体2と、ロボット本体2から離隔して配置されロボット本体2が移動させるワーク(対象物)Wを上方から撮影可能な画像撮像装置4と、ロボット本体2及び画像撮像装置4を制御する制御装置3と、を備えている。本実施形態では、ロボット本体2はワークWに対して作業可能であり、ワークWの移動可能な可動範囲8は500mm×500mmに含まれる大きさであり、ワークWは一辺100mmの正方形に入る大きさであるものとしている。本実施形態では、可動範囲8は、画像撮像装置4の後述する複数のカメラ40による全撮影領域と一致するように設定している。
ロボット本体2は、6軸の垂直多関節アーム(以下、アームと呼ぶ)21と、エンドエフェクタであるハンド22とを有している。本実施形態では、アーム21として6軸の垂直多関節アームを適用しているが、軸数は用途や目的に応じて適宜変更してもよい。また、本実施形態では、エンドエフェクタとしてハンド22を適用しているが、これには限られず、ワークWを把持あるいは保持して移動させることができるツールの全般を含めることができる。
アーム21は、7つのリンク61〜67と、各リンク61〜67を揺動又は回動可能に連結する6つの関節71〜76とを備えている。各リンク61〜67としては、長さが固定されたものを採用している。但し、例えば、直動アクチュエータにより伸縮可能なリンクを採用してもよい。各関節71〜76には、各関節71〜76を各々駆動するモータと、モータの回転角度を検知するエンコーダと、各モータに供給する電流を検知する電流センサと、各関節71〜76のトルクを検知するトルクセンサと、が設けられている。
ハンド22は、アーム21の先端リンク67に取り付けられて支持され、アーム21の動作により位置及び姿勢の少なくとも一自由度が調整されるようになっている。ハンド22は、2本の指23と、これら指23の間隔を開閉可能に支持するハンド本体24とを備え、指23同士が接近する閉動作によりワークWを把持可能になっている。
ハンド本体24には、指23を動作させるためのモータと、該モータの回転角度を検知するエンコーダと、先端リンク67に連結される連結部とが設けられている。また、ハンド本体24は、例えば、赤色等に着色し(図1中、ハッチングで示す)、後述するカメラによる撮影におけるマーカとして機能するようになっている。尚、本実施形態では、ハンド22は指23を2本有するものとしているが、これには限られず、ワークWを把持するために指の数は2本以上あればよい。
制御装置3は、コンピュータにより構成され、ロボット本体2及び画像撮像装置4を制御するようになっている。制御装置3を構成するコンピュータは、例えばCPUと、各部を制御するためのプログラムを記憶するROMと、データを一時的に記憶するRAMと、入力インタフェース回路と、出力インタフェース回路とを備えている。
次に、本実施形態の特徴部分である画像撮像装置4について、図2及び図3に基づいて詳細に説明する。
画像撮像装置4は、図2(a)に示すように、例えば5×4の格子状に並べた20個のカメラ(複数のカメラ)40と、これらカメラ40を制御すると共にカメラ40による撮影画像を制御装置3に出力する演算部5とを備えている。本実施形態では、可動範囲8の全体領域82は、20個のカメラ40が対応して撮影するよう格子状に区画された複数、例えば20の撮影領域(小区分)80に分割されている(図4(a)参照)。
各カメラ40は、レンズと、イメージセンサと、処理基板とを備えており、各撮影領域80は、例えば、最大約500万画素(2560×2048画素)の空間解像度で画像を撮影できるようになっている。撮影された画像は、カメラリンクBase Configuration規格の映像信号として、制御装置3に出力できるようになっている。
本実施形態では、図2(b)に示すように、各カメラ40の撮影領域80の画素81の分解能は0.05mm×0.05mmである。これにより、各カメラ40は、128mm×102.4mmの撮影領域80を撮像するものとし、20個のカメラ40の全体で、各撮影領域80を結合し、可動範囲8を全て含む約500mm×500mmの視野を持つものとしている。ここでは、以降の説明のため、20個配列されたカメラ40の撮影領域80に、図2(a)に示す通り、ラスタ走査順に1〜20番と番号付けしておく。
各カメラ40は、内蔵するレジスタへ設定値を書き込むことにより、約500万画素(2560×2048画素)の画像を読み出す。カメラ40は、レジスタの設定値により、1/2×1/2(1画素飛ばし)、1/4×1/4(3画素飛ばし)等の間引き量で画像を間引きして読み出しできるようになっている。カメラ40が出力する画像のビット深度は例えば8ビット、画素クロックは48MHzとする。カメラ40はベイヤ型のRGBカラーフィルタを搭載しており、例えば撮像した画像を1/4×1/4(縦横3画素飛ばし)で間引けば、全画素がR(赤色)のカラーフィルタを搭載した画像となる。カメラ40は、各撮影フレームで、信号伝送中は垂直同期信号がHighとなる。
本実施形態では、各撮影フレームで、まず1/4×1/4の間引き読み出しを行う設定値をカメラ40に内蔵するレジスタへ書込み、間引き読み出しを行う。そして、間引き読み出しが終了した直後に全画素の読み出しを行う設定値をレジスタへ書込み、全画素読み出しを行う。即ち、撮影フレーム毎に2度の読み出しを行う。
ここで、図10に、可動範囲8の全体についての高解像度(第2の解像度)の精細画像90と、可動範囲8の全体についての低解像度(第1の解像度)の粗画像(第1の画像)91と、の関係を示す。ここでは、精細画像90の3画素を飛ばして○印を付した画素のみを抽出し、粗画像91を生成することで、1/4×1/4の間引き読み出しを行うようにしている。尚、1/4×1/4の間引き読み出しをした時の粗画像91の全体画像データ量は、約30万画素(640×512画素)となり、全画素読み出しをした時の精細画像90の全体画像データ量は、約500万画素(2560×2048画素)となる。
演算部5は、図3に示すように、イメージセンサ制御部50と、映像入力インタフェース51と、映像分岐部52と、メモリインタフェース53と、画像記憶部54と、検出部55と、出力画像生成部56と、映像出力インタフェース57と、を備えている。演算部5は、これらを搭載する電子回路基板により構成されている。このうち、映像分岐部52と、メモリインタフェース53と、検出部55と、出力画像生成部56とは、電子回路基板上に実装されるFPGAデバイスの中の演算ブロック58として実装される。ここでのFPGAは、Field Programable Gate Array(機能を変更可能な集積回路)を意味する。演算ブロック58は、周知のHDL言語でのハードウェア記述と、FPGAが備えるマクロ機能により実装される。
イメージセンサ制御部50は、電子回路基板上に実装されるシリアル通信機能を備えた周知のマイクロコンピュータから構成される。イメージセンサ制御部50は、制御装置3からRS232C通信を介してイメージセンサ制御信号が供給され、カメラ40のイメージセンサに内蔵されるレジスタ値を読み書きするようになっている。ここでのイメージセンサ制御信号とは、例えば空間解像度の設定信号、画像の切り出し位置を指定する信号、画像の切り出しサイズを指定する信号、撮影開始のトリガ信号等である。尚、マイクロコンピュータとイメージセンサの通信規格は、例えば既知のI2C(Inter Integrated Circuit)とすることができる。
映像入力インタフェース51は、カメラ40から出力されたカメラリンク等のLVDS映像信号を、電子回路内で扱いやすいパラレル信号に変換する既知のデシリアライザICを用いて構成されている。ここで、LVDSは、Low Voltage Differential Signal(低電圧差動シグナリング)を意味する。もしくは、映像入力インタフェース51は、LVDS信号の入力が可能な既知のFPGAデバイスに入力し、パラレル信号に変換するようにしてもよい。ここでのデシリアライザICとしては、LVDS信号の差動ペアを100対((映像信号4対+クロック1対)×イメージセンサ20個)入力できるものを用いる。例えばLVDS信号の差動ペアを5対入力できるデシリアライザICであれば、デシリアライザICを20個実装する。映像入力インタフェース51の出力は、160bit(8bit×イメージセンサ20個)のパラレル信号、画素クロック信号、水平同期信号、垂直同期信号である。
映像分岐部52は、入力された画像が精細画像90であるか、粗画像91であるかを判断し、精細画像90であれば画像をメモリインタフェース53へ出力し、粗画像91であれば検出部55へ出力するようになっている。カメラ40は、各撮影フレームで、信号伝送中は垂直同期信号がHighとなる。映像分岐部52では、垂直同期信号のカウンタ回路を持ち、撮影フレーム中で1度目の信号伝送であれば、その画像を精細画像90と判定し、2度目の信号伝送であれば、その画像を粗画像91と判定するようになっている。
映像分岐部52の入力は、160bit(8bit×イメージセンサ20個)のパラレル信号、画素クロック信号、水平同期信号、垂直同期信号である。映像分岐部52の出力は、画像記憶部54に接続する160bitのパラレル信号と画素クロック信号と水平同期信号と垂直同期信号、検出部55に接続する160bitのパラレル信号と画素クロック信号と水平同期信号と垂直同期信号である。
メモリインタフェース53は、電子回路基板上に実装されるFPGAデバイスの中に実装されるインタフェース演算ブロック58の一部である。画像記憶部54は、電子回路基板上に実装されるRAM(ランダムアクセスメモリ)であり、例えば20個の32MByte SDRAM(Synchronus Dynamic RAM)である。各SDRAMのbit幅は8bitとする。SDRAMは、ROWアドレスとCOLUMNアドレスを指定し、同期信号に同期して読み出しと書き込みを行える。
メモリインタフェース53は、20個のSDRAMに合わせて並列に20ブロック用意する。メモリインタフェース53は、垂直同期信号がHighになったとき、メモリアクセスを開始し、画素クロック信号をメモリアクセスの同期信号としてSDRAMに供給する。また、画素クロック信号に同期してROWアドレスをインクリメントし、水平同期信号に同期してCOLUMNアドレスをインクリメントすることでSDRAMにアクセスするアドレスを設定する。垂直同期信号がLowになったとき、メモリアクセスを終了する。
映像分岐部52から出力され、メモリインタフェース53へ出力された160bitの画像信号は、画素クロック信号と水平同期信号と垂直同期信号により第1の画像記憶部54に書き込まれる。そして、20個のSDRAMの各々に、それぞれ1フレーム分(2560×2048画素)の画像データが記憶される。また、画素クロック信号と水平同期信号と垂直同期信号は、遅延回路により等しくタイミングを遅らせた上で、出力画像生成部56に出力される。ここで、遅延時間は、後述する検出部55で演算結果が出力されるまでの時間を予め計測し、その時間を設定する。
検出部55は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロック58の一部である。検出部55は、映像分岐部52から出力された160bitの画像信号と画素クロック信号と水平同期信号と垂直同期信号を入力する。検出部55は、入力される粗画像91に基づいてワークWの重心座標(概略位置)84を算出するようになっている。
検出部55は、入力される160bitの画像信号に対し2値化処理を行い、20bitの2値画像信号に変換する。2値化処理は、20個のイメージセンサのそれぞれの8bit画素データに対して、予め定めた閾値(例えば128)を超えればHigh(1)、閾値以下ならばLow(0)とすることで実行する。この処理により、20個のイメージセンサのそれぞれの画素データが1bit化され、画像データは20bitとなる。
また、2値化処理をすることによる遅延時間による同期信号とのずれを無くすため、画素クロック信号と水平同期信号と垂直同期信号を、2値化処理と同じ段数のゲートを通過させ、信号のタイミングを調整する。2値化処理を順に施し、画像全体に処理が施されると、全体として2値画像の情報が得られる。本実施形態では、ハンド22のハンド本体24が赤色に着色されていると共に、撮像した画像を1/4×1/4で間引いて全画素が赤色のカラーフィルタを搭載した画像になっているので、ハンド本体24が明確に表示されるようになる。但し、検出部55では画像の重心情報のみを出力するので、画像信号として2値画像データは外部に出力されない。
検出部55は、得られた2値画像に対して、画像の0次モーメントと1次モーメントを計算するようになっている。まず、画像の0次モーメントの計算について説明する。検出部55は、FPGAの演算ブロック58内に、水平座標レジスタと、垂直座標レジスタとを備えている。水平座標レジスタは、画素クロックに同期してインクリメントされて水平同期信号に同期してリセットされるようになっており、垂直座標レジスタは、水平同期信号に同期してインクリメントされて垂直同期信号に同期してリセットされるようになっている。また、検出部55は、0次モーメントの累積値を保持する0次モーメントレジスタと、水平方向の1次モーメントの累積値を保持する水平1次モーメントレジスタと、垂直方向の1次モーメントの累積値を保持する垂直1次モーメントレジスタを備えている。
各レジスタは初期値として0を保持する。初めに1bitの画像データが入力されると、1bitの値が0次モーメントレジスタの値に足し合される。同時に、(bitの値×(水平座標レジスタの値)×4)を計算し、水平1次モーメントレジスタの値に足し合される。同時に、(bitの値×(垂直座標レジスタの値)×4)を計算し、垂直1次モーメントレジスタの値に足し合される。以上の計算を、画素クロックに同期して、全画素分(2560×2048)の回数繰り返す。これにより、粗画像91の全体の0次モーメントと、水平1次モーメントと、垂直1次モーメントとが、それぞれ0次モーメントレジスタと、水平1次モーメントレジスタと、垂直1次モーメントレジスタとに格納されるようになっている。
次に、検出部55は、計算された0次モーメント及び1次モーメントから画像の重心座標84を計算する。重心の水平座標は、(水平1次モーメントレジスタ値÷0次モーメントレジスタ値)としてハードウェア演算して得られる。重心の垂直座標は、(垂直1次モーメントレジスタ値÷0次モーメントレジスタ値)としてハードウェア演算して得られる。以上の演算で計算された重心の水平座標及び重心の垂直座標が、検出部55から出力され、出力画像生成部56に入力される。
尚、以上で述べた演算のうち、各画素における2値化処理と画像のモーメント計算のための累積計算は、パイプライン処理により行われる。即ち、全ての画素の2値化処理が終わるまで待つのではなく、例えば2画素目の2値化処理を行っている時には同時に1画素目の累積計算を行い、3画素目の2値化処理を行っている時には同時に2画素目の累積計算を行うようになっている。
また、本実施形態の説明ではワークWの位置を粗画像91から検出する方法として画像の2値化処理と画像のモーメント計算を行った上で重心計算をする方法を挙げたが、その他の周知の物体検出方法を用いてもよい。例えば、予め粗画像と対応する分解能を持つワークWのテンプレート画像をFPGA内に格納し、既知の二乗残差法(SSD法)を用いてテンプレートマッチングを行う処理回路をFPGAに実装し、ワークWの位置を検出するようにしてもよい。
出力画像生成部56は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロック58の一部である。出力画像生成部56は、メモリインタフェース53を介して画像記憶部54に記憶された全体の精細画像90を読み出す。そして、図10に示すように、出力画像生成部56は、全体の精細画像90の中から、後述するワークWの周辺の500万画素の切り出し領域(可動範囲8の一部)83の精細画像(第2の画像)92を読み出し、出力する。即ち、切り出し領域83の精細画像92は、ワークWの概略位置に基づき特定されるワークWの検出部位が包含される撮影領域80の画像から切り出されて生成されるようになっている。尚、ここでの500万画素は、例えば2560×2048画素としている。
以下、出力画像生成部56において、可動範囲8の全体領域82から切り出し領域83を設定し、精細画像92を読み出すための手順を、図4(a)に基づいて説明する。まず、検出部55で計算された重心座標84より、画像記憶部54から読み出す際に、20個あるSDRAMのうちどのSDRAMからデータを読み出すかを決定する。尚、図4(a)中、「○」は各撮影領域80の座標(1,1)、即ち原点を表す。
検出部55で計算された重心座標84より、(1):((重心の水平座標×4−1280)÷2560)と、(2):((重心の垂直座標×4−1024)÷2048)との演算を行う。但し、演算結果が0を下回る場合は演算結果を0とし、途中演算を含め、小数点以下は切り捨てる。ここで、(1)及び(2)の演算において、1280及び1024を減算しているのは、ワークWの周辺の500万画素の切り出し領域83の左上の角部の座標85がどの撮影領域80に属するかを求めるためである。
上述の(1)及び(2)の演算結果に応じ、((1)の演算結果、(2)の演算結果)と表記した場合、以下の規則に準じて20個の撮影領域80の中から第1の読み出し領域80aの番号を選択する。
(0、0):1番、(0、1):2番、(0、2):3番、(0、3):4番
(1、0):5番、(1、1):6番、(1、2):7番、(1、3):8番
(2、0):9番、(2、1):10番、(2、2):11番、(2、3):12番
(3、0):13番、(3、1):14番、(3、2):15番、(3、3):16番
(4、0):17番、(4、1):18番、(4、2):19番、(4、3):20番
また、第2の読み出し領域80bの番号は(第1の読み出し番号+1)、第3の読み出し領域80cの番号は(第1の読み出し番号+4)、第4の読み出し領域80dの番号は(第1の読み出し番号+5)とする。そして、出力画像生成部56は、これら4つの番号に対応するカメラ40が撮像した画像を格納したSDRAMに対して、画像読み出しを行う。
次に、4つの読み出し領域80a〜80dに対応するSDRAMにアクセスする際の各々の読み出し範囲について説明する。まず、第1の読み出し領域80aに対応するSDRAMに対しては、ROWアドレスは(((重心の水平座標×4−1280)÷2560)の余り+1(=以降R1))〜(2560)とする。また、COLUMNアドレスは(((重心の垂直座標×4−1024)÷2048)の余り+1(=以降C1))〜(2048)として、この範囲で読み出しを行う。
第2の読み出し領域80bに対応するSDRAMに対しては、ROWアドレスは(1)〜(2560−((重心の水平座標×4−1280)÷2560)の余り+1(=以降R2))、COLUMNアドレスは(C1)〜(2048)の範囲で読み出しを行う。第3の読み出し領域80cに対応するSDRAMに対しては、ROWアドレスは(R1)〜(2560)、COLUMNアドレスは(1)〜(2048−((重心の垂直座標×4−1024)÷2048)の余り+1(=以降C2))の範囲で読み出しを行う。第4の読み出し領域80dに対応するSDRAMに対しては、ROWアドレスは(1)〜(R2)、COLUMNアドレスは(1)〜(C2)の範囲で読み出しを行う。
次に、4つの読み出し領域80a〜80dに対応するSDRAMにアクセスする際のアクセスタイミングについて、図4(b)に基づいて説明する。まず初めに、第1の読み出し領域80aに対応するSDRAMのROWアドレスを(R1)、COLUMNアドレスを(C1)と指定し、8bitの画素データを読み出す。以降、ROWアドレスが(2560)になるまで、ROWアドレスをインクリメントし8bitの画素データを読み出すことを繰り返す(図中、太線矢印)。
ROWアドレスが(2560)の画素データを読み出したら、アクセスするSDRAMを第2の読み出し領域80bに対応するSDRAMに切り替えて、ROWアドレスを(1)にする。COLUMNアドレスは、第1の読み出し領域80aで設定したアドレスのままにして、画素データを読み出す。以降、ROWアドレスが(R2)になるまで、ROWアドレスをインクリメントし8bitの画素データを読み出すことを繰り返す。
ROWアドレスが(R2)の時の画素データを読み出したら、アクセスするSDRAMを第1の読み出し領域80aに対応するSDRAMに切り替えて、COLUMNアドレスをインクリメントする(図中、細線矢印)。以上で述べた読み出しを、COLUMNアドレスが(2048)の時の読み出しが完了するまで繰返す。
次に、第3の読み出し領域80cに対応するSDRAMの、ROWアドレスを(R1)、COLUMNアドレスを(1)と指定し、8bitの画素データを読み出す。以降、ROWアドレスが(2560)になるまで、ROWアドレスをインクリメントし8bitの画素データを読み出すことを繰り返す。
ROWアドレスが(2560)の時の画素データを読み出したら、アクセスするSDRAMを第4の読み出し領域80dに対応するSDRAMに切り替えて、ROWアドレスを(1)とする。COLUMNアドレスは、第3の読み出し領域80cで設定したアドレスのままにして、画素データを読み出す。以降、ROWアドレスが(R2)になるまで、ROWアドレスをインクリメントし8bitの画素データを読み出すことを繰り返す。
ROWアドレスが(R2)の時の画素データを読み出したら、アクセスするSDRAMを第3の読み出し領域80cに対応するSDRAMに切り替えて、COLUMNアドレスをインクリメントする。以上で述べた読み出しを、COLUMNアドレスが(C2)の時の読み出しが完了するまで繰返す。以上の読み出しを行うことで、8bit幅で500万画素(2560×2048画素)の画像が読み出される。
映像出力インタフェース57は、演算部5で扱うパラレル信号をカメラリンク等のLVDS映像信号に変換する周知のシリアライザICを用いる。もしくは、LVDS信号の出力が可能なFPGAデバイスを用い、FPGA内でパラレル信号をシリアル信号に変換してもよい。シリアライザICは、入力された8bitパラレル映像信号を例えば7逓倍でシリアライズし、LVDS信号の差動ペアを5対(映像信号4対+クロック1対)出力できるものを用いる。映像出力インタフェース57の入力は、8bitのパラレル信号、画素クロック信号、水平同期信号、垂直同期信号である。
上述したロボット装置1の画像撮像装置4によりワークWの撮影を行う際の処理手順を、図5に示すフローチャートに沿って説明する。
撮影を行う際は、制御装置3が、画像撮像装置4のイメージセンサ制御部50にイメージセンサ制御信号をRS232C規格で送信し、イメージセンサ制御部50は、受信したイメージセンサ制御信号に基づいて、カメラ40のイメージセンサを制御する。
カメラ40は、イメージセンサ制御部50により制御され、1フレームごとに2回の撮影が実行される。1フレームの中の1回目の撮影では、間引き読み出しによりワークWの可動範囲8の全体を撮影し(第1の撮影工程)、全体の粗画像91を生成する(ステップS1、第1の画像生成工程)。得られた粗画像91は、映像分岐部52を介して検出部55に送信される。
また、1フレームの中の2回目の撮影では、全画素の読み出しによりワークWの可動範囲8を撮影し(ステップS2、第2の撮影工程)、全体の精細画像90を生成する。得られた精細画像90の全データは、映像分岐部52からメモリインタフェース53を介して画像記憶部54に記憶される(ステップS3)。
検出部55は、入力された粗画像91に基づき、ワークWの重心座標84、即ち概略位置を算出し(ステップS4、概略位置演算工程)、出力画像生成部56に送信する。出力画像生成部56は、ワークWの重心座標84からワークWの周辺の500万画素の切り出し領域83の位置を算出する。そして、出力画像生成部56は、切り出し領域83に対応する精細画像90の画像データを画像記憶部54から読み出して、切り出し領域83の精細画像92を生成する(ステップS5、第2の画像生成工程)。生成された概略位置周囲の精細画像92は、映像出力インタフェース57を介して映像信号として制御装置3に送信され、制御装置3においてワークWの詳細位置を演算し、ロボット本体2の動作の制御に利用される。
上述したように本実施形態の画像撮像装置4によれば、演算部5が、可動範囲8の全体について粗画像91を生成し、粗画像91に基づきワークWの重心座標84を演算し、重心座標84を含む切り出し領域83について精細画像92を生成する。このため、高解像度の精細画像92にワークWの画像が含まれるので、高解像度のワークWの画像を得ることができる。
また、粗画像91を利用して可動範囲8におけるワークWの重心座標84を演算するので、可動範囲8内の任意の位置のワークWを自動検出することができる。このため、操作者によるワークWの位置の入力を不要にすることができる。即ち、広い視野の全体に対して粗画像91を生成してワークWの位置を認識するので、初めにワークWの存在する位置を知らなくても、ワークWの位置を自動的に把握し、撮影を開始することができる。
また、本実施形態の画像撮像装置4によれば、撮影中にワークWを見失っても、再度撮影を行い、粗画像91及び精細画像92を生成することでワークWの位置を検出することができる。即ち、広い視野全体に対する粗画像91を使用するので、ワークWが速く移動しても見失うことなく追従して撮影できる。また、隠れやハレーションにより一時的にワークWが見えなくなっても、隠れやハレーションが無くなって物体が見えるようになった時点で即座に追従と撮影を再開することができる。
また、本実施形態の画像撮像装置4によれば、可動範囲8の全体を撮影した粗画像91は低解像度であるので、可動範囲8の全体の精細画像90を利用する場合に比べてデータ量の増加を抑制することができる。即ち、ワークWの周辺の精細な画像データのみを出力するので、必要な転送データ容量が少なく、安価なハードウェアで演算部5を構成できる。例えば、500mm×500mmの領域を0.05mmの画素分解能で撮影する必要があり、ビット深度が8bit、撮影フレームレートが30fpsである場合を例にする。この場合、ワークWのサイズが100mm×100mmの領域に収まる見込みであれば、転送すべき画素数は500万画素でよく、必要なデータ転送容量は約1.1Gbps(5,000,000×8×30bps)である。このため、ワークWの周辺を含む可動範囲8の全体の精細画像90を転送する場合に必要なデータ転送容量(約24Gbps)と比較すると、1/20の転送データ容量で済む。よって、大きなデータ転送容量を必要とせず、ハードウェアが簡素であり、安価にシステムを構築できる。
[第2実施形態]
次に、本発明の第2実施形態に係る画像撮像装置4の演算部105について図6に沿って説明する。
演算部105は、第1実施形態の演算部5の映像分岐部52を省略し、メモリインタフェース53と検出部55との間に粗画像読出部59が設けられている。その他の構成については、第1実施形態と同様の構成であるので、同一符号を付して詳細な説明を省略する。また、可動範囲8やワークWの大きさ、解像度等も第1実施形態と同様とする。
本実施形態では、カメラ40は、イメージセンサ制御部50からの制御により、1フレームにおいて1回のみ精細画像90の撮影を行うようになっている。カメラ40からの画素データは、映像入力インタフェース51から出力され、精細画像90のデータとしてメモリインタフェース53に入力される。メモリインタフェース53では、受信したデータを画像記憶部54に記憶するようになっている。
メモリインタフェース53では、画素クロック信号と水平同期信号と垂直同期信号は、遅延回路によりタイミングを調整した上で、粗画像読出部59及び出力画像生成部56に出力される。
粗画像読出部59は、電子回路基板上に実装されるFPGAデバイスの中に実装される演算ブロックの一部である。粗画像読出部59は、メモリインタフェース53を介して画像記憶部54に記憶された精細画像90の中から、1/4×1/4(縦横3画素飛ばし)の間引きをした粗画像(2560×2048画素)91を読み出し、出力するようになっている。
まず、20個のSDRAMにアクセスする際の各々の読出し範囲について説明する。各々のSDRAMに対しては、ROWアドレスは(1)〜(2560)の範囲を3つ飛ばしで指定する。つまり、(1)、(5)、(9)、(13)、・・・、(2557)のROWアドレスを指定する。COLUMNアドレスは(1)〜(2048)の範囲を3つ飛ばしで指定する。つまり、(1)、(5)、(9)、(13)、・・・、(2045)のCOLUMNアドレスを指定する。
次に、20個のSDRAMにアクセスする際のアクセスタイミングについて説明する。まず初めに、1番のカメラ40に対応するSDRAMの、ROWアドレスを(1)、COLUMNアドレスを(1)と指定し、8bitの画素データを読み出す。以降、ROWアドレスが(2557)になるまで、ROWアドレスに4を加え8bitの画素データを読み出すことを繰り返す。ROWアドレスが(2557)の時の画素データを読み出したら、アクセスするSDRAMを2番のカメラ40に対応するSDRAMに切り替える。そして、ROWアドレスを(1)とし、第1の読出し画像に対応するSDRAMに対し指定していたCOLUMNアドレスを指定し、画素データを読み出す。以降同様に、アクセスするSDRAMを、3番のカメラ40に対応するSDRAM、4番のカメラ40に対応するSDRAMに切り替えて画素データを読み出す。
次に、アクセスするSDRAMを5番のカメラ40に対応するSDRAMに切り替える。そして、COLUMNアドレスをインクリメントした上で、1番〜4番のイメージセンサヘッド101に対応するSDRAMの読出しと同様に、5番〜8番のカメラ40に対応するSDRAMの読出しを行う。次に、アクセスするSDRAMを9番のカメラ40に対応するSDRAMに切り替える。そして、COLUMNアドレスをインクリメントした上で、1番〜4番のカメラ40に対応するSDRAMの読出しと同様に、9番〜12番のカメラ40に対応するSDRAMの読出しを行う。
次に、アクセスするSDRAMを13番のカメラ40に対応するSDRAMに切り替える。そして、COLUMNアドレスをインクリメントした上で、1番〜4番のカメラ40に対応するSDRAMの読出しと同様に、13番〜16番のカメラ40に対応するSDRAMの読出しを行う。最後に、アクセスするSDRAMを17番のカメラ40に対応するSDRAMに切り替える。そして、COLUMNアドレスをインクリメントした上で、1番〜4番のカメラ40に対応するSDRAMの読出しと同様に、17番〜20番のカメラ40に対応するSDRAMの読出しを行う。以上の読出しを行うことで、8bit幅で500万画素(2560×2048画素)の粗画像が読み出される。
上述したロボット装置1の画像撮像装置4によりワークWの撮影を行う際の処理手順を、図7に示すフローチャートに沿って説明する。
撮影を行う際は、制御装置3が、画像撮像装置4のイメージセンサ制御部50にイメージセンサ制御信号をRS232C規格で送信し、イメージセンサ制御部50は、受信したイメージセンサ制御信号に基づいて、カメラ40のイメージセンサを制御する。
カメラ40は、イメージセンサ制御部50により制御され、1フレームごとに1回、ワークWの可動範囲8の全体を精細画像90で撮影する(ステップS11、第1の撮影工程)。得られた精細画像90は、メモリインタフェース53を介して画像記憶部54に記憶される。
メモリインタフェース53は、画像データを粗画像読出部59に送信し、粗画像読出部59では全体の精細画像90に基づき全体の粗画像91を生成し(ステップS12、第1の画像生成工程)、検出部55に出力する。尚、粗画像91は、精細画像90に対して画素の間引きが行われて生成され、出力される。
検出部55は、入力された粗画像91に基づき、ワークWの重心座標84、即ち概略位置を算出し(ステップS13、概略位置演算工程)、出力画像生成部56に送信する。出力画像生成部56は、ワークWの重心座標84からワークWの周辺の500万画素の切り出し領域83の位置を算出し、切り出し領域83に対応する精細画像90のデータを画像記憶部54から読み出す。これにより、出力画像生成部56は、概略位置周囲の精細画像92を生成する(ステップS14、第2の画像生成工程)。即ち、精細画像92は、ワークWの重心座標84を含む切り出し領域83について、精細画像90から切り出して生成される。生成された概略位置周囲の精細画像92は、映像出力インタフェース57を介して映像信号として制御装置3に送信され、制御装置3においてワークWの詳細位置を演算し、ロボット本体2の動作の制御に利用される。
上述したように本実施形態の画像撮像装置4によれば、第1実施形態の効果に加え、可動範囲8の全体を撮像した精細画像90から粗画像91を生成するので、粗画像91と精細画像92の露光タイミングが同じになる。このため、粗画像91と精細画像92でワークWの位置は変わらないので、出力する画像の視野をワークWの大きさと同等にしても画像からワークWが飛び出ることが抑制され、必要な転送データ容量を減らすことができる。
[第3実施形態]
次に、本発明の第3実施形態に係る画像撮像装置4の演算部205について図8に沿って説明する。
演算部205は、第1実施形態の演算部5の映像分岐部52とメモリインタフェース53との間に、選択部60が設けられている。その他の構成については、第1実施形態と同様の構成であるので、同一符号を付して詳細な説明を省略する。また、可動範囲8やワークWの大きさ、解像度等も第1実施形態と同様とする。
本実施形態では、画像記憶部54は、電子回路基板上に実装されるRAMであり、20個ではなく4個の32MByte SDRAMである。各SDRAMのbit幅は8bitとする。メモリインタフェース53の演算ブロックは、4個のSDRAMに合わせて並列に4ブロック用意する。映像分岐部52から出力されると共に選択部60を介してメモリインタフェース53へ出力された32bitの画像信号は、画素クロック信号と水平同期信号と垂直同期信号により第1の画像記憶部54に書き込まれる。その後、第2〜第4の画像記憶部54に書き込まれ、4個のSDRAMの各々に、それぞれ1フレーム分(2560×2048画素)の画像データが記憶される。
また、検出部55は、演算により得られた画像の重心座標84を、出力画像生成部56に出力することに加え、選択部60に対しても出力する。
選択部60は、ワークWの位置に基づいて、ワークWが撮像されている4つのカメラ40を選択し、4つのカメラ40の画像信号のみをメモリインタフェース53を介して画像記憶部54に転送し記憶させるようになっている。選択部60は、電子回路基板上に実装されるFPGAデバイスの中の演算ブロック58の一部として実装される。選択部60は、映像分岐部52から出力される各々8bitの20個のカメラ40の画像データ(bit幅:160bit)のうち、必要な4個のカメラ40の画像データのみを選択する。そして、選択部60は、選択した画像データを32bit幅に削減した画像データとしてメモリインタフェース53へ出力する。
選択部60において、可動範囲8の全体領域82からワークWの周辺の500万画素の切り出し領域83を設定し、精細画像92を読み出すための手順を説明する。まず、検出部55で計算された重心座標84より、(1):((重心の水平座標×4)÷2560)と、(2):((重心の垂直座標×4)÷2048)との演算を行う。但し、演算結果が0を下回る場合は演算結果を0とし、途中演算を含め、小数点以下は切り捨てる。
上述の(1)及び(2)の演算結果に応じ、((1)の演算結果、(2)の演算結果)と表記した場合、以下の規則に準じて20の撮影領域80の中から第1の読み出し領域80aの番号を選択する。尚、ここでは説明のために20の撮影領域80から1つの撮影領域80を選択するようにしているが、実際には20個のカメラ40から1個のカメラ40を選択するようになっている。
(0、0):1番、(0、1):2番、(0、2):3番、(0、3):4番
(1、0):5番、(1、1):6番、(1、2):7番、(1、3):8番
(2、0):9番、(2、1):10番、(2、2):11番、(2、3):12番
(3、0):13番、(3、1):14番、(3、2):15番、(3、3):16番
(4、0):17番、(4、1):18番、(4、2):19番、(4、3):20番
次に、第1の読み出し領域80aの中での重心座標84の値を計算する。水平方向の重心座標値は、(((重心の水平座標×4)÷2560)の余り+1)で計算する。垂直方向の重心座標値は、(((重心の垂直座標×4)÷2048)の余り+1)で計算する。尚、計算結果は小数点以下を四捨五入し、丸めるものとする。
そして、第1の読み出し領域80aの中で、重心座標84が中心から見て左上か、右上か、左下か、右下かを判定する。先に求めた第1の読み出し領域80aの中での水平方向の重心座標値が、1280.5よりも小さければ中心より左、大きければ中心より右である。また、第1の読み出し領域80aの中での垂直方向の重心座標値が、1024.5よりも小さければ中心より上、大きければ中心より下となる。以上より、中心に対する左上、右上、左下、右下を判定し、FPGA内部の判定用レジスタへ結果を書き込む。
判定結果が左上だった場合、第2の読み出し領域80bとして、第1の読み出し領域80aの左隣の撮影領域80の番号を選択する。第1の読み出し領域80aの左隣に撮影領域80が存在しない場合は、右隣の撮影領域80の番号を選択する。また、第3の読み出し領域80cとして、第1の読み出し領域80aの上隣の撮影領域80の番号を選択する。第1の読み出し領域80aの上隣に撮影領域80が存在しない場合は、下隣の撮影領域80の番号を選択する。
判定結果が右上だった場合、第2の読み出し領域80bとして、第1の読み出し領域80aの右隣の撮影領域80の番号を選択する。第1の読み出し領域80aの右隣に撮影領域80が存在しない場合は、左隣の撮影領域80の番号を選択する。また、第3の読み出し領域80として、第1の読み出し領域80aの上隣の撮影領域80の番号を選択する。第1の読み出し領域80aの上隣に撮影領域80が存在しない場合は、下隣の撮影領域80の番号を選択する。
判定結果が左下だった場合、第2の読み出し領域80bとして、第1の読み出し領域80aの左隣の撮影領域80の番号を選択する。第1の読み出し領域80aの左隣に撮影領域80が存在しない場合は、右隣の撮影領域80の番号を選択する。また、第3の読み出し領域80cとして、第1の読み出し領域80aの下隣の撮影領域80の番号を選択する。第1の読み出し領域80aの下隣に撮影領域80が存在しない場合は、上隣の撮影領域80の番号を選択する。
判定結果が右下だった場合、第2の読み出し領域80bとして、第1の読み出し領域80aの右隣の撮影領域80の番号を選択する。第1の読み出し領域80aの右隣に撮影領域80が存在しない場合は、左隣の撮影領域80の番号を選択する。また、第3の読み出し領域80cとして、第1の読み出し領域80aの下隣の撮影領域80の番号を選択する。第1の読み出し領域80aの下隣に撮影領域80が存在しない場合は、上隣の撮影領域80の番号を選択する。
また、第4の読み出し領域80dとして、第1の読み出し領域80aと第2の読み出し領域80bと第3の読み出し領域80cにいずれも隣り合う撮影領域80の番号を選択する。例えば第2の読み出し領域80bが左隣、第3の読み出し領域80cが上隣ならば、第4の読み出し領域80dは左上のものとなる。
以上の演算により選択された4つの撮影領域80に対応するカメラ40が出力した32bitの信号は、メモリインタフェース53を介して画像記憶部54に入力され、その他の信号はどこにも接続されない。また、以上の処理回路は、FPGA内の条件分岐回路として実装される。
出力画像生成部56は、メモリインタフェース53を介して画像記憶部54に記憶された4つの撮影領域80に対応する4つのSDRAMの中から、ワークWの周辺の500万画素の切り出し領域83を読み出し、出力する。尚、4つのSDRAMにアクセスする際の各々の読み出し範囲と、アクセスタイミングについては第1実施形態と同様である。
上述したロボット装置1の画像撮像装置4によりワークWの撮影を行う際の処理手順を、図9に示すフローチャートに沿って説明する。
撮影を行う際は、制御装置3が、画像撮像装置4のイメージセンサ制御部50にイメージセンサ制御信号をRS232C規格で送信し、イメージセンサ制御部50は、受信したイメージセンサ制御信号に基づいて、カメラ40のイメージセンサを制御する。
カメラ40は、イメージセンサ制御部50により制御され、1フレームごとに2回の撮影が実行される。1フレームの中の1回目の撮影では、間引き読み出しによりワークWの可動範囲8を撮影し(第1の撮影工程)、全体の粗画像91を生成する(ステップS21、第1の画像生成工程)。得られた粗画像91は、映像分岐部52を介して検出部55に送信される。
検出部55は、入力された粗画像91に基づき、ワークWの重心座標84、即ち概略位置を算出し(ステップS22、概略位置演算工程)、選択部60及び出力画像生成部56に送信する。
1フレームの中の2回目の撮影では、全画素の読み出しによりワークWの可動範囲8を撮影する(ステップS23、第2の撮影工程)。ここで、得られた全ての精細画像90のデータは選択部60に送信され、選択部60ではワークWの周囲の4個のカメラ40を選択し、その4個のカメラ40の画像データのみをメモリインタフェース53を介して画像記憶部54に記憶する(ステップS24)。従って、ここでの第2の撮影工程では、実質的には可動範囲8の全体の撮影ではなく、選択された4個のカメラ40のみの撮影、即ち、ワークWの重心座標84を含む可動範囲8の一部の撮影を実行することになる。
出力画像生成部56は、ワークWの重心座標84からワークWの周囲の500万画素の切り出し領域83の位置を算出する。そして、出力画像生成部56は、切り出し領域83に対応する精細画像92のデータを画像記憶部54から読み出して、概略位置周囲の精細画像92を生成する(ステップS25、第2の画像生成工程)。生成された概略位置周囲の精細画像92は、映像出力インタフェース57を介して映像信号として制御装置3に送信され、制御装置3においてワークWの詳細位置を演算し、ロボット本体2の動作の制御に利用される。
上述したように本実施形態の画像撮像装置4によれば、第1実施形態の効果に加え、4個のカメラ40のみの精細画像のデータを記憶するので、20個のカメラ40の精細画像90のデータを記憶する場合に比べて、画像記憶部54のメモリ容量を低減できる。しかも、カメラ40の個数が更に増加しても、メモリ容量は4個分のカメラ40のみの精細画像のデータを記憶する容量で足りる。このため、メモリ容量の低減により部品コストを削減することができる。
上述した第1〜第3実施形態では、出力画像生成部56は、重心座標84を含む500万画素の精細画像を4個のカメラ40の撮影領域から切り出すようにして生成する場合について説明したが、これには限られない。例えば、ワークWの移動に要求される精度やワークWの大きさ、カメラ40の解像度等により、切り出す精細画像の大きさや、切り出す前の撮影領域となるカメラ40の数量を適宜変更することができる。例えば、大型のワークWを扱う場合は、精細画像の画素数を多くしたり、あるいは精細画像を4個以上のカメラ40の撮影領域から切り出すようにすることができる。
また、上述した第1〜第3実施形態では、ワークWの水平方向の移動のみ考慮した場合について説明したが、これには限られない。例えば、ワークWの上下方向の移動を考慮し、ワークWが上下方向に移動することに伴うワークWの画像の大きさの変化を考慮するようにしてもよい。
また、上述した第1〜第3実施形態では、カメラ40はロボット本体2とは離れた天井等に設置された場合について説明したが、これには限られない。例えば、カメラ40は、アーム21の先端側のリンクに設けられたオンハンドカメラであってもよい。
また、上述した第1〜第3実施形態では、各カメラ40による各撮影領域80の全体がワークWの可動範囲8の全体領域82に一致するように設定しているが、これには限られない。例えば、各カメラ40による各撮影領域80の全体が、ワークWの可動範囲8の一部の範囲であったり、あるいは可動範囲8より広い範囲であってもよい。
また、上述した第1〜第3実施形態では、演算部5,105,205は、電子回路基板から構成された場合について説明したが、これには限られない。例えば、演算部5,105,205を、CPU、画像記憶部54であるRAM、プログラムが格納されるROM、各種インタフェースを有するコンピュータにより構成するようにしてもよい。
この場合、第1〜第3実施形態の各処理動作は、具体的にはコンピュータである演算部5,105,205により実行される。従って、上述した機能を実現するソフトウェアのプログラムを記録した記録媒体を演算部5,105,205に供給し、記録媒体に格納されたプログラムを各CPUが読み出し実行することによって達成されるようにしてもよい。この場合、記録媒体から読み出されたプログラム自体が上述した各実施形態の機能を実現することになり、プログラム自体及びそのプログラムを記録した記録媒体は本発明を構成することになる。
また、上述した例では、コンピュータ読み取り可能な記録媒体がROMであり、ROMにプログラムが格納される場合について説明したが、これに限定するものではない。プログラムは、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラムを供給するための記録媒体としては、HDD、外部記憶装置、記録ディスク等を用いてもよい。