Adicionando um atuador ou força a um modelo de corpo rígido articulado (Featherstone)

9

Estou trabalhando em um projeto no qual preciso modelar um sistema que é essencialmente composto por uma série de juntas de esfera e soquete conectadas a uma base, que é conectada por sua vez a uma junta prismática (trilho).

Eu li os algoritmos de dinâmica de corpo rígido de Roy Featherstone, capa a capa, e também li a seção Dinâmica do Springer Handbook of Robotics (também escrito por Featherstone).

Levei muito tempo para me acostumar a usar sua notação "vetor espacial" e "matriz espacial", mas depois de recriar toda a notação manualmente, como um exercício, isso resultou em apenas uma boa maneira de concatenar 3x3 e Matrizes e vetores 3x1 em matrizes e vetores 6x6 e 6x1. A matemática que ele inventa para executar operações pode ser um pouco entediante de ler, pois ele sequestra alguma notação padrão, mas no geral tudo é muito compacto, muito fácil de implementar no MATLAB.

Meu problema é o seguinte: como adiciono atuadores ao modelo? Ele anda a configurar explicitamente as definições conjuntas, definições de ligação, etc., mas quando se trata de atuadores ou forças aplicadas ele diz algo como: "Basta adicionar um aqui e de Bob seu tio!" - não é discutido. No Handbook of Robotics, ele sugere a introdução de uma aceleração falsa na base fixa para adicionar o termo força gravitacional, mas não mostra como adicioná-lo nas coordenadas locais, nem menciona como adicionar a entrada do atuador.τa

Qualquer ajuda seria muito apreciada. Eu considerei começar de novo com um livro diferente, mas vai ser uma grande despesa do meu tempo me acostumar a um conjunto diferente de notação. Gostaria de avançar com isso, mas sinto que estou a poucos centímetros da linha de chegada.

Chuck
fonte

Respostas:

3

Forças dos atuadores

Eu entendi direito: você tem um modelo teórico de um sistema rígido de múltiplos corpos e gostaria de executar cálculos de dinâmica de corpo rígido. Você implementou o modelo e agora gostaria de calcular como o modelo se comporta quando acionado por um atuador.

No entanto, o que é um atuador para você? É simplesmente uma força agindo nessa articulação? É um modelo de motor DC? É um controlador PID?

qq˙q¨τqiτiqjτj

ττ

τaτa

Aceleração gravitacional:

Featherstone aplica a aceleração gravitacional na base e permite que ela se propague pelos algoritmos através da árvore. Isso é feito no RNEA, Tabela 5.1 na linha

a0=ag

Em vez de fazer isso, você também pode modificar a linha

fiB=Iiai+vi×Iivi

para

fiB=Ii(aiiX0ag)+vi×Iivi

aplicar os efeitos gravitacionais individualmente em cada corpo. Isso introduz cálculos adicionais e não vejo nenhum benefício em fazê-lo.

Álgebra espacial vs. concatenação de vetores 3D

Álgebra espacial não é apenas concatenação de vetores 3D. O primeiro expressa movimentos rígidos do corpo em um quadro de coordenadas fixo, enquanto o segundo é expresso em pontos que se movem com o corpo. Como resultado, as acelerações espaciais são as derivadas temporais das velocidades espaciais. Na notação clássica usando duas equações 3D, esse não é o caso (Seção 2.11 do livro de Featherstone):

ω

A velocidade espacial descreve a velocidade linear e angular do ponto do corpo que atualmente coincide com a origem do quadro de referência (fixo). Se esse quadro é expresso no centro de massa e orientado com o quadro de referência global, parece ser uma concatenação simples da velocidade linear e angular 3D, mas esse é apenas o caso dessa escolha específica do quadro de referência. Expressado em um quadro diferente, você obtém valores diferentes, mas ainda representa a mesma velocidade espacial.

A aceleração espacial descreve o fluxo da velocidade linear e angular do ponto que coincide com a origem. "Fluxo" aqui significa como as quantidades vetoriais (velocidade linear e angular) mudam ao longo do tempo.

Martin Felis
fonte
Eu tenho trabalhado duro para implementar esse algoritmo, mas tentei ser o mais metódico possível, garantindo que mesmo os aspectos mais básicos funcionem exatamente como o esperado sempre. Para esse fim, configurei uma série de experimentos em que posso calcular a solução exata para comparar a solução simulada.
Chuck
O último aspecto em que trabalho foi a articulação esférica - obter a representação e as acelerações do quaternion. Para este experimento, estou tentando simular um pêndulo de Foucault modelando a Terra e colocando um pêndulo com uma junta esférica na superfície. Ao fazer isso, minha base fixa é o centro da Terra, sobre o qual a Terra gira. Então, do centro rotativo da Terra, eu posso girar para cima / baixo para qualquer latitude, traduzir para a superfície, onde coloco meu pêndulo articular esférico.
Chuck
Eu precisava de uma maneira de adicionar gravidade, porque não podia simplesmente colocá-lo no eixo z da minha base fixa; isso faria com que a gravidade funcionasse corretamente apenas no Polo Norte. Essencialmente, não me importo com forças abaixo da superfície da Terra, apenas me preocupo com a precessão do pêndulo.
Chuck
Fiz uma pergunta relacionada sobre como lidar com juntas fixas.
Chuck
2

Se você não encontrou a RBDL (Biblioteca Dinâmica do Corpo Rígido), consulte como eles a implementam e / ou entre em contato com o autor Martin Felis.

Barrett Ames
fonte
Barrett, encontrei o RBDL há algumas semanas e, embora eu tenha ido e voltado algumas vezes tentando coletar informações, ele é escrito em C ++ com métodos que dificultam o acompanhamento do código. Por exemplo, há uma linha no código de cinemática que lê G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));. Então, o que a função applyfaz? Bem, eu tenho que ir ao arquivo do cabeçalho para qualquer classe base_to_body, mas isso é uma articulação ou um corpo? Além disso, coisas como model.base[j].inverse().apply(model.S[j])também não são especialmente claras.
Chuck
O que não significa que às vezes não tenha sido útil, mas para mim, a compreensão do RBDL exige muito esforço.
Chuck
Bem-vindo à robótica Barrett Ames, obrigado pela sua resposta, mas preferimos que as respostas sejam independentes sempre que possível. Os links tendem a apodrecer, de modo que as respostas que dependem de um link podem se tornar inúteis se o link ao conteúdo apodrecer. Se você adicionar mais contexto a partir do link, é mais provável que as pessoas considerem sua resposta útil.
Mark Booth