이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

move_periodic (자동 모드)

이 함수는 사인 함수를 따라 각 축의 주기 모션을 실행합니다. 모션은 현재 위치에서 시작하는 상대 주기 궤적(Trajectory)으로 실행되며, 진폭, 주기, 가속 시간, 반복 횟수가 파형을 결정합니다. 각 축(X, Y, Z, Rx, Ry, Rz)을 따로 설정해, 기준 좌표계에 맞춰 동기화된 사인파 모션을 만들 수 있습니다.

moveperiodic_overview

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool move_periodic(float fAmplitude[NUM_TASK],
                   float fPeriodic[NUM_TASK],
                   float fAccelTime,
                   unsigned int nRepeat,
                   MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL) {
    return _move_periodic(_rbtCtrl, fAmplitude, fPeriodic, fAccelTime, nRepeat, eMoveReference);
};

매개변수

매개변수 이름

자료형

범위 / 기본값

설명

fAmplitude

float[6]

≥ 0

-fAmplitude와 +fAmplitude 사이를 움직이는 모션의 진폭 [mm] 또는 [deg] (축: x, y, z, Rx, Ry, Rz)

fPeriodic

float[6]

≥ 0

모션 한 주기에 걸리는 시간 [sec]

fAccelTime

float

≥ 0

가감속 시간 [sec]

nRepeat

unsigned char

> 0

주기 반복 횟수

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_TOOL

열거형 정의를 참고하세요

참고

  • fAmplitude는 각 축의 변위 범위를 정합니다. 사용하지 않는 축은 0으로 설정하세요.

  • fPeriodic은 축별로 한 주기를 마치는 데 걸리는 시간을 정합니다. 각 요소는 X, Y, Z, Rx, Ry, Rz에 대응합니다.

  • fAccelTime은 모션 양 끝의 가감속 구간을 지정합니다. 실제로는 fAccelTime과, 진폭이 0이 아닌 축 중 가장 긴 주기의 1/4 가운데 큰 값을 적용합니다. fAccelTime이 fPeriodic의 가장 긴 주기에 nRepeat을 곱한 값의 1/2 이상이면 컨트롤러가 오류를 보고합니다.

  • nRepeat은 주기를 몇 번 반복할지 정합니다. 주기가 더 긴 축이 있으면 그 축이 전체 시간의 기준이 됩니다.

  • 모션이 정상적으로 끝나면 주기가 짧은 축이 먼저 끝나고, 모든 축이 주기를 마치면 로봇이 처음 위치로 돌아옵니다.

  • eMoveReference는 주기 모션을 BASE 좌표계에서 실행할지 TOOL 좌표계에서 실행할지 결정합니다.

  • 도달할 수 있는 최대 속도는 다음 식으로 추정할 수 있습니다.

    velocity = (Amplitude × 2 × π × 3.14) / Period
    

    예: 진폭 = 10 mm, 주기 = 1 s → 최대 속도 ≈ 62.83 mm/s

  • 다른 모션과의 온라인 블렌딩은 지원하지 않습니다.

반환값

값

설명

0

오류

1

성공

참고

로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.

예제

// CASE 1 — TOOL 기준 주기 모션
float fAmplitude[NUM_TASK] = {10, 0, 0, 0, 30, 0};
float fPeriod[NUM_TASK] = {1, 1, 1, 1, 1, 1};

drfl.move_periodic(fAmplitude, fPeriod, 0.2, 5, MOVE_REFERENCE_TOOL);
// x축(진폭 10 mm, 주기 1초)과 Ry 회전(진폭 30°) 동작을 5회 반복합니다.

// CASE 2 — BASE 기준 주기 모션
float amp2[NUM_TASK] = {10, 20, 0, 0, 0, 5};
float per2[NUM_TASK] = {1, 0, 1.5, 0, 0, 0};

drfl.move_periodic(amp2, per2, 0.5, 3, MOVE_REFERENCE_BASE);
// x축(10 mm, 1초)과 z축(20 mm, 1.5초) 동작을 3회 반복합니다.
// 주기가 0인 축(y, rx, ry 등)은 고정됩니다.
// 총 소요 시간은 약 5.5초이며, x축은 약 4.5주기를 반복합니다.

이 명령은 지정한 각 축에 대해 부드러운 주기 궤적을 만들며, 진동 시험, 진동 캘리브레이션, 동적 툴 시험에 흔히 사용합니다.