Mini-robô com Arduino. |
Quer montar seu próprio robô? Você pode!!
Neste post vou descrever como você pode montar o robô ao lado, mostrando onde comprar as peças e dando dicas para sua montagem.
A montagem não é complicada! Você não precisa ser um expert em eletrônica para montar este robô, mas precisa ter noções básicas (para poder ligar os cabos corretamente), além de fazer soldagem de componentes e fios.
Se você quer montar um robô sem precisar fazer soldas nem se preocupar com a eletrônica, experimente o Lego NXT (veja aqui).
O vídeo abaixo mostra um resumo da montagem e testes do mini-robô com Arduino:
Por onde começar?
Em primeiro lugar, você deve definir o que seu robô vai fazer e em que ambiente ele vai se deslocar. Isso é essencial para a escolha das peças e estrutura corretas. Por exemplo, a estrutura de um robô que irá se deslocar em piso liso e limpo será muito diferente daquela de um robô capaz de se locomover em ambientes externos com piso de areia.
Uma opção bem econômica é aproveitar aquele velho carro de controle-remoto que você não usa mais (ou roubar o do seu irmão). Nesse caso, você pode aproveitar a estrutura mecânica e os motores. Retire toda a eletrônica original (com cuidado, para que você consiga montar novamente caso seu irmão descubra), e substitua pelas placas que vou descrever a seguir.
Eu montei o meu com as peças mostradas abaixo.
Peças usadas na montagem do robô. A lista completa e locais de compra encontra-se no final deste post. |
No fim deste post há uma lista detalhada com a quantidade de peças necessárias e seus sites para compra.
Se você quiser montar um robô diferente, pode usar qualquer um dos diversos kits disponíveis no mercado. Veja alguns exemplos em:
Robô com Esteiras
Um robô a esteiras é melhor do que um robô a rodas para se deslocar em ambientes acidentados. Ele pode passar por cima de obstáculos maiores que robôs com rodas, o que é interessante! No entanto, robôs com esteira exigem mais energia durante seu deslocamento, o que significa que eles gastam mais bateria que os robôs a rodas.
A estrutura mecânica deste robô torna desnecessário o uso de rodas direcionais. Para fazer curvas, basta que uma esteira se movimente mais rápido que a outra. Se uma se mover num sentido e a outra se mover no sentido contrário com a mesma velocidade, o robô fará um giro em torno de seu centro. Isso resulta em boa mobilidade e facilita o controle.
Dicas de Montagem - Vamos ao que interessa!
Base
A base tem dimensões de 98 x 86 x 39 mm. É feita de plástico, tem suporte para 4 pilhas AA, para os dois motores e para as rodas. As quatro rodas e as duas esteiras de borracha acompanham o conjunto.
A base vem quase pronta, mas alguma montagem é necessária. Você vai precisar encaixar os contatos metálicos para as pilhas. Os contatos das extremidades não têm local fixo de encaixe, então você pode colá-los com um pouco de Super Bonder ou prender com uma fita dupla-face. Eu usei fita isolante mesmo. É uma boa ideia soldar os fios aos contatos das pilhas antes de prendê-los à base! Lembre-se de usar fios de cores diferentes para os terminais positivo e negativo das pilhas, pois isso ajuda a evitar ligações incorretas que podem resultar em queima dos circuitos.
Motores
Os motores que usei são micro-motores de 6V que já vêm com uma caixa de redução de 100:1. Ou seja, a cada 100 voltas no eixo do motor, a roda dará apenas uma volta. Isso significa que a roda gira numa velocidade muito menor que o eixo do motor. Porque queremos isso? Simples: com a caixa de redução, o torque disponível na roda aumenta na mesma proporção da redução da velocidade. Ou seja, o robô fica mais lento, mas muito mais forte!
No site da Pololu você encontra outros motores que se encaixam na base. Eles têm o mesmo tamanho e mesma tensão, mas relação de redução é diferente. Com isso, se você quiser um robô mais rápido (e menos forte), pode usar um motor com redução menor (50:1, por exemplo).
Atenção! As rodas dos motores são diferentes! Elas tê um pequeno rasgo na lateral e o encaixe do eixo não é perfeitamente redondo: possui um chanfro para encaixar o eixo do motor. Depois de encaixar os motores nas rodas, você pode usar a própria roda como base para soldar os fios nos terminais dos motores. De novo, lembre-se de usar cores diferentes para os terminais positivo e negativo.
Após encaixar os motores e soldar os terminais, encaixe os motores na base.
Sensores de giro (opcional)
Se você quiser, pode instalar codificadores ópticos (encoders) para medir o giro das rodas de seu robô. Essa característica é interessante se você pensa em aplicar controladores mais complexos em seu robô, pois os encoders permitem medir a velocidade das rodas e estimar a posição relativa do robô. Se não quiser usar encoders, seu robô também vai funcionar!
Os encoders que eu usei são próprios para as rodas que vêm com a base. Por isso, basta cortar um pouco o plástico superior da base e parafusar os encoders como mostrado na foto ao lado. Sim, o furo da placa se alinha perfeitamente ao furo da base!
O funcionamento do encoder (de forma resumida) é o seguinte: LEDs da placa emitem luz infravermelha que é refletida pelos dentes existentes na parte interna da roda. Com o giro da roda, os dentes se movem e a reflexão ocorre de maneira alternada. A partir da detecção ou não do reflexo de luz, um trem de pulsos elétricos é gerado. Contando o número de pulsos é possível saber quantos graus a roda girou. Conhecendo a geometria do robô, pode-se determinar sua velocidade e seu deslocamento.
Detalhe: para saber se a roda está girando no sentido horário ou anti-horário, cada placa tem dois emissores e dois receptores. Eles são montados de forma que o giro da roda em dado sentido provoca reflexão em um dos sensores primeiro.
Os sensores da Pololu são muito bons. Eles podem ser alimentados diretamente pelo Arduino e seus sinais de saída também são conectados diretamente aos pinos do Arduino. No entanto, verifiquei que os encoders sofrem muita interferência de iluminação externa, o que pode exigir algum ajuste ou colocação de algum tipo de cobertura.
Motor Shield para Arduino
O uso do Arduino como placa controladora permite a utilização de um shield para controle dos motores. Eu usei o Arduino Uno, mas você também pode usar outras versões, como o Leonardo ou o Duemilanove.
Motor Shield encaixado no Arduino. |
O shield que utilizei está mostrado na figura ao lado, já encaixado no Arduino Uno. Ele tem um chip com duas pontes-H com capacidade para controlar dois motores de corrente contínua de maneira independente. Recebe alimentação entre 6 e 15V e inclui um regulador de 5V para alimentar o Arduino, o que é muito interessante já que as 4 pilhas (alcalinas) resultam numa fonte de 6V.
A ligação dos motores ao motor shield é bem simples: basta parafusar seus fios ao conector verde com as indicações M1+, M1- (motor 1) e M2+, M2- (motor 2). Os terminais da bateria devem ser ligados ao conector com as indicações VS (positivo) e GND (negativo). O jumper J4 deve permanecer encaixado para que a alimentação do Arduino seja feita através do regulador do motor shield. Encaixe o motor shield no Arduino de maneira que as bordas das placas fiquem alinhadas.
Um código para teste do shield e acionamento dos motores está disponível na página do fabricante (veja link no final do post). A velocidade dos motores é controlada pela variação da razão cíclica do sinal PWM gerado pelo Arduino. No exemplo do fabricante, ele usa a função analogWrite para gerar o PWM, o que resulta num sinal com frequência de ~490Hz. Nos testes que realizei, os motores funcionaram sem nenhum problema com esse PWM, mas emitiram ruído audível que pode incomodar um pouco.
Detalhe importante: para que o robô se desloque em linha reta é necessário que as duas esteiras girem na mesma velocidade. No seu programa, você pode usar o mesmo valor na função analogWrite de ambos os motores, mas isso não garante que as rodas irão girar na mesma velocidade! Apesar de serem do mesmo tipo, dois motores nunca são exatamente iguais. Além disso, características como atrito, deslizamento e até diâmetro das rodas irão afetar a velocidade final de deslocamento. Com o uso de encoders você pode fazer um programa que mede a velocidade das rodas e realiza a compensação necessária, caso queira que o robô se mova em linha reta.
Com a base montada, motores encaixados e eletrônica pronta, seu robô já está pronto para andar!
Sensor ultrassônico
Módulos ultrassônicos. |
Um robô só é um robô de verdade quando ele pode perceber o meio. Um sensor muito popular que permite a medição de distância a obstáculos é o sensor ultrassônico. A figura ao lado apresenta dois módulos de sensores ultrassônicos (um é visto de frente e o outro é visto de costas). Segundo o fabricante, esse módulo é capaz de medir distância a obstáculos entre 3cm e 4 metros!
O módulo ultrassônico funciona como um Sonar. Para medir a distância ao objeto que está a sua frente, o módulo emite um pulso de ultrassom (som em frequência de 40kHz, nesse caso) e mede o tempo que o reflexo do som leva para retornar. Sabendo que a velocidade do som no ar (à temperatura ambiente) é de ~340m/s, conhecendo o tempo que o som levou para ir até o obstáculo e voltar você pode calcular a que distância ele está!
O Arduino possui um exemplo de programa que funciona exatamente com esse modelo de sensor. Você pode encontrá-lo em Exemples -> 06. Sensors -> Ping. Usei este exemplo para testar o módulo ultrassônico como mostrado no vídeo. Pude observar que esse módulo tem precisão de +/-1cm para leituras entre 3 e 30cm. Também notei que o ângulo de abertura do sensor não é muito grande: para distâncias menores que 20cm, o obstáculo deve estar praticamente em frente ao sensor para que possa ser detectado. A 20cm do sensor, um afastamento de 5cm do centro de sua linha de ação já faz com que o obstáculo não seja percebido.
Robô montado
Provisoriamente, encaixei os sensores de ultrassom numa pequena matriz de contatos apoiada na parte superior do robô. Um sensor está voltado para para a frente e o outro para trás, já que esse robô pode se deslocar nos dois sentidos.
Robô montado. |
Espero que tenha gostado do post e que ele lhe ajude a montar o seu próprio robô!
A seguir, veja a listagem de peças utilizadas, seu modelo, a quantidade necessária e sites para compra.
Até a próxima!
Quantidade de peças e locais de compra e preços:
http://www.labdegaragem.org/loja/index.php/29-arduino/arduino-uno.html
http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=120
1 - Zumo Chassis Kit (contém uma base com local para pilhas, 4 rodas Pololu Wheel 42x19mm e 2 esteiras)
http://www.pololu.com/catalog/product/1418
2 - 100:1 Micro Metal Gearmotor HP with Extended Motor Shaft (este micromotor encaixa na base acima)
http://www.pololu.com/catalog/product/2214
1 - Motor Shield (serve para acionar os dois motores)
http://www.seeedstudio.com/depot/motor-shield-p-913.html?cPath=132_134
http://www.seeedstudio.com/wiki/Motor_Shield
Opção para acionar até 4 motores CC:
http://www.labdegaragem.org/loja/index.php/36-motores-afins/4-power.html
2 - QTR-1A Reflectance Sensor (opcionais para fazer seguimento de linha)
http://www.pololu.com/catalog/product/958 ou
http://www.labdegaragem.org/loja/index.php/34-sensores/breakout-de-sensor-de-linha-qre1113-digital.html
2 - Encoder for Pololu Wheel 42x19mm (opcionais para medir velocidade das rodas e calcular a posição do robô)
http://www.pololu.com/catalog/product/1217
2 - Ultra Sonic range measurement module (para medir distância a obstáculos)
http://www.seeedstudio.com/depot/ultra-sonic-range-measurement-module-p-626.html?cPath=144_149
http://www.seeedstudio.com/wiki/index.php?title=Ultra_Sonic_range_measurement_module
Outra opção:
http://www.labdegaragem.org/loja/index.php/34-sensores/sensor-de-distancia-por-ultrassom-maxbotix-lv-ez1.html
1 - Basic Sumo Blade for Zumo Chassis (opcional interessante para robôs feitos para luta de Sumô)
http://www.pololu.com/catalog/product/1410
Boa Noite !
ResponderExcluirVc pode mostrar os códigos que utilizou ?
abs
Olá, Leonardo.
ExcluirEu só fiz uma alteração em um programa-exemplo para testar o funcionamento dos motores. Dá uma olhada no último link desta página, que traz um programa exemplo:
http://www.seeedstudio.com/wiki/Motor_Shield
Ainda não fiz nenhum programa para o robô em si. Assim que tiver, vou publicar aqui!
Abraços!
Este comentário foi removido pelo autor.
ResponderExcluirOlá,é preciso sensores de giro para o robô funcionar?
ResponderExcluirOlá, Gustavo.
ExcluirO robô pode funcionar muito bem sem os sensores de giro das rodas (encoders), mas você não vai conseguir saber a velocidade dele. Na verdade, vai precisar "acreditar" que o motor está mesmo girando quando você enviar um comando para isso. No entanto, se você usar os encoders, poderá ter informação de posição e de velocidade do seu robô, o que permite detectar, por exemplo, travamento das rodas.
quero monta umm mais nao sou muito bom que qui eu fasso
ResponderExcluirOlá, Ivanildo! Você pode começar comprando kits montados ou parcialmente montados. Veja alguns exemplos na loja do Laboratório de Garagem e no site HobbyKing:
Excluirhttp://www.labdegaragem.org/loja/index.php/37-robotica.html
http://www.hobbyking.com/hobbyking/store/__702__689__DIY_Electronics-Robotics.html
olá você consegue me indicar um programa para operar meu arduino? (ele é modelix mas não consigo utilizar o programa...) se possível me indique o site por favor...
ResponderExcluirdesde já agradeço
Olá, Henrique!
ExcluirVocê pode fazer o download gratuitamente no site oficial do Arduino:
http://arduino.cc/en/Main/Software
Para aprender um pouco sobre Arduino (e eletrônica), dê uma olhada nos slides que eu compartilhei aqui:
http://nossosrobos.blogspot.com.br/2011/10/introducao-eletronica-com-arduino.html
Qualquer dúvida, é só falar!
Olá Felipe, tudo certinho?
ResponderExcluirParabéns pelo tutorial, muito bom.
Você sabe me informar se um arduino mega 2560 ou adk podem ser colocados neste chassi ou são muito grandes?
E um robo desses tem condição de participar em competições como rubo sumo ou follow line, ou são muito lentos/fracos comparados com os de competições?
Forte abraço.
Olá! Fico feliz que tenha gostado do post!
ExcluirInfelizmente o chassi que eu usei é pequeno para o Arduino Mega ou ADK. Você até consegue usar o Mega com esse chassi, mas vai ficar sobrando um pedaço da placa para frente e/ou para trás do robô.
Quanto à participação em competições, acho que seria importante comparar o tamanho dos outros robôs que participam antes de decidir usar esse chassi. Pelo que testei, o robô é bastante forte pois tem esteiras e motores com redução 100:1. Mas, como é pequeno e leve, talvez seja empurrado por um robô maior e mais pesado. Já para seguir linhas, pode ser bem interessante, pois ele é bem ágil!
Espero que ajude.
Abraços e boa sorte nas competições!
Obrigado pela resposta Felipe!
ExcluirNo caso de uma competição como o seguidor de linha, acho que não importaria muito o robo ficar com uma parte da placa para fora... Mas este Chassi zumo é uma boa pedida para quem quer um modelo rápido? Muitos robôs seguidores de linha adotam a estratégia de fazer uma primeira volta de reconhecimento da arena e depois com tudo memorizado fazer uma volta muito mais rápida. Mas um Rover ou este zumo são robôs rápidos ou fortes (ou ambos rs) ?
Você teria alguma dica para um iniciante nas competições de robótica? (Focando na performance no caso do seguidor de linha e do sumo).
Obrigado desde já Felipe, abraços!
O que você chama de um "modelo rápido"? Construído rapidamente ou que seja rápido na prova?
ExcluirA velocidade de a força do robô dependem do modelo de motor que você usa. O mesmo motor é oferecido com redução que varia entre 5:1 e 1000:1. A menor redução (5:1) resulta em mais velocidade e menos força. A maior redução (1000:1) resulta em mais força e menos velocidade. Eu usei um motor de 100:1. Para você ter uma ideia da velocidade máxima do robô com esse motor, veja o vídeo do post. Basicamente, se você usar uma redução de 50:1 ele vai ter o dobro da velocidade (e metade da força). Você deve escolher a redução ao comprar o motor, pois ela vem acoplada (não dá pra alterar depois).
Não tenho nenhuma dica especial para um iniciante. Acho que a melhor coisa que você pode fazer é observar o que os outros já fizeram (vídeos no YouTube), praticar bastante e testar várias soluções em seu robô.
Boa sorte!
Vc poderia me enviar o codigo por email eu nao estou conseguindo colokar no codigo o sensor ultrasonico
ResponderExcluirOlá, Reginaldo. Não tenho um programa completo do robô, pois acabei não terminando. Nos testes do sensor ultrassônico eu usei o exemplo do próprio Arduino. Está disponível em File --> Examples --> 6.Sensors --> Ping. Veja esse exemplo e tente entender como funciona (veja a breve explicação que fiz no post).
ExcluirSobre os motores, veja o programa que está em:
http://www.seeedstudio.com/wiki/Motor_Shield
Abraços!
Olá, gostaria de saber se esse motor que você usou é capaz de mover uma roda de
ResponderExcluir15 cm de diâmetro? Caso não, qual motor dc você indicaria.
Desde de já agradeço pela atenção.
Sim, esse mesmo motor consegue acionar uma roda de 15cm, só que vai ficar com menos torque (força). Se você precisar de mais torque pode comprar o mesmo motor com uma redução ainda maior. Dá uma olhada no link do motor que está no post e veja que há motores com redução de até 1000:1.
ExcluirAbraços!
Boa noite Felipe,
ResponderExcluirTenho o Arduino algum tempo mas só agora me interessei por robótica. Estou lendo bastante seu blog (entre outros) e estou com algumas dúvidas.
Estou com o plano de construir um robo semelhante ao seu (A Base é a mesma), mas estou pensando nas formas de controle para ele.
Para começar estou pensando em usar um módulo bluetooth para poder controlar ele através do Android. Entretando fico restrito na distância.
Outra forma que pensei, foi usando módulo XBEE - Mas com isso fico preso a um computador funcionando como "base".
Gostaria de saber quais formas de controle você me indica (Não gostaria de deixar ele 100% autonomo - com o uso de sensores de distância, etc) Porém gostaria que ele me retornasse a distancia lida pelo sensor, etc.
Quais são as melhores formas de controle que você me indica.
Obrigado
Olá, Bruno. Seja bem-vindo ao mundo da robótica! :-)
ExcluirSe você quer controlar seu robô à distância sem ficar preso a um computador, dê uma pesquisada numa placa chamada IOIO Board. Com ela você consegue fazer o controle no Android (celular ou tablet). Para enviar e receber dados pode usar um módulo XBee no robô e outro conectado à IOIO.
Outra opção é usra o Arduino Esplora com XBee! Vai ficar muito bacana!
Abraços!
Boa Tarde Felipe,
ResponderExcluirGostei muito do Arduino Esplora sendo usado junto com o XBEE! Vou ver mais sobre o IOIO Board. E escolher entre eles.
Referente ao motor eu tenho muuuuitas dúvidas. Você me recomenda o uso de Micro-motor ou Servo de Rotação Continua. Qual será a diferença de uso para um ou outro? Terá alguma diferença se usar 4 motores (ou seria desperdicio, sendo que as rodas estão conectados com as esteriras).
Obrigado
Bruno, do ponto de vista mecânico, se você está usando exatamente a mesma base que eu, o ideal é usar os micromotores. A base tem o local exato para encaixá-los. Além disso, eles podem ser comprados com caixa de redução entre 1:5 e 1:1000 (a escolher no momento da compra). Quanto maior a redução, maior será o torque e menor será a velocidade.
ExcluirUsar servomotores de rotação contínua é mais prático do ponto de vista eletrônico, pois você não irá precisar do shield de acionamento de motores. Mas, os servos não irão se encaixar na base e você não terá tanta liberdade para escolher a redução.
Sobre a quantidade de motores, acho que usar dois motores é suficiente. O robô anda muito bem.
Abraços!
Boa Tarde Felipe,
ExcluirComo falei para você, a minha maior dificuldade está sendo nos motores, pois já trabalho com Arduíno, entretanto estou chegando agora nesse mundo de robótica.
Escolhendo o motor e a redução 100:1, me deparei com uma questão referente ao tipo do motor (HIGH POWER ou LOW POWER). Vi que no post você citou um HP, entretanto a corrente que ele consome é muito alta comparada com um LP - 1600 mA x 360 mA. - Por outro lado ganho Torque e Velocidade. Minha pergunta é: POR MAIS QUE O CONSUMO SEJA MAIOR, VALE A PENA INVESTIR EM UM HP AO INVÉS DE UM LP?
Pensando nisso, cheguei em outra questão, a alimentação. Será que 4 pilhas (recarregáveis) seria o suficiente para alimentar o Arduino, Motores, Shield por um bom tempo? - No seu caso qual foi o tempo que durou? Ou valeria a pena investir em uma bateria LiPo apesar de todos os riscos que ela oferece? Ou outro tipo de bateria?
Obrigado
Olá, Bruno.
ExcluirVocê tem razão: um motor Low Power irá ter corrente menor, mas também tem menos torque e velocidade. A escolha deve ser feita levando alguns pontos em consideração. Por exemplo, analise se você precisa/quer alto torque ou alta velocidade em sua aplicação. Se quiser, um motor High Power será melhor. Mas, se você só precisar de alto torque mas a velocidade puder ser baixa, pode selecionar um Low Power com redução grande (1000:1). Por outro lado, se o objetivo maior for minimizar o consumo da bateria, o melhor seria um motor Low Power - vai economizar bastante, pois gasta um quarto da energia!
Quanto às baterias, só testei meu robô com pilhas alcalinas (não usei recarregáveis). A duração foi boa, mas eu não sei dizer quanto tempo elas duram pois não cheguei a fazer testes até as baterias esgotarem.
Não sei se usar pilhas recarregáveis vai dar certo. Pilhas recarregáveis normalmente possuem tensão de 1,2V. Ou seja, 4 pilhas recarregáveis em série resultam em 4,8V. Isso significa que você precisaria ligar a alimentação diretamente no pino de 5V do Arduino (sem passar pelo regulador de tensão), o que é arriscado! Ou seja, se algum dia você ligar 4 pilhas alcalinas, terá 6V nos circuitos que deveriam ter 5V, o que provocará a queima do processador e, possivelmente, de outros circuitos da placa do Arduino.
Se você quer bastante energia para que o robô funcione por muito tempo, use uma bateria de LiPo. Compre um carregador bom e use de acordo com as recomendações!
Olá Felipe,
ResponderExcluirEstou querendo fazer um robô com esteiras, ele vai pesar cercar de 2,5 kg. Minha duvida é em relação na escolha dos motores(Rpm,torque,redução) ? devo utilizar quantos +- ?
Encontrei esse motor http://dx.com/p/high-torque-5rpm-12v-dc-geared-motor-91626, na descrição dele fala que tem cerca de 6kg de torque, isso procede ?
Desde de já obrigado pela atenção.
Olá!
ExcluirO torque do motor que você encontrou é de 6kgcm (cuidado, pois isso é diferente de 6kg). A medida de torque não tem uma relação direta com o peso que a estrutura do robô pode ter. Mas, quanto maior for o torque, maior será a força que ele exercerá. Portanto, um robô mais pesado irá precisar de motores com maior torque.
Não conheço o motor que você viu no DX. Mas, pelo que li, parece ser bom. Acredito que dois motores sejam suficientes para acionar seu robô (um para cada esteira).
Boa tarde Felipe.
ResponderExcluirEu tenho um robo com dois motores DC e ele nao estava andando em linha reta por estar em open loop. Por isso, comprei um encoder pra poder receber o feedback de velocidade dos meus motores e coloca-los na mesma velocidade(andar em linha reta). Estou programando em arduino uno, tenho um controlador pra cada motor. porem, nao sou mto bom com C++. Vc tem alguma ideia em forma de codigo de como fazer esse encoder me dar uma resposta? E como usar o PID pra controlar a velocidade desses motores?
Obrigado
Rafael
Olá, Rafael.
ExcluirVocê pode ler sobre o uso de encoder com Arduino no site do Laboratório de Garagem ou no Arduino Playground. Eles apresentam vários exemplos de código:
http://playground.arduino.cc/Main/RotaryEncoders
http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-encoder-rotativo-com-arduino
Não tenho um exemplo sobre sincronização de motores, mas a ideia geral fazer o robô andar em linha reta é que ambos girem sempre a mesma quantidade de pulsos num mesmo intervalo de tempo. Dá pra fazer isso acionando uma das rodas com PWM de razão cíclica fixa e a outra roda com PWM de razão cíclica definida por um controlador PID (para manter a mesma velocidade da outra roda). Veja mais sobre uso do PID aqui:
http://playground.arduino.cc/Code/PIDLibrary
Último detalhe: mesmo com o sincronismo dos motores não dá para garantir que seu robô vai andar em linha reta. O sincronismo garante que as rodas terão a mesma velocidade angular, o que já melhora bastante! No entanto, a velocidade linear depende do seu raio. Ou seja, se houver uma diferença entre os diâmetros das rodas direita e esquerda, por menor que seja, suas velocidades lineares não serão iguais e o robô não irá descrever uma trajetória retilínea. Só dá pra resolver isso com sensores externos ao robô.
Boa sorte!