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)을 사용하세요.