Problema de singularidade no solucionador cinemático inverso

9

Estou lutando com esse problema há dias. Eu realmente espero que alguém possa me dar uma dica de qual é o problema.

O robô é composto por 5 eixos. O primeiro eixo gira em torno do eixo z e outros 4 eixos giram em torno do eixo y. E o solucionador basicamente funciona.

Aqui está o que eu fiz até agora:

  1. Eu calculo o fator de manipulação com minha matriz jacobiana (apenas parte translacional, já que apenas a posição é rastreada aqui. Na verdade, eu também tentei com uma matriz jacobiana combinada, portanto, não apenas a parte translacional, mas também a parte rotacional. Mas o movimento brusco estava lá de qualquer forma):

  2. Então o fator de amortecimento é:

    insira a descrição da imagem aqui

  3. O fator de amortecimento é então integrado ao cálculo pseudo inverso:

insira a descrição da imagem aqui

Como você pode ver, este é apenas um solucionador cinemático pseudo-inverso clássico com o método de mínimos quadrados amortecidos. O fator de manipulação de acordo com o segundo movimento (problema) é: insira a descrição da imagem aqui A capacidade de manipulação cai no início do vídeo. Mas por que? Até onde eu sei, esse fator de manipulação indica a dependência linear dos eixos. Para mim, os eixos não parecem ser linearmente dependentes na parte inicial.

Esse movimento brusco me deixa louco. Como você pode ver na primeira animação, o solucionador parece funcionar corretamente. O que estou perdendo aqui?

Joe
fonte
11
Bem-vindo à robótica , Joe! Essa é uma pergunta fantástica, mas infelizmente não acho que haja detalhes suficientes para responder à pergunta. Quando um sistema chega a uma singularidade, eu esperaria que algum eixo de movimento fizesse um balanço selvagem, como um eixo girando 180 graus, porque outro está tentando ir de 89 a 91 graus (se 90 graus fosse a singularidade). Eu realmente não estou vendo esse comportamento aqui. Gostaria de saber se isso é mais um problema de implementação, como usar algo como em atanvez de atan2etc. Você poderia editar sua pergunta para publicar o código que está usando?
Chuck
11
@ Chuck, editei a pergunta para que o "balanço selvagem" possa ser visto. (veja a 2. atualização da animação)
Joe

Respostas:

1

Como outros já apontaram, deve haver um problema com a implementação do algoritmo IK, pois não deve haver nenhum comportamento singular nas descrições que você forneceu.

Agora você tem duas alternativas: ou você começa a depurar o código ou pode querer explorar o fato de que o problema pode ser facilmente dividido em dois subproblemas para os quais você pode empregar prontamente a maior parte do código escrito até agora.

Dado o destino 3D desejado , é fácil observar que o valor desejado da primeira junta é: .(xd,yd,zd)θ1d=arctan(ydxd)

A lei de controle para conduzir a primeira articulação do manipulador para pode ser tão simples quanto:θ1d

θ1˙=K1(θ1dθ1).

Então, seja a matriz responsável pela rotação de torno do eixo :RSO(3)θ1dz

R=(cosθ1dsinθ1d0sinθ1dcosθ1d0001).

Através de , você obterá o novo destino que estabelecerá um novo problema planar IK 2D no plano .R(xd,0,zd)1=RT(xd,yd,zd)Txz

Nesse ponto, você pode resolver usando o jacobiano do manipulador de 4-DOF restante.(xd,zd)1

Ugo Pattacini
fonte
Eu acho que não há necessidade de resolver o problema em subproblemas. Como a declaração do vetor unitário já indica o que você acabou de descrever.
21419 Joe
A repartição é uma mera sugestão para permitir que você reutilize o 4 DOF Jacobian, que é a parte do seu código que funciona sem problemas, conforme relatado no início de sua postagem.
Ugo Pattacini 15/02/19
0

Eu acho que você introduziu uma singularidade algorítmica no primeiro eixo do pulso. Parece-me que, quando atinge 90 graus "para baixo", em vez de ir para 91, tenta voltar de zero a -269 graus.

Claro que isso é especulativo sem ver o código.

SteveO
fonte