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`일 때만 유효) |
|
eTargetRef |
계산에 사용할 기준 좌표계(Reference Coordinate System)입니다. |
||
fTargetPos1 |
float[6] |
점 1번의 작업 공간(Task Space) 포즈입니다. |
|
fTargetPos2 |
float[6] |
점 2번의 작업 공간 포즈입니다. |
|
fTargetPos3 |
float[6] |
점 3번의 작업 공간 포즈입니다. |
|
fTargetPos4 |
float[6] |
점 4번의 작업 공간 포즈입니다(선택 사항). |
반환값
값 |
설명 |
|---|---|
결과 좌표계(원점과 자세)를 포즈 구조체로 나타낸 값입니다. |
참고
이 함수는 컨트롤러가 응답할 때까지 기다립니다.
반환된 포인터는 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점 평면 캘리브레이션을 할 때 사용합니다.