핸드-아이 캘리브레이션

이 부분은 Windows 시스템에서 hand_eye_calibration 예제 프로그램을 사용하여 핸드-아이 캘리브레이션을 수행하는 방법에 관한 설명입니다.

HALCON 예제 프로그램 사용 가이드 내용을 참조하여 예제 프로그램을 획득하여 사용 조건을 확인하십시오.

hand_eye_calibration 폴더에 다음 두 예제 프로그램이 포함됩니다.

  • determine_calibration_poses: 핸드-아이 캘리브레이션을 수행할 때의 캘리브레이션 포즈를 획득하는 데 사용됩니다.

  • perform_hand_eye_calibration: 핸드-아이 캘리브레이션을 수행하는 데 사용됩니다.

  • 6축 로봇에만 적용됩니다.

  • UHP 시리즈 카메라를 사용하여 핸드-아이 캘리브레이션을 수행할 때 캡처 모드Camera1로 설정해야 합니다.

사전 준비

HALCON 예제 프로그램을 사용하여 핸드-아이 캘리브레이션을 수행하기 전에 다음 작업을 해야 합니다.

  1. 로봇의 정확도와 로봇을 정상적으로 사용할 수 있는지 확인하십시오.

  2. 카메라와 함께 제공된 캘리브레이션 보드를 준비하여 캘리브레이션 보드를 설치하십시오.

  3. 2D 이미지와 뎁스 맵의 퀄리티가 요구 사항을 충족할 수 있는지를 확인하십시오.

  4. 카메라 내부 파라미터가 요구 사항을 충족할 수 있는지를 확인하십시오.

예제 프로그램 수정

determine_calibration_poses를 통해 캘리브레이션 포즈를 획득한 다음 perform_hand_eye_calibration를 사용하여 핸드-아이 캘리브레이션을 수행해야 합니다.

다음과 같이 두 예제 프로그램의 일부 정보는 일치해야 합니다.

  • 연결된 카메라

  • 캘리브레이션 보드 모델

또한 포즈를 획득하기 전에 robot_pose.json 파일의 오일러 각 유형을 설정해야 합니다.

동일한 카메라

예제 프로그램을 실행하기 전에 두 예제 프로그램을 실행할 때 연결된 카메라가 일치하도록 하기 위해 예제 프로그램에 설정된 카메라를 수정해야 합니다. 구체적으로 다음과 같습니다.

  1. HALCON에서 예제 프로그램을 열기: HALCON 소프트웨어를 부팅하고 예제 프로그램을 HALCON의 프로그램 에디터 화면으로 드래그합니다.

  2. 변수 검사: MechEyeCameras 창이 팝업될 때까지 툴 바의 step over 버튼을 반복적으로 클릭하여 프로그램을 단계별로 실행합니다.

  3. 이 창에 모든 연결할 수 있는 카메라가 표시됩니다. 연결할 카메라를 선택하고 더블 클릭하며 unique_name: 또는 user_name: 뒤에 있는 카메라 명칭 내용을 복사합니다.

    camera name
    user_name는 사용자가 설정한 카메라 이름입니다. Mech-Eye Viewer에서 설정할 수 있습니다.
  4. 아래와 같은 명령줄을 찾아 MechEye를 복사한 unique_name 또는 user_name 내용으로 대체합니다.

    DeviceInfo := 'MechEye'

캘리브레이션 보드 모델 설정

구체적인 방법은 다음과 같습니다.

  1. HALCON에서 예제 프로그램을 열기: HALCON 소프트웨어를 부팅하고 예제 프로그램을 HALCON의 프로그램 에디터 화면으로 드래그합니다.

  2. 캘리브레이션 보드의 모델 설정: 기본적인 모델은 BDB-5인데 다른 캘리브레이션 보드를 사용하려면 아래 그림에 표시된 연산자를 찾아 BDB-5를 필요한 캘리브레이션 보드로 대체하십시오.

    set_framegrabber_param (AcqHandle, 'BoardType', 'BDB-5')

오일러 각 유형과 단위 설정

determine_calibration_poses를 통해 획득한 캘리브레이션 포즈를 robot_pose.json 파일로 입력해야 하며 robot_pose.json 파일에 저장된 오일러 각 유형은 기본적으로 sxyz입니다. 기본적으로 오일러 각의 단위는 도(°)입니다. 오일러 각 유형을 설정하려면 다음과 같이 작업하십시오.

  1. robot_pose.json 파일을 엽니다.

  2. 오일러 각 유형 설정: 아래와 같은 명령줄을 찾아 sxyz를 사용되는 로봇의 오일러 각 유형으로 대체합니다. 예제 프로그램에 지원하는 오일러 각 유형은 로봇 오일러 각 유형 내용을 참조하십시오.

    "EulerType":"sxyz"
  3. 오일러 각 단위 설정: 오일러 각을 라디안 단위로 입력하려면 다음 명령줄에서 truefalse로 바꿉니다.

    "FromDegree":true
  4. robot_pose.json 파일을 저장합니다.

캘리브레이션 포즈 획득

플로우 차트

extri teach flow

스텝

핸드-아이 캘리브레이션을 진행하기 전에 최소 15세트의 캘리브레이션 포즈를 얻어야 합니다. 캘리브레이션 포즈를 획득하는 방법은 다음과 같습니다.

  1. 툴 바에 있는 run 버튼을 클릭하거나 키보드의 F5 버튼을 눌러 예제 프로그램을 실행하십시오. read_char (WindowHandle, Char, ReCode) 연산자까지 실행될 때 예제 프로그램은 자동으로 중지되고 이때 명령어를 수동으로 입력하여 계속 실행해야 합니다.

    카메라가 연결되지 못하는 경우 해당 카메라는 Mech-Eye Viewer 또는 기타 GenICam 클라이언트에 이미 연결되었는지를 확인해야 합니다.
  2. 티치 펜던트를 사용하여 로봇을 올바른 위치로 이동시킵니다.

    캘리브레이션 포즈는 특정 조건을 충족해야 하며 관련 설명은 HALCON 참조 매뉴얼에서 얻을 수 있습니다. HALCON的도움  HALCON 매뉴얼을 열어 Calibration 부분의 내용을 참조하십시오.
  3. P를 입력하면 카메라가 이미지를 캡처합니다.

    • 캘리브레이션 보드의 일부만 시야 내에 있거나 아예 시야 내에 있지 않은 경우 로봇을 이동하고 이미지를 다시 캡처하십시오.

    • 캘리브레이션 보드의 전체가 시야 내에 있는 경우 다음 작업을 수행하십시오.

  4. T를 입력하면 카메라가 특징 인식 결과가 포함된 이미지를 캡처합니다.

    • 카메라가 캘리브레이션 보드에 있는 원을 인식하지 못하는 경우 HALCON에서 이미지를 반환하지 않습니다. 이때 로봇을 이동하여 원시 이미지와 특징 인식 결과가 포함된 이미지를 다시 캡처합니다.

    • 카메라가 캘리브레이션 보드에 있는 원을 인식할 수 있는 경우 아래 그림과 같이 HALCON에 특징 인식 결과가 포함된 이미지가 표시됩니다. 이때 다음 작업을 수행하십시오.

      calib sample
  5. 로봇의 티치 펜던트를 확인하고 로봇의 현재 포즈를 robot_pose.json 파일에 입력하십시오. 포즈의 이동량은 mm 단위여야 하며 회전량(오일러 각)의 단위는 robot_pose.json 파일의 설정과 일치해야 합니다.

    해당 포즈를 티치 펜던트로 저장하십시오. 이렇게 하면 나중에 핸드-아이 캘리브레이션을 수행할 때 티치 펜던트에 저장된 포즈를 사용하여 로봇을 이동할 수 있습니다.
  6. 스텝 2~5를 반복하여 계속 포즈를 획득하십시오.

  7. 최소 15세트의 포즈를 확인하면 데이터 수집 과정이 끝납니다. Q를 입력하여 프로그램을 종료하십시오.

  8. robot_pose.json 파일의 캘리브레이션 포즈의 개수를 설정합니다. robot_pose.json 파일을 열어 아래와 같은 명령줄을 찾아 15를 실제로 획득한 캘리브레이션 포즈의 개수로 대체합니다.

    "pose_count":15

핸드-아이 캘리브레이션 수행

로봇의 캘리브레이션 포즈를 획득한 후 perform_hand_eye_calibration 예제 프로그램을 실행하여 핸드-아이 캘리브레이션을 시작합니다.

플로우 차트

extri calib flow

카메라 설치 방식 확인

핸드-아이 캘리브레이션을 수행하기 전에 카메라의 설치 방식을 설정해야 합니다.

기본적으로 카메라는 Eye in Hand 식으로 설치됩니다. 만약에 Eye to Hand 식으로 설치하려면 아래 그림에 표시된 연산자를 찾아 EyeInHandEyeToHand로 대체하십시오.

set_framegrabber_param (AcqHandle, 'CalibrationType', 'EyeInHand')

좌표계 변경

예제 프로그램에는 카메라가 출력한 포인트 클라우드 좌표계를 변경하는 연산자를 포함합니다. 이 연산자를 통해 로봇 좌표계의 포인트 클라우드를 직접 출력할 수 있습니다.

기본 설정은 좌표계를 변경하지 않습니다. 로봇 좌표계로 변경해야 할 경우, captureTranformedPointCloud 함수에서 아래 그림에 표시된 연산자를 찾아 falsetrue로 대체하십시오.

set_framegrabber_param (AcqHandle,'Scan3dCoordinateTransformEnable',false)

스텝

다음과 같이 핸드-아이 캘리브레이션을 수행하십시오.

  1. 툴 바에 있는 run 버튼을 클릭하거나 키보드의 F5 버튼을 눌러 예제 프로그램을 실행하십시오. stop까지 실행되면 중지됩니다.

  2. 로봇을 robot_pose.json 파일에 저장된 캘리브레이션 포즈로 이동시킵니다.

    robot_pose.json의 포즈 순서에 따라 로봇을 이동시켜야 합니다. 그렇지 않으면 나중에 외부 파라미터를 계산할 때 실패할 수도 있습니다.
  3. 툴 바에 있는run 버튼을 클릭하거나 키보드에 있는 F5 버튼을 눌러 예제 프로그램을 실행하고 이미지를 캡처합니다.

  4. 이미지 캡처 과정이 끝난 후 컨트롤 변수 중의 CollectResult 값을 확인하십시오.

    • SUCCESS가 표시되면 다음 작업을 수행하십시오.

    • 오류 알림이 나타나면 오류 코드 내용을 참조하여 문제를 해결한 다음에 캘리브레이션 포즈를 다시 획득하십시오.

  5. Move the robot to the next calibration pose 라는 메시지가 나오면 스텝 2~3을 반복하십시오.

    로봇은 robot_pose.json에 저장된 모든 위치에 도달한 후 예제 프로그램을 실행하면 외부 파라미터가 자동으로 계산됩니다.
  6. 컨트롤 변수 중의 CalibResult 값을 확인합니다.

    • SUCCESS가 표시되면 핸드-아이 캘리브레이션이 성공한 것입니다. 예제 프로그램이 위치하는 폴더에서 외부 파라미터 파일 Extrinsics.txt 및 좌표계가 전환된 후의 포인트 클라우드를 확인하십시오.

    • 오류 알림이 나타나면 오류 코드 내용을 참조하여 문제를 해결한 다음에 캘리브레이션 포즈를 다시 획득하십시오.

로봇의 오일러 각 유형

캘리브레이션 예제 프로그램에는 다음과 같은 오일러 각 유형과 사원수 사이의 전환을 지원합니다.

일반적인 표시 방식 오일러 각 유형 로봇 브랜드

Z-Y'-Z"/OAT

rzyz

KAWASAKI(카와사키)

Z-Y'-X"/yaw, pitch, roll

rzyx

ABB

KUKA(쿠카)

X-Y-Z/WPR

sxyz

FANUC(화낙)

YASKAWA(야스카와)

Rokae(로케)

UR(유니버설 로봇)

X-Y'-Z"

rxyz

/

Z-X'-Z"

rzxz

/

  • 오일러 각의 유형이 같은 경우 로봇의 오일러 각 표시 순서가 다를 수 있습니다. 위 표의 입력 순서에 따라 오일러 각을 입력하십시오.

  • 사용하는 로봇의 오일러 각 유형이 위 표에 없는 경우 오일러 각 유형과 사원수 간의 전환을 직접 추가해야 합니다. perform_hand_eye_calibration 예제 프로그램의 euler_to_quad 함수에 기존 코드를 참조하여 전환을 추가합니다.

캘리브레이션 파라미터에 관한 설명

이 부분에서는 핸드-아이 캘리브레이션을 수행할 때 사용하는 파라미터에 대해 소개하겠습니다.

BoardType

이 파라미터는 캘리브레이션 보드의 모델을 설정하는 데 사용됩니다.

값 리스트와 관련 설명

설명

BDB-5

캘리브레이션 보드와 카메라 사이의 거리의 추천값: < 0.6m

BDB-6

캘리브레이션 보드와 카메라 사이의 거리의 추천값: 0.6~1.5m

BDB-7

캘리브레이션 보드와 카메라 사이의 거리의 추천값: > 1.5m

OCB-005

카메라가 Eye to Hand 방식으로 설치되고 정밀도에 대한 요구 사항이 높은 프로젝트에만 사용됨

OCB-010

OCB-015

OCB-020

CGB-020

캘리브레이션 보드와 카메라 사이의 거리의 추천값: < 0.6m

CGB-035

캘리브레이션 보드와 카메라 사이의 거리의 추천값: 0.6~1.5m

CGB-050

캘리브레이션 보드와 카메라 사이의 거리의 추천값: > 1.5m

ExtrinErrCode

이 읽기 전용 파라미터는 핸드-아이 캘리브레이션 과정 중에 상태 코드와 오류 코드를 확인하는 데 사용됩니다.

상태 코드 설명

SUCCESS

실행 성공

POSE_INVALID

포즈 포맷의 오류(사원수를 입력해야 함)

IMAGE2D_EMPTY

무효한 2D 이미지

FIND_CORNERS_FAIL

2D 이미지의 특징을 인식하지 못했습니다. 2D 이미지 관련 파라미터를 조정하여 요구 사항을 충족하는 2D 이미지를 획득하십시오.

DEPTH_EMPTY

무효한 뎁스 맵

CORNERS_3D_INVALID

뎁스 맵의 특징을 인식하지 못했습니다. 뎁스 맵 관련 파라미터를 조정하여 요구 사항을 충족하는 뎁스 맵을 획득하십시오.

POSES_INSUFFICIENT

포즈 수 부족(최소 15세트의 포즈를 입력해야 함)

저희는 귀하의 개인 정보를 소중하게 생각합니다.

당사 웹사이트는 귀하에게 최상의 경험을 제공하기 위해 쿠키를 사용합니다. "모두 수락"을 클릭하시는 경우, 귀하는 사의 쿠키 사용에 동의하게 됩니다. "모두 거부"를 클릭하시는 경우, 귀하가 이 웹사이트를 방문할 때 추적되거나 기억되지 않도록 하기 위해 단일 쿠키가 사용됩니다.