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

check_position_condition

이 함수는 지정한 축의 위치가 주어진 목표 위치를 기준으로 정의한 범위 안에 있는지 확인합니다. 절대 비교 모드와 상대 비교 모드를 모두 지원합니다.

eMode가 MOVE_MODE_RELATIVE이면 check_position_condition_rel처럼 동작합니다. eMode가 MOVE_MODE_ABSOLUTE이면 check_position_condition_abs처럼 동작합니다.

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

bool check_position_condition(FORCE_AXIS eForceAxis,
                              float fTargetMin,
                              float fTargetMax,
                              float fTargetPos[NUM_TASK],
                              MOVE_MODE eMode = MOVE_MODE_ABSOLUTE,
                              COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL) {
    return _check_position_condition(_rbtCtrl, eForceAxis, fTargetMin, fTargetMax, fTargetPos, eMode, eForceReference);
};

매개변수

매개변수 이름

자료형

기본값

설명

eForceAxis

FORCE_AXIS

위치 조건을 확인할 축(X, Y, Z 또는 회전축 Rx, Ry, Rz)입니다.

fTargetMin

float

위치 비교의 최소 임계값입니다.

fTargetMax

float

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

fTargetPos

float[6]

비교 기준이 되는 목표 작업 위치(X, Y, Z, Rx, Ry, Rz)입니다.

eMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

비교 모드를 지정합니다
MOVE_MODE_ABSOLUTE: eForceReference에서 현재 위치를 fTargetMin, fTargetMax와 비교합니다.
MOVE_MODE_RELATIVE: 목표 위치에 대한 편차를 비교합니다.

eForceReference

COORDINATE_SYSTEM

COORDINATE_SYSTEM_TOOL

비교에 사용할 기준 좌표계(BASE, TOOL, WORLD 등)입니다.

반환값

값

설명

1

조건 True — 위치가 정의한 범위 안에 있습니다.

0

조건 False — 위치가 정의한 범위 밖에 있습니다.

예제 A — 수동 모드(교시 위치 검증)

// 사전 조건: 연결됨, 서보 온, 교시 모드 활성

// 기준 목표 포즈 정의
float targetPose[6] = {400.f, 500.f, 600.f, 0.f, 180.f, 0.f};

// 1) 목표 대비 Z축 상대 오프셋 확인(±5 mm)
bool relCond = drfl.check_position_condition(FORCE_AXIS_Z, -5.f, 5.f, targetPose, MOVE_MODE_RELATIVE);

// 2) BASE 좌표계에서 X축 절대 위치 범위 확인
bool absCond = drfl.check_position_condition(FORCE_AXIS_X, 100.f, 200.f, targetPose, MOVE_MODE_ABSOLUTE, COORDINATE_SYSTEM_BASE);

printf("Relative condition (Z): %s\n", relCond ? "TRUE" : "FALSE");
printf("Absolute condition (X): %s\n", absCond ? "TRUE" : "FALSE");

예제 B — 자동 모드(공정 접근 감지)

// 사전 조건:
// - 자동 모드 활성
// - 로봇이 접근 동작 실행 중

// 삽입 목표 포즈 정의
float targetPose[NUM_TASK] = {550.f, 200.f, 80.f, 180.f, 0.f, 0.f};

// 목표 근처로 이동
float vel[2] = {80.f, 25.f}, acc[2] = {300.f, 100.f};
drfl.movel(targetPose, vel, acc);
drfl.mwait();

// Z 위치가 목표의 ±3 mm 이내인지 확인(상대 검사)
bool inRange = drfl.check_position_condition(FORCE_AXIS_Z, -3.f, 3.f, targetPose, MOVE_MODE_RELATIVE, COORDINATE_SYSTEM_TOOL);

if (inRange)
    printf("Robot has reached insertion tolerance zone.\n");
else
    printf("Robot not yet in target range.\n");

// 범위 이내이면 다음 힘 제어 삽입 단계로 진행
if (inRange) {
    float fForce[6] = {0.f, 0.f, 20.f, 0.f, 0.f, 0.f};
    unsigned char dir[6] = {0, 0, 1, 0, 0, 0};
    drfl.set_desired_force(fForce, dir, COORDINATE_SYSTEM_TOOL, 0.3f);
}

참고 사항 및 모범 사례

  • 작업 영역을 확인할 때는 MOVE_MODE_ABSOLUTE와 eForceReference = COORDINATE_SYSTEM_BASE를 사용하세요.

  • 접근 정밀도, 미세 모션 정렬, 접촉 허용 오차 확인에는 MOVE_MODE_RELATIVE를 사용하세요.

  • MOVE_MODE_RELATIVE에서는 fTargetPos를 BASE 좌표계로 지정하세요.

  • 이 함수는 조건만 평가하며, 모션 명령을 실행하지 않습니다.

  • 힘-위치 하이브리드 제어에는 check_force_condition과 함께 사용하세요.

  • 연속으로 확인하려면 모션 루프나 피드백 루프 안에서 주기적으로(50–200 ms마다) 호출하세요.