3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish
3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish

movesx()

기능

로봇이 현재 위치에서 pos_list로 입력된 작업공간(task space)의 경유점들을 거쳐 목표 위치(pos_list의 마지막 경유점)까지 연결되는 스플라인 곡선 경로를 따라 이동합니다.

입력된 속도/가속도는 경로 중 최대 속도/가속도이며 등속 모션 옵션(vel_opt=DR_MVS_VEL_CONST)을 선택하면 조건이 충족되는 경우 입력한 속도로 등속 운동합니다.

spline_type을 DR_HERMITE로 입력하는 경우, 여러 스플라인 모션을 하나의 경로로 이어 계획할 수 있습니다. DR_HERMITE type의 spline을 사용하는 경우, 비동기 명령어인 amovesx 명령이 종료되기 전에 발생하는 새로운 (a)movesx 모션 지령은 spline 경로를 이어가며, 하나의 모션으로 간주됩니다. 단, 다음 두 경우는 안전상의 이유로 오류가 발생합니다. ① spline_type이 DR_HERMITE가 아닌 (a)movesx 명령, ② (a)movesx가 아닌 다른 모션 명령. 따라서 경로를 이어 계획할 의도가 아니라면 amovesx()와 이어지는 모션 명령어 사이에는 mwait() 또는 check_motion() 등을 사용하여 amovesx() 모션의 종료를 확인한 후 새로운 모션 명령어가 진행되어야 합니다.

단일 spline 명령어는 경유점을 100개까지 지원하지만, spline_type을 DR_HERMITE로 입력하는 경우, 두 개 이상의 spline 연결을 통해 100점 이상의 경유점을 사용할 수 있습니다. 현재 시점에 저장된 segment가 100개를 초과하는 경우, 명령이 반환되지 않고 대기하며, 남아있는 segment가 100개 이하로 내려가면 명령이 반환되어 다음 명령으로 진행합니다.

DR_CATMULL_ROM type의 spline은 DR_HERMITE type의 spline과 호환되지 않으며, 혼용할 경우, 오류를 발생시키고 모션을 중지합니다.

인수

인수명

자료형

기본값

설명

pos_list

list (posx)

-

posx list

vel (v)

float

None

velocity 또는

velocity1, velocity2

list (float[2])

acc (a)

float

None

acceleration 또는

acceleration1, acceleration2

list (float[2])

time (t)

float

None

도달 시간 [sec]

ref

int

None

reference coordinate

  • DR_BASE: base coordinate

  • DR_WORLD: world coordinate

  • DR_TOOL: tool coordinate

  • user coordinate: 사용자 정의

mod

int

DR_MV_MOD_ABS

이동 기준

  • DR_MV_MOD_ABS: 절대

  • DR_MV_MOD_REL: 상대

vel_opt

int

DR_MVS_VEL_NONE

속도 옵션

  • DR_MVS_VEL_NONE: 없음

  • DR_MVS_VEL_CONST: 등속

spline_type

int

DR_CATMULL_ROM

  • DR_CATMULL_ROM: 기존 spline

  • DR_HERMITE: spline간 연결 가능한 신규 spline

app_type

int

DR_MV_APP_NONE

어플리케이션 연동 옵션

  • DR_MV_APP_NONE: 연동없음

  • DR_MV_APP_WELD: 용접연동

알아두기

  • 단축 인수를 지원합니다. (v:vel, a:acc, t:time)

  • vel이 None인 경우 _global_velx가 적용됩니다. (_global_velx 초깃값은 0.0이며, set_velx에 의해 설정 가능)

  • acc이 None인 경우 _global_accx가 적용됩니다. (_global_accx 초깃값은 0.0이며, set_accx에 의해 설정 가능)

  • set_velx(), set_accx()를 호출하지 않아 _global_velx, _global_accx가 초깃값 0.0인 상태에서 vel, acc, time을 모두 생략하면, 모션이 수행되지 않고 DRL ValueError(DR_ERROR_VALUE)가 발생하여 프로그램이 정지합니다. vel과 acc를 인수로 지정하거나, set_velx()와 set_accx()로 전역값을 먼저 설정하십시오.

  • vel에 하나의 인자를 입력한 경우(예를들어, vel=30) 입력된 인자는 모션의 선속도에 대응되며, 각속도는 선속도에 비례하여 결정됩니다.

  • acc에 하나의 인자를 입력한 경우(예를들어, acc=60) 입력된 인자는 모션의 선가속도에 대응되며, 각가속도는 선가속도에 비례하여 결정됩니다.

  • time을 지정할 경우 vel, acc를 무시하고 time 기준으로 처리됩니다.

  • time이 None인 경우 0으로 처리됩니다.

  • ref가 None인 경우 _g_coord가 적용됩니다. (_g_coord 초깃값은 DR_BASE이며, set_ref_coord 명령에 의해 설정 가능)

  • mod가 DR_MV_MOD_REL인 경우 pos_list의 각 pos는 앞 선 pos에 대한 상대좌표로 정의됩니다. (pos_list=[p1, p2, ...,p(n-1), p(n)]로 이루어질 때 p1은 시작점 대비 상대각도, p(n)은 p(n-1) 대비 상대좌표)

  • 선행모션과 후행모션에 대한 온라인 블렌딩을 지원하지 않습니다.

  • spline_type이 DR_CATMULL_ROM인 경우, spline 경로를 이어 계획하는 방식을 지원하지 않습니다.

주의

vel_opt= DR_MVS_VEL_CONST 옵션(등속 모션)을 선택할 경우 입력된 경유점 간 거리와 속도 조건에 따라 등속 모션을 사용할 수 없을 수 있으며, 이 경우에 변속 모션 (vel_opt= DR_MVS_VEL_NONE)으로 자동 전환됩니다.

spline_type이 DR_HERMITE 인 경우, 최초 모션에서 등속 모션이 불가한 경우, 변속 모션으로 자동 전환되며, 후속 모션에서 등속 모션이 불가한 경우, 오류를 발생시키고 정지합니다.

등속 모션과 변속 모션은 이을 수 없으며, 최초 모션의 속도 모드로 동작합니다.

권장사항

  1. norm(seg(i))0.5 × norm(seg(i‑1)) 이상의 값을 사용하는 것을 권장합니다.
    고속으로 스플라인을 생성 및 실행하는 경우, 더 큰 값을 사용하는 것이 좋습니다.

  2. seg(i)seg(i‑1) 사이의 각도는 직각에서 둔각 사이를 권장합니다.

  3. 가속도 대 속도의 비율(가속도 / 속도)1 이하를 권장합니다.

  4. 스플라인 사용 시 자세 변화는 권장하지 않습니다.
    자세 변화가 필요한 경우, 가감속 구간 내에서 자세 조정이 완료될 수 있도록 변화량을 충분히 작게 설정하는 것을 권장합니다.

  5. 경유점 간 진행 방향이 급격히 꺾이는 경로(예각 경로)에서는 '틱' 소음이나 미세 진동이 발생할 수 있습니다. 이러한 경로에는 spline_type을 DR_HERMITE로 설정하는 것을 권장합니다. (더 부드럽게 동작합니다) 기본값(DR_CATMULL_ROM)을 사용해야 하는 경우, 해당 구간의 속도/가속도를 낮추면 소음을 줄일 수 있습니다.

리턴

설명

0

성공

음수값

오류

예외

예외

설명

DR_Error (DR_ERROR_TYPE)

인수들의 데이터형 오류 시

DR_Error (DR_ERROR_VALUE)

인수의 값이 유효하지 않을 시

DR_Error (DR_ERROR_RUNTIME)

C Extension 모듈 에러 발생 시

DR_Error (DR_ERROR_STOP)

프로그램 강제 종료 시

예제

Python
#CASE 1) 절대좌표 입력 (mod= DR_MV_MOD_ABS)

P0 = posj(0,0,90,0,90,0)
movej(P0, v=30, a=30)

x0 = posx(600, 43, 500, 0, 180, 0) # posx 변수(공간좌표/자세) x0 정의
movel(x0, vel=100, acc=200) # 초기위치 x0로 line모션

x1 = posx(600, 600, 600, 0, 175, 0) # posx 변수(공간좌표/자세) x1 정의
x2 = posx(600, 750, 600, 0, 175, 0)
x3 = posx(150, 600, 450, 0, 175, 0)
x4 = posx(-300, 300, 300, 0, 175, 0)
x5 = posx(-200, 700, 500, 0, 175, 0)
x6 = posx(600, 600, 400, 0, 175, 0)

xlist = [x1, x2, x3, x4, x5, x6] # x1~x6를 경유점 집합으로 하는 리스트 xlist 정의
movesx(xlist, vel=[100, 30], acc=[200, 60], vel_opt=DR_MVS_VEL_NONE)
 # 현재 위치에서 시작하여 xlist에 정의된 경유점 집합을 연결하는 스플라인 
 # 곡선을 최대속도 100, 30(mm/sec, deg/sec), 최대가속도 200(mm/sec2), 60(deg/sec2)로 움직임

movesx(xlist, vel=[100, 30], acc=[200, 60], time=5, vel_opt=DR_MVS_VEL_CONST)
# 현재 위치에서 시작하여 xlist에 정의된 경유점 집합을 연결하는 스플라인 
# 곡선을 등속 100, 30(mm/sec, deg/sec)(가감속구간제외)로 움직임

#CASE 2) 상대좌표 입력 (mod= DR_MV_MOD_REL)
P0 = posj(0,0,90,0,90,0)
movej(P0, vel=30, acc=30)

x0 = posx(600, 43, 500, 0, 180, 0) # posx 변수(공간좌표/자세) x0 정의
movel(x0, vel=100, acc=200) # 초기위치 x0로 line모션

dx1 = posx(0, 557, 100, 0, -5, 0)
# x0에 대한 상대좌표 dx1 정의(x1=x0기준 dx1의 동차변환)
dx2 = posx(0, 150, 0, 0, 0, 0)
# x1에 대한 상대좌표 dx2 정의(x2=x1기준 dx2의 동차변환)
dx3 = posx(-450, -150, -150, 0, 0, 0)
# x2에 대한 상대좌표 dx3 정의(x3=x2기준 dx3의 동차변환)
dx4 = posx(-450, -300, -150, 0, 0, 0)
# x3에 대한 상대좌표 dx4 정의(x4=x3기준 dx4의 동차변환)
dx5 = posx(100, 400, 200, 0, 0, 0)
# x4에 대한 상대좌표 dx5 정의(x5=x4기준 dx5의 동차변환)
dx6 = posx(800, -100, -100, 0, 0, 0)
# x5에 대한 상대좌표 dx6 정의(x6=x5기준 dx6의 동차변환)

dxlist = [dx1, dx2, dx3, dx4, dx5, dx6] 
# dx1~dx6를 경유점 집합으로 하는 리스트 dxlist 정의

movesx(dxlist, vel=[100, 30], acc=[200, 60], mod= DR_MV_MOD_REL, vel_opt=DR_MVS_VEL_NONE)
# 현재 위치에서 시작하여 dxlist에 정의된 상대 경유점 집합을 연결하는 
# 스플라인 곡선을 최대속도 100(mm/sec), 30(deg/sec), 
# 최대가속도 200(mm/sec2), 60(deg/sec2)로 움직임 (CASE-1과 동일한 모션)

# CASE 3) spline_type을 사용한 Spline 연결.
P0 = posj(0,0,90,0,90,0)
movej(P0, vel=30, acc=30)

x0 = posx(600, 43, 500, 0, 180, 0) # posx 변수(공간좌표/자세) x0 정의
movel(x0, vel=100, acc=200) # 초기위치 x0로 line모션

x1 = posx(600, 600, 600, 0, 175, 0)         # posx 변수(공간좌표/자세) x1 정의
x2 = posx(600, 750, 600, 0, 175, 0)
x3 = posx(150, 600, 450, 0, 175, 0)
x4 = posx(-300, 300, 300, 0, 175, 0)
x5 = posx(-200, 700, 500, 0, 175, 0)
x6 = posx(600, 600, 400, 0, 175, 0)
xlist = [x1, x2, x3, x4, x5, x6, x0] # x1~x6, x0를 경유점 집합으로 하는 리스트 xlist 정의

amovesx(xlist, vel=[100, 30], acc=[200, 60], vel_opt=DR_MVS_VEL_NONE)
# 현재 위치에서 시작하여 xlist에 정의된 경유점 집합을 연결하는 스플라인
# 곡선을 최대속도 100, 30(mm/sec, deg/sec), 최대가속도 200(mm/sec2), 
# 60(deg/sec2)로 움직임, 모션시작 즉시 다음명령 수행

movesx(xlist, vel=[100, 30], acc=[200, 60], vel_opt=DR_MVS_VEL_NONE)
# 선행 amovesx 모션에 이어 후속 movesx 모션이 연결되어 움직임.
# xlist = [x1, x2, x3, x4, x5, x0, x1, x2, x3, x4, x5, x0] 와 경로 동일

관련 명령어