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

calc_coord

이 함수는 입력 포즈 최대 4개(fTargetPos1-fTargetPos4)와 입력 모드(nInputMode)로 새 사용자 직교 좌표계를 계산합니다. 기준 좌표계는 eTargetRef로 정의합니다. 이 기능은 컨트롤러 펌웨어 M2.5 이상에서 사용할 수 있습니다.

입력 점의 수와 모드에 따라 알고리즘이 X축, Y축, Z축 방향을 다음과 같이 결정합니다.

  • 점 1개(`nCnt = 1`) → 좌표계가 fTargetPos1의 포즈와 같습니다.

  • 점 2개(`nCnt = 2`) - nInputMode = 0: X축은 x1에서 x2로 향합니다. Z축은 현재 툴 Z 방향을 X축에 직교하는 평면에 투영한 방향입니다. 원점은 x1입니다. - nInputMode = 1: Z축은 x1의 Z 방향을 기준으로 정의하며, X축에 대해 직교화합니다.

  • 점 3개(`nCnt = 3`) → X축은 x1 → x2로 정의하고, Z축은 (x2 - x1)과 (x3 - x1)의 외적으로 정의합니다.

  • 점 4개(`nCnt = 4`) → 3점 정의와 같지만, 4번째 점을 사용해 방향을 보정합니다.

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

LPROBOT_POSE calc_coord(
    unsigned short nCnt,
    unsigned short nInputMode,
    COORDINATE_SYSTEM eTargetRef,
    float fTargetPos1[NUM_TASK],
    float fTargetPos2[NUM_TASK],
    float fTargetPos3[NUM_TASK],
    float fTargetPos4[NUM_TASK]
) {
    return _calc_coord(_rbtCtrl, nCnt, nInputMode, eTargetRef, fTargetPos1, fTargetPos2, fTargetPos3, fTargetPos4);
};

매개변수

매개변수 이름

자료형

기본값

설명

nCnt

unsigned short

입력 작업 포즈의 수(1-4)입니다.

nInputMode

unsigned short

모드 선택(`nCnt = 2`일 때만 유효)
0: 현재 툴 방향으로 Z축 정의
1: X1의 Z 방향으로 Z축 정의

eTargetRef

COORDINATE_SYSTEM

계산에 사용할 기준 좌표계(Reference Coordinate System)입니다.

fTargetPos1

float[6]

점 1번의 작업 공간(Task Space) 포즈입니다.

fTargetPos2

float[6]

점 2번의 작업 공간 포즈입니다.

fTargetPos3

float[6]

점 3번의 작업 공간 포즈입니다.

fTargetPos4

float[6]

점 4번의 작업 공간 포즈입니다(선택 사항).

반환값

값

설명

LPROBOT_POSE

결과 좌표계(원점과 자세)를 포즈 구조체로 나타낸 값입니다.

참고

이 함수는 컨트롤러가 응답할 때까지 기다립니다.

반환된 포인터는 CDRFLEx 객체 안의 저장 공간을 가리키며, 이 공간은 다른 DRFL 호출과 재연결 때마다 다시 사용됩니다. 다른 DRFL 함수를 호출하기 전에 구조체를 복사해 두세요. 인수가 3개인 ikin은 프로세스 안의 모든 CDRFLEx 객체가 공유하는 저장 공간에 결과를 반환합니다. ikin을 참고하세요. get_user_home을 제외하면 포인터는 NULL이 아닙니다. 실패 여부를 NULL 검사로 판단하지 마세요.

예제

float pos1[6] = { 200.f, 30.f, 150.f, 0.f, 0.f, 0.f };
float pos2[6] = { 300.f, 30.f, 150.f, 0.f, 0.f, 0.f };
float pos3[6] = { 300.f, 80.f, 150.f, 0.f, 0.f, 45.f };
float pos4[6] = { 200.f, 80.f, 150.f, 0.f, 0.f, 0.f };

LPROBOT_POSE new_user = drfl.calc_coord(
    4,                     // 4개 점 사용
    0,                     // 모드 0
    COORDINATE_SYSTEM_BASE,
    pos1, pos2, pos3, pos4
);

for (int i = 0; i < NUM_TASK; ++i)
    printf("%.1f\n", new_user->_fPosition[i]);

이 예제는 작업 공간 포즈 4개로 새 좌표계를 계산해 결과를 new_user에 반환하고, 계산된 원점과 축을 출력합니다. 주로 사용자 좌표계를 정의하거나 3점 평면 캘리브레이션을 할 때 사용합니다.