check_motion (수동 모드)
이 절에서는 수동(교시) 작업에서 check_motion을 사용하는 방법을 설명합니다. 이 함수는 3.1 공통에 정의되어 있지만, 수동 이동이나 단계별 이동 중에 로봇 모션 명령이 현재 실행 중인지, 계획 중인지, 완료되었는지 확인할 때 특히 유용합니다.
일반적인 사용법
다음 명령을 보내기 전에 로봇이 이동 명령을 완료했는지 확인합니다.
폴링 루프나 단계별 교시 시퀀스에서 모션을 동기화할 때 사용합니다.
안전 동작(예: servo_off)을 적용하기 전에 로봇이 유휴 상태인지 확인합니다.
참고
이 함수는 논블로킹 방식이므로 짧은 주기의 폴링 루프에서도 안전하게 사용할 수 있습니다.
안정적으로 동기화하려면 mwait() 또는 get_robot_state()와 함께 사용하는 것을 권장합니다.
예제: 모션이 완료될 때까지 기다린 뒤 다음 이동 실행
// 사전 조건:
// - 연결 완료(open_connection)
// - 수동(교시) 모드 활성
// - 서보 전원 ON
// 1) 첫 번째 조인트 모션 실행
float q0[6] = {0, 0, 90, 0, 90, 0};
float q99[6] = {0, 0, 0, 0, 0, 0};
drfl.movej(q0, 60, 30);
// 2) 이전 모션이 완료될 때까지 대기
while (true) {
int state = drfl.check_motion();
if (state == 0) { // 모션 완료
printf("[check_motion] Motion finished. Proceeding...\n");
break;
} else if (state == 1) {
printf("[check_motion] Motion being calculated...\n");
} else if (state == 2) {
printf("[check_motion] Motion in progress...\n");
}
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
// 3) 완료를 확인한 후 다음 모션 시작
drfl.movej(q99, 60, 30);
팁
check_motion()은 단계별 모션 테스트에서 동기화할 때 가장 적합합니다.새 이동 명령을 보내기 전에 반드시 함수가 0(유휴)을 반환하는지 확인해야 합니다.
servo_off, release_protective_stop 같은 안전 절차 전에 사용하면 유용합니다.
교시용 GUI를 만들 때 이 함수로 모션 상태 표시(Idle / Calculating / Moving)를 실시간으로 보여 줄 수 있습니다.