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 |
위치 조건을 확인할 축(X, Y, Z 또는 회전축 Rx, Ry, Rz)입니다. |
||
fTargetMin |
float |
위치 비교의 최소 임계값입니다. |
|
fTargetMax |
float |
위치 비교의 최대 임계값입니다. |
|
fTargetPos |
float[6] |
비교 기준이 되는 목표 작업 위치(X, Y, Z, Rx, Ry, Rz)입니다. |
|
eMode |
|
비교 모드를 지정합니다 |
|
eForceReference |
|
비교에 사용할 기준 좌표계(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마다) 호출하세요.