Aller au contenu


mopi

Inscrit(e) (le) 30 juin 2011
Déconnecté Dernière activité juin 26 2012 11:14
-----

Sujets que j'ai initiés

code robot autonome

15 janvier 2012 - 09:33

Bonjour,
Je suis en train de réaliser un robot à apprentissage automatique basé sur la régression linéaire (Le robot n'est à la base pas programmé pour se déplacer dans une pièce mais après l'avoir guidé avec une télécommande il comprend les tensions qu'il doit envoyé dans ses moteurs en fonction des valeurs retournées par ses capteurs.)
Bref, tout d'abord, il faut que je sache programmé le robot de façon à ce qu'il se déplace dans une pièce tout seul (comme roby) pour après passer à la partie intelligence artificielle.
Mais voilà je bloque. Je sais que mes fonctions avancer,reculer,droite,gauche sont juste (j'ai fait un programme ou le robot effectue les déplacements que je lui demande). Je sais aussi que les capteurs ultrasons sont programmés correctement puisque qu'avec le serial monitor j'ai vérifié que les valeurs retournées étaient justes.
C'est dans ma fonction "if" que j'ai des doutes...et j'ai peur aussi que je me trompe quand j'essaye de retourner les valeurs des capteurs obtenues dans les différentes fonctions. Pourtant j'ai vérifié qu'elles sont bien supérieurs à la valeur que je test mais le robot tourne sur lui même à droite.
Voilà le code si quelqu'un pouvait m'aider.
Merci beaucoup

/*--------------------------------------------------------*/
/** Déclaration des prototypes des fonctions **/
/*--------------------------------------------------------*/

// Capteurs US
void requete();
int mesure_distance(char capteur);
int mesure_reponse(char capteur);
void affichage();

//Déplacement
void avancer(char a,char B);
void reculer(char c,char d);
void droite(char e,char f);
void gauche(char g,char h);


/*--------------------------------------------------------*/
/** Déclaration des constantes et variables blobales **/
/*--------------------------------------------------------*/
//capteurs US
const int capteurdroit=7;
const int capteurgauche=8;
long duree;
int distance_cm;
int distancedroite, distancegauche;

//Moteurs
const int E1 = 5; // contrôle la vitesse du moteur 1 (gauche)
const int E2 = 6; // contrôle la vitesse du moteur 2 (droite)
const int M1 = 4; //contrôle la direction (avancer ou reculer) du moteur 1 (gauche)
const int M2 = 7; //contrôle la direction (avancer ou reculer) du moteur 2 (gauche)






/*--------------------------------------------------------*/
/** Début du programme - Setup **/
/*--------------------------------------------------------*/
void setup() {
Serial.begin(9600);

//direction robot
pinMode(M1, OUTPUT); //met la pin du moteur 1 en sortie
pinMode(M2, OUTPUT); //met la pin du moteur 2 en sortie
pinMode(E1, OUTPUT); //met la pin de E1 en sortie
pinMode(E2, OUTPUT); //met la pin de E2 en sortie
//direction robot
}

/*--------------------------------------------------------*/
/** Boucle principale du programme **/
/*--------------------------------------------------------*/
void loop()
{
distancedroite=mesure_distance(capteurdroit); //recupere l'info de distance de l'obstacle du capteur droit
//Serial.println("capteur droit:");
//affichage(); //affiche cette distance

distancegauche=mesure_distance(capteurgauche); //recupere l'info de distance de l'obstacle du capteur droit
//Serial.println("capteur gauche:");
//affichage(); //affiche cette distance

if (distancegauche<20) //si un obstacle se presente à gauche
{
droite (100,100); //on tourne à droite
delay(400); //pendant 0,4 secondes
}

else if (distancedroite<20) //si un obstacle se presente à droite
{
gauche (100,100); //on tourne à gauche
delay(400); //pednant 0,4 secondes
}

else
{
avancer (130,130); //sinon on avance tout le temps
}
//delay(1000); //attend pour un affichage plus clair
}




/*--------------------------------------------------------*/
/** Fonctions relatives aux capteurs US **/
/*--------------------------------------------------------*/
int mesure_distance(char capteur)
{
requete(capteur); //envoie la demande au capteur
mesure_reponse(capteur); //recupere la distance mesurée
return distance_cm;
}


void requete(char capteur)
{
pinMode(capteur,OUTPUT);

digitalWrite(capteur, LOW);
delayMicroseconds(2); //delai d'attente au départ, au niveau 0
digitalWrite(capteur, HIGH);
delayMicroseconds(15); // delai de 15 uS, imposant un niveau '1' au capteur
digitalWrite(capteur, LOW);
}




int mesure_reponse(char capteur)
{
pinMode(capteur,INPUT);

duree=pulseIn(capteur,HIGH); // attend l'impulsion du capteur, et retourne sa durée en microseconde

//if(duree>30000) //test de la condition d'abscence d'obstacle
// duree=0;

distance_cm=duree/58;
return distance_cm;
}


void affichage()
{

// if(duree==0) // Si on a détécté precedemment qu'il n'y a pas d'obstacle, on l'affiche
// Serial.println("Pas d'obstacle!!!!!");

// else // Si non, on affiche la distance
// {
Serial.print(duree);
Serial.println("uS");

Serial.print(distance_cm);
Serial.println("cm");
// }
}



/*--------------------------------------------------------*/
/** Fonctions relatives aux moteurs **/
/*--------------------------------------------------------*/


void avancer(char a,char B) //avancer
{
analogWrite (E1,a); //PWM Speed Control a permet de changer la vitesse du moteur 1
digitalWrite(M1,HIGH); //M1 avance
analogWrite (E2,B);
digitalWrite(M2,HIGH); //M2 avance
}

void reculer(char c,char d) //reculer
{
analogWrite (E1,c); //PWM Speed Control
digitalWrite(M1,LOW); //M1 recule
analogWrite (E2,d);
digitalWrite(M2,LOW); //M2 recule
}

void droite(char e,char f) //tourner à droite
{
analogWrite (E1,e); //PWM Speed Control
digitalWrite(M1,HIGH);
analogWrite (E2,f);
digitalWrite(M2,LOW);
}

void gauche(char g,char h) //tourner à gauche
{
analogWrite (E1,g); //PWM Speed Control
digitalWrite(M1,LOW);
analogWrite (E2,h);
digitalWrite(M2,HIGH);
}

robot prevision

28 octobre 2011 - 09:57

Bonjour,
Je suis un étudiant qui possède peu de connaissance en robotique, j'ai seulement réalisé le robot roby mais je suis loin de maitriser le code.
Dans le cadre des TIPE dont le sujet est "prévision"(aléa,déterminisme,indédermination,risque,systèmes évolutifs,validation-écart)on voulait faire un robot détecteur d'obstacle mais ce sujet a été refusé pour cause de vision et non de prévision.

On a donc modifié le projet avec un robot qui évite les obstacles, en choisissant la direction en fonction de son historique. Il devient un système à apprentissage qui choisira la direction d'évitement (à droite ou à gauche) en fonction de ce qu'il a déjà rencontré. Connu en robotique sous le nom de réseaux de neurones et algorithme génétique d'apprentissage.
On ne sait pas encore si on fera un robot ou si on fera seulement une étude théorique car cela semble complexe mais très intéressant.
Pensez vous qu'un robot est réalisable?
Avez vous des conseils à me donner ou des liens vers des sites qui expliquent de zero comment cela fonctionne?
merci beaucoup
cordialement
mopi

robot prevision tipe

23 octobre 2011 - 03:49

Bonjour,
Dans le cadre des Tipe, j'aimerai réaliser un robot. Le sujet est Prévision(aléa,déterminisme,indétermination,risque,systèmes évolutifs,validation-écart).
Mon premier projet a été refusé :( je voulais faire un robot qui évite les obstacles et les trous et pour le fun faire une matrice a LED sur son dos qui écrit les mots "obstacles" ou "trous".
Seulement les responsable ont jugés que ce n'était pas de la prévision mais de la vision!!!Donc je dois changer de sujet mais je n'ai pas d'autre idée j'aimerai rester dans le domaine de la robotique.
Imaginons que je fasse un robot qui doit aller d'un point A à un point B. au milieu du parcours je le dévie légèrement de sa trajectoire et le but du robot est de recalculer le trajet pour aller au point B il doit donc corriger sa trajectoire..pensez vous que c'est dans le thème prévision et que c'est réalisable?
Avez vous d'autres idées s'il vous plait?
merci
cdt
mopi

roby capteur sharp

15 juillet 2011 - 08:20

Bonjour,

Voilà, cela fait bientôt 2 semaines que je tente de réaliser le robot roby mais je n'arrive pas à résoudre un problème.
Je suis arrivé jusqu'aux capteurs UPPD ils marchent parfaitement.
Mais la dernière étape qui consiste à utiliser un capteur IR sharp je n'y arrive pas je ne sais pas si c'est mon programme qui ne va pas ou si c'est que le capteur ne fonctionne pas (est ce que lorsque j'ai soudé les 3 fils j'ai grillé le capteur?)

voilà le bout de programme qui ne fonctionne pas (le robot recul et part à droite indéfiniment) comme s'il détectait un obstacle constemment et j'ai éssayé de changer la valeur 180 en 250 (il recule et va a droite 2 fois puis va tout le temps tout droit) et en 400 (il va tout le temps tout droit) :

void sharp()
{
int v = analogRead(4);
if (v >= 180) // si on est à moins de 10 cm d'un obstacle
{
move(ARRIERE); //on recule
delay(300);
move(DROITE); //puis on part sur la droite
delay(900);
}
else if (v >= 100) //sinon si on est à moins de 30 cm d'un obstacle
{
handleS(SERVOG, VMAX);
handleS(SERVOD, 0); // on ralentit simplement la roue droite pour engager un virage en douceur
delay(1500);
}
}


si quelqu'un voit d'ou peut provenir le problème je l'en remerci

Réalisation du robot Roby - carte arduino commande moteur

30 juin 2011 - 03:36

Bonjour à tous,

Je suis débutant et je voulais me lancer dans la réalisation du robot roby
J'ai récupéré toutes les pièces sur des vieilles voitures télécommandées.
Pour ce qui est des moteurs, je les ai récupéré sur un modèle d'une voiture qui avait 2 moteurs indépendant puisque la direction de cette voiture se faisait non pas par 2 roues avant directionnelles mais 2 roues arrières indépendantes. Voici le modèle http://img.2ememain.be/f/normal/81457264_1-voiture-telecommandee-ricochet.jpg

Les moteurs sont des Mabuchi 370

Mais voilà j'ai rencontré un problème que je n'arrive pas à résoudre depuis 1 semaine.

Les moteurs ne possèdent que 2 fils et non pas 3 comme sur le tuto de roby (site robotix)

Je ne sais donc pas comment faire mes branchements sur ma carte arduino pour pouvoir les piloter avec seulement 2 fils.
Quand je les branche je peux les faire tourner en même temps c'est tout mais je ne peux pas les arrêter autrement qu'en appuyant sur l'interrupteur.

Est ce qu'il faut absolument acheter des servomoteurs avec un 3ème fil de commande ou est ce qu'avec ces moteurs à 2 fils c'est possible?si oui est ce que le code proposé dans le tuto va changé?

merci beaucoup