Aller au contenu


Photo

robot "exploreur"


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 shinxy

shinxy

    Nouveau membre

  • Membres
  • 8 messages
  • Gender:Male
  • Location:ile de france

Posté 23 avril 2013 - 02:23

Bonjours à tous et à toutes,

Je vient ici pour vous présentez mon projet : "explorer". Je sais, ce n'est pas vraiment rechercher comme nom, mais bon il faut bien qu'il est un nom :).
Pour commencer, je vais énumérer le cahier des charges :

- Fonction Principale : déanbuler dans la piéce en évitant les obstacles (rien de bien originale), j'ai utilisé deux servo moteur à rotation continue pour le déplacement (des DF05SR), j'ai utilisé un capteur de distance SFR05 pour la vision, et enfin j'ai utilisé un petit servo moteur pour servir de "tourelle" (un Dagu RS001A). Le tout est piloté par une carte arduino UNO (sans shield pour le moments).

- Deuxième fonction : Rajout d'un module suiveur de ligne.

- Troisième fonction : Pilotation du robot par radio (module xbee) ou par wifi (shield arduino) ou bien par bluetooth (module bluethooth ou xbee, bien que le xbee me paraisse un peu chéro).
Ici on pouras passer du mode manu, au mode auto, au mode suiveur de ligne avec une télécomande (ou l'ordinateur ou bien encore avec le télephone portable)

- quatrième fonction : Pathfinding... J'ai toujours voulus faire ça, mais je sais déjà que c'est trés compliquer ... alors il ne s'agit que de piste pour le moments, j'éspére que gràce à vous je pourait développer mes pistes, MAIS on y est pas encore :)

Comme vous l'avez surment compris le robot se veux évolutif, j'ai déjà réalisé le chassit (donc je suis fier j'y est passer pas mal de temps ^^) et maintenant je vais passer au code de la fonction principale. Je vais vous montrer plusieur photo de mon chassit, dans un post ultérieur (car je n'est pas encore pris de photo -_-).

piste pour le pathfinding :

- piste 1 : utlisation d'un ping et mesure du temps de réponse, si cette sollution est retenus il s'agira d'un d'un ping wifi, donc utilisation du wifi pour la troisiéme fonction
- piste 2 : GPS, mais je me suis déjà renseigner, les gps on une préssision de 10à 15métre, donc pas top sachant qu'il sagit d'un pathfinding en intérieur
- piste 3 : utilisation de balises infrarouge, sauf que je ne sais pas comment le faire
- piste 4 : utilisation d'encodeur rotatif sur chaque roues pour connaitre la vitesse et la position des moteur, couplé avec une bousôle numérique, le tout relié avec un algorithme qui me semble bien dure ^^ m'enfin bréf c'est pas gagner :/

résumer du projet :

- déanbuler en évitant les obstacles
- suiveur de ligne
- pilotage de mon robot à distance (par n'importe quel moyen)
- enfin tenter le pathfinding...

Je suis trés motiver, c'est mon robot à moi ^^, et je suis trés réaliste sur la difficulté de ma derniére partie... Merci de me dire ce que vous en penssait, néanmoins ne parlons pas tout de suite du pathfinding, je me concentre d'abord sur les 3 premiéres parties :). Je vous tiendrais informer au fure et à mesure de l'evoluton d'"exploreur".

à bientôt et bon bricolage à tous.

P.S: pour ceux que ça intéresse voici les liens des composants utilisés :

moteur de déplacement : http://www.gotronic.fr/art-servomoteur-df05sr-19378.htm //agréablement surpris par la qualiter de la viserie (mauvaise expérience avec d'autre moteur)
moteur tourelle : http://www.gotronic.fr/art-servomoteur-dagu-rs001a-17753.htm // la qualité coréspond au prix mais c'est largement suffisant ;)
capteur de distance : http://www.gotronic.fr/art-transducteur-a-ultrasons-srf05-217.htm // rien à dire, trés bon matos (on me l'a donner, sinon j'aurais prix infrarouge)
micro controlleur : http://www.gotronic.fr/art-carte-arduino-uno-12420.htm // je pensse que tout le monde connais

#2 shinxy

shinxy

    Nouveau membre

  • Membres
  • 8 messages
  • Gender:Male
  • Location:ile de france

Posté 25 avril 2013 - 03:25

bonjours à tous et à toutes,

Mon projet avance, lentement, mais surmement ^^. Je n'est malheuresement pas les temps de mis métre à fond, je fait ça en retrant des cours, où le week end. Fin bréf assez parler de ma vie.
Je posterais des photo du chassit ce soire, en attendant, je vais parler de l'avancement du projet :)/>/>/>/>/>/>

Partie chassit : il faut encore que je j'assemble tout les composant, pas facile de métre en place ce que je voudrait faire avec la tourelle, néanmois, les moteurs de déplacments sont installer et branchés, j'ai tout tester hier, le robot fait des allez et retours.

Partie électronique : je n'est pas du tout commencer... je voudrait faire, une allimentation séparer entre la carte et les moteurs (pour une débugage plus simple), donc une alim 6V avec un intérupteur pour les moteur, et une alim 9V, toujours avec un interupteur, pour la carte arduino. Je me cantonerais à ça pour la partie électronique, je risque de modifier pas mal de truck, au niveau de l'alimentation (de la carte et des moteurs) par la suite.

Partie programmation : c'est du code arduino, donc rien de bien compliqué pour l'instant, je ne gére que le déplacement et l'évitement d'obstacle, je met le code à la suite :

/********************************************************************************************

				represente la partie "main()" du programme

********************************************************************************************/

// define du déplacement
//*******************************************************************************************

#define PIN_SERVO_GAUCHE		10
#define PIN_SERVO_DROITE		11

#define SERVO_GAUCHE			0 // permet de dissocié les deux servo
#define SERVVO_DROITE			1

#define NEUTRE_SERVO_GAUCHE		45 // représente l'angle pour arréter le servo
#define NEUTRE_SERVO_DROITE		75

#define REGULATION_VITESSE_GAUCHE	11 // plus ce chiffre sera faible, plus la vitesse
#define REGULATION_VITESSE_DROITE	11 // des servo sera faible (et inversement)

#define	AVANT				0
#define GAUCHE				1
#define DROITE				2
#define ARRIERE				3
#define ARRET				4

//*******************************************************************************************

//define du capteur de distance
//*******************************************************************************************

#define PIN_IN_CAPTEUR_DISTANCE		8 // ATTENTION : on écrit dessus, donc pour le µc c'est un latch
#define PIN_OUT_CAPTEUR_DISTANCE	9 // ATTENTION : on lit dessus, donc pour le µc c'est un port
#define DISTANCE_DETECTION			15

//*******************************************************************************************

//define de la tourelle
//*******************************************************************************************

#define PIN_SERVO_TOURELLE		12

#define VISION_GAUCHE			20 // représente l'angle qu'il faut pour tourné le capteur a gauche
#define VISION_DROITE			160// représente l'angle qu'il faut pour tourné le capteur a gauche
#define	VISION_MILIEU			70 // représente l'angle qu'il faut pour que le capteur soit centré

//*******************************************************************************************

#include <deplacement.h>
#include <capteur_distance.h>
#include <Servo.h>

Servo servogauche;
Servo servodroite;
Servo servotourelle;

int distance;

void setup()
{
    servogauche.attach(PIN_SERVO_GAUCHE);
    servodroite.attach(PIN_SERVO_DROITE);
    servotourelle.attach(PIN_SERVO_TOURELLE);

    pinMode (PIN_IN_CAPTEUR_DISTANCE, OUTPUT);
    pinMode (PIN_OUT_CAPTEUR_DISTANCE, INPUT);

    servotourelle.write(VISION_MILIEU) // on le fait regarder devant

    Move(AVANT); // reprend la même fonction que roby, car trés intéressant à mon avis
}

void loop()
{
    capteurDistanceSetup();
    distance = calculDistance();

    if (distance > DISTANCE_DETECTION)
	Move(AVANT);

    else
	manoeuvreDevitement();

}


/********************************************************************************************

				represente mon onglet déplacement dans le programme

********************************************************************************************/


#include <Servo.h>

Servo servogauche;
Servo servodroite;
Servo servotourelle;

// récuperation du neutre de chaque servo moteur
//********************************************************************************************

int getNeutral(int servo)
{
    if (servo == SERVO_GAUCHE)
	return NEUTRE_SERVO_GAUCHE;
    else
	return NEUTRE_SERVO_DROITE;
}

//********************************************************************************************

// traitement du déplacement, permet de choisir la vitesse des moteur
//********************************************************************************************

void controleServo(int vitesse, int servo)
{
    int position = getNeutral(servo);

    if (servo == SERVO_GAUCHE)
    {
	position = position + vitesse;
	servogauche.write(position);
    }

    else
    {
	position = position - vitesse;
	servogauche.write(position);
    }

}

//********************************************************************************************

// fonction générique pour le déplacement
//********************************************************************************************

void Move(int mouvement)
{

    int A,B; // A sera assigné au servogauche, B sera assigné à celui de droite
    switch(mouvement)
    {
	case AVANT:     A = 1;  B = 1;  break;
	case DROITE:    A = 1;  B = -1; break;
	case GAUCHE:    A = -1; B = 1;  break;
	case ARRIERE:   A = -1; B = -1; break;
	case ARRET:	A = 0;  B = 0;  break;
	default : 	A = 0;  B = 0;  break; // un grand homme ma dit un jours, "on ne sais jamais !!" xD
    }
    
    controleServo(A*REGULATION_VITESSE_GAUCHE, SERVO_GAUCHE);
    controleServo(B*REGULATION_VITESSE_DROITE, SERVO_DROITE);
}

//********************************************************************************************

//gestion de l'evitement
//********************************************************************************************
void manoeuvreDevitement(void)
{

    int distanceDroite;
    int distanceGauche;
    
    servotourelle.write(VISION_DROITE);// on regarde si il à quelque chose à droite
    delay(5); // permet d'être, largement, sur que la tourelle soit en place
    capteurDistanceSetup();
    distanceDroite = calculDistance();

    servotourelle.write(VISION_GAUCHE)// on regarde si il à quelque chose à gauche
    delay(5);
    capteurDistanceSetup();
    distanceGauche = calculDistance();

    if(distanceDroite<distanceGauche)
    {
	Move(GAUCHE);
	delay(300);
    }
    else if(distanceGauche<distanceDroite)
    {
	Move(DROITE);
	delay(300);
    }
    else if(distanceGauche == distanceDroite) // ça risque d'être mais on ne sait jamais 
    {
	Move(DROITE);
	delay(300);
    }
}

//********************************************************************************************


/********************************************************************************************

				represente mon onglet capteur de distance dans le programme

********************************************************************************************/

// géneration de l'impultion de 50µs pour commencer la détéction 
//********************************************************************************************

void capteurDistanceSetup(void)
{

    digitalWrite(PIN_IN_CAPTEUR_DISTANCE, LOW); // on est sur de démarer à l'état bas
    digitalWrite(PIN_IN_CAPTEUR_DISTANCE, HIGH);
    delayMicroseconds(50);
    digitalWrite(PIN_IN_CAPTEUR_DISTANCE, LOW);

}

//********************************************************************************************

//traitement de la sortie du capteur
//********************************************************************************************

int calculDistance(void)
{
    long dureeImpultion = pulsIN(PIN_OUT_CAPTEUR_DISTANCE, HIGH, 30000);
    // 30000 sert à quiter l'attente au bout de 30000µs (30ms) si il n'y a pas d'impultion

    return dureeImpultion / 58; // permet d'avoir la distance en CM
}

//********************************************************************************************




alors, explication du code :

Si vous êtes actif sur ce forum (et donc ce site) vous avez dû remarquer que j'ai unpeu pomper le code de roby, mais j'ai essailler de le modifier, un peu quand même. Je trouve vraiment que ce code (celui fait par robotcop) est trés bien construit et ce comprend facilement.

Pour la partie capteur de distance, je pense que ceux qui utilise les capteurs de distance infrarouge (et ne savent utiliser que ça) non pas dû bien comprendre... en faite mon capteur est un SFR 05, et pour le faire fonctionne, il faut :

- Sur la pin IN (je ne sais plus le numéro) ou autrement appeler TRIG, il faut envoyer une impulssion (supérieur à 10µs) pour commencer une détéction d'obstacle. En gros dès que le capteur recevra ce TRIG en entrée, il va commencer à entreprendre la détéction d'obstacle, il va faire ceci :

- l'émetteur va envoyer un signal sonnor (à 40khz il me semble) et le récépteur va attendre de récupérer ce même signal. Pendant ce temps, le capteur "compte" le temps mis pour recevoir le signal sonnor. Le capteur envéra en sortie une durée d'impulsion qui d'épendra de ce temps, et donc qui dépendra de la distance !

- Donc sur la pin OUT nous allons récuperer l'impulsion générer par le capteur, sachant que :

la vitesse du son est de 340m/s, donc 1m /(1/314)s, donc 1cm/29µs
et que le son effectue un allez et retour, (donc /2) on aura : distance(en cm) = duréeImpulssion(en µs) / 29(en µs/cm) / 2

Voila pour l'explication (peut être laborieuse) de l'utilisation du capteur. et du code... je pense que le code parle de lui même, pas besoin de déblatérer trop longtemps à son sujet.

Donc il ne me réste plus qu'a assembler tout ça, ça me prend du temps parce que je veux faire les choses proprement, mais j'arrive bientôt à la fin de ma premiére partie ! à savoir évitement d'obstacle.

Je vais revenir sur ce que j'avais poster la derniére fois, je fait faire la commande à distance avant le module suiveur de ligne. Je pense que je vais me tourner vers un shield wifi, et j'aimerais bien savoir comment cela fonctionne ... Si quelqu'un pouvais me faire un petit cours accéléré dessus, (je profite des utilisateur de ce forum plutôt que d'aller chercher des info sur google, mais on est la pour s'endraider, er j'ai pas forcemement le temps, mon chassit me bouffe tout le temps dont je dispose mdr), ça serais sympa :)/>/>

En attendant, j'attend vos commentaire ( et réponses ) j'en est pas encore eu j'étais déçus :(/>/> ...

voila voila, bon bricolage à tous et à bientôt. (ce soire pour les photo du chassit xD)

#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 237 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é 25 avril 2013 - 03:58

Rien à redire, belle présentation =) Vivement les photo du robot ;)
Je te souhaite une bonne continuation ;)

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 ! 

 

Les réalisations de Mike118  

 

 

 


#4 shinxy

shinxy

    Nouveau membre

  • Membres
  • 8 messages
  • Gender:Male
  • Location:ile de france

Posté 25 avril 2013 - 08:31

Comme promis, voila les photos du chassie, les servo moteurs sont déjà montés.2013-04-24 19.24.39.jpg 2013-04-24 19.24.52.jpg 2013-04-24 19.28.21.jpg

#5 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 041 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 25 avril 2013 - 09:45

Bon boulot !
 
 
 

#6 shinxy

shinxy

    Nouveau membre

  • Membres
  • 8 messages
  • Gender:Male
  • Location:ile de france

Posté 26 avril 2013 - 07:53

Merci beaucoup microrupteurman2 !

Je fait juste un petit up sur ce projet, pour connaitre unpeu vos idées sur la façons de procéder pour rajouter une commande wifi à mon robot, merci de répondre, toutes vos idées m'intéresse sachant que je n'est jamais utiliser le wifi avec arduino.

Bon bricolage à tous, et à bientôt.




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

0 members, 0 guests, 0 anonymous users