핸드-아이 캘리브레이션 불량으로 인해 터치 테스트를 수행하는 것이 안전하지 않습니다 (미터 단위 사용, 밀리미터 단위 사용 안 함).

문제

핸드-아이 캘리브레이션 결과가 좋지 않아 터치 테스트를 진행하기에 안전하지 않습니다.

핸드-아이 캘리브레이션 변환

핸드-아이 캘리브레이션 잔차

프로젝션 검증

터치 테스트

나쁜

나쁜

나쁜

위험한

잘못된 핸드-아이 캘리브레이션 결과의 예

핸드-아이 캘리브레이션 행렬은 여러 값이 물리적 측정값과 지나치게 큰 차이를 보이므로 정확하지 않은 것으로 보입니다. 이러한 차이는 해당 설정에서 합리적이지 않습니다.

핸드-아이 캘리브레이션 변환 매트릭스

0.971

-0.214

-0.108

-1.683

-0.019

0.380

-0.925

375.305

0.239

0.900

0.365

457.970

0

0

0

1

457.970이라는 값은 대략 130mm이고, 375.305라는 값은 대략 90mm입니다. 이 단계에서는 좌표계 정의에 따라 달라지는 부호(+/-)는 무시하고, 거리 자체에만 집중합니다.

../../_images/eye_in_hand_approximate_hand_eye_matrix.png

보정 잔차 또한 예상보다 상당히 크며, 두 자릿수 정도 더 높습니다.

잔차

N (포즈)

회전 평균 (°)

최대 회전각(°)

전송 평균(mm)

최대 이동 거리(mm)

14

5.247

12.851

135.333

760.322

소형 로봇의 경우 잔차가 1mm 미만 범위에 있을 것으로 예상되며, 대형 로봇의 경우 잔차가 1mm 범위에 있을 수 있습니다. 잔차의 회전 성분은 1도 미만 범위에 있을 것으로 예상됩니다.

전체 잔차
잔차

포즈

회전 (°)

이동 (mm)

1

0.948

760.322

2

0.746

92.317

3

2.557

177.495

4

9.364

167.930

5

10.202

174.986

6

0.951

55.776

7

10.514

65.690

8

12.851

69.575

9

2.470

70.544

10

2.625

81.236

11

0.927

43.069

12

2.134

32.829

13

10.851

44.558

14

6.316

58.329

프로젝션을 통한 검증이 실패했는데, 이는 핸드-아이 캘리브레이션이 정확하지 않으며 터치 테스트가 심각하게 실패할 것임을 시사합니다.

../../_images/projection_verification_bad.png

잠재적 원인

핸드-아이 캘리브레이션을 위한 로봇 자세(이동 구성 요소)는 미터 단위로 제공됩니다.

대부분의 산업용 로봇은 로봇 자세의 기본 단위로 미터(m)를 사용합니다. 그러나 Zivid 포인트 클라우드는 밀리미터(mm) 단위로 제공됩니다. 정확한 핸드-아이 캘리브레이션을 위해서는 로봇 자세 입력값과 포인트 클라우드의 단위가 동일해야 합니다. 로봇 자세는 미터 단위이고 포인트 클라우드는 밀리미터 단위인 경우, 핸드-아이 변환 행렬이 완전히 잘못된 핸드-아이 캘리브레이션 결과가 도출될 수밖에 없습니다.

경고

ROS는 SI 단위를 표준으로 사용하므로 ROS 토픽에서 로봇 자세를 가져올 때 미터 단위를 사용합니다. ROS를 통해 로봇 자세를 수집하는 경우, 핸드-아이 캘리브레이션을 실행하기 전에 변환 성분을 밀리미터로 변환해야 합니다.

잠재적 해결책

  1. 로봇의 자세 입력값은 밀리미터 단위여야 합니다.

    참고: 로봇 자세의 이동 성분이 미터 단위인 경우, 해당 값을 1000으로 나누면 밀리미터 단위로 변환할 수 있습니다.

  2. 동일한 데이터셋(로봇 자세는 밀리미터 단위)을 사용하여 핸드-아이 캘리브레이션을 반복합니다.

  3. 핸드-아이 캘리브레이션 결과 (변환, 잔차, 프로젝션) 를 확인합니다.

  4. (핸드-아이 캘리브레이션 결과가 양호한 경우) 터치 테스트를 실행합니다.

../../_images/touching-test-result-aruco.jpg
문제 재현 방법 (로봇 자세가 밀리미터 대신 미터로 표시됨)

좋은 데이터셋

아래 이미지에 표시된 데이터 세트를 사용하여 핸드-아이 캘리브레이션이 성공적으로 수행되었습니다.

../../_images/hand-eye-calibration-small-movements-dataset.png

보정 결과는 다음과 같습니다.

핸드-아이 캘리브레이션 변환 매트릭스

0.999

-0.004

0.043

-55.476

0.004

1.000

0.013

-91.613

-0.043

-0.013

0.999

128.667

0

0

0

1

잔차

N (포즈)

회전 평균 (°)

최대 회전각(°)

전송 평균(mm)

최대 이동 거리(mm)

14

0.019

0.029

0.144

0.222

전체 잔차
잔차

포즈

회전 (°)

이동 (mm)

1

0.026

0.071

2

0.013

0.218

3

0.020

0.146

4

0.026

0.222

5

0.026

0.181

6

0.007

0.114

7

0.007

0.128

8

0.015

0.066

9

0.023

0.110

10

0.010

0.113

11

0.024

0.149

12

0.023

0.175

13

0.029

0.184

14

0.022

0.132

핸드-아이 캘리브레이션은 터치 테스트를 통해 검증되었습니다.

../../_images/touch_test_correct.png

터치 테스트가 성공적으로 완료되어 핸드-아이 캘리브레이션이 정확하고 정밀하게 조정되었음을 확인했습니다.

잘못된 데이터셋 (로봇 자세가 밀리미터가 아닌 미터 단위로 표시됨)

이 문제를 시뮬레이션하기 위해, 핸드-아이 캘리브레이션 데이터셋에 있는 입력 로봇 포즈의 변환 벡터를 밀리미터에서 미터로 변환했습니다. 그런 다음, 수정된 로봇 포즈를 사용하여 동일한 데이터셋에서 핸드-아이 캘리브레이션을 다시 수행했습니다.

보정 결과는 다음과 같습니다.

핸드-아이 캘리브레이션 변환 매트릭스

0.971

-0.214

-0.108

-1.683

-0.019

0.380

-0.925

375.305

0.239

0.900

0.365

457.970

0

0

0

1

잔차

N (포즈)

회전 평균 (°)

최대 회전각(°)

전송 평균(mm)

최대 이동 거리(mm)

14

5.247

12.851

135.333

760.322

전체 잔차
잔차

포즈

회전 (°)

이동 (mm)

1

0.948

760.322

2

0.746

92.317

3

2.557

177.495

4

9.364

167.930

5

10.202

174.986

6

0.951

55.776

7

10.514

65.690

8

12.851

69.575

9

2.470

70.544

10

2.625

81.236

11

0.927

43.069

12

2.134

32.829

13

10.851

44.558

14

6.316

58.329

프로젝션을 통한 검증에 실패했는데, 이는 핸드-아이 캘리브레이션이 정확하지 않아 터치 테스트에서 심각한 오류가 발생할 가능성이 높다는 것을 시사합니다. 따라서 안전상의 이유로 터치 테스트는 생략되었습니다.

../../_images/projection_verification_bad.png

비교

아래 표에서는 핸드-아이 캘리브레이션 행렬(변환 값)과 핸드-아이 캘리브레이션 잔차 결과를 비교합니다.

핸드-아이 캘리브레이션 행렬의 변환 값

데이터셋

X (mm)

Y(mm)

Z(mm)

좋음 (포즈는 mm 단위)

-55.476

-91.613

128.667

나쁜 (m 단위 포즈)

-1.683

375.305

457.970

Δ (좋음 - 나쁨)

-53.793

-466.918

-329.303

잔차

데이터셋

N

회전 평균 (°)

최대 회전각(°)

전송 평균(mm)

최대 이동 거리(mm)

좋음 (포즈는 mm 단위)

14

0.019

0.029

0.144

0.222

나쁜 (m 단위 포즈)

14

5.247

12.851

135.333

760.322