ThundeRatz / travesim

Gazebo simulation environment for IEEE Very Small Size Soccer robots
MIT License
29 stars 0 forks source link

Atualização do modelo do robô #27

Closed lucastrschneider closed 3 years ago

lucastrschneider commented 3 years ago

Boa tarde galera,

Continuando o processo de otimização que fiz no campo, passei agora para o modelo do robô, que foi o que deu mais trabalinho. Essa otimização tinha como objetivo melhorar o comportamento descrito em #21.

Sobre a questão discutida na issue desse comportamento "estranho" ser um bug ou não, eu concordo com o @FelipeGdM de que, em parte, se deve ao derrapamento quando submetido a uma aceleração muito alta e à posição de equilíbrio instável durante a rotação. Porém, não estava convencido de que era só isso, e acredito que os resultados que obti refletem isso também.

Indo direto ao ponto, as principais mudanças começaram no urdf, em que removi todas as meshes, exceto da base, e substitui por primitivas (isso tinha sido começado, mas ainda faltava algumas coisas, principalmente as rodas). Além disso, removi todas as colisões dos links que são puramente visuais, como a lateral do uniforme e o chapéu. Elas não servem para absolutamente nada e só deixam o trabalho da engine física mais pesado.

Em termos de modelagem, a parte que realmente sofreu mudanças significativas foi a mesh da base, que foi dividida em 2, uma para colisão e uma para visual.

Para comparação, anterioramente essa era a mesh da base. ~tinha até o furinho do eixo ahsuhasu~

image image

Para melhorar o wireframe, apaguei tudo e deixei só o contorno da face inferior para refazer a topologia a partir dele.

image

Depois só extrudei as faces para montar o bloco e ficou bem mais clean.

image image

Porém, essa mesh ainda é relativamente complicada, então deixei essa apenas para visual e fiz uma outra para colisão. É recomendado que exista apenas uma colisão, então eu fiz ela um pouquinho maior englobando a parte do uniforme também. ela ficou assim.

image image

Uma observação relevante aqui é que não tem problema essa mesh de colisão englobar as rodas, pois a engine física não calcula colisões entre dois links ligados por um joint, o que é o nosso caso. Acredito que esse é o melhor jeito de fazer o modelo, deixar só um grande bloco de colisão no base_link, e o resto ser apenas visual mesmo.

Resultados

Vou tentar mostrar aqui os mesmos testes que tinha feito na issue original, para vocês verem a diferença.

Primeiramente, apenas velocidade angular.

angular_fixed_2

O robô começa na posição de equilíbrio instável, e logo que inicía o movimento, ele apoia em um dos lados, da mesma forma que antes. Porém, agora ele não fica mais balançando de uma lado para o outro, afinal, a posição que ele acabou de adquirir é um equilíbrio estável. Acho que realmente não tinha motivo para ele ficar balançando que nem uma gangorra, já que nenhuma força empurra ele para o outro lado, então acredito que isso tenha sido corrigido.

Em relação a parte linear do movimento, ele não faz mais os zigzagues estranhos de antes, e consegue seguir uma linha reta quase perfeita.

linear_fixed_1

Mas como vocês podem ver abaixo, a derrapagem ainda realmente acontece quando colocamos uma aceleração muito grande, o que faz sentido e realmente deveria acontecer.

linear_fixed_2


Bom, acredito que era isso que tinha para falar. A maioria dos problemas estavam ocorrendo, na minha opinião, devido a modelos excessivamente complicados. Agora quero ver como fica o desempenho do robô otimizado com a pista otimizada, pois até agora só testei essas coisas separadamente.

Sobre a ideia de limitar mais o torque máximo das joints das rodas, como foi discutido em reunião, eu realmente nem cheguei a tentar pois fiquei satisfeito com os resultados atuais. Acredito que cada time deve ser responsável por limitar e evitar o escorregamento, e não que o nosso modelo não deixe isso acontecer. Afinal, na vida real se você mandar um comando que resultate em uma aceleração muito grande, ele também derraparia.

No mais, fica o lembrete de que CAD é ótimo para projetar e fabricar depois, e os softwares que exportam de CAD para urdf ou sdf são ótimos para calcular a parte de inércia e tals. Porém, na maior parte das vezes, as meshes ficam execessivamente complicadas, então é sempre bom dar uma limpada com algum software de modelagem mesmo, ou até refazer um modelo mais simples.

Closes #21

lucastrschneider commented 3 years ago

Um update sobre o self collide da collision do base link e da collision das rodas que o @LucasHaug me perguntou.

A gente pode configurar isso certinho usando as tags de self collide ou um collision bitmask, porém, como eu disse, não importa para links que estejam conectados por um joint.

image

LucasHaug commented 3 years ago

Só queria dizer que testei aqui no meu pc comparando a develop com essa branch e nossa tá andando lisinho nessa branch, sensacional!

FelipeGdM commented 3 years ago

Achei altamente daora a mudança, sério, parabéns aos envolvidos

Antes de dar merge, acho que vale a pena tirar essas linhas de código comentadas que ficaram espalhadas pelo modelo, deixei as sugestões de commit no Github, mas talvez seja interessante fazer isso no vscode pra tirar a linha inteira efetivamente

No mais, show de bola o trabalho!

lucastrschneider commented 3 years ago

Antes de dar merge, acho que vale a pena tirar essas linhas de código comentadas que ficaram espalhadas pelo modelo, deixei as sugestões de commit no Github, mas talvez seja interessante fazer isso no vscode pra tirar a linha inteira efetivamente

Justíssimo, ficou ai dos testes e esqueci dps, ja vou tirar