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

amove_periodic (자동 모드)

이 함수는 move_periodic()의 비동기 버전입니다. 모션이 끝날 때까지 기다리지 않고 모션이 시작되면 곧바로 다음 줄을 실행한다는 점만 빼면 move_periodic()과 같게 동작합니다. 이전 모션이 끝나기 전에 새 모션 명령을 내려야 한다면, 안전을 위해 두 명령 사이에 반드시 mwait()를 넣어야 합니다.

이 명령은 지정한 기준 좌표계(eMoveReference)에서 각 축(병진 또는 회전)의 사인 함수를 따르는 주기 모션을 실행합니다. 모션의 속성(진폭, 주기, 가감속 시간, 총 반복 횟수)은 각 입력 매개변수로 정합니다.

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

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

매개변수

매개변수 이름

자료형

기본값

범위

설명

fAmplitude

float[6]

≥ 0

진폭(-fAmplitude와 +fAmplitude 사이를 움직임) [mm] 또는 [deg]

fPeriodic

float[6]

≥ 0

주기(한 주기에 걸리는 시간) [sec]

fAccelTime

float

≥ 0

가감속 시간 [sec]

nRepeat

unsigned char

> 0

반복 횟수

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_TOOL

열거형 정의를 참고하세요

참고

  • fAmplitude는 각 축(x, y, z, rx, ry, rz)의 진폭을 정합니다. 주기 모션을 하지 않는 축의 진폭은 반드시 0이어야 합니다.

  • fPeriodic은 각 축이 한 주기의 모션을 마치는 데 걸리는 시간을 정합니다. 각 값은 축 순서(x, y, z, rx, ry, rz)와 같은 순서로 대응합니다.

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

  • nRepeat은 전체 주기를 몇 번 반복할지 정합니다. 주기가 가장 긴 축이 전체 모션 시간을 결정합니다.

  • 모션이 정상적으로 끝나면, 로봇이 시작 위치로 돌아오도록 나머지 축은 기준 축이 끝나기 전에 멈출 수 있습니다. 그렇지 않으면 감속 경로가 약간 벗어날 수 있습니다.

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

  • 속도가 너무 빠르면 다음 식으로 조정하세요. velocity = Amplitude(fAmplitude) * 2 * π(3.14) / Period(fPeriodic)
    예: 진폭 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를 반환합니다.

예제

#include <thread>
#include <chrono>

// X축(진폭 10 mm, 주기 1초) 동작과
// Y축 회전(진폭 0.5 deg, 주기 1초)을 5회 반복합니다.
// 1초 후 디지털 출력 채널 1을 설정합니다.
float fAmplitude[NUM_TASK] = {10, 0, 0, 0, 0.5, 0};
float fPeriod[NUM_TASK] = {1, 1, 1, 1, 1, 1};
drfl.amove_periodic(fAmplitude, fPeriod, 0.5, 5, MOVE_REFERENCE_TOOL);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);
drfl.mwait();

이 예제는 TOOL 좌표계에서 X축과 Y축 회전 방향으로 사인파 주기 모션을 만듭니다. 1초 후 로봇이 주기 궤적(Trajectory)을 계속 따라가는 동안 디지털 출력 1이 켜집니다.