コンベヤートラッキング動作 (ビジョントラッキング)
次に、ビジョンを利用したコンベヤートラッキング動作を作成してみましょう。
ビジョンで検出されたワーク (パーツ)を、ロボットが Pick & Place で、コンベヤー上からテーブルに移動させます。
手順概要
- 仮想コントローラーを作成して、ロボットを設定する
- プロジェクトを作成する
- ワーク (パーツ)に相当するオブジェクトを追加する
- テーブルに相当するオブジェクトを追加・設定する
- コンベヤーオブジェクトを追加・設定する
- コンベヤーオブジェクトの供給設定・確認を実施する
- 仮想カメラを追加・設定する
- コンベヤートラッキングの設定を追加する
- ビジョンキャリブレーションを実施する
- ビジョンシーケンスを作成する
- コンベヤーキャリブレーションを実施・設定する
- ワーク (パーツ)の検出を確認する
- プログラムを作成・実行する
手順詳細
準備
仮想コントローラー接続を新規に作成します。
システム設定において、ロボット1を "GX8-C652S" (名前はrobot1)に設定します。プロジェクト "ConvTrack_Vision" を作成します。
コンベヤーで搬送するワーク (パーツ)に相当するBoxオブジェクト (SBox_1)を追加し、次のように設定します。
- 適当な色に変更します
- 位置設定 (Position X, Y, Z) : 550, 550, 25 (作業の妨げにならない位置に移動させます)
ワーク (パーツ)の配置先となるテーブル (Boxオブジェクト)を追加し、次のように設定します。
- オブジェクト名 (Name) : Table
- サイズ設定 (Half size X, Y, Z) : 40, 300, 50
- 位置設定 (Position X, Y, Z) : -550, 0, 50
コンベヤーオブジェクトを追加して、次のように設定します。
- 位置設定 (Position X, Y, Z) : -400, 0, 100
- 姿勢設定 (Rotation Z) : 90
- サイズ設定 (Half size Height, Width) : 500, 100
ワーク (パーツ)の供給設定を行います。
- 直前の手順で追加したコンベヤーオブジェクトの "Operation" - "Supply" プロパティーをクリックします。
- 表示された供給設定ダイアログにおいて、[供給有効]にチェックを入れます。
- [ベースオブジェクト]に、前述の手順で追加した"SBox_1"を設定します。
- [間隔]の[Min]と[Max]のそれぞれを"3.000"に設定します。
- [オフセット]の[Z]を"26.000"に設定します。
カメラ設定を追加します。
Epson RC+ 8.0 メニュー - [セットアップ] - [システム設定]の[ビジョン]において、仮想カメラを追加します。
[仮想]にチェックを入れて、モデルとして "acA640-120gm" を選択し、[適用]ボタンをクリックします。
カメラオブジェクトを次のように設定し、コンベヤーオブジェクトの上空に配置します。
- 位置設定 (Position X, Y, Z) : -400, -400, 700
- 姿勢設定 (Rotation X) : 180
コンベヤートラッキングの設定を追加し、次のように設定します。
Epson RC+ 8.0 メニュー - [セットアップ] - [システム設定] の [コントローラー] - [コンベヤーエンコーダー]において、エンコーダーが追加されていることを確認します。
Epson RC+ 8.0 メニュー - [ツール] - [コンベヤートラッキング]において、コンベヤートラッキングの設定を追加します。
[タイプ]には[ビジョン]を選択します。
コンベヤーオブジェクトを、次のように設定します。
- "Operation"プロパティーを"LinkTracking"にします
- "Conveyor ID"プロパティーを"1"にします
ビジョンキャリブレーションを実施します。
ここでは "ConveyorCalib" という名称でキャリブレーションを作成・実施します。
ビジョンキャリブレーションが完了したら、利用したキャリブレーション用CADデータを、作業の妨げにならない位置へ移動します。カメラのキャリブレーションについては、以下のマニュアルを参照してください。
"Epson RC+ オプション Vision Guide ソフトウェア編 - ビジョンキャリブレーション - キャリブレーション手順 - キャリブレーション手順: スタンドアローンカメラ"
ビジョンシーケンスを作成し、次の手順で、ワーク (パーツ)が正しく検出されるかどうかを確認します。
コンベヤー操作パネルで、コンベヤーオブジェクトを動かし、ワークとなるBoxを、1つ搬送します。
カメラの視野内に収まる位置で、コンベヤーオブジェクトを停止します。
このワークを認識するためのシーケンス "BoxDetection" を作成します。
"BoxDetection" シーケンスを実行して、ワーク (パーツ)が正しく認識されることを確認します。
"Calibration"プロパティーに、前述の手順で作成したキャリブレーション "ConveyorCalib" を設定します。
ワーク (パーツ)が問題なく検出できたら、コンベヤー上のワーク (パーツ)を、一旦削除します。
コンベヤーオブジェクトを右クリックして、[全ての子を削除]を選択します
コンベヤーキャリブレーションを実施します。
シミュレーター上でのコンベヤーキャリブレーションについては、以下を参照してください。ロボットオブジェクト - "コンベヤーキャリブレーション"
以下の手順で、簡易キャリブレーションを行います。
レイアウトツリーにおいて、ロボットノードの下の "Conveyor Tracking" ノードを展開します。
"Conveyor 1" を右クリックして、[シミュレーターでキャリブレーション]をクリックします。
"Conveyor Origin", "Upstream Limit", "Downstream Limit" プロパティーそれぞれの、"Visible" プロパティーを "True" にします。
コンベヤー原点, 上流限, 下流限の表示を確認します。
2重登録防止設定をします。
Epson RC+ 8.0 メニュー - [ツール] - [コンベヤートラッキング]を開いて、ワークの2重登録を防止する距離を、"200mm"に設定します。
プログラム作成
ソフトウェアトリガー
以下のプログラムを、Main.prg として作成します。
カメラのソフトウェアトリガーを利用したコンベヤートラッキング動作を行うプログラムです。Function main SimSet Conveyor_1.ClearSupply Motor On Power High Speed 100 Accel 100, 100 Cnv_Mode 1, 1 Cnv_Accel 1, 2000 Cnv_QueRemove 1, All Integer i String name$ Xqt VisionDetection TmReset 0 SimSet Conveyor_1.Start For i = 1 To 10 Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0 Wait 0.5 Jump Cnv_QueGet(1, 0) +Z(51) SimGet robot1.NearestObjToTool(0), name$ SimSet robot1.Pick, name$ Jump Here :X(-550) :Y(i * 60 - 320) SimSet robot1.Place, name$, Table Cnv_QueRemove 1, 0 Next SimSet Conveyor_1.Stop Quit VisionDetection Print "Finished, ", Tmr(0), "[s]" Fend Function VisionDetection Integer numFound, i, state Real x, y, u Boolean found Off 10 Wait 0.5 Do VRun BoxDetection Cnv_Trigger (1) VGet BoxDetection.Geom01.NumberFound, numFound Print "Num Found ", numFound For i = 1 To numFound VGet BoxDetection.Geom01.CameraXYU(i), found, x, y, u Cnv_QueAdd 1, Cnv_Point(1, x, y) Next Wait 1 Loop Fendハードウェアトリガー
カメラオブジェクトの仮想ハードウェアトリガーを利用したコンベヤートラッキングも可能です。
以下の手順で、ハードウェアトリガーの設定を行います。カメラオブジェクトの"Trigger IO"プロパティーに、"10"を設定します。
コンベヤーオブジェクトの"Operation" - "Trigger IO"プロパティーに、直前の手順で設定した値と同じ "10" を設定します。
Vision Guideシーケンス "BoxDetection" の "RuntimeAcquire" プロパティーの値を、"Strobed" にします。
上記で作成したプログラムのファンクション "VisionDetection" を以下のように変更します。
Function VisionDetection Integer numFound, i, state Real x, y, u Boolean found Off 10 Wait 0.5 Do VRun BoxDetection On 10 Do VGet BoxDetection.AcquireState, state Loop Until state = 3 VGet BoxDetection.Geom01.NumberFound, numFound Print "Num Found ", numFound For i = 1 To numFound VGet BoxDetection.Geom01.CameraXYU(i), found, x, y, u Cnv_QueAdd 1, Cnv_Point(1, x, y) Next Off 10 Wait 0.5 Loop Fend
プログラム実行
ツールバーの[Runウィンドウ]ボタンをクリックし、Runウィンドウを表示します。
ファンクション"main"を選択して、[開始]ボタンをクリックします。