일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- C++ #개발자 #Modern_C++ #스마트포인터 #Smart_Pointer #unique_ptr # shared_ptr # weak_ptr
- Override
- ImageProcessing #ComputerGraphics #ComutationalPhotography #PoissinImageEditing #Siggraph2003
- IK
- C++11
- Kinematics
- CCD
- IKSolver
- c++
- final
- FABRIK
- InverseKinematics
- FABIK
- Modern C++
- 상속
- TwoBoneIK
- 클래스
- ComputerGraphics
- Today
- Total
DevNote
Inverse Kinematics 본문
Computer Graphics 분야에서 다뤄지는 IK(Inverse Kinematics, 역운동학)에 대한 포스트이다.
IK에 대해 이야기하기 전에 Kinematics가 뭔지에 대한 이해가 필요하다. 좀 흔하지 않은(?) 개념이기 때문이다.
Kinematics?
운동학이다. " 움직임에 관여하는 힘과 모멘트(돌림힘) 등을 고려하지 않은! "
즉, 운동의 양상만을 다룬다.
Computer Graphics 분야에서는 주로 관절이 존재하는 물체의 Animation을 다룰 때, Kinematics가 적용되는 경우가 많다.
이 때, 이 관절이 존재하는 물체를 Articulated Body라고 하고, 이는 Joints&Links로 이루어져 있으며, 이를 통해, 물체의 Animation을 표현할 수 있다.
이러한 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> 처럼 지면에 맡게 양 발의 높이와 각도가 조정되어야 한다.
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 |
---|