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.
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.
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.
fonte
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çãoapply
faz? Bem, eu tenho que ir ao arquivo do cabeçalho para qualquer classebase_to_body
, mas isso é uma articulação ou um corpo? Além disso, coisas comomodel.base[j].inverse().apply(model.S[j])
também não são especialmente claras.