
Réalisation d'un robot sur chenilles
#1
Posté 14 septembre 2011 - 12:26
J'ai acheté un Arduino Uno il y à une semaine, pour une tout autre utilisation.
J'était assez méfiant au début car mes notions d'électronique sont plutôt réduites et je ne connais rien à la programmation.
Mais la prise en main est assez facile au final. Après pas mal de lectures et de recherches, j'arrive déjà à faire quelques trucs qui semblerait nuls pour beaucoup d'entres vous, mais je suis content de moi pour le moment.
Et du coup, je compte me lancer dans la robotique. C'est un rêve de gamin! Qui me parait accessible depuis que j'ai découvert l'Arduino.
Je viens donc de commander:
-Un chassis à chenilles (http://www.zartronic.fr/ch%C3%A2ssis-robotique-rover5-2-encodeurs-et-2-moteurs-p-256.html)
-Une carte Romeo
-Un capteur à ultrason UMR37
-Une télécommande infrarouge avec récepteur (http://www.zartronic.fr/kit-t%C3%A9l%C3%A9commande-infrarouge-p-181.html)
C'est peu pour le moment mais je compte rajouter d'autres choses avec le temps.
Pour commencer, je voudrais juste faire un robot autonome qui se déplace sans collision.
Par la suite, j'aimerais rajouter (si c'est réalisable et à mon niveau)
-une tourelle pour le capteur à ultrasons
-lui donné une forme dans le genre du robot de wall-e
-un bras muni d'une pince
-une caméra avec écran déporté sur un nunchuk
Bref j'ai beaucoup d'idée mais je préfère y allez doucement.
Juste une question, pour le chassis, il annonce une consommation de 2,4A, à votre avis, c'est par moteur ou pour l'ensemble?
Sinon la partie commande moteur de la carte Romeo ne sera pas adéquate.
Merci à tous de m'avoir lu.
#2
Posté 14 septembre 2011 - 03:26
Pour la consommation de 2,4 A du châssis, c'est bien l'ensemble, mais au blocage. La consommation normale indiquée par Zartronic est plus correcte : 210 mA.
C'est un chouette robot, il est plus gros en vrai que sur la photo.
Je l'ai vu tourner lors d'un de nos ateliers, il me semble que c'était justement avec une Roméo.
a+
Julien.
#3
Posté 14 septembre 2011 - 06:23
Pour la taille j'ai vus quelques vidéos sur Youtube, et je ne voulais pas plus petit.
Vivement demain que je reçoive tout ça!
Après, c'est la programmation pour le capteur ultrason qui va me donner du fils à retordre.
#4
Posté 17 septembre 2011 - 11:07
Alors j'ai commencé par programmer la télécommande IR, et ça marche (enfin pas comme je voudrais mais ce n'est pas le problème)
Maintenant j'essaie de mettre le capteur à ultrasons.
J'ai donc cherché la librairie correspondante. Elle inclut un "exemples" qui permet d'afficher la valeur à l'écran.
Je câble tout ça, je compile, et j'envoie... Mais là:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Après recherche, c'est un problème récurrent. Sauf que ça ne me le fait que lorsque je connecte mon capteur sur tx et rx. Quand je les débranche, le transfère remarche.
J'ai bien mis tx sur rx et vice versa.
Si quelqu'un a une idée...
#5
Posté 17 septembre 2011 - 11:31
Deux solutions :
- débrancher le capteur lorsque tu programmes (note que tu perds aussi la possibilité d'afficher des valeurs sur la console
- connecter le capteur sur d'autres pattes et utiliser une bibliothèque série (mais ça peut provoquer des problèmes avec d'autres fonctions car ça utilise des interruptions)
C'est bien pour ça que j'utilise jamais de capteurs sur RX/TX mais plutôt sur I2C.
#6
Posté 17 septembre 2011 - 02:45

C'est vrai qu'il y en a des plus simples en y regardant bien, mais bon ça m'embête d'en racheter un.
C'est quand même bizarre, le programme de test est censé afficher les données sur le serial monitor pourtant.
Edit: Pour mon capteur, il est écrit :
<<Il existe trois mode de sortie configurables par cavaliers: PWM, RS232 et TTL ce qui permet d'utiliser ce capteur avec tout système électronique.>>
Les 3 modes utilisent tous le tx et le rx? Je ne trouve pas de schéma l'expliquant.
#7
Posté 17 septembre 2011 - 04:18
Si t'avais correctement écrit URM37 et pas UMR37, ça aurait été plus simple de te répondre

J'ai trouvé le capteur : http://www.zartronic...-v32-p-248.html
C'est vrai que c'est pas mal, tu peux l'utiliser en comparateur automatique : il te déclenche sur une entrée digital (ni RX ni TX) quand la valeur enregistrée en mémoire est détectée.
Pour le mode PWM, tu mesures la longueur d'un créneau, c'est pas mal quand on manque de pattes.
[edit] j'ai un doute
Quelle est la librairie que tu utilises ?
#9
Posté 17 septembre 2011 - 07:24
http://www.robot-maker.com/forum/topic/5256-aide-sur-capteur-ultrason-URM37-V3-2/
Le programme simule tx et rx (urm.begin(6,7,9600);) sur les pin 6 et 7, donc plus de problème.
Donc je repart dans ma prog,mais je galère BEAUCOUP!
#10
Posté 19 septembre 2011 - 05:46
Bon après moult recherche, j'ai enfin trouvé!
http://www.robot-mak...son-URM37-V3-2/
Le programme simule tx et rx (urm.begin(6,7,9600);) sur les pin 6 et 7, donc plus de problème.
Donc je repart dans ma prog,mais je galère BEAUCOUP!
salut
ah content de t'avoir aidé avec mon post pourri

mais si ca te rassure c'est normale de galerer
Boncourage
#11
Posté 19 septembre 2011 - 01:42
ah content de t'avoir aidé avec mon post pourri
Quel post ?
#13
Posté 26 septembre 2011 - 12:56
J'ai le code qui permet d'avoir la distance dans le serial monitor, mais impossible de l'intégrer dans un programme.
#include "URMSerial.h" // La mesure que nous prenons "The measurement we're taking" // déclaration de la mesure de distance #define DISTANCE 1 // déclaration de la mesure de température #define TEMPERATURE 2 // déclaration de variable d'erreur #define ERROR 3 // déclaration de non lecture #define NOTREADY 4 // déclaration de limite de temps #define TIMEOUT 5 URMSerial urm; void setup() { Serial.begin(9600); // cette ligne parametre le baut pour permetre l'arduino de communiquer avec le pc urm.begin(9,10,9600); // celle ci parametre les borne RX, TX,et le baud de communiquation entre le URM37 et la carte arduino Serial.println("URM37 Library by Miles Burton - Distance. Version 2.0"); //heu sa c'est juste pour la frime <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' /> ( affiche le texte qui est entre guillemet dans la fenetre de communication ) } void loop() { Serial.print("Measurement: ");//affiche le texte qui est entre guillemet Serial.println(getMeasurement(DISTANCE)); // affiche la valeur que renvoi la fonction "getmesurement" un peu plus bas Serial.print("Temperature:"); Serial.println(getMeasurement(TEMPERATURE)/10.0); delay(1000); } int value; // This value will be populated int getMeasurement(int mode)// la fameuse fonction { // Request a distance reading from the URM37 switch(urm.requestMeasurementOrTimeout(mode, value)) // Find out the type of request { case DISTANCE: // Double check the reading we recieve is of DISTANCE type // Serial.println(value); // Fetch the distance in centimeters from the URM37 return value; break; case TEMPERATURE: return value; break; case ERROR: Serial.println("Error"); break; case NOTREADY: Serial.println("Not Ready"); break; case TIMEOUT: Serial.println("Timeout"); break; } return -1; } /* fin de la fonction. celle-ci permet de choisir la valeur mesurer (temperature ou distance ) exemple value=getMeasurement(DISTANCE) */
Voilà donc le fameux code. Il fonctionne sans problème mais seulement je ne le comprends pas complètement, et je n'arrive pas à l'introduire dans un programme. Je pense que seul une petite partie du code est essentiel pour récupérer la variable "distance" final, mais je m’emmêle les pinceaux...
Merci d'avance.
edit: Dans ce code par exemple:
#include "URMSerial.h" #define DISTANCE 1 #define TEMPERATURE 2 #define ERROR 3 #define NOTREADY 4 #define TIMEOUT 5 URMSerial urm; const int led=13; void setup(){ pinMode (led, OUTPUT); Serial.begin(9600); urm.begin(9,10,9600); } void loop(){ if (DISTANCE<20) { digitalWrite (led, LOW); } if (DISTANCE>20) { digitalWrite (led, HIGH); } }
#14
Posté 26 septembre 2011 - 01:06
#include "URMSerial.h" URMSerial urm; int distance; void setup() { Serial.begin(9600); // initialisation de la connexion Arduino / PC urm.begin(9,10,9600); // initialisation du capteur sur les pattes 9 et 10 à la vitesse 9600 } void loop() { // mise à jour de la distance urm.requestMeasurementOrTimeout(1, distance); // on en fait ce qu'on veut, l'afficher par exemple Serial.print("Distance : "); Serial.println(distance); delay(1000); }
#15
Posté 26 septembre 2011 - 11:58
Je vais enfin pouvoir avancer facilement!

#16
Posté 08 octobre 2011 - 02:22
Merci de me lire.
#17
Posté 08 octobre 2011 - 06:51
Bravo

Mon site internet : http://ferdinandpiette.com/
#18
Posté 08 octobre 2011 - 07:07
Pas mal du tout, je dit pas mal alors que ça mériterait que je dise "bien"

Juste une question, pourquoi ne pas essayer de mieux enchainer les mouvements ?
Quand ton robot rencontre un obstacle
- Il s'arrête
- Analyse a droite
- Analyse a gauche
- Se dirige dans la direction ou il n'y a pas d'obstacle
- Avance à nouveau
- Et recommence jusqu'à rencontrer un nouvel obstacle.
Pourquoi ne pas faire une analyse en continu
Il analyserait en permanence sur 180° de façon continue, et se dirigerait dans la direction ou il 'y aurait rien pour empêcher sa progression ?
Autre question, gères tu sa localisation et essais tu de diriger ton robot vers un point précis ?
Si oui compte tu conserver cette destination tout en évitant les obstacles en lui faisant refaire un calcul de chemin chaque fois qu'il a du changer de cap à cause d'un obstacle ?
merci pour tes réponses
Sinon bonne continuation
Cdlt
Yves
#19
Posté 08 octobre 2011 - 11:41
Pourquoi ne pas faire une analyse en continu Il analyserait en permanence sur 180° de façon continue, et se dirigerait dans la direction ou il 'y aurait rien pour empêcher sa progression ?
Effectivement, c'est ce que je compte faire après mais mon programme avance doucement car j'apprends au fur et à mesure la prog. Et hier soir je devais aller me coucher

Autre question, gères tu sa localisation et essais tu de diriger ton robot vers un point précis ? Si oui compte tu conserver cette destination tout en évitant les obstacles en lui faisant refaire un calcul de chemin chaque fois qu'il a du changer de cap à cause d'un obstacle ?
Pour le moment je n'ai pas réussi à y mettre l'odométrie, donc pas de localisation. Il se balade bêtement sans trop se cogner. Mais je compte faire évoluer tout ça avec le temps.
Amicalement.
Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users