핸드-아이 캘리브레이션 결과 불량 (로봇 캘리브레이션 오류: DH 파라미터)
문제
핸드-아이 캘리브레이션 결과가 만족스럽지 못합니다 (나쁘거나 미흡함). 결과는 다음과 같은 조합들 사이의 어딘가에 있는 것처럼 보입니다.
핸드-아이 캘리브레이션 변환 |
핸드-아이 캘리브레이션 잔차 |
프로젝션 검증 |
터치 테스트 |
|---|---|---|---|
합리적인 |
나쁜 |
나쁜 |
나쁜 |
합리적인 |
보통 |
불량함 |
나쁜 |
잘못된 핸드-아이 캘리브레이션 결과의 예
핸드-아이 캘리브레이션 행렬은 합리적이며 대략적인 수동 측정에서 예상되는 결과와 일치합니다 (아래 표 및 이미지 참조).
0.999 |
-0.006 |
0.045 |
-51.743 |
0.006 |
1.000 |
0.012 |
-89.999 |
-0.045 |
-0.012 |
0.999 |
126.972 |
0 |
0 |
0 |
1 |
보정 잔차가 예상보다 상당히 크며, 대략 한 자릿수 정도 높습니다.
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
14 |
0.093 |
0.131 |
0.793 |
1.418 |
소형 로봇의 경우 잔차가 1mm 미만 범위에 있을 것으로 예상되며, 대형 로봇의 경우 잔차가 1mm 범위에 있을 수 있습니다. 잔차의 회전 성분은 1도 미만 범위에 있을 것으로 예상됩니다.
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.065 |
0.183 |
2 |
0.125 |
0.937 |
3 |
0.063 |
0.897 |
4 |
0.099 |
0.906 |
5 |
0.107 |
0.890 |
6 |
0.031 |
0.368 |
7 |
0.069 |
0.999 |
8 |
0.103 |
1.418 |
9 |
0.116 |
0.917 |
10 |
0.099 |
0.989 |
11 |
0.094 |
0.060 |
12 |
0.122 |
0.377 |
13 |
0.089 |
0.917 |
14 |
0.131 |
1.250 |
프로젝션 검증은 기술적으로는 성공적이지만, 결과적인 오차가 여전히 허용 가능한 수준을 넘어섰습니다. 프로젝션 검증은 매우 신중하게 접근해야 하는데, 핸드-아이 캘리브레이션이 잘못되었더라도 프로젝션 오차가 허용 가능한 것처럼 보일 수 있기 때문입니다.
터치 테스트 결과가 만족스럽지 않습니다. 예를 들어, 터치 테스트 도구의 끝부분이 ArUco 마커에 닿지 않습니다.
잠재적 원인
로봇 보정 DH 매개변수가 부정확하거나 잘못되었습니다.
그 이유는 대개 다음과 같습니다.
특정 보정된 로봇에 대한 매개변수 대신 명목상의 DH 매개변수가 사용됩니다.
로봇이 보정되지 않았습니다.
DH 파라미터는 각 관절마다 하나의 동차 변환 행렬을 사용하여 로봇의 운동학적 체인의 기하학적 구조를 체계적으로 기술하는 방법입니다. 이 파라미터는 각 관절당 정확히 네 개의 숫자를 사용하여 각 링크가 이전 링크에 대해 어떻게 위치하는지를 정의합니다. 이것이 순방향 운동학을 계산하는 기초가 됩니다.
일반적으로 로봇의 DH 매개변수는 언제 보정해야 합니까?
고객님께서는 공장 출하 시 보정이 되어 있지 않은 새 로봇을 받으셨습니다(대부분의 주요 로봇 제품).
귀하의 로봇은 진정한 보정 (절대 정확도 또는 향상된 정확도 라고도 함) 을 갖추고 있지 않습니다.
로봇이 기계적 손상을 입었습니다.
기하학적 구조를 변경하는 기계 부품을 교체한 후.
이 로봇은 높은 정확도가 요구되는 분야에 사용될 예정입니다.
작업 공간 전체에 걸쳐 체계적인 위치 오류가 발생하는 것을 발견했습니다.
잠재적 해결책
핸드-아이 캘리브레이션 과정 (정방향 운동학을 사용하여 관절 각도로부터 로봇 자세를 계산하는 과정)에서 올바른 DH 매개변수가 사용되는지 확인하십시오.
로봇이 보정된 경우, 명목상의 매개변수가 아닌 특정 로봇에 맞는 DH 매개변수를 사용하십시오.
로봇이 보정되지 않은 경우, 정확한 DH 매개변수를 얻으려면 로봇을 보정하십시오.
동일한 데이터셋을 사용하여 핸드-아이 캘리브레이션을 반복합니다.
핸드-아이 캘리브레이션 결과(변환, 잔차, 프로젝션)를 확인합니다.
(핸드-아이 캘리브레이션 결과가 양호한 경우) 터치 테스트를 실행합니다.
문제 재현 방법 (로봇 캘리브레이션 오류)
세 가지 손-눈 협응력 캘리브레이션 테스트를 다루고, DH 매개변수의 차이와 비교합니다.
잘못된 DH 매개변수(수정된 값: d5 = d5 + 5 mm)
잘못된 DH 매개변수 (명목값)
양호한 DH 파라미터(로봇 컨트롤러에서 불러온 값)
Universal Robots UR5e 로봇은 RoboDK 소프트웨어와 함께 사용되었으며, 이 소프트웨어를 통해 로봇 컨트롤러에서 DH 매개변수를 불러와 수정할 수 있습니다. 또한, RoboDK 라이브러리에는 UR5e 로봇의 기본 DH 매개변수가 포함되어 있습니다.
이 섹션에서 다루는 모든 핸드-아이 캘리브레이션은 아래 이미지에 표시된 데이터 세트를 사용하여 수행되었습니다.
잘못된 DH 매개변수(수정된 값: d5 = d5 + 5 mm)
이 테스트는 로봇 보정 오류 또는 보정 손실로 인해 DH 매개변수가 잘못된 경우를 시뮬레이션합니다.
DH 파라미터를 RoboDK 소프트웨어에 로드하고 의도적으로 수정했습니다. 즉, 링크 d5를 5mm 연장했습니다. 그런 다음 수정된 DH 파라미터를 사용하여 관절 좌표로부터 핸드-아이 캘리브레이션을 위한 로봇 포즈를 계산했습니다. 로봇은 이 관절 좌표를 이용하여 해당 포즈로 이동했습니다.
보정 결과는 다음과 같습니다.
0.999 |
-0.005 |
0.043 |
-55.557 |
0.004 |
1.000 |
0.013 |
-91.703 |
-0.043 |
-0.013 |
0.999 |
123.231 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
14 |
0.019 |
0.031 |
0.145 |
0.259 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.026 |
0.115 |
2 |
0.018 |
0.192 |
3 |
0.020 |
0.110 |
4 |
0.029 |
0.259 |
5 |
0.023 |
0.229 |
6 |
0.011 |
0.078 |
7 |
0.012 |
0.132 |
8 |
0.016 |
0.073 |
9 |
0.015 |
0.075 |
10 |
0.008 |
0.061 |
11 |
0.024 |
0.226 |
12 |
0.018 |
0.155 |
13 |
0.031 |
0.149 |
14 |
0.028 |
0.175 |
프로젝션 검증은 기술적으로는 성공했지만, 발생한 오차가 허용 범위를 넘어 너무 컸습니다. 프로젝션 검증은 매우 신중하게 접근해야 하는데, 핸드-아이 캘리브레이션이 잘못되었더라도 프로젝션 오차가 허용 가능한 수준으로 보일 수 있기 때문입니다.
터치 테스트 도구의 끝부분이 ArUco 마커에 닿지 않아 터치 테스트 결과가 만족스럽지 못했습니다.
DH 매개변수(공칭값)
이 테스트는 잘못된 DH 매개변수를 사용하는 상황을 시뮬레이션합니다. 이를 위해 로봇 컨트롤러에서 가져온 매개변수 대신 명목상의 DH 매개변수를 사용했습니다.
그런 다음, 공칭 DH 매개변수를 사용하여 관절 좌표로부터 핸드-아이 보정을 위한 로봇 자세를 계산했습니다. 로봇은 관절 좌표를 이용하여 해당 자세로 이동했습니다.
RoboDK는 (새로 생성된 로봇 스테이션에서) 명목상의 DH 파라미터를 사용하여 관절 공간에 정의된 로봇 포즈 목표에 대한 순방향 운동학을 계산합니다. 만약 다른 소프트웨어를 사용하여 순방향 운동학을 계산한다면, 명목상의 DH 파라미터를 사용하게 될 수도 있는데, 이는 바람직하지 않을 수 있습니다. 명목상의 DH 보정을 사용한다는 것은 사실상 로봇이 보정되지 않았다고 가정하는 것과 같습니다.
참고
핸드-아이 캘리브레이션을 위한 로봇 포즈는 직교 좌표계로 제공되어야 합니다. 하지만 데이터셋을 수집할 때는 관절 좌표계로 로봇 포즈를 정의하고 movej 명령어를 사용하여 로봇을 이동시키는 것이 더 편리합니다. 관절 좌표계에서 로봇 포즈 간의 이동은 결정론적이기 때문입니다.
또 다른 방법은 로봇 자세를 카테시안 공간(Cartesian space)에서 정의하고 이를 그대로 로봇 컨트롤러에 전달하는 것입니다. 그러면 로봇 컨트롤러는 목표 자세로 관절을 구동하기 위해 필요한 역기구학 (inverse kinematics) 을 사용하여 해당하는 관절 좌표를 계산합니다. 그러나 역기구학은 여러 개의 해를 생성할 수 있으므로 추가적인 복잡성이 발생합니다. 어떤 해가 선택되는지를 제어할 수 없으면 원하지 않는 로봇 동작 (“닌자 무브”, ninja moves) 이 발생할 수 있습니다. 이를 방지하려면 자체적으로 역기구학을 구현하거나, 여러 해 (로봇 구성, robot configuration) 중 하나를 선택하는 로직을 구현해야 합니다.
보정 결과는 다음과 같습니다.
0.999 |
-0.006 |
0.045 |
-51.743 |
0.006 |
1.000 |
0.012 |
-89.999 |
-0.045 |
-0.012 |
0.999 |
126.972 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
14 |
0.093 |
0.131 |
0.793 |
1.418 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.065 |
0.183 |
2 |
0.125 |
0.937 |
3 |
0.063 |
0.897 |
4 |
0.099 |
0.906 |
5 |
0.107 |
0.890 |
6 |
0.031 |
0.368 |
7 |
0.069 |
0.999 |
8 |
0.103 |
1.418 |
9 |
0.116 |
0.917 |
10 |
0.099 |
0.989 |
11 |
0.094 |
0.060 |
12 |
0.122 |
0.377 |
13 |
0.089 |
0.917 |
14 |
0.131 |
1.250 |
프로젝션 검증은 기술적으로는 성공했지만, 결과적인 오차가 허용 가능한 수준을 넘어 너무 컸습니다. 프로젝션 검증은 매우 신중하게 접근해야 하는데, 핸드-아이 캘리브레이션이 잘못되었더라도 프로젝션 오차가 허용 가능한 것처럼 보일 수 있기 때문입니다.
터치 테스트 도구의 끝부분이 ArUco 마커에 닿지 않아 터치 테스트 결과가 만족스럽지 못했습니다.
양호한 DH 파라미터(로봇 컨트롤러에서 불러온 값)
이 테스트는 올바른 DH 파라미터 사용 방법을 보여줍니다. 이를 위해 특정 로봇에 대한 DH 파라미터를 로봇 컨트롤러에서 불러왔습니다. 이 DH 파라미터는 동일한 로봇의 기본 파라미터와는 다릅니다.
UR5e에서 URP 파일(DH 매개변수 포함)을 가져와 RoboDK에 로드하는 방법
UR5e의 경우, 로봇 캘리브레이션(DH 파라미터)은 모든 URP 프로그램 파일에 포함되어 있습니다. 따라서 올바른 DH 파라미터를 RoboDK 스테이션에 적용하려면 로봇에서 URP 파일을 가져와 RoboDK에 로드해야 합니다. 결과적으로 RoboDK는 올바른 DH 파라미터를 사용하여 관절 공간에 정의된 로봇 포즈 목표에 대한 순방향 운동학을 계산합니다. 순방향 운동학 계산에 다른 소프트웨어를 사용하는 경우, 로봇에서 DH 파라미터를 로드하는 방법도 찾아야 할 수 있습니다.
로봇에서 URP 프로그램을 얻으려면 다음 방법을 사용할 수 있습니다.
옵션 A: USB 키 (로봇 티칭 펜던트에 장착)
로봇에 USB 메모리를 삽입하세요.
티칭 펜던트에서 → 프로그램 → 열기를 선택하세요.
프로그램 선택 → 다른 이름으로 저장 → USB 저장 장치 선택.
.urp파일을 PC에 복사하세요.
옵션 B: SSH / SFTP
로봇의 IP 주소를 사용하여 SSH/SFTP로 접속하세요. 로봇의 IP 주소는 ‘About’ 메뉴에서 확인할 수 있습니다. RoboDK
프로그램 디렉토리(일반적으로
/programs)로 이동합니다..urp파일을 다운로드하세요.
RoboDK에는 컨트롤러의 실제 DH 매개변수를 시뮬레이션에 로드하는 예제 Python 스크립트가 포함되어 있습니다.
UR_LoadControllerKinematics.py (RoboDK-API)
RoboDK-API
단계:
RoboDK를 엽니다.
도구 → 스크립트 실행으로 이동…
UR_LoadControllerKinematics.py파일을 다음 위치에서 로드하세요:
RoboDK-API/Python/Examples/Scripts/UR_LoadControllerKinematics.py
스크립트가 실행될 때:
RoboDK 내에서 로봇을 선택하라는 메시지가 표시됩니다.
그다음에는 URP 파일을 선택하라는 메시지가 나타납니다.
RoboDK 튜토리얼: 로봇 운동학 업데이트 - RoboDK 문서
그런 다음 로드된 DH 매개변수를 사용하여 관절 좌표로부터 핸드-아이 캘리브레이션을 위한 로봇 자세를 계산했습니다. 로봇을 관절 좌표를 이용하여 해당 자세로 이동시킨 후 핸드-아이 캘리브레이션을 수행했습니다.
보정 결과는 다음과 같습니다.
0.999 |
-0.004 |
0.043 |
-55.936 |
0.003 |
1.000 |
0.013 |
-91.920 |
-0.043 |
-0.013 |
0.999 |
129.087 |
0 |
0 |
0 |
1 |
N (포즈) |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|
14 |
0.022 |
0.035 |
0.180 |
0.338 |
전체 잔차
포즈 |
회전 (°) |
이동 (mm) |
|---|---|---|
1 |
0.025 |
0.146 |
2 |
0.016 |
0.197 |
3 |
0.019 |
0.166 |
4 |
0.031 |
0.338 |
5 |
0.031 |
0.236 |
6 |
0.006 |
0.060 |
7 |
0.010 |
0.154 |
8 |
0.016 |
0.102 |
9 |
0.031 |
0.147 |
10 |
0.009 |
0.145 |
11 |
0.030 |
0.249 |
12 |
0.024 |
0.151 |
13 |
0.035 |
0.255 |
14 |
0.031 |
0.169 |
프로젝션을 통한 검증이 성공적이었습니다.
이후 터치 테스트를 통해 핸드-아이 캘리브레이션을 검증했습니다.
터치 테스트가 성공적으로 완료되어 핸드-아이 캘리브레이션이 정확하고 정밀하게 조정되었음을 확인했습니다.
비교
아래 표에서는 핸드-아이 캘리브레이션 행렬(변환 값)과 핸드-아이 캘리브레이션 잔차 간의 결과를 비교합니다.
데이터셋 |
X (mm) |
Y(mm) |
Z(mm) |
|---|---|---|---|
좋습니다 (로봇에서 적재됨) |
-55.936 |
-91.920 |
129.087 |
나쁜 (명목상) |
-51.743 |
-89.999 |
126.972 |
나쁜 (수정됨) |
-55.557 |
-91.703 |
123.231 |
Δ (양호 - 불량 명목값) |
-4.193 |
-1.921 |
2.115 |
Δ (좋은 결과 - 나쁜 결과 수정) |
-0.379 |
-0.217 |
5.856 |
데이터셋 |
N |
회전 평균 (°) |
최대 회전각(°) |
이동 평균(mm) |
최대 이동 거리(mm) |
|---|---|---|---|---|---|
좋습니다 (로봇에서 적재됨) |
14 |
0.022 |
0.035 |
0.180 |
0.338 |
나쁜 (명목상) |
14 |
0.093 |
0.131 |
0.793 |
1.418 |
나쁜 (수정됨) |
14 |
0.019 |
0.031 |
0.145 |
0.259 |