2014년 1월 24일 금요일

로봇의 움직임을 알려주는 Kinematics

로봇을 공부한다고 하면 많은 분들이 전자기판에 어지러운 전선들을 연결하는 모습 또는 여러 링크와 부품들을 조립하는 모습 등을 상상하실 것입니다. 이런 모습도 로봇공학의 한 모습이지요. 하지만 그러한 "실현"과정에 앞서 보다 중요한 것은 '이 로봇이 어떻게 움직이도록 할 것인가'를 이해하고 설계하는 수학물리에 대한 탄탄한 지식이랍니다. 구체적으로는 선형대수학(Linear Algebra), 확률론(Probability), 기구학(Kinematics), 동역학(Dynamics) 등이 매우 중요하지요.

DARPA Robotics Challenge에 참가한 Valkyrie(NASA, 왼쪽) & THOR(Virginia Tech, 오른쪽). 이들의 움직임도 역시 '어떻게 움직일 것인가'에 대한 탄탄한 수학적 배경이론이 뒷받침되어 있다.(출처 : http://bit.ly/19RC7CE)
그동안 Joint Space에 대해서도 이야기를 나누었고, Rotation Matrix에 대해서도 이야기를 나누었으니 이젠 로봇 움직임의 기본 원리인 Kinematics(기구학)에 대해 이야기를 나눌 때가 온 것 같습니다! 이번 시간엔 로봇의 움직임을 설명해주는 Kinematics에 대해 알아보도록 하죠.

로봇의 움직임을 설명한다고 하면 크게 kinematic level과 dynamic level로 구분하여 이야기 할 수 있습니다. 이미 여러분들은 물리시간에 kinematics와 dynamics를 배우셨는데요, 간단이 이야기하자면 질량, 회전관성, 힘, 토크와 관련된 운동 해석을 dynamics (또는 kinetics), 그렇지 않은 것을 kinematics 라고 합니다. 예를 들면, 물리의 맨 첫단원에 배웠던 낙하 운동이니, 포물선 운동이니 하는 것 있죠? 그런 것들은 물체의 질량과 관계없이 오로지 위치, 속도, 가속도 등에만 관련된 내용이니 kinematics고, 뒤에 나오는 힘, 토크 등의 개념은 물체의 질량에 따라 그 크기가 달라지니 dynamics와 관련된 내용인 것이지요.

물론 인간은 힘을 줘서 팔다리를 움직이는 dynamic level의 컨트롤을 합니다. 하지만 로봇에겐 이 dynamic control이 그리 간단한 일이 아닙니다. 왜냐하면 로봇 본인의 질량/회전관성은 물론 접촉을 통해 상호작용하는 모든 물체들의 동역학적 영향을 계산해야하기 때문이죠. 만약 그것을 계산할 수 있다하더라도 상호작용력을 측정하기 위해 하나에 1000만원을 호가하는 힘센서들을 덕지덕지 붙이는 일은 현실적으로도 쉽지 않을 것입니다. (제가 돈 많이 벌면 해볼... 아냐, 맛난거나 많이 사먹어야지...!)

고생하셨어요... 근데 링크 여러 링크가 달린 로봇은 이렇게는 계산... 쉽지않아요...-_-;;
(출처 : http://mig29.egloos.com/2940509)

제가 왜이리 앞에 말이 많으냐... 실제 현재 수준의 많은 로봇들이 kinematic level에서 제어되고 있고, 따라서 여러분들이 만약 kinematics만 제대로 이해하신다면 로봇에 대해 정말 '큰 이해를 한 것과 마찬가지다'라는 것을 알려드리기 위해서이지요 ^^

사실 저희는 이미 '로봇으로 칠판에 직선 긋기'를 통해서 kinematics의 맛을 조금 보았었습니다. 그 글에서는 sin과 cos을 이용하여 링크 각도에 따른 끝점의 위치변화를 살펴보았었죠. 하지만 링크가 많아지고 복잡해지면 그만큼 식도 길어져 sin, cos들이 범벅인 식을 이용하기란 참 힘들어지게 되는데요(1), 이는 선형대수학(행렬)을 이용하면 아주 아름답게 정리할 수 있답니다! 여러 축을 기준으로 순차적으로 돌린 후 로봇의 자세를 Rotation Matrix의 곱으로 간단히 계산할 수 있었던 것처럼요.


그럼 로봇에 한번 적용해 볼까요? 로봇의 관절은 크게 회전관절(revolute joint)과 미끄럼관절(prismatic joint)로 나눌 수 있습니다. 앞서 본 회전행렬의 개념은 로봇의 회전관절에 적용할 수 있겠네요! 그런데 문제가 한가지 있습니다. 로봇 관절의 회전축들은 서로 일정거리씩 떨어져있다는 것이지요. 다시말해, 앞서 회전행렬들의 곱은 원점을 통과하는 축들의 회전들을 다루었다면, 로봇은 관절-링크-관절-링크-관절의 순서로 배치되어있어 회전과 offset(또는 병진)이 번갈아 일어난다는 것입니다. 아... 어떻게 해야할까요?

이 문제는 회전과 함께 병진 변환(직선으로의 오프셋)을 추가한 4 X 4 변환행렬을 도입함으로써 해결가능합니다. 기존의 회전을 담당하는 부분이 3 X 3 회전행렬이었다면 이 행렬의 오른쪽에는 offset만큼 병진 변환을 시켜주는 3 X 1 의 위치벡터를 배치하고 밑에는 [0 0 0 1]을 배치해 4 X 4 의 변환행렬을 만드는 것이지요. 예전에 여러번의 회전 결과가 R1*R2*R3*... 의 곱으로 표현될 수 있었다면, 이젠 여러번의 회전+병진의 결과를 T1*T2*T3*... 로 계산할 수 있답니다. (사실 이러한 rigid-body motion의 엄밀한 설명을 위해서는 SO(3), SE(3) 등의 special group에 대한 개념도입이 필요한데요, 일단 여기서는 '그냥 곱하면 된다!'고 믿읍시다...^^ 자세한건 다음 포스팅에서...ㅋ)


지금 저희가 왜 이런 일을 하고 있는지 따라오고 있으시죠? 저희는 지금 "로봇 관절들을 몇도, 몇도, 몇도 씩 회전시켰을 때 과연 로봇은 과연 어떤 자세를 취하고 있을까?"라는 질문에 대해 답을 구하고 있었습니다ㅋ (정신차리세욥~) 이제 마지막으로 할 일은 로봇의 관절마다 가상의 좌표계를 붙여놓고 1번 관절과 2번 관절사이의 변환행렬, 2번과 3번 사이의 변환행렬, 3번과 4번 사이의 변환행렬 등을 각각 구한 뒤 곱해주는 일 뿐입니다. 간단하죠?ㅋ (제가 쉬워보이게 많이 생략하고 썼으니까요...ㅋ) 처음에는 이렇게 로봇의 초기 자세(configuration)에 대해서 변환행렬 값들을 손으로 풀어주어야고요, 로봇이 움직일 때는 변환행렬 속에 들어가는 각도값(회전관절의 경우) 또는 오프셋값(미끄럼관절의 경우)를 변화시켜주면 된답니다.
BarrettHand의 configuration을 나타내주는 D-H Parameter
(출처 : http://bit.ly/1e0mQ2d)
보통 로봇이 제작되면 가장 먼저하는 일 중 하나가 길이, 질량 등등 그 로봇의 물성치를 체크하는 것입니다. 이 때 각 관절의 간에 어떠한 기구학적 관계가 있는지도 표로 나타내게 되는데요, 가장 많이 쓰이는 방법은 Denavit-Hartenberg Parameter (라고 아무도 안부르고 그냥 DH parameter라고 부릅니다)입니다. 이 표를 통해 로봇의 기구학적 초기자세를 알려주는 것이지요. DH parameter는 Z방향 회전, Z방향 병진, X방향 병진, X방향 회전(2)의 4개의 T행렬들로 각 좌표사이의 관계를 나타내는데요, 우리가 해야할 일은 이 행렬들을 그저 곱해주는 일입니다. (6자유도 로봇이면 총 6 X 4 = 24 개의 행렬을 곱하면 되겠네요 ^^) 

오늘은 kinematics에 대해 알아봤습니다. 로봇에 몇 도의 각도를 입력해 주어야 원하는 자세를 만들 수 있을지, 이젠 조금 감이 오시겠죠...? 사실 동물과 같이 정말 자연스러운 움직임을 가지려면 dynamic level에서의 제어가 필요합니다. 질량과 회전관성을 무시하고선 최고의 움직임을 가져갈 수 없겠죠. 하지만 로봇이 매우 빠르게 움직이거나 매우 무거운 물체를 핸들링하는 것이 아니라면 우리가 공부한 kinematic level에서도 충분히 제어가 가능하답니다. (실제 많은 로봇들이 이런 방식으로 움직이고 있고요.) 다시 말씀드리지만 여러분 모든게 수학 수학 수학입니다!ㅋ 다음에는 이러한 변환행렬들을 나타내는 Special Matrix Group에 관한 좀더 깊은 수학적 고찰을 다루어보도록 할께요 ^^ 빠잉~

(1) sin, cos을 이용한 기구학 식은 링크가 많아지게 되면 식이 엄청 길어지게 됩니다. 하지만 이러한 계산방식이 계산비용 상 조금 더 유리하다며 이 방식을 고수하는 로봇공학자들도 있는데요, 물론 검산에 또 검산을 거듭해야겠지요...?;;;

(2) 각 관절에 가상의 좌표를 붙이는 방법과 4개의 행렬을 곱하는 순서는 표준이 정해져있지만 약간씩 지방색(?)이 있기도 합니다. (고스톱도 지방마다 다 룰이 다르듯이...) 그러니 DH의 곱셈 순서에 대한 자세한 내용은 

* 제 글은 RSS로도 구독하실 수 있습니다. http://t-robotics.blogspot.kr/feeds/posts/default
  facebook page: http://facebook.com/trobotics