6 축 로봇으로 엔드 이펙터 위치 및 방향 범위를 지정하여 최적의 관절 값을 찾는 방법


10

공구를 엔드 이펙터에 고정하는 6 축 관절 식 로봇 암을 고려할 때, 원하는 공구 위치와 공구 방향이 있으면 로봇이 해당 위치에 도달하기위한 역 운동학 방정식에 정확히 1 개의 솔루션이 있습니다.
(또는 조인트 범위에 따라 최대 16 가지의 다른 솔루션)

http://en.wikipedia.org/wiki/Robotic_arm

그러나 로봇이 펜과 같은 것을 잡고 있고 로봇이 대상에 해당 펜으로 특정 점을 표시하려면 펜이 표시된 표면에 수직 인 한 펜의 방향을 신경 쓰지 않습니다.

따라서 역 운동학 방정식에는 무한히 많은 해가 있습니다.

이 솔루션 중에서 현재 구성에 가장 가까운 조인트 구성을 선택하려면 어떻게해야합니까?
(또는 모든 조인트 각도가 최대 및 최소에서 가장 먼 것과 같은 다른 유사한 기준에 따라 최적의 조인트 구성입니까?)

답변:


9

먼저, 최적 을 정의해야합니다 . 최적이라고 생각하는 것을 말하지 않기 때문에 대부분의 사람들은 2 차 표현을 선택합니다. 예를 들어 현재 관절 각도가 벡터에 의해 주어진다고 가정합니다.α. 필요한 움직임을 최소화하는 것을 고려할 수 있습니다-오류x=ααstart비용 함수를 정의 할 수 있습니다. J=xTQx 일부 매트릭스 Q. 우리는 일반적으로 대각선 행렬을 사용하지만 양의 한정 행렬이 사용됩니다.

조인트 각도가 2 개인 단순화 된 예에서 a 더 저렴한 모터 (아마도 엔드 이펙터에 더 가까운)를 가지고 있다면

J=[xaxb][1002][xaxb]즉. 관절의 움직임 공동보다 두 배나 비싸다 a.

이제 운동학 방정식은 행렬 공식이며 Denavit-Hartenberg 표기법은 다음과 같습니다.

Ti=[100x010y001z0001]여기서 오른쪽은 위치를 나타냅니다. (x,y,z) 관절 각도가 주어지면 방향 (현재 0 회전으로 설정).

방향과 위치 만 신경 쓰지 않기 때문에 마지막 변환 행렬의 처음 3 개 열과 첫 번째 변환 행렬의 마지막 행을자를 수 있습니다. 이 공식을 다음과 같이 표현할 수 있습니다.

[100001000010]Ti[0001]=[xyz]

왼쪽을 곱하면 세 가지 방정식이 나옵니다. 매개 변수가 선형 인 경우 해결하기가 간단합니다. 모든 액추에이터가 선형 액추에이터 인 경우입니다. 이 경우 문제는 실제로 2 차 프로그램 입니다. 방정식을 얻기 위해 왼쪽을 다시 정렬 할 수 있습니다.

Kx=[xyz]일부 행렬의 경우 케이.

2 차 프로그램은 다음과 같은 형식으로 표현 될 수있는 문제입니다.

최소화 J=12xTQx+cTx

에 따라 Axb, 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 행렬이라고 함)을 사용하여 비용 함수의 기울기 (예측 된 국소 최소값)의 제로 크로싱을 찾을 수 있습니다.

새로운 예측 방향으로, 역 솔버를 통해 다시 넣고 정확도가 충분해질 때까지 반복하십시오.

역 운동 학적 문제 자체를 반복적으로 해결해야하므로이 방법은 효율적이지 않을 수 있습니다 (따라서 자체적으로 해결하는 데 시간이 걸리는 기능을 반복적으로 사용하고 있음). 또한 관련된 코드는 본격적인 최적화 알고리즘보다 적을 수 있지만 여전히 상당한 시간을 투자하지는 않지만 상당히 중요합니다.


두 방법 중 하나 (비선형 프로그램으로 공식적으로 해결하거나 역 문제를 해결하기 위해 함수를 반복적으로 사용)를 사용하면 로컬 최소값이 여러 개인 경우 솔루션이 최적이 아닐 수 있습니다. 이 경우 다양한 접근 방식을 사용하여 전역 최소값을 찾으려고 시도 할 수 있습니다. 비선형 프로그래밍 솔버를 사용하더라도 초기 값 (예 : 조인트 각도)으로 시드를 제공해야합니다. 다양한 방법으로 생성 된 시드로 두 방법 중 하나를 반복적으로 실행할 수 있습니다.

  • 무작위 재시작 (임의로 생성됨)
  • 그리드 기반

또는 다른 사용자 정의 방법.

그러나 최소값이 많은 경우 글로벌 최소값을 찾을 수있는 좋은 방법이 없습니다. 당신은 당신의 기회를 향상시킬 수 있습니다.


2

문제는 산업용 로봇에 관한 것이기 때문에 아마도 로봇의 역학 모델이 ​​없을 것이므로 운동 학적 기준 만 최적화하는 솔루션을 찾고 있다고 가정합니다.

로봇에는 역 운동학을위한 폐쇄 형 솔루션이 있지만 불행히도 엔드 이펙터에는 회전 자유도가 추가되어 로봇의 기본 자유도가 7입니다. 그러나 이것은 단지 하나 이상의 dof 이기 때문에 생각하는 것만 큼 큰 문제는 아닙니다.

거의 중복되지 않는 로봇 의 일반적인 트릭 은 여분의 자유도를 잠그고 나머지 관절 값을 분석적으로 해결하는 것입니다. 솔루션을 반환 하는 6 dof 로봇을 위한 폐쇄 형 IK 솔버를 작성한다고 가정 해 보겠습니다 .0.05평균 ms. 에서 반복함으로써1360 따라서 펜 각도의 이산화에 대한 최적의 솔루션을 찾을 수 있습니다. 118 ms는 응용 프로그램이 충분할 것입니다.

대부분의 경우 펜이 조금만 움직이면 (예를 들어 선을 그릴 때) 검색 속도를 높이는 또 다른 방법은 숫자 IK를 사용하는 것입니다.

허락하다 q1 로봇의 현재 구성이어야합니다. J 야곱이되고 Δx현재 엔드 이펙터 변환에 대한 타겟의 변위입니다. 풀다Δx=JΔq ...에 대한 Δq 새로운 구성을 계산 q2=q1+Δq. 나는 여기에서 세부 사항을 건너 뛰지 만 해결책은Δq 최소화해야합니다 Δq 올바르게 선택된 측정 항목의 경우

이것은 7 dof 로봇에 대해 수행되며 밀리 초의 일부만 소요됩니다. 이기는 하지만q2 유효한 구성이 아닐 수도 있고 (조인트 값이 범위를 벗어날 수 있음) 정확한 IK 솔루션이 아닐 수도 있습니다 (하지만 의사 역수 단계를 더 많이 수행 할 수 있음). 대부분의 경우 검색을위한 좋은 시작점이됩니다. 닫힌 폼 솔버.


1

이것에는 멋진 닫힌 형태가 있습니다. 우리가 무엇을 신경 쓰지 않는다고 가정 해 봅시다.rz입니다 (즉, 어떻게 변경 하는지는 신경 쓰지 않습니다 ).

J1X˙=Θ˙=[j1j2j3j4j5j6][x˙y˙z˙rx˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
어디 ji 입니다 ithJ1. 우리는 헤어질 수있다Θ˙ 에 의존하는 부분으로 rz˙ 그리고 그렇지 않은 부분.
Θ˙=Θ˙x˙ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
게임은 이제 최소화되었습니다
(Θ˙x˙ry˙+Θ˙rz˙)TD(Θ˙x˙ry˙+Θ˙rz˙)
일부 대각선 행렬 Dronalchn이 말했듯이. 내가 사용할거야A=Θ˙x˙ry˙B=Θ˙rz˙ 더 쉽게 볼 수 있습니다.

이것을 확장 할 수 있습니다

ATDA+2BTDA+BTDBorATDA+2rz˙j6TDA+rz˙2j6TDj6

이제 우리는 쉽게 구별 할 수있는 방정식을 가지고 있습니다. rz˙. 우리는 다음과 관련하여 파생 상품을 찾습니다.rz˙ 그리고 그것을 설정 0.

2j6TDA+2rz˙j6TDj6=0rz˙=j6TDAj6TDj6
이렇게하면 두 포즈 사이의 관절 각도 "거리"가 최소화됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.