Skip to content

픽 앤 플레이스 예제

앞선 물체 검사 예제에 이어, 이번에는 그래프 마법사를 사용한 픽 앤 플레이스 예제에 대해 설명합니다. 픽 앤 플레이스 예제는 비전을 이용한 어플리케이션 중 가장 많이 사용되는 예제 중 하나이며, 본 예제에서는 인디아이를 통해 파지할 물체의 이미지를 저장하고 이를 토대로 물체를 인식하여 Conty 와 연동하는 과정까지 상세히 안내합니다.

주의

픽 앤 플레이스 예제 진행 시에는 먼저 테스트 환경을 점검해주어야 합니다. 아래와 같은 조건을 만족하는 주변 환경인지 확인 후 예제를 진행해주시길 바랍니다. 또한, 예제와 다른 시편을 사용하시거나 테스트 환경이 크게 상이한 경우, 각 모듈의 파라미터 값을 조절해가며 시편 인식을 향상시키시길 바랍니다.

  • 일정한 광량 유지가 가능한 공간
  • 또는 조명에 의한 환경 변화가 적은 공간
  • 반사가 없거나 심하지 않은 시편

물체 이미지 저장 및 인식

본 예제에서는 주변에서 흔히 찾아볼 수 있는 제과 제품 2종류를 사용하여 픽 앤 플레이스 과정을 진행합니다. 먼저, 인식할 물체를 배치한 후, 인디아이를 통해 이미지를 저장합니다. 저장 된 이미지는 감지 알고리즘의 템플릿으로 사용됩니다. 검출 탭의 마법사를 클릭하고 아래와 같은 순서대로 항목을 선택합니다.

  • 그래프 초기화 ⇒ 견본 이미지 저장

그 다음, ROI 모듈을 클릭하여 이미지의 관심영역을 지정합니다. 모듈 클릭 후, 하단의 TOUCH 를 선택하면 앱 좌측 화면을 터치하여 관심영역을 이동할 수 있습니다. 이 때, 관심영역 위치와 크기를 조절하여 관심 영역 내에 이미지가 최대한 채워질 수 있도록 합니다. 그리고 SaveImage 모듈을 클릭하여 저장할 이름을 입력합니다. 위 두 모듈에 대한 설정이 끝나면 실행 버튼을 눌러 이미지를 저장합니다. 본 과정을 2가지 시편에 대해 미리 진행해두도록 합니다.

이제, 픽 앤 플레이스를 위한 물체 감지 알고리즘을 마법사를 이용하여 우선적으로 구성합니다. 검출 탭의 마법사를 선택하고 아래와 같은 순서대로 항목을 선택합니다.

  • 그래프 초기화 ⇒ 새 물체 인식 알고리즘 생성 ⇒ 카메라 영상 ⇒ 선명하게 ⇒ 특정 견본 이미지를 인식 ⇒ 특징점이 많은 물체 ⇒ GrabCut 알고리즘 사용 ⇒ (감지 대상 검사 방법 - 다음 단계) ⇒ 긴 방향 기준으로 방향을 정렬 ⇒ 물체 위치를 작업 평면에 맞춤 (예) ⇒ 그리퍼 미사용

그래프 구성이 완료되면 아래와 같은 모습을 확인하실 수 있습니다.



그래프 구성 완료

완성 된 그래프 모듈 중 MatchFeature 의 세부 설정으로 들어간 다음, TEMPLATE 드롭다운 항목에서 이미지 저장 시 입력했던 이름을 선택합니다.


MatchFeature 모듈 설정

이제 GrabCut 모듈을 사용하여 영역분할을 진행합니다. SIZE CLOSE, SIZE DILATE 를 적절히 조절하여 인식된 물체 영역을 결정합니다. 이 때, 화면이 너무 밝거나 어두울 시, 카메라 영상 화면의 새로고침 버튼을 눌러 노출 설정을 자동 조절한 후 파라미터 설정을 진행합니다.


영역 분할 알고리즘 적용

위 과정까지 완료 후, 실행 버튼을 눌러 물체 인식 결과를 확인할 수 있습니다. 인식 결과가 정상적이면, 해당 그래프를 저장합니다.


첫 번째 시편 인식 결과

이제 위 과정을 동일하게 두 번째 시편에 대해서도 진행합니다. 아래 그림과 같이 시편을 준비한 후, 마법사를 사용하여 생성된 그래프를 다시 수정합니다. MatchFeature 의 세부 설정으로 들어간 다음, TEMPLATE 드롭다운 항목에서 두 번째 시편 이미지 저장 시 입력했던 이름을 선택합니다.


MatchFeature 모듈 설정

그 다음, 먼저 실행 버튼을 클릭하여 시편 인식 결과를 확인합니다. 아래 결과처럼, 시편 인식 결과가 정상적인 경우, 다른 이름으로 그래프를 저장합니다. 하지만, 인식 결과가 시편보다 크게 벗어나는 경우에는 GrabCut 모듈을 미세 조정하여 인식된 물체 영역을 수정합니다.


두 번째 시편 인식 결과

다종 물체 픽 앤 플레이스

인디아이 앱 설정

물체 인식 그래프를 2가지 시편에 대해 모두 저장한 후, 이제 픽 앤 플레이스 과정을 진행하도록 합니다. 먼저 현재 그래프를 초기화하기 위해 그래프 창의 비우기 버튼을 누르고, 그래프 수정을 클릭하여 아래와 같이 그래프를 구성합니다.


픽 앤 플레이스 그래프 구성

참고로, 앞서 저장한 그래프에서 그리퍼 미사용이 아닌 그리퍼 사용으로 마법사를 진행하면, 단일 물체에 대한 픽 앤 플레이스 작업도 진행할 수 있습니다. 본 예제에서는 다양한 시편에 대한 픽 앤 플레이스 과정에 대해 설명하며, 단일 물체 픽 앤 플레이스 작업도 이후에 설명되는 Conty 설정을 참고하여 진행할 수 있습니다.

그래프 가장 처음 배치한 Target 은 인식 대상 물체를 지정하는 테스트용 모듈입니다. 테스트 후, Conty 와 연동 시에는 삭제되어야하며, Conty 에서 지정한 대상을 인식하도록 변경하여야 합니다. 먼저, 구성 된 그래프의 두 SubGraphNAME 항목에 미리 저장해둔 그래프를 선택합니다.



SubGraph 모듈 구성

그 다음, 두 Switch 모듈 역시 KEY 를 target 으로, VALUE 각각을 두 가지 시편으로 선택합니다. 즉, Conty 와 연동 시에는 Target 없이 Switch 로만 구성되어 있으며, Conty 연동 시에는 일반적인 스위치 구조로 동작합니다.



Switch 모듈 구성

그래프 내의 GoTo 모듈은 Join 으로 이어지며, 각 시편을 인식한 후에는 모두 Gripper 모듈로 이동하여 픽 작업을 수행합니다.


Join 모듈 구성


GoTo 모듈 구성

위 설정 후, Gripper 모듈을 설정합니다. 본 예제에서는 진공 그리퍼를 이용하여 물체 파지를 진행합니다. 로봇에 인디아이와 함께 다양한 툴을 장착할 수 있으며, 장착된 후에는 Gripper 모듈을 통해 툴 위치와 파지 위치를 설정해야 합니다. 해당 방법은 그래프 모듈 리스트의 Gripper 모듈 설정 을 참고하여 툴 위치와 파지 위치를 설정하시길 바랍니다.

Gripper 모듈 설정 완료 후에는 아래 그림과 같이 GRIP 항목에 시편 리스트가 나타나며, 가장 앞의 Target 모듈에서 원하는 시편을 선택하여 인식 결과를 확인할 수 있습니다.


Gripper 모듈 구성


Target 모듈 구성

정상적으로 인식 결과가 나타나면 아래와 같은 화면을 확인하실 수 있습니다.



Target 모듈 구성

이제 Conty 연동을 위해 아래와 같이 그래프를 수정합니다.


최종 인디아이 그래프

Conty 연동 설정

상세 설명에 앞서, Conty 설정을 모두 마치게 되면 아래와 같은 프로그램 트리로 완성됩니다. Conty 의 프로그램 트리 작성은 상단 메뉴에서 프로그램 - 새로 만들기 를 선택하여 구성하실 수 있습니다.


최종 Conty 프로그램

프로그램 트리로 진입하면, 먼저 인디아이와의 연동을 위해 configuration 에서 비전 설정을 아래와 같이 진행합니다. 비전 설정편집 선택하고, 원하는 이름 입력 후, IP 와 Port 를 192.168.137.1002002 로 동일하게 설정합니다. 그리고 IndyEye 를 선택하고 추가합니다.



비전 설정

다음으로, variables 에서 아래와 같이 detected 변수를 설정합니다. 픽 모션을 정상적으로 수행한 후 플레이스 작업을 시작하기 위한 플래그를 지정하기 위함이며, 초기 값은 false 로 설정합니다.


변수 설정

위 초기 설정까지 완료하면 픽 앤 플레이스를 위한 인디아이와의 연동과 모션 명령을 추가할 단계입니다. 본 예제에서는 기본 홈 위치에서 인식을 시도하기 위해 가장 첫 모션으로 home 을 추가해두었으며, 인식할 위치에 따라 jointMove 또는 taskMove 로 대체하여 사용해도 무방합니다.

먼저, 두 시편 중 하나에 대해 인식 시도를 하기 위해서 detect 명령을 아래 그림처럼 설정합니다. 또, 해당 물체를 타겟 객체로 선택합니다.


detect 명령 설정

만약 위 타겟이 정상적으로 인식되면 픽 작업을 수행해야하므로 if 문을 아래와 같이 추가 합니다.


if 명령 설정

이후 과정 진행 전, 로봇에 부착된 툴 설정을 Conty 에서 먼저 진행해야합니다. 로봇설정 설정으로 진입한 후 사용자 툴 리스트 에 툴을 추가합니다. 다음, 애플리케이션 타입을 픽 앤 플레이스로 선택하면, 툴 명령 리스트에 HoldRelease 가 나타납니다. 현재 장착된 툴의 동작 방식 (I/O 또는 엔드툴 포트 이용 등) 에 따라 출력 을 설정하십시오. 툴 연결 및 설정에 대한 자세한 설명은 구매 시 지급받으신 인디 매뉴얼을 참고하십시오.


툴 설정

툴 설정 후, 앞서 추가한 if 명령 하위 트리로 pickassignment 명령을 추가하고 pickPick 편집하기 로 진입합니다.


Pick 편집하기 메뉴

진입 후, 먼저 좌측 하단의 선택된 툴 정보 에서 추가한 툴을 선택합니다.


Pick 툴 선택

그리고 편집을 선택하고 사용자 pick 설정 중 비전 사용을 선택하고 이동 방향과 거리를 입력하고 새로 만들기 클릭합니다. 방향 및 거리는 픽 작업 전후로 접근/후퇴 모션을 설정하는 것으로 반드시 값을 입력해주어야 합니다. 그 외 설정의 경우에는 사용자가 원하는 값으로 설정합니다.


Pick 설정

모든 설정이 완료되면 저장 후 프로그램 트리 화면으로 빠져나옵니다. pick 과 함께 추가한 assignment 에서 detected 변수를 true 로 변경 후 저장합니다. 픽 작업 완료 플래그로 동작합니다.


assignment 설정

만약 첫 번째 시편 인식이 제대로 되지 않았거나 인식 후 플레이스 작업을 한 상태라면, 두 번째 시편을 인식할 수 있도록 else 명령과 하위 트리로 detect 명령을 추가합니다. detect 명령에는 두 번째 시편을 타겟 객체로 설정하고, 그 하위로는 첫 번째 시편과 동일한 방식으로 if 명령 아래 pickassignment 를 추가합니다. 이 때, Pick 편집하기 설정은 이전 방식과 동일합니다.


두 번째 시편 픽 작업 설정

위 과정까지 픽 작업을 위한 Conty 설정을 완료하였습니다. 이제 플레이스 작업을 위한 설정을 진행합니다. 앞서 추가한 if, else 명령과 같이, 아래 그림처럼 if 명령을 추가합니다. 그 하위 트리로는 jointMove:Absoulte, place, home 을 순차적으로 추가합니다.


플레이스 프로그램 트리 구성

먼저, jointMove절대 조인트 이동 편집으로 진입합니다. 최종 플레이스 위치 전 몇 개의 경유점을 통해 최종 위치까지 도달할 수 있도록 직접교시나 조그를 이용하여 경유점을 추가합니다. 추가 후에는 저장을 눌러 프로그램 트리로 돌아옵니다.


경유점 추가

경유점 추가 후, placePlace 편집하기 로 진입합니다. pick 명령과 동일하게 툴 정보를 선택하고, 로봇을 최종 플레이스 위치로 이동합니다. 최종 위치 결정 후, 편집 화면에서 위치 업데이트 를 클릭합니다. 픽 설정과 마찬가지로 이동 방향과 거리 등 세부 설정을 원하는 값으로 설정한 후 새로 만들기를 선택합니다.


Place 설정

이제 모든 설정이 완료되었으며, 해당 프로그램을 실행하면 인디아이를 통해 물체를 인식하고 픽 앤 플레이스 하는 작업이 수행됩니다.