2013년 7월 24일 수요일

로봇으로 칠판에 직선 긋기 1탄!

오늘은 여러분께 첫 미션을 드리겠습니다.
"로봇을 이용해 칠판직선을 그려주십시오!"

너무 간단한가요? 근데, 정말 간단할까요? Are you sure?ㅋ

오늘은 세상에서 가장 간단한 로봇을 움직여보려고 합니다. 뭐, 간단한 로봇부터 움직여봐야 복잡한 로봇도 움직일 수 있는 것 아니겠습니까~ㅋ 두 개의 링크로 이루어진 이 간단한 로봇을 움직여보며 로봇이 어떠한 과정으로 운용되는지 한번 을 잡아보도록 하죠!

로봇의 끝점 P가 2초동안 x0=(-8,4)부터 xn=(8,4)까지의 직선을 따라가도록 q1, q2를 움직여주세요. (단, L1=8, L2=4, Q=원점)(1)
시작은 역시나 joint space와 task space에 관한 이야기입니다. (관련 글: 로봇이 움직이는 공간 Joint Space눈치가 빠르신 분들이시라면 이미 아셨겠지만, 여러분들께서 받으신 미션은 task space에서의 미션이고, 해야할 일은 joint space의 trajectory를 만드는 것이지요. 이를 위해 해야할 일은 다음과 같습니다.

     (1) Trajectory Planning
          : 직선 x의 trajectory를 task space에서 정의한다.

     (2) Inverse Kinematics
          : task space의 trajectory를 joint space로 옮기는 함수 g (or f-1)를 찾는다.

     (3) g를 이용해 x(=끝점)→q(=관절각)로 바꾼 후 이를 따라가도록 모터를 돌려준다.(2)

(1) Trajectory Planning

로봇을 제어할 때 컴퓨터와 로봇 간 입출력이 이루어지는 속도를 제어주기라고 합니다. 1분에 한번씩 명령을 주는 것보단 당연히 1초에 1000번씩(=1kHz) 제어신호를 주는게 훨씬 제어가 잘 되겠죠? 우리의 제어기가 1kHz의 성능을 가지고 있다고 한다면, 우리는 -8부터 8까지 가는 2초 동안 총 2000번의 명령을 주어야합니다. 가장 간단한 방법은 x를 등간격으로 자르는 것이겠네요.

x0=(-8,4), x1=(-7.992,4), x2=(-7.984,4), ... , x2000=(8,4)

이건 첫 점부터 끝점까지 등속으로 움직이겠다는 것인데요, 보통의 경우는 처음에 정지해 있다가(v0=0) 휘~잉~~ 가속해서 가다가 마지막에 감속하며 다시 끝점에서 정지(v2000=0)하지요? 그럼 속도 v가 0에서 시작해서 다시 0으로 돌아오는 2차곡선을 만들면 되겠네요. (x는 3차곡선) 자, 고등학교 때 배운 수학 나옵니다~


x0=(-8,4), x1=(-8,4), x2=(-8,4), x3=(-7.999,4),... , x2000=(8,4)

드디어 얻었습니다! 휘~잉~~ 하고 움직이는 task space 상의 경로를요.

(2) Inverse Kinematics

이제 각 관절의 모터에 "몇 도로 움직여!"라며 각도 명령들을 좌라라락 뿌려주기만 하면 됩니다. 그러려면 x를 각 모터의 각도인 (joint space의 변수인) q1, q2로 바꾸어 주어야 하겠죠? x를 넣으면 q가 튀어나오는 매직박스를 만들어볼까요?


아... 그런데 문제네요. 이게 q = g(x)와 같이 x를 넣으면 q가 튀어나와야 매직박스인데, 지금은 그 반대인 x = f(q) 의 모습이니까요...

Forward Kinematics (정기구학,FK) : Joint → Task   x = f(q)
Inverse Kinematics (역기구학,IK)  : Task  → Joint  q = f-1(x)

이거 뭐... 한국인의 굳은 의지로 연립방정식을 풀면야 풀 수야 있겠지만... (사실 이 문제는 정답이 알려져 있습니다.(3)) 이 문제는 풀더라도 더 복잡한 구조의 로봇은 아마 풀기 쉽지 않을걸요? 여기서는 포인트만 집고 넘어가도록 하죠.

     - FK는 언제나 하나의 해가 존재한다. (N:1의 mapping)(4)
     - IK의 해는 무한개 / N개 / 1개 / 0개 일 수 있다.
     - IK의 해에 대한 식 정리(closed-form sol'n)는 불가능할 수도 있다.

결국 IK문제가 그리 빤~한 문제는 아니라는 것입니다. 여러분도 등 긁다가 어깨 빠질 뻔한 경험 있으시자나요~ 이게 다 등 가운데는 IK의 해가 존재하지 않는데 억지로 관절 각도를 만들어보려고해서 그런거라고요ㅋㅋㅋ 아시겠죠? IK 해는 존재하지 않을 수도 있어요. (이젠 어깨 빠지시면 안돼요!)

아.. 역시 글이 길어질 줄 알았어요..ㅠ 간단한 문제가 아니라니까요ㅠㅠㅠ (사실 position control 부분도 생략한거란 말이예요ㅠ) 그래도 이제 대충 어떻게 로봇이 운용되는지 감이 오셨죠? 글이 너무 지겨웠으니 재미있는 동영상으로 글을 마칠께요. IK의 해가 무한개가 존재하는데, 그 중 motion capture를 통해 얻은 데이터와 비슷한 스타일의 IK의 해 한개를 찾아주는 Style-based IK에 대한 동영상입니다. 애니메이션에도 엄청난 로보틱스 기술이 들어간다는 사실, 아셨나요?ㅋ 그럼 즐감하세요~!

K.Grochow et. al., "Style-based Kinematics" (2004)
(출처 : http://youtu.be/X5Z7ZJ39zAA)

(1) [Notation] 앞으로 (4,7), (20,0,0)과 같은 벡터변수는 bold체로 표시하도록 하겠습니다. (e.g. x = (x,y), q = (q1,q2))

(2) 주어진 모터가 joint trajectory를 따라 움직이도록 하려면 모터드라이브를 통해 모터에 입력되는 전압을 적절하게 조절해주어야 하는데요, 이 움직임은 각도센서인 엔코더의 피드백을 받아 position control을 함으로써 제어가능합니다. 이에 대한 이야기는 다음에 다루도록 하죠 :D

(3) 정답을 확인하고 싶으신 분께서는 다음주소에서 확인해주세요
    http://engineeronadisk.com/V2/hugh_jack_masters/engineeronadisk-22.html

(4) 당연하죠. 왜냐면 로봇을 몇도, 몇도, 몇도 이렇게 구부리면 끝점이 어딘가엔 위치하고 있을테니까요. 하지만 그 위치의 끝점을 만들기위한 각도들은 여러 개의 해가 존재할 수 있으므로 q와 x의 mapping은 N:1 입니다.


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