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

moveb()

기능

하나 이상의 경로 세그먼트(line 또는 circle)를 인자로 갖는 list를 받아 각 세그먼트를 설정된 radius로 블렌딩하여 등속으로 이동합니다. 여기서 radius는 posb를 통해 설정 가능합니다.

인수

인수명

자료형

기본값

설명

pos_list

list (posb)

-

posb 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]

  • time 지정 시, vel, acc를 무시하고 time 기준으로 처리

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: 상대

app_type

int

DR_MV_APP_NONE

어플리케이션 연동 옵션

  • DR_MV_APP_NONE: 연동없음

  • DR_MV_APP_WELD: 용접연동

알아두기

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

  • posb_list는 최대 300개까지 입력할 수 있습니다.

  • 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인 경우 posb_list의 각 pos는 앞선 pos에 대한 상대좌표로 정의됩니다.

  • app_type 이 DR_MV_APP_WELD인 경우에 이동속도는 vel인자의 입력값이 아닌 app_weld_set_weld_cond()에 입력된 속도설정으로 대체됩니다.

주의

  • posb에서 blending radius가 0인 경우, 사용자 입력 오류가 나타납니다.

  • 연속된 Line-Line segment가 같은 방향을 가질 경우 Line의 중복입력으로 사용자 입력 오류가 나타납니다.

  • 블렌딩 구간에서 조건에 따라 급격하게 방향전환이 발생하게 되는 경우 급가속을 방지하기 위해 사용자 입력오류가 나타납니다.

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

알아두기

Line-Line 블렌딩에서 blending radius가 작고 속도가 높으면, 코너 통과 시 구심 가속도가 커질 수 있습니다.

  • V3.7 이후 버전에서는 구심 가속도가 과도한 코너에서 자동 감속이 추가되었습니다. 직선 구간의 속도는 유지됩니다.

  • 이에 따라 이전 버전과 동일한 코드가 코너에서 감속될 수 있습니다.

  • 코너 감속 시 Info 알람으로 등속 유지에 필요한 acc / radius 조합을 안내합니다. 등속이 필요한 경우 안내값에 따라 acc 또는 radius를 조정하십시오.

리턴

설명

0

성공

음수값

오류

예외

예외

설명

DR_Error (DR_ERROR_TYPE)

인수들의 데이터형 오류 시

DR_Error (DR_ERROR_VALUE)

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

DR_Error (DR_ERROR_RUNTIME)

C Extension 모듈 에러 발생 시

DR_Error (DR_ERROR_STOP)

프로그램 강제 종료 시

예제

Python
# Init Pose @ Jx1

Jx1 = posj(45,0,90,0,90,45) #초기 Joint위치

X0 = posx(370, 420, 650, 0, 180, 0) #초기 Task위치


Python
# CASE 1) ABSOLUTE

# Absolute Goal Poses

X1 = posx(370, 670, 650, 0, 180, 0)

X1a = posx(370, 670, 400, 0, 180, 0)

X1a2= posx(370, 545, 400, 0, 180, 0)

X1b = posx(370, 595, 400, 0, 180, 0)

X1b2= posx(370, 670, 400, 0, 180, 0)

X1c = posx(370, 420, 150, 0, 180, 0)

X1c2= posx(370, 545, 150, 0, 180, 0)

X1d = posx(370, 670, 275, 0, 180, 0)

X1d2= posx(370, 795, 150, 0, 180, 0)

 

seg11 = posb(DR_LINE, X1, radius=20)

seg12 = posb(DR_CIRCLE, X1a, X1a2, radius=20)

seg14 = posb(DR_LINE, X1b2, radius=20)

seg15 = posb(DR_CIRCLE, X1c, X1c2, radius=20)

seg16 = posb(DR_CIRCLE, X1d, X1d2, radius=20)

b_list1 = [seg11, seg12, seg14, seg15, seg16] 

# 마지막경유점(seg16)의 blending radius는 무시됨

 

movej(Jx1, vel=30, acc=60, mod=DR_MV_MOD_ABS) 

# 초기각도(Jx1)로 Joint모션

movel(X0, vel=150, acc=250, ref=DR_BASE, mod=DR_MV_MOD_ABS) 

#초기위치(X0)로 line모션

moveb(b_list1, vel=150, acc=250, ref=DR_BASE, mod=DR_MV_MOD_ABS)

        # 현재위치에서 시작하여 seg11(LINE), seg12(CIRCLE), seg14(LINE), 

        # seg15(CIRCLE), seg16(CIRCLE)으로 이루어진 궤적을 속도 150(mm/sec)를

        # 유지하며(가감속구간 제외) 움직임 (최종point는 X1d2). 각 segment의 끝점

        # (X1, X1a2, X1b2, X1c2, X1d2)에서 20mm 거리에 도달하면 다음 segment로 

           # blending이 시작됨


Python
# CASE 2) RELATIVE 

# Relative Goal Poses

dX1 = posx(0, 250, 0, 0, 0, 0)

dX1a = posx(0, 0, -150, 0, 0, 0)

dX1a2= posx(0, -125, 0, 0, 0, 0)

dX1b = posx(0, 50, 0, 0, 0, 0)

dX1b2= posx(0, 75, 0, 0, 0, 0)

dX1c = posx(0, -250, -250, 0, 0, 0)

dX1c2= posx(0, 125, 0, 0, 0, 0)

dX1d = posx(0, 125, 125, 0, 0, 0)

dX1d2= posx(0, 125, -125, 0, 0, 0)

 

dseg11 = posb(DR_LINE, dX1, radius=20)

dseg12 = posb(DR_CIRCLE, dX1a, dX1a2, radius=20)

dseg14 = posb(DR_LINE, dX1b2, radius=20)

dseg15 = posb(DR_CIRCLE, dX1c, dX1c2, radius=20)

dseg16 = posb(DR_CIRCLE, dX1d, dX1d2, radius=20)

db_list1 = [dseg11, dseg12, dseg14, dseg15, dseg16] 

# 마지막경유점(dseg16)의 blending radius는 무시됨

 

movej(Jx1, vel=30, acc=60, mod=DR_MV_MOD_ABS)   

# 초기각도(Jx1)로 Joint모션

movel(X0, vel=150, acc=250, ref=DR_BASE, mod=DR_MV_MOD_ABS) 

#초기위치(X0)로 line모션

moveb(b_list1, vel=150, acc=250, ref=DR_BASE, mod=DR_MV_MOD_ABS)

        # 현재위치에서 시작하여 상대위치로 정의된 dseg11(LINE), dseg12(CIRCLE),

        # dseg14(LINE), dseg15(CIRCLE), dseg16(CIRCLE)으로 이루어진 궤적을 

        # 속도 150(mm/sec)를 유지하며(가감속구간제외) 움직임 (최종point는 X1d2). 

        # 각 segment의 끝점(X1, X1a2, X1b2, X1c2, X1d2)에서 20mm 거리에 

           # 도달하면 다음 segment로 blending이 시작됨 (경로는 CASE#1과 동일)

관련 명령어