ID : 2895
ビジョントラッキングのプログラミング例
ビジョントラッキングする際のプログラミング例を以下に示します。
トラッキング範囲内に納まる長さのワークが対象になります。
用例
ビジョントラッキングは、以下の3つのプログラムで実現することができます。
-
「メインプログラム」
円形トラッキングに関する初期化処理を行うプログラムです。
-
「ワーク検出プログラム」
ワーク位置の検出とトラッキングバッファへのデータの保存を行うプログラムです。
-
「トラッキング動作プログラム」
検出したワークの位置をトラッキングバッファより読み出し、トラッキング・ピックアップ動作を行うプログラムです。
1. メインプログラム(VisionTracking.pcs (PCS:266B))
コンベア1のトラッキングバッファをクリアし、ビジョンセンサからの信号のトリガ検出を開始します。
TrackInitialize 1, 0
ワーク検出プログラム、トラッキング動作プログラムを並列実行させます。
Run Vision
Run Tracking
2. ワーク検出プログラム(Vision.pcs (PCS:4KB))
ビジョンセンサの初期化を行います。初期化処理の中身は、使用するビジョンセンサごとにユーザが記述します。
Call visInitialize
ビジョンセンサによるワーク検出処理を実行します。ワーク検出処理の中身は、使用するビジョンセンサごとにユーザが記述します。
Call visSearch
ビジョンセンサで検出したワークの個数を取得します。処理の中身は、使用するビジョンセンサごとにユーザが記述します。
Call getWorkNum( workNum )
検出したワークの個数分だけ、ビジョンセンサ検出座標と、ワークに割り当てるユーザデータ値を取得します。
処理の中身は、使用するビジョンセンサごとにユーザが記述します。
For index = 0 To workNum - 1
Call getVisData( index, visionX, visionY, visionAngl, userData )
...
Next index
サブプロシージャである"getVisData()"の中の処理です。ビジョンセンサで検出したビジョンセンサ検出座標をユーザデータとセットにして、参照渡しで渡されたプロシージャの引数を経由して、プロシージャの呼び出し元に返します。
下記の例の場合、"x = 100[pixel]", "y = 100[pixel]", "θ = 90[deg]" でワークが検出されたことになります。
Sub getVisData( _
ByVal index As Integer, _
ByRef visionX As Double, _
ByRef visionY As Double, _
ByRef visionAngl As Double, _
ByRef userData As Integer _
)
visionX = 100
visionY = 100
visionAngl = 90
userData = 1
End Sub
"getVisData()"で取得したデータを配列にまとめて、トラッキングバッファに追加します。
For index = 0 To workNum - 1
...
arrayVis( index ) = V( visionX, visionY, visionAngl )
arrayUser( index ) = userData
Next index
TrackSetVision 1, workNum, arrayVis, arrayUser
3. トラッキング動作プログラム(Tracking.pcs (PCS:2KB))
TrackStartコマンドで、円形トラッキングを開始する前にホームポジションへ移動します。
円形トラッキング中に、Moveコマンドなどの通常動作コマンドを実行すると、トラッキング動作を中断してしまうので注意してください。
Move P, P[50]
ワークが検出される度に、トラッキング・ピックアップ動作を行うためのメインループです。
ループを途中で終了できるように、内部I/OのON信号をループの継続条件に設定しています。
Do
P[10] = TrackTargetPos(1)
...
TrackApproach P, P[10], 50
...
LOOP UNTIL IO[128] = ON
ループ内の処理です。
まず、トラッキングバッファからワークのデータを取り出し、トラッキング対象ワークに設定します。
ワーク未検出の場合、ワークが検出され、トラッキングバッファにデータが積まれるまで、この行で待機します。
P[10] = TrackTargetPos(1)
トラッキングモードの開始を指示します。このコマンドを実行した段階では、ロボットはまだ移動を開始しません。
TrackApproachコマンド等のトラッキング動作コマンドを実行して初めて移動を開始します。
TrackStart 1
トラッキング対象ワークがトラッキング範囲内に入るまで待ちます。
Wait TrackInRange(1), 10000, timeoutFlg
ターンテーブルと等速になるように追従動作を行いながら、トラッキング対象ワークから50mm上空のアプローチ位置へ移動します。
TrackApproach P, P[10], 50
ターンテーブルと等速になるように追従動作を行いながら、トラッキング対象ワークへ近づきます。
TrackMove P, P[10]
ターンテーブルと等速になるように追従動作を行いながら、トラッキング対象ワークから50mm上空へ離れます。
TrackDepart P, 50
トラッキングモードの終了を指示します。ターンテーブルへの追従動作を終了して減速停止します。
このコマンド実行する前にワークがトラッキング範囲下流限界を越した場合、エラーが発生します。
TrackStop
ピックアップしたワークを排出位置へ搬送します。
Approach P, P[52], 50
ID : 2895