Literatura para cinemática inversa: limites das articulações e além

8

Recentemente, eu brinquei com a Inverse Kinematics e fiquei bastante impressionado com os resultados. Naturalmente, quero ir mais longe, mas não tenho idéia por onde começar. Em particular, eu gostaria de introduzir limites de articulação (ou seja, para uma articulação prismática até onde ela pode se mover, articulação articulada, quais ângulos ela deve estar entre, etc.).

Atualmente, eu entendo como produzir a matriz jacobiana para os vários tipos de juntas. Estou particularmente procurando literatura (de preferência gratuita e de fácil compreensão) sobre várias maneiras de implementar limites comuns. Também gostaria de descobrir idéias diferentes sobre como a cinemática inversa pode ser usada.

Jeff
fonte

Respostas:

4

Esta provavelmente não é a melhor resposta que posso dar agora, mas considere a Descida de Coordenada Cíclica (CCD), que funciona para matrizes jacobianas não-invertíveis. Um pequeno vídeo aqui .

A melhor fonte de cobertura para o CCD é a tese de mestrado de Chris Wellman. Para uma revisão mínima / curta, você pode ler esta fonte que menciona a maioria dos métodos disponíveis.

Um artigo mais matemático (para o pesquisador em você: D) é este http://math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pd f.

Para o pesquisador hardcore: http://matwbn.icm.edu.pl/ksiazki/amc/amc19/amc1941.pdf

Parece um método híbrido, embora sejam apenas slides com noções principalmente familiares: http://cmp.felk.cvut.cz/~hlavac/TeachPresEn/55IntelligentRobotics/KjchoInverseKinematics.pdf Mais uma leitura que vale a pena: http: // www .cns.atr.jp / erato / DB / PDF / tevatia-icra2000.pdf

Como você disse que prefere fontes gratuitas, não vou mencionar os poucos livros que se pode comprar da Amazon que resolvem esse problema. Pessoalmente, estou satisfeito com o CCD. Para ultraprecisão, prefiro o Jacobiano Inverso (onde sei que o sistema produz uma matriz invertível graças aos 6 DOF de uma plataforma robótica).

Como o IK pode ser usado? Principalmente quando você deseja animar um personagem, fornecendo apenas uma posição e orientação de um efetor final de um determinado membro. (youtube para exemplos). Se você deseja iniciar uma carreira em robótica, o IK é obrigatório se você estiver lidando com robôs articulados. No mundo dos jogos, é essencial quando você emprega a detecção de movimento de gestos humanos por meio de uma câmera (por exemplo, http://www.youtube.com/watch?v=HSradQVj26E - meu exemplo simplista de uma interface wiimote e um robô virtual ccd braço).

teodron
fonte
2

Artigo Original: Visão geral da cinemática inversa

Eu sugiro o link acima para uma visão geral de alto nível da cinemática inversa. Ele abrange o jargão da IK, o uso / aplicações da IK e as descrições de alto nível da cinemática direta e da cinemática inversa.

Quais são os usos do IK?

O IK pode ser usado para um braço humanóide alcançar um objeto / alvo, como vimos. O IK também pode ser usado para pisar nos pés, de modo que dizemos ao pé onde pisar e o IK descobre como configurar as articulações das pernas. O IK geralmente não é usado como uma animação em si (alcançando um objeto), mas mais como uma ferramenta de animação. Portanto, se você estiver implementando um ciclo de caminhada, poderá posicionar alguns dos quadros principais usando a ferramenta IK.

Outro ponto importante sobre a IK é que seu objetivo / objetivo não se limita apenas à posição - seu objetivo pode ser definido como uma rotação. Por exemplo, se seus pés precisarem girar com base em terrenos irregulares, sua meta de rotação IK poderá ser definida com base no normal do piso. Dessa forma, seus pés estão inclinados ao longo do chão, como quando você está subindo uma inclinação. Observe que você também pode usar IK para fazer com que sua cabeça (ou até olhos) olhe em uma determinada direção. Se você deseja que sua cabeça siga um objeto, use IK para que ela siga o objeto.

Como faço para implementar limites conjuntos?

Eu geralmente implemento limites comuns com uma simples declaração if. Por exemplo, isso funcionaria para juntas de revolução.

if (limb.rotation >  45.0f) limb.rotation =  45.0f;
if (limb.rotation < -45.0f) limb.rotation = -45.0f;

É muito menos matemático que o jacobiano e extremamente fácil de implementar depois que o jacobiano está funcionando.

Luis B
fonte