정의
ikin(pos, sol_space, ref, ref_pos_opt, iter_threshold)
기능
작업 공간내 기준 좌표계(ref)의 로봇 포즈에 상응하는 8개의 관절형상 중 지정한 관절형상(posx.sol)에 해당하는 관절각도를 리턴합니다. 관절각도는 옵션(ref_pos_opt)에 따라 기준 각도에 가장 가까운 값을 리턴합니다. 리턴 값 status를 통해 현재 로봇 포즈가 동작 영역을 벗어나는지 손목 축 특이점 영역에 있는지 확인 할 수 있습니다. posx.sol에 DR_SOL_AUTO(255)를 지정할 시, 도달 가능한 관절조합형태 중, 현재 robot configuration과 관절 공간 상에서 가장 가까운 (2-5축의 관절 공간의 L2 norm이 가장 작음) Solution Space로 이동합니다.
알아두기
-
SW 버전 V2.9 이후, 본 기능을 사용할 때 로봇의 정확도가 보정이 된 경우 정확도 보정 알고리즘이 동작합니다. 정확도 수준은 옵션(iter_threshold)에 따라 조정이 가능합니다. 또한 로봇 자세에 따라서 최대 0.1초의 지연이 있을 수 있습니다.
-
로봇 각 모델 별로 알려진 보정 전 DH 파라미터 값에 해당하는 역기구학 해를 구하기 위해서는 ikin_norm() 명령어를 참조 하시기 바랍니다.
-
ikin의 return posj 값을 thread를 사용하여 전역변수 업데이트 하는 경우, 'Lock'을 사용하여 전역변수의 충돌을 막으십시오.
주의
res_pos_opt 파라미터를 입력하지 않을 경우 pos 만 반환됩니다. ref_pos_opt 파라미터를 입력하지 않은 상태에서 ref, status = ikin(...) 형태로 사용할 경우 Runtime error가 발생할 수 있습니다.
인수
|
인수명 |
자료형 |
기본값 |
설명 |
|
pos |
posx |
- |
posx 또는 position list |
|
list (float[6]) |
|||
|
sol_space |
int |
- |
solution space
|
|
ref |
int |
DR_BASE |
reference coordinate
|
|
ref_pos_opt |
int |
0 |
멀티턴 해 생성시 옵션에 따른 기준 위치에 가까운 해 선택
|
|
iter_threshold |
list (float[2]) |
0.005 |
정확도가 보정 된 경우, 정확도 보정 알고리즘의 수준 TCP position (X, Y, Z)의 norm 값 [mm] |
|
0.01 |
정확도가 보정 된 경우, 정확도 보정 알고리즘의 수준 TCP orientation (A, B, C)의 norm 값 [deg] |
Solution Space w.r.t. Robot Configuration
|
Solution space |
Binary |
Shoulder |
Elbow |
Wrist |
|
0 |
000 |
Lefty |
Below |
No Flip |
|
1 |
001 |
Lefty |
Below |
Flip |
|
2 |
010 |
Lefty |
Above |
No Flip |
|
3 |
011 |
Lefty |
Above |
Flip |
|
4 |
100 |
Righty |
Below |
No Flip |
|
5 |
101 |
Righty |
Below |
Flip |
|
6 |
110 |
Righty |
Above |
No Flip |
|
7 |
111 |
Righty |
Above |
Flip |
|
255 |
Auto Calculation (the smallest L2 norm in the joint space of axes 2-5) |
|||
리턴
|
값 |
설명 |
|---|---|
|
posj |
Joint space point |
|
status |
|
예외
|
예외 |
설명 |
|---|---|
|
DR_Error (DR_ERROR_TYPE) |
인수들의 데이터형 오류 시 |
|
DR_Error (DR_ERROR_VALUE) |
인수의 값이 유효하지 않을 시 |
|
DR_Error (DR_ERROR_RUNTIME) |
C Extension 모듈 에러 발생 시 |
|
DR_Error (DR_ERROR_STOP) |
프로그램 강제 종료 시 |
예제
## 2.x 호환 코드
x1 = posx(370.9, 719.7, 651.5, 90, -180, 0)
q1, status = ikin(x1, 2, DR_BASE, ref_pos_opt=0) # 로봇끝단의 좌표가 x1이 되는 관절각 q1 (8가지 경우 중 첫번째), posj(0,0,0,0,0,0) 조인트 각도 기준
# q1=posj(60.3, 81.0, -60.4, -0.0, 159.4, -29.7) (M1013, tcp=(0,0,0)경우)
movej(q1,v=10,a=20)
## 3.2~ 코드
x1 = posx(370.9, 719.7, 651.5, 90, -180, 0, sol=2)
q1, status = ikin(x1, ref=DR_BASE, ref_pos_opt=0) # 로봇끝단의 좌표가 x1이 되는 관절각 q1 (8가지 경우 중 첫번째), posj(0,0,0,0,0,0) 조인트 각도 기준
# q1=posj(60.3, 81.0, -60.4, -0.0, 159.4, -29.7) (M1013, tcp=(0,0,0)경우)
movej(q1,v=10,a=20)
관련 명령어