Main Content

역기구학 알고리즘

inverseKinematics 클래스와 generalizedInverseKinematics 클래스는 역기구학(IK) 알고리즘에 대한 액세스를 제공합니다. 이러한 알고리즘을 사용하여 로봇에 대해 지정된 목표와 제약 조건을 구현하는 로봇 컨피규레이션을 생성할 수 있습니다. 이 로봇 컨피규레이션은 로봇 모델의 위치 제한 범위 내에 있고 로봇이 가진 어떠한 제약 조건도 위반하지 않는 조인트 위치의 목록입니다.

알고리즘 선택

MATLAB®은 IK 해를 얻기 위해 두 가지 알고리즘, BFGS 투영 알고리즘과 Levenberg-Marquardt 알고리즘을 지원합니다. 두 알고리즘 모두 해에 대한 초기 추측값에서 시작하여 특정 비용 함수를 최소화하려고 시도하는, 반복적인 기울기 기반 최적화 방법입니다. 두 알고리즘 중 하나가 지정된 허용오차 내에서 비용이 0에 가까운 컨피규레이션으로 수렴되면 역기구학 문제에 대한 해를 구한 것입니다. 그러나 초기 추측값과 목표 엔드 이펙터 자세의 조합 중 일부에서는 이상적인 로봇 컨피규레이션을 구하지 못한 채 알고리즘이 종료될 수 있습니다. 이를 처리하기 위해 알고리즘은 무작위 재시작 메커니즘을 사용합니다. 무작위 재시작 메커니즘이 활성화된 경우 탐색에서 목표 엔드 이펙터 자세를 구현하는 컨피규레이션을 찾지 못할 때마다 무작위 로봇 컨피규레이션에서 반복 탐색을 재시작합니다. 이러한 무작위 재시작은 적합한 IK 해를 구하거나 최대 시간이 경과하거나 반복 한도에 도달할 때가지 계속됩니다.

알고리즘을 설정하려면 SolverAlgorithm 속성을 'BFGSGradientProjection' 또는 'LevenbergMarquardt'로 지정하십시오.

BFGS 기울기 투영

BFGS(Broyden-Fletcher-Goldfarb-Shanno) 기울기 투영 알고리즘은 이전 반복에서 비용 함수의 기울기를 사용하여 대략적인 2계 도함수 정보를 생성하는 준뉴턴 방법입니다. 알고리즘은 이 2계 도함수 정보를 사용하여 현재 반복에서 수행할 단계를 결정합니다. 로봇 모델의 조인트 제한이 생성하는 비용 함수의 경계 제한을 처리하기 위해 기울기 투영 방법이 사용됩니다. 계산된 방향은 탐색 방향이 항상 유효하도록 수정됩니다.

이 방법은 디폴트 알고리즘이며 해를 구하는 데 있어 Levenberg-Marquardt 방법보다 더 견고합니다. 조인트 제한에 가까운 컨피규레이션인 경우나 초기 추측값이 해에 가깝지 않은 경우에 더 효과적입니다. 초기 추측값이 해에 가깝고 더 빨리 해를 구할 필요가 있을 경우 Levenberg-Marquardt 방법을 사용해 보십시오.

Levenberg-Marquardt

InverseKinematics 클래스에서 사용되는 LM(Levenberg-Marquardt) 알고리즘 변형은 오차 감쇠 최소제곱 방법입니다. 오차 감쇠 인자는 알고리즘이 국소 최솟값을 벗어나는 것을 방지하는 데 도움이 됩니다. LM 알고리즘은 초기 추측값이 해에 가까운 경우 훨씬 빠르게 수렴하도록 최적화되어 있습니다. 그러나 이 알고리즘은 임의의 초기 추측값을 잘 처리하지 못합니다. 엔드 이펙터의 목표 궤적을 따르는 일련의 자세에 대한 IK 해를 구하는 경우라면 이 알고리즘을 사용해 볼 수 있습니다. 일단 한 자세에 대한 로봇 컨피규레이션이 구해지면, 이 컨피규레이션이 궤적에서 다음 자세의 IK 해를 구하기 위한 양호한 초기 추측값인 경우가 많습니다. 이런 상황에서 LM 알고리즘은 더 빠른 결과를 만들어 낼 수 있습니다. 그렇지 않은 경우 BFGS 기울기 투영을 대신 사용하십시오.

솔버 파라미터

각 알고리즘에는 해를 개선하기 위한 특정 조정 가능형 파라미터가 있습니다. 이러한 파라미터는 객체의 SolverParameters 속성에 지정됩니다.

BFGS 기울기 투영

BFGS 알고리즘의 솔버 파라미터에는 다음 필드가 있습니다.

  • MaxIterations — 허용되는 최대 반복 횟수입니다. 디폴트 값은 1500입니다.

  • MaxTime — 제한 시간이 초과되기 전 알고리즘이 실행된 최대 시간(초)입니다. 디폴트 값은 10입니다.

  • GradientTolerance — 비용 함수의 기울기에 대한 임계값입니다. 기울기의 크기가 해당 임계값 아래로 떨어지면 알고리즘이 중지됩니다. 값은 양의 스칼라여야 합니다.

  • SolutionTolerance — 해로부터 생성된 엔드 이펙터 자세와 목표 자세 간의 오차 크기에 대한 임계값입니다. 객체 내 자세의 각 성분에 지정된 가중치가 이 계산에 포함됩니다. 값은 양의 스칼라여야 합니다.

  • EnforceJointLimits — 해를 계산할 때 조인트 제한을 고려하는지를 나타내는 표시자입니다. JointLimitsrigidBodyTree 내 로봇 모델의 속성입니다. 기본적으로 조인트 제한이 적용됩니다.

  • AllowRandomRestarts — 무작위 재시작이 허용되는지를 나타내는 표시자입니다. 무작위 재시작은 알고리즘이 제약 조건을 충족하지 않는 해에 근접할 경우 트리거됩니다. 무작위로 생성된 초기 추측값이 사용됩니다. MaxIterationMaxTime은 여전히 준수됩니다. 무작위 재시작은 기본적으로 활성화되어 있습니다.

  • StepTolerance — 솔버에서 허용하는 최소 스텝 크기입니다. 일반적으로 스텝 크기가 작을수록 해가 수렴에 가깝다는 것을 의미합니다. 디폴트 값은 10–14입니다.

Levenberg-Marquardt

LM 알고리즘의 솔버 파라미터에는 BFGS 기울기 투영 방법에서 필요한 것 외에도 다음과 같은 추가 필드가 있습니다.

  • ErrorChangeTolerance — 반복 간에 발생하는 엔드 이펙터 자세 오차의 변화에 대한 임계값입니다. 자세 오차의 모든 요소의 변화가 이 임계값보다 작은 경우 알고리즘이 반환됩니다. 값은 양의 스칼라여야 합니다.

  • DampingBias — 감쇠에 대한 상수항입니다. LM 알고리즘에는 이 상수에 의해 제어되는 감쇠 기능이 있으며, 이 기능은 비용 함수와 함께 작동하여 수렴 속도를 제어합니다. 감쇠를 비활성화하려면 UseErrorDamping 파라미터를 사용합니다.

  • UseErrorDamping — 감쇠의 사용 여부를 나타내는 표시자로, 디폴트 값은 1입니다. 감쇠를 비활성화하려면 이 파라미터를 false로 설정합니다.

해 정보

역기구학 알고리즘을 사용하는 동안 객체에 대한 각 호출은 알고리즘이 수행된 방법에 대한 해 정보를 반환합니다. 해 정보는 다음 필드가 있는 구조체로 제공됩니다.

  • Iterations — 알고리즘에 의해 실행된 반복 횟수입니다.

  • NumRandomRestarts — 알고리즘이 국소 최솟값에 고착되었을 때 무작위로 재시작한 횟수입니다.

  • PoseErrorNorm — 해의 자세를 목표 엔드 이펙터 자세와 비교했을 때의 자세 오차의 크기입니다.

  • ExitFlag — 알고리즘 실행과 그 반환 원인의 세부 정보를 알려주는 코드입니다. 각 알고리즘 유형의 종료 플래그는 종료 플래그 항목을 참조하십시오.

  • Status — 해가 허용오차 내에 있는지('success') 아니면 알고리즘이 구할 수 있는 최선해인지('best available') 설명하는 문자형 벡터입니다.

종료 플래그

해 정보에서 종료 플래그는 특정 알고리즘의 실행에 대한 자세한 정보를 제공합니다. 알고리즘이 성공했는지 알아보려면 객체의 Status 속성을 살펴보십시오. 각 종료 플래그 코드는 정의된 설명이 있습니다.

'BFGSGradientProjection' 알고리즘 종료 플래그:

  • 1 — 국소 최솟값을 찾았습니다.

  • 2 — 최대 반복 횟수에 도달했습니다.

  • 3 — 연산 중 알고리즘 시간이 초과되었습니다.

  • 4 — 최소 스텝 크기입니다. 스텝 크기가 SolverParameters 속성의 StepToleranceSize 필드 값보다 작습니다.

  • 5 — 종료 플래그가 없습니다. 'LevenbergMarquardt' 알고리즘에만 해당합니다.

  • 6 — 탐색 방향이 유효하지 않습니다.

  • 7 — 헤세 행렬이 양의 준정부호가 아닙니다.

'LevenbergMarquardt' 알고리즘 종료 플래그:

  • 1 — 국소 최솟값을 찾았습니다.

  • 2 — 최대 반복 횟수에 도달했습니다.

  • 3 — 연산 중 알고리즘 시간이 초과되었습니다.

  • 4 — 최소 스텝 크기입니다. 스텝 크기가 SolverParameters 속성의 StepToleranceSize 필드 값보다 작습니다.

  • 5 — 엔드 이펙터 자세 오차의 변화가 SolverParameters 속성의 ErrorChangeTolerance 필드 값보다 작습니다.

참고 문헌

[1] Badreddine, Hassan, Stefan Vandewalle, and Johan Meyers. "Sequential Quadratic Programming (SQP) for Optimal Control in Direct Numerical Simulation of Turbulent Flow." Journal of Computational Physics. 256 (2014): 1–16. doi:10.1016/j.jcp.2013.08.044.

[2] Bertsekas, Dimitri P. Nonlinear Programming. Belmont, MA: Athena Scientific, 1999.

[3] Goldfarb, Donald. "Extension of Davidon’s Variable Metric Method to Maximization Under Linear Inequality and Equality Constraints." SIAM Journal on Applied Mathematics. Vol. 17, No. 4 (1969): 739–64. doi:10.1137/0117067.

[4] Nocedal, Jorge, and Stephen Wright. Numerical Optimization. New York, NY: Springer, 2006.

[5] Sugihara, Tomomichi. "Solvability-Unconcerned Inverse Kinematics by the Levenberg–Marquardt Method." IEEE Transactions on Robotics Vol. 27, No. 5 (2011): 984–91. doi:10.1109/tro.2011.2148230.

[6] Zhao, Jianmin, and Norman I. Badler. "Inverse Kinematics Positioning Using Nonlinear Programming for Highly Articulated Figures." ACM Transactions on Graphics Vol. 13, No. 4 (1994): 313–36. doi:10.1145/195826.195827.

참고 항목

| |

관련 항목