gyroflow doc 번역글입니다.
Orientation과 smooting // stabilization
방향을 보정하기 위해서는 smoothing 알고리즘을 사용해야 한다. 이는 본질적으로 3D orientation에 low pass filter을 적용하는 것인데, 아주 간단한 예시를 한번 보자.
Exponential filter
α가 0과 1사이의 값이고, Yt가 t번째의 input sample이라 하자. 이 low pass filter을 통과한 Output인 St는 다음과 같이 나타내어질 수 있다.
위의 식은 간단하게 이전의 output과 새로운 input sample에 대한 가중합으로 이해할 수 있다. 결과적으로 1D의 smoothed signal이 생성되지만, input의 부분만을 반영하기 때문에 delay가 생긴다. 같은 필터를 2번 서로 반대 방향으로 사용함으로써 delay를 줄일 수 있다.
자, 이제 이를 3차원으로 확대해보고자 한다. 3차원 orientation을 다루는 가장 쉬운 방법은 low pass filter을 각각의 축에 대해서 적용해주는 것이다. 하지만 이렇게 하면 우리가 예상하는 정도의 smoothing 결과는 나오지 않는다. 예를 들어, orientation이 Euler angle로 표현되어 있다면, 각 축에 low pass filter을 적용하는 것은 non-linear한 결과를 야기한다.
Euler angle 대신에 quaternion으로 표현되어 있다면, Slerp가 사용될 수 있다. Slerp는 두개의 original quaternion이 있을 때 그 두 벡터 사이의 부드러운 궤적을 계산하여 중간 orientation을 뽑아낼 수 있다. 이게 딱 위의 exponential smoothing에서 사용했던 개념과 유사한데, 결국 가중합이라는 것은 t번째 input sample Yt에서 시작하여 St-1로 α만큼 다가간다는 것이기 때문이다. 그래서 다음과 같이 식으로 나타낼 수 있다.
위에서 언급했듯이, 양방향으로 모두 적용하면 딜레이를 줄일 수 있다. 이를 통해 Input quaternion (추정된 카메라 모션)과 output quaternion (smoothed 가상 카메라)는 stabilization에 사용될 수 있다. 되게 간단하기 때문에, gyorflow project에서 처음에는 slerp 방식을 사용했었지만 많은 한계점들이 있었다. 주로 야기되는 문제들은 camera shake가 많을 때와 각각의 회전 축에 대해서 smoothness control이 없다는 것이었다. 하지만, 이런 기본적인 아이디어를 제공함으로써 당신만의 smoothing algorithm 제작에 힘이 되길 바란다.
'컴퓨터공학' 카테고리의 다른 글
삼성전자 SW 코딩테스트, 마법사 상어와 복제 (0) | 2022.03.24 |
---|---|
삼성 SW 코테 기출, 어항정리 (0) | 2022.03.22 |
Volatile GPU-Util이 낮게 나오는 이유 (0) | 2022.02.11 |
Pytorch loss nan 문제 (0) | 2022.02.11 |
Pytorch 시드 고정하는 법 (0) | 2022.02.10 |