<< 向前        下一页 >>

ID : 7231

HandEyeConvPos

功能

将通过EVP获取的对象机器人位置进行补偿,并返回夹治具眼的机器人位置。

格式

HandEyeConvPos (机器人位置)

指定项目

机器人位置
通过位置型数据指定通过内置及外部视觉获取的目标机器人位置。

返回值

通过位置型数据返回经过补偿的目标机器人位置。

解说

成套购买COBOTTA和AF照相机(N10-W02)时,则出厂时以特定姿势进行校准并存储。

(关于初始姿势,请参照HandEyeInitPos)使用EVP时,即便是和初始姿势不同的姿势,相机也会与基准平面(COBOTTA的底面)保持垂直;相机与基准平面的距离和初始姿势相同时,则可使用该指令并补正目标机器人位置。

注意事项

  • 成套购买COBOTTA和AF照相机(N10-W02)时使用该指令。
  • 使用COBOTTA的Ver.2.7.*和EVP的Ver.1.3.1之后的版本时,通过EVP指南将[使用COBOTTA的Hand-Eye calibration data。]设为有效时,请勿使用该指令,而是直接使用“EVP使用说明书”的附录1的样本。

应用示例

'!TITLE "HandEyeEVP"

' 趋近长度	100mm
' 动作长度	100mm

' 机器人待机位置	P[RobotImageAquisitionNumber]
'                       (请保存创建EVP项目时的机器人姿势。
'                       此外,请确认相机是否与工件垂直。)
' 装入位置          P[PlaceNumber]

' 通过EVPRun2获取相机拍摄&图像处理&工件位置并将值重置为以下数据
' 找到的工件个数	I[NumberOfWorks]
' 找到的工件位置	P[WorkPlaceNumber], P[WorkPlaceNumber+1], ... ,
'                       P[WorkPlaceNumber+找到的工件个数-1]
' 找到的工件种类	I[WorkTypeNumber], I[WorkTypeNumber+1], ... , 
'                       I[WorkTypeNumber+找到的工件个数-1]

' 项目流程
' 移动到P[RobotImageAquisitionNumber]
'  -> 相机拍摄&图像处理
'  -> 在找到的工件位置和P[PlaceNumber]之间往复。(仅找到的工件个数部分重复)
'  -> 移至P[RobotImageAquisitionNumber]

'------------设定-------------

' EVP项目文件名
#Define EVPProjectFileName "project.evp"

' 距离工件的高度(测试用安全余量) [mm]
#Define WorkHeight 20

' 距离基准平面(COBOTTA的底面)的工件高度
' 例)工件1的高度为20,工件2的高度为10时
'   #Define ObjectHeight 20,10
' 例)工件1的高度为20时
#Define ObjectHeight 20

' 获取图像时机器人位置的P变量编号
#Define RobotImageAquisitionNumber 0

' 装入位置P变量编号
#Define PlaceNumber 1

' 找到的工件个数的I变量编号
#Define NumberOfWorks 0

' 找到的工件位置的P变量开始编号
#Define WorkPlaceNumber 10

' 找到的工件种类的I变量开始编号
#Define WorkTypeNumber 10

'-----------------------------

#Include "Variant.h"
Dim ctrl as Object

Sub Main
  Dim index As Long

  TakeArm Keep = 0

  ' 指定工件高度(在此处而不是EVP项目内设定高度)
  Dim objHeightArray as Variant
  objHeightArray = Array(ObjectHeight)

  ' EVP初始设定 (选择EVP项目文件、设定工件高度)
  EVPInitialize2 EVPProjectFileName, objHeightArray
	
  ' 移至获取图像时的机器人位置P[0]
  Move P, P[RobotImageAquisitionNumber] 
	
  ' 相机拍摄&图像处理&获取工件位置
  EVPRun2
	
  ' 重复找到的工件个数部分
  For index = 0 To I[NumberOfWorks] - 1

    '------- 移至找到的工件位置 -------------------------
    '趋近动作  趋近P[10 + index]上空100mm
    Approach P, P[WorkPlaceNumber + index], @0 100
    ' 下降动作    降至P[10 + index]
    Move L, @C P[WorkPlaceNumber + index] 
    ' 必要时此处记述卡盘和松开动作等
    Delay 500
    ' 上升动作    100mm
    Depart L, @0 100
    
    '------- 装入位置的动作 -------------------------
    '趋近动作  趋近P[1]上空100mm
    Approach P, P[PlaceNumber], @0 100
    ' 下降动作    降至P[1]
    Move L, @C P[PlaceNumber] 
    ' 必要时此处记述卡盘和松开动作等
    Delay 500
    ' 上升动作    100mm
    Depart L, @0 100
    
  Next
  
  ' 移至获取图像时的机器人位置
  Move P, P[RobotImageAquisitionNumber] 
  
End Sub

Sub EVPInitialize2 ( EVPProjectFile as string, ByVal objHeightArray as Variant)
  ctrl = Cao.AddController("Runner", "CaoProv.DENSO.EVP", "", "project=" & _
  EVPProjectFile)
    
  ' 校准时的姿势
  Dim initPos as Position
  initPos = HandEyeInitPos()

  Dim n as Integer
  Dim objHeight as Integer

  ' 设定各个工件的高度
  For n = LBound(objHeightArray) To UBound(objHeightArray)
    objHeight = objHeightArray(n)
    ctrl.SetObjectHeight n, (objHeight + PosZ(initPos) - _
      PosZ(P[RobotImageAquisitionNumber]))
  Next
    
End Sub

Sub EVPRun2

  Dim index As Long
  Dim ReturnValue As Variant
  Dim vntWorks As Variant
  Dim vntWork As Variant

  ' 相机拍摄&图像处理
  ' =======================================
  ' 详细信息:Run指令的返回值规格
  ' Return value of Run Command.
  ' result &lt;VT_VARIANT | VT_ARRAY> =
  '    Work Count	 	... <VT_I4>
  '    Work Datas 		... <Work Data | VT_ARRAY>
  '    Work Data		... <VT_VARIANT | VT_ARRAY>
  '       (classId, P(x, y, z, rx, ry, rz, fig))  Feeder Action	... <VT_I4>
  ' =======================================
  ReturnValue = ctrl.Run()

  ' 将找到的工件个数存储至I[0]
  I[NumberOfWorks] = ReturnValue( 0 )

  ' 将工件位置存储至P[10], P[11], ..., P[10+找到的工件个数-1]
  vntWorks = ReturnValue( 1 )
  For index = 0 To I[NumberOfWorks] - 1
    vntWork = vntWorks(index)

    ' 补正工件位置
    P[WorkPlaceNumber + index] = HandEyeConvPos( vntWork( 1 ) )

    ' 将工件高度设定为P[10], P[11], ..., P[10+找到的工件个数-1]
    LetZ P[WorkPlaceNumber + index] = PosZ(P[WorkPlaceNumber + index]) + _
         WorkHeight
  Next
End Sub

ID : 7231

<< 向前        下一页 >>