Aller au contenu


Photo
- - - - -

Réalisation d'un robot sur chenilles


18 réponses à ce sujet

#1 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 14 septembre 2011 - 12:26

Bonjour à tous.

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 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 14 septembre 2011 - 03:26

Bonjour,

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 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 14 septembre 2011 - 06:23

Ok merci, ça confirme ce que que pensais pour l'intensité.

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 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 17 septembre 2011 - 11:07

Ca y est, j'ai reçu ma commande.
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 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 17 septembre 2011 - 11:31

C'est tout à fait normal : RX et TX sont utilisés pour la programmation de l'Arduino, donc s'il y a un autre composant série connecté, ça parasite la ligne (l'UART est point à point, pas de bus).

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 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 17 septembre 2011 - 02:45

Ok ben merci, même si ça ne m'aide pas du tout! :P
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 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 17 septembre 2011 - 04:18

Salut,

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 ?

#8 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 17 septembre 2011 - 07:04

..

#9 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 17 septembre 2011 - 07:24

Bon après moult recherche, j'ai enfin trouvé!

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 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

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 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 19 septembre 2011 - 01:42

ah content de t'avoir aidé avec mon post pourri ;)


Quel post ?




#12 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 19 septembre 2011 - 04:03

celui si Luj

#13 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 26 septembre 2011 - 12:56

Je m'arrache les cheveux avec ce capteur!
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 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 26 septembre 2011 - 01:06

Le code est bien trop complexe car il se veut générique, mais dans un microcontrôleur il faut économiser de la place et simplifier à ce qu'on veut utiliser seulement. Voilà une proposition que tu comprendras mieux je pense :

#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 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 26 septembre 2011 - 11:58

Un grand merci à toi Luj, ça fait une semaine que je butte là dessus.
Je vais enfin pouvoir avancer facilement! ;)

#16 korneo

korneo

    Membre

  • Membres
  • 21 messages

Posté 08 octobre 2011 - 02:22

Juste un petit passage pour montrer mon avancement:


Merci de me lire.

#17 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 08 octobre 2011 - 06:51

Jolie réalisation !
Bravo :)

Mon site internet : http://ferdinandpiette.com/


#18 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 08 octobre 2011 - 07:07

Bonjour

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 korneo

korneo

    Membre

  • Membres
  • 21 messages

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 :D

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



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users