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

check_position_condition_rel

이 함수는 지정한 축의 상대 위치가 정의한 목표 위치를 기준으로 주어진 범위 안에 있는지 확인합니다. 제어 루프(예: while, if) 안에서 계속 호출해 실시간 모션 조건을 확인할 수 있습니다.

축과 목표 위치 값은 set_ref_coord로 정의한 기준 좌표계(Reference Coordinate System)에 따라 해석합니다. eForceReference를 COORDINATE_SYSTEM_TOOL로 설정한 경우 fTargetPos는 BASE 좌표계로 나타내야 합니다.

절대 위치 비교는 check_position_condition_abs를 참고하세요.

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

bool check_position_condition_rel(FORCE_AXIS eForceAxis,
                                  float fTargetMin,
                                  float fTargetMax,
                                  float fTargetPos[NUM_TASK],
                                  COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL) {
    return _check_position_condition_rel(_rbtCtrl, eForceAxis, fTargetMin, fTargetMax, fTargetPos, eForceReference);
};

매개변수

매개변수 이름

자료형

기본값

설명

eForceAxis

FORCE_AXIS

평가할 축(X, Y, Z 또는 Rx, Ry, Rz)입니다.

fTargetMin

float

목표 위치로부터 허용하는 최소 편차 [mm 또는 deg]입니다.

fTargetMax

float

목표 위치로부터 허용하는 최대 편차 [mm 또는 deg]입니다.

fTargetPos

float[6]

6개 작업 좌표로 나타낸 기준 목표 위치입니다.

eForceReference

COORDINATE_SYSTEM

COORDINATE_SYSTEM_TOOL

상대 비교에 사용할 기준 좌표계입니다.

반환값

값

설명

1

조건 True — 현재 위치가 범위 안에 있습니다.

0

조건 False — 현재 위치가 범위 밖에 있습니다.

예제 A — 수동 모드(교시 중 위치 편차 확인)

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

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

// 2) 현재 X 위치가 목표의 ±5 mm 이내인지 확인
bool cond = drfl.check_position_condition_rel(FORCE_AXIS_X, -5.f, 5.f, posTarget, COORDINATE_SYSTEM_TOOL);

printf("Relative X-position condition: %s\n", cond ? "TRUE" : "FALSE");

예제 B — 자동 모드(삽입 접근 검증)

// 사전 조건:
// - 자동 모드 활성
// - 로봇이 순응 제어 상태로 목표에 접근 중

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

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

// 3) Z축 방향 상대 위치 조건 확인
bool bApproached = drfl.check_position_condition_rel(FORCE_AXIS_Z, -3.f, 2.f, targetPose, COORDINATE_SYSTEM_TOOL);

if (bApproached)
    printf("Robot within insertion tolerance range.\n");
else
    printf("Robot not yet in range.\n");

// 4) 범위 이내이면 다음 작업 진행(예: 힘 제어 삽입)
if (bApproached) {
    float fTarget[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(fTarget, dir, COORDINATE_SYSTEM_TOOL, 0.3f);
}

참고 사항 및 모범 사례

  • 미세 접근 감지, 정렬 확인, 위치 안전 임계값에는 check_position_condition_rel()을 사용하세요.

  • COORDINATE_SYSTEM_TOOL을 사용할 때는 fTargetPos를 항상 BASE 좌표로 정의하세요.

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

  • 자동 모드에서는 제어 루프나 조건 확인 안에서 호출해 다음 모션이나 작업 단계를 동적으로 시작할 수 있습니다.

  • 절대 좌표 비교에는 check_position_condition_abs를 사용하세요.