ThundeRatz / travesim

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

Instabilidade no modelo do robô genérico #21

Closed lucastrschneider closed 3 years ago

lucastrschneider commented 3 years ago

Não sei exatamente se isso é um bug mesmo, mas só pra deixar aqui, eu fui testar algumas coisinhas usando o rqt_steering_topic, e percebi que tem uns omportamentos estranhos as vezes.

A primeira coisa foi esse balanço quando eu colocava só uma velocidade angular.

angular_bug

Ele fica balançando pra frente e pra tras, e fica travando as vezes.

Outra coisa que aconteceu bastante foi dele ficar bastante descontrolado e não consegui seguir nem de perto uma linha reta quando eu colocava uma velocidade linear.

linear_bug_1

linear_bug_2

Não sei, pra mim parece que é um problema no modelo que ta causando esses comportamentos, mas posso estar errado. Vocês perceberam algo assim também? Aqui acontece quase sempre algo do tipo.

O mais estranho é que não lembro desse tipo de coisa acontecer tão frequentemente quando a gente usava o nosso modelo mesmo, por isso acredito que esse seja o problema, mas não tenho certeza.

thor-gh[bot] commented 3 years ago

Hi! Thank you for opening an issue for this project! \ Please, make sure you followed the project's contribution guidelines, a team member will answer when possible!

--

Olá! Obrigado por abrir uma isse para esse projeto! \ Por favor, tenha certeza que leu as diretrizes de contribuição do projeto, alguém da equipe responderá assim que possível!

FelipeGdM commented 3 years ago

Salve salve amantes do mundo da bola

Filosoficamente falando, eu não caracterizaria nenhum dos dois comportamentos como bug. Se você parar pra analisar a física envolvida, os dois comportamentos são coerentes

A começar:

A primeira coisa foi esse balanço quando eu colocava só uma velocidade angular.

Quando o robô gira com velocidade angular constante, a única posição de equilíbrio seria com o robô perfeitamente de pé, uma vez que o robô é perfeitamente simétrico e o centro de massa se encontra exatamente no eixo médio do robô. No entanto, é importante notar que essa posição de equilíbrio é uma posição de equilíbrio instável, de modo que o robô não converge pra nenhuma posição preferencial

Em segundo

Outra coisa que aconteceu bastante foi dele ficar bastante descontrolado e não consegui seguir nem de perto uma linha reta quando eu colocava uma velocidade linear.

"Descontrolado" eu achei que você pegou pesado hahahaha. Pelo gif que você mostrou aí, tenho um bom palpite de qual pode ser a causa desse problema. Acredito que no momento em que o robô acelera, temos derrapamento das rodas, de modo que o robô acaba girando ao invés de ir reto. No momento em que a aceleração do robô diminui, as rodas param de deslizar e o robô volta a andar em linha reta, da forma que acontece no seu gif.

Para explicar direitinho, vou fazer uso do diagrama de corpo livre do robô

image

Supondo que a roda do robô não derrapa, temos que

image

Se o roda derrapa, a segunda equação deixa de valer e não podemos mais calcular a aceleração do robô em função do torque do motor. Agora, como calcular o valor da força de atrito?

image

A força máxima de atrito é proporcional à normal da roda com o chão. Se o robô acelera para a esquerda (essa imagem está invertida em relação às outras, vacilei >.<), a força normal do robô é dividida entre o ponto de contato da roda e do corpo do robô. Dessa forma, quanto maior a aceleração do robô, menor a normal no ponto de contato e portanto menor a força máximo de atrito.

Deu pra pegar a ideia?

Sobre isso

O mais estranho é que não lembro desse tipo de coisa acontecer tão frequentemente quando a gente usava o nosso modelo mesmo, por isso acredito que esse seja o problema, mas não tenho certeza.

Sobre o primeiro problema, o nosso robô era assimétrico, né? Não temos o mesmo padrão de equilíbrio instável pois o centro de massa do robô não está mais no eixo médio do robô

Sobre o segundo problema, nós mudamos completamente a relação de torque-velocidade no novo modelo, de modo que é esperado que o comportamento seja diferente.

Em todo caso, quando estiver desconfiado do comportamento físico da simulação, minha sugestão é diminuir o max step size, de modo que o Gazebo dê passos menores no tempo e diminua o erro de aproximação numérica (é importante não diminuir indefinidamente, pois esbarramos num aumento da complexidade da simulação e do erro de truncamento). Pra simulação não ficar mais lenta, você pode aumentar o real time update rate de acordo com a variação do max step size. A simulação ficará mais pesada, mas a velocidade dela permanecerá a mesma.

No mais, confesso que fico curioso de saber como o FiraSim performa nas mesmas condições que você descreveu aqui

Fiquem bem e mantenham-se hidratados