이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

coord_transform (수동 모드)

이 절에서는 수동(교시) 작업 중에 coord_transform을 사용하는 방법을 설명합니다. 이 함수는 주어진 포즈(위치 + 자세)를 한 좌표계에서 다른 좌표계로 변환합니다. 예를 들어 BASE에서 USER로, 또는 TOOL에서 WORLD로 변환합니다.

수동 교시 중에 이 함수는 주로 좌표계 정의를 검증하거나, 변환이 일관된지 확인하거나, set_user_cart_coord1로 좌표계 캘리브레이션을 확정하기 전에 측정한 점이 다른 기준 좌표계에서 어떻게 나타나는지 미리 볼 때 사용합니다.

일반적인 사용법

  • BASE 좌표계에서 얻은 포즈를 USER 좌표계로 변환해 검증합니다.

  • 서로 다른 기준 좌표계에서 두 포즈를 비교합니다.

  • 계산한 사용자 좌표계가 예상한 작업물 형상과 맞는지 확인합니다.

  • 영구 좌표계 데이터에 저장하기 전에 포즈 관계를 미리 확인합니다.

참고

  • 입력과 출력은 모두 [X, Y, Z, Rx, Ry, Rz] 순서의 ROBOT_TASK_POSE 또는 float[6] 배열입니다.

  • 원본 좌표계와 대상 좌표계는 BASE, TOOL, WORLD 또는 정의된 USER 좌표계일 수 있습니다.

  • 이 함수는 수학적 변환만 하며, 컨트롤러의 활성 좌표계를 바꾸지 않습니다.

  • calc_coord와 함께 사용해 계산한 좌표계를 저장하기 전에 검증하세요.

예제: 측정한 포즈를 BASE → USER 좌표계로 변환

// 1단계. 로봇이 수동 모드이고 서보 온 상태이며
// 사용자 좌표계(ID 101)가 미리 정의되어 있다고 가정합니다.
printf("Verifying pose transformation between BASE and user frame 101...\n");

// 2단계. BASE 좌표계 기준 현재 TCP 포즈 가져오기
LPROBOT_TASK_POSE pBasePose = drfl.get_current_posx(COORDINATE_SYSTEM_BASE);
printf("[BASE Pose]\n");
printf("X: %.3f, Y: %.3f, Z: %.3f | Rx: %.3f, Ry: %.3f, Rz: %.3f\n",
       pBasePose->_fTargetPos[0], pBasePose->_fTargetPos[1], pBasePose->_fTargetPos[2],
       pBasePose->_fTargetPos[3], pBasePose->_fTargetPos[4], pBasePose->_fTargetPos[5]);

// 3단계. 해당 포즈를 USER 좌표계로 변환(임시 확인)
LPROBOT_POSE pUserPose =
    drfl.coord_transform(pBasePose->_fTargetPos, COORDINATE_SYSTEM_BASE, COORDINATE_SYSTEM_USER_MIN);

// 4단계. 비교를 위해 변환된 포즈 표시
printf("\n[Transformed Pose - USER Frame]\n");
printf("x: %.3f, y: %.3f, z: %.3f | rx: %.3f, ry: %.3f, rz: %.3f\n",
       pUserPose->_fPosition[0], pUserPose->_fPosition[1], pUserPose->_fPosition[2],
       pUserPose->_fPosition[3], pUserPose->_fPosition[4], pUserPose->_fPosition[5]);

// 5단계. 선택 사항: USER → BASE로 다시 변환해 검증
LPROBOT_POSE pBaseCheck =
    drfl.coord_transform(pUserPose->_fPosition, COORDINATE_SYSTEM_USER_MIN, COORDINATE_SYSTEM_BASE);

printf("\n[Re-Transformed Pose - BASE Frame]\n");
printf("X: %.3f, Y: %.3f, Z: %.3f | Rx: %.3f, Ry: %.3f, Rz: %.3f\n",
       pBaseCheck->_fPosition[0], pBaseCheck->_fPosition[1], pBaseCheck->_fPosition[2],
       pBaseCheck->_fPosition[3], pBaseCheck->_fPosition[4], pBaseCheck->_fPosition[5]);

팁

  • 새 사용자 좌표계를 교시한 후 이 함수로 좌표계가 올바른지 수치로 검증하세요.

  • 알려진 기준점의 변환 위치가 어긋나거나 회전되어 보이면 calc_coord에 사용한 입력 순서를 다시 확인하세요.

  • 교시 중에는 컨트롤러 메모리에 저장하기 전에 coord_transform으로 미리 확인하는 것을 권장합니다.

  • get_current_rotm과 함께 사용해 좌표계 간 자세가 일관된지 확인하세요.