ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Gimbal Lock
    카테고리 없음 2021. 5. 31. 22:35

    역학에서 3차원 물체가 놓인 방향을 나타내기 위해 오일러 각을 사용한다.

     

    아래 링크의 움짤이 오일러 각을 설명하기에 좋아보여서 가져옴...

    출처: https://en.wikipedia.org/wiki/File:Euler2a.gif

     

    위의 움짤을 참고하면서 아래의 설명을 읽으면 오일러 각을 이해할 수 있을 것이다.

    orientation이 0, 0, 0 일 때의 모습. 월드 좌표와 바디 좌표가 일치한다.

     

    z 축을 회전축으로 회전. 보통 ψ로 많이 표시한다.

    현재 바디의 orientation은 ψ, 0, 0

     

    ψ회전을 한 상태에서 바디 좌표계의 x축을 회전축으로 해서 회전한다. 보통 θ로 표현한다.

    바디의 orientation은 ψ, θ, 0

     

    ψ와 θ 회전을 한 상태에서 바디 좌표계의 x축을 회전축으로 회전한다. 보통 φ로 표현한다.

    바디의 orientation은 ψ, θ, φ

     

    3차원에서의 물체가 놓인 방향을 기술하는데에 유용하게 쓸 수 있다.

    다만, 오일러 각을 이용해서 물체의 orientation이 달라지는 모션을 표현하려고 하면 문제가 있다.

     

    Gimbal Lock

     

    www.ctralie.com/Teaching/COMPSCI290/Materials/EulerAnglesViz/

    위의 링크는 gimbal을 통해서 3차원 각도?를 시각적으로 보여주는 사이트이다.

    z-x-z 회전인 오일러각과 달리, Yaw Pitch Roll이라서 z-y-x 순서로 회전.

    하지만, 얘도 

    Yaw: psi 360 to negative

    Pitch: theta 90 to negative

    Roll: phi 360 to negative

    이렇게 생각하면 오일러각의 z-x-z 회전으로 변환 가능하다.

    (정면이 y축 방향이라고 생각하면 된다. 원래 정면을 x축 기준으로 보는 것이 관습이지만, 왠지 오일러 각이 z-y-z 회전이라고 착각을 해버린 탓에... 뒤늦게 깨달아보니 사진 영상 자료가 이미 다 잘못되어있어 그냥 point of view를 돌리는 것으로 쉽게 해결을 보기로 했다.)

    이 사이트에서 제공하는 Yaw Pitch Roll 회전이 z-x-z 회전을 제공함은 각자 위의 사이트에 접속해서 돌려보며 알아서 깨달아보자.

    이 상태를 오일러 각의 0, 0, 0 이라고 생각하면 된다.

    같은 상태를 y축 방향에서 보자.

    이 상태에서 아래의 방향으로 비행기를 돌릴 수 있을까?

    가능한 회전은 world 축 기준 z축 중심 회전, 그 회전 된 좌표계의 x축 기준 회전, 그 회전 된 좌표계의 z축 기준 회전 세 가지 밖에 없다.

    지금은 0, 0, 0 상태이므로 월드 좌표와 1번 2번 좌표계가 일치하는 상황이므로, 가능한 회전은 월드 좌표 기준으로 x, z축 기준 회전 밖에는 없는 상황이다.

    어떻게 돌릴 수 있을까?

     

    짜잔! 이렇게 돌리면 된다. 자체 오일러 각 변환 계산에 따르면 위의 상태는 90, 20, -90에 대응되는 상태이다.

    그런데 어쩐지, 90, 20, -90 상태는 0, 0, 0일 때와는 짐벌 축이 굉장히 많이 다르게 놓여있다.

     

    그래서 일단 어떻게 돌린건지 영상으로 먼저 확인해보도록 하자.

    오잉? 경로의 상태가?

    일단 위의 영상은 0, 0, 0 -> 90, 20, -90 으로의 회전을 z축 방향에서 아래로 내려다 본 영상이다.

    그리고 보다시피 옆으로 그냥 누워버리면 되는 걸 굳이 곡선으로 이동하고 있다.

    하지만 바로 옆으로 누워서 이동할 수 없는 이유는, 위에서도 언급했듯이 0, 0, 0 상태일 때는 y축을 회전축으로 회전하는 동작이 불가능하기 때문이다.

     

    위의 회전을 곡선경로로 이동하지 않고 최단거리 경로로 곧바로 회전하는 방법이 있긴 하다.

    바로 아래와 같이 두 단계로 나눠서 회전하면 된다.

     

    혹시 옆으로 20도 돌린게 20도가 너무 큰 각도라서 경로가 저렇게 휘었을거라고 추측했던 사람이 있다면,(사실 처음의 접니다...)

    이 방법을 보고나서 각도의 크기가 문제가 아니었다는 사실을 깨달았으면 좋겠다.

     

    ( https://math.stackexchange.com/a/8984

    좀 더 수학적인 관점에서 Gimbal Lock의 이유를 찾고 싶다면 위의 링크를 보면 도움이 될 것이다. 필자는 이제 수식 끄적끄적하기에는 감도 떨어졌고, 어차피 수식으로 증명하는게 그렇게 중요한 문제라고 생각하지도 않아서, 그냥 특정 각도에서 미분한 값에 뭔가 문제가 있구나라고 생각하고 넘어가려고 한다. 혹시 수학적으로 증명한 사람이 있다면 댓글로 링크를 걸어주면 고마울 것 같긴 하다.)

     

    요약:

    1. 같은 상태 다른 representation이 가능하다. (0, 0, 0 과 90, 0, -90 비행기의 대가리 방향은 같다)

    0, 0, 0과 90, 0, -90이 같음. (걍 x,0,-x가 모두 같은 상태를 의미함)

    2. 90, 0, -90에서 시작했으면 걍 직진해서 옆으로 돌리는 것이 가능했을 것이다.

    3. 하지만 재수가 없게도 0, 0, 0으로 represent 된 상태이기 때문에, y축을 회전축으로 회전이 안 되기 때문에 직진을 못하고 돌아서 가야하는 불상사가 생기고 말았다.

    4. 오일러 각 representation에 한계가 있어서 특정 상태일 때 특정 방향으로의 움직임이 제한되는 현상이 있다. 이를 Gimbal Lock이라고 한다.

     

    오일러 각에 Gimbal Lock 문제가 있어 특정 방향에서의 회전이 어색하기 보이기 때문에, 다행스럽게도 사람들은 3d 회전 motion을 기술하는 다른 표현법을 개발해냈다.

    다음 시간에는 오일러 각 회전을 대체하는 (위의 math stackexchange 링크를 읽어본 사람이라면 이미 봤겠지만) 쿼터니언에 대해서 알아보자.

    댓글

Designed by Tistory.