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

FORCE_AXIS

위치 범위를 확인할 축(X, Y, Z, Rx, Ry, Rz)입니다.

fTargetMin

float

위치 값의 최소 절대 임계값입니다.

fTargetMax

float

위치 값의 최대 절대 임계값입니다.

eForceReference

COORDINATE_SYSTEM

COORDINATE_SYSTEM_TOOL

위치 비교에 사용할 기준 좌표계(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을 사용하세요.