로봇팔을 알고싶다

001. 방향과 좌표계에 대해서.. (1)

movabro 2021. 3. 27. 17:44

'좌표계'에 대한 주제를 로보틱스 카테고리의 첫 주제로 잡은 이유는 '그냥 떠올라서' 이다.

 

실은 로보틱스 교과서를 첫 부분에 나오는 내용으로 좌표계와 그 변환에 관련된 내용이 나오는 경우가 많은데, 내가 좌표계에 대한 내용으로 글을 시작해야 겠다고 마음을 먹게된 이유는 교과서 편성과는 전혀 상관이 없다. 하지만 교과서의 앞부분에 나오는 내용들은 뒷부분의 이론들을 설명하는 전제가 되기 때문에 난이도와 상관 없이 중요한 내용인 경우가 많기도 해서 처음으로 쓰게될 주제를 선정하는 과정에서 '좌표계'가 바로 떠오른 것은 잘된 일이긴 하다.

 

부끄러운 일이지만 나는 좌표계에 대해서 잘 알지 못하는 상태에서 일을 시작했다.

분명 교과서에서 배우긴 했는데, 이해를 잘 못했다. 이해를 못했더라도 어떻게 사용하는지 알면 써먹기라도 할텐데 그마저도 나는 어려웠다.

 

그러다가 어떤 계기에 의해서 확실하게 이해를 하게 되었는데, 그 계기란 3차원 공간에서 좌표계를 표현하는 행렬의 구성이 어떻게 이루어져 있는지를 이해한 것이었다. 로보틱스를 처음 접했을 때, 이 단순한 이치를 깨닫지 못하고 오랜 시간을 '무지의 두려움'에 떨다가 마침내 이해했을 때는 내용이 너무 단순해서 어이가 없었다.

 

아무튼...

 

좌표계와 관련하여 내가 깨달음(?)을 얻은 바를 한 문장으로 표현하면 다음과 같다.

3차원 공간에 놓인 물체의 방향을 나타내기 위한 3차원 행렬의 구성을 보면, 1열은 x축을, 2열은 y축을, 3열은 z축을 의미한다.

혹시 이해가 확 바로 되는가? 이미 좌표변환에 대해 이해를 하고 있는 사람이라면 '아무것도 아닌데?' 라고 생각할지도 모른다. 위 문장은 좌표계를 애매하게 알고 있던 내가 좌표계를 좀더 정확하게 이해하는데 필요했던 '미씽링크'와 같은 것이었다. 때문에 위 문장이 좌표계에 대한 본질적인 설명은 되지 못하지만, 좌표계에 대한 이해의 Intro로서 개인적인 사연을 소개한 것이니 양해바란다.

 

아무튼 좌표계에 대한 본질적인 이해가 필요한 상황이다.

 

그리고 나는 좌표계에 대해서 더 잘 이해하려면, 이 글을 읽고 있는 당신이 '다음과 같은 고민을 하고 있는 상황이라고 상상하는 것'이 필요하다고 생각한다.

 

그림1. 물체의 좌표계가 정의되어 있지 않은 경우

"3차원 공간상에 물체A와 물체B가 있다. 물체들이 놓인 방향을 컴퓨터(로보트)한테 설명해야 하는데, 당신은 어떻게 설명하겠는가?"

컴퓨터(로보트)에게 물체의 위치를 알려주고 싶은데 어떻게 하면 좋을까? 사람이라면 눈으로 보고, 저기 있다라고 할수 있을텐데 말이다.

 

로봇은 짜증나게 수학으로 말해야 한다. (실은 수학으로 말해도 바로 모를수도 있다. 로봇은 사람들의 기대에 비해 상당히 멍청한데, 이는 나중에 차차 말할 기회가 있을 것이다.) 아무튼 좌표계는 위와 같은 상황에서 사용된다.

 

그런데 일상생활에서는 기준좌표계 따위가 물리적으로 어디 박혀있지 않다. (그리니치 천문대 이런데 빼고;;;) 하지만 수학적으로 어떤 물체의 위치를 기술하려면 기준이 필요하다.

 

기준과 관련해서 설명하기 위해 우리는 이런 표현을 쓸수 있다.

"나를 기준으로 내 오른쪽으로 3미터, 내 전방 2미터 앞에 개가 한마리 있었다." 

(일상적에서 이런 말을 쓰지는 않지만) 이런 식으로 말하면 머릿속에 대충 개와 사람의 위치가 그려지지 않는가?

 

하지만 개가 어디를 바라보고 있는지를 기술하지 않았기 때문에, 개가 지나가고 있는지 나와 마주보고 으르렁대고 있는지에 대해서는 아직 알 수 없는 상황이다.

 

이 문제(개가 바라보는 방향이 불분명한 문제)를 해결한 다음의 문장에서는 상황을 더 분명하게 알 수 있다.

"나를 기준으로 내 오른쪽으로 3미터, 내 전방 2미터 앞에서 개가 나를 지켜보고 있었다.

추가한 '개가 나를 지켜보고 있다.'는 표현을 통해서 개의 방향이 나를 바라보고 있거나, 적어도 나를 등지고 있지는 않은 상태라고 짐작할 수 있게 되었다. 

 

위 두 문장의 차이는 '개가 바라보고 있는 방향에 대한 단서가 있느냐 없느냐의 차이'이다.

 

3차원 공간에서 물체의 방향 표현하는 것도 마찬가지이다.

우리가 물체의 방향을 기술하기 위해서는 물체의 '앞/뒤/위/아래/오른쪽/왼쪽' 을 구분할 수 있는 상황이 전제 되어야 한다.

 

이를 위해 수학이나 물리에서는 물체에 '물체 좌표계'를 박아(정의해) 준다. 이를 통해 물체의 '앞/뒤/위/아래/오른쪽/왼쪽'를 'x, y, z 방향의 좌표계'로 알 수 있다. 따라서 개에게도 좌표계를 정의하면 개가 바라보고 있는 방향을 수학적으로 기술할 수 있게 된다.

 

다시 처음으로 돌아와서... 그림2에서는 물체A와 물체B에 좌표계를 정의해 주었다.

그림2. 물체의 좌표계가 정의된 경우

그림1에서와는 다르게 왠지 물체 A와 물체B의 방향을 '말'로 설명할 수 있을 것 같지 않은가?

아마 '말'로 설명하면 이렇게 표현할 수 있을 것이다.

 

물체 A의 좌표계의

x방향이 바라보는 방향은 기준좌표계의 y방향이 바라보는 방향과 같다.

y방향이 바라보는 방향은 기준좌표계의 z방향이 바라보는 방향과 같다.

z방향이 바라보는 방향은 기준좌표계의 x방향이 바라보는 방향과 같다.

 

그렇다면 물체 B의 방향을 어렵겠지만 '말'로 표현해보자.

 

물체 B의 경우에는 좌표계의

x방향이 바라보는 방향은 기준좌표계의 ... -x방향과  y방향 사이의 중간 어디쯤을 바라보고 있고

y방향이 바라보는 방향은 기준좌표계의 ... -x방향과 -y방향 사이의 중간 어디쯤을 바라보고 있고

z방향이 바라보는 방향은 기준좌표계의 ... z방향을 바라보는 방향과 같다.

 

정도로 표현할 수 있을 것이다.

그런데 우리는 이렇게 대략 말해도 이해를 하겠지만 컴퓨터(로보트)는 이렇게 말하는 것을 극혐한다.

 

그래서 수학적으로 표현을 해주는 것이 필요한데, 행렬이 그것이다. 

단위행렬

위의 '단위행렬'을 보면 개인적으로 다른 행렬들을 보는 것 보다는 상대적으로 마음이 편안하다. 뭔가 순서가 맞아떨어지는 것 같고, 혼란스러움이 없고, 익숙해 보인다다. 물리적인 의미도 그러하다. 하지만 실질적으로 행렬의 각 성분이 의미하는 바에 대해서 명확하게 정의하지 않은 상태에서 행렬을 바라보면 아무 의미 없는 숫자에 불과하다.

 

따라서 '좌표계의 방향'이라는 물리적인 의미를 부여하기 위해 행렬에 색칠을 해 보았다.

좌표계의 방향으로서의 단위행렬

위 행렬의 각 성분들 중

빨간색으로 칠한 부분(1열)은 좌표계의 x방향을 표현하기 위해 마련한 공간이다.

초록색으로 칠한 부분(2열)은 좌표계의 y방향을 표현하기 위해 마련한 공간이다.

파란색으로 칠한 부분(3열)은 좌표계의 z방향을 표현하기 위해 마련한 공간이다.

 

혹시라도 위 설명이 바로 와닿지 않으면 아래 설명도 읽어보자.

 

빨간색으로 표시한 부분은 기준좌표계를 이용해서 물체 좌표계의 x축 방향을 표시한 것이다. 

빨간색으로 표시한 부분을 가로로 써보면 [1 0 0] 이 되는데, 이 말은 물체 좌표계의 x방향이 기준좌표계의 x방향으로 1만큼, y방향으로 0만큼, z방향으로 0만큼 있는 곳을 바라보는 방향이라는 의미이다.

 

초록색으로 표시한 부분은 기준좌표계를 이용해서 물체 좌표계의 y축 방향을 표시한 것이다.

초록색으로 표시한 부분을 가로로 써보면 [0 1 0] 이 되는데, 이 말은 물체 좌표계의 y방향이 기준좌표계의 x방향으로 0만큼, y방향으로 1만큼, z방향으로 0만큼 있는 곳을 바라보는 방향이라는 의미이다.

 

파란색으로 표시한 부분은 기준좌표계를 이용해서 물체 좌표계의 z축 방향을 표시한 것이다.

파란색으로 표시한 부분을 가로로 써보면 [0 0 1] 이 되는데, 이 말은 물체 좌표계의 z방향이 기준좌표계의 x방향으로 0만큼, y방향으로 0만큼, z방향으로 1만큼 있는 곳을 바라보는 방향이라는 의미이다.

 

결과적으로 어떤 물체의 방향을 표시한 행렬이 단위행렬이라는 말은 이 물체가 놓인 방향이 기준좌표계와 동일한 방향으로 놓여있다는 것을 의미한다.

 

아직 설명이 와닿지 않은가? (혹은 너무 쉬운가?)

와닿지 않는 설명때문에 오히려 더 머리가 복잡해 졌는가?(너무 쉽고, 당연한 내용을 장황하게 설명하였는가?)

 

아무튼 위 설명은 '3차원 행렬을 기준좌표계의 x,y,z 방향을 표시하는 방향벡터를 나타내기 위해 사용했다.'는 것을 설명하기 위한 것이었다.

 

그렇다면 아래의 두개의 행렬이 의미하는 것이 무엇인지 유추할수 있겠는가?

물체A의 방향을 기준좌표계로 기술 
물체B의 방향을 기준좌표계로 기술

그렇다. 두 행렬은 각각 기준좌표계와 비교해서 '물체 A가 놓인 방향'과 '물체 B가 놓인 방향'을 행렬로 기술한 것이다.

아까 '말'로서 설명을 하려던 것과 비교하면, 컴퓨터(로보트)가 이해할 수 있을 것 처럼 보이는 설명이 되었다.

 

그리고 위에서 물체B의 방향을 기술한 것을 다음과 같이 써줄 수 있는데, 이는 물리적으로 기준좌표계의 z축을 기준으로 120도만큼 회전시켰을 때 나오는 좌표계의 방향을 의미한다. 

물체B 좌표계의 행렬 기술에 대한 물리적인 의미: 기준 좌표계를 z축으로 120도 회전

 

교과서에서는 좌표계의 회전과 관련된 내용을 소개하면서 x축으로 회전, y축으로 회전, z축으로 회전을 수학적으로 기술하는 내용이 나와있다. 개인적으로는 공부하면서 앞의 본질에 대해서 이해를 하지 않은 상태에서 회전에 대한 행렬 수식만을 보다보니, 제대로 활용을 못한채 오랜 시간 고통스러워 해야 했다.

 

설명을 하다보니, 글을 여기서 한번 끊어주어야 할 것 같다. 사람을 옆에 두고 설명을 하면 더 빨리 할 수 있었을 텐데, 역시 글로 표현을 하려고 하니 대단히 어려운 것 같다. 그리고 예상 독자를 명확하게 설정하지 않고 쓰다보니, 어느선까지 설명을 해야할지 쓰면서도 방황하였다. 


이 글은 로보틱스 이론에 대하여 필자가 이해한 내용들을 '로봇을 전공하지 않은 사람'이 이해할 수 있도록 설명하는 것을 목적으로 합니다. 관련된 내용을 수식을 최소화 하고 최대한 글과 예시로 풀어보려고 노력을 하였습니다.

개중에 틀린 내용이 있을수 있으니, 지적해주시면 배움의 기회로 삼도록 하겠습니다.