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

check_force_condition

이 함수는 지정한 축의 측정된 외력(External Force) 또는 토크가 사용자가 정의한 범위 안에 있는지 확인합니다(방향과 무관하게 크기 기준). while이나 if 문 안에서 반복해서 평가할 수 있으므로, 교시 모드와 자동 운용 모드(Operation Mode) 모두에서 조건 로직을 구현할 수 있습니다.

힘을 측정할 때는 set_ref_coord로 정의한 기준 좌표계(Reference Coordinate System)를 기준으로 eForceAxis를 해석합니다. 모멘트를 확인할 때는 eForceAxis가 툴 좌표계를 따릅니다.

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

bool check_force_condition(FORCE_AXIS eForceAxis,
                           float fTargetMin,
                           float fTargetMax,
                           COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL) {
    return _check_force_condition(_rbtCtrl, eForceAxis, fTargetMin, fTargetMax, eForceReference);
};

매개변수

매개변수 이름

자료형

기본값

설명

eForceAxis

FORCE_AXIS

힘이나 토크를 확인할 축(예: FORCE_AXIS_X, Y, Z, Rx, Ry, Rz)입니다.

fTargetMin

float

측정한 크기의 최소 임계값입니다.

fTargetMax

float

측정한 크기의 최대 임계값입니다.

eForceReference

COORDINATE_SYSTEM

COORDINATE_SYSTEM_TOOL

측정값을 해석할 기준 좌표계입니다.

반환값

값

설명

1

조건 True — 현재 힘/토크 크기가 범위 안에 있습니다.

0

조건 False — 현재 힘/토크 크기가 범위 밖에 있습니다.

예제 A — 수동 모드(교시 중 힘 검증)

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

// 1) Z축 힘을 계속 감시(TOOL 좌표계)
bool fCond = false;
while (true) {
    fCond = drfl.check_force_condition(FORCE_AXIS_Z, 5.f, 10.f, COORDINATE_SYSTEM_TOOL);
    if (fCond) {
        printf("Force condition met: 5–10 N on Z-axis.\n");
        break;
    }
}

// 접촉을 감지하면 교시 시퀀스 계속

예제 B — 자동 모드(힘 기반 삽입 트리거)

// 사전 조건:
// - 자동 모드 활성
// - 힘 감지를 활성화한 상태로 로봇이 동작 중

// 1) 삽입 지점에 접근
float p_target[NUM_TASK] = {550.f, 200.f, 100.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);

// 2) Z축에서 충분한 접촉력이 감지될 때까지 대기
bool contact = false;
while (!contact) {
    contact = drfl.check_force_condition(FORCE_AXIS_Z, 15.f, 30.f, COORDINATE_SYSTEM_TOOL);
}

printf("Contact detected (Z-force 15–30 N). Proceeding to next step.\n");

// 3) 접촉을 감지하면 힘 제어 적용
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_force_condition()은 힘이나 토크의 절댓값 크기를 비교합니다(부호 무시).

  • 접촉 감지, 삽입 피드백, 하중 확인에 유용합니다.

  • 힘과 위치를 함께 쓰는 조건에는 check_position_condition_abs나 check_position_condition_rel과 함께 사용하세요.

  • 작은 센서 노이즈로 잘못 트리거되지 않도록 적절한 임계값을 적용하세요.

  • 여러 축을 확인하려면 축마다 따로 호출하거나 사용자 정의 로직 루프에 통합하세요.

  • 감지 후 능동적으로 힘에 대응하려면 set_desired_force, release_force와 함께 사용하세요.