ID : 7231
HandEyeConvPos
功能
将通过EVP获取的对象机器人位置进行补偿,并返回夹治具眼的机器人位置。
返回值
通过位置型数据返回经过补偿的目标机器人位置。
解说
成套购买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 <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

