Robotics

[로봇공학] 3. Inverse Kinematics로 2DOF 로봇팔 계산하기

로보고니 2024. 10. 30. 20:54

서론

이전 글에서 DH Parameter를 가지고 로봇팔을 표현하는 방법을 알아보았다. 우리는 DH 파라미터 표를 가지고 우리의 로봇팔이 어떻게 생겼는지도 알 수 있다. 그렇다면 로봇팔의 각도로 끝점의 위치를 계산하는 방법과 로봇팔을 표현하는 방법을 알았으니, 우리가 원하는 위치로 로봇이 움직일 수 있도록 해보자. 이를 위해서 우리는 Inverse Kinematics(역기구학)를 사용할 것이다.


Inverse Kinematics

역기구학은 쉽게 말해서 끝 점의 좌표와 각 관절의 길이를 가지고 각 관절의 각도를 계산하는 방법이다. 우리는 이미 Forward Kinematics를 다루었다. 이것은 Joint space를 Task space로 바꾸는 방법이었다. 그리고 오늘 알아볼 방법은 Task space를 Joint space로 바꾸는 Inverse Kinematics이다.

 

우리가 흔히 사용하는 (x, y, z) 좌표계를 우리는 Task space라고 한다. 그리고 로봇이 사용하는 각도와 관절의 길이로 이루어진 좌표계를 Joint space라고 한다. 즉, 우리가 사용하는 좌표계와 로봇이 사용하는 좌표계가 다르기 때문에, 그 좌표계 사이를 변환해주는 방법이 바로 Forward Kinematics와 Inverse Kinematics이다.

3 DOF 로봇팔의 Inverse Kinematics

Multiple Solution

역기구학을 풀다보면 위의 사진과 같이 여러 개의 방법이 있을 수 있다. 그리고 관절의 개수가 많아지면 많아질수록 해의 개수는 더 많아진다. 그렇기에 우리는 만약 위의 두 방법 중 장애물로 인해 사용하지 못하는 방법이 있더라도 다른 방법으로 이동 경로를 짤 수 있다. 따라서 로봇팔의 관절이 많으면 많을수록 보다 더 정교하고 다양한 움직임을 가질 수 있다.

 

하지만 로봇팔의 관절이 많다고 해서 다 좋은 것 많은 아니다. 물론, 앞서 말했듯 장애물이 있더라도 다른 방법으로 해결할 수 있지만, 해가 여러개가 있기 때문에, 계산 과정이 복잡해지고 어려워진다. 우리 역시 가장 간단한 2 DOF 로봇팔의 역기구학을 다룰 예정이다.


2 DOF 로봇팔 Inverse Kinematics 공식

2DOF 로봇팔 Inverse Kinematics 공식

 

2 DOF 로봇팔의 역기구학 공식에 대해서 자세히 증명하거나 풀지는 않을 것이다. 어차피 우리는 이것을 가지고 어떻게 코드로 작성하고 활용할지가 더 궁금하니 말이다. 우리는 이 공식을 가지고 MATLAB에서 코드를 작성하고, 이를 가지고 시뮬레이션을 돌릴 것이다. 즉, 우리는 로봇팔의 길이와 목표로 하는 x, y 좌표를 입력하면 각 관절의 각도를 알려주는 함수를 구현할 것이다.

 

전체 코드

function target_q = IK(Link_length, position)
    c2 = (position(1)^2 + position(2)^2 - Link_length(1)^2 - Link_length(2)^2) / (2 * Link_length(1) * Link_length(2));
    s2 = sqrt(1 - c2^2);
    theta2 = atan2(s2, c2);
    
    k1 = Link_length(1) + Link_length(2) * cos(theta2);
    k2 = Link_length(2) * sin(theta2);
    theta1 = atan2(position(2), position(1)) - atan2(k2, k1);

    target_q = [theta1; theta2];
end

전체 코드는 꽤나 간단하다 위에서 보여준 공식을 그대로 코드로 옮긴 것이다. 아마 코딩을 해본 사람이라면 위의 코드를 바로 이해할 수 있을 것이다.

 

Link_length: 각 로봇팔의 길이

position: 목표로 하는 위치 좌표

target_q: 계산해서 얻을 각 관절의 각도

 

나머지 과정은 위의 공식과 함께 비교해보자.

 

주의할 점

오늘은 Inverse Kinematics에 대해서 알아보았다. 오늘 알아본 역기구학은 꽤나 자주 사용된다. 하지만 역기구학을 계산하는 과정에서 atan2를 사용하게 되는데, 이로 인해서 몇 가지 문제가 발생할 수 있다. 예를 들면, y좌표가 0.001에서 -0.001로 변할 경우 로봇팔이 불필요하게 반대방향으로 360도를 돌면서 이동할 수도 있다.

정교하지 못한 역기구학 코드

위의 사진이 방금 말한 문제점이다. 왼쪽 사진을 보면 끝점의 궤적이 3사분면과 4사분면의 경계를 지나지 못하고 있다. 하지만 오른쪽 사진의 경우에는 문제없이 깔끔하게 이동한다. 이러한 문제점은 atan2를 사용하는 과정에서 각도의 제한에 걸려서 생기는 문제이다. 이런 것은 사실 chatGPT나 다른 AI 도구를 사용하면 쉽게 해결할 수 있다.


마무리

오늘은 역기구학에 대해서 알아보았다. 역기구학은 약간의 제약이 있지만 꽤나 유용하게 사용할 수 있다. 비록 우리가 직접 증명하기에는 까다롭지만, 3DOF, 4DOF, 5DOF, 6DOF 등 여러 관절을 가진 로봇팔이더라도 이미 그 공식들은 계산이 되어 있다. 따라서 우리는 공학자답게 그것들을 가지고 활용하면 된다.

 

역기구학을 가지고 로봇의 Joint space에서 Task space로 변환하는 방법을 알아보았다. 이제 로봇팔을 원하는 위치로 이동시킬 수 있게 되었으니, 다음에는 로봇팔이 움직이는 경로(path)에 대해서 자세히 알아볼 예정이다.