amovec (자동 모드)

이 함수는 movec의 비동기 버전으로, 블렌딩용 fBlendingRadius 인수가 없다는 점만 빼면 movec와 같게 동작합니다. 비동기이므로 모션이 시작되면 곧바로 반환하고, 종료를 기다리지 않고 다음 줄을 실행합니다.

DRCF_VERSION 2와 3에서 사용할 수 있습니다. eOrientation과 eAppType 매개변수는 DRCF_VERSION 2에만 있습니다.

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

bool amovec(float fTargetPos[2][NUM_TASK],
            float fTargetVel[2],
            float fTargetAcc[2],
            float fTargetTime = 0.f,
            MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
            MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_BASE,
            float fTargetAngle1 = 0.f,
            float fTargetAngle2 = 0.f,
            BLENDING_SPEED_TYPE eBlendingType = BLENDING_SPEED_TYPE_DUPLICATE,
            MOVE_ORIENTATION eOrientation = DR_MV_ORI_TEACH,
            DR_MV_APP eAppType = DR_MV_APP_NONE) {
    return _amovec_ex(_rbtCtrl, fTargetPos, fTargetVel, fTargetAcc, fTargetTime,
                      eMoveMode, eMoveReference, fTargetAngle1, fTargetAngle2,
                      eBlendingType, eOrientation, eAppType);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos[0]

float[6]

경유점(Waypoint) [mm, deg]

fTargetPos[1]

float[6]

목표 위치 [mm, deg]

fTargetVel

float[2]

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

fTargetAcc

float[2]

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

fTargetTime

float

0.f

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

열거형 정의를 참고하세요

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_BASE

열거형 정의를 참고하세요

fTargetAngle1

float

0.f

angle1

fTargetAngle2

float

0.f

angle2

eBlendingType

BLENDING_SPEED_TYPE

BLENDING_SPEED_TYPE_DUPLICATE

열거형 정의를 참고하세요

eOrientation

MOVE_ORIENTATION

DR_MV_ORI_TEACH

툴의 자세 제어 옵션(교시 자세 유지 / 고정 등)

eAppType

DR_MV_APP

DR_MV_APP_NONE

모션에 대한 애플리케이션 힌트(컨트롤러가 지원하는 경우)

참고

  • fTargetVel에 인수를 입력하면(예: {30, 0}) 입력값은 모션의 선속도에 해당하며, 각속도는 선속도에 비례해 결정됩니다.

  • fTargetAcc에 인수를 입력하면(예: {60, 0}) 입력값은 모션의 선가속도에 해당하며, 각가속도는 선가속도에 비례해 결정됩니다.

  • fTargetTime을 지정하면 fTargetVel과 fTargetAcc를 무시하고 fTargetTime을 기준으로 처리합니다.

  • eMoveMode가 MOVE_MODE_RELATIVE이면 fTargetPos[0]과 fTargetPos[1]은 이전 위치를 기준으로 한 상대 좌표로 정의됩니다. (fTargetPos[0]은 시작점 기준 상대 좌표이고, fTargetPos[1]은 fTargetPos[0] 기준 상대 좌표입니다.)

  • fTargetAngle1이 0보다 크고 fTargetAngle2가 0이면, fTargetAngle1이 원호 경로의 총 회전 각도로 적용됩니다.

  • fTargetAngle1과 fTargetAngle2를 모두 지정하면(>0) fTargetAngle1은 원호 경로에서 등속으로 움직이는 총 회전 각도이고, fTargetAngle2는 가감속 구간의 회전 각도입니다. 이때 원호 경로를 따라 움직이는 총 각도는 fTargetAngle1 + 2 × fTargetAngle2입니다.

  • eBlendingType 옵션과 fTargetVel / fTargetAcc에 따른 블렌딩은 moveb의 모션 설명을 참고하세요.

반환값

값

설명

0

오류

1

성공

참고

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

예제

#include <thread>
#include <chrono>

// 예: 작업 공간의 두 점을 지나는 시계 방향 원호를 비동기로 그립니다.
// - 동작 시작 3초 후 디지털 출력 1이 ON 됩니다.
// - BASE 좌표계 / ABSOLUTE 모드 / 기본 자세(teach)를 사용합니다.

// (사전 조건) 연결됨, 서보 온, 자동 모드, 속도 제한 설정됨.

// 1) 원호 위의 두 점 정의: 경유점(x1[0])과 목표점(x1[1])
float x1[2][NUM_TASK] = {
    { 559.f, 434.5f, 651.5f, 0.f, 180.f, 0.f },  // 경유점
    { 559.f, 434.5f, 251.5f, 0.f, 180.f, 0.f }   // 최종 목표
};

// 2) 선속도 / 각속도와 가속도 설정
float tVel[2] = { 50.f, 50.f };    // 선속도 50 mm/s, 각속도 50 deg/s
float tAcc[2] = { 100.f, 100.f };  // 선가속도 100 mm/s^2, 각가속도 100 deg/s^2

// 3) 비동기 원호 동작 실행
drfl.amovec(x1, tVel, tAcc);

// 4) 대기 없이 바로 다른 작업 실행
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);

// 5) 다음 동작 전에 동기화 확인
drfl.mwait();

이 예제는 TCP 지점 2개를 지나는 원호 모션을 비동기로 실행한 다음, 3초 후 디지털 출력을 켭니다. 모션이 프로그램 흐름을 막지 않으므로 다른 동작이나 모니터링을 동시에 실행할 수 있습니다.