정의
enable_alter_motion(n,mode,ref,limit_dPOS,limit_dPOS_per)
기능
경로 수정 기능을 활성화합니다. 경로 생성의 단위 주기는 10msec이며 입력 인자 n을 설정하여 경로 생성 주기(n*10msec)를 변경할 수 있습니다. 입력 인자 mode를 통해 alter_motion()의 입력값의 의미를 2가지 모드(누적량 모드, 증분량 모드) 중 하나로 선택하여 사용할 수 있습니다.
-
누적량 모드 : 현재의 모션 경로에 대한 절대적 증분 위치/자세만큼 경로 수정량이 반영됩니다.
-
증분량 모드 : 현재의 절대적 증분 위치/자세에 입력된 증분 위치/자세만큼 경로 수정량이 추가되어 반영됩니다.
입력 인자 ref를 통해 기준 좌표계를 설정할 수 있습니다. 입력 인자 limit_dPOS, limit_dPOS_per를 통해 각각 누적량, 증분량의 한계치를 설정할 수 있습니다. 한계치를 벗어나는 위치 값의 한계치에 수렴된 값으로 경로 수정량이 재조정됩니다.
인수
|
인수명 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
|
n |
int |
None |
경로 생성 주기 |
|
mode |
int |
None |
경로 수정 모드
|
|
ref |
int |
None |
reference coordinate
|
|
limit_dPOS |
list(float[2]) |
None |
첫번째 값 : 이동량 제한 값[mm] 두번째 값 : 회전량 제한 값[deg] |
|
limit_dPOS_per |
list(float[2]) |
None |
첫번째 값 : 이동량 제한 값[mm] 두번째 값 : 회전량 제한 값[deg] |
알아두기
-
alter_motion()은 사용자 thread 내에서만 동작합니다.
-
ref가 None인 경우, _g_coord 적용(_g_coord 초기값은 DR_BASE이며, set_ref_coord 명령에 의해 설정 가능)
-
limit_dPOS, limit_dPOS_per를 설정하지 않을 시 누적량, 증분량의 한계를 제한하지 않습니다.
예외
|
예외 |
설명 |
|---|---|
|
DR_Error (DR_ERROR_TYPE) |
인수들의 데이터형 오류 시 |
|
DR_Error (DR_ERROR_VALUE) |
인수의 값이 유효하지 않을 시 |
|
DR_Error (DR_ERROR_RUNTIME) |
C Extension 모듈 에러 발생 시 |
|
DR_Error (DR_ERROR_STOP) |
프로그램 강제 종료 시 |
예제
def alter_thread():
global dir_a, wait_time
alter_motion(dX) #dX : amount of alter motion
if dX[0] > 9.9:
dir_a = -10
elif dX[0] < -9.9:
dir_a = 10
dX[0] = dX[0] + dir_a
dX[3] = dX[3] + dir_a
wait(wait_time)
dX = [10,0,0,10,0,0]
# V3.4 버전부터는 posx()의 ori_type을 설정함에 따라 다양한 Orientation 타입을 지원합니다:
# dX = posx([10, 0, 0, 0, 0, 10], ori_type=DR_ELR_ZYZ, sol=None, turn=None)
J00 = posj(30,45,45,0,90,0)
movej(J00,vel=100,acc=100)
X1,sol = get_current_posx(DR_BASE)
J01 = posj(-30,45, 45,0,90,0)
movej(J01,vel=100,acc=100)
X2,sol = get_current_posx(DR_BASE)
# Alter motion is executed during the cycle time
cycle_time = 0.6
n_period = int(cycle_time * 1000 / 50)
wait_time = cycle_time
# 경로 수정 기능 활성화
# 생성주기:(n_period * 10)msec, 모드:누적량, 기준좌표계:베이스
# 누적량 제한:50mm, 90deg, 증분량 제한:60mm, 60deg
# alter motion 이동량에 비해 cycle time이 너무 짧은 경우 Limit 알람이 발생할 수 있습니다.
enable_alter_motion(n=n_period,mode=DR_DPOS, ref=DR_BASE, limit_dPOS=[50,90], limit_dPOS_per=[60,60])
th_id = thread_run(alter_thread, loop=True)
movel(pos=X1,vel=10,acc=100)
movel(pos=X2,vel=10,acc=100)
thread_stop(th_id)
disable_alter_motion() # 경로 수정 기능 비활성화