amovesx (자동 모드)

이 함수는 movesx의 비동기 버전으로, 비동기로 처리한다는 점만 빼면 movesx()와 같게 동작합니다. 모션이 시작되면 종료를 기다리지 않고 바로 반환합니다.
따라서 amovesx()가 끝나기 전에 새 모션 명령을 내리면 안전 오류가 발생합니다. 다음 명령을 실행하기 전에 항상 mwait()로 모션 종료를 확인하세요.

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

bool amovesx(float fTargetPos[MAX_SPLINE_POINT][NUM_TASK],
             unsigned char nPosCount,
             float fTargetVel[2],
             float fTargetAcc[2],
             float fTargetTime = 0.f,
             MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
             MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_BASE,
             SPLINE_VELOCITY_OPTION eVelOpt = SPLINE_VELOCITY_OPTION_DEFAULT) {
    return _amovesx(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
                    fTargetAcc, fTargetTime, eMoveMode, eMoveReference, eVelOpt);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos

float[MAX_SPLINE_POINT][6]

최대 100개의 경유점(Waypoint) 정보 [mm, deg]

nPosCount

unsigned char

유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다.

fTargetVel

float[2]

선속도와 각속도 [mm/s, deg/s]

fTargetAcc

float[2]

선가속도와 각가속도 [mm/s2, deg/s2]

fTargetTime

float

0.0

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

절대 또는 상대 이동 모드

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_BASE

기준 좌표계(BASE / TOOL)

eVelOpt

SPLINE_VELOCITY_OPTION

SPLINE_VELOCITY_OPTION_DEFAULT

스플라인 모션의 속도 프로파일 옵션
(기본값: 가변 속도 스플라인)

참고

  • fTargetVel을 지정하면(예: {30, 0}) 첫 번째 요소는 선속도이고, 두 번째 요소는 각속도입니다(선속도에 비례해 결정).

  • fTargetAcc를 지정하면(예: {60, 0}) 첫 번째 요소는 선가속도이고, 두 번째 요소는 각가속도입니다(선가속도에 비례).

  • fTargetTime을 지정하면 fTargetVel과 fTargetAcc를 모두 무시하고 시간 기준으로 모션을 실행합니다.

  • eMoveMode가 MOVE_MODE_RELATIVE이면 각 경유점은 바로 앞 경유점을 기준으로 한 상대 위치로 정의됩니다. (예: 목록 [q1, q2, q3]에서 q2는 q1 기준, q3는 q2 기준입니다.)

  • 이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.

주의

  • eVelOpt에 SPLINE_VELOCITY_OPTION_CONST(등속 스플라인)를 사용할 때, 입력한 경유점 사이의 거리나 속도로는 등속 이동이 불가능하면 등속 프로파일을 적용할 수 없습니다. 이 경우 모션이 자동으로 SPLINE_VELOCITY_OPTION_DEFAULT로 전환됩니다.

반환값

값

설명

0

오류

1

성공

참고

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

예제

#include <thread>
#include <chrono>

// 여러 경유점을 지나는 직교 좌표 스플라인 동작을 비동기로 실행합니다.
// 스플라인 동작 시작 3초 후 D-Out을 출력합니다.

float xpos[4][6];
unsigned char xposNum = 4;
float tvel[2] = { 50, 50 };
float tacc[2] = { 100, 100 };

xpos[0][0]=559; xpos[0][1]=434.5; xpos[0][2]=651.5; xpos[0][3]=0; xpos[0][4]=180; xpos[0][5]=0;
xpos[1][0]=559; xpos[1][1]=484.5; xpos[1][2]=251.5; xpos[1][3]=0; xpos[1][4]=180; xpos[1][5]=0;
xpos[2][0]=559; xpos[2][1]=234.5; xpos[2][2]=251.5; xpos[2][3]=0; xpos[2][4]=180; xpos[2][5]=0;
xpos[3][0]=559; xpos[3][1]=134.5; xpos[3][2]=451.5; xpos[3][3]=0; xpos[3][4]=180; xpos[3][5]=0;

drfl.amovesx(xpos, xposNum, tvel, tacc, 0, MOVE_MODE_ABSOLUTE);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);

이 예제는 TCP 경유점 4개를 지나는 비동기 스플라인 모션을 실행하고, 모션 시작 3초 후 디지털 출력을 켭니다. 다음 명령은 mwait()로 완료를 확인한 후에만 내리세요.