3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish
3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish

get_conveyor_obj()

정의

get_conveyor_obj(conv_id, timeout=None, container_type=DR_FIFO, obj_offset_coord=None)

기능

해당 Conveyor로부터 작업 가능한 작업물 좌표계 ID를 리턴합니다. 함수가 불렸을 때, Watch Window에 있는 작업물 중 설정한 container 규칙에 따라 작업물을 한 개씩 반환해줍니다.

인수

인수명

자료형

기본값

설명

conv_id

int

-

Conveyor ID

timeout

float

None

설정한 시간동안 리턴할 작업물이 없으면 대기 종료하고 함수 리턴

container_type

int

DR_FIFO

작업물 container type (DR_FIFO: first-in/first-out, DR_LIFO: last-in/first-out)

obj_offset_coord

posx


None

컨베이어 고정 좌표계 대비 작업물 좌표계(mm, ˚)

list(float[6])

알아두기

  1. 해당 함수를 호출했을 때, Watch Window에 있는 작업물을 설정한 Container 규칙에 따라 작업물 좌표계 id를 한 개씩 반환해줍니다. 예를 들어, 아래와 같이 작업물이 배치되어 있는 순간 get_conveyor_obj 함수를 호출하면 Watch Window 안에 있는 ②, ③ 작업물이 후보가 됩니다. 이 때, container_type을 DR_FIFO로 설정한 경우 Watch Window에 먼저 들어온 ③ 작업물 좌표계 id를 반환하고, DR_LIFO로 설정한 경우 Watch Window에 나중에 들어온 ② 작업물 좌표계 id를 반환합니다. 만약에 함수 호출 당시에 Watch Window에 작업물이 없으면 최대 timeout 변수에 설정된 시간까지 대기하고 있다가 그 사이에 작업물이 들어오면 해당 id를 반환해줍니다.

    image-20250423-064348.png

    [작업물 좌표계 id 반환 규칙 설명]

  2. obj_offset_coord는 작업물 좌표계에 offset을 적용하고 싶을 때 사용합니다. 보통 티징점을 손쉽게 입력하기 위해서 사용하거나 외부센서(ex. Vision 센서)와 연동해서 작업물의 자세와 위치를 동적으로 바꿔주고 싶을 때 사용합니다. 입력하지 않으면 offset은 0이 적용됩니다.


아래 그림 같은 경우, 작업물 좌표계가 작업물 우측면에 생성되고, Base or World Coord.과 작업물 좌표계가 90도 틀어져있습니다. 이 때, 티칭점의 위치는 작업물 가운데 기준으로, 티칭점의 자세는 Base or World Coord. 기준으로 부여하고 싶은 경우 obj_offset_coord = posx(-d, 0, 0, -90, 0, 0)으로 적용하면 됩니다. 이 TP UI를 통해서 티칭점을 획득할 경우 필수적인 부분은 아니지만, drl만을 사용하거나 티칭점을 직접 입력해야 할 경우 필요합니다.

image-20250423-064358.png

[obj_offset_coord 적용 사례 1]


다음으로, 아래 그림 같이 작업물이 컨베이어 진행 방향과 무관한 방향으로 위치가 변하는 경우 또는 작업물의 자세가 바뀌는 경우 엔코더 신호만으로는 작업물의 위치/자세를 알아낼 수 없으므로 비전 센서를 써서 작업물의 추가적인 위치/자세 변화를 감지해야 합니다. 그리고, 여기서 감지한 위치/자세 변화를 동적으로 obj_offset_coord에 입력해주면 작업물 좌표계를 이에 맞게 생성합니다.

image2021-11-2_17-31-2.png

[obj_offset_coord 적용 사례 2: 비전 센서 사용]

리턴

설명

int

CONV_COORD. Conveyor 유저 좌표계 ID (201~230)

음의 정수

timeout 시간이 지나도 반환할 작업물이 없을 경우

알아두기

반환할 작업물이 없을 경우, timeout 시간이 지날 때까지 함수를 리턴해주지 않습니다. timeout 시간이 지났지만 해당 작업물이 없으면 -1을 반환합니다. 단, timeout 시간을 입력하지 않은 경우는 계속해서 함수를 리턴해주지 않습니다.

예외

예외

설명

DR_Error (DR_ERROR_TYPE)

인수들의 데이터형 오류 시

DR_Error (DR_ERROR_VALUE)

인수의 값이 유효하지 않을 시

DR_Error (DR_ERROR_RUNTIME)

C Extension 모듈 에러 발생 시

DR_Error (DR_ERROR_STOP)

프로그램 강제 종료 시

예제

Python
## One object in a cycle
CONV1 = set_conveyor(‘conveyor1’)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE) # waiting position
while True:
CONV_COORD_1 = get_conveyor_obj(CONV1)
tracking_conveyor(CONV1)

# synched motion
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_1)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

untracking_conveyor(CONV1)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE) # waiting position

## Multi objects in a cycle 
CONV1 = set_conveyor(‘conveyor1’)

while True:
CONV_COORD_1 = get_conveyor_obj(CONV1)
tracking_conveyor(CONV1)

# fist object
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_1)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

# second object
CONV_COORD_2 = get_conveyor_obj(CONV1, time_out=10)
if CONV_COORD_2 > 0: # -1 if no objects available during time_out
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_2)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_2)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_2)

# first object if you need
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

untracking_conveyor(CONV1)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE)

관련 명령어

Keyword

get_ / conveyor / conveyor_obj