(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-07
(45)【発行日】2024-08-16
(54)【発明の名称】画像処理装置
(51)【国際特許分類】
B25J 13/08 20060101AFI20240808BHJP
【FI】
B25J13/08 A
(21)【出願番号】P 2020120452
(22)【出願日】2020-07-14
【審査請求日】2023-06-15
(73)【特許権者】
【識別番号】000129253
【氏名又は名称】株式会社キーエンス
(74)【代理人】
【識別番号】110001427
【氏名又は名称】弁理士法人前田特許事務所
(72)【発明者】
【氏名】俵 京佑
【審査官】杉山 悟史
(56)【参考文献】
【文献】特開2019-214100(JP,A)
【文献】特開2018-144159(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
B25J 1/00 ~ 21/02
(57)【特許請求の範囲】
【請求項1】
作業空間に積み上げられた複数のワークの中から所定のワークを把持して順次取り出すピッキング動作をサイクル実行するロボットの制御に用いられる画像処理装置であって、
複数のワークが積み上げられた前記作業空間をトリガ命令に従って撮像し、撮像データを出力する撮像部と、
前記撮像部から出力された撮像データに基づいて、前記作業空間に積み上げられたワークの中から把持対象となるワークを決定し、当該ワークを把持して所定の載置位置に載置するまでのハンドの経路を設定するプロセッサとを備え、
前記プロセッサは、前記経路の途中で前記ハンドが前記撮像部の撮像視野外に移動するタイミングに基づいて、前記撮像部に次に撮像させるトリガの発行タイミングを決定することにより、ピッキング動作のサイクルごとに前記撮像部の撮像タイミングを動的に変化させる
画像処理装置であって、
前記プロセッサは、連続する複数の経由点の座標を含む情報を生成して前記経路を設定し、前記連続する複数の経由点のうち、前記トリガの発行タイミングに対応する経由点を特定するトリガ発行情報を生成し、当該トリガの発行タイミングに対応する経由点を含む前記連続する複数の経由点の座標と、前記トリガ発行情報とを、ロボットを制御するロボットコントローラへ出力することを特徴とする画像処理装置。
【請求項2】
請求項
1に記載の画像処理装置において、
前記プロセッサは、前記ハンドのアプローチ位置、把持実行位置及び把持後の退避位置のうち、任意の1つの属性を有する固定経由点の座標と、前記固定経由点の属性を示す属性情報とを前記ロボットコントローラへ出力する画像処理装置。
【請求項3】
請求項
2に記載の画像処理装置において、
前記画像処理装置は、
ワークモデル及び当該ワークモデル上の前記ハンドによる把持位置情報の入力を受け付けるワークモデル入力部と、
ワークが存在する前記作業空間の三次元計測を行う計測部と、
前記計測部による三次元計測結果と、前記ワークモデル入力部により入力された前記ワークモデルとに基づいて、前記作業空間に積み上げられたワークの把持位置をサーチするサーチ部と、
前記サーチ部でサーチされたワークの把持位置を把持する際に前記ハンドが周囲の物体と干渉するか否かを判定し、周囲の物体との干渉を回避する前記ハンドの姿勢を決定する干渉判定部とを備えている画像処理装置。
【請求項4】
請求項
3に記載の画像処理装置において、
前記プロセッサは、前記干渉判定部による判定結果に基づいて、前記ハンドが周囲の物体との干渉を回避可能な複数の経由点を決定し、当該経由点を結ぶように前記ハンドの経路生成を行う画像処理装置。
【請求項5】
請求項1から
4のいずれか1つに記載の画像処理装置において、
前記プロセッサは、前記撮像部の撮像視野の縁を外形状とする仮想の立体図形を設定して前記ハンドが前記立体図形と干渉するか否かを判定し、前記ハンドが前記立体図形と非干渉となるタイミングが、前記ハンドが前記撮像部の撮像視野外に移動するタイミングであると判定する画像処理装置。
【請求項6】
請求項
5に記載の画像処理装置において、
前記プロセッサは、平面視で前記ワークが積み上げられる領域を囲む枠の入力を受け付け、下面の形状が前記枠の形状とされるとともに前記撮像部の受光面に向かって延びる形状の前記立体図形を設定する画像処理装置。
【請求項7】
請求項
5または
6に記載の画像処理装置において、
前記プロセッサは、前記ハンドが前記立体図形と干渉するか否かの判定時には、前記経路上に設定される複数の経由点のうち、隣合う経由点の間隔を分割する分割経由点を設定し、当該分割経由点を使用する画像処理装置。
【請求項8】
請求項1から
7のいずれか1つに記載の画像処理装置において、
前記プロセッサは、前記ハンドの把持実行位置から、ワークの載置位置までの間でトリガの発行タイミングを決定し、当該タイミングに対応するロボットの位置をトリガ位置として出力する画像処理装置。
【請求項9】
請求項1から
8のいずれか1つに記載の画像処理装置において、
前記画像処理装置は、
前記経路上に複数の経由点が存在する場合、複数の経由点の経由順序を示すとともに、複数の経由点の個別の編集が可能な編集画面を生成する編集画面生成部と、
前記編集画面生成部で生成された編集画面を表示する表示部と、を備えている画像処理装置。
【請求項10】
作業空間に積み上げられた複数のワークの中から所定のワークを把持して順次取り出すピッキング動作をサイクル実行するロボットの制御に用いられる画像処理装置であって、
複数のワークが積み上げられた前記作業空間をトリガ命令に従って撮像し、撮像データを出力する撮像部と、
前記撮像部から出力された撮像データに基づいて、前記作業空間に積み上げられたワークの中から把持対象となるワークを決定し、当該ワークを把持して所定の載置位置に載置するまでのハンドの経路を設定するプロセッサと、
前記経路上に複数の経由点が存在する場合、複数の経由点の経由順序を示すとともに、複数の経由点の個別の編集が可能な編集画面を生成する編集画面生成部と、
前記編集画面生成部で生成された編集画面を表示する表示部と、
を備え、
前記プロセッサは、前記経路の途中で前記ハンドが前記撮像部の撮像視野外に移動するタイミングに基づいて、前記撮像部に次に撮像させるトリガの発行タイミングを決定することにより、ピッキング動作のサイクルごとに前記撮像部の撮像タイミングを動的に変化させることを特徴とする画像処理装置。
【請求項11】
請求項
10に記載の画像処理装置において、
前記プロセッサは、
前記編集画面上で選択された経由点に対応する前記経路上の区間において、前記トリガの発行タイミングを決定する画像処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ピッキング動作を行うロボットの制御に用いられる画像処理装置に関する。
【背景技術】
【0002】
従来より、例えば特許文献1に開示されているように、作業空間に配置されたワークの三次元形状を測定し、ロボットに取り付けられたハンドを制御してワークを把持し、ハンドにより把持したワークを所定の載置位置に載置するようにロボットの動作設定を行うための三次元測定装置が知られている。
【0003】
特許文献1の三次元測定装置は、ロボットコントローラとは別に設けられており、ロボットコントローラでは難しい高精度な三次元測定を行い、その測定結果に基づいた様々な機能を実現すべく、ワークを把持する際のハンドのアプローチ位置やハンドによる把持を実行する把持実行位置等のように、ハンドが経由すべき点をロボットコントローラに出力することができるようになっている。
【0004】
すなわち、三次元測定装置は、例えば撮像部によりワーク及びその周辺を撮像して三次元データを取得した後、取得された三次元データからワークをサーチして把持姿勢等を決定する。その後、ワークの把持を実行する把持実行位置の座標を算出し、算出した座標をロボットコントローラに出力する。ロボットコントローラは、座標を受け取ってハンドを動かし、ハンドによってワークを把持して所定の載置位置まで搬送し、当該プレース位置に載置する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したように、ロボットを用いてワークのピッキング作業を行う場合には、作業空間にあるワークを把持して搬送すると、その後の作業空間の状況が変化するので、ワークを搬送するごとにカメラで作業空間を撮像し、新たな三次元データを取得する必要がある。
【0007】
具体的には、まず、ロボットがカメラによる撮像を待機する位置(撮像待機位置)にあるときに、撮像トリガを発行し、作業空間のワークを撮像する。取得された画像内で把持可能なワークの位置などを特定し、目標把持実行位置を計算する。その後、容器などの上空位置を経由して、目標把持実行位置へロボットを移動させた後、ハンドを用いた把持動作を行う。最後に、ロボットをプレース位置へと移動させ、そこでハンドのプレース動作を行い、上記撮像待機位置に戻って撮像トリガを再度発行する。これが、一般的なばら積みピッキングの手順である。
【0008】
ただし、このように撮像待機位置でトリガ発行すると、カメラの撮像時間、ワークの位置の計算、把持実行位置の計算などの時間分、撮像待機位置でロボットを停止させて待っていなければならず、タクト要求の厳しいばら積みピッキングではこの待ち時間が問題となっていた。
【0009】
そこで、ロボットがプレース位置に達した瞬間に次の撮像トリガを発行する等の対策が考えられる。この対策を採用することで、プレース位置ではロボットがワークの容器にかぶって撮像を阻害するケースが少なく、かつ、撮像待機位置にロボットが戻るまでの間に撮像や計算を終了させることができるので、厳しいタクト要求にも応えることが可能になる。
【0010】
しかし、この方法にもいくつかの問題があった。すなわち、撮像トリガを発行する位置は、通常理想的なトリガ位置よりも余裕を持ったタイミングとする必要があるため、プレース位置から撮像待機位置までのロボット移動時間が各種処理を行うのに十分な長さでなく、結局ロスタイムが発生するケースが存在する。ロボット移動時間が各種処理を行うのに十分な長さとなるように撮像トリガを発行するタイミングを早くすると、ロボットが容器に被ってしまい、適切に撮像ができない可能性が高くなり、トリガ発行位置の調整が難しくなる。しかも、ばら積みピッキングではハンドの移動経路がサイクルごとに異なっており、このこともトリガ発行位置の調整を難しくしている。
【0011】
また、従来は、ロボットプログラムを使ってトリガ位置を決定しており、画像処理装置での経路生成と、ロボットプログラムでのトリガ位置の設定とは独立したものであった。そのため、画像処理装置側で経由点を追加した場合など、ロボットプログラム側の修正を行ってトリガ位置を合わせることとしていた。例えばプレース位置でトリガ発行しようとすると、ロボットプログラムを直接編集する必要があり、かつ、そのプログラムは汎用性の低いものになる。つまり、ユーザがトリガ位置調整を行うことは容易なものではなかった。
【0012】
本開示は、かかる点に鑑みたものであり、その目的とするところは、ユーザがロボットプログラムを編集することなくトリガ設定が行えるようにし、かつ、設定された中で最適なタイミングでトリガを自動的に発行できるようにすることにある。
【課題を解決するための手段】
【0013】
上記目的を達成するために、第1の開示は、作業空間に積み上げられた複数のワークの中から所定のワークを把持して順次取り出すピッキング動作をサイクル実行するロボットの制御に用いられる画像処理装置を前提とする。
【0014】
画像処理装置は、複数のワークが積み上げられた前記作業空間をトリガ命令に従って撮像し、撮像データを出力する撮像部と、前記撮像部から出力された撮像データに基づいて、前記作業空間に積み上げられたワークの中から把持対象となるワークを決定し、当該ワークを把持して所定の載置位置に載置するまでのハンドの経路を設定するプロセッサとを備えている。
【0015】
前記プロセッサは、前記経路の途中で前記ハンドが前記撮像部の撮像視野外に移動するタイミングに基づいて、前記撮像部に次に撮像させるトリガの発行タイミングを決定することにより、ピッキング動作のサイクルごとに前記撮像部の撮像タイミングを動的に変化させることができる。
【0016】
この構成によれば、撮像部がトリガ命令に従って作業空間を撮像すると、ワークが含まれた撮像データが当該撮像部からプロセッサに出力される。プロセッサでは、撮像部から出力された撮像データに基づいて、把持対象となるワークを決定するとともに、把持対象のワークから所定の載置位置までのハンドの経路を生成する。この経路に従ってハンドが移動することで、1サイクルのピッキング動作が完了する。
【0017】
ハンドは経路の途中で撮像部の撮像視野外まで移動するのが一般的である。プロセッサは、ハンドが撮像視野外に移動するタイミングに基づいて、撮像部に次に撮像させるトリガの発行タイミングを決定する。撮像部は、決定された発行タイミングで発行されたトリガ命令に従って作業空間を撮像するので、ハンドがワークに被ってしまうことはなく、撮像視野内のワークを撮像できる。
【0018】
次のサイクルでは、ワークの数が減ったことで作業空間のワークの状態が前のサイクルとは異なっている。従って、ハンドの経路も前のサイクルとは異なるので、ハンドが撮像部の撮像視野外に移動するタイミングも前のサイクルとは異なる。本開示によれば、ピッキング動作のサイクルごとに撮像部の撮像タイミングを動的に変化させて最適なタイミングでトリガを自動的に発行できる。これにより、ユーザがトリガ位置調整を行う必要が無くなり、利便性が向上する。
【0019】
第2の開示では、前記プロセッサは、前記経路上の座標を、ロボットを制御するロボットコントローラへ出力することができる。
【0020】
例えば、ロボットを制御するロボットコントローラを備えたロボットシステムの場合、プロセッサはロボットコントローラとは別であってもよく、この場合、プロセッサが座標をロボットコントローラに出力することで、プロセッサから出力された経路上の座標へ移動するように、ロボットコントローラによってロボットを制御し、これにより、ピッキング動作が可能になる。
【0021】
尚、本開示は、プロセッサとロボットコントローラとが別の形態以外にもプロセッサがロボットコントローラに内蔵された形態であってもよい。この場合、ロボットコントローラの内部で経路が生成され、生成された経路を移動するように、ロボットコントローラがロボットを制御する。
【0022】
第3の開示では、前記プロセッサは、前記トリガを発行すべき前記経路上の座標と、当該座標で前記トリガを発行すべきトリガ発行情報とを前記ロボットコントローラへ出力することができる。
【0023】
この構成によれば、プロセッサが、経路上の座標だけでなく、その座標において撮像を実行させるトリガ発行情報も出力するので、ユーザはロボットプログラムを編集することなく、サイクルごとに変化するトリガ位置を追従させることができる。
【0024】
第4の開示では、前記プロセッサは、前記経路の情報として前記経路上における連続する複数の経由点の座標を含む情報を生成し、当該経路の情報を前記ロボットコントローラへ出力することができる。
【0025】
経路は上述したようにサイクルごとに異なっている。プロセッサで生成した経路上には、ハンドが経由すべき点(経由点)として、例えば把持動作を行うべき点や載置動作を行うべき点が存在している。それら複数の経由点をロボットコントローラへ出力することで、ロボットコントローラは複数の経由点を経由するようにハンドを制御できる。
【0026】
第5の開示では、前記プロセッサは、前記ハンドのアプローチ位置、把持実行位置及び把持後の退避位置のうち、任意の1つの属性を有する固定経由点の座標と、前記固定経由点の属性を示す属性情報とを前記ロボットコントローラへ出力することができる。
【0027】
この構成によれば、固定経由点の座標と、その経由点の属性を示す属性情報とがロボットコントローラに出力されるので、ユーザは、ロボットコントローラ側との対応関係を考慮することなくハンドの経路設定を編集したり、ロボット自体の動作については関知せずに、ハンドの動作のみを検討すれば済む。つまり、ユーザは各属性情報に対応したハンドの動作を記述するだけでロボットプログラムを作成することが可能になる。
【0028】
第6の開示では、前記画像処理装置は、ワークモデル及び当該ワークモデル上の前記ハンドによる把持位置情報の入力を受け付けるワークモデル入力部と、ワークが存在する前記作業空間の三次元計測を行う計測部と、前記計測部による三次元計測結果と、前記ワークモデル入力部により入力された前記ワークモデルとに基づいて、前記作業空間に積み上げられたワークの把持位置をサーチするサーチ部と、を備えている。前記干渉判定部は、前記サーチ部でサーチされたワークの把持位置を把持する際に前記ハンドが周囲の物体と干渉するか否かを判定し、周囲の物体との干渉を回避する前記ハンドの姿勢を決定することができる。
【0029】
この構成によれば、ワークが積み上げられた作業空間に把持可能なワークがある場合には、その把持可能なワークを、把持位置情報に基づいてハンドで把持しようとした際に、ハンドが周囲の物体と干渉するか否かを判定できる。ハンドが周囲の物体と干渉してしまう場合には、サーチ部において把持可能であると判定されていても、実際のピッキング動作は行えないので、干渉判定部は、ピッキング動作が可能となるように、ハンドの姿勢を変えることで、干渉しないハンドの姿勢を決定できる。尚、干渉しないハンドの姿勢が存在しない場合もある。また、ワークモデル上のハンドによる把持位置を複数入力しておくこともできる。
【0030】
第7の開示では、前記プロセッサは、前記干渉判定部による判定結果に基づいて、前記ハンドが周囲の物体との干渉を回避可能な複数の経由点を決定し、当該経由点を結ぶように前記ハンドの経路生成を行うことができる。
【0031】
この構成によれば、ハンドが周囲の物体と干渉しない経路でロボットにピッキング動作を実行させることができる。
【0032】
第8の開示では、前記プロセッサは、前記撮像部の撮像視野の縁を外形状とする仮想の立体図形を設定して前記ハンドが前記立体図形と干渉するか否かを判定し、前記ハンドが前記立体図形と非干渉となるタイミングが、前記ハンドが前記撮像部の撮像視野外に移動するタイミングであると判定することができる。
【0033】
この構成によれば、仮想の立体図形とハンドとの干渉判定アルゴリズムを用いることで、ハンドが立体図形と非干渉となるタイミングを求めることができる。立体図形の外形状は撮像視野の縁であるため、ハンドが立体図形と非干渉であるということは、ハンドが撮像部の撮像視野外に位置しているということである。したがって、ハンドが撮像部の撮像視野外に移動するタイミングを容易に求めることができる。
【0034】
第9の開示では、前記プロセッサは、平面視で前記ワークが積み上げられる領域を囲む枠の入力を受け付け、下面の形状が前記枠の形状とされるとともに前記撮像部の受光面に向かって延びる形状の前記立体図形を設定することができる。
【0035】
例えばワークが容器に収容されている場合には、ワークが積み上げられる領域は容器内に限定される。この場合には平面視で容器の内部空間を囲む形状の枠をユーザが入力すると、その枠の形状が仮想の立体図形の下面の形状となる。そして、その下面から撮像部の受光面に向かって延びる立体図形を設定することで、撮像部の視野範囲が、ワークが積み上げられる領域を反映した適切な形で設定される。枠の形状は特に限定されるものではなく、例えば矩形状、円形状等とすることができる。
【0036】
第10の開示では、前記プロセッサは、前記ハンドが前記立体図形と干渉するか否かの判定時には、複数の前記経由点のうち、隣合う経由点の間隔を分割する分割経由点を設定し、当該分割経由点を使用することができる。
【0037】
この構成によれば、ハンドが撮像部の撮像視野外に移動するタイミングを細かく求めることができる。
【0038】
第11の開示では、前記プロセッサは、前記ハンドの把持実行位置から、ワークの載置位置までの間でトリガの発行タイミングを決定し、当該タイミングに対応するロボットの位置をトリガ位置として出力することができる。
【0039】
第12の開示では、前記画像処理装置は、前記経路上に複数の経由点が存在する場合、複数の経由点の経由順序を示すとともに、複数の経由点の個別の編集が可能な編集画面を生成する編集画面生成部と、前記編集画面生成部で生成された編集画面を表示する表示部と、を備えている。
【発明の効果】
【0040】
以上説明したように、本開示によれば、ハンドが撮像視野外に移動するタイミングに基づいて、次の撮像トリガの発行タイミングを決定することにより、ピッキング動作のサイクルごとに撮像タイミングを動的に変化させることができる。これにより、ユーザがロボットプログラムを編集することなくトリガ設定を行うことができ、その設定された中で最適なタイミングでトリガを自動的に発行できる。
【図面の簡単な説明】
【0041】
【
図1】ロボットシステムを用いてばら積みピッキング動作を行う様子を示す模式図である。
【
図2A】ロボットハンドでワークを把持する例を示す模式図である。
【
図2B】空洞を有するワークを内面から把持する例を示す模式図である。
【
図2C】板状のワークを吸引して把持する例を示す模式図である。
【
図4】ハンドが取り付けられたアームの先端部の斜視図である。
【
図5】ロボットシステムの概略構成を示すブロック図である。
【
図6】ロボットシステムの詳細構成を示すブロック図である。
【
図8】画像処理装置によるハンドの取付位置算出処理の手順の一例を示すフローチャートである。
【
図9】ワークモデルの登録の手順の一例を示すフローチャートである。
【
図10】ハンドモデル及び把持位置の登録の手順の一例を示すフローチャートである。
【
図11】キャリブレーションの手順の一例を示すフローチャートである。
【
図12】中心ロボット位置を設定する際に表示されるユーザインタフェース画面の一例を示す図である。
【
図13】検出ツールを設定する際に表示されるユーザインタフェース画面の一例を示す図である。
【
図14】ツール中心算出の際に表示されるユーザインタフェース画面の一例を示す図である。
【
図15】キャリブレーション実行の際に表示されるユーザインタフェース画面の一例を示す図である。
【
図16】移動間隔設定用ウインドウの一例を示す図である。
【
図17】ロボット動作チェック用ウインドウの一例を示す図である。
【
図18】動作チェック後、問題がない場合に表示されるユーザインタフェース画面の一例を示す図である。
【
図19】動作チェック後、問題がある場合に表示されるユーザインタフェース画面の一例を示す図である。
【
図20】ハンド撮像時に表示されるユーザインタフェース画面の一例を示す図である。
【
図21】6変数の誤差を個別に表示する誤差表示ウインドウの一例を示す図である。
【
図23】干渉判定の手順の一例を示すフローチャートである。
【
図24】干渉判定終了後にロボットを動作させる手順の一例を示すフローチャートである。
【
図25】経路設定用ユーザインタフェースの一例を示す図である。
【
図26】属性情報入力ウインドウの一例を示す図である。
【
図27】固定経由点の位置設定用ウインドウの一例を示す図である。
【
図28】動作/干渉判定設定用ウインドウの一例を示す図である。
【
図29】画像処理装置、ロボットコントローラ及びロボットの処理シーケンス図である。
【
図30A】属性情報をユーザインタフェース上で関連付けて登録できる場合のメインプログラムを表示部に表示した例を示す。
【
図30B】属性情報をユーザインタフェース上で関連付けて登録できる場合のアクションプログラムを表示部に表示した例を示す。
【
図31】属性情報をユーザインタフェース上で関連付けて登録できない場合のメインプログラムを表示部に表示した例を示す。
【
図32】固定経由点(指定位置)がアプローチ位置の前に追加された場合の
図25相当図である。
【
図34】ロボットコントローラ側で属性情報を処理する場合の経由点と属性情報とのデータ配列を示す図である。
【
図35】画像処理装置側で属性情報を処理する場合の経由点と属性情報とのデータ配列を示す図である。
【
図36】画像処理装置側で属性情報を処理する場合の
図30A相当図である。
【
図37】命令配列の中に経由点データが入っている場合の
図35相当図である。
【
図38】撮像トリガ位置の計算手法の一例を示すフローチャートである。
【
図39】領域指定用ユーザインタフェースの一例を示す図である。
【
図40】容器の4辺を指定するウインドウの表示例を示す図である。
【
図41】容器の深さを指定するウインドウの表示例を示す図である。
【
図42】撮像トリガ位置の計算手法を説明する概念図である。
【発明を実施するための形態】
【0042】
以下、本発明の実施形態を図面に基づいて詳細に説明する。尚、以下の好ましい実施形態の説明は、本質的に例示に過ぎず、本発明、その適用物或いはその用途を制限することを意図するものではない。
【0043】
図1は、本発明の実施形態に係るロボットシステム1000の構成例を示す模式図である。この
図1は、各種製品の製造工場等にある作業空間に積み上げられた複数のワークWKの中から把持可能な所定のワークWKを、ロボットRBTを用いて順次取り出し、所定の場所に設置されているステージSTGまで搬送して該ステージSTG上に載置するばら積みピッキング動作を行う例について示している。このばら積みピッキング動作は、把持可能なワークWKが無くなるまで繰り返し実行される。つまり、把持可能な所定のワークWKを把持して所定位置まで搬送し、載置するという動作を含むピッキング動作を1サイクルとしたとき、このサイクルを複数回実行するので、ロボットRBTは所定のワークを把持して順次取り出すピッキング動作をサイクル実行するように構成されているということもできる。
【0044】
ロボットシステム1000は、ロボットRBTと、ロボットRBTを制御するロボットコントローラ6とを備えている。さらに、この図に示すロボットシステム1000は、ロボットRBT及びロボットコントローラ6の他に、
図5に示すようにロボット設定装置100と、センサ部2と、表示部3と、操作部4と、ロボット操作具7とを備える。
【0045】
図1に示すロボットRBTは、産業用の汎用ロボットであり、工場等の床面に対して固定されるベース部BSを備えている。ロボットRBTは、例えばマニピュレータ等とも呼ばれており、6軸制御が可能に構成されている。このロボットRBTは、ベース部BSから延びるアーム部ARMと、アーム部ARMの先端部に設けられたエンドエフェクタとしてロボットハンドHND(以下、単に「ハンド」という)とを備えている。アーム部ARMは、可動部としての関節部を複数備えた多関節型に構成することができる。アーム部ARMの各関節部の動作及びアーム部ARM自体の回転動作によってハンドHNDを可動範囲内の所望の位置まで移動させることができる。
【0046】
ハンドHNDは、ワークWKを把持可能に構成されている。ハンドHNDは、
図2Aに示すようにワークWKの外側を挟み込んで把持する構造のハンドHND1、
図2Bに示すように空洞部を有するワークWK2の内部に爪部を挿入して拡開させることによって保持する構造のハンドHND2、
図2Cに示すように板状のワークWK3を吸引して保持するハンドHND3等があり、いずれのエンドエフェクタも使用することができる。また、本明細書で「把持」とは、
図2Aに示すワークWKの外側を挟み込む方法、空洞部に爪部を挿入して拡開させる方法、吸引する方法等の全ての例を含む意味で使用する。
【0047】
図3に示すように、ハンドHNDの先端部には、フランジFLGが固定されている。上述したようにハンドHNDの種類は様々あり、ワークWKに応じて変更する必要があるので、ハンドHNDの交換がユーザ側で自在に行えるように、
図4に示すようにフランジFLGにハンドHNDが着脱可能に取り付けられている。ハンドHNDのフランジFLGへの取付位置及び姿勢は設計値通りになるように指定されている。ハンドHNDのフランジFLGへの取付位置及び姿勢が設計値通りになるように、例えばガイドピン(図示せず)などを設けておくこともできるが、ガイドピンなどが設けられていたとしても、実際にピッキング作業が行われる現場では、ハンドHNDが必ずしも設計値通りにフランジFLGに取り付けられているとは限らず、ハンドHNDの取付位置及び姿勢が設計値からずれていることがあり得る。
【0048】
(座標系の説明)
本実施形態に係るロボットシステム1000では、ロボット座標系と、カメラ座標系と、フランジ座標系と、ツール座標系とが存在している。ロボット座標系は、
図1に示すように原点を点ORとした三次元座標系であり、例えばロボットRBTの取付位置を原点としたときの座標系である。ロボット座標系は、ロボットRBTの各部(フランジFLG、アームARM等)の位置の基準となる座標系である。
図1では、ロボット座標系の原点ORがロボットRBTの基部の中心である例を示しているが、これに限らず、例えば、ベース部BSの上面の中心をロボット座標系の原点ORとしてもよい。また、一般的に、ロボット座標とは、ロボット座標系におけるフランジFLGの位置を示している。
【0049】
この実施形態では、詳細は後述するが、センサ部2は、いわゆるカメラを備えた構成とすることもでき、所定の撮像視野内を撮像可能に構成されている。このセンサ部2で撮像された画像内の各点の基準となる座標系としてカメラ座標系(撮像部の座標系)が定義されている。カメラ座標系の一例として、X,Yはセンサ部2の真下を原点OCにし、Zはセンサ部2による計測レンジの中央を原点OCにしているが、これに限られるものではない。
【0050】
フランジ座標系は、
図3に示すようにフランジFLGの取付面の中心を原点OFとした三次元座標系である。また、ハンドHNDをツールと呼ぶこともでき、
図4に示すように、ツール座標系はツールの先端を原点OTとした三次元座標系である。ツール座標系の原点OTは、ツールの先端に限られるものではなく、ツールの任意の位置であってもよい。
【0051】
(ロボットの制御)
ロボットRBTは、
図1に示すロボットコントローラ6によって制御される。ロボットコントローラ6はアーム部ARMの動作やハンドHNDの開閉動作等を制御する。またロボットコントローラ6は
図5に示すロボット設定装置100から、ロボットRBTの制御に必要な情報を取得する。例えば、
図1に示す容器BXに無作為に投入された多数の部品であるワークWKの三次元形状を、三次元カメラや照明等を含むセンサ部2を使用して取得し、ロボット設定装置100でワークWKの位置や姿勢を検出して、その情報をロボットコントローラ6が取得する。
【0052】
図5に示す操作部4では、後述するピッキング動作時の干渉判定の設定、画像処理に関する各種設定を行う。また、表示部3で、各種設定や、ロボットRBTの動作状態の確認、ロボット設定装置100の動作状態の確認、ハンドHNDの取付状態の確認等を行う。さらに、ロボット設定装置100の内部に設けられている画像処理装置300(
図6に示す)が例えば三次元サーチ、干渉判定、把持解の算出等を行う。
【0053】
一方、ロボットコントローラ6はロボット設定装置100から出力される信号に従い、ロボットRBTの制御を行うように構成された周知の部材である。またロボット操作具7は、ロボットRBTの動作設定を行う。なお、
図5の例では操作部4とロボット操作具7を別個の部材としているが、これらを共通の部材としてもよい。
【0054】
センサ部2は、ロボットビジョンなどと呼ばれる部材であり、撮像対象物を撮像する撮像部と呼ぶこともできる。この実施形態では、ハンドHND及びワークWKが少なくともセンサ部2の撮像対象物となる。ワークWKを撮像する際には、容器BXが撮像対象物として含まれていてもよい。また、ハンドHNDを撮像する際には、フランジFLGやアーム部ARMが撮像対象物として含まれていてもよい。
【0055】
センサ部2は、ロボットコントローラ6に接続されており、ロボットコントローラ6から出力されるトリガ命令を受信可能に構成されている。センサ部2は、ロボットコントローラ6から出力されたトリガ命令に従って視野範囲を撮像し、その撮像データをプロセッサ300Aに出力する。トリガ命令は、単にトリガと呼ぶこともできるし、トリガ信号と呼ぶこともできる。
【0056】
センサ部2で撮像された画像から、ばら積みされたワークWKの三次元形状を示す三次元形状データを取得することが可能になる。容器BXの三次元形状を示す三次元形状データも、センサ部2で撮像された画像から取得することができる。同様に、ハンドHNDの三次元形状を示す三次元形状データ、フランジFLGの三次元形状を示す三次元形状データ等もセンサ部2で撮像された画像から取得することができる。
【0057】
尚、上記各三次元形状を取得する方法は、例えば、パターン投影法、ステレオ法、レンズ焦点法、光切断法、光レーダ法、干渉法(白色干渉法)、TOF方式などがあり、これらの方法のうち、どの方法を用いてもよい。各方法は、従来から周知であるため、詳細な説明は省略する。本実施形態においては、パターン投影法のうち、周期的な照度分布を有するパターン光を撮像対象物に照射し、撮像対象物の表面で反射した光を受光する位相シフト法を用いている。
【0058】
センサ部2は、測定対象物であるワークWKの形状を測定する形状測定装置と呼ぶこともでき、ワークWKが存在する作業空間の三次元計測を行う計測部2a(
図6に示す)を備えている。このため、センサ部2によってハンドHND、ワークWKや容器BXの形状を測定することもできる。センサ部2は、ロボット設定装置100の一部とすることができるが、別部材として構成することもできる。センサ部2の具体的な構成は、三次元形状の計測技術に応じて決定される。
【0059】
本例では、センサ部2は、計測部2aの他に、カメラ、照明又はプロジェクタ等を備える。例えば位相シフト法でワークWKの三次元形状を計測する場合は、センサ部2として
図7に示すように、プロジェクタ(投光部)PRJと、複数のカメラ(受光部)CME1、CME2、CME3、CME4とを備える。プロジェクタPRJは、撮像対象物に光を照射するための部材である。カメラCME1、CME2、CME3、CME4は、プロジェクタPRJにより投光されて撮像対象物の表面で反射した光を受光する撮像素子を有する部材である。投光部の光源は、例えば複数の発光ダイオード、液晶パネル、有機ELパネル、デジタルマイクロミラーデバイス(DMD)等で構成することができる。
【0060】
センサ部2は、カメラCME1、CME2、CME3、CME4やプロジェクタPRJといった複数の部材で構成する他、これらを一体的に構成してもよい。例えばカメラCME1、CME2、CME3、CME4やプロジェクタPRJを統合してヘッド状とした三次元撮像ヘッドを、センサ部2とすることができる。
【0061】
また三次元形状データの生成自体はセンサ部2の計測部2aで行うことができる。この場合、計測部2aには、三次元形状データの生成機能を実現する画像処理IC等を設けておけばよい。あるいは、三次元形状データの生成を、センサ部2側で行わず、センサ部2で撮像した生画像を、画像処理装置300へ転送し、画像処理装置300内の計測部(図示せず)で画像処理して三次元画像等の三次元形状データを生成する構成としてもよい。センサ部2は、撮像データである三次元形状データを後述する決定部305等に出力することができる。
【0062】
ロボット設定装置100は、センサ部2で得られたワークWKの三次元形状データに基づいて、三次元サーチ、干渉判定、把持解算出等を行う。このロボット設定装置100は、専用の画像処理プログラムをインストールした汎用のコンピュータや、専用に設計された画像処理コントローラ、専用のハードウェアで構成することができる。また、グラフィックボードなどのハードウェアを画像検査処理に特化させた専用のコンピュータに、画像処理プログラムをインストールした構成とすることもできる。
【0063】
なお
図5の例では、センサ部2やロボットコントローラ6等をロボット設定装置100とは別個の部材で構成する例を示しているが、本発明はこの構成に限られず、例えばセンサ部2と画像処理装置100とを一体化したり、あるいはロボットコントローラ6をロボット設定装置100に組み込むこともできる。このように、
図5に示す部材の区分けは一例であって、複数の部材を統合させることもできる。
【0064】
センサ部2はロボットRBTと別体としている。すなわち、センサ部2をロボット本体5のアーム部ARMに設けない、オフハンド形式と呼ばれる形態となっている。尚、センサ部2をアーム部ARMに設けてもよい。
【0065】
表示部3は、例えば、液晶モニタや有機ELディスプレイ、CRT等で構成できる。また、操作部4は、例えば、キーボードやマウス、ポインティングデバイス等の各種入力デバイスで構成できる。また、表示部3をタッチパネル式ディスプレイとすることで、操作部4と表示部3とを一体化することもできる。
【0066】
例えばロボット設定装置100を、画像処理プログラムをインストールしたコンピュータで構成した場合、表示部3上には画像処理プログラムのグラフィカルユーザインタフェース(GUI)画面が表示される。表示部3上に表示されたGUI上から各種の設定を行うことができ、また各種画像や干渉判定結果等の処理結果を表示させることができる。この場合、表示部3を各種の設定を行うための設定部としても利用でき、設定部には操作部4が含まれていてもよい。
【0067】
ロボットコントローラ6は、センサ部2で撮像した情報に基づいてロボットの動作を制御する。またロボット操作具7は、ロボットRBTの動作設定を行うための部材であり、ペンダントなどが利用できる。
【0068】
ワークWKは、
図1に示すように複数個が容器BXに無作為に収容されている。このような作業空間の上方には、センサ部2が配置されている。ロボットコントローラ6は、センサ部2で得られたワークWKの三次元形状に基づいて、複数のワークWKの内から、把持対象のワークWKを決定するとともに把持候補位置も決定して、この把持対象のワークWKを把持候補位置で把持するよう、ロボットRBTを制御する。そして、ワークWKを把持したまま、アーム部ARMを動作させて予め定められた所定の載置位置、例えばステージSTG上まで移動させ、所定の姿勢でワークWKを載置する。いいかえると、ロボットコントローラ6は、センサ部2及びロボット設定装置100で特定されたピッキング対象のワークWKをハンドHNDで把持して、把持したワークWKを所定の基準姿勢にて、載置場所(ステージSTG)に載置してハンドHNDを開放するようにロボットRBTの動作を制御する。ステージSTGは、例えばコンベアベルト上やパレット等であってもよい。
【0069】
ここで本明細書において、ばら積みピッキングとは、容器BXに入れられて無作為に積み上げられたワークWKを、ロボットRBTで把持して、所定の位置に載置する他、容器BXを用いずに所定の領域に積み上げられたワークWKに対して把持、載置を行う例、あるいは所定の姿勢で並べられて積み上げられたワークWKを順次把持、載置する例も含む意味で使用する。また、必ずしもワークWK同士が積み重ねられている状態であることは要さず、ワークWK同士の重なりがない状態で平面上にランダムに置かれたワークWKについても、本明細書においてはばら積みと呼ぶ(順次ピッキングされていき、ピッキングの終盤でワークWK同士の重なりがない状態となった場合でも依然としてばら積みピッキングと呼ばれるのと同じ理由である)。なお、本発明はばら積みピッキングに必ずしも限定されるものでなく、ばら積みされていないワークWKを把持して搬送する用途にも適用できる。
【0070】
また、
図1の例ではセンサ部2を作業空間の上方に固定しているが、センサ部2の固定位置は、作業空間を撮像できる位置であればよく、例えば作業空間の斜め上方や側方、下方、斜め下方など、任意の位置に配置することができる。さらにセンサ部2が有するカメラや照明の数も、1個に限らず複数個としてもよい。さらにまたセンサ部2やロボットRBT、ロボットコントローラ6との接続は、有線接続に限られず、周知の無線接続としてもよい。
【0071】
ロボットシステム1000でばら積みピッキング動作を行うにあたり、予めばら積みピッキング動作を行わせるための設定を含めたティーチングを行うこともできる。具体的には、ワークWKのどの部位を、ハンドHNDがどのような姿勢で把持するのか、把持位置及び姿勢などの登録を行う。このような設定は、ペンダント等のロボット操作具7で行うことができる。また、後述するように、実際のロボットを操作せずに、ビジョン空間上で設定を行うこともできる。
【0072】
表示部3は、ワークWKの三次元形状を仮想的に表現するワークモデルや、ハンドHNDの三次元形状を仮想的に表現する、三次元CADデータで構成されたエンドエフェクタモデルを、仮想的な三次元空間上でそれぞれ三次元状に表示させることもできる。さらにこの表示部3は、ワークモデルの基本方向画像を六面図として表示させることもできる。これにより、ワークモデルの各姿勢を六面図で表示させて把持位置の設定作業を行えるようになり、従来面倒であった把持位置の設定作業を容易に行えるようになる。
【0073】
(画像処理装置300の構成)
図6に示すように、ロボット設定装置100は、画像処理装置300を備えている。画像処理装置300は、センサ部2、操作部4及び表示部3を備えた構成とすることができる。また、画像処理装置300は、マイクロコンピュータ等からなるプロセッサ300Aを備えている。プロセッサ300Aは、ワークモデルを入力するワークモデル入力部301と、ハンドモデルを登録する登録部302とを備えている。また、プロセッサ300Aは、キャリブレーション実行部303と、ロボットRBTの座標を取得する取得部304と、ロボットRBTのフランジFLGに取り付けられたハンドHNDの位置及び姿勢を決定する決定部305と、ハンドHNDの取付位置を算出する算出部306とを備えている。さらに、プロセッサ300Aは、ワークWKの把持位置をサーチするサーチ部307と、ハンドHNDが周囲の物体と干渉するか否かを判定する干渉判定部308と、経路生成部309と、座標情報等をロボットコントローラ6へ出力する出力部310とを備えている。以下、プロセッサ300Aの各部が実行する処理について具体的に説明する。
【0074】
図8は、プロセッサ300Aによる干渉判定の手順の一例を示すフローチャートである。ステップSA1は、干渉判定を実行する環境の設定ステップである。この設定の主要な手順は、
図9に示すワークモデルの登録の手順を示すフローチャートと、
図10に示すハンドモデル及び把持位置の登録の手順を示すフローチャートに示す通りである。ワークモデルの登録と、ハンドモデル及び把持位置の登録とは、どちらを先に行ってもよい。
【0075】
(ワークモデル入力部301の構成)
図6に示すワークモデル入力部301は、ワークモデル及び当該ワークモデル上のハンドHNDによる把持位置情報の入力を受け付ける部分である。具体的には、
図9に示すフローチャートに従ってワークモデル及び把持位置情報を入力し、登録することができる。
【0076】
開始後のステップSB1はワークモデルの入力ステップである。ワークモデルとは、後述するワークWKのサーチ処理を実行する際に使用されるワークWKの形状を表したモデルであり、サーチモデルと呼ぶこともできる。ステップSB1でワークモデルを入力する際には、ワークWKの三次元CADデータ(CADモデル)を読み込んで、画像処理装置300が有する記憶部320(
図6に示す)に一旦記憶させておくことができる。この三次元CADデータは、例えば従来から一般的に用いられているフォーマットのデータを使用することができ、任意のタイミングで読み出して使用することができる。
【0077】
この実施形態では、三次元CADデータのフォーマットとして最もシンプルなSTL形式を用いている。STL形式は、三角形のポリゴン情報(3点の座標とその面の法線ベクトル)の羅列のみで構成されるデータである。あるいはワークモデルとして、三次元情報を有する点群データで構成してもよい。あるいはまた、ワークモデルを、高さ情報を有する画像データ、例えば高さ画像や距離画像で構成してもよい。
【0078】
ステップSB1でワークモデルを入力した後、ステップSB2に進み、ワークモデルの確認及び登録を行う。例えば、入力したワークモデルのCADデータを表示部3に表示させることにより、画像処理装置300の使用者が、所望のワークモデルであるか否かを確認することができる。その結果、所望のワークモデルである場合には、そのワークモデルを画像処理装置200に登録する。確認の結果、所望のワークモデルでない場合には、別の三次元CADデータを選択して入力し、再び確認する。
【0079】
ステップSB1で読み込んだ三次元CADモデルの六面、即ち、三次元CADモデルを「上」、「下」、「左」、「右」、「前」、「後」の各方向から見た高さ画像データをステップSB2で生成する。まず、CADモデルの平面図、底面図、左側面図、右側面図、正面図、背面図となるように、6つの高さ画像データを生成する。この高さ画像データから高さ画像が得られる。「上」はZ軸の正方向(プラス側)から見た高さ画像、「下」はZ軸の負方向(マイナス側)から見た高さ画像、「左」はX軸の負方向から見た高さ画像、「右」はX軸の正方向から見た高さ画像、「前」はY軸の負方向から見た高さ画像、「後」はY軸の正方向から見た高さ画像に対応する。ただ、これらは一例であって、異なる座標系を用いてもよいし、X-Y平面におけるX=Yの直線を軸として、この軸と互いに直交する座標系に基づいて、各軸の正負方向から見た高さ画像を用いてもよい。また、三次元CADデータから、高さ画像を生成する際、必ずしもCADデータの軸に直交した方向(「上」、「下」、「左」、「右」、「前」、「後」)から見た高さ画像である必要はなく、例えばワークモデルの姿勢(視点)を任意に変えて、変えた状態の視点から高さ画像を生成するようにしてもよい。
【0080】
また、CADモデルが三次元CADデータからなるものであるので、三次元CADデータをCADモデルのX、Y、Z座標のそれぞれについてプラス方向及びマイナス方向の各方向から見たときの高さ画像に変換することで、CADモデルの六面について高さ画像を得ることができる。
【0081】
上述のようにして生成した6つの高さ画像の中で同じ見え方になる高さ画像を削除することもできる。見え方の一致/不一致は、ワークの上下(Z軸の正負方向)、前後(Y軸の正負方向)、左右(X軸の正負方向)から見た、計六面の高さ画像を高さ画像データに基づいて生成し、高さ画像が一致しているか否かを確認する。ここでは90°の刻み角度で回転させて一致しているか否かを確認し、他の面と一致する見え方となる面は、サーチモデルの登録対象から除外する。このような除外は、画像処理装置300の使用者が手動で行うこともできるし、画像処理装置300側で自動で行わせてもよいし、あるいはこれらを組み合わせて行うようにしてもよい。
【0082】
具体例について説明すると、例えば、ワークWKが直方体であった場合には、三次元CADモデルを上から見た高さ画像と下から見た高さ画像とが同じになり、この場合には、いずれか一方を削除する。三次元CADモデルを左から見た高さ画像と右から見た高さ画像も同じになるので一方を削除する。また、三次元CADモデルを前から見た高さ画像と後から見た高さ画像も同じになるので一方を削除する。ワークWKが複雑な形状であっても、一方向から見た高さ画像と他方向から見た高さ画像が同じになることがあり、この場合も一方の高さ画像を削除することができる。ワークWKが立方体の場合は6面のうち、5面を削除することができる。
【0083】
同じになる画像の一方を削除した結果、残った高さ画像データを保存する。保存する高さ画像データが三次元CADモデルの上下左右前後のいずれの方向から見た画像であるかを示す情報、即ち方向に関する情報を当該高さ画像データに付与し、この方向に関する情報と高さ画像データとを関連付けて画像処理装置300の記憶部320に保存しておく。これにより、上下左右前後の各面の関係性情報を持った状態で各高さ画像データを保存しておくことができるので、1つのワークモデルを異なる方向から見た複数の高さ画像データを相互に関連付けて画像処理装置300に登録しておくことが可能になる。
【0084】
したがって、高さ画像データを記憶部320から読み出したときに、例えば、三次元CADモデルの6方向から見た高さ画像を関連付けて得ることができる。以上のように、ワークモデルを異なる方向から見た複数の高さ画像データをワークWKのサーチモデルとして登録することが可能になる。ワークWKのサーチモデルは、複数種登録しておくこともできる。尚、面の関係性情報を保存することなく、高さ画像データのみ保存するようにしてもよい。
【0085】
以上の方法は、ワークWKの三次元CADデータが存在している場合の方法であるが、仮にワークWKの三次元CADデータが無い場合には、ワークモデルを異なる方向から見た複数の高さ画像データをサーチモデルとして登録するようにしてもよい。すなわち、登録したい面を上向きにしたワークWKを平面上に置き、三次元計測を行う。この三次元計測は、ロボットシステム1000のセンサ部2を利用して行うことができる。センサ部2により得られた計測データが出力され、計測データに基づいて、ワークWKの登録したい面の高さ画像データを得ることができる。
【0086】
このようにして得られた高さ画像データに基づいて高さ画像を得た後、その高さ画像をワークWKのサーチモデルとして登録する。登録後、サーチに必要な分、登録し終えたか否かを判定する。この判定はユーザが行うことができるが、画像処理装置300に行わせるようにしてもよい。すなわち、ワークWKを上下左右前後の各方向から見た形状が全て異なれば、六面の全てについて高さ画像を取得するのが好ましいが、上述した長方形の場合のように、同じ形状の面がある場合には六面の全てについて行わなくてもよい。サーチに必要な分、登録し終えたら、終了する。
【0087】
(登録部302の構成)
図6に示すように、登録部302は、ロボットRBTのフランジFLGに取り付けられるハンドHNDの形状を示すハンドモデルを登録する部分である。登録部302によるハンドモデルの登録手順は、
図10に示すフローチャートの通りである。開始後のステップSC1は、ロボットRBTのハンドモデルを登録するステップである。ロボットRBTのハンドモデルとは、ハンドHNDの形状を表したモデルである。ロボットRBTのハンドモデルを登録する際には、ハンドHNDのポリゴンデータ(三次元CADデータ)の入力を受け付ける。このステップSC1では、ハンドHNDのポリゴンデータを入力することにより、入力された三次元CADデータで表されるモデルをハンドモデルとして登録する。ハンドHNDの三次元CADデータを入力する際に、当該三次元CADデータの原点位置情報の入力も受け付ける。この原点位置情報の入力は、三次元CADデータに付随するものであるため、ユーザによる入力作業は不要にして、ハンドHNDの三次元CADデータの入力と同時に入力することもできる。
【0088】
ハンドモデルを登録する際、三次元CADデータ以外にも、直方体や円柱などの三次元形状のパーツを組み合わせてハンドモデルを作成し、この作成したハンドモデルを登録するようにしてもよい。また、三次元CADデータには無いケーブルなどを作成して登録することもできる。
【0089】
ステップSC2では、ステップSC1で登録したハンドモデルと、そのハンドモデルが装着されるロボットRBTのフランジFLGとの相対的な位置及び姿勢を定義する。具体的には、ハンドモデルにおける取付面と、ロボットRBTのフランジFLGとが一致するように、両者の位置関係を定義しておく。このとき、フランジFLGの座標を基準としたハンドHNDの位置及び姿勢の入力を受け付けることができる。
【0090】
ステップSC2に続くステップSC3では、ロボットRBTのフランジFLGに装着された状態にあるハンドモデルの先端座標を指定する。この先端座標は、ロボットコントローラ6から取得することも可能であるが、ユーザが設定することも可能である。その後、ステップSC4では、ハンドモデルの登録完了確認を行う。
【0091】
以上のようにしてロボットRBTのハンドモデルを登録した後、ステップSC5に進む。ステップSC5では、ロボットRBTのハンドHNDで把持するワークモデルの面を選択する。ワークモデルの面は、
図9に示すフローチャートで登録した高さ画像で表すことができ、登録されている複数の高さ画像の中から、ロボットRBTのハンドHNDで把持することが可能な面に対応した高さ画像をユーザが選択する。高さ画像の選択にあたっては、高さ画像を表示部3に表示させておき、これら高さ画像の中から使用者が操作部4の操作によって選択することができる。
【0092】
ステップSC5で高さ画像を選択した後、ステップSC6に進み、ステップSC5で選択した面を把持する時のハンドHNDの位置及び姿勢を登録する。例えば、X軸座標、Y軸座標、Z軸座標、X軸周りの回転角度、Y軸周りの回転角度、Z軸周りの回転角度を個別に入力し、入力された値に対応するように、ハンドモデルを移動させ、高さ画像中の所望位置に配置することができる。これにより、ハンドモデルの位置を調整しながら、ハンドモデルでワークモデルのどの部位をどのような姿勢で把持するか、即ち把持位置及び姿勢を設定することが可能になる。把持位置及び姿勢の設定は、数値を入力する以外にも、例えばハンドモデルを操作部4のマウスで直接的に操作することによっても可能である。
【0093】
ここで設定する把持位置は、ロボットRBTにより把持される把持候補位置である。ロボットRBTにより把持される把持候補位置は、予め登録されているワークWKの各サーチモデルに対応付けて複数設定することができる。例えば、あるサーチモデルには、2つの把持候補位置を対応付けて設定し、別のサーチモデルには、4つの把持候補位置を対応付けて設定することができる。設定された把持候補位置は、サーチモデルと対応付けられた状態で記憶部320に記憶させておくことができる。
【0094】
一般に、一のワークWKに対して把持候補位置を複数登録することが多い。これは、把持候補位置を複数登録しておけば、複数の把持解の中から最適な解を選ぶことができるため、仮に得られた把持解候補が、例えばハンドHNDの他の物体との干渉によって最終的な解となり得ない場合、他の把持解候補があれば、把持可能と判定される可能性が高まるからである。このような把持候補位置を複数登録する際、その都度登録を一から行うと、同様の把持候補位置を登録する際に手数が多くなり作業が面倒となる。そこで、既に登録済みの把持候補位置情報をコピーして、この把持候補位置で設定された位置パラメータの一部を変更して、新たな把持候補位置として保存可能とすることで、手間を省いて複数の把持候補位置を容易に登録できるようになる。また、同様に既存の把持候補位置を読み出して、位置パラメータを適宜修正して上書き保存することも可能である。
【0095】
把持候補位置を登録する際、サーチモデルの原点に対して、ワークWKを把持する際のハンドHNDの相対的な位置及び姿勢を登録する。一方、実際のハンドHNDでワークWKを把持する際には、センサ部2でワークWKを撮像した三次元空間(ビジョン空間)の座標から、ロボットコントローラ6がロボットRBTを実際に動作させる際に用いるロボット座標に変換する必要がある。
【0096】
具体的には、ワークモデルの位置及び姿勢は、ビジョン空間における位置(X,Y,Z)と姿勢(Rx,Ry,Rz)で求められる(なお姿勢(Rx,Ry,Rz)はZ-Y-X系オイラー角で表現された姿勢を示している)。また、これを把持するハンドHNDの姿勢についても、同様に画像処理装置300の仮想三次元空間における位置(X,Y,Z)と姿勢(Rx,Ry,Rz)として求められる。このようなビジョン空間における位置及び姿勢に基づいて、ロボットコントローラ6がロボットRBTを動作させるには、これらをロボット空間における位置(X’,Y’,Z’)と姿勢(Rx’,Ry’,Rz’)に変換する必要がある。この表示される座標系で算出された位置及び姿勢を、ロボットコントローラ6がハンドHNDを動作させる座標系の位置及び姿勢に座標変換するための変換式を算出する処理は、キャリブレーションと呼ばれる。このキャリブレーションについては後述する。
【0097】
図10に示すフローチャートのステップSC7では、必要数の把持候補位置を登録できたか否かを判定する。ハンドHNDで把持することが可能な部位が多数あれば、登録すべき把持候補位置の数が多くなるが、これは使用者が判断する事項であるため、ステップSC7の判定は使用者が判定することになる。ステップSC7でNOと判定して必要数の把持候補位置を登録できておらず、登録すべき把持候補位置が他にも残っている場合には、ステップSC5を経てステップSC6に進み、他の把持候補位置を設定し、登録する。一方、ステップSC7でYESと判定して必要数の把持候補位置を登録できている場合には、ステップSC8に進む。
【0098】
ステップSC8では、開始位置と載置位置とを登録する。載置位置は、ロボットハンドHNDによりワークWKが載置される位置であり、例えば
図1に示すステージSTG上に設定することができる。上記開始位置及び載置位置の設定は、座標等を数値で入力する方法によっても可能であるが、それ以外にも、例えばロボットハンドモデルを操作部4のマウス等で直接的に操作することによっても可能である。
【0099】
ステップSC8が完了すると、ステップSC9に進む。ステップSC9では、ワークWKを把持する把持実行位置から載置位置へ移動する間に経由する経由点を登録する。経由点は、1つ登録してもよいし、2つ以上登録することもできる。経由点は、経路上の複数箇所に登録することができ、この場合、経由点1、経由点2、…というように名称を付して記憶部320に記憶させておくことができる。この例では、経由点をユーザが登録する場合について説明するが、これに限らず、画像処理装置300が経由点を自動で算出してユーザに提示するように構成することもでき、この場合はステップSC9が省略されることになる。
【0100】
ステップSC9で登録する経由点は、ロボットハンドHNDがワークWKを把持した後、当該ワークWKを載置位置に載置するまでの間に当該ロボットハンドHNDまたはワークWKが経由する点である。経由点の設定は、座標等を数値で入力する方法によっても可能であるが、それ以外にも、例えばロボットハンドモデルを操作部4のマウス等で直接的に操作することによっても可能である。経由点が設定された場合、ロボットハンドHNDがワークWKを把持して開始位置から載置位置へ搬送する途中で、ロボットハンドHNDの一部またはワークWKの一部、または、ロボットハンドHNDに対して固定的に定められた点が経由点を通過するように、ロボットハンドHNDの動作が設定される。ロボットハンドHNDに対して固定的に定められた点とは、例えばフランジ座標系の原点としてもよい。
【0101】
また、ロボットハンドHNDの待機位置を設定することができるとともに、待機位置にあるロボットハンドHNDが容器BX内のワークWKを把持するまでの間に当該ロボットハンドHNDが経由する往き経路上の経由点を設定することも可能である。ロボットハンドHNDの待機位置及び往き経路上の経由点の設定は、座標等を数値で入力する方法によっても可能であるが、それ以外にも、例えばロボットハンドモデルを操作部4のマウス等で直接的に操作することによっても可能である。
【0102】
尚、経由点はロボット座標(X,Y,Z,Rx,Ry,Rz)で与えることもできるが、アーム部ARMの軸角度(joint angle)で与えることもできる。アーム部ARMの軸角度で与えることにより、干渉判定されるロボットのアーム位置が一意に決定される。
【0103】
プロセッサ300A内で把持位置等のロボット座標から、軸角度を求め、その軸角度をロボットコントローラ6側に伝えることができるようになっている。指定位置は、ユーザインタフェース上でロボット座標または軸角度のいずれかで指定できる。このロボット座標から軸角度を求める仕組みは「逆運動学」と呼ばれており、これは干渉判定と同様に経路生成を構成する部分である。以上の処理を経て、
図10に示すフローを終了する。以上の処理を経ることで、
図8に示すフローチャートのステップSA1が終了する。
【0104】
(キャリブレーションの実行ステップ)
図8に示すフローチャートのステップSA1の後、ステップSA2に進み、
図6に示すキャリブレーション実行部303がキャリブレーションを実行する。上述したように、例えばセンサ部2で検出したワークWKはカメラ座標基準での位置及び姿勢が算出されるが、実際にそれをロボットRBTで把持するときはロボット座標基準での位置及び姿勢が必要になる。カメラ座標での位置姿勢をロボット座標での位置姿勢に変換する情報をキャリブレーションデータと呼ぶことができる。
【0105】
一例として、キャリブレーションデータは2つの座標系間の変換行列として表現される。これを作成するためには、同じ位置姿勢に対するそれぞれの座標基準での位置姿勢の値の組み合わせ列が必要になる。それらを利用して、変換行列を変数として最適化問題を解くことで、2つの座標系間の変換行列を推定できる。
【0106】
上記組み合わせ列の作成方法として、ロボットRBTに検出対象の物体を保持させ、X-Y-Z方向に決まった移動量移動させ、各点でのロボット座標と検出した位置を記録する方法がある。座標変換行列はこの設定範囲内で計算するため、ここで設定される範囲はできるだけ大きくして、ロボットRBTの運用時に検出対象が存在し得る範囲を全てカバーすることが望ましい。計算した範囲外で座標変換を行うと、ずれが大きくなる可能性があるからである。
【0107】
しかし、設定範囲を大きくすると、その設定範囲がロボットRBTの可動範囲外になったり、ロボットRBTが障害物と干渉してしまったり、検出対象がロボットRBTの陰になり、センサ部2で検出できなくなってしまうといった問題が発生することがある。また、そもそも、ロボットRBTとセンサ部2との位置関係がおおまかにでも分かっていないと、キャリブレーションを行う範囲が適切であるか否か、ハンドHNDが障害物と干渉するか否かといったことを判定できない。
【0108】
また、ロボットRBTの可動範囲外や、障害物との干渉については事前チェックも可能であるが、検出対象がロボットRBTの陰になってしまう問題については、ロボットRBTとセンサ部2との位置関係が分かっていないとチェックできない。
【0109】
そこで、本実施形態に係るキャリブレーション実行部303は、第1段階として狭い範囲でキャリブレーションを実行し、これによりロボットRBTとセンサ部2との位置関係を計算しておき、第2段階として、上記第1段階で取得された情報を用いて、上記第1段階で実行した範囲よりも広い範囲でキャリブレーションを実行した時に問題が発生しないかチェックする。一例として、狭い範囲でのキャリブレーションは、例えばユーザが設定した広い範囲でのキャリブレーションを任意の倍率で縮小して、その範囲でキャリブレーションを実行する例を挙げることができる。
【0110】
最初のロボットRBTとセンサ部2との位置関係の計算にはツール中心算出のデータを利用してもよい。ツール中心算出とは、センサ部2での検出点とロボットRBTの現在地を指すツール中心点とのオフセットを求める計算のことである。ツール中心周りに回転させて各点で検出を行うことで、ツール中心点へのオフセットを計算できる。
【0111】
以下、
図11に示すフローチャートに基づいて、本実施形態のキャリブレーションについて詳細に説明する。スタート後のステップSD1では、中心ロボット位置を設定する。この中心ロボット位置は、キャリブレーション動作を開始する際の開始位置になるため、ステップSD1を開始位置設定ステップと呼ぶこともできる。
【0112】
ステップSD1では、キャリブレーション実行部303が
図12に示すユーザインタフェース画面50を生成して表示部3に表示させる。ユーザインタフェース画面50には、ロボット座標を表示する座標表示領域51と、ロボットモデルを表示するロボットモデル表示領域52と、設定用ウインドウ53とが設けられている。座標表示領域51には、キャリブレーションを行う際の各点の座標が表示される。この例では、点0~点4まで表示しているが、表示の切り替えを行うことで、全ての点(後述する例では27点)の座標を確認することができる。
【0113】
ロボットモデル表示領域52には、ピッキング動作をさせるロボットRBTの三次元モデルを表示させることができる。このロボットモデルの元になるデータは、例えば外部からロボットRBTの三次元データを読み込むことで取得できる。
【0114】
設定用ウインドウ53には、開始位置設定ボタン53a、検出ツール設定ボタン53b、ツール中心算出ボタン53c及びキャリブレーション開始ボタン53dが設けられている。さらに、設定用ウインドウ53には、上記ボタン53a~53dのうち、操作されたボタンに対応した処理や動作を説明するためのメッセージや説明図を表示する情報表示領域54も設けられている。
【0115】
図11に示すステップSD1を実行する際には、ユーザが
図12に示す設定用ウインドウ53の開始位置設定ボタン53aを操作する。キャリブレーション実行部303は、開始位置設定ボタン53aが操作されたことを検出すると、情報表示領域54に、開始位置の設定に関する説明を表示するとともに、設定用ウインドウ53に開始位置設定領域55を表示する。
【0116】
開始位置設定領域55では、「ロボット座標系」と「各軸」のうち、ユーザが一方を選択可能になっている。「ロボット座標系」が選択されると、ロボット座標基準での現在のロボットRBT(フランジFLG)の座標(X,Y,Z,Rx,Ry,Rz)を取得し、これを開始位置として登録する。一方、「各軸」が選択されると、ロボットアームARMの各関節部分の角度を取得し、これによって算出されるフランジFLGの座標を開始位置として登録する。六軸ロボットRBTであるため、J1~J6までの6変数が存在する。これら変数を変更することで、開始位置設定を行うことができる。
【0117】
続いて、
図11に示すフローチャートのステップSD2に進み、検出ツールの設定を行う。検出ツールとは、キャリブレーションを実行する際に使用する物であり、単にツールと呼んだり、ワークと呼んだりすることができる。検出ツールはロボットRBTに把持させ、後述するように移動させる物であり、設定された検出ツールをパターンマッチングで検出してキャリブレーションデータを作成することができる。
【0118】
図13に示すように、キャリブレーション実行部303は、検出ツール設定ボタン53bが操作されたことを検出すると、情報表示領域54に、検出ツールの設定に関する説明を表示するとともに、設定用ウインドウ53に検出ツール設定領域56を表示する。検出ツール設定領域56では、検出ツールを追加したり、編集することが可能になっている。
【0119】
続いて、
図11に示すフローチャートのステップSD3に進み、検出ツールの中心を算出するツール中心算出ステップを行う。
図14に示すように、キャリブレーション実行部303は、ツール中心算出ボタン53cが操作されたことを検出すると、情報表示領域54に、ツール中心算出の設定に関する説明を表示するとともに、設定用ウインドウ53にツール中心算出領域57を表示する。ツール中心算出とは、センサ部2による検出点と、ロボットRBTの現在地を指すツール中心点とのオフセットを求める計算のことであり、検出ツールの中心は、パターンマッチングで検出した検出ツールと、ロボットRBTのフランジFLGとのオフセットを求めるために使用できる。例えば、検出ツールをその中心周りに回転させ、各点で検出を行うことで、ツール中心点へのオフセットを計算できる。尚、ツール中心算出の設定の際、検出ツールを上記狭い範囲で実際に動かして仮設定してもよい。
【0120】
続くステップSD4では、移動間隔の設定を行う。移動間隔とは、キャリブレーションの際に移動させる検出ツールの間隔である。まず、
図15に示すように、キャリブレーション実行部303は、キャリブレーション開始ボタン53dが操作されたことを検出すると、情報表示領域54に、移動間隔の入力に関する説明を表示するとともに、設定用ウインドウ53にキャリブレーション実行用領域58を表示する。
【0121】
キャリブレーション実行用領域58には、移動間隔をX方向、Y方向、Z方向で個別表示する移動間隔表示領域58aと、設定ボタン58bと、動作チェックボタン58cとが設けられている。キャリブレーション実行部303は、設定ボタン58bが操作されたことを検出すると、
図16に示す移動間隔設定用ウインドウ59を表示部3に表示させる。
【0122】
移動間隔設定用ウインドウ59には、X方向、Y方向、Z方向の各移動間隔を個別に設定可能な設定領域59aが設けられている。各移動間隔は、ユーザが例えば数値(単位:mm)で入力し、設定できる。移動間隔設定用ウインドウ59には、検出ツールを移動させる位置を示す複数の点と、隣合う2点間の寸法(移動間隔)とを図で表示する図表示領域59bも設けられている。
【0123】
初期点(
図16において1として示されている点)は、センサ部2の中心に設定しておく。初期点と、ユーザによって入力された移動間隔とに基づいて、計測すべき27点(9×3)が決定され、それが
図16の図表示領域59bに表示される。設定された移動間隔は、
図15に示す移動間隔表示領域58aに表示される。
【0124】
その後、
図11に示すフローチャートのステップSD5に進み、動作チェックを行う。動作チェックは、ステップSD3のツール中心算出で決定されたセンサ部2とロボットRBTとのおおよその位置関係に基づいて、ステップSD4で設定された移動間隔で正しくキャリブレーションができるか否かを確認する。
【0125】
この確認の前に、動作制限領域の設定を行う。キャリブレーション実行部303は、
図15に示す動作チェックボタン58cが操作されたことを検出すると、
図17に示すロボット動作チェック用ウインドウ60を表示部3に表示する。動作制限とは、例えばロボットRBTの周りに柵が存在している場合に、ロボットRBTがその柵に接触しないように、ロボットRBTの動作範囲を柵内の領域に制限することである。ロボット動作チェック用ウインドウ60内では、動作制限領域をX方向、Y方向、Z方向で個別に設定可能である。動作制限領域はユーザが設定することで、キャリブレーション実行部303によって受け付けられる。
【0126】
動作制限領域の設定が完了すると、
図17に示すロボット動作チェック用ウインドウ60に設けられているロボット動作チェックボタン60aをユーザが操作する。キャリブレーション実行部303は、ロボット動作チェックボタン60aが操作されたことを検出すると、ステップSD3のツール中心算出で決定されたセンサ部2とロボットRBTとのおおよその位置関係を元に、動作制限領域を考慮して、その範囲内でロボットRBTが他の物体に干渉しないか、検出ツールが影に入らないか、検出ツールがセンサ部2の撮像視野に入っているか等の各チェック項目を確認する。動作制限領域の設定がない場合には、設定された移動間隔から決定された27点について上記チェック項目を確認する。
【0127】
動作チェックが終わると、
図11に示すステップSD6に進み、動作に問題がないか否かを判定する。上記チェック項目の全てに問題が無ければ、ステップSD6でYESと判定されてステップSD7に進む。ステップSD7では、
図18に示すように確認結果表示ウインドウ61を表示させ、当該ウインドウ61内で問題がなかったことをユーザに報知する。また、ロボットモデル表示領域52には、ロボットモデルとともに、点が表示される。ロボットモデル表示領域52には、センサ部2で撮像された三次元点群の情報、例えばワークWKや容器BX等も表示することができる。
【0128】
一方、上記チェック項目のうち、1つでも問題がある場合には、ステップSD6でNOと判定されてステップSD8に進む。ステップSD8では、
図19に示すように確認結果表示ウインドウ61を表示させ、当該ウインドウ61内で問題があったことを具体的に特定してユーザに報知する。この場合も、センサ部2で撮像された三次元点群の情報をロボットモデル表示領域52に表示させることができる。また、問題がある点を、問題がない点とは異なる形態でロボットモデル表示領域52に表示させることができる。この場合、問題がある点を強調して表示させる等の表示形態を採用できる。
【0129】
また、ステップSD9では、問題がある点を回避するように、キャリブレーション実行部303が点の位置座標を自動で計算する。この計算結果は、ユーザが
図19に示すウインドウ61内の「推奨設定を確認する」というボタン61aを操作することでロボットモデル表示領域52に表示され、確認可能である。
【0130】
続いて、
図11に示すフローチャートのステップSD10に進む。すなわち、ユーザが
図15に示す実行ボタン58dを操作するとステップSD10のキャリブレーションが実行され、このキャリブレーションでは、複数の点の位置座標について、ハンドHNDの実際の位置座標と、画像処理装置300に表示されている画像上の位置座標との間の変換式を算出する。座標変換の方法は、特に限定されるものではなく、例えばアフィン変換で変換することができる。
【0131】
【0132】
(式1)に示すように、ハンドHNDの実際の位置座標(x’,y’)と、画像処理装置300に表示されている画像上の位置座標(x、y)とに基づいて、6つの自由度を有する変換式の係数a、b、c、d、e、fを求める。対応する位置座標が6つを超える場合には、最小二乗法を用いれば良い。
【0133】
キャリブレーション実行部303は、
図15に示す実行ボタン58dが操作されたことを検出すると、検出ワークが各点を通過するように、ロボットRBTに対して移動指示及び移動先の位置座標を含む移動命令をロボットコントローラ6へ送信する。ロボットコントローラ6は、移動命令に含まれる位置座標へとハンドHNDを移動させる。
【0134】
キャリブレーション実行部303は、移動命令に応じて移動したハンドHNDの各位置座標である座標値(x’,y’)を、ロボットコントローラ6から取得する。移動したハンドHNDの位置座標と、撮像された検出ツールの画像上での位置座標との位置ずれを調整することができる。
【0135】
なお、キャリブレーション実行部303において取得する座標値(x’,y’)は、画像処理装置300からの移動命令に応じてハンドHNDが移動した各位置において、ロボットコントローラ6から取得した座標値としているが、画像処理装置300において事前に設定されたハンドHNDの移動目標座標をそのまま上記座標値としても良い。
【0136】
キャリブレーション実行部303は、ハンドHNDが移動した各移動先にて検出ツールを撮像するようセンサ部2の動作を制御する。これにより、ロボットコントローラ6から取得した移動先のハンドHNDの位置座標に対応する領域を撮像するよう制御することで、撮像された画像に基づいて検出ツールの実際の位置座標である座標値(x、y)を検出することができる。
【0137】
キャリブレーション実行部303は、各移動先にて撮像された検出ツールの画像に基づいて検出ツールの位置座標である座標値(x、y)を検出し、取得した複数の座標値(x’,y’)と、検出した複数の座標値(x、y)とに基づいて、両座標間の変換規則を算出する。具体的には上記(式1)に座標値を代入して、係数a、b、c、d、e、fを求める。
【0138】
検出ツールの移動順は、特に限定されるものではないが、例えば
図16の図表示領域59bに表示されているような順とすることができる。すなわち、高さが等しい平面内で複数の点を通るように検出ツールを移動させた後、高さが異なる平面内で同様に複数の点を通るように検出ツールを移動させることができる。
【0139】
以上のようにして、
図8に示すフローチャートのステップSA2のキャリブレーション実行ステップが完了する。キャリブレーションデータは記憶部320等に記憶させておくことができる。
【0140】
(ハンドの撮像ステップ)
図8に示すフローチャートのステップSA3では、ロボットRBTのフランジFLGに取り付けられたハンドHNDをセンサ部2により撮像する。例えば
図4に示すように、フランジFLGにハンドHNDが取り付けられている状態で、フランジFLG及びハンドHNDがセンサ部2の撮像視野に入るようにロボットRBTを制御する。具体的には、画像処理装置300は、
図20に示すように、ユーザインタフェース画面70にハンド撮像ウインドウ71を表示させる。ハンド撮像ウインドウ71には、ハンドHNDがセンサ部2の撮像視野に入るようにロボットRBTを動かすことについての説明が表示されている。その後、センサ部2に撮像を実行させると、フランジFLG及びハンドHNDが含まれる画像が取得される。取得された画像は、記憶部320に一旦記憶させておくことができるとともに、ユーザインタフェース画面70に設けられている画像表示領域72に表示させることができる。
【0141】
(撮像時のロボットの座標取得ステップ)
図8に示すフローチャートのステップSA4では、
図6に示す取得部304が、センサ部2によりハンドHNDが撮像された際のロボットRBTの座標を取得する。センサ部2によりハンドHNDが撮像された時点のみ、ロボットRBTの座標を取得してもよいし、センサ部2によりハンドHNDを撮像していない間も継続してロボットRBTの現在位置を取得し続けておき、その位置情報の中から、センサ部2によりハンドHNDが撮像された時点のロボットRBTの座標を取得してもよい。取得したロボットRBTの座標は記憶部320に記憶させておくことができる。
【0142】
(ハンドモデルの読み込みステップ)
図8に示すフローチャートのステップSA5では、まず、
図10に示すフローチャートのステップSC1で登録されたハンドモデルを読み込む。読み込まれたハンドモデルは、ハンドHNDのサーチモデルとして登録される。このステップは、ハンドモデルの登録要求がある場合のみ実行すればよく、例えば前回登録したデータをそのまま使うなどの場合は省略できる。
【0143】
(ハンドの位置及び姿勢決定ステップ)
図8に示すフローチャートのステップSA6では、
図6に示す決定部305がロボットのフランジFLGに取り付けられたハンドHNDの位置及び姿勢を決定する。まず、決定部305が、登録部302で登録されたハンドモデルを読み込むとともに、センサ部2により撮像されたハンドHNDを含む画像とを読み込む。決定部305は、ハンドモデルと、ハンドHNDを含む画像とを読み込んだ後、ハンドモデルと、ハンドHNDを含む画像とをパターンマッチングする。パターンマッチングの手法は、例えば三次元マッチング、三次元サーチ等とも呼ばれている手法である。
【0144】
パターンマッチングを行うことにより、フランジFLGに実際に取り付けられている実物のハンドHNDを含む画像中に、ハンドモデルが存在するか否かを判定でき、画像中に実物のハンドHNDが含まれていれば、そのハンドHNDを検出して当該ハンドHNDの位置及び姿勢を決定できる。
【0145】
(ハンドの取付位置算出ステップ)
図8に示すフローチャートのステップSA7では、
図6に示す算出部306が、取得部304により取得された撮像時におけるロボットRBTの座標と、決定部305により決定されたハンドHNDの位置及び姿勢に基づいて、フランジFLGに対するハンドHNDの取付位置を算出する。このとき、ハンドHNDの位置及び姿勢を決定する変数として、カメラ座標系における6変数(X,Y,Z,Rx,Ry,Rz)を算出することができる。
【0146】
具体的には、まず、カメラ座標系におけるハンドHNDの位置姿勢に関する6変数を、ステップSA2で取得したロボット-カメラのキャリブレーションデータを用いてロボット座標系のハンドHNDの位置及び姿勢に関する6変数に変換する。これにより、撮像時におけるロボットRBTの座標が分かる。
【0147】
撮像時におけるロボットRBTの座標が分かれば、ロボットRBTのフランジFLGが撮像時にどこに存在していたかが分かる。すなわち、フランジFLGの座標をロボットRBTの座標として取得することができる。ロボットRBTの座標から予想されるフランジFLGの原点の位置及び姿勢と、ロボット座標系のハンドHNDの位置及び姿勢との差分を求める。この差分がフランジ座標基準のハンドHNDの位置及び姿勢を示す情報となる。この差分を、フランジFLGに実際に取り付けられているハンドHNDの取付誤差として設定することができる。ハンドHNDの取付誤差は設計値に対する誤差となる。つまり、ハンドHNDがフランジFLGに対して設計値からずれて取り付けられていた場合に、そのずれを例えば具体的な数値等で取得することが可能になる。算出部306は、上記キャリブレーションデータを使用することで、センサ部2により撮像したハンドHNDの位置及び姿勢をフランジ座標系に変換することができる。フランジ座標系での原点位置からフランジFLGに取り付けられたハンドHNDの取付位置の誤差を算出できる。
【0148】
また、決定部305により決定されたハンドHNDの位置及び姿勢からハンドHNDの原点位置を算出することができる。ハンドHNDの原点位置は、例えばハンドHNDの三次元CADデータの原点位置とすることができる。また、ハンドHNDが取り付けられるべき位置は設計値によって規定されており、この位置情報は予め取得可能である。算出したハンドHNDの原点位置と、予め規定されているハンドHNDが取り付けられるべき位置を示すロボットの座標との差分を求め、求めた差分に従い、フランジFLGに取り付けられたハンドHNDの取付位置を算出できる。
【0149】
(誤差の表示)
算出部306は、ハンドHNDの位置及び姿勢変数ごとに上記誤差を算出する。変数は、上述したように6つ(X,Y,Z,Rx,Ry,Rz)あるので、キャリブレーション実行部303は、X,Y,Z,Rx,Ry,Rzのそれぞれの誤差を取得することができる。
【0150】
キャリブレーション実行部303は6つ誤差を取得すると、
図21に示すような誤差表示ウインドウ75をユーザインタフェース画面70に表示させる。誤差表示ウインドウ75には、X,Y,Z,Rx,Ry,Rzのそれぞれの誤差を表示する誤差表示領域75aが設けられている。X,Y,Zの単位はmmであり、Rx,Ry,Rzの単位は度(゜)である。6変数を例えば縦や横に並べて表示することができる。つまり、画像処理装置300は、算出部306が算出した誤差を変数ごとに表示する表示部3を備えているので、ユーザは変数ごとに誤差を把握できる。
【0151】
(別の実施例)
上述した実施例では、ハンドHNDの形状を登録部302で登録しているが、ハンドHNDのロボットRBTに対する位置は登録しなくてもよく、ハンドHNDの位置をセンサ部2が撮像した画像から測定している。この実施例以外の別の実施例も本発明に含まれる。
【0152】
すなわち、別の実施例は、ハンドHNDの形状を登録するとともに、ハンドHNDのロボットRBTに対する位置も登録する例である。ハンドHNDがロボットRBTに設計値通りに取り付けられていれば、どのような位置及び姿勢でハンドHNDが検出されるべきかが、画像処理装置300側で事前に把握できる。その位置及び姿勢と実際に検出された位置及び姿勢の差分を反映させればよい。
【0153】
別の実施例に係る手順を
図22のフローチャートに示す。ステップSE1では、
図8のフローチャートのステップSA1と同様に設定ステップを行う。このとき、ハンドHNDのロボットRBTに対する位置も登録部302で登録する。その後、ステップSE2は、
図8のフローチャートのステップSA2と同じである。
【0154】
ステップSE3は、ハンドモデルを読み込み、ハンドモデルのロボットRBTへの取付位置を仮設定する。続くステップSE4、SE5、SE6、SE7は、
図8のフローチャートのステップSA3、SA4、SA5、SA6と同じである。
【0155】
ステップSE8では、ステップSE5で取得した撮像時のロボットの座標と、ステップSE7で決定されたハンドHNDの位置及び姿勢とに基づいて、ハンドHNDとロボットRBTへの取付位置を算出する。その後、ステップSE9では、現在登録されている取付位置に対する誤差を設定に反映する。
【0156】
(干渉判定)
図23は、干渉判定の手順の一例を示すフローチャートである。干渉判定は、
図8のフローチャートに示す処理、
図22のフローチャートに示す処理が終了した後に行われる。
【0157】
図23のフローチャートのステップSF1では、センサ部2が、上述したようにワークWKの存在する作業空間の三次元計測を行う。三次元計測により、容器BX及びワークWKを含む領域の各部の高さを表す高さ画像データを生成する。高さ画像データから高さ画像を得ることができる。高さ画像は、高さ情報を有する画像であって、距離画像、三次元画像等とも呼ばれる。
【0158】
その後、ステップSF2では、ステップSF1で取得した三次元計測結果である高さ画像と、ワークモデル入力部301により入力されたワークモデルとに基づいて、作業空間内のワークWKをサーチする。これは、
図6に示すサーチ部307が実行する。
【0159】
具体的には、まず、サーチ部307が記憶部320に記憶されているワークモデルを読み込む。サーチ部307は、読み込んだワークモデルを用いて、各ワークモデルの姿勢と位置を特定する三次元サーチを高さ画像に対して行う。すなわち、ワークモデルの各特徴点が、最も一致する状態の位置及び姿勢(X,Y,Z,Rx,Ry,Rz)を、高さ画像の中から探索する。Rx,Ry,Rzは、それぞれX軸に対する回転角、Y軸に対する回転角、Z軸に対する回転角を表しており、このような回転角度の表現方法は種々提案されているところ、ここではZ-Y-X系オイラー角を用いることができる。また一致する位置及び姿勢は、各サーチモデルに対して、1つである必要はなく、一定以上一致する位置及び姿勢を複数検出してもよい。
【0160】
サーチ部307が高さ画像中にワークWKが存在するか否かをサーチした結果、高さ画像中にワークWKを検出できない場合には、
図23に示すステップSF3においてNOと判定されて終了する。
【0161】
一方、ステップSF2の三次元サーチの結果、高さ画像の中にワークWKを検出できた場合には、ステップSF4に進み、干渉判定及び把持解を算出する。このステップSF4では、まず、サーチ部307がワークWKの把持位置をサーチする。把持位置を1つも検出できない場合は、把持解を算出できないということであるため、次のステップSF5でNOと判定されて終了するか、別のワークWKに対して把持解の算出を試みる。
【0162】
ステップSF4で把持位置を検出できた場合は、ロボットRBTによりピッキング動作する際にハンドHNDが周囲の物体と干渉するか否かを、
図6に示す干渉判定部308が判定する。つまり、ロボットRBTにピッキング動作を実行させる前に、ハンドHNDが周囲の物体と干渉するか否かの判定を実行することで、周囲の物体との干渉を回避するハンドHNDの姿勢を決定することができる。周囲の物体は、例えば容器BX、把持対象以外のワークWK、その他、ピッキング動作時に障害となる部材等である。
【0163】
ステップSF4の干渉判定ステップでは、高さ画像の各1点1点のpixelデータが示す三次元点群と、ハンドモデルとが干渉するか否かを判定する。干渉判定の前に、三次元サーチで検出された一のワークWKに対して、このワークWKの位置と、登録してあるワークモデルの把持姿勢とに基づいて、ハンドHNDを配置すべき位置と姿勢を計算する。計算された位置において、ハンドHNDが周囲の物体と干渉しないかどうかを、ハンドモデルを利用して判定する。
【0164】
この干渉判定では、ハンドモデルの断面モデルを利用して三次元点群が断面モデルと干渉しているか否かを判定することができる。例えば、断面モデルから全ての三次元点が離れている場合には、三次元点群、すなわち高さ画像とハンドモデルとが干渉していないと判定し、一方、断面モデルの内側に三次元点が1つでも入っている、または断面モデルの縁部に三次元点が1つでも接している場合には、三次元点群、すなわち高さ画像とハンドモデルとが干渉していると判定する。干渉していない場合は、このワークWKに対して把持解を算出することができたということであり、ステップSF5においてYESと判定されて終了する。一方、三次元点群とハンドモデルとが干渉している場合は、このワークWKに対して把持解を算出することができないということであり、ステップSF5においてNOと判定されて終了するか、同じワークWKの別の把持位置や、別のワークWKに対して把持解の算出を試みる。
【0165】
また、同じ把持位置であっても、ハンドHNDの位置及び姿勢の少なくとも一方を変えることで、周囲の物体との干渉を回避できる場合があるので、干渉すると判定された場合には、干渉判定部308が、ハンドモデルの位置及び姿勢の少なくとも一方を変えて同じ把持位置を把持したときの干渉判定を実行させることができる。これにより、干渉判定部308は、干渉を回避するハンドHNDの位置及び姿勢を決定できる。
【0166】
以上の手順では、いずれかのワークWKで把持解が得られると、その時点で把持候補位置を検討する処理を終了して、得られた把持解に該当する把持候補位置でワークWKを把持するように処理している。ただ、この方法に限らず、例えば把持可能なすべての把持候補位置を1つのワークWKについて求めた上で、いずれの把持候補位置を選択するかをユーザが決定するように構成してもよい。また、ワークWKの置かれた高さ情報に注目し、ワークWKが置かれた高さが高いもの、いいかえると、ばら積みされたワークWK群の内で、より上方に位置するものを把持候補位置として選択することもできる。
【0167】
(経路生成、制御信号出力、ロボット動作の流れ)
図23のフローチャートに示す干渉判定が終了してハンドHNDが周囲の物体と干渉しないと判定された場合には、
図24のフローチャートのステップSG1に進む。ステップSG1では、
図6に示す経路生成部309がハンドHNDの経路生成を行う。
【0168】
具体的には、経路生成部309は、干渉判定部308による判定結果に基づいて、ハンドHNDが周囲の物体との干渉を回避可能な複数の経由点を決定し、当該経由点を結ぶように経路を生成し、その経路は、ロボットハンドHNDの現在位置からアプローチ位置を介して把持位置に至り、把持位置から載置位置に至る経路である。このステップSG1で生成する経路には、経由点を経由しない経路を含むことができる。また、経路生成部309が生成する経路は、各経由点間を最短で結び、さらには、ロボットハンドHNDの現在位置から載置位置に至る経路として最短のものを生成してもよい。
【0169】
ステップSG2では、出力部310が、把持実行位置、載置位置、経由点等の座標をロボットコントローラ6へ出力する。ロボットコントローラ6は、出力部310から出力された把持実行位置、載置位置、経由点等の座標を受け取って制御信号を生成し、生成した制御信号をロボットRBTに出力する。その後、ステップSG3では、ロボットRBTが制御信号に従って動作してワークWKを所定の経路で搬送する。
【0170】
出力部310がロボットコントローラ6へ出力する点は、固定経由点(ユーザが設定する固定的な点、及び、経路生成部23が自動算出するアプローチ位置、把持実行位置、退避位置)と、経路生成の途中経由点(経路生成部309が自動算出する点)とがある。ロボットコントローラ6に出力する経由点についてもアーム部ARMの各軸値での出力と、X、Y、Z、Rx、Ry、Rzでの出力との両方が可能である。
【0171】
仮に、経路生成部309がアプローチ位置や把持位置等を出力するのみだと、ロボットコントローラ6側で容器BXなどの障害物を避けるようプログラムを組む必要があり、これはプログラムの複雑化を招き、ユーザによるプログラムのカスタマイズを難しくしてしまう。これに対し、本例のように、経路生成部309にロボットハンドHNDの動作全体を計画させ、いくつかの途中経由点をロボットコントローラ6へ出力できるようにすることでロボットコントローラ6側のプログラム記述を簡単にすることができるメリットがある。
【0172】
ところが、ロボットRBTの動作経路を実際に生成してみないとロボットハンドHNDが経由すべき経由点の数が定まらないため、ロボットコントローラ6がロボットハンドHNDの把持動作や載置動作を行うべき経由点を特定できない。
【0173】
また、ユーザが固定経由点を増減した場合には、ロボットコントローラ6側で新たにプログラムを組み直さない限り、画像処理装置300が出力する経由点数と、ロボットコントローラ6側のプログラムが期待する経由点数とに相違が生じることになる。従って、ユーザが固定経由点を増減する度にプログラムを組み直す手間が生じる。
【0174】
さらに、固定経由点は、「把持動作をすべき点」、「載置動作をすべき点」など、それぞれ固有の属性を有している。例えば、画像処理装置300側で経由点を変更した場合、ロボットコントローラ6側がそれに追従していないと、期待していないところで把持動作が行われたりするなどの問題が生じるおそれがあり、このこともプログラムの作成を難しいものにしていた。
【0175】
このような問題に対し、本例では、経路生成部309が、センサ部2による測定結果と、把持情報とに基づいて、作業空間に配置されたワークWKのロボットハンドHNDによる把持位置を決定するだけでなく、決定した把持位置を把持するためのロボットハンドHNDのアプローチ位置、把持位置及び把持後の退避位置のうち、任意の1つの属性を有する固定経由点の座標も決定するように構成されている。そして、出力部310は、経路生成部309が決定した固定経由点の座標、及び固定経由点の属性を示す属性情報を含む情報をロボットRBTに接続されたロボットコントローラ6に出力する。
【0176】
また、出力部310は、特定箇所でのトリガの実行可否のフラグ、設定経路区間数、プログラムのループ挙動制御フラグ(点Aから始まる経路を2サイクル目からは別の点Bから始めるといった制御)、設定区間の属性(例えば把持区間)、各区間のロボット動作速度、設定した通常経路とは違う経路が選択されているかどうか、最適トリガ位置を示すパラメータ、各区間の経由点が何点あるか、といった各種情報をロボットコントローラ6に出力することもできる。
【0177】
尚、画像処理装置300にはロボットRBTの機種が入力可能である。ロボットRBTの機種が入力されると、入力されたロボットRBTを制御するロボットコントローラ6との接続が可能になるとともに、入力されたロボットRBTの各種データ(アーム部ARMの可動範囲等)も自動的に読み込むことができる。また、通信形式をロボットRBTのメーカーに応じた形式に自動的に変更することができる。すなわち、例えばロボットRBTの主要なメーカーが製造する主要なロボットRBTの情報、通信形式を予め記憶部320等に記憶させておき、ユーザの入力操作によってそれら情報を読み出して利用することができるようになっているので、設定時にロボットRBTの情報等を個別に入力せずに済む。
【0178】
(経路生成時におけるユーザ設定部分の詳細)
図25は、経路設定用ユーザインタフェース80の一例を示す図である。経路設定用ユーザインタフェース80は、複数の経由点の個別の編集が可能な編集画面であり、
図6に示す編集生成部312により生成されて、表示部3に表示される。経路設定用ユーザインタフェース80には、選択されたロボットRBTを示す三次元画像が表示されるロボット表示領域80aと、各種設定操作の選択を行う選択領域80bと、ロボットハンドHNDの移動順を示す順序表示領域80cとが設けられている。順序表示領域80cには、箱(容器)上空位置、アプローチ位置、把持実行位置、退避位置、プレース位置、撮像待機位置等の固定経由点の他、経路生成部309が自動算出した途中経由点がその名称とともに表示される。名称は、例えば「アプローチ位置」、「退避位置」、「把持位置」、「指定位置」等のように、ユーザにとって意味の分かり易い名称とすることができる。順序表示領域80cに表示されている経由点は、ロボット表示領域80aにおいてロボットRBTとの相対的な位置関係を把握可能な状態で表示される。
【0179】
順序表示領域80cは、固定経由点が複数決定された場合に複数の固定経由点を表示するとともに、それら固定経由点の経由順序を示すことが可能に構成されている。すなわち、順序表示領域80cには、ロボットハンドHNDが動作を開始する位置である「撮像待機位置」が最も上に位置付けられており、その下に経由順に並ぶように、複数の経由点が羅列された状態で表示されるようになっている。固定経由点及び途中経由点(以下、これらをまとめて経由点ともいう)の表示の形態は図示する形態に限られるものではなく、例えば左右方向に順に並ぶ形態であってもよい。また、固定経由点間を補完する曲線または直線は、途中経由点の集合であることから、途中経由点と同義である。
【0180】
順序表示領域80cには、経由点を追加する際に操作する追加ボタン80d及び挿入ボタン80eが設けられている。また、経由点を編集する際に操作する編集ボタン80fと、動作速度を設定する際に操作する動作速度設定ボタン80gも順序表示領域80cに設けられている。ユーザが追加ボタン80dまたは挿入ボタン80eを操作すると、経由点を追加または所望の位置に挿入することができる。経由点を追加すると、
図26に示すように、経路生成部309が、経由点の属性情報を入力するための属性情報入力ウインドウ81を生成し、順序表示領域80cに重畳表示させる。この属性情報入力ウインドウ81により、複数の固定経由点の個別の編集が可能になっている。尚、不要な固定経由点を削除することもできる。
【0181】
属性情報は、ロボットハンドHNDのアプローチ位置、把持実行位置、把持後の退避位置、プレース位置、相対位置等である。属性情報入力ウインドウ81には、それら属性情報のうちから任意の1つを選択可能な形態で表示されている。つまり、1つの固定経由点には1つの属性情報を関連付けることができるようになっている。経由点の属性情報を入力するための入力部は、属性情報入力ウインドウ81に対して入力操作を行うことが可能な操作部4で構成することができる。
【0182】
属性情報入力ウインドウ81のOKボタン81aが押されると、選択内容が反映され、固定経由点と属性情報とが関連付けられた状態で記憶部320に記憶される一方、キャンセルボタン81bが押されると、選択内容は破棄される。OKボタン81aまたはキャンセルボタン81bが押されると、属性情報入力ウインドウ81が閉じられる。
【0183】
図25に示す編集ボタン80fが押されると、経路生成部309が、
図27に示す位置設定用ウインドウ82を生成し、経路設定用ユーザインタフェース80に重畳表示させる。位置設定用ウインドウ82には、編集対象の固定経由点の名称を表示する名称表示領域82aと、固定経由点の位置や固定経由点におけるロボットハンドHNDの姿勢を指定する位置姿勢指定領域82bとが設けられている。名称表示領域82aに表示した名称を変更することができる。また、位置姿勢指定領域82bでは、位置や姿勢を直交座標で指定するか、各軸角度で指定するかを選択できるとともに、撮像待機位置も指定することができるようになっている。撮像待機位置とは、センサ部2でワークWKを撮像する際にセンサ部2の視野範囲に入らない所までロボットハンドHNDを退避させることが可能な位置である。
【0184】
位置設定用ウインドウ82の次へボタン82cが操作されると、経路生成部309が、
図28に示す動作/干渉判定設定用ウインドウ83を生成し、経路設定用ユーザインタフェース80に重畳表示させる。動作/干渉判定設定用ウインドウ83には、動作設定領域83aと、干渉判定設定領域83bとが設けられている。動作設定領域83aでは、経由点を経由する経路を生成するか、しないかを選択することができる。
【0185】
経路生成しない場合は、各軸補間動作で移動させるか、直線補間動作で移動させるかを選択することができる。各軸補間動作は軸角度空間では直線移動であるが、実三次元空間では曲線を描いた起動のことである。直線補間動作はその逆である。この実施形態では各軸の角度ですべての座標を内部管理しているため、直線補間移動は厳密には小さい区間の各軸補間動作の組で実現される。この場合は十分直線とみなせるだけの複数の経路点を生成する(生成した経路点間は各軸補間移動)。これは設定時に決定されるものの、経路生成ありの場合と同様にユーザが明示的に設定しない経由点ができることになる。なお、経路生成しない場合も干渉判定は実施されるが、干渉をさけるような経路が生成できないため、この経路で干渉していると全体として経路生成が不可となる。例えば、経路を生成する場合には、経路生成部309が経由点を経由する経路を自動生成してロボット表示領域80aに表示させることができる。経路を自動生成すると、途中経由点が自動生成される。
【0186】
干渉判定設定領域83bでは、干渉判定に用いるマージン情報を数値(mm)で入力することができるようになっている。ロボットハンドHNDと障害物との距離が入力された数値未満になると、干渉すると判定する。
【0187】
図29は、経路生成部309、ロボットコントローラ6及びロボットRBTの処理シーケンス図である。処理シーケンス図中、S100では、ロボットコントローラ6が経路生成部309に対して経路生成結果を要求する。この要求を受けた経路生成部309は経路生成を行うとともに、固定経由点の数、固定経由点間の経由点数、固定経由点の属性、経由点の座標、特殊退避の有無等の情報を、出力部310によりロボットコントローラ6へ出力させる。
【0188】
ここで、固定経由点数は動的に変えることができる。例えば、
図25に示す経路設定用ユーザインタフェース80上で固定経由点が増加すれば、ロボットコントローラ6に送信される固定経由点数が増加し、経路設定用ユーザインタフェース80上で固定経由点が減少すれば、ロボットコントローラ6に送信される固定経由点数も減少する。この実施形態では、固定経由点毎の属性情報を出力するようにしているが、これの代替例として、各属性情報に対応する固定経由点のインデックスを出力することもできる。
【0189】
図29におけるS101は、固定経由点分、繰り返される処理である。この処理では、まず、S102においてロボットコントローラ6が所望の固定経由点を特定する。その後、S103においてロボットRBTに対して経由点への移動命令を出す。S104では、現在の固定経由点に関連付けられた属性情報に基づいて属性を判断する。S105では、S104で判断した属性に応じたアクション実行ファイルを呼び出す。アクション実行ファイルとは、例えば把持、プレース等である。その後、S106ではロボットRBTに対してアクション発行する。その後、S102において別の固定経由点を特定する。S102~S106が固定経由点分、繰り返されることになり、これによりワークWKを搬送することができる。
【0190】
(ロボットコントローラ擬似プログラム)
次に、ロボットコントローラ擬似プログラムについて説明する。ロボットコントローラ擬似プログラムは、固定経由点の属性情報を画像処理装置300において当該固定経由点と関連付けて登録するとともに出力し、ロボットコントローラ6側で属性情報を処理する方法(第1の方法)と、画像処理装置300側で固定経由点の属性情報を処理してロボットRBTへの命令に変換し、ロボットコントローラ6側では受け取った命令を逐次実行する方法(第2の方法)とがある。以下、第1の方法と第2の方法の具体例を説明する。
【0191】
(第1の方法の具体例)
まず、固定経由点の属性情報をユーザインタフェース上で固定経由点と関連付けて登録できる場合についてのメインプログラムの一例を
図30Aに示す。本例では、センサ部2に対して測定を実行させ、測定結果が存在しなければプログラムを終了する一方、測定結果が存在すれば、その後の処理が実行される。例えば、経路生成結果を受け取り、固定経由点、途中経由点までロボットハンドHNDを移動させ、現在の固定経由点の属性を判断し、その属性に応じたアクションを発行する。ここで
図30Bに示すように、別プログラムとしてのアクションプログラムを呼び出して実行する。
【0192】
別プログラムの例としては、ロボットハンドHNDにワークWKを把持させるプログラムや、ワークWKを載置するプログラム、また、センサ部2に作業空間を撮像させるプログラムなどが挙げられる。例えば、ユーザは予め、ワークWKを把持させるプログラムや、ワークWKを載置するプログラム、センサ部2に作業空間を撮像させるトリガ発行プログラムなどを作成しておき、ロボットコントローラ6は経由点に付与された属性情報を判断し、その属性情報に応じたプログラムを実行してもよい。このような構成により、画像処理装置300からワークWKの把持タイミングやワークWKの載置タイミング、センサ部2のトリガ発行タイミングなどを設定することが可能であってもよい。
【0193】
一方、属性情報をユーザインタフェース上で関連付けて登録できない場合について説明する。
図25の順序表示領域80cに示す順序で経由点が設定されている場合には、
図31に一例を示すようにメインプログラムが生成される。
図31に示すメインプログラムの固定経由点1~5は、
図25の順序表示領域80cにおける「アプローチ位置」、「把持位置」、「退避位置」、2つの「指定位置」にそれぞれ対応しており、各経由点の属性情報に基づいてアクションが発行される。
【0194】
図32に示すように、固定経由点(指定位置)をアプローチ位置の前に追加することができ、この場合にメインプログラムがどのように変わるかを説明する。
図32では、順序表示領域80cに黒塗りで示す「指定位置」が追加された形態を示している。「指定位置」の追加時には、ユーザが、
図26に示す属性情報入力ウインドウ81により属性情報を入力しているので、追加された「指定位置」には属性情報が関連付けられている。この場合、メインプログラムは
図33に示すように第11行に記載されていた「HAND OPEN」を消し、第16行に「HAND OPEN」を書き直す。そして、第33行で追加された経由点分処理を増やす。尚、把持位置では「HAND CLOSE」である。
【0195】
以上のようにして、画像処理装置300において経由点と属性情報を関連付けて登録するとともに出力し、ロボットコントローラ6側で経由点に関連付けられた属性情報を解釈して処理をすることができる。この例においては、経由点とそれに関連付けられた属性情報という2つの配列を持つことによってロボットプログラムの簡易化を実現することができる。この場合のデータの持ち方の一例を
図34に示す。
【0196】
(第2の方法の具体例)
次に、画像処理装置300側で固定経由点の属性情報を処理して命令に変換し、ロボットコントローラ6側ではその命令を逐次実行する第2の方法について説明する。この場合においては、画像処理装置300は命令情報と経由点の位置情報をロボットコントローラ6に送信するので、結果としてロボットコントローラ6は
図35に示すようなデータ配列を持つこととなる。
図35中、「経由点」は、当該経由点をなぞることを要求し、また「ハンド」はロボットハンドHNDの操作を行うことを要求する。
【0197】
ロボットコントローラ6では、
図35に示す命令配列を参照しながら次に何をするべきか決めることができる。この場合のメインプログラムを
図36に示しており、第11行でロボットRBTにMove命令を発行した後、第13行でロボットハンドHNDにハンドアクションを発行している。また、
図37に示すように、命令配列の中に経由点データが入っていてもよい。
【0198】
(センサ部の撮像タイミング)
図6に示すように、プロセッサ300Aは、撮像タイミング設定部310を備えている。撮像タイミング設定部310は、センサ部2に撮像させるトリガ(撮像トリガ)の発行タイミングを決定し、決定したタイミングで撮像が実行されるように、出力部310が撮像トリガの発行タイミングをロボットコントローラ6に出力する。すなわち、撮像タイミング設定部310は、経路生成部309により生成された移動経路の途中でハンドHNDがセンサ部2の撮像視野外に移動するタイミングに基づいて、センサ部2に次に撮像させるトリガの発行タイミングを決定する。ハンドHNDの移動経路は、サイクルごとにことなっているので、センサ部2の撮像タイミングはサイクルごとに異なることになる。つまり、撮像タイミング設定部310は、ピッキング動作のサイクルごとにセンサ部2の撮像タイミングを動的に変化させるように構成されている。経路生成部309により生成される経路が最短経路であってもよく、この場合、プロセッサ300Aによるトリガの発行タイミングの決定が容易になる。
【0199】
以下に述べるようにすることで、最適な撮像トリガ位置を計算することができ、しかも、計算した最適な撮像トリガ位置をロボットコントローラ6に送信して画一的なロボットプログラムで、変化する撮像トリガ位置に追従して最適なタイミングで撮像処理を実行することができる。
【0200】
(最適な撮像トリガ位置の計算)
まず、最適な撮像トリガ位置の計算について説明する。最適な撮像トリガ位置の計算にあたっては、干渉判定アルゴリズムを用いて、ロボットRBTが撮像対象に被らなくなる最速のタイミングを自動計算し、得られたタイミングでのロボットRBTの位置を撮像トリガ発行位置とする。以下、
図38に示すフローチャートに従って、最適な撮像トリガ位置の計算手法の一例を具体的に説明する。
【0201】
開始後、ステップSH1では、平面視でワークWKが積み上げられる領域をユーザが指定する。この実施形態では、
図1に示すように容器BX内にワークWKが積み上げられているので、容器BX(箱ともいう)内が、ワークWKが積み上げられる領域に相当する。ステップSH1では、
図6に示す撮像タイミング設定部311が、
図39に示す領域指定用ユーザインタフェース85を生成して表示部3に表示させる。
【0202】
領域指定用ユーザインタフェース85には、センサ部2により撮像された容器BXを含む画像を表示する画像表示領域86が設けられている。この画像表示領域86には、各種画像フィルターによって処理された処理後の画像を表示することができる。ユーザは、画像表示領域86に表示された画像を見ることで容器BXの形状を把握でき、ワークWKが存在している場合にはワークWKも把握できる。さらに、領域指定用ユーザインタフェース85には、上記領域の指定方法をユーザに選択させるための選択ウインドウ87が表示される。
【0203】
上記領域の指定方法としては、例えば、容器BXの4辺を指定する方法と、容器BXの位置とサイズを数値で指定する方法とがあり、これら2つの方法の説明文や説明図が選択ウインドウ87に表示される。上記2つの方法以外の方法で上記領域を指定してもよく、その場合は選択肢を増やせばよい。選択ウインドウ87には、上記2つの方法のうち、一方をユーザが選択するためのボタン等が設けられている。
【0204】
撮像タイミング設定部311は、容器BXの4辺を指定する方法が選択されたことを検出すると、
図40に示すように、容器BXの4辺を指定する4辺指定用ウインドウ88を生成して領域指定用ユーザインタフェース85に表示させる。
【0205】
4辺指定用ウインドウ88は、平面視における容器BXの4辺をそれぞれユーザに指定させるためのウインドウである。この4辺指定用ウインドウ88には、容器BXの第1辺(
図40の上辺に相当)の2点を指定させる指示と、容器BXの第2辺(
図40の右辺に相当)の2点を指定させる指示と、容器BXの第3辺(
図40の下辺に相当)の2点を指定させる指示と、容器BXの第4辺(
図40の左辺に相当)の2点を指定させる指示とが表示されている。ユーザがその指示通りに4辺を指定すると、撮像タイミング設定部311は、4本の直線1~4を画像表示領域86に描画する。4本の直線1~4で形成される矩形枠2000(
図42に示す)で囲まれた領域を、ワークWKが積み上げられる領域として特定する。つまり、撮像タイミング設定部311は、平面視でワークWKが積み上げられる領域を囲む枠2000の入力を受け付ける。上記指定の際には、ユーザによるマウスのクリック操作で指定させればよい。
【0206】
ワークWKが積み上げられる領域の入力方法は、上述した方法に限られるものではなく、例えば、容器BXの4つの頂点をユーザに指定させる方法、固定値で面を構成する頂点の座標を持っておく方法、周知のサーチアルゴリズムを利用して容器BXの位置を特定し、その結果に基づいて容器BXの上面の4つの頂点の座標を特定する方法等を挙げることができる。4つの頂点が特定されれば、それら4つの頂点を持つ矩形枠2000が定まるので、その矩形枠2000内の領域をワークWKが積み上げられる領域として特定できる。
【0207】
平面視でワークWKが積み上げられる領域を指定が終わると、容器BXの深さの指定を受け付ける。撮像タイミング設定部311は、
図41に示す深さ指定用ウインドウ89を生成して領域指定用ユーザインタフェース85に表示させる。また、画像表示領域86には、容器BXを斜め上方から見たイメージ画像を表示させる。深さ指定用ウインドウ89には、容器BXの深さを数値入力可能な数値入力領域89aと、再指定ボタン89bとが設けられている。撮像タイミング設定部311は、再指定ボタン89bが押されたことを検出すると、画像表示領域86上で容器BXの底面位置の指定を受け付ける。この指定もマウスのクリック操作等により可能である。容器BXの底面位置が指定されると、容器BXの上面位置との差を演算することで、容器BXの深さを取得できる。
【0208】
その後、
図38に示すフローチャートのステップSH2に進む。ステップSH2では、ハンドHNDの経路内で、最適トリガ計算を行う際の起点の指定を受け付ける。例えば、
図42に破線で示すようにハンドHNDの経路が生成されていたと仮定する。この経路内には、撮像待機位置Pw、容器上空位置Pu、把持実行位置Pg、載置位置Pp、撮像待機位置Pwという順で座標を特定することができる。ユーザが把持実行位置Pgを指定すると、その位置の座標が起点の座標として登録される。撮像タイミング設定部311は、起点として指定された把持実行位置Pgへの移行の経路で、ロボットRBTが撮像対象物(例えばワークWKや容器BX)に被らなくなる最速のタイミングを計算し、そのタイミングを最適トリガタイミングとする。ロボットRBTが撮像対象物に被らなくなる最速のタイミングを決定するのが目的なので、通常、ロボットRBTが撮像対象物に被っている点を起点として指定する。
【0209】
起点の指定はユーザが行うことができる。
図43を用いて、起点の指定について具体的に説明する。
図43の順序表示領域80cは、設定されたハンドHNDの経路を表す。順序表示領域80cには、撮像待機位置、箱上空位置、アプローチ位置、把持位置、退避位置、箱上空位置、プレース位置が経由点として指定されている。プロセッサ300Aは、これらの複数の経由点を順に辿るように経路を生成する。これらの経由点は、例えば順序表示領域80cに表示される追加ボタンや挿入ボタン、削除ボタンをクリックすることで新たに経由点を追加することや、すでに設定された経由点を削除するといった編集が可能であってもよい。
【0210】
プロセッサ300Aは、順序表示領域80cで設定された複数の経由点から任意の経由点の選択を受け付ける。例えば経由点としてプレース位置の選択を受け付けた場合、プレース位置に関する詳細設定ウインドウ90を順序表示領域80cに重畳表示させることができる。この詳細設定ウインドウ90は、順序表示領域80cで設定された複数の経由点それぞれに対して表示させることが可能であってもよい。順序表示領域80cに重畳表示された詳細設定ウインドウ90では、動作設定や干渉判定設定、トリガ設定を受け付ける。動作設定では、経路を生成するか否かを設定することができる。「経路を生成する」が選択された場合、箱上空位置からプレース位置までの間にハンドHNDが経由すべき複数の分割経由点がプロセッサ300Aにより生成される。プロセッサ300Aにより生成される経路はロボットRBTやハンドHNDが周囲の物体と干渉せず、かつ、順序表示領域80cに一覧表示された複数の経由点間をより移動距離が短くなるように生成されてもよく、また、プロセッサ300Aが複数の移動経路候補を生成し、複数の移動経路候補の中から最短経路となる経路が移動経路として設定されてもよい。なお、生成される経路は、箱上空位置からプレース位置までの間に限られず、撮像待機位置から複数の経由点を経由し、再び撮像待機位置に戻ってくるまでの経路を生成してもよい。また、順序表示領域80cで選択された区間に対応する範囲で経路が生成されてもよい。干渉判定設定では、ロボットRBTやハンドHNDが周囲の物体と干渉するか否かを判定する際のマージンの設定を受け付ける。また、トリガ設定にはこの区間で撮像するか否かを選択する選択領域90aが設けられている。「この区間で撮像する」を選択すると、
図43の右に示すように、順序表示領域80cに目印90bが表示される。
【0211】
また、「この区間で撮像する」が選択された場合、さらに、「自動設定位置で撮像する」と「区間の終点で撮像する」とが選択できてもよい。「自動設定位置で撮像する」が選択された場合、例えばロボットRBTが撮像対象物に被らなくなる最速のタイミングでトリガを発行したり、ロボットRBTと撮像対象物とが被らなくなった際の経由点または分割経由点にトリガ発行タイミングという属性を付与したりしてもよい。「区間の終点で撮像する」が選択された場合、例えば、ウインドウ90と紐づいた区間の終点においてトリガを発行したり、ウインドウ90と紐づいた区間の終点に対応する経由点または分割経由点にトリガ発行タイミングという属性を付与したりしてもよい。
図43では、一覧表示された複数の経由点のうち、区間5のプレース位置が選択されている状態であり、区間5がウインドウ90と紐づいた区間である。また区間5の区間の終点とは、プレース位置であってもよい。
【0212】
また、経由点または分割経由点にトリガ発行タイミングという属性を付与した場合、ロボットコントローラ6は、プロセッサ300Aから受け取った経由点および複数の分割経由点に付与された属性情報を判断する。その属性情報に応じたプログラムを予め作成しておくとともに、属性情報に応じたプログラムを実行することで、ロボットコントローラ6のプログラムを編集することなくピッキング動作ごとに変化しうるトリガ発行タイミングに動的に追従することができるように構成されていてもよい。
【0213】
起点の指定は自動で行うこともできる。例えば、把持実行位置PgではロボットRBTが容器BXに被ることが確定しているので、その位置を起点として自動で指定してもよい。
【0214】
次いで、
図38のフローチャートのステップSH3に進む。ステップSH3では、撮像タイミング設定部311が仮想の視線障害物を設定する。この実施形態では、仮想の視線障害物として、
図42に示すように仮想の立体図形3000を設定する。仮想の立体図形3000は、センサ部2の撮像視野の縁を外形状とする図形である。この立体図形3000の底面の位置は、上記枠2000の位置と一致している。また、立体図形3000の底面の形状は、上記枠2000の形状と一致している。立体図形3000は、上記枠2000からセンサ部2の受光面に向かって延びる形状である。具体的には、枠2000の4つの頂点からそれぞれセンサ部2の受光面の中心まで延びる仮想の4本の直線と、上記枠2000を形成する4本の直線とで構成される四角錐が上記立体図形3000である。立体図形3000の形状は、特に限定されるものではなく、容器BXの形状等に応じて異なる形状になることもある。
【0215】
その後、
図38に示すフローチャートのステップSH4に進む。ステップSH4では、ステップSH2で指定した起点から経路を小刻みに分割する。
図42に示す形態では、経由点である把持実行位置Pgから次の経由点である載置位置Ppまでの間隔を分割する分割経由点Pdを複数設定する。把持実行位置Pgから載置位置Ppまでの間の分割経由点Pdは1つであってよいが、多い方が干渉判定の精度が向上するので好ましい。
【0216】
分割経由点Pdを設定した後、
図38に示すフローチャートのステップSH5に進む。ステップSH5では、撮像タイミング設定部311は、干渉判定アルゴリズムを利用して経路上のハンドHNDが上記立体図形3000と非干渉となるタイミングを検出する。具体的には、干渉判定の際には、ステップSH4で設定した分割経由点Pdを使用して、ハンドHNDが立体図形3000と干渉するか否かを判定する。各分割経由点Pdが上記立体図形3000内に位置する場合、及び上記立体図形3000の外面に接している場合には、ハンドHNDが立体図形3000と干渉していると判定し、それら以外の場合に干渉していないと判定する。複数の分割経由点Pdのうち、最も把持実行位置Pgに近い点から順に干渉判定を行う。その結果、上記立体図形3000に干渉しない分割経由点Ptが見つかったとする。
【0217】
図38に示すフローチャートのステップSH6では、上記立体図形3000に干渉しない分割経由点Ptが見つかると、ハンドHNDがその点Ptに位置する時に、立体図形3000と非干渉となるタイミングであるとするとともに、ハンドHNDがセンサ部2の撮像視野外に移動するタイミングであると判定する。
図42で最適トリガ位置を点Ptと表記しているように、干渉判定を利用することで最適トリガ位置を精度良く決定することができる。
【0218】
最適トリガ位置を決定した後、その情報を出力部310がロボットコントローラ6に出力する。このとき、例えば、出力部310から経路情報を以下の例に示すように「連続する複数の経由点」として送信しているものとする。
Pw=[J1,J2,J3,J4,J5,J6]
Pu=[J1,J2,J3,J4,J5,J6]
・
・
Pp=[J1,J2,J3,J4,J5,J6]
この経由点情報とは別に、トリガ経由点が何番目の経由点か、という情報を送信しておくことができる。ロボットプログラム側では、経路をなぞるために経由点を前から順になぞるようなプログラムが書かれているものとすると、その処理に「今移動した経由点の順番=トリガ経由点の番号かどうか」を判定するプログラムを追加し、条件を満たすならばトリガを発行する、といったプログラムを以下のように組んでおけばよい。
【0219】
疑似コード:
For i=0 To n-1
Move 経由点[i]
If i = t
トリガ発行
Endif
Endfor
t:送信されてきたトリガタイミング情報であり、今回であれば、トリガ経由点が前から何番目かを示す整数が入っていると想定する。
n:移動しなければならない経由点の数であり、これも通常外部から送信される。
経由点i:移動しなければならないi番目の経由点の位置情報であり、通常外部から送信される。
【0220】
ロボットRBTが撮像対象物に被らなくなる最速のタイミングを決定する際に、干渉判定以外の手法を用いてもよい。例えば、容器BXの4辺からそれぞれ光を放射し、それが遮られる場合には、ロボットRBTが撮像対象物に被っていると判定し、遮られない場合にはロボットRBTが撮像対象物に被っていないと判定することができる。このような手法は、レイトレーシングと呼ぶことができる。
【0221】
(実施形態の作用効果)
以上説明したように、この実施形態によれば、始めに、センサ部2が撮像トリガ命令に従って作業空間を撮像すると、ワークWKが含まれた撮像データが当該センサ部2からプロセッサ300Aに出力される。プロセッサ300Aでは、センサ部2から出力された撮像データに基づいて、把持対象となるワークWKを決定するとともに、把持対象のワークWKから所定の載置位置までのハンドHNDの移動経路を生成する。この移動経路に従ってハンドHNDが移動することで、1サイクルのピッキング動作が完了する。
【0222】
ハンドHNDは移動経路の途中でセンサ部2の撮像視野外まで移動する。この撮像視野外まで移動するタイミングを撮像タイミング設定部311が判定する。プロセッサ300Aは、ハンドHNDが撮像視野外に移動するタイミングに基づいて、センサ部2に次に撮像させるトリガの発行タイミングを決定する。センサ部2は、決定された発行タイミングで発行されたトリガ命令に従って作業空間を撮像するので、ハンドHNDがワークWKに被ってしまうことはなく、撮像視野内のワークWKを撮像できる。
【0223】
次のサイクルでは、ワークWKの数が減ったことで作業空間のワークWKの状態が前のサイクルとは異なっている。従って、ハンドHNDの移動経路も前のサイクルとは異なるので、ハンドHNDがセンサ部2の撮像視野外に移動するタイミングも前のサイクルとは異なる。この実施形態では、ピッキング動作のサイクルごとにセンサ部2の撮像タイミングを動的に変化させて最適なタイミングでトリガを自動的に発行できる。これにより、ユーザがトリガ位置調整を行う必要が無くなり、利便性が向上する。
【0224】
上述の実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。さらに、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。
【産業上の利用可能性】
【0225】
以上説明したように、本発明に係る画像処理装置は、例えばピッキング動作を行うロボットの制御に利用することができる。
【符号の説明】
【0226】
2 センサ部(撮像部)
300 画像処理装置
300A プロセッサ
312 編集生成部
HND ハンド
RBT ロボット
WK ワーク