1. 시작하기
팔레타이징(Palletizing)과 디팔레타이징(De-Palletizing)은 팔레트상에 포장물을 들어 올리거나 내리는 공정으로 두산 로봇에서는 태스크 빌더와 태스크 라이터를 사용하여 작업을 수행할 수 있습니다. 사전 프로그래밍(Pre-Defined) 된 워크셀 매니저 아이템을 사용하여 태스크 빌더에서 스킬을 이용하여 간단한 팔레타이징을 구현할 수 있습니다. 반면 태스크 라이터를 이용할 경우, 팔레트 행렬, 패턴, 기준 위치부터 사용할 그리퍼 잡기/놓기 설정 등을 직접 설정해야 합니다.
이 과정에서는 태스크 라이터를 사용한 팔레타이징 방법을 소개합니다.
2. 팔레타이징 명령어 소개
팔레타이징 태스크 만들기에 앞서 팔래타이징에 필요한 주요 명령어에 대해 알아보겠습니다.
① Define: 변수 및 팔레트 작업물 위치 계산을 위한 포즈를 저장합니다.
② Custom Code: 팔레타이징 작업 수행을 위한 시작점 및 방향, 방법을 정의합니다.
③ Repeat: 마지막 작업물을 들어 목표점에 놓을 때까지 태스크를 반복합니다.
④ Move J, Move L: 작업을 준비하는 지점으로 이동 및 집기/놓기에 유용한 조인트/태스크 명령어입니다.
⑤ Call Sub, Sub: 하나의 작업을 수행하는 명령어 그룹을 생성하고, 서브루틴을 불러옵니다.
⑥ Set: 디지털 출력, 작동 속도, 툴 무게, 작업물 무게, TCP, 좌표계 등에 입력된 값을 적용합니다.
⑦ Wait: 지정된 시간만큼 대기합니다.
※ Custom Code의 경우, 사용자 임의대로 스크립트를 생성하여 명령을 수행/제어할 수 있습니다.
팔레트 위 작업물 배치를 계산하고 시작/종료를 설정 그리고 집기/놓기 및 시작점, 종료점 설정을 위해 다음의 용어의 이해가 필요합니다.
[변수 설정]
팔레타이징 프로그래밍을 하기 위해서는 하기와 같이 변수들이 필요합니다.
- rowNum = 4 (행에 놓여지는 작업물의 개수)
- colNum = 3 (열에 놓여지는 작업물의 개수)
- startNum = 0 (팔레타이징 시작 지점)
- endNum = 12 (팔레타이징 종료 지점)
- appDist = 100 (잡기/놓기 시, 접근/후퇴 거리)
- cnt = 0 (반복 작업 횟수)
[포즈 설정]
작업물을 정확히 집고 내려 놓기 위해서 팔레트 상 기준 좌표 설정이 중요합니다.
- P1~P3: 팔레트상 작업물 3개의 임의 좌표 지정
- pickPallet: 팔레트상 작업물 좌표 계산 후, 집기 위치 지정
- appPallet: 팔레트상 작업물 좌표 계산 후, 접근 위치 지정
※ 팔레타이징은 rowNum>1 와 colNum>1 일 때, 가능합니다.
3. 워크셀 아이템 설정
워크셀 아이템에서 프로그래밍 전 플랜지에 장착 될 툴의 무게, 통신 그리고 TCP를 설정해야 합니다.
3.1 무게 설정
워크셀 매니저 홈 화면, 로봇 메뉴에서 툴의 무게를 설정할 수 있습니다. 자동 계산을 눌러 툴의 무게, 무게 중심 등을 설정해 보세요.
3.2 엔드이펙터 설정
워크셀 매니저 홈 화면, 엔드이펙터 메뉴에서 툴의 통신과 TCP를 설정할 수 있습니다. 그리퍼를 플랜지 커넥터에 연결 후, 출력 신호에서 플랜지를 선택하세요. 포트 2개를 지정하고 동작 부분의 잡기/놓기 버튼을 눌러 작동 유무를 확인합니다. 공압그리퍼를 예제로 사용해 보겠습니다.
로봇의 위치 정보를 참조하여, 툴의 중심 위치를 지정합니다. 위치 정보 입력 전, 정확한 끝 단의 위치를 측정하기 위해서 자동 계산 기능을 이용하여 정확한 TCP를 구할 수 있습니다. 로봇 끝 단의 위치를 알고 플랜지로부터 그리퍼 끝 단과의 거리 값을 계산하여 툴의 TCP를 쉽게 설정할 수 있습니다.
4. 팔레타이징 태스크 만들기
태스크 라이터에서 팔레타이징을 하기 위해서는 모션 제어 명령어 및 그리퍼 통신을 출력하는 등의 흐름 제어 명령어를 사용합니다. 또한 기타 명령어를 사용하여, 사용자 조건을 만들 수 있습니다.
4.1 변수 및 포즈 설정
변수를 정의하는 Define 명령을 사용하여, 행/열 및 접근 거리, 반복 작업 횟수 설정을 할 수 있습니다. 또한 ‘2. 팔레타이징 명령어 소개’에서 알아 본 바와 같이 행의 시작점, 열의 끝점 등 작업물 간의 거리를 계산하고 정확한 잡기/놓기를 설정하기 위해 포즈를 저장합니다. 각각의 변수 이름과 값을 입력해보세요.
행의 시작점, 열의 시작점 및 끝점의 위치를 저장하고, 집기/놓기 작업을 수행하기 위해 접근/후퇴 거리 방향을 설정합니다. P1, P2, P3는 임의의 점으로, 원하는 위치에 맞추어 설정하시면 됩니다.
P1 = posx(430.92,105.52,564.91,3.15,148.21,128.76)
P2 = posx(574.07,131.57,651.92,2.95,148.00,128.69)
P3 = posx(535.91,-226.55,615.77,2.64,147.90,128.47)
pickPallet = posx(0.00,34.50,1452.50,0.00,0.00,0.00)
appPallet = posx(0.00,34.50,1452.50,0.00,0.00,0.00)
4.2 조건 및 모션 설정
작업을 준비하는 시작점을 설정하여 이동하고 시작 지점을 지정, 마지막 작업물이 옮겨질 때까지 모션을 반복 수행하는 작업을 만들어 보겠습니다.
① 작업의 시작점을 설정합니다.
cnt = cnt + startNum
② 반복 조건을 정의합니다.
cnt<endNum
③ 팔레트 작업물 위치를 계산하는 작업으로 행/열의 이동 방법을 설정하고 집기/놓기 및 접근/후퇴 방향과 거리를 설정합니다.
cntMod = cnt%rowNum
cntDiv = cnt//rowNum
delta_x = ((P1[0]-P2[0])/(colNum-1))*cntDiv+((P3[0]-P2[0])/(rowNum-1))*cntMod
delta_y = ((P1[1]-P2[1])/(colNum-1))*cntDiv+((P3[1]-P2[1])/(rowNum-1))*cntMod
delta_z = ((P1[2]-P2[2])/(colNum-1))*cntDiv+((P3[2]-P2[2])/(rowNum-1))*cntMod
pickPallet = posx(P2[0] + delta_x, P2[1] + delta_y, P2[2] + delta_z, P2[3], P2[4], P2[5])
appPallet = trans(pickPallet, [0,0,-appDist,0,0,0], ref = DR_TOOL)
④ 접근/후퇴 및 집기/놓기 위치 설정은 Define에서 설정한 PickPallet와 appPallet를 ‘변수 선택’에서 불러옵니다.
⑤ 그리퍼 ‘집기’를 수행하는 작업 그룹을 불러옵니다.
작업 순서는 P2에서 시작하여, P3까지 이동 후, 위의 그림과 같이 지그재그로 이동합니다.
⑥ 그리퍼 ‘놓기’를 수행하는 작업을 불러옵니다.
⑦ 작업물 이동 후, 시작점에 ‘+1’을 설정하여, 다음 작업물이 옮겨 질 수 있도록 설정합니다.
cnt = cnt + 1
⑧ 하나의 작업 그룹을 만들고 서브루틴 이름을 설정합니다.
⑨ 출력 신호, 속력 오버라이드, 툴 무게, 중심, 형상, 기준 좌표계를 설정합니다. 컨트롤러나 플랜지 출력 신호를 ON/OFF 설정을 통해, 그리퍼 움직임을 제어할 수 있습니다.
5. 정리
이번 과정에서는 두산 로봇의 태스크 라이터를 이용하여, 팔레타이징 태스크를 만들어 보았습니다. 다양한 흐름 제어 명령어 및 기타 명령어를 이용하여, 사용자가 다양한 방법으로 프로그래밍을 할 수 있습니다. 보다 상세한 사용 방법은 참조 & 프로그래밍 매뉴얼에서 확인할 수 있습니다.
참고 자료
※ 본 자료의 모든 내용과 도안에 대한 저작권 및 지적재산권은 두산로보틱스에 있습니다. 따라서 두산로보틱스의 서면 허가 없이 사용, 복사, 유포하는 어떠한 행위도 금지됩니다. 또한 특허권을 오용하거나 변용하는데 따르는 책임은 전적으로 사용자에게 있습니다.