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:
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):
Então o fator de amortecimento é:
O fator de amortecimento é então integrado ao cálculo pseudo inverso:
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) é: 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?
atan
vez deatan2
etc. Você poderia editar sua pergunta para publicar o código que está usando?Respostas:
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
Então, seja a matriz responsável pela rotação de torno do eixo :R∈SO(3) θ1d z
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)T xz
Nesse ponto, você pode resolver usando o jacobiano do manipulador de 4-DOF restante.(xd,zd)1
fonte
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.
fonte