2013년 7월 15일 월요일

로봇이 움직이는 공간, Joint Space

인간에겐 너무나 간단한 작업도 로봇은 낑낑댈 때가 많습니다. 예를 들어 주전자를 들어 컵에 물을 따르는 것은 인간에겐 너무나 쉬운 일이지만, 만약 누군가 제게 그런 로봇을 개발하라고 한다면
"선생님ㅠ 차라리 제가 선생님의 몸종으로서 평생 선생님께 물을 따를 수 있길 허락하소서ㅠㅠㅠ"
라고 빌지도 모릅니다ㅠ 여기엔 여러가지 어려움들이 존재하지만(1) , 그 중 오늘은 로봇의 동작 생성과 관련된 Joint Space (or Configuration Sapce)에 대한 얘기를 한번 해보고자 합니다.
왼쪽의 그래프는 아령을 옮길 때 관절이 움직일 수 있는 영역을 joint space에서 표현한 것이다.
D. Berenson et. al., "Manipulation Planning on Constraint Manifold" (2009)


여러분은 컵을 잡을 때 어떤 것들을 생각하시나요? 컵 손잡이의 위치? 컵의 무게? 굳이 내가 이걸 내 손으로 잡아야하나 싶은 일말의 귀차니즘?
여러 생각들이 들겠지만 (사실 아무 생각도 안하고 컵을 잡겠지만ㅋ) 아마 여러분 팔에 대해선 아마 전혀 신경쓰지 않고 움직이시리라 생각합니다.

하지만 로봇은 그렇지않습니다. 로봇은 아무 것도 모르는 아기와 같아서 (아기는 귀엽기라도하지.. 흑..ㅠ) 우리가 로봇의 각 관절들을 어떻게 움직여야하는지 일일이 알려주어야 합니다. 다시말해 비록 컵은 3차원 공간(x,y,z) 상에 조작한다 하더라도 우리는 그 3차원의 움직임을 위하여 7개의 관절(어깨 3자유도(2), 팔꿈치 1자유도, 손목 3자유도)에 명령을 내려주어야 하는 것입니다. (뭐이리 복잡해..ㅠ)

우리는 이렇게 실제 작업이 이루어져야하는 x,y,z의 공간을 작업공간(Task Space)라 부르고, 로봇이 제어되는 각 관절 각도(q1,...,qn)에 대한 공간을 관절공간(Joint Space)라고 부릅니다. 결국 우리가 해야할 일은 작업공간에서 손이 잘 움직이도록 관절공간의 변수들을 잘 조작하는 일 입니다.
S. LaValle, Planning Algorithm (2006)

쉬운 문제를 예로 들어볼까요? 위 그림 왼쪽에 있는 두 개의 링크를 두개의 관절을 가진 단순한 로봇으로 생각해봅시다. 만약 끝점 P점을 y축 상에서 움직이고 싶다면 각 관절은 어떻게 움직여야할까요? 정답은 "그냥 앞으로"가 아니라 오른쪽 그림에서 보이는 빨간 선을 따라 움직이면 된다는 것입니다. 예를 들어 첫번째 관절과 두번째 관절을 적절한 비율로 살살 펴줘야 P점이 앞으로 전진한다는 것이지요.(3)

결국 로봇의 움직임 생성 문제란 "작업공간에서 잘 움직이도록 관절공간에서 잘 입력을 넣어주는 것"이라고 일반화시킬 수 있습니다. 아시겠죠? 그냥 앞으로 쭉 손을 뻗는 동작도 이런 복잡한 계산들이 필요하다는 것을...ㅠ 그래서 인체가 신비한 것입니다. 우리 몸은 약 230개의 관절 자유도가 있는데, 우리는 매순간 230개의 수식을 생각할 것도 없이 그냥 아주 잘 움직이자나요?ㅎㅎㅎ 대다나다! 그쵸?


인간은 각 관절들이 몇도씩 움직여야 손끝, 발끝이 잘 움직일지 굳이 계산하지 않습니다. 다시말해 매순간 정기구학(forward kinematics)를 풀지 않습니다. 하지만 로봇은 매순간 이러한 문제를 풀어야하죠.

로봇학자들은 인간의 이러한 초월적인 능력은 학습(learning)에 의한 결과라고 믿고있습니다. 인간은 이러한 수식을 푸는 것이 아니라, 경험을 통해 매우 많은 f의 입력-출력 관계 데이터를 저장해두고, 인간에겐 이런 것을 순식간에 찾아내는 능력이 있다는 것이지요. 이에 대해서는 또 할 말이 많으니 다음 시간을 기약하도록 하지요 :D

저의 첫 포스팅 어떠셨나요? 로봇에 대해 조금 알 것 같으신가요? (혹시 제가 좀 어렵게 이야기를 했나요?ㅜ) 로봇에 대해 궁금한 점이나 다뤄주었으면 하는 토픽, 그리고 글의 난이도에 대한 피드백은 언제든 환영합니다 :D 그럼 다음 시간에 만나요~ 제발~~


(1) 주전자를 잡기위해서는 일단 카메라로부터 받은 vision으로부터 환경과 물체를 구분하여 인식하고(object recognition) 그 중 손잡이 부분을 판별한 후 손이 손잡이에 다가갈 수 있도록 파지계획을 세워야합니다.(grasp planning) 그런 후 팔을 잘 컨트롤하여 주전자를 잡아야하는데 주전자와 손과의 상호력을 세심히 컨트롤하기 위해서는 순응제어(compliance control)이 필요할지도 모릅니다. 또 주전자를 잡더라도 이것이 쏟아지지 않도록 구속조건 하의 모션계획 및 제어(motion planning & control under constraints)를 하여야하며, 컵과 주전자의 상호관계를 잘 고려하여 물을 따라야합니다. 여기서도 물의 무게가 줄어듦에 따라 제어변수 및 성능이 변한다는 난관은 피해갈 수 없죠. (adaptive control) 로봇을 이용한 주전자로 물 따르기는 "간단하게 말하자면" 위와 같은 문제들이 존재합니다. 어떤가요?;; 그런데 실제 구현에는 이보다 몇배 더 큰 고통이 따른다능...ㅠㅠㅠ

(2) 사실 어깨는 각 축으로 돌아가는 3자유도 말고도 어깨의 위치 자체를 움직이는 2자유도가 더 있습니다. 여러분이 "으쓱으쓱"하는 자유도와 "고무고무 팔"을 할 때 어깨를 뺐다 넣었다하는 그 자유도 말이지요.

(3)그럼 오른쪽 그림 중간에 있는 빨간 가로줄은 뭘까요? 이것은 두번째 관절이 180도로 접혔을 경우 P점은 원점에 위치하게 되어 첫번째 관절의 각도와 상관없이 항상 y축 상에 존재한다는 것을 의미합니다.


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