DevNote

Inverse Kinematics 본문

Graphics

Inverse Kinematics

Ahnda 2020. 11. 4. 10:26

Computer Graphics 분야에서 다뤄지는 IK(Inverse Kinematics, 역운동학)에 대한 포스트이다.

IK에 대해 이야기하기 전에 Kinematics가 뭔지에 대한 이해가 필요하다. 좀 흔하지 않은(?) 개념이기 때문이다.

 


Kinematics?

운동학이다. " 움직임에 관여하는 힘과 모멘트(돌림힘) 등을 고려하지 않은! "

즉, 운동의 양상만을 다룬다.

 

 Computer Graphics 분야에서는 주로 관절이 존재하는 물체의 Animation을 다룰 때, Kinematics가 적용되는 경우가 많다.

 

 이 때, 이 관절이 존재하는 물체를 Articulated Body라고 하고, 이는 Joints&Links로 이루어져 있으며, 이를 통해, 물체의 Animation을 표현할 수 있다.

 

Fig 1. Articulated Body, 푸른 원은 Joint, 검정 실선은 Link

 이러한 Kinematics는 크게 Forward Kinematics와 Inverse Kinematics 두 가지로 나뉜다.

 


Forward Kinematics(FK)?

 앞서 말한 Articulated Body를 통해 걸어가는 동작이 있다고 가정하면, FK는 각 관절의 Rotation을 조절하여 원하는 포즈를 만들어낸다. 

 

 좀 더, 의미 있게 표현하자면 각 관절의 각도(포즈)를 입력으로 주어 End Effector의 좌표를 얻어낸다. End Effector는 <Fig 1>의 머리와 각 팔다리의 끝(빨간선 끝)이라고 생각하면 된다. 

 

 정리하자면 아래의 표와 같다.

Input  각 관절의 각도, 포즈
Ouput  End Effector의 좌표

 

 FK를 이용해 물체의 Animation을 표현하려면, 모든 관절의 각도를 정의해야한다.

 이는 굉장히 직관적이지 못하다. 보통 Articulated Body는 10개 이상의 복잡한 구조로 되어있기 때문에,

 

" 관절의 각도 표현만으로 어떤 움직임이 나올지, 어느 위치에 가있을지 예측하기 힘들다는 뜻이다. "

 


Inverse Kinematics(IK)?

 IK는 FK의 반대라고 생각하면 개념에 대한 이해가 쉽다. 즉, 위치가 주어지면 End Effector가 가능한 정확하게 그 위치로 이동할 수 있도록 각 관절들의 각도(포즈)를 구하는 문제이다.

Input  Target 좌표
Ouput  각 관절의 각도, 포즈

 

IK는 왜 사용할까?

 1. 특정한 경우(?)에 FK는 직관적이지 않을 수 있기 때문이다. 

 예를 들면, 어떤 인간형 캐릭터가 물건을 집어올리는 모션을 연출하고자 할 때, 각 관절들의 각도를 조절해서 원하는 포즈를 정의하는 것(FK)보다는 캐릭터의 End Effector를 직접 물건의 위치(타겟)에 가져다 놓는 것(IK)이 더 직관적인 방법이다. 

 

 2. 울퉁불퉁한 표면에 대한 애니메이션 처리가 필요한 경우 IK를 이용하는 것이 더 편리하다.

예를 들면 캐릭터가 경사진 표면에 서있는 경우 아래의 <Fig 2> 처럼 지면에 맡게 양 발의 높이와 각도가 조정되어야 한다.

 

Fig2. Joint L과 R이 서있는 지면에 맞게 회전되어 있음.

 

 

IK를 통해 어떻게 포즈가 계산될까?

 

 FK는 하나의 포즈를 통해 하나의 위치를 계산하는 반면(Unique Solution), IK는 보통 하나 이상의 해(Multiple Solution)를 갖는다. End Effector 중 어떤 것이든 원하는 타겟 위치에 여러 가지 방법으로 이동할 수 있기 때문이다.

 

 그렇다면, 정답이 될 수 있는 포즈들 중에 너무나도 이상한 포즈가 나올 수 있을까? ㅇㅇ 그렇다.

그래서 최적의 포즈를 찾기 위한 제약조건들과 IK Solver 개념이 나오는데....

 

 수학적인 관점에서 IK는 최적화 문제이다.

왜냐? 보통의 경우 주어진 값보다 구해야하는 해가 더 많이 때문이다. 

(쉽게 말하면, 타겟의 위치와 회전값 총 6개가 주어지고, 구해야하는 관절들의 각도는 아마 6개 이상일 것이기 때문이다. 그리고 사실 관절하나의 회전도 3차원으로 표현하면 x, y, z 축에 대한 회전 세 개다. 관절이 3개만 있어도, 구해야할 값이 9개가 된다...)

 

 주어진 제약조건(link의 길이, 관절의 가동범위 등)과 타겟의 위치(+회전값)만으로 최적의 해(근사해)를 구해야 하기 때문에 IK는 최적화 문제이다. (여기서 최적화는 Error Minimization의 개념으로 보는게 정확)

 

 이 최적화 문제를 풀기 위해 여러 가지 IK Solver들이 존재한다.

 


References

Inverse Kinematics Techniques in Computer Graphics: A Survey

 

en.wikipedia.org/wiki/Inverse_kinematics

 

Inverse kinematics - Wikipedia

Forward vs. Inverse Kinematics In computer animation and robotics, inverse kinematics is the mathematical process of calculating the variable joint parameters needed to place the end of a kinematic chain, such as a robot manipulator or animation character'

en.wikipedia.org

medium.com/unity3danimation/overview-of-inverse-kinematics-9769a43ba956


 IK Solver에 관한 내용은 다음 포스트에...

'Graphics' 카테고리의 다른 글

IK Solvers  (0) 2020.11.05