Aller au contenu


Photo

Roby version 2


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

#1 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 05 juillet 2011 - 05:28

Voila j'ai pu réussir a effectuer le tutoriel Roby! et pour maîtriser d'avantage le code c++ j'ai l'idée de passer a la version deux!
La version deux est de virer les bloc de contact et de rajouter 3 capteur sharp sur le devant. 1 capteur en face et un autre a gauche et un autre a droite pour améliorer d'avantage la directions.
j'ai modifier le code pour installer deux autre capteur sharp, j'aurai aimer avoir l’avis des experts pour voir si j'ai fait des erreurs ou des conseils, étant donner que je suis pas un grand expert de la programmation en c++
Voici le code que j'ai modifier:
#include <Servo.h>
 
#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3
 
#define SERVOG 1
#define SERVOD 0
 
#define SHARPG 5  
#define SHARPD 3
 
#define SHARP 4
 
#define VMAX 5
 
Servo servog;
Servo servod;
 
int vLdr = 5;
 
int getNeutral(int s)
{
  if(s == SERVOG)
    return 86;
  else
    return 84;
}
 
 
void handleS(int s, int speed)
{
  //Vitesse :
  // 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
  int tab[6] = {0,1,3,8,10,30};
  int pos = getNeutral(s);
 
  int acc;
  if (speed < 0)
    acc = - tab[abs(speed)];
  else
    acc = tab[speed];
   
  if(s == SERVOG)
      servog.write(pos += acc);
  else
      servod.write(pos -= acc);
}
 
 
void move(int direction)
{
  int m1 = 0, m2 = 0;
  switch(direction)
  {
    case DROITE: m1 = 1; m2 = -1; break;
    case GAUCHE: m1 = -1; m2 = 1; break;
    case AVANT: m1 = 1; m2 = 1; break;
    case ARRIERE: m1 = -1; m2 = -1; break;
  }
  handleS(SERVOG, m1*VMAX);
  handleS(SERVOD, m2*VMAX);  
}  
 

void sharp()
{
   int v =  analogRead(4);
      if (v >= 180)
      {
        move(ARRIERE);
        delay(300);
        move(DROITE);
        delay(900);
      }
      else if (v >= 100)
      {
        handleS(SERVOG, VMAX);
        handleS(SERVOD, 0);
        delay(1500);
      }
}
void sharpD()
{
   int v =  analogRead(3);
      if (v >= 90)
      {
        move(ARRIERE);
        delay(300);
        move(GAUCHE);
        delay(900);
      }
      else if (v >= 50)
      {
        handleS(SERVOD, VMAX);
        handleS(SERVOG, 0);
        delay(1500);
      }
}
void sharpG()
{
   int v =  analogRead(3);
      if (v >= 90)
      {
        move(ARRIERE);
        delay(300);
        move(DROITE);
        delay(900);
      }
      else if (v >= 50)
      {
        handleS(SERVOG, VMAX);
        handleS(SERVOD, 0);
        delay(1500);
      }
}
void setup()
{
  Serial.begin(9600);
  servog.attach(10);
  servod.attach(9);
  move(AVANT);
}
 
void loop()
{
     sharp();
     sharpD();
     sharpG();
     move(AVANT);
    delay(100);
}


#2 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 07 juillet 2011 - 09:03

Ajoute les balises pour insérer du code ( [code=auto:0] & [ /code] ). Sinon c'est illisible et ça ne donne franchement pas envie. ;)

Esprit
*Rêve d'en caser un dans un robot*


#3 George Degrop

George Degrop

    Membre

  • Membres
  • 18 messages
  • Gender:Male

Posté 07 juillet 2011 - 10:15

même remarque que Esprit ...
sans indentation, c'est super pénible à lire.
et un petit lien vers le tuto aiderait à mieux cerner ton projet.

à part ça, sans être un expert, je ne vois pas d'erreur de code mais peut-être des idées d'amélioration :

par exemple puisque que tu as 3 capteurs, tu peux améliorer la fonction sharp() pour que ton robot tourne automatiquement vers le coté ou le mur est le plus éloigné plutôt que toujours du même coté. Je te laisse chercher le code mais si tu bloque, je pourrais t'aider à l'écrire.

Autre remarque : ton code ne prévoit pas de "tunnel" : si tu robot passe entre deux planches, il va faire des zigzags entre les deux.
Là c'est un peu plus compliqué à programmer (je pense) mais si ça t’intéresse d'essayer de trouver un algo pour qu'il s'adapte à cette situation, je pourrais essayer de t'aider

#4 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 08 août 2011 - 05:18

Désoler! je me suis absenter pour un petit moment pour affaire! Je suis pas trop au faite de la présentation des msg sur le forum! si quelqu'un pouvait me donner un liens! j'ai etudier un peut le c!!! et je croit que je peut ameliorer mon codes!

#5 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 25 août 2011 - 06:39

Voici le lien du tutoriel dans le quelle je suis partie pour faire des modifications: Mon lien

je me suis inspirer de se tutoriel car je connait pas grand chose au langage c++, suite a cela j'ai fait des progrès considérable dans la compréhension du langage c++

voici mon nouveau code que j'ai améliorer:
#include <Servo.h>

#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3
#define SHARPARRIERE 6
#define SHARPGAUCHE 5
#define SHARPDROITE 4
#define SERVOG 1
#define SERVOD 0

#define VMAX 5
// PARTIE GESTION SERVOMOTEUR
Servo servog;
Servo servod;

int vLdr = 5;

int getNeutral(int s)
{
  if(s == SERVOG)
    return 86;
  else
    return 84;
}


void handleS(int s, int speed)
{
  //Vitesse :
  // 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
  int tab[6] = {
    0,1,3,8,10,30  };
  int pos = getNeutral(s);

  int acc;
  if (speed < 0)
    acc = - tab[abs(speed)];
  else
    acc = tab[speed];

  if(s == SERVOG)
    servog.write(pos += acc);
  else
    servod.write(pos -= acc);
}

// direction du robot
void move(int direction)
{
  int m1 = 0, m2 = 0;
  switch(direction)
  {
  case DROITE: 
    m1 = 1; 
    m2 = -1; 
    break;
  case GAUCHE: 
    m1 = -1; 
    m2 = 1; 
    break;
  case AVANT: 
    m1 = 1; 
    m2 = 1; 
    break;
  case ARRIERE: 
    m1 = -1; 
    m2 = -1; 
    break;
  }
  handleS(SERVOG, m1*VMAX);
  handleS(SERVOD, m2*VMAX); 
} 
//gestion de la direction par le biais de capteur sharp
//détection generale
void sharpArriere()
{
  int v = analogRead (5) + analogRead (4)+ analogRead (3);
  if (v >= 800)
  {
    move(ARRIERE);
    delay (500);
  }
  else if (v>=500)
  {
    move (ARRIERE);
    delay (500);
    move (GAUCHE);
    delay (500);
  }
} 

void sharpGauche ()
{
  int v = analogRead  (5) + analogRead (4);
  if (v >= 800)
  {
    move (DROITE);
    delay (500);
  }
}

void sharpdroite ()
{
  int v = analogRead (3) + analogRead (4);
  if (v >= 800)
  {
    move (GAUCHE);
    delay (500);
  }
}

void setup()
{
  Serial.begin(9600);
  servog.attach(10);
  servod.attach(9);
  move(AVANT);
}

void loop()
{
  sharpGauche ();
  sharpArriere();
  move(AVANT);
  delay(100);
} 

voila mon derniers travaille en programmation, si quelqu'un a des idée pour améliorer d'avantage le code je suis preneurs.
Mon prototype de robotique fonctionne comme je l'avais demander il évite des obstacles.
Prochaine étape: je voudrait paramétrer une trajectoire en allant d'un point A a un point B mes la je sais pas du tout comment mi prendre! Si des personne ont des conseilles a mes donner je suis preneurs?
Des vidéos du robot seront disponibles prochainement
merci

#6 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 26 août 2011 - 11:08

voici une vidéo de la premier version du robot que j'ai construit:




Bientot la version deux!!!

#7 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 26 août 2011 - 12:14

voici la deuxièmement version de rody:






je vais bientôt passer à la version 3, dans la version 3 je vais encore améliorer la tête de détection! et je vais travailler pour programmer une trajectoire pour qui va du point A au point B tout en évitant les obstacles. mes j'ignore comme je puisse proceder pour l'instant!

#8 Nocebo

Nocebo

    Membre

  • Membres
  • 12 messages
  • Gender:Male

Posté 26 août 2011 - 12:37

Bonjour,
Je pense que pour ta version 3 de ton projet tu peux pour ton système de trajet :

- soit pré-rentré les mouvements à coordonnées
- soit faire un pathfinding (chercheur de chemin), pour cela tu peut utilisé un algorithme appelé A*, (je l'ai utilisé pour programmer un bot pour un jeu vidéo) et on décide donc de donné au robot un point A et un point B et celui-ci détermine le chemin le plus court pour l'atteindre.

Si j'ai dit une erreur, n'hésitez pas a me corrigé.

Nocebo

#9 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 26 août 2011 - 01:00

Sa m'interraise si tu connait pas un site ou je peut avoir des infos? merci d'avance

#10 Nocebo

Nocebo

    Membre

  • Membres
  • 12 messages
  • Gender:Male

Posté 26 août 2011 - 01:08

Voici le lien du site Algorithme A* que moi et mon équipe avons utilisé pour comprendre cet algorithme assez compliqué a la base (personnellement je ne fait que l'utilisé je n'ai pas essayé de le comprendre)

Mais cela devrait t'aider si ta démarche t'intéresse vraiment.

N'hésitez pas a me corriger si j'ai dis des âneries.

Nocebo.

#11 Black Templar

Black Templar

    Membre

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

Posté 26 août 2011 - 10:17

Salut !
Pour les algos de planification de trajectoire, tu en a tout plein, chacun avec leurs avantages et leurs défauts.
A* est pas mal, mais nécessite que tu connaisses la carte de ton environnement AVANT de lancer ton robot afin de planifier une trajectoire. Si tu te balades dans un environnement inconnu, c'est pas top.

Regarde cet article, il te donne un apperçu des avantages et des inconvénients de quelques algos de planif : http://www.ferdinandpiette.com/blog/2011/05/algorithmes-de-planification-de-trajectoires-bref-etat-de-lart/


Dans ton cas, je pense que les champs de potentiels seraient pas mal et facile à implémenter ! En plus, c'est un algo totalement réactif ! (pas besoin de stocker des valeurs en mémoire, d'avoir une représentation symbolique de l'environnement ou autre)
Ou plus complexe, si tu t'en sens le courage un algo de planif par logique flou. J'ai écrit une série d'article sur les système flou avec un exemple d'application de planification de trajectoire (3ème article de la série) : http://www.ferdinandpiette.com/blog/les-dossiers/dossier-la-logique-floue/

Par contre, la difficulté dans ton cas sera de te positionner ! Si tu veux aller d'un point A à un point B, il te faudra pouvoir mesurer la distance que tu as parcouru ! (avec des roues codeuses par exemple, regarde du côté de l'odométrie)

++
Black Templar

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


#12 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 27 août 2011 - 01:26

Merci pour vos réponse je vais étudier tous sa!!! J'ai une question!, que pouvez vous me dire sur les technologie gps liée en robotique? si vous connaissez des bons sites sur ceux sujet! car je vais étudier tous les technologie et en sélectionnée les meilleures.

#13 julkien

julkien

    Pilier du forum

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

Posté 28 août 2011 - 12:18

Merci pour vos réponse je vais étudier tous sa!!! J'ai une question!, que pouvez vous me dire sur les technologie gps liée en robotique? si vous connaissez des bons sites sur ceux sujet! car je vais étudier tous les technologie et en sélectionnée les meilleures.


Salut si tu veux utiliser un capteur gps a l'l'intérieur sa risque de pas tres bien marché. Il va rien capté. Enfin corriger moi si je me trompe!

#14 Astondb8

Astondb8

    Pilier du forum

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

Posté 28 août 2011 - 02:36

Salut si tu veux utiliser un capteur gps a l'l'intérieur sa risque de pas tres bien marché. Il va rien capté. Enfin corriger moi si je me trompe!


Non non, c'est tout à fait exact, les GPS ne permettent pas de localiser ce type de robot.

Tout d'abord, effectivement en intérieur impossible de recevoir les satellites.
D'autre part, la résolution du réseau GPS n'est que de 10m.
Il faut attendre que le système Européen soit opérationnel car il aura une résolution de 10cm.
Mais quoi qu'il en soit, même ce réseau ne fonctionnera pas en intérieur.

Cdlt
Yves

 


#15 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 28 août 2011 - 03:21

Attention avec les racourcis sur le GPS ^^
Certes, tout seul un GPS n'est précis qu'a 5/10metres, mais il y a des techniques pour améliorer ça comme le GPS différentiel par exemple, ou le RTK. Ces techniques permettent d'aller jusqu'a la 10aine de cm de précision dans les meilleurs implémentations.

Par contre on garde le probleme de capter les satellites a l'interieur.


Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.


#16 merlin25

merlin25

    Membre

  • Membres
  • 14 messages

Posté 29 août 2011 - 05:07

hola je vous corrige tous de suite ses pas la version définitif! c'est juste un prototype d'essaie qui il y a en vidéo! pour pouvoir acquerire des connaissances en robotique! avant de passer un model beaucoup plus gros et élaborer! le but ultime est un véhicule tout terrain autonome!




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

0 members, 0 guests, 0 anonymous users