amove_spiral (자동 모드)

이 함수는 move_spiral의 비동기 버전입니다. 나선 모션을 시작한 다음 완료를 기다리지 않고 바로 반환합니다. 나선 모션이 백그라운드에서 계속되는 동안 프로그램의 다른 줄을 실행할 수 있습니다. amove_spiral()이 끝나기 전에 새 모션 명령을 내리면 오류가 발생할 수 있으므로, 안전하게 순서를 지키려면 모션 사이에 mwait()를 사용하는 것을 권장합니다.

정의(최대 반경/길이)
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool amove_spiral(TASK_AXIS eTaskAxis,
                  float fRevolution,
                  float fMaximuRadius,
                  float fMaximumLength,
                  float fTargetVel[2],
                  float fTargetAcc[2],
                  float fTargetTime = 0.f,
                  MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL) {
    return _amove_spiral(_rbtCtrl, eTaskAxis, fRevolution, fMaximuRadius,
                         fMaximumLength, fTargetVel, fTargetAcc,
                         fTargetTime, eMoveReference);
};

매개변수

매개변수 이름

자료형

기본값

설명

eTaskAxis

TASK_AXIS

나선 면에 수직인 축(나선이 회전하는 평면을 정의)

fRevolution

float

나선의 총 회전 수 [revolutions]

fMaximuRadius

float

나선의 최종 반경 [mm]

fMaximumLength

float

축 방향으로 이동하는 거리 [mm] (음수 = 반대 방향)

fTargetVel

float[2]

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

fTargetAcc

float[2]

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

fTargetTime

float

0.0

총 모션 실행 시간 [sec]

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_TOOL

나선 모션의 기준 좌표계(BASE / TOOL)


정의(목표 위치)
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool amove_spiral(TASK_AXIS eTaskAxis,
                  float fRevolution,
                  float fTargetPos[3],
                  float fTargetVel[2],
                  float fTargetAcc[2],
                  float fTargetTime = 0.f,
                  MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL,
                  MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
                  SPIRAL_DIR eSpiralDir = DR_SPIRAL_OUTWARD,
                  ROT_DIR eRotDir = DR_ROT_FORWARD) {
    return _amove_spiral_ex(_rbtCtrl, eTaskAxis, fRevolution, fTargetPos,
                            fTargetVel, fTargetAcc, fTargetTime, eMoveReference,
                            eMoveMode, eSpiralDir, eRotDir);
};

이 오버로드는 최대 반경과 길이 대신 X, Y, Z 좌표로 나선의 끝점을 정의합니다. 또한 나선 방향, 회전 방향, 이동 모드(절대/상대)를 제어할 수 있습니다. 내부적으로 _amove_spiral 대신 _amove_spiral_ex를 호출합니다.

매개변수

매개변수 이름

자료형

기본값

설명

eTaskAxis

TASK_AXIS

나선 면에 수직인 축(나선이 회전하는 평면을 정의)

fRevolution

float

나선의 총 회전 수 [revolutions]

fTargetPos

float[3]

X, Y, Z 좌표로 나타낸 목표 지점 [mm]
(fMaximuRadius / fMaximumLength 대신 사용)

fTargetVel

float[2]

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

fTargetAcc

float[2]

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

fTargetTime

float

0.0

총 모션 실행 시간 [sec]

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_TOOL

나선 모션의 기준 좌표계(BASE / TOOL)

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

이동 기준(절대 또는 상대)

eSpiralDir

SPIRAL_DIR

DR_SPIRAL_OUTWARD

나선의 반경 방향
DR_SPIRAL_OUTWARD: 중심에서 바깥쪽으로 넓어짐
DR_SPIRAL_INWARD: 목표 지점을 향해 안쪽으로 좁아짐

eRotDir

ROT_DIR

DR_ROT_FORWARD

축을 중심으로 한 회전 방향
DR_ROT_FORWARD: 정방향 회전(+)
DR_ROT_REVERSE: 역방향 회전(-)

참고

  • fRevolution은 나선 경로의 회전 수를 정합니다.

  • fMaximuRadius는 모션 중 도달하는 가장 바깥쪽 반경을 지정합니다.

  • fMaximumLength는 나선 축을 따라 이동하는 거리를 나타냅니다.

  • fTargetVel과 fTargetAcc는 선속도/각속도 모션 프로파일을 정합니다.

  • fTargetTime을 설정하면 나선 모션이 시간 기준으로 제어되며, fTargetVel과 fTargetAcc는 모두 무시됩니다.

  • eTaskAxis는 나선이 넓어지는 평면을 결정합니다(예: Z축을 선택하면 XY 평면).

  • eMoveReference는 모션의 기준을 BASE 좌표계로 할지 TOOL 좌표계로 할지 결정합니다.

  • 다음 명령을 실행하기 전에 반드시 mwait()로 모션 종료를 확인해야 합니다.

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

주의

  • 계산된 나선의 각가속도가 안전 임계값을 넘으면 안전 오류가 발생합니다. 이를 막으려면 fTargetVel이나 fTargetAcc를 줄이거나 fTargetTime을 늘리세요.

반환값

값

설명

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 rev = 3;      // 회전 수
float rmax = 30;    // 최대 반경[mm]
float lmax = 50;    // Z축 방향 길이[mm]
float tvel[2] = {50, 50};
float tacc[2] = {100, 100};

drfl.amove_spiral(TASK_AXIS_Z, rev, rmax, lmax, tvel, tacc);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);

이 예제는 TOOL 좌표계의 Z축을 따라 비동기 나선 모션을 실행합니다. 나선 반경을 30 mm까지 점차 넓히면서 50 mm 올라갑니다. 모션이 시작되고 3초 후 디지털 출력이 켜지며, 이후 명령은 mwait()로 완료를 기다린 다음 실행해야 합니다.