ID : 2982
[ビジョントラッキング]自由曲線補間のプログラミング例
ビジョントラッキングで自由曲線補間動作(TrackMove S)を行う場合のプログラミング例を以下に示します。
トラッキング範囲内に納まる長さのワークが対象になります。
用例
ビジョントラッキング中の自由曲線補間動作は、以下の3つのプログラムで実現することができます。
-
「メインプログラム」
トラッキングに関する初期化処理を行うプログラムです。
-
「ワーク検出プログラム」
ワーク位置の検出とトラッキングバッファへのデータの保存を行うプログラムです。
-
「トラッキング動作プログラム」
検出したワークの位置をトラッキングバッファより読み出し、トラッキング・自由曲線補間動作を行うプログラムです。
1. メインプログラム(FreeCurveVisionTracking.pcs (PCS:326B))
指定したコンベア番号のトラッキングバッファをクリアし、ビジョンセンサからの信号のトリガ検出を開始します。
TrackInitialize ConvNum, 0
ワーク検出プログラム、トラッキング動作プログラムを並列実行させます。
Run FreeCurveVision
Run FreeCurveTracking
2. ワーク検出プログラム(FreeCurveVision.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 ConvNum, workNum, arrayVis, arrayUser
3. トラッキング動作プログラム(FreeCurveTracking.pcs (PCS:3KB))
TrackStartコマンドで、トラッキングを開始する前にホームポジションへ移動します。
トラッキング中に、Moveコマンドなどの通常動作コマンドを実行すると、トラッキング動作を中断してしまうので注意してください。
Move P, P[HomePos]
ワークが検出される度に、トラッキング・自由曲線補間動作を行うためのメインループです。
ループを途中で終了できるように、内部I/OのON信号をループの継続条件に設定しています。
Do
P[10] = TrackTargetPos(1)
...
TrackApproach P, P[FirstPathPointWork], ApproachLength
TrackMove S, P[TargetPos], PathNum
...
LOOP UNTIL IO[AbortIONum] = ON
ループ内の処理です。
まず、トラッキングバッファからワークのデータを取り出し、トラッキング対象ワークに設定します。
ワーク未検出の場合、ワークが検出され、トラッキングバッファにデータが積まれるまで、この行で待機します。
P[TargetPos] = TrackTargetPos(ConvNum)
上で得たコンベア基準座標をベース座標系の位置に変換します。
P[TargetPosBase] = ConvertPosWork( P[TargetPos], -1, 0 )
経路の1点目の座標を取得し、現在のワーク座標での位置に変換します。
P[FirstPathPoint] = GetPathPoint( PathNum, 1 )
P[FirstPathPointWork] = ConvertPosWork( P[FirstPathPoint], P[TargetPosBase], -1 )
トラッキングモードの開始を指示します。このコマンドを実行した段階では、ロボットはまだ移動を開始しません。
TrackApproachコマンド等のトラッキング動作コマンドを実行して初めて移動を開始します。
TrackStart ConvNum
コンベアと等速になるように追従動作を行いながら、経路点1点目からアプローチ長分だけ上空のアプローチ位置へ移動します。
TrackApproach P, P[FirstPathPointWork], ApproachLength
コンベアと等速になるように追従動作を行いながら、経路点1点目へ近づきます。
TrackMove P, P[FirstPathPointWork]
自由曲線補間動作を開始します。
TrackMove S, P[TargetPos], PathNum
コンベアと等速になるように追従動作を行いながら、トラッキング対象ワークからデパート長分だけ上空へ離れます。
TrackDepart P, DepartLength
トラッキングモードの終了を指示します。コンベアへの追従動作を終了して減速停止します。
このコマンド実行する前にワークがトラッキング範囲下流限界を越した場合、エラーが発生します。
TrackStop
ピックアップしたワークを排出位置へ搬送します。
Approach P, P[EjectPos], ApproachLength
ID : 2982