센로그

2. Numerical Solution of Inverse Kinematics 본문

게임/Inverse Kinematics

2. Numerical Solution of Inverse Kinematics

seeyoun 2023. 4. 25. 18:27

◆ Introduction

n개의 joint가 있다고 할 때, θ_1~θ_n까지의 joint angle이 존재한다.

θ_j는 j번째 joint의 회전 각도. (회전축을 알고있다고 가정)

 

IK를 풀기 위해, end effector가 최대한 target position에 가깝도록 하는 joint angle들이 결정되어야 함.

 

< 몇 가지 개념 정리 >

  • s_1~s_k : root에 대한 end effector들의 상대 좌표라 하자.
  • s 벡터end effector position들{s_1, s_2, ... , s_k}^T 열벡터 형태로 표현.
  • t 벡터 : target position들 {t_1, t_2, ... , t_k)^T 열벡터 형태로 표현함. t_i는 i번째 end effector의 target position인 것.
  • θ 벡터 : joint angle {θ_1,...,θ_n}^T 열벡터 형태로 표현함
  • e_i : i번째 end effector의 변화량, 즉 얼마나 변해야 하는지(desired change in position)를 나타내는 e_i = t_i - s_i이다.

 

- Forward Kinematics(FK) : 모든 joint들의 joint angle θ 주어졌을 때, 어떤 함수(s = f(θ))를 돌렸더니 end effector들 position이 결정되는 것FK

 

- Inverse Kinematics (IK) : desired end effector position(end effector있어야할 위치)이 주어졌을 때, 어떤 함수(θ = f^(-1)(s_d))를 돌렸더니 모든 joint들의 joint angle θ 결정되는 것IK

 

더보기

IK 는 엄청난 비선형 함수다. 해가 없을 수도 있고, 여러개일 수도 있다. 최적 해가 하나가 아닐수도 있다.

 

IK 문제를 이해하기 위해서, 우선 kinetic angular variables의 개념을 이해해야 함!

 


◆ Kinetic Angular Variables

원을 그리면서 도는 파티클이 있다 하자

파티클의 position카르테시안 좌표 (x,y) (직교 벡터 두개로 표현되는 모든 것)로 표현할 수 있따.

그러나, x, y position만으로는 얘가 이 원 위에서 어떻게 운동하고 있는지알 수 없음.

 

이런 원형 움직임을 쉽게 표현하기 위해,  θ를 도입해 표현하는 방법이 있다.

반지름 R과 회전각 θ 사용해 단위시간동안 점이 얼마나 회전했는지를 표현해줄 수 있음!

 

기준 축이 x일때, 반지름 R과 회전각 θ를 사용하여 x = Rcosθ, y = Rsinθ로 표현할 수 있음 ㅇㅇ(CCW가 +, CW가 -)

 

 

Δθ = θ(t+Δt)  θ(t)

Δθ는  타임 스탭이 지나감에 따라 θ가 얼마나 움직였는지를 의미함.

이를 통해, 아주 짧은 시간동안 θ의 변화량 각속도ω를 정의할 수 있다.

각속도(angular velocity) ω = dθ/dt

 

일정한(constant한) 각속도 ω로 움직이는 모션의 경우,

 또는 는 초기 각도, 는 시간 변화)

 

즉, θ(t) = 에서 출발하여 각속도  만큼 이동한 것)를 나타냄.

Δθ = 각속도 ω로 Δt동안 이동한 거리.

 

 

또, 각속도 ω가 시간에 따라 바뀌는 경우,

우리는 각 가속도를 정의할 수 있당

각 가속도(angular acceleration) α = dω/dt

일정한 각 가속도 α로 움직이는 모션의 경우, 다음 두 공식을 적용할 수 있음

 

또, 우리는 부채꼴에서 중심각 θ에 대응하는 호의 길이 L = rθ (θ는 라디안)인 것을 알고있다.

Δθ에 대응하는 호의 길이 s = R|Δθ| 라 할 수 있음. Δθ가 매우 작은 경우, s는 |Δr|에 근접함.

 

s = R|Δθ|의 양 변을 Δt로 나누면, 속도 v = R|Δθ/Δt| = R|ω|가 나옴.

Δθ가 같더라도 R이 커지면 이동 거리도 커지고 속도도 빨라짐을 알 수 있음. (당연함ㅇㅇ)

 

 

2차원에서의 각속도 예시를 보자.

극좌표 위에 점 p(r, Φ)가 있따.

점 p에 V라는 힘이 가해졌을 때, V는 V⊥와 V∥로 나뉠 것임. 이때 V는 r벡터와 평행하므로 속도에 영향 미치지 않음.

따라서 점 p의 회전에 영향을 준 힘은 V⊥만큼임! 

이때 각속도 ω는 다음과 같다.

 

그럼, 이걸 3차원으로 옮기면! ???

3차원에서 회전 각은 axis-angle 형식으로 표현할 수 있다.

u 어떤 벡터를 기준으로 회전할 것인지(회전축. 단위벡터), θu를 기준으로 얼마만큼 이동했는지를 의미함.

 

3차원상에서 각속도(orbital angular velocity)는 2차원 각속도에다 u벡터를 곱한 형식으로 표현됨.

이때 θ는 r과 v 사이의 각이므로, 다음과 같이 cross product 형태로 쓸 수 있음.

벡터 , 가 있을 때, 의 크기는 두 벡터로 이루어진 평행사변형의 넓이 (quantity)임.

근데 여기에 벡터 을 곱해주면 외적 벡터가 됨. 이 아이디어를 적용한 것이 위의 식. (을 아래 위로 곱해준 이유)

이를 응용하면, ω와 r의 외적 ω×r은 다음과 같이 v⊥가 됨!

기억하자!

  • ω = r×v/r²
  • ω×r = v⊥
더보기

※ 각운동량과 관성 모멘트

각운동량은 물체의 회전 관성특정 축 주위의 회전 속도의 곱을 나타내는 벡터량이다. 그러나 만약 물체가 어떤 한 평면 위에서 회전한다면, 우리는 그것을 스칼라인것처럼 다룰 수 있다.(pseudoscalar)

선운동량 p = mv였던 것처럼, 각운동량 L은 Iω (I는 관성 모멘트, ω는 각속도)로 표현할 수 있따.

(관성 모멘트는 물체의 운동 변화에 대한 저항을 특징짓는 값입니다. 이는 질량이 회전 축 주위에 어떻게 분포되는지에 따라 달라지며, 선택한 축에 따라 다를 수 있습니다.)

 

내가 어떤 힘 v를 가했을 때, 내부가 얼마나 채워져있느냐에 따라 저항하는 힘(관성 모멘트)이 달라지므로 ω도 달라진다! 라는 느낌인듯.

 

결론은, 각운동량이 관성 모멘트에 영향을 받는다~ 라는 것

 


기초 개념 - Gradient

각 변수들에 대한 편미분으로 이루어진 열벡터

IK를 풀기위한 기초 개념이 아직 남아있다. 그중 Gradient와 Hessian에 대해 알아볼 것!

 

스칼라 값을 가진 다변수 함수 f(x,y,...)의 gradient∇f로 나타낼 수 있다.

하나의 열벡터 ∇f에 모든 partial derivate(편미분) 정보를 저장한다.

f(x,y) = 2x² - 4xy일때 gradient ∇f는 다음과 같다.

함수의 어떤 한 점 (x₁,y₁,...)에 서 있을 때, gradient ∇f(x₁,y₁,...)벡터그 점에서 함수를 가장 빠르게 max로 만드는 방향을 알려준다. 

언덕에 가장 빨리 올라가는 방법은 젤 가파른 곳으로 올라가는 것!

gradient 방향으로 가면 가장 빨리 max 지점에 도달할 수 있음

 


 기초 개념 - Hessian

헤시안은 각 변수들에 대해 2차 편미분(second-order partial derivative)을 한 matrix

헤시안은 Symmetric matrix 성질을 띔

헤시안은, 함수의 Gradient ∇f를 구한 다음에 그 녀석의 자코비안을 구한 것과 똑같음. (gradient의 jacobian)

즉, H(f(x)) = J(∇f(x))

 

f(x,y) = x³ + 2x²y + 3xy + y³ 이라 하자.

x, y로 한번 편미분하면,

더보기

이때 gradient는 다음과 같음.

x로 편미분, y로 편미분, 반대 편미분하면

이 값들로 다음 헤시안 matrix를 구성할 수 있다.

더보기

이때 gradient의 jacobian 계산해봐도 같음~

 

참고로 변수가 3개인 경우

 


◆ Jacobian Inverse Methods

지금까지 IK를 위한 기초 개념들(kinetic angular variables, gradient, hessian)을 공부했다. 다시 IK로 넘어와보자!

 

IK 풀이법 중, Jacobian solution들은 IK 문제를 선형근사해서 푼다.

bone 이동 및 joint angle 시스템 변화에 따른 end effector의 움직임을 상대적으로 모델링함.

오른쪽 그림처럼 선형근사(Linear approximation)한다~

J(θ) 편미분 θ만큼 움직일 때 end effector가 움직인 거리를 선형근사한 것! 을 의미함. ?

더보기

이거같은데..

s end effector의 position(위치)이고, θ각도. 위치변화량(거리)을 각도로 미분하면 각속도.

p join들의 현재 position이고, v회전축의 unit vector.

 

 

IK 문제를 풀기 위해서는 Jacobian 역행렬이 필요함. 왜 필요한지는 FK 문제에서 비롯됨

θ를 넣었을 때 end effector position들의 열벡터인 s벡터를 내놓는 f(θ)가 있다고 하자. (s = f(θ))

양 변을 t에 대해 미분하고, 분모 분자에 dθ를 곱하면 J(θ)형태를 만들수 있다.

 

충분히 짧은 시간 t에 대한 end effector의 움직임은 Jacobian이 dθ 움직인 것과 똑같다는 것을 의미.

따라서, Δs ≒ JΔθ임을 알 수 있음.

 

end effector들 위치 변화 Δs는 점점 end effector의 목표 위치인 e = t - s에 최대한 근접하도록 움직여야 함

그러므로 Δs에 e를 대입하면, FK 문제를 푸는 것은 e = JΔθ 를 푸는 것이라 할 수 있음.

 

따라서, IK 문제를 푸는 것은 다음과 같이 표현할 수 있음.

 


◆ Jacobian Pseudo Inverse Methods

그런데... 역행렬을 푸는 것은 어렵다.

 

J는 정사각 행렬이나 가역 행렬이 아닐 수도 있음.

가역 행렬 이더라도, singularity problem(==unreachable. 못 닿는 상황)이 있을 수도 있음.

이런 문제를 해결하기 위해서 Jacobian Pseudo-inverse J가 등장함!

 

J를 푸는 법은, 관측값들이 있을 때 에러를 최소화하는 피팅 함수를 찾는 것이다.

노이즈가 어느정도는 있다고 가정하고 그 노이즈를 최소화하는 답안을 찾아내는 것. (least square 방식)

=> 정확한 값은 아닐지라도, 해가 무조건 나옴. 

더보기

예시)

나는 이 함수가 무조건 y = mx + b의 꼴이라는 것을 알고 있다고 하자.

그럼 여러개의 mx + b 선을 그어 보면서, 어떤 게 가장 관측값들과의 에러가 적은지(best fit)를 찾아내는 것.

이런 방식으로 e = JΔθ 를 풀어냄.

 

pseudo inverse는,

null space란, matrix와 곱했을때 0을 만들어주는 것을 의미함.

A의 null space가 B일 때, AB = 0

 

 

J를 사용하면, 항상 해가 나옴.

  • e가 J 범위 안에 있는 경우에는, e = JΔθ를 만족하는 유니크 솔루션 Δθ가 나옴.
  • e가 J 범위 안에 없는 경우에는, JΔθ - e의 값을 최소화하는 해 Δθ를 가짐.

 

 

IK 문제를 풀기 위해 J를 사용한 접근법으로는 이런 애들이 있다~ 다음 차시부터 차근차근 배울 것임

  • Analytical Jacobian Method (usually used for the simple robot problem)
  • Moore-Penrose Method
  • Jacobian Transpose Method
  • Damped Least Square Method (DLS)
  • Singular Value Decomposition (SVD) Method

 

Comments