Aller au contenu


Photo
- - - - -

Robot Suiveur de Ligne -> Toulouse Robot Race !

voiture téléguide + arduino

59 réponses à ce sujet

#1 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 20 juillet 2016 - 09:37

Bonsoir tout le monde,

 

Voici mon nouveau robot , c'est un robot suiveur de ligne pour la course des robots qui se déroulera à Toulouse en septembre : 

 

IMG_20160720_221611177.jpg

 

Je suis parti d'une voiture téléguidé acheté à Gifi  :laugh1: .

 

J'ai virer le moteur à courant continu qui servait pour la direction, je l'ai remplacé par un servos moteur futaba S3003. Gros coups de bol j'ai pus conserver tout ce qui servais à la direction et j'ai eu juste à ajouter une pièce qui traîné de mon passé dans l'aéromodélisme. J'ai conservé aussi l'ensemble motoréducteur pour la propulsion.

 

Le tout piloté par un arduino UNO + son shield moteur, pour le moment je n'ai mis que trois capteurs de ligne mais au final je pense en utiliser 5 peut être dans une disposition différente de celle-ci. 

 

Comme je suis une buse phénoménale en soudure  :ph34r: j'ai triché pour ne pas avoir à souder sur la carte du shield (pour récupérer par exemple les entrée analogique qui vont me servir pour mes capteurs de lumières)

 

IMG_20160720_223000875.jpg

 

Il me reste encore quelques petits trucs encore à faire , comme le programme par exemple  :ignat_02:

 

Bonne soirée !



#2 abdelkrim

abdelkrim

    Membre occasionnel

  • Membres
  • Pip
  • 143 messages
  • Gender:Male
  • Location:France/Picardie/Oise/ Creil
  • Interests:Infographie 3D, Programation, Robotique, Sport

Posté 21 juillet 2016 - 12:55

Bonjour

Un projet qui m'intéresse beaucoup (suiveur de ligne), je vais le suivre jusqu'au bot :)

Sinon, on peux voirs à quoi ressemble la voiture? :ignat_02: (oui j'aime beaucoup voirs leurs design :whistle2: )


pour mieux me connaitre : Abdelkrim et sa révolution

mes animation 3D (pas toute mais ça arrive ;) ) : youtube


#3 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 721 messages
  • Gender:Male

Posté 21 juillet 2016 - 12:45

Je trouve que c'est toujours une bonne idée de partir sur base déjà existante, comme un jouet.
Bravo !

#4 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 21 juillet 2016 - 08:40

Merci :)
Désolé Abdelkrim j'ai jeté ce qui ne me servait plus.

#5 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male
  • Interests:Glenn

Posté 21 juillet 2016 - 11:30

Une petite vidéo d'un éventuel test ?

Ce genre de concours sont basé sur la vitesse et le bon suivi de la trajectoire j'imagine ?

 

Merci :)


signature_01.png -->

 

Mon Tipeee
 


#6 macerobotics

macerobotics

    Membre occasionnel

  • Membres
  • Pip
  • 147 messages
  • Gender:Not Telling
  • Location:Bretagne

Posté 22 juillet 2016 - 10:05

Salut,

 

Bonne idée la voiture RC. Je pense que tu as raison d'ajouter des capteurs de ligne (min 5)

Voici un lien qui peut intéressé, un suiveur de ligne rapide  : http://pacabot.com/zhonx-iii


Mace Robotics - mobile platform for education makers and research.

www.macerobotics.com


#7 abdelkrim

abdelkrim

    Membre occasionnel

  • Membres
  • Pip
  • 143 messages
  • Gender:Male
  • Location:France/Picardie/Oise/ Creil
  • Interests:Infographie 3D, Programation, Robotique, Sport

Posté 22 juillet 2016 - 02:44

Merci :)
Désolé Abdelkrim j'ai jeté ce qui ne me servait plus.

Oh c'est bien dommage

 

Ce genre de concours sont basé sur la vitesse et le bon suivi de la trajectoire j'imagine ?

 

Merci :)

Je me demande la meme chose et j'attend de le découvrir dans la suite, mais bon comme tu a posé la question je l'attend avec toi :P


pour mieux me connaitre : Abdelkrim et sa révolution

mes animation 3D (pas toute mais ça arrive ;) ) : youtube


#8 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 22 juillet 2016 - 02:54

Je vous invite à aller voir ce topic :) :

 

http://www.robot-maker.com/forum/topic/10590-course-de-robots-a-toulouse/



#9 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 27 juillet 2016 - 05:28

Bon j'avance sur le code, mais du coup je galère pas mal  :kez_11:

 

En effet en utilisant le Shield moteur, je me retrouve contraint à utiliser les entrées analogique pour mes capteurs TCR5000.

 

J'avais pensé utiliser une valeur de Référence et de comparer les informations renvoyées (ValeurLue 1/2/3) par les capteurs avec cette valeur de Ref : 

 

 

if (valeurLue1 < ValeurRef && valeurLue2 > ValeurRef && valeurLue3 < ValeurRef) {     

     
     motorA.run(FORWARD);
     Direction.write(90);       
 

 

Mais je me retrouve avec un robot très imprécis, où je dois tout le temps modifier la valeur de référence.

 

J'avais pensé utiliser la fonction MAP, mais j'ai dus mal à comprendre comment on récupère une valeur binaire (High ou Low) avec la fonction MAP  :wacko:

 

Ou peut être utiliser une bibliothèque style "Line sensor"



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 924 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 juillet 2016 - 09:23

Hésite pas à poster ton code si tu veux plus d'aide mais déjà une remarque : 
 

Les " entrées analogiques " sont aussi des entrées sorties digitales classique ;) donc si ça t'arrange tu peux faire un " digitalRead(A0); " ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#11 macerobotics

macerobotics

    Membre occasionnel

  • Membres
  • Pip
  • 147 messages
  • Gender:Not Telling
  • Location:Bretagne

Posté 28 juillet 2016 - 06:20

Salut,

 

Les capteurs TCRT5000, te renvoie une valeur analogique (capteur de distance mm), l'utilisation de la fonction analogRead me parait normal. Si tu fais du tout ou rien, ceci va forcément faire des à coups. Mais pour les premiers test, c'est bien de vérifier ton robot comme sa.

Ensuite, prendre les valeurs analogique. Pour la valeur de référence, tu peux faire une calibration automatique au début de ton programme.

 

Le capteur TCRT5000, est sensible à la lumière ambiante, à vérifier sur ton robot.

 

Pour mesurer la lumière ambiante :

  • éteindre la led d'émission du capteur
  • lire la valeur analogique du collecteur

 

Calibration : https://www.arduino....ial/Calibration


Mace Robotics - mobile platform for education makers and research.

www.macerobotics.com


#12 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 28 juillet 2016 - 05:59

En attendant de me replonger dans le code, voici ce que j'ai fait pour le moment  :

 

 

// Capteur de couleur, branché sur la broche analogique 0

const int CapteurDroite = 0;
const int CapteurMillieu = 1;
const int CapteurGauche = 2;
 
// variable pour stocker la valeur lue après conversion
int valeurLue1;
int valeurLue2;
int valeurLue3;
// Variable de référence
int ValeurRef = 600;
 
//Bibliotheque moteur 
#include <AFMotor.h>
AF_DCMotor motorA(2, MOTOR12_64KHZ);
 
//Bibliotheque servos
#include <Servo.h>
Servo Direction;
 
 
void setup()
{
 
    
    // Comunication serie
    Serial.begin(9600);
   
    // Moteur voiture
     motorA.setSpeed(50); // vitesse 255 max 
 
    //Servos moteur de direction
    Direction.attach(10, 1230, 1500);
   
   
    
}
 
void loop()
{
   // on convertit en nombre binaire la tension lue en sortie du potentiomètre
    valeurLue1 = analogRead(CapteurDroite);
    valeurLue2 = analogRead(CapteurMillieu);
    valeurLue3 = analogRead(CapteurGauche);
 Serial.print("valeurLue1 = ");
    Serial.println(valeurLue1);
    Serial.print("valeurLue2 = ");
    Serial.println(valeurLue2);
    Serial.print("valeurLue3 = ");
    Serial.println(valeurLue3);
    Serial.println();
     delay(500);   
    
// Marche avant
     if (valeurLue1 < ValeurRef && valeurLue2 > ValeurRef && valeurLue3 < ValeurRef) {     
     
     motorA.run(FORWARD);
     Direction.write(90);       
  } 
 
// Virage droite
 
     if (valeurLue1 > ValeurRef && valeurLue2 < ValeurRef && valeurLue3 < ValeurRef) {         
     motorA.run(FORWARD); 
     Direction.write(97); 
     }
     else {     
     
     motorA.run(FORWARD);
     Direction.write(90);
    }
     if (valeurLue1 > ValeurRef && valeurLue2 > ValeurRef && valeurLue3 < ValeurRef) {         
     motorA.run(FORWARD); 
     Direction.write(97); }
     else {     
     
     motorA.run(FORWARD);
     Direction.write(90);   
             
  }   
  //  virage gauche
      if (valeurLue1 < ValeurRef && valeurLue2 < ValeurRef && valeurLue3 > ValeurRef) {    
     motorA.run(FORWARD); 
     Direction.write(83);
     }  
     else {  
     
     motorA.run(FORWARD);
     Direction.write(90); 
     }
      if (valeurLue1 < ValeurRef && valeurLue2 > ValeurRef && valeurLue3 > ValeurRef) {    
     motorA.run(FORWARD); 
     Direction.write(83);
     }  
     else {  
     
     motorA.run(FORWARD);
     Direction.write(90);      
  } 
 } 
 
Merci d'être indulgent c'est mes premiers bouts de code  :yahoo:


#13 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 29 juillet 2016 - 06:05

Bonsoir tout le monde, 

 

Grace à vous les gars  :drag_03:  j'ai pus avancer, voici mon bout de code (pour le moment un seul capteur) :

 

 

// Capteur de couleur, branché sur la broche analogique 0

const int CapteurDroite = A0;
const int CapteurMillieu = A1;
const int CapteurGauche = A2;
const int LedDroite = A3;
const int LedMillieu = A4;
const int LedGauche = A5;
 
 
 
 
// variable pour stocker la valeur lue après conversion
int valeurLue1;
int valeurLue2;
int valeurLue3;
// Variable de référence
int sensorValueDroite = 0;         // the sensor value
int sensorMinDroite = 1023;        // minimum sensor value
int sensorMaxDroite = 0;           // maximum sensor value
 
 
//Bibliotheque moteur 
#include <AFMotor.h>
AF_DCMotor motorA(2, MOTOR12_64KHZ);
 
//Bibliotheque servos
#include <Servo.h>
Servo Direction;
 
 
void setup()
{
 
    
    // Comunication serie
    Serial.begin(9600);
   
    // Moteur voiture
     motorA.setSpeed(50); // vitesse 255 max 
 
    //Servos moteur de direction
    Direction.attach(10, 1230, 1500);
 
     // turn on LED to signal the start of the calibration period:
  pinMode(A3, OUTPUT);
  digitalWrite(A3, HIGH);
 
  // calibrate during the first five seconds
  while (millis() < 5000) {
    sensorValueDroite = analogRead(CapteurDroite);
 
    // record the maximum sensor value
    if (sensorValueDroite > sensorMaxDroite) {
      sensorMaxDroite = sensorValueDroite;
    }
 
    // record the minimum sensor value
    if (sensorValueDroite < sensorMinDroite) {
      sensorMinDroite = sensorValueDroite;
    }
  }
 
  // signal the end of the calibration period
  digitalWrite(A3, LOW);
   
   
    
}
 
void loop()
{
   digitalWrite(A3, HIGH);
   // on convertit en nombre binaire la tension lue en sortie du potentiomètre
    valeurLue1 = analogRead(CapteurDroite);
    valeurLue2 = analogRead(CapteurMillieu);
    valeurLue3 = analogRead(CapteurGauche);
 
    
// Marche avant
     
 
 
// Virage droite
 
     if (valeurLue1 > sensorMinDroite && valeurLue1 < sensorMaxDroite) {         
    
     Direction.write(97); 
     }
     else {     
     
    
     Direction.write(90);
  
             
  }   
  
 } 

 

Par contre maintenant je vais être à court d'entrée analogique pour 5 capteurs, je pense devoir passer sur une plus grosse Arduino.



#14 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 924 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 juillet 2016 - 10:24

Hum pas forcément : 

Tu as de A0 à A5 ce qui te fait 6 entrée analogique ;)  Et en plus sinon tu peux utiliser un ADC I2C comme celui ci . 

Ou tu peux aussi utiliser deux petites arduino plutôt qu'une grosse =) . Genre tu les fait communiquer en UART =) 

Il y a toujours plein de solution ;)

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#15 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 02 août 2016 - 10:30

 Merci Mike pour ton retour, au final il ne manque plus qu'une entrée numérique (je pense utiliser une borne non utilisée du shield).

 

Par contre je galère pour gérer tout ces capteurs , car il faut gérer tout ces valeurs analogiques mini max , je m'y perds  :kez_13:

 

Déjà est-ce que j'utilise la bonne méthode en utilisant des if else pour tout mes cas de figure avec mes capteurs ?

 

 

// Capteur de couleur, branché sur la broche analogique 0

const int CapteurDroite2 = A5;
const int CapteurDroite1 = A4;
const int CapteurMillieuDroite = A3;
const int CapteurMillieuGauche = A2;
const int CapteurGauche1 = A1;
 
 
 
 
 
// variable pour stocker la valeur lue après conversion
int valeurLue1;
int valeurLue2;
int valeurLue3;
int valeurLue4;
int valeurLue5;
 
// Variable de référence
int sensorValueDroite2 = 0;         // the sensor value
int sensorMinDroite2 = 1023;        // minimum sensor value
int sensorMaxDroite2 = 0;           // maximum sensor value
 
int sensorValueDroite1 = 0;         // the sensor value
int sensorMinDroite1 = 1023;        // minimum sensor value
int sensorMaxDroite1 = 0;           // maximum sensor value
 
int sensorValueMillieuDroite = 0;         // the sensor value
int sensorMinMillieuDroite = 1023;        // minimum sensor value
int sensorMaxMillieuDroite = 0;           // maximum sensor value
 
int sensorValueMillieuGauche = 0;         // the sensor value
int sensorMinMillieuGauche = 1023;        // minimum sensor value
int sensorMaxMillieuGauche = 0;           // maximum sensor value
 
int sensorValueGauche1 = 0;         // the sensor value
int sensorMinGauche1 = 1023;        // minimum sensor value
int sensorMaxGauche1 = 0;           // maximum sensor value
 
//Bibliotheque moteur 
#include <AFMotor.h>
AF_DCMotor motorA(2, MOTOR12_64KHZ);
 
//Bibliotheque servos
#include <Servo.h>
Servo Direction;
 
 
void setup()
{    
    // Comunication serie
    Serial.begin(9600);
   
    // Moteur voiture
     motorA.setSpeed(150); // vitesse 255 max 
 
    //Servos moteur de direction
    Direction.attach(10, 1230, 1500);
 
     // turn on LED to signal the start of the calibration period:
  
 
  // calibrate during the first five seconds
  while (millis() < 5000) {
    sensorValueDroite2 = analogRead(CapteurDroite2);
    sensorValueDroite1 = analogRead(CapteurDroite1);
    sensorValueMillieuDroite = analogRead(CapteurMillieuDroite);
    sensorValueMillieuGauche = analogRead(CapteurMillieuGauche);
    sensorValueGauche1 = analogRead(CapteurGauche1);
 
    
    // record the Droite sensor value
    if (sensorValueDroite2 > sensorMaxDroite2) {
      sensorMaxDroite2 = sensorValueDroite2;
    }
 
    // record the minimum sensor value
    if (sensorValueDroite2 < sensorMinDroite2) {
      sensorMinDroite2 = sensorValueDroite2;
    }
  // record the Droite sensor value
    if (sensorValueDroite1 > sensorMaxDroite1) {
      sensorMaxDroite1 = sensorValueDroite1;
    }
 
    // record the minimum sensor value
    if (sensorValueDroite1 < sensorMinDroite1) {
      sensorMinDroite1 = sensorValueDroite1;
    }
    
    // record the maximum sensor value
    if (sensorValueMillieuDroite > sensorMaxMillieuDroite) {
      sensorMaxMillieuDroite = sensorValueMillieuDroite;
    }
 
    // record the minimum sensor value
    if (sensorValueMillieuDroite < sensorMinMillieuDroite) {
      sensorMinMillieuDroite = sensorValueMillieuDroite;
    }
     // record the maximum sensor value
    if (sensorValueMillieuGauche > sensorMaxMillieuGauche) {
      sensorMaxMillieuGauche = sensorValueMillieuGauche;
    }
 
    // record the minimum sensor value
    if (sensorValueMillieuGauche < sensorMinMillieuGauche) {
      sensorMinMillieuGauche = sensorValueMillieuGauche;
    }
    
      // record the maximum sensor value
    if (sensorValueGauche1 > sensorMaxGauche1) {
      sensorMaxGauche1 = sensorValueGauche1;
    }
 
    // record the minimum sensor value
    if (sensorValueGauche1 < sensorMinGauche1) {
      sensorMinGauche1 = sensorValueGauche1;
    }
  }
 
  // signal the end of the calibration period  
}
 
void loop()
{
  
    Serial.print("valeurLue2 = ");
    Serial.println(valeurLue2);
    Serial.print("valeurLue3 = ");
    Serial.println(valeurLue3);
    Serial.println();
     delay(1);
  
   // on convertit en nombre binaire la tension lue en sortie du potentiomètre
    valeurLue5 = analogRead(CapteurDroite2);
    valeurLue4 = analogRead(CapteurDroite1);
    valeurLue3 = analogRead(CapteurMillieuDroite);
    valeurLue2 = analogRead(CapteurMillieuGauche);
    valeurLue1 = analogRead(CapteurGauche1);
    
     
// Marche avant 
 
  if (valeurLue3 > sensorMinMillieuDroite && valeurLue3 < sensorMaxMillieuDroite && valeurLue2 > sensorMinMillieuGauche && valeurLue2 < sensorMaxMillieuGauche) {         
  Direction.write(90);
  motorA.run(FORWARD); 
  }
  else if ( valeurLue3 < sensorMinMillieuDroite) {         
  Direction.write(87);
  motorA.run(FORWARD);
  }
// Virage droite
  else if ( valeurLue3 < sensorMinMillieuDroite || valeurLue4 > sensorMaxDroite1 ) {         
  Direction.write(87);
  motorA.run(FORWARD);
  }
// Virage gauche
  else if ( valeurLue2 < sensorMinMillieuGauche) {         
  Direction.write(93);
  motorA.run(FORWARD);
 }
 else if ( valeurLue2 < sensorMinMillieuGauche || valeurLue1 > sensorMaxGauche1) {         
  Direction.write(85);
  motorA.run(FORWARD);
  }
 }
 

 



#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 924 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 02 août 2016 - 11:59

Pour ce genre de choses tu as plusieurs méthodes comme toujours en fait ! :) 

mais rassure toi : il n'y a pas réellement de bonne ou de mauvaises méthodes =) il y en a qui sont plus simple à mettre en oeuvre d'autre qui sont plus efficace mais l'important dans une démarche comme la tienne je pense que c'est d'essayer et d'apprendre ;)


Par contre je peux te proposer une autre méthode =)

 

C'est d'essayer de transformer tes 5 entrées de capteur en une seule variable via une fonction genre " computeInpute " dont le signe du résultat te diras si ta ligne est plus à droite ou plus à gauche =) 

Puis de faire une fonction move () qui prend cette variable en paramètre pour agir sur la direction et la vitesse =) 
Ainsi tu pourras facilement faire plusieurs fonctions de type computeInpute et plusieurs fonctions de type move que tu pourras tester pour le concours =)

Ensuite je vais te poser une question : pourquoi as tu un min et un max ? Techniquement tu cherches à définir si tu es sur du noir ou sur du blanc ? Techniquement tu ne devrais avoir qu'un seuil à partir du quel tu considères que tu es noir et avant le quel tu es sur du blanc ... non ? Au pire des cas tu peux mettre un effet d'hystérésis pour éviter les fausses détection mais c'est pas pareil qu'un min et qu'un max =) 
 

PS : c'est pourquoi la dernière entrée digital ? Tu as aussi 13 qui est dispo ( si jamais la led ne perturbe pas ton application )  en plus de 0 et 1 et tu peux essayer de découvrir ce qui est branché sur la pin 2, j'arrive pas à voir perso ... En plus il y a pas assez de photo du shield sur ton post pour suivre les pistes ^^

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#17 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 03 août 2016 - 08:10

Merci Mike pour ton retour, alors je vais essayer de répondre point par point :

 

 

Pour ce genre de choses tu as plusieurs méthodes comme toujours en fait ! :)

mais rassure toi : il n'y a pas réellement de bonne ou de mauvaises méthodes =) il y en a qui sont plus simple à mettre en oeuvre d'autre qui sont plus efficace mais l'important dans une démarche comme la tienne je pense que c'est d'essayer et d'apprendre ;)

 

 

Disons que pour le moment avec If else , je n'obtiens pas le résultat attendu c'est pour cela que je doute sur ma méthode un peu trop simple pour avoir de bon résultat je pense.

 

 

C'est d'essayer de transformer tes 5 entrées de capteur en une seule variable via une fonction genre " computeInpute " dont le signe du résultat te diras si ta ligne est plus à droite ou plus à gauche =)

Puis de faire une fonction move () qui prend cette variable en paramètre pour agir sur la direction et la vitesse =)
Ainsi tu pourras facilement faire plusieurs fonctions de type computeInpute et plusieurs fonctions de type move que tu pourras tester pour le concours =)

 

 

Si je comprend bien ,il fraudra que par exemple mes capteurs qui sont à droite prenne une valeur négative et à droite une valeur positive.

La somme de mes valeurs m'indique la tendance de la courbe , c'est bien cela ?

 

Ensuite je vais te poser une question : pourquoi as tu un min et un max ? Techniquement tu cherches à définir si tu es sur du noir ou sur du blanc ? Techniquement tu ne devrais avoir qu'un seuil à partir du quel tu considères que tu es noir et avant le quel tu es sur du blanc ... non ? Au pire des cas tu peux mettre un effet d'hystérésis pour éviter les fausses détection mais c'est pas pareil qu'un min et qu'un max =) 
 

Il faut que j'essaye de mettre un effet d'hystérésis car maintenant je me demande si le fait d'avoir un min et max sur du blanc doit me générer des erreurs . Car si je regarde les valeurs renvoyées je vais avoir par exemple :

 

Sur un capteur en zone blanche : min 5 et max 40

Sur un capteur en zone noir :  min 300 et max 400

 

Cela me génere des erreurs c'est certain :yes:

 

PS : c'est pourquoi la dernière entrée digital ? Tu as aussi 13 qui est dispo ( si jamais la led ne perturbe pas ton application ) en plus de 0 et 1 et tu peux essayer de découvrir ce qui est branché sur la pin 2, j'arrive pas à voir perso ... En plus il y a pas assez de photo du shield sur ton post pour suivre les pistes ^^

 

 

 

La dernière entrée digital est pour avoir un micro contacteur pour compter le nombre de tour. en effet au bout d'un nombre défini de tour le robot doit s'arreter de manière autonome. L'arrivé est matérialisée par une arche, du coups je vais m'en servir pour compter le nombre de tour .



#18 N1oN4o

N1oN4o

    Nouveau membre

  • Membres
  • 45 messages
  • Gender:Male

Posté 03 août 2016 - 09:02

Sympa ton projet ! Je pense partir sur une base de voiture télécommandée pour mon futur robot , ça simplifie la partie "méca" !!

Merci Mike pour ton retour, alors je vais essayer de répondre point par point :
 
....
 
Si je comprend bien ,il fraudra que par exemple mes capteurs qui sont à droite prenne une valeur négative et à droite une valeur positive.
La somme de mes valeurs m'indique la tendance de la courbe , c'est bien cela?
 ....
.



Je pense que l'idée est là . Personnellement j'ajouterais des "facteurs d'importance" spécifiques à chaque capteur dans l'équation globale . Le but étant de donner plus de poids aux capteurs centraux car s'ils rencontrent un obstacle , le mouvement d'évitement devra être plus rapide et plus important que pour un obstacle détecté sur un des côtés de ta voiture ;) !

#19 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 924 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 03 août 2016 - 11:05

Je pense que l'idée est là . Personnellement j'ajouterais des "facteurs d'importance" spécifiques à chaque capteur dans l'équation globale . Le but étant de donner plus de poids aux capteurs centraux car s'ils rencontrent un obstacle , le mouvement d'évitement devra être plus rapide et plus important que pour un obstacle détecté sur un des côtés de ta voiture ;) !

 

+1  ;) 

 

c'est exactement ce qu'il faut faire ;) Et oui j'aime bien aider en ne donnant pas toutes les infos pour laisser les gens chercher un peu :P ( en cherchant on apprend et on retient plus vite ;) )


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#20 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 03 août 2016 - 12:12

Je me creuse la tête depuis se matin , pourquoi j'ai arrêté les maths aussi tôt :laugh1:





Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users