Main Content

generalizedInverseKinematics

다중 제약 조건이 있는 역기구학 솔버 만들기

설명

generalizedInverseKinematics System object™는 일련의 역기구학 제약 조건을 사용하여 rigidBodyTree 객체로 지정된 강체 트리 모델의 조인트 컨피규레이션을 계산합니다. generalizedInverseKinematics 객체는 비선형 솔버를 사용하여 제약 조건을 충족하거나 최적의 근삿값에 도달합니다.

객체를 호출하기 전에 제약 조건 유형 ConstraintInputs를 지정합니다. 객체를 호출한 후 제약 조건 입력값을 변경하려면 release(gik)를 호출하십시오.

제약 조건 입력값을 constraint 객체로 지정하고, 이 객체를 인수로 전달하여 generalizedInverseKinematics를 호출합니다. constraint 객체를 생성하려면 다음 객체를 사용합니다.

유일한 제약 조건이 엔드 이펙터 위치와 방향인 경우 inverseKinematics를 솔버로 사용해 보십시오.

닫힌 형식의 해석적 역기구학 해에 관해서는 analyticalInverseKinematics 항목을 참조하십시오.

일반화된 역기구학 제약 조건을 풀려면 다음을 수행합니다.

  1. generalizedInverseKinematics 객체를 만들고 속성을 설정합니다.

  2. 함수를 호출하는 것처럼 인수를 사용하여 객체를 호출합니다.

System object의 작동 방식에 대해 자세히 알아보려면 System Object란? 항목을 참조하십시오.

생성

설명

예제

gik = generalizedInverseKinematics는 강체 트리 모델이 지정되지 않은, 일반화된 역기구학 솔버를 반환합니다. 이 솔버를 사용하기 전에 rigidBodyTree 모델과 ConstraintInputs 속성을 지정하십시오.

gik = generalizedInverseKinematics('RigidBodyTree',rigidbodytree,'ConstraintInputs',inputTypes)는 강체 트리 모델 및 지정된 예상 제약 조건 입력값과 함께 일반화된 역기구학 솔버를 반환합니다.

gik = generalizedInverseKinematics(Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 각 속성 이름이 지정된 값으로 설정되어 있는 일반화된 역기구학 솔버를 반환합니다. Name은 작은따옴표('')로 묶어야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍 인수를 임의의 순서로 지정할 수 있습니다.

속성

모두 확장

별도의 표시가 없는 한, 속성은 조정 불가형입니다. 즉 객체를 호출한 후 해당 값을 변경할 수 없습니다. 객체를 호출하면 객체가 잠기며, 잠긴 객체는 release 함수로 해제합니다.

속성이 조정 가능형이면 언제든지 해당 값을 변경할 수 있습니다.

속성값 변경에 대한 자세한 내용은 MATLAB에서 System Object를 사용하는 시스템 설계 항목을 참조하십시오.

읽기 전용 속성입니다.

제약 조건 입력값의 개수로, 스칼라로 지정됩니다. 이 속성의 값은 ConstraintInputs 속성에 지정된 제약 조건 유형의 개수입니다.

제약 조건 입력 유형으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 가능한 제약 조건 입력 유형 및 각 유형과 연결된 constraint 객체는 다음과 같습니다.

또한 제약 조건이 적용된 모션이 두 바디 사이에 추가된 조인트의 모션과 유사하도록 두 개의 강체를 제약하는 폐루프 조인트 제약 조건이 있습니다. 이에 해당하는 제약 조건 입력 유형 및 각 유형과 연결된 constraint 객체는 다음과 같습니다.

constraint 객체를 사용하여 필요한 파라미터를 지정하고, 객체를 호출할 때 해당 객체 유형을 이 객체에 전달합니다. 예를 들면 다음과 같습니다.

일반화된 역기구학 solver 객체를 만듭니다. RigidBodyTree 속성과 ConstraintInputs 속성을 지정합니다.

gik = generalizedInverseKinematics(...
					'RigidBodyTree',rigidbodytree,
					'ConstraintInputs',{'position','aiming'});

대응하는 constraint 객체를 만듭니다.

positionTgt = constraintPositionTarget('left_palm');
aimConst = constraintAiming('right_palm');

constraint 객체를 초기 추측값과 함께 solver 객체에 전달합니다.

configSol = gik(initialGuess,positionTgt,aimConst);

강체 트리 모델로, rigidBodyTree 객체로 지정됩니다. 솔버를 사용하기 전에 이 속성을 정의하십시오. 강체 트리 모델을 수정하는 경우 이 속성에 강체 트리를 재할당하십시오. 예를 들면 다음과 같습니다.

IK 솔버를 만들고 강체 트리를 지정합니다.

gik = generalizedInverseKinematics(...
					'RigidBodyTree',rigidbodytree,
					'ConstraintInputs',{'position','aiming'});

강체 트리 모델을 수정합니다.

addBody(rigidbodytree,rigidBody('body1'),'base')

IK 솔버에 강체 트리를 재할당합니다. 강체 트리 모델을 수정하기 전에 솔버 또는 step 함수가 호출되면 release를 사용하여 속성을 변경할 수 있도록 하십시오.

gik.RigidBodyTree = rigidbodytree;

역기구학의 해를 구하기 위한 알고리즘으로, 'BFGSGradientProjection' 또는 'LevenbergMarquardt'로 지정됩니다. 각 알고리즘에 대한 세부 정보는 역기구학 알고리즘 항목을 참조하십시오.

지정된 알고리즘과 연결된 파라미터로, 구조체로 지정됩니다. 구조체의 필드는 알고리즘에 따라 다릅니다. 솔버 파라미터 항목을 참조하십시오.

사용

설명

[configSol,solInfo] = gik(initialguess,constraintObj,...,constraintObjN)은 초기 추측값과 쉼표로 구분된 제약 조건 설명 객체의 목록을 기반으로 조인트 컨피규레이션 configSol을 구합니다. 제약 조건 설명의 개수는 ConstraintInputs 속성에 따라 달라집니다.

입력 인수

모두 확장

로봇 컨피규레이션의 초기 추측값으로, 구조체형 배열 또는 벡터로 지정됩니다. initialguess의 값은 gik에 지정된 RigidBodyTree 속성에 지정된 객체의 DataFormat 속성에 따라 달라집니다.

이 초기 추측값을 사용해서 솔버가 목표한 로봇 컨피규레이션에 도달하도록 합니다. 그러나 해가 이 초기 추측값에 가까울 것이라는 보장은 없습니다.

gikConstraintInputs 속성에 의해 정의된 제약 조건 설명으로, 다음 constraint 객체 중 하나 이상으로 지정됩니다.

출력 인수

모두 확장

로봇 컨피규레이션 해로, gik에 지정된 RigidBodyTree 속성에 지정된 객체의 DataFormat 속성에 따라 구조체형 배열 또는 벡터로 반환됩니다.

구조체형 배열에는 다음과 같은 필드가 포함되어 있습니다.

  • JointNameRigidBodyTree 로봇 모델에 지정된 조인트 이름에 대한 문자형 벡터

  • JointPosition — 해당 조인트의 위치

이 벡터 출력값은 구조체 출력값의 JointPosition에 주어지는 조인트 위치로 구성된 배열입니다.

이 조인트 컨피규레이션은 해 허용오차 내에서 타깃 엔드 이펙터 자세를 구현하도록 계산된 해입니다.

참고

회전 조인트의 경우 조인트 제한이 2*pi 범위를 초과하여 조인트 위치 래핑이 발생하면 조인트의 하한에 가장 가까운 조인트 위치가 반환됩니다.

해 정보로, 다음 필드를 포함하는 구조체로 반환됩니다.

  • Iterations — 솔버에 의해 실행된 반복 횟수입니다.

  • NumRandomRestarts — 솔버가 국소 최솟값에 고착되었을 때 무작위로 재시작한 횟수입니다.

  • ConstraintViolation — 제약 조건에 대한 정보로, 구조체형 배열로 반환됩니다. 배열의 각 구조체에는 다음 필드가 있습니다.

    • Type: 해당 제약 조건 입력의 유형으로, ConstraintInputs 속성에서 지정됩니다.

    • Violation: 해당 제약 조건 유형에서 발생한 제약 조건 위반으로 구성된 벡터입니다. 0은 제약 조건이 충족되었음을 나타냅니다.

  • ExitFlag — 솔버 실행과 그 반환 원인의 세부 정보를 알려주는 코드입니다. 각 솔버 유형의 종료 플래그는 종료 플래그 항목을 참조하십시오.

  • Status — 해가 각 제약 조건에 의해 정의된 허용오차 내에 있는지('success') 설명하는 문자형 벡터입니다. 해가 허용오차를 벗어나면 솔버가 구할 수 있는 최선해('best available')가 주어집니다.

객체 함수

객체 함수를 사용하려면 System object를 첫 번째 입력 인수로 지정하십시오. 예를 들어 obj라는 System object의 시스템 리소스를 해제하려면 다음 구문을 사용합니다.

release(obj)

모두 확장

stepSystem object 알고리즘 실행
release리소스 해제 및 System object 속성값과 입력 특성 변경 허용하기
resetSystem object의 내부 상태 재설정

예제

모두 축소

로봇 팔이 특정 위치에서 로봇 베이스 쪽을 향하고 있는 일반화된 역기구학 솔버를 만듭니다. constraint 객체를 만들어 필요한 제약 조건 파라미터를 솔버에 전달합니다.

Robotics System Toolbox™ loadrobot에서 rigidBodyTree 객체로 반환되는 KUKA iiwa 14 로봇 모델을 불러옵니다.

manipulator = loadrobot("kukaIiwa14");

일반화된 역기구학을 풀기 위한 System object™를 만듭니다.

gik = generalizedInverseKinematics;

KUKA LBR 로봇을 사용하도록 System object를 구성합니다.

gik.RigidBodyTree = manipulator;

제약 조건 입력값이 constraintAiming 객체와 constraintPositionTarget 객체임을 솔버에게 알려줍니다.

gik.ConstraintInputs = {"position","aiming"};

constraint 객체를 2개 만듭니다.

  1. iiwa_link_ee_kuka 바디의 원점은 로봇의 베이스 프레임을 기준으로 [0.0 0.5 0.5]에 위치해 있습니다.

  2. iiwa_link_ee_kuka 바디의 z축은 로봇의 베이스 프레임 원점을 향하고 있습니다.

posTgt = constraintPositionTarget("iiwa_link_ee_kuka");
posTgt.TargetPosition = [0.0 0.5 0.5];

aimCon = constraintAiming("iiwa_link_ee_kuka");
aimCon.TargetPoint = [0.0 0.0 0.0];

제약 조건을 충족하는 컨피규레이션을 구합니다. ConstraintInputs 속성에 지정된 순서대로 constraint 객체를 System object에 전달해야 합니다. 로봇 컨피규레이션에서의 초기 추측값을 지정합니다.

q0 = homeConfiguration(manipulator); % Initial guess for solver
[q,solutionInfo] = gik(q0,posTgt,aimCon);

솔버가 반환한 컨피규레이션을 시각화합니다.

show(manipulator,q);
title(sprintf("Solver status: %s", solutionInfo.Status))
axis([-0.75 0.75 -0.75 0.75 -0.5 1])

Figure contains an axes object. The axes object with title Solver status: success, xlabel X, ylabel Y contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

타깃 위치에서 베이스의 원점까지의 선분을 플로팅합니다. tool0 프레임의 원점이 선분의 한쪽 끝과 일치하고 z축이 선분과 정렬되어 있습니다.

hold on
plot3([0.0 0.0],[0.5 0.0],[0.5 0.0],"--o")
hold off

Figure contains an axes object. The axes object with title Solver status: success, xlabel X, ylabel Y contains 30 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

확장 기능

버전 내역

R2017a에 개발됨

모두 확장