fkin(순기구학)
이 함수는 로봇 기구학 체인에서 주어진 조인트 각도로 TCP 포즈(작업 공간 위치와 자세)를 계산합니다. ikin의 역연산으로, 조인트 값을 직교 좌표로 변환합니다.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
LPROBOT_POSE fkin(
float fSourcePos[NUM_JOINT],
COORDINATE_SYSTEM eTargetRef = COORDINATE_SYSTEM_BASE
) {
return _fkin(_rbtCtrl, fSourcePos, eTargetRef);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fSourcePos |
float[6] |
각 축의 조인트 위치 [deg]입니다. |
|
eTargetRef |
COORDINATE_SYSTEM_BASE |
TCP 출력의 기준 좌표계(Reference Coordinate System)입니다. |
반환값
값 |
설명 |
|---|---|
계산된 TCP 위치와 자세(x, y, z, Rx, Ry, Rz)를 담은 구조체입니다. |
참고
이 함수는 컨트롤러가 응답할 때까지 기다립니다.
반환된 포인터는 CDRFLEx 객체 안의 저장 공간을 가리키며, 이 공간은 다른 DRFL 호출과 재연결 때마다 다시 사용됩니다. 다른 DRFL 함수를 호출하기 전에 구조체를 복사해 두세요. 인수가 3개인 ikin은 프로세스 안의 모든 CDRFLEx 객체가 공유하는 저장 공간에 결과를 반환합니다. ikin을 참고하세요. get_user_home을 제외하면 포인터는 NULL이 아닙니다. 실패 여부를 NULL 검사로 판단하지 마세요.
예제
float q1[6] = { 0.f, 90.f, 0.f, 90.f, 90.f, 0.f };
drfl.movej(q1, 60, 30); // 로봇을 초기 조인트 포즈로 이동
float q2[6] = { 30.f, 0.f, 0.f, 0.f, 90.f, 0.f };
LPROBOT_POSE res = drfl.fkin(q2, COORDINATE_SYSTEM_WORLD);
float vel[2] = { 100, 100 };
float acc[2] = { 200, 200 };
float tcp[6] = { 0 };
for (int i = 0; i < 6; ++i)
tcp[i] = res->_fPosition[i];
drfl.movel(tcp, vel, acc);
이 예제는 WORLD 좌표계에서 조인트 각도 q2의 순기구학(Forward Kinematics)을 계산해 TCP 포즈 tcp를 구합니다. 그런 다음 이 포즈를 movel()의 모션 목표로 사용해, 순기구학 결과를 직교 좌표 제어에 바로 재사용하는 방법을 보여 줍니다.