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 |
평가할 축(X, Y, Z 또는 Rx, Ry, Rz)입니다. |
||
fTargetMin |
float |
목표 위치로부터 허용하는 최소 편차 [mm 또는 deg]입니다. |
|
fTargetMax |
float |
목표 위치로부터 허용하는 최대 편차 [mm 또는 deg]입니다. |
|
fTargetPos |
float[6] |
6개 작업 좌표로 나타낸 기준 목표 위치입니다. |
|
eForceReference |
|
상대 비교에 사용할 기준 좌표계입니다. |
반환값
값 |
설명 |
|---|---|
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를 사용하세요.