기능
비동기(async.)방식의 movesj모션으로 async 처리 외에는 movesj()와 동일하게 동작합니다.
amovesj()에 의한 모션이 종료되기 전에 발생하는 새로운 모션지령은 안전상의 이유로 오류를 발생시킵니다. 따라서 amovej()와 이어지는 모션명령어 사이에는 mwait() 또는 check_motion() 등을 사용하여 amovesj() 모션 종료를 확인한 후 새로운 모션 명령어가 진행되도록 해야 합니다.
spline_type을 DR_HERMITE으로 입력하는 경우, 새로운 구조의 Spline 모션 알고리즘을 사용할 수 있습니다. DR_HERMITE type의 spline을 사용하는 경우, 비동기 명령어인 amovesj 명령이 종료되기 전에 발생하는 새로운 (a)movesj 모션 지령은 spline 경로를 이어가며, 하나의 모션으로 간주됩니다. 단, spline_type이 DR_HERMITE가 아닌 (a)movesj나 (a)movesj가 아닌 새로운 모션 지령은 안전 상의 이유로 오류를 발생 시킵니다. 따라서 spline을 이어 경로 계획을 하고 싶은 것이 아니라면 amovesj()와 이어지는 모션 명령어 사이에는 mwait() 또는 check_motion() 등을 사용하여 amovesj() 모션이 종료를 확인한 후 새로운 모션 명령어가 진행되어야 합니다.
단일 spline 명령어는 경유점을 100개까지 지원하지만, spline_type을 DR_HERMITE으로 입력하는 경우, 두개 이상의 spline 연결을 통해 100점 이상의 경유점을 사용할 수 있습니다. 현재 시점에 저장된 segment가 100개를 초과하는 경우, 명령어를 return 하지 않고 대기하며, 남아있는 segment가 100개 이하로 내려가면 명령어를 return 하여 다음 명령어로 넘어갑니다.
DR_CATMULL_ROM type의 spline은 DR_HERMITE type의 spline과 호환되지 않으며, 혼용할 경우, 에러를 띄우고 모션을 중지합니다.
비교
-
movesj(pos_list): 현재위치에서 출발하여 pos_list의 끝점에 도달(정지)한 후에 다음 명령 수행합니다.
-
amovesj(pos_list): 현재위치에서 출발하여 pos_list의 끝점 도달(정지)여부와 관계없이 즉시 다음 명령을 수행합니다.
인수
|
인수명 |
자료형 |
기본값 |
설명 |
|
pos_list |
list (posj) |
- |
posj list |
|
vel (v) |
float |
None |
velocity(모든 축에 동일) 또는 velocity(축별 velocity) |
|
list (float[6]) |
|||
|
acc (a) |
float |
None |
acceleration(모든 축에 동일) 또는 acceleration(축별 acceleration) |
|
list (float[6]) |
|||
|
time (t) |
float |
None |
도달 시간 [sec] |
|
mod |
int |
DR_MV_MOD_ABS |
이동 기준
|
|
spline_type |
int |
DR_CATMULL_ROM |
|
알아두기
-
단축 인수을 지원합니다. (v:vel, a:acc, t:time)
-
vel이 None인 경우 _global_velj가 적용됩니다. (_global_velj 초기값은 0.0이며, set_velj에 의해 설정 가능)
-
acc이 None인 경우 _global_accj가 적용됩니다. (_global_accj 초기값은 0.0이며, set_accj에 의해 설정 가능)
-
time을 지정할 경우 vel, acc를 무시하고 time 기준으로 처리됩니다.
-
time이 None인 경우 0으로 처리됩니다.
-
mod가 DR_MV_MOD_REL인 경우 pos_list의 각 pos는 앞선 pos에 대한 상대좌표로 정의됩니다. (pos_list=[q1, q2, ...,q(n-1), q(n)]로 이루어질 때 q1은 시작점 대비 상대각도, q(n)은 q(n-1) 대비 상대좌표)
-
선행모션과 후행모션에 대한 온라인 블렌딩은 지원하지 않습니다.
-
spline_type이 DR_CATMULL_ROM인 경우, spline 경로를 이어 계획하는 방식을 지원하지 않습니다.
리턴
|
값 |
설명 |
|---|---|
|
0 |
성공 |
|
음수값 |
오류 |
예외
|
예외 |
설명 |
|---|---|
|
DR_Error (DR_ERROR_TYPE) |
인수들의 데이터형 오류 시 |
|
DR_Error (DR_ERROR_VALUE) |
인수의 값이 유효하지 않을 시 |
|
DR_Error (DR_ERROR_RUNTIME) |
C Extension 모듈 에러 발생 시 |
|
DR_Error (DR_ERROR_STOP) |
프로그램 강제 종료 시 |
예제
# 예제 1. q1~q5 경유하는 스플라인모션 시작 후 3초 후에 D-Out
q0 = posj(0,0,0,0,0,0)
movej(q0, vel=30, acc=60) # 초기위치(q0)로 joint모션 이동
q1 = posj(10, -10, 20, -30, 10, 20) # posj 변수(관절각) q1 정의
q2 = posj(25, 0, 10, -50, 20, 40)
q3 = posj(50, 50, 50, 50, 50, 50)
q4 = posj(30, 10, 30, -20, 10, 60)
q5 = posj(20, 20, 40, 20, 0, 90)
qlist = [q1, q2, q3, q4, q5]
# q1~q5를 경유점 집합으로 하는 리스트(qlist) 정의
amovesj(qlist, vel=30, acc=100)
# qlist에 정의된 경유점 집합을 연결하는 스플라인 곡선을 최대속도
# 30(mm/sec), 최대가속도 100(mm/sec2)로 움직임, 모션시작 즉시
# 다음명령 수행
wait(3) # 3초간 프로그램 일시중지 (모션은 진행 중)
set_digital_output(1 , 1) # D-Out(1번채널) ON
mwait(0) # 모션이 종료할 때까지 프로그램 일시중지
#예제 2. spline_type을 사용한 Spline 연결.
q0 = posj(0,0,0,0,0,0)
movej(q0, vel=30, acc=60) # 초기위치(q0)로 joint모션 이동
q1 = posj(10, -10, 20, -30, 10, 20) # posj 변수(관절각) q1 정의
q2 = posj(25, 0, 10, -50, 20, 40)
q3 = posj(50, 50, 50, 50, 50, 50)
q4 = posj(30, 10, 30, -20, 10, 60)
q5 = posj(20, 20, 40, 20, 0, 90)
qlist = [q1, q2, q3, q4, q5, q0] # q1~q5, q0를 경유점 집합으로 하는 리스트(qlist) 정의
amovesj(qlist, vel=30, acc=100)
# qlist에 정의된 경유점 집합을 연결하는 스플라인 곡선을 최대속도
# 30(mm/sec), 최대가속도 100(mm/sec2)로 움직임
movesj(qlist, vel=30, acc=100)
# 선행 amovesj 모션에 이어 후속 movesj 모션이 연결되어 움직임.
# qlist = [q1, q2, q3, q4, q5, q0, q1, q2, q3, q4, q5, q0] 와 경로 동일