mindstorms_with_matlab_logo.png



반갑습니다. 남궁원 닮은 교주 LGS입니다. ^^

지난 시간 Forward Kinematics에 이어 이번 강좌에서는 Inverse Kinematics에 대해서 다루겠습니다.


scara_LGS06.png 

θ1과 θ2가 주어졌을 때 End-Effector의 위치 x2,y2를 계산하는 Forward Kinematics와 정반대로

이번에는 End-Effector의 위치 x2,y2가 주어지고 End-Effector의 위치가 x2,y2가 되게끔  하는 

Joint angle θ1과 θ2를 계산해내는 것을 Inverse Kinematics라고 합니다.


scara_LGS07.png


Inverse Kinematics도 Forward Kinematics와 마찬가지로 종이에 그림을 그려서 삼각함수를 이용하여 푸는 기하학적인 방법이 있구요

수힉적으로 (비선형)연립방정식을 풀어서 Joint의 각도를 계산하는 방법이 있습니다.

위와 같이 간단한 Link의 경우 기하학적 방법을 쓰면 손 쉽게 Joint angle을 구할 수 있습니다. ^^

우선 기하학적 방법을 이용하여 θ1과 θ2를 계산해보도록 하죠


inverse01.png



θ2를 코사인 제2법칙을 이용해서 계산해보면


inverse02.png

위의 식처럼 계산할 수 있구요(고등학교 수학 수준이므로 여렵지 않습니다 ^^)

다시 θ1을 삼각함수로 사용하여 간단하게 구해보면...


inverse03.png


역시 여렵지 않게 쉽게 구할 수 있습니다.

일정한 궤적으로부터 Inverse Kinematics로 관절의 각도를 구해서 에니메이션으로 나타내보면 짠~ o(^o^)o



Kinematics이므로 위의 모션을 생성하기 위한 힘이나 토크등은 전혀 고려되지 않았습니다.
단지 End effector의 위치와 Joint 각도의 관계만을 정의하여 애니매이션을 그렸을 뿐입니다.

자~ 이쯤에서 퀴즈 하나 나갑니다요~ ^^
팔의 길이가 각각 1m인 2 Link 로봇의 End effector(로봇팔의 끝)의 위치가 (1,1) 되게하려면 각 Joint의 각도를 어떻게 잡으면 될까요?
(밑으로 내려 가시기 전에 잠시 생각해보세요 ^^)
0도, 90도라고 대답하셨나요? 넵~ 잘하셨습니다 짝짝짝~ o(^o^)o
그런데 혹시 90도 -90도라고 대답하신분 계신가요? 

inverse04.png
잘 생각해보시면 주어진 End effector의 위치를 만족하는 Joint angle의 set이 하나가 아닐 수도 있습니다.
즉 Inverse Kinematics의 해(solution)가 없을 수도 있구요(End-effector [100,100]을 만족하는 Joint angle은 존재하지 않습니다.)
유일하게 하나일 수도 있구요 여러개일 수도 있고 아니면 무수히 많을 수도 있다는 거죠~

기하학적 방법 말고 지난 시간에 보신 Transformation Matrix의 곱으로 표현된 경우 Joint angle을 찾기위해서는 
비선형 연립방정식을 푸셔야합니다. System이 조금만 복잡해져도 컴퓨터의 도움 없이 손으로는 못풀어요 ㅜㅜ
MATLAB에서는 fsolve 함수와 같은 비션형 방정식을 풀 수 있는 녀석을 활용하시면 됩니다.

예를들어 End effector [1, 1.5]에 대한 Joint angle을 수치적으로 구하고 싶으시면
Objective Function을 아래와 같이 작성해주시고
inverse06.png
(식은 Forward Kinematics에서 유도한 식을 그대로 썼습니다.)
그리고 Optimization Tool의 Nonlinear Equation을 풀수 있는 fsolve를 사용하시면..

inverse05.png


Joint angle θ1과 θ2를 각각 30.56' , 51.32'로 구할 수 있습니다.
θ1과 θ2를 듬성 듬성 변화시키면서 Forward Kinematics로 End effector에 관한 Grid를 만들어 놓고 
임의의 위치에 대해 가장 가까운 Grid Point를 Start Point로 사용하시면 fsolve의 계산시간을 많이 줄일 수 있습니다.

실제로 LEGO Mindestroms로 만들어 보면 짠~ o(^o^)o
(완벽한 네모가 나오지 않는 것은 Gear의 backlash, 브릭들 간의 마찰, 볼펜대가 휘어짐, 거리측정의 잘못 등등 때문입니다 ㅜㅜ)



간단하게 이번 시간은 여기까지~ ^^
다음 시간에 뵈요~ 하하 뿅!!
profile