핸드-아이 캘리브레이션 결과 불량 (수동 로봇 자세 입력 오류)
문제
핸드-아이 캘리브레이션 결과가 만족스럽지 못합니다(나쁘거나 미흡함). 다음과 같은 조합 중 하나가 나타날 수 있습니다.
핸드-아이 캘리브레이션 변환 |
핸드-아이 캘리브레이션 잔차 |
프로젝션 검증 |
터치 테스트 |
|---|---|---|---|
나쁜 |
나쁜 |
나쁜 |
위험한 |
합리적인 |
나쁜 |
나쁜 |
나쁜 |
합리적인 |
보통 |
나쁜 |
나쁜 |
합리적인 |
좋은 |
불량함 |
보통 |
If manually-entered robot poses contain typos, double-check the values (or the rotation convention used) and repeat the hand-eye calibration (see Potential Solution below).
잘못된 핸드-아이 캘리브레이션 결과의 예
핸드-아이 캘리브레이션 행렬은 여러 값이 물리적 측정값과 지나치게 큰 차이를 보이므로 정확하지 않은 것으로 보입니다. 이러한 차이는 해당 설정에서 합리적이지 않습니다.
0.609 |
0.177 |
0.773 |
-467.320 |
-0.109 |
0.984 |
-0.140 |
17.581 |
-0.785 |
0.001 |
0.619 |
794.894 |
0 |
0 |
0 |
1 |
For this setup, the value 794.894 is expected to be approximately 130 mm, and the value 17.581 is expected to be roughly 90 mm (the expected values depend on your camera-to-calibration-object geometry). At this stage we ignore the sign (+/-), because it depends on the coordinate-system definitions; we focus only on the distances.
보정 잔차 또한 예상보다 상당히 크며, 두 자릿수 정도 더 높습니다.
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
11 |
2.855 |
10.677 |
102.330 |
405.720 |
For smaller robots, we expect the residuals to be in the sub-millimeter range, while for larger robots, the residuals can be in the millimeter range. As for the rotational component of the residuals, we expect them to be in the sub-degree range.
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
1.685 |
405.720 |
2 |
1.816 |
90.325 |
3 |
0.215 |
74.578 |
4 |
1.901 |
143.061 |
5 |
2.296 |
21.398 |
6 |
10.678 |
94.157 |
7 |
5.541 |
102.133 |
8 |
0.235 |
40.173 |
9 |
3.979 |
48.811 |
10 |
1.894 |
76.962 |
11 |
1.177 |
28.309 |
Verification by Projection fails, which suggests that the hand-eye calibration is not correct, and that the touch test will fail badly.
핸드-아이 캘리브레이션 결과가 미흡한 예시
핸드-아이 캘리브레이션 행렬은 합리적이며 대략적인 수동 측정에서 예상되는 결과와 일치합니다(아래 표 및 이미지 참조).
0.999 |
-0.003 |
0.040 |
-54.871 |
0.002 |
0.999 |
0.029 |
-90.920 |
-0.040 |
-0.029 |
0.999 |
128.709 |
0 |
0 |
0 |
1 |
보정 잔차가 허용 가능한 범위 내에 있으므로 최적화가 성공적으로 수렴되었음을 나타냅니다.
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
11 |
0.027 |
0.059 |
0.160 |
0.388 |
For smaller robots, we expect the residuals to be in the sub-millimeter range, while for larger robots, the residuals can be in the millimeter range. As for the rotational component of the residuals, we expect them to be in the sub-degree range.
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
Verification by Projection technically succeeds, but the resulting error is still too large to be acceptable. Projection verification error can seem acceptable even if the hand-eye calibration is incorrect, so treat a passing result with caution.
터치 테스트 결과가 만족스럽지 못합니다(나쁘거나 기준치에 미달).
Bad Touch Test
터치 테스트 도구의 끝부분이 ArUco 마커를 너무 세게 누릅니다.
Marginal Touch Test
터치 테스트 도구의 끝부분이 ArUco 마커를 살짝 누릅니다.
잠재적 원인
로봇 컨트롤러에서 PC로 로봇 자세를 복사하는 과정에서 사람의 실수(오타)가 발생했습니다.
로봇 포즈에 오타가 있으면 포즈-이미지 쌍이 일관성을 잃게 되어 핸드-아이 캘리브레이션에 필요한 기하학적 가정이 깨집니다. 작은 숫자 하나라도 잘못되면 포즈가 심하게 왜곡되어 전체 최적화 과정이 잘못된 방향으로 흘러가게 되고, 결과적으로 잔차가 커지고 변환이 비현실적으로 변하며 전반적으로 만족스럽지 못한 캘리브레이션 결과가 나옵니다.
잠재적 해결책
로봇 컨트롤러에서 PC로 포즈를 수동으로 복사하는 경우, 오타가 없는지 값을 다시 한번 확인하십시오.
로봇 컨트롤러에서 Zivid 핸드-아이 캘리브레이션용 변환 행렬로 로봇 포즈를 변환할 때 올바른 회전 규칙을 사용해야 합니다.
동일한 데이터셋을 사용하여 핸드-아이 캘리브레이션을 반복합니다.
핸드-아이 캘리브레이션 결과(변환, 잔차, 프로젝션)를 확인합니다.
Run the touch test (if the hand-eye calibration results are good).
문제 재현 방법 (잘못된 핸드-아이 캘리브레이션)
좋은 데이터셋
아래 이미지에 표시된 데이터 세트를 사용하여 핸드-아이 캘리브레이션이 성공적으로 수행되었습니다.
보정 결과는 다음과 같습니다.
0.999 |
-0.002 |
0.041 |
-55.598 |
0.001 |
0.999 |
0.028 |
-90.654 |
-0.041 |
-0.028 |
0.999 |
129.044 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
11 |
0.025 |
0.054 |
0.109 |
0.192 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
The Hand-Eye calibration was verified with a touch test.
터치 테스트가 성공적으로 완료되어 핸드-아이 캘리브레이션이 정확하고 정밀하게 조정되었음을 확인했습니다.
데이터셋 불량 (이동 오류가 많음)
수동 로봇 자세 입력 시 발생하는 사람의 오타를 시뮬레이션하기 위해, 정상 데이터셋의 한 자세에 큰 변환 오차를 도입했습니다. 변환 벡터의 X 값을 -742.58mm에서 -142.58mm로 변경했습니다(첫 번째 정수 자릿수: 7 → 1).
보정 결과는 다음과 같습니다.
0.609 |
0.177 |
0.773 |
-467.320 |
-0.109 |
0.984 |
-0.140 |
17.581 |
-0.785 |
0.001 |
0.619 |
794.894 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
11 |
2.855 |
10.677 |
102.330 |
405.720 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
1.685 |
405.720 |
2 |
1.816 |
90.325 |
3 |
0.215 |
74.578 |
4 |
1.901 |
143.061 |
5 |
2.296 |
21.398 |
6 |
10.678 |
94.157 |
7 |
5.541 |
102.133 |
8 |
0.235 |
40.173 |
9 |
3.979 |
48.811 |
10 |
1.894 |
76.962 |
11 |
1.177 |
28.309 |
Verification by Projection failed, which suggests that the hand-eye calibration is not correct, and that the touch test will fail badly. Therefore, the touch test was skipped for safety reasons.
비교
아래 표에서는 핸드-아이 캘리브레이션 행렬(변환 값)과 핸드-아이 캘리브레이션 잔차 간의 결과를 비교합니다.
데이터셋 |
X (mm) |
Y(mm) |
Z(mm) |
|---|---|---|---|
좋은 |
-55.598 |
-90.654 |
129.044 |
이동 오류 심각 |
-467.320 |
17.581 |
794.894 |
Δ (좋음 - 나쁨) |
411.722 |
-108.235 |
-665.850 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
좋은 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
이동 오류 심각 |
11 |
2.855 |
10.677 |
102.330 |
405.720 |
문제 재현 (미미한 핸드-아이 협응력 부족)
좋은 데이터셋
아래 이미지에 표시된 데이터 세트를 사용하여 핸드-아이 캘리브레이션이 성공적으로 수행되었습니다.
보정 결과는 다음과 같습니다.
0.999 |
-0.002 |
0.041 |
-55.598 |
0.001 |
0.999 |
0.028 |
-90.654 |
-0.041 |
-0.028 |
0.999 |
129.044 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
11 |
0.025 |
0.054 |
0.109 |
0.192 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
The Hand-Eye calibration was verified with a touch test.
터치 테스트가 성공적으로 완료되어 핸드-아이 캘리브레이션이 정확하고 정밀하게 조정되었음을 확인했습니다.
수동 로봇 자세 입력 시 발생하는 사람의 오타를 시뮬레이션하기 위해, 기존 데이터셋에 세 가지 다른 방식으로 오류를 도입하여 세 가지 새로운 데이터셋을 생성했습니다.
Small Angle Error
롤-피치-요 각도 중 한 포즈에서 작은 각도 오차(소수점 뒤 첫 번째 숫자)가 발생했습니다. 요 값은 6.82°에서 6.22°로 변경되었습니다(소수점 뒤 첫 번째 숫자 8 → 2).
The calibration resulted in the following hand-eye matrix and residuals:
0.999 |
-0.002 |
0.044 |
-57.032 |
0.001 |
1.000 |
0.029 |
-90.899 |
-0.044 |
-0.029 |
0.999 |
129.580 |
0 |
0 |
0 |
1 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
작은 각도 오차 |
11 |
0.104 |
0.536 |
0.256 |
0.877 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.536334 |
0.877 |
2 |
0.055345 |
0.431 |
3 |
0.057495 |
0.189 |
4 |
0.064677 |
0.301 |
5 |
0.054738 |
0.115 |
6 |
0.059730 |
0.029 |
7 |
0.070040 |
0.238 |
8 |
0.062262 |
0.119 |
9 |
0.060767 |
0.069 |
10 |
0.060585 |
0.288 |
11 |
0.062108 |
0.160 |
Comparison with Good Dataset
데이터셋 |
X (mm) |
Y(mm) |
Z(mm) |
|---|---|---|---|
좋은 |
-55.598 |
-90.654 |
129.044 |
불량 (작은 각도 오차) |
-57.032 |
-90.899 |
129.580 |
Δ (좋음 - 나쁨) |
1.434 |
0.244 |
-0.536 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
좋은 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
불량 (작은 각도 오차) |
11 |
0.104 |
0.536 |
0.256 |
0.877 |
터치 테스트
터치 테스트 도구의 끝부분이 ArUco 마커를 너무 세게 누릅니다.
Large Angle Error
롤-피치-요 각도 중 하나에 대해 큰 각도 오차(첫 번째 자릿수)가 발생했습니다. 요 값은 6.93°에서 3.93°로 변경되었습니다(첫 번째 정수 자릿수 6 → 3).
The calibration resulted in the following hand-eye matrix and residuals:
0.999 |
0.005 |
0.047 |
-58.558 |
-0.006 |
1.000 |
0.029 |
-87.455 |
-0.047 |
-0.029 |
0.998 |
131.117 |
0 |
0 |
0 |
1 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
큰 각도 오차 |
11 |
0.505 |
2.742 |
0.966 |
4.393 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
2.742018 |
4.393 |
2 |
0.280878 |
1.050 |
3 |
0.269892 |
0.750 |
4 |
0.288396 |
1.053 |
5 |
0.291592 |
0.435 |
6 |
0.247856 |
0.691 |
7 |
0.315325 |
0.886 |
8 |
0.278548 |
0.410 |
9 |
0.297165 |
0.382 |
10 |
0.262904 |
0.314 |
11 |
0.285421 |
0.262 |
Comparison with Good Dataset
데이터셋 |
X (mm) |
Y(mm) |
Z(mm) |
|---|---|---|---|
좋은 |
-55.598 |
-90.654 |
129.044 |
불량 (큰 각도 오차) |
-58.558 |
-87.455 |
131.117 |
Δ (좋음 - 나쁨) |
2.960 |
-3.199 |
-2.073 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
좋은 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
불량 (큰 각도 오차) |
11 |
0.505 |
2.742 |
0.966 |
4.393 |
터치 테스트
터치 테스트 도구의 끝부분이 ArUco 마커에 닿지 않습니다.
Small Translation Error
한 포즈의 변환 벡터 값 중 하나에서 작은 변환 오류(소수점 뒤 첫 번째 숫자)가 발생했습니다. X 값이 -48.81에서 -48.21로 변경되었습니다(소수점 뒤 첫 번째 숫자 8 → 2).
The calibration resulted in the following hand-eye matrix and residuals:
0.999 |
-0.003 |
0.040 |
-54.871 |
0.002 |
1.000 |
0.029 |
-90.920 |
-0.040 |
-0.029 |
0.999 |
128.709 |
0 |
0 |
0 |
1 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
작은 이동 오류 |
11 |
0.027 |
0.059 |
0.160 |
0.388 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.025433 |
0.388 |
2 |
0.016149 |
0.270 |
3 |
0.021316 |
0.098 |
4 |
0.027773 |
0.197 |
5 |
0.013938 |
0.057 |
6 |
0.056120 |
0.154 |
7 |
0.018387 |
0.086 |
8 |
0.019042 |
0.230 |
9 |
0.031110 |
0.074 |
10 |
0.059334 |
0.167 |
11 |
0.014671 |
0.043 |
Comparison with Good Dataset
데이터셋 |
X (mm) |
Y(mm) |
Z(mm) |
|---|---|---|---|
좋은 |
-55.598 |
-90.654 |
129.044 |
이동 오류 (작은 이동 오류) |
-54.871 |
-90.920 |
128.709 |
Δ (좋음 - 나쁨) |
-0.727 |
0.265 |
0.335 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
좋은 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
이동 오류 (작은 이동 오류) |
11 |
0.027 |
0.059 |
0.160 |
0.388 |
터치 테스트
터치 테스트를 위한 도구는 ArUco 마커의 중심에 위치해야 합니다.