check_position_condition_abs
이 함수는 지정한 축의 절대 위치가 정의한 범위 안에 있는지 확인합니다. 조건문(예: while, if) 안에서 반복해서 평가할 수 있으므로, 교시와 자동 운용 모두에서 위치 조건을 확인할 수 있습니다.
입력한 축과 범위는 eForceReference가 지정하는 좌표계를 기준으로 해석합니다. eForceReference가 COORDINATE_SYSTEM_TOOL이면 fTargetMin과 fTargetMax를 TOOL 좌표계의 축을 따라 측정한 TCP 위치와 비교합니다.
상대 위치 확인은 check_position_condition_rel을 참고하세요.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool check_position_condition_abs(FORCE_AXIS eForceAxis,
float fTargetMin,
float fTargetMax,
COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL) {
return _check_position_condition_abs(_rbtCtrl, eForceAxis, fTargetMin, fTargetMax, eForceReference);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
eForceAxis |
위치 범위를 확인할 축(X, Y, Z, Rx, Ry, Rz)입니다. |
||
fTargetMin |
float |
위치 값의 최소 절대 임계값입니다. |
|
fTargetMax |
float |
위치 값의 최대 절대 임계값입니다. |
|
eForceReference |
|
위치 비교에 사용할 기준 좌표계(TOOL, BASE 또는 WORLD)입니다. |
반환값
값 |
설명 |
|---|---|
1 |
조건 True — 현재 위치가 범위 안에 있습니다. |
0 |
조건 False — 현재 위치가 범위 밖에 있습니다. |
예제 A — 수동 모드(교시 위치 검증)
// 사전 조건: 연결됨, 서보 온, 교시 모드 활성
// 1) 위치 조건이 정의한 범위 이내인지 확인
bool cx = drfl.check_position_condition_abs(FORCE_AXIS_X, 300.f, 400.f, COORDINATE_SYSTEM_BASE);
bool cy = drfl.check_position_condition_abs(FORCE_AXIS_Y, -500.f, 500.f);
bool cz = drfl.check_position_condition_abs(FORCE_AXIS_Z, 100.f, 200.f);
printf("Check X,Y,Z positions: %d %d %d\n", cx, cy, cz);
예제 B — 자동 모드(공정 위치 모니터링)
// 사전 조건:
// - 자동 모드 활성
// - 로봇이 자동 위치 결정 실행 중
// 1) 목표 지점으로 이동
float p_target[NUM_TASK] = {550.f, 200.f, 120.f, 180.f, 0.f, 0.f};
float vel[2] = {100.f, 30.f}, acc[2] = {400.f, 150.f};
drfl.movel(p_target, vel, acc);
drfl.mwait();
// 2) 삽입 준비를 위한 위치 범위 확인
bool withinZ = drfl.check_position_condition_abs(FORCE_AXIS_Z, 90.f, 130.f, COORDINATE_SYSTEM_TOOL);
bool withinY = drfl.check_position_condition_abs(FORCE_AXIS_Y, 180.f, 220.f, COORDINATE_SYSTEM_BASE);
if (withinZ && withinY)
printf("Robot within safe approach zone.\n");
else
printf("Robot out of expected range — check target alignment.\n");
// 3) 범위 이내이면 힘 제어 삽입 진행
if (withinZ && withinY) {
float fTarget[6] = {0.f, 0.f, 25.f, 0.f, 0.f, 0.f};
unsigned char dir[6] = {0, 0, 1, 0, 0, 0};
drfl.set_desired_force(fTarget, dir, COORDINATE_SYSTEM_TOOL, 0.3f);
}
참고 사항 및 모범 사례
check_position_condition_abs()로 작업 영역 한계, 접근 검증, 안전 임계값을 확인하세요.목표와 기준의 좌표계가 일치하는지(TOOL과 BASE) 항상 확인하세요.
위치-힘 하이브리드 제어 로직에는 check_force_condition과 함께 사용하세요.
자동 모드에서는 위치 조건을 동적으로 확인해 다음 모션 단계를 시작할 수 있습니다.
상대 편차(예: 목표 포즈로부터의 오프셋)를 확인하려면 check_position_condition_rel을 사용하세요.