alter_motion (수동 모드)
enable_alter_motion으로 경로 수정(Alter Motion) 모드를 활성화한 후, 로봇이 움직이는 동안 alter_motion으로 모션 경로에 실시간 증분 보정을 적용할 수 있습니다. 작업자는 명령 전체를 다시 실행하지 않고도 TCP 위치를 대화식으로 조금씩 밀거나 다듬을 수 있습니다.
일반적인 사용법
자세를 보정합니다(예: 툴 수평 맞추기, 접촉 정렬).
수동 용접 시작점 보정이나 카메라 기반 교시에서 흔히 사용합니다.
참고
경로 수정 모드가 활성화된 동안에만 호출할 수 있습니다.
입력 벡터는 고정 XYZ 회전 순서의 [X, Y, Z, Rx, Ry, Rz]입니다.
실행 중인 모션이 없을 때 보낸 오프셋은 무시됩니다. 먼저 작업 공간(Task Space) 모션(예:
amovel)을 시작하세요.
주의
alter_motion()보다 먼저 enable_alter_motion을 호출하세요. 경로 수정이 활성화되지 않은 동안 alter_motion()은 아무것도 보내지 않으면서도 true를 반환합니다. 따라서 true가 반환되어도 오프셋이 적용되었다고 확신할 수 없습니다.
예제: 수동 교시 중 TCP 증분 보정
// 1단계: 경로 수정 모드 활성화(앞에서 완료했다고 가정)
float fLimitDpos[2] = {5.0f, 3.0f};
float fLimitDposPer[2] = {0.0f, 0.0f};
drfl.enable_alter_motion(5, PATH_MODE_DPOS, COORDINATE_SYSTEM_BASE,
fLimitDpos, fLimitDposPer);
// 2단계: 느린 작업 공간 모션 시작(+X 방향으로 100 mm, 상대 이동)
float fRelTarget[NUM_TASK] = {100.0f, 0, 0, 0, 0, 0};
float fVel[2] = {30.0f, 20.0f};
float fAcc[2] = {60.0f, 40.0f};
drfl.amovel(fRelTarget, fVel, fAcc, 0.f, MOVE_MODE_RELATIVE);
// 3단계: 보정 벡터 정의(아래 방향 이동)
float dPos[6] = {0, 0, -0.2f, 0, 0, 0}; // 주기당 -0.2 mm
// 4단계: 모션이 진행되는 동안 루프에서 작은 보정값 적용
for (int i = 0; i < 25; ++i) {
drfl.alter_motion(dPos);
std::this_thread::sleep_for(std::chrono::milliseconds(50)); // 10 x iCycleTime ms 대기
}
drfl.mwait();
printf("Manual fine adjustment complete.\n");
// 5단계: 완료 후 경로 수정 모드 비활성화
drfl.disable_alter_motion();
팁
카메라나 힘 피드백과 함께 사용해 반자동으로 미세 조정하세요.
더 매끄럽고 연속적으로 보정하려면 별도 스레드에서 실행하세요.
표면 가까이에서 작업할 때는 더 작은 증분(≤0.3 mm)을 사용하세요.