[아두이노] 관절과 좌표계

IOT/아두이노|2019. 9. 3. 09:00

[아두이노] 관절과 좌표계



로봇팔이나 6족 보행로봇 같은 관절형 로봇은 Servo Motor나 Stepper Motor의 회전 각을 통해 관절의 움직임을 만들어 내게 됩니다. 처음 공부하시는 분들은 로봇팔이 Servo Motor의 회전각을 통해 어떻게 관절의 움직임을 만들어내는지 잘 연상이 안될 수 있습니다. 공감지각능력이 뛰어난 분들이나 관철력이 뛰어난 분들이라면 쉽게 이해할 수 있지만 약간 관절의 움직임에 대해 모르더라도 어려워 하지 마세요.

관절의 움직임을 이해하는데 좌표계를 머리속에 담아 놓으시면 쉽게 관절의 움직임을 이해 할 수 있습니다. 어떤 사물의 움직임을 표현한다면 그 움직임은 모두 좌표계에 배치되고 그 좌표계를 기준으로 회전한다고 머리속에 그려놓고 이해하시면 쉽게 이해 할 수 있습니다.

1. 관절



위 그림처럼 관절의 역활을 Servo Motor가 역할을 수행합니다. Servo Motor가 회전을 하게 되면 어떻게 될까요. 긴 막대기가 Servo Motor와 위치한 방향에서 그냥 원을 그리면 회전을 하게 됩니다. 이 회전이 관절형 로봇의 움직임을 만들어 낸다는 것이 잘 연상이 안되실거에요.

지난 시간에 6족 보행로봇에 대해 관찰 post를 썼는데 그때 다리 하나의 관절 제어를 다시 복습해 볼까요.


위 그림에서 각 관절 A, B, C를 방금 위에 Servo Motor와 합쳐진 원통막대 하나를 3개로 서로 연결되었을 때 다리 하나의 움직임을 만들어 냈습니다. 그림을 보면 A관절은 변화가 없고 B, C관절이 일정 각도로 위로 회전되었을 때 3관절의 다리가 그림처럼 움직임을 만들어 냈습니다.

다른 그림을 살펴볼까요.


손을 주먹형태로 쥐었을 때 손가락 하나의 움직임을 위 그림과 같은 모향을 만들어 냅니다. 주먹을 쥔 모양이니 위 그림에서 관절이 3개로 나뉘고 90도씩 회전했을 때 주먹이 쥐어지는 모습이 만들어 냅니다.

위 두 그림에서 관찰이 뛰어나신 분이라면 움직임을 이해 하셨을 꺼에요. Servo Motor의 회전과 위 그림에서의 원통막대기가 그 회전각만큼 움직였을 때 만들어내는 움직임을 머리속에서 그려 낼 수 있으면 관절 동작을 이해 할 수 있습니다.

혹시 이해가 안되신다면 이글을 보시는 여러분들이 직접 자신의 손을 주먹형태로 쥐어 보시고 관절이 Servo Motor라고 생각하시고 회전각도를 살펴보시기 바랍니다. 이해가 안될때는 실제 현실에서 그 움직임을 만들어 관찰하시면 됩니다.

그런데 복잡한 움직임을 만들기 위해 각 관절을 회전시킨다면 각 관절의 회전각을 쉽게 머리속에서 연상하기 어렵습니다. 즉, 손을 웨이브를 타는 동작으로 움직여 보세요. 아니면 직접 춤을 제자리에서 춰보세요. 그 때 손, 팔, 몸통, 다리 등 등의 각 관절에 기하학적인 움직임으로 춤을 출 때 각 춤의 동작에서 관절의 회전각을 머리속에 그리려고 할 때 쉽게 연상이 되 않습니다. 어떻게 하면 관절의 움직을 머리속에서 그려낼 수 있을까요. 바로 관절을 좌표계를 기준으로 관절의 움직임을 이해하시면 좀 더 쉽게 머리속에서 연상하실 수 있습니다. 그 방법에 대해 설명하겠습니다.

2. 좌표계


제가 처음 좌표계를 접했을 때가 컴퓨터그래픽스 과목을 배울 때였습니다. 그 때 OpenGl로 교수님이 컴퓨터라는 가상공간에 점을 찍고 선을 그리고 면을 만들고 3D 도형을 좌표계를 기준으로 그리는 방법을 배웠는데 이때부터 좌표계를 머리속에 담아두게 되었습니다. 의자를 컴퓨터 그래픽스로 표현할 때 현실에서의 의자를 좌표계를 기준으로 머리속에 현실 의자를 배치 할 수 있게 되니깐 의자의 모양을 좌표계 기준으로 그릴 수 있게 되었고 그 좌표계 기준으로 그려지 모양을 이동/회전을 통해 움직임을 만들어 낼 수 있게 되었습니다. 그 때 로봇손을 컴퓨터그래픽스로 그리게 되었고 호기심으로 로봇 손가락을 각 마디를 좌표계를 기준으로 그리게 되었는데 그 좌표계를 회전 시키니 그 좌표계을 기준으로 그려진 손가락 마디가 회전되는 것을 우연히 알게 되었습니다. 첨에는 잘 몰랐는데 그게 관절 제어를 한 것이였죠. 사실 교수님께서 가르쳐준것은 그냥 좌표계이 물체를 그리는 작업과 물체를 이동시키는 방법에 대해서만 설명을 했는데 로봇손을 OpenGl로 표현하고 손가락의 각 마디를 회전시킴으로 주먹을 쥐었다 펴는 동작을 만들게 되었는데 그 걸 보시고 교수님이 칭찬을 해 주신 기억이 나네요. 대단한 것은 아니였지만 각 마디 마다 개별 좌표계로 손가닥 마디마다 회전을 시켰는데 그게 나중에 관절 제어였다는 것을 알게 되었습니다.

관절제어는 좌표계를 머리속에 그릴 수 있으면 쉽게 제어를 할 수 있습니다. 그 방법을 설명하기 전에 우선 좌표계에 물체를 그려 낼 수 있어야 합니다.


좌표계는 x,y,z 3축으로 구성되어 있습니다. 모든 사물을 이 좌표계에 올려놓을 수 있습니다. 사각형을 올려 놓아 볼까요.


위 그림의 Box를 좌표계에 그려 보세요. 머리속에서 길이가 1인 Box를 좌표계에 그릴 수 있게 된다면 좌표계가 여러분의 머리속에 들어 있게 됩니다.

Box를 그릴 수 있게 된다면 의자를 그려보세요.


단, 그릴 때 각 부위 별로 개별 좌표계로 그려보세요.


위 좌표계로 다리와 앉는 부위를 좌표게로 그리게 됩니다. 그리고 다리 부위는 OpenGl에서 복사해서 4개의 다리를 만드는데 각 다리는 개별 좌표계가 기준이 됩니다.

이 때 전체 좌표계를 기준으로 방금 만든 다리와 앉는 부위를 배치하면 아래와 같이 완성이 됩니다.


여기서 각 다리는 개별 좌표계(0,0,0)을 기준을 4개의 다리와 앉는 부위가 그려지고 전체 좌표계에서 방금 그림 부위를 배치하면 위와 같은 의자가 완성이 됩니다.

물체를 좌표계 기준으로 그리고 그 물체를 또 다른 좌표계를 기준으로 배치하여 의자와 같은 특정 물체를 만드는 방법을 좌표계를 기준으로 머리속에서 그려 보세요. 이게 어느정도 머리속에서 완성이 되면 관절 제어에 대해 알아 봅시다.

관절 제어를 좌표계 기준으로 회전


위 그림처럼 원통 막대가 하나가 있다고 가정하고 좌표계 기준으로 그려 봅시다. 이걸 x축을 기준으로 회전 시키면 어떻게 될까요.


이처럼 좌표계에서 x축 기준으로 회전을 하게 됩니다. 다른 축으로 회전을 시킨다면 현실에서 여러분 주변있는 펜같은 것을 가지고 각 축별 회전을 시켜 보세요. 좌표계를 기준으로 물체의 회전을 이해 하실 수 있습니다.

다음으로 넘어가겠습니다.

좌표계의 부모-자식 관계 회전


A관절 좌표계는 부모 좌표계이고 B관절 좌표계는 A의 자식 관계입니다. A좌표계를 기준으로 회전하면 B 관절은 같이 따라서 회전하게 됩니다. 다음 B관절 좌표계를 기준으로 보면 C관절은 B관절의 자식 관계입니다 B관절을 회전하게 되면 C관절은 따라서 같이 회전을 하게 됩니다. C관절 회전에 경우는 A, B관절을 회전하지 않습니다. 즉, 부모 좌표계가 회전하면 자식좌표계는 따라서 같이 회전을 하고 자식 좌표계가 회전하면 부모 좌표계는 회전하지 않습니다. 이 개념을 머리속에 담아 주세요.

이제 3개의 원통을 하나의 좌표계를 기준으로 배치해서 좌표계로 살펴 봅시다.


위 그림처럼 개별적인 3개의 좌표계를 가지고 있습니다. 하지만 각 좌표계는 부모-자식 관계로 좌표계의 영역에 묶여 있는데 각 좌표계의 회전을 할 때 다른 좌표계도 영향은 부모-자식 관계로 영향을 받습니다.

정리하면,

  • 왼쪽 A좌표계를 회전하면 B,C좌표계가 같이 회전한다.
  • 가운데 B좌표계가 회전하면 A좌표계는 현재 상태를 그냥 유지하고 C좌표계가 회전합니다.
  • 오른쪽 C좌표계가 회전하면 A, B좌표계는 현재 상태를 그냥 유지한다.

각 물체를 좌표계에 올려놓고 각 좌표계는 부모-자식관계로 정의해놓고 좌표계를 회전하면 각 물체의 움직임을 만들어 낼 수 있게 됩니다.

좌표계로 물체를 배치할 수도 회전시킬 수도 있습니다.

이런 좌표계를 머리속에 담아 놓으셔야 합니다. 현재 여러분이 이 글을 보고 있는 전자기기가 스마트폰이면 스마트폰을 좌표계에 올려놓고 회전시켜보세요. 좌표계 기준으로 움직이는 각도가 몇도인지 계산해 보세요. 이 각도값을 좌표계 기준으로 몇도인지 알게 된다면 아두이노 관절 로봇의 관절 제어 코딩이 쉬워집니다.

좌표계의 회전각을 코딩화

A관절을 x축으로 45도 회전시킨다면.

Servo.write(45);

여기서 B, C관절은 현재 각도에서 A관절이 45도 회전된 각도의 위치로 움직이게 됩니다. 이게 머리속 좌표계에서 그려져야 합니다.

그래야 관절제어를 쉽게 할 수 있습니다.

정리하면,

  • 좌표계 기준으로 마디를 배치하고 각 마디는 개별 좌표계를 갖는다.
  • 좌표계 기준으로 각 마디의 부모-자식관계 구조로 되어 있다.
  • 좌표계 기준으로 마디의 회전각도를 계산한다.
  • 좌표계는 관절이고 그 회전각은 실제 Servo Motor의 회전 값이 된다.

마무리


관절제어는 좌표계를 기준으로 회전 하고 각 관절은 개별적 좌표계를 가지고 각 좌표계는 부모-자식 관계의 구조로 좌표계가 묶여 있습니다. 좌표계를 관절로 생각해서 물체를 회전 시키면 물체의 움직임을 만들어 낼 수 있습니다. 그리고 좌표계를 기준으로 바라보면 쉽게 그 움직임을 수치화 할 수 있습니다. 좌표계를 기준으로 특정 축을 기준으로 회전 된 각도는 Servo Motor의 회전각이 되어 관절의 움직임을 만들어 내게 됩니다.

그래서 관절제어를 할 때 좌표계를 머리속에 담아놓고 관절 제어를 하면 여러가지의 움직임을 어렵지 않게 만들어 낼 수 있습니다. 지난 시간에 가상시뮬레이터에서 Servo Motor 세개를 나란히 배치하고 이게 6족 보행로봇의 다리이고 전진/후진 동작이라고 했는데 사실 잘 연상이 안되셨을 꺼에요. 만약 그 Servo Motor가 여러분의 머리 속 좌표계에 배치되어 진다면 가상시뮬레이터에서 단순히 일렬로 3개의 Servo Motor가 회전 되었지만 머리 속 좌표계에서 이 회전이 실제 6족 보행 로봇의 다리 움직임으로 그려지게 될 것입니다.

댓글()