HI 솔버의 기본 요건은 솔루션이 내역 독립적이어야 한다는 점입니다. 즉, 솔루션이 현재 상태에서만 목표 및 기타 부수적 매개변수에 기반해야 합니다.
위치 목표가 하나의 체인에 대해 지정되면 남는 것은 명백한 자유도, 즉 엔드 이펙터 축(EE 축) 둘레 회전입니다. 자유도는 이러한 자유도의 각도를 양적으로 설명하는 데 사용됩니다.
1. 시작 관절
2. 엔드 이펙터
3. EE축
솔버 평면의 모든 관절을 지나는 평면을 불러옵니다. 관절이 평면에 없는 경우에는 (A)시작 관절 및 끝 관절을 지나고 (B)어떤 의미에서 나머지 관절과 가장 가까운 평면이 되도록 이를 정의합니다.
자유도는 솔버 평면의 자유도 각도를 설명하며 시작 관절만 제한합니다.
수량 측면에서 솔버 평면을 설명하려면 0의 의미에 동의해야 합니다. 엔드 이펙터 위치를 고려할 때 0(솔버) 평면은 어디입니까? 0 평면 맵은 인수 EE 축을 사용하여 0 평면에 대한 법선을 생성합니다.
IK 시스템을 사용하면 개별 솔버 플러그인에서 각자의 0 평면 맵을 정의할 수 있습니다. 이 맵이 정의되지 않은 경우에는 IK 시스템은 기본 맵을 제공합니다.
0 평면 맵의 인수는 EE 축의 방향을 제공하기 위한 단위 벡터입니다. 마찬가지로 EE가 EE축을 따라 미끄러지면 솔버 평면을 고정해야 합니다. 그러므로 0 평면 맵은 구에서 벡터 필드를 정의합니다. 구에서 한 점이 제공되면 0 평면에 대한 법선으로 해석될 접선 단위 벡터를 생성합니다.
1. 0 평면에 대한 법선
구에 연속된 벡터 필드가 존재하지 않는다는 것은 수학적인 사실입니다. 사용자가 얼마나 열심히 노력하는지와 관계없이 구에는 항상 인접 벡터가 동적으로 변경되는 지점만 존재합니다. 이는 엔드 이팩터 축이 여기에 접근할 때 솔버 평면이 대칭 이동되는 위치입니다.
이는 한 편으로는 과거 상태에 독립적이어야 한다는 요구 사항 때문에 하나의 점에 고정 벡터를 할당해야 하기 때문입니다. 또 다른 한편으로는 어떤 벡터가 할당되든지 관계없이 인접 점에 할당된 다른 벡터와는 완전히 달라집니다.
0 평면 맵을 정의하기 위해서는 구의 참조 프레임을 정의해야 합니다. 이 참조 프레임은 관절 체인 자체에 내장됩니다.
구는 중심, 수평 평면 및 자오선(경도 0)으로 정의할 수 있습니다. 중심은 시작 관절에 할당됩니다.
모든 관절 각도가 원하는 각도를 가정할 때의 포즈가 특히 중요합니다. 이를 기본 포즈라고 합니다.
기본 설정 포즈에서의 솔버 평면을 수평 평면으로 사용합니다. 회전 각도는 시작 관절을 제어하는 데 사용되므로 시작 관절에서 원하는 각도는 내재적이지 않습니다. 시작 관절에 0을 할당하고 다른 관절에는 원하는 각도를 할당하여 도출된 솔버 평면을 통해 수평 평면을 정의할 수도 있습니다.
EE축은 자오선을 정의합니다. 이제 구는 다음 그림에 표시된 것처럼 정의됩니다.
1. EE축
모든 관절은 원하는 각도를 가정합니다. 0 평면 맵은 이 구에 정의됩니다.
플러그인 솔버가 고유한 0 평면 맵을 정의하기 위한 API는 실제로 기본 설정된 포즈에서 EE축과 솔버 평면에 대한 법선을 사용합니다.
virtual const IKSys::ZeroPlaneMap* GetZeroPlaneMap(const Point3& a0, const Point3& n0) const
여기서 a0 및 n0는 각각 원하는 포즈의 EE축 및 솔버 평면입니다. ZeroPlaneMap의 오브젝트는 구에서 각 지점에 평면 법선을 할당하는 함수입니다.
플러그인 솔버에서 제공되지 않는 경우(IK 솔버 자체가 플러그인 솔버로 구현됨) IK 시스템에서 기본 맵을 제공합니다. 이 맵은 다음 규칙으로 정의됩니다.
0 평면에 대한 기본 법선 파생
이 방법은 북극이나 남극까지 확장하지는 않습니다. 북극 및 남극은 고유한 지점입니다. EE축이 극을 가로질러 이동하면 법선이 갑자기 방향을 바꿔 사용자 뷰포인트로부터 대칭 이동합니다.
일반적으로 기본 설정된 포즈는 솔버가 처음으로 할당될 때의 것입니다. 따라서 관절을 배치하는 평면은 여기의 수평 평면에 해당합니다. 규칙 A는 평면에서 목표를 움직이더라도 체인이 평면에 남아 있게 해줍니다.
규칙 B는 적도에 수직인 큰 원을 따라 목표를 움직이면 이 맵의 고유 지점인 극을 지날 때를 제외하고는 체인은 수직 상태를 유지합니다.
지금까지 전체 표준이 IK 요소만으로 구성된 것처럼 설명해 왔습니다. 실제로 IK 체인 및 목표는 별도의 변환 계층의 지점에 있을 수도 있습니다. 궁극적으로 표준에서 설명된 엔드 이펙터의 위치를 구에 있는 지점으로 매핑해야 합니다. 구가 엔드 이펙트 위치와 관련되어 마운트되는 방법에 따라 위도와 경도의 판독이 다릅니다. 이 구가 배치될 상위 변환 공간을 회전 각도 상위 공간이라고 하며 컨텍스트가 명확한 경우에는 상위 공간이라고도 합니다.
상위 공간은 IK 매개변수에 대해 변경되지 않습니다. 현재 두 가지 선택 사항이 제공됩니다.
시작 관절 및 목표가 표준에 직접 자리잡는 경우에는 상위 공간을 선택해도 차이가 발생하지 않습니다. 다음 예에서 시작 관절은 오브젝트 A의 상위입니다.
IK 체인은 오브젝트 A에서 시작 관절을 통해 상위로 지정됩니다.
이것을 IK 솔버가 할당될 때의 포즈라고 가정합니다. 따라서 기본 포즈가 됩니다. 관절이 위치한 평면은 0 평면 맵 구의 수평 평면입니다.
다음 예에서는 IK 솔버가 할당될 때 상위 공간에 회전이 있는 사례를 찾아봅니다.
IK 솔버가 할당될 때 IK 체인의 상위 공간에 회전이 있습니다.
상위 A에는 90도 회전이 포함되어 있습니다. 이것은 사용자가 IK 솔버 없이 4개의 골격을 만든 다음 나중에 Bone2에서 Bone4까지 IK 솔버를 할당하는 경우를 추상화한 것입니다. 체인을 표준의 직접적인 상위로 지정하면 오른쪽 그림에 표시된 대로 나타납니다. 솔버 평면이 수평으로 됩니다.
B의 문제는 오른쪽 그림이 표시되지 않는다는 점입니다. 대칭 이동을 이해하려면 그림을 상상해야 합니다.
이 예는 시작 관절이 다시 할당될 때 발생하는 상황에 대해 설명합니다. 골격 노드 네 개의 IK 체인이 있다고 가정합니다.
1. Bone01
2. Bone02
3. Bone03
4. Bone04
시작 및 끝 관절은 각각 Bone01과 Bone04입니다. 그림에 표시된 포즈가 원하는 포즈이고 Bone01에 회전이 있다고 가정해 보겠습니다. Bone02가 표준의 직접적인 상위가 되면 Bone02의 계층은 오른쪽 그림과 같이 나타납니다.
시작 관절을 Bone02에 다시 할당하면 0 평면 맵 구는 오른쪽의 구성을 기반으로 합니다.
솔버/목표를 삭제하고 Bone02부터 Bone04까지 새 솔버/목표를 할당하면 체인이 대칭 이동되지 않습니다. 그 이유는 무엇일까요? 시작 관절 할당은 새로운 IK 체인/목표를 작성하는 것과는 다릅니다. 시작 관절은 많은 IK 매개변수 중 하나입니다. 이를 다시 할당하는 것은 매개변수를 수정하는 것과 같습니다. 나머지 매개변수는 그대로 유지됩니다. 특히 회전 각도는 이 다시 할당의 결과로서 변경되지 않습니다.
새로운 IK 체인/목표를 작성하는 것은 다릅니다. 매개변수를 적합하게 조정하여 관절 체인이 고정되도록 할 수 있습니다. 특히 회전 각도는 솔버 평면이 뷰포트에서 고정 상태를 유지할 수 있는 값으로 설정됩니다.