먼저, 최적 을 정의해야합니다 . 최적이라고 생각하는 것을 말하지 않기 때문에 대부분의 사람들은 2 차 표현을 선택합니다. 예를 들어 현재 관절 각도가 벡터에 의해 주어진다고 가정합니다.α⃗ . 필요한 움직임을 최소화하는 것을 고려할 수 있습니다-오류x⃗ =α⃗ −α⃗ start비용 함수를 정의 할 수 있습니다. J=x⃗ TQx⃗ 일부 매트릭스 Q. 우리는 일반적으로 대각선 행렬을 사용하지만 양의 한정 행렬이 사용됩니다.
조인트 각도가 2 개인 단순화 된 예에서 a 더 저렴한 모터 (아마도 엔드 이펙터에 더 가까운)를 가지고 있다면
J=[xaxb][1002][xaxb]즉. 관절의 움직임b 공동보다 두 배나 비싸다 a.
이제 운동학 방정식은 행렬 공식이며 Denavit-Hartenberg 표기법은 다음과 같습니다.
∏Ti=⎡⎣⎢⎢⎢100001000010xyz1⎤⎦⎥⎥⎥여기서 오른쪽은 위치를 나타냅니다. (x,y,z) 관절 각도가 주어지면 방향 (현재 0 회전으로 설정).
방향과 위치 만 신경 쓰지 않기 때문에 마지막 변환 행렬의 처음 3 개 열과 첫 번째 변환 행렬의 마지막 행을자를 수 있습니다. 이 공식을 다음과 같이 표현할 수 있습니다.
⎡⎣⎢100010001000⎤⎦⎥∏Ti⎡⎣⎢⎢⎢0001⎤⎦⎥⎥⎥=⎡⎣⎢xyz⎤⎦⎥
왼쪽을 곱하면 세 가지 방정식이 나옵니다. 매개 변수가 선형 인 경우 해결하기가 간단합니다. 모든 액추에이터가 선형 액추에이터 인 경우입니다. 이 경우 문제는 실제로 2 차 프로그램 입니다. 방정식을 얻기 위해 왼쪽을 다시 정렬 할 수 있습니다.
Kx⃗ =⎡⎣⎢xyz⎤⎦⎥일부 행렬의 경우 K.
2 차 프로그램은 다음과 같은 형식으로 표현 될 수있는 문제입니다.
최소화 J=12x⃗ TQx⃗ +c⃗ Tx⃗
에 따라 Ax⃗ ≤b⃗ , Ex⃗ =d⃗
이를 해결하기 위해 여러 가지 알고리즘 (예 : interior point, active set 등)이 있습니다. 적합한 라이브러리를 찾으면 해결해줍니다.
비선형 방정식 시스템은 해결하기가 더 어렵습니다. 이것을 비선형 프로그래밍 이라고 하지만 회전 조인트가있는 경우의 것입니다.
본질적으로 행렬 방정식 대신 비선형 함수가 있습니다.
최소화 f(x) 에 따라 h⃗ (x)=0, g⃗ (x)≤0 (제약 조건의 RHS를 0으로 만들기 위해 필요한 경우 재정렬)
이를 해결하는 데 사용되는 알고리즘은 훨씬 더 복잡하지만 Interior-point, SQP (Sequential quadratic programming), Active-set, Trust-region 반사 알고리즘을 포함합니다. 분명히, 이러한 알고리즘의 작동 방식에 대한 설명은 매우 길기 때문에이 답변의 범위를 벗어나겠습니다. 말하자면 이차 프로그래밍에 사용되는 알고리즘의 내용량은 그 자체로 전체 과정이 될 수 있습니다.
문제를 해결할 라이브러리를 찾아야하며 효율적인 구현을 코딩하는 데 시간이 오래 걸리며 효율적인 구현은 한 번에 100 개 이상의 변수를 처리 할 수 있습니다. 예를 들어 MATLAB을 사용하는 경우 Optimization Toolbox에서 fmincon 함수를 사용하는 방법에 대한 설명서가 있습니다 .
온라인으로 해결하려면 C ++ 또는 다른 기본 구현 (예 : NLopt)이 필요할 수 있습니다. 이것은 마이크로 컨트롤러가 신속하게 해결할 수있는 것이 아닐 수 있으며 많은 라이브러리가 마이크로 컨트롤러에서 사용하기 쉽지 않은 다른 종속성을 가질 수 있습니다 (컴퓨터 용이므로).
효율성에 대해 걱정하지 않고 직접 코딩 할 수있는 것을 원한다면 역 운동학 문제 를 해결하기 위해 호출 할 수있는 함수가 있다고 가정하면 단순히 그라데이션 하강 방법을 수행 할 수 있습니다. 예를 들어, 임의로 시작 방향을 임의로 선택하고 역 문제를 해결 한 다음 비용 함수를 확인하십시오. 그런 다음 섭동 분석을 사용하여 방향을 어떻게 변경해야하는지 확인할 수 있습니다. 예를 들어, 현재 방향 주위에서 유사한 방향 (예 : 3 차 격자의 8 점)을 확인하면 비용 함수가 각 방향에서 어떻게 변하는 지에 대한 2 차 근사값을 얻을 수 있습니다.
2 차 근사법 (다변량-방향은 3 차원이므로 Hessian 행렬이라고 함)을 사용하여 비용 함수의 기울기 (예측 된 국소 최소값)의 제로 크로싱을 찾을 수 있습니다.
새로운 예측 방향으로, 역 솔버를 통해 다시 넣고 정확도가 충분해질 때까지 반복하십시오.
역 운동 학적 문제 자체를 반복적으로 해결해야하므로이 방법은 효율적이지 않을 수 있습니다 (따라서 자체적으로 해결하는 데 시간이 걸리는 기능을 반복적으로 사용하고 있음). 또한 관련된 코드는 본격적인 최적화 알고리즘보다 적을 수 있지만 여전히 상당한 시간을 투자하지는 않지만 상당히 중요합니다.
두 방법 중 하나 (비선형 프로그램으로 공식적으로 해결하거나 역 문제를 해결하기 위해 함수를 반복적으로 사용)를 사용하면 로컬 최소값이 여러 개인 경우 솔루션이 최적이 아닐 수 있습니다. 이 경우 다양한 접근 방식을 사용하여 전역 최소값을 찾으려고 시도 할 수 있습니다. 비선형 프로그래밍 솔버를 사용하더라도 초기 값 (예 : 조인트 각도)으로 시드를 제공해야합니다. 다양한 방법으로 생성 된 시드로 두 방법 중 하나를 반복적으로 실행할 수 있습니다.
또는 다른 사용자 정의 방법.
그러나 최소값이 많은 경우 글로벌 최소값을 찾을 수있는 좋은 방법이 없습니다. 당신은 당신의 기회를 향상시킬 수 있습니다.