Robô nunca vai direto

19

Estou usando 2 motores DC idênticos e uma roda de rodízio. Os motores são conectados ao driver do motor L293D e são controlados pelo RPi .

O robô não está indo direto. Ele vira para a direita. Estou executando os dois motores a 100% PWM .

O que eu tentei corrigir o erro:

  1. Eu ajustei o PWM da roda indo mais rápido para 99% , mas o robô apenas vira para o outro lado;
  2. Ajustei o peso no robô e o problema ainda persiste.

Uma vez tentei rodar o motor sem carga. É essa a causa disso, como me disseram mais tarde, operar um motor de corrente contínua sem carga os danifica?

Se essa não for a causa, diga-me como resolver esse problema sem usar nenhum sensor para controlá-lo.

Rato
fonte
Em uma configuração de unidade diferencial que imagino é o que você usa, é muito provável que isso aconteça. Uma pequena diferença entre os dois motores fará com que o robô gire.
Demetris 26/01
4
Bem-vindo ao controle de loop aberto. Você precisa de sensores próprios (seus olhos) para detectar o problema, como acha que o robô poderá detectá-lo sem sensores adicionais? Fechar o circuito de controle com sensores é o caminho a percorrer.
Unidade de flexão 22
1
Motores de passo podem funcionar se você quiser evitar sensores.
@bdares - Se não há sensores, como o robô sabe quando corrigir o curso? Se uma roda atinge uma área de baixa fricção (poeira, por exemplo) e escorrega, o robô gira e nunca corrige.
Chuck
Quando você diz que não há sensores, isso pode significar que não há detecção externa ou também está excluindo codificadores nas rodas? porque essa é a solução típica para esse problema.
JamesRyan

Respostas:

29

Estou postando isso como uma resposta, porque é a resposta.

Você não pode.

Como o @ BendingUnit22 menciona, você está tentando o controle "loop aberto". Ruído e variações significarão que seu robô nunca conduzirá uma linha perfeitamente reta.

Os motores podem ter diferentes resistências de enrolamento (diferentes correntes de tração / torque), as rodas podem ter tamanhos diferentes, as rodas podem ter características de tração diferentes, o rolamento do rodízio pode ser "rígido", o rodízio pode não estar perfeitamente reto quando o veículo arranca , o piso pode ter características variáveis ​​de atrito da superfície (leia-se: poeira ou carpete) - a lista continua.

A única maneira de explicar as coisas fora do seu controle (o que eu mencionei acima e mais) é usar sensores de feedback.

Você pode tentar obter um melhor desempenho de loop aberto corrigindo os problemas listados, mas existem ainda mais e simplesmente não pode controlar tudo.

Chuck
fonte
5
Exatamente! A questão está na declaração "Estou usando 2 motores DC idênticos". Eles nunca são perfeitamente idênticos e, como o @Chuck menciona, há várias outras considerações. A única coisa certa na robótica é que erros e ruídos surgirão.
precisa saber é o seguinte
2
Usar duas rodas no mesmo eixo ainda deve produzir resultados muito melhores do que usar duas do mesmo motor, não deveria?
John Dvorak
@ JanDvorak - Não sei bem o que você quer dizer quando diz "Duas rodas no mesmo eixo", mas acredito que seja entendido / implícito que as duas rodas estão no mesmo eixo geométrico. Se você quer dizer o mesmo eixo de controle (como em um motor) ou eixo (implicando novamente em um motor), gostaria de salientar que não é possível executar a direção diferencial com um eixo travado. Para um motor controlar as duas rodas em velocidades diferentes, é necessário um diferencial (e outros equipamentos), e o diferencial efetivamente quebra o eixo em duas partes e você volta à estaca zero.
Chuck
Eu quis dizer um eixo, desculpe. Eu não sabia que havia um requisito para poder ir direto?
John Dvorak
2
@JanDvorak - acredito que o robô da OP é um veículo no estilo micromouse. Mesmo que tivesse que seguir em frente e usar um eixo, todas as outras fontes de erro ainda se aplicam. Se uma roda tiver um diâmetro 0,1% maior que a outra, ela percorrerá um comprimento de caminho 0,1% mais longo que o pneu menor por rotação . Digamos, por exemplo, o tamanho nominal da roda é 10 cm e o espaçamento da roda é 10 cm. O pneu maior mede 10,01 cm e percorre 0,0314 cm a mais por rotação . Para a base da roda, o robô gira 0,12 graus por rotação da roda . 0,01 cm pode ser facilmente do pó de um pneu.
Chuck
6

Como a questão do circuito aberto-fechado já foi mencionada, farei um comentário ao "uma vez tentei rodar um motor CC sem carga".
Sim, você pode danificar seu motor com isso, mas também pode danificar ou destruir seu motor com uma carga. A destruição é proveniente da corrente e da temperatura resultante. Se não houver fumaça e algum cheiro óbvio proveniente do motor, provavelmente não será danificado. Pela minha experiência, posso dizer que os motores CC em escala de hobby começarão a se degradar a temperaturas acima de 100 ° C. E você definitivamente notará essas temperaturas

Edição:
Eu pensei sobre isso novamente e eu poderia ter uma idéia que seu colega poderia estar falando. Há um tipo especial de motor CA. Estes são motores síncronos não excitados. Basicamente, eles são construídos para a auto-destruição. Se você ligá-los, eles começarão a acelerar até se desmontarem. Mas se você colocar uma carga pesada sobre eles, eles não poderão atingir esse estado, apenas por causa do grande momento em que precisam se aplicar à carga. Então você pode usá-los para fins razoáveis. De qualquer forma, você definitivamente não possui um motor como esse em seu aplicativo.

TobiasK
fonte
1
Eu também acho que, especialmente com motores de hobby, quando você aquece o suficiente para notar que está quente ou cheira engraçado, você provavelmente já queimou o isolamento dos enrolamentos. Como muitos equipamentos elétricos, ele funciona bem ou está quebrado. Não há muitos casos intermediários.
Chuck
Não havia fumaça ou danos visíveis. Então, talvez não esteja danificado, pois eu o executei por menos de meio minuto.
Mouse
2

O que você está descrevendo é chamado controle de malha aberta, e para fazer isso, você precisa de dois motores exatamente iguais, duas rodas exatamente iguais, o centro de gravidade do robô para estar no centro entre as rodas, um circuito elétrico simétrico perfeito, e, finalmente, uma superfície nivelada uniforme perfeita para rodar.

Para fazer isso, você normalmente pede dezenas ou centenas de cada peça e, em seguida, realiza testes significativos para encontrar dois motores que são os mais próximos entre si em termos de potência e velocidade versus tensão e PWM. Faça o mesmo com as rodas, os controladores do motor e outras peças.

Esse processo é chamado de binning - após esses testes, você os classifica de acordo com suas capacidades ou características. Considera-se muito mais caro, tanto em termos de tempo quanto em recursos, do que mudar para um modelo de circuito fechado, e nem conta com más condições do solo.

É, no entanto, uma maneira de atingir seus requisitos sem sensores adicionais.

Adam Davis
fonte
1

Embora nunca seja perfeito, pode haver uma maneira simples de fazê-lo seguir em frente.

Se de 100% a 100% o carro sempre vira à esquerda e de 100% a 99% o carro sempre vira à direita, você poderá melhorar isso tentando valores entre eles.

Comece com 100% -99,5% e continue com 100% -99,75% ou 100% -99,25%, dependendo do resultado. Isso deve convergir em breve para uma situação em que você irá direto "em média".

Dennis
fonte
0

Bem, se o problema não está nas diferenças de hardware nem software para cada roda, provavelmente é um problema com imperfeições naturais, tanto na maneira como você construiu o robô quanto na maneira como os motores foram produzidos. As conexões podem não ser sólidas ou o RPI pode não estar emitindo a mesma corrente. Você provavelmente deseja usar controladores de velocidade. Tente isso primeiro.

Se isso não funcionar, o fabricante provavelmente não fabricou motores idênticos e provavelmente será necessário calibrá-los. Pode significar escalar o valor do motor mais forte para que 100% da potência do motor forte corresponda ao fraco.

meia batata
fonte
2
O uso de controladores de motor idênticos não resolverá o problema em questão. A questão está no centro da robótica, que é "como faço para corrigir o erro?"
Ryan Loggerythm
Ouvi dizer que os motores DC podem rodar um pouco mais devagar para a frente e para a frente. Além disso, qualquer desequilíbrio no peso pode causar uma mudança de lado. Sem mencionar outras coisas, como atrito, etc. Fazer algo "idêntico" não funcionará. Os steppers podem se sair um pouco melhor, mas você não deve dirigir rápido demais ou algo assim ... #
Paul
-2

Rodas com motores dc devem b na frente. E roda coster atrás. Em seguida, ele se moverá direto apenas na direção para a frente

Arslan
fonte
Bem-vindo à Robotics Arslan. No Stack Exchange, procuramos respostas abrangentes que forneçam alguma explicação e contexto. Respostas muito curtas não podem fazer isso; portanto, edite sua resposta para explicar por que ela está certa, idealmente com citações. As respostas que não incluem explicações podem ser removidas.
Mark Booth