핸드-아이 캘리브레이션

현재 버전 (2.4.0)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 최신 버전의 소프트웨어를 사용하려면 Mech-Mind 다운로드 센터를 방문하여 다운로드하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

이 부분은 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세트의 포즈를 입력해야 함)

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.