Aller au contenu


Photo
- - - - -

Programme ROS Arduino


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

#1 Fsociety

Fsociety

    Nouveau membre

  • Membres
  • 35 messages
  • Gender:Male

Posté 31 juillet 2020 - 10:25

Bonjour,

 

J'ai écrit un petit programme tout bete histoire de voir comment on pouvait utilliser ROS avec Arduino a l'aide de rosserial, et du coup j'aimerais bien avoir votre avis sur ce que j'ai fait et si c'est la bonne facon de faire s'il vous plait.

 

Ce que le programme fait  :

 

Programme écrit sur l'IDE Arduino :

 

- Je récupère la durée d'impulsion d'un capteur ultrason HC-SR04.

- Je publie cette donnée dans un topic nommé "sensorDistance"

 

Programme écrit sur mon IDE C++ (Clion):

 

- Je sub au topic "sensorDistance" afin de récuperer la durée d'impulsion publié par le MC Arduino.

- J'effectue un calcul pour connaitre la distance de l'obstacle.

- Je publie cette distance dans un topic "motorSpeed"

 

- En fonction de la distance je décide soit d'avancer soit de tourner a droite.

- Ayant un tableau PWM[2] (car il y'a deux moteurs), si le robot avance je met les valeur a PWM[0] = 150 ,PWM[1] = 150, sinon je met PWM[0] = 150 , PWM[1] = 0

- Je publie le tableau PWM dans un topic nommé "motorControl"

 

Programme écrit sur l'IDE Arduino :

 

- Je sub au topic " motorControl" afin de récuperer le tableau PWM.

 

- Et j'appelle la fonction "avancer" ou "tournerAdroite" en attribuant le bon PWM au moteurs.

 

 

 

Je vais juste mettre le code écrit sur l'IDE Arduino car c'est la ou je suis le moins expérimenté:

#include <ros.h>
#include <std_msgs/Empty.h>
#include <std_msgs/Float64.h>
#include <std_msgs/Float64MultiArray.h>

// Motor A

int enA = 3;
int in1 = 2;
int in2 = 4;


// Motor B
int enB = 5;
int in3 = 6;
int in4 = 7;


// defines pins numbers
const int trigPin = 11;
const int echoPin = 12;

ros::NodeHandle  myNode;
std_msgs::Float64 pulseDuration;



void forward(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void backWard(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void turnRight(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void motorCallBack(const std_msgs::Float64MultiArray& PWM){
  Serial.print("PWM1=");
  Serial.println(PWM.data[0]);
  Serial.print("PWM2=");
  Serial.println(PWM.data[1]);
  if(PWM.data[0] > 0 && PWM.data[1] > 0){
    forward(PWM);
  }else{
    turnRight(PWM);
  }
}

ros::Subscriber<std_msgs::Float64MultiArray> subscriber("motorControl",&motorCallBack);
ros::Publisher publisher("sensorDistance",&pulseDuration);

void setup()
{ 
  
  pinMode(enA,OUTPUT);
  pinMode(enB,OUTPUT);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);

  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  
  myNode.initNode();
  myNode.subscribe(subscriber);
  myNode.advertise(publisher);
  
  Serial.begin(57600);
}

void loop()
{  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  pulseDuration.data = pulseIn(echoPin, HIGH);

  publisher.publish(&pulseDuration);
  myNode.spinOnce();
  delay(1000);
}

 

Merci.



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 785 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é 31 juillet 2020 - 06:01

Sur le principe ça à l'air pas mal. ( comme exemple pour apprendre ) 

Si on regarde en détail => Attention à ton appel de analogWrite dans ta fonction " turnRight " . AnalogWrite attend une valeur positive pas négative ... Donc tu as quelque chose de plus à faire ... 

Au delà de ça si on prend du recule utiliser Ros pour faire ce genre de truc c'est sortir un bazooka pour tuer une mouche ^^ Si tu as déjà le matériel "arduino + châssis " tu peux " tester la logique " sans passer par ROS pour le moment =) 

 

Après c'est sur que si tu passe par ROS dès maintenant tu pourras faire pas mal de chose ensuite que tu ne peux pas faire juste avec une arduino =)


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  

 

 

 


#3 Fsociety

Fsociety

    Nouveau membre

  • Membres
  • 35 messages
  • Gender:Male

Posté 31 juillet 2020 - 08:03

Salut Mike !

 

Merci pour ta réponse :ignat_02:.

 

Enfaite c'est parce que je veut apprendre a utiliser ROS avec un micro contrôleur, bien sure l'idée plus tard c'est de réaliser quelque chose de plus sérieux et plus complexe.

 

J'en profite au passage, a ton avis une fois que j'ai appris les notions de "bases" de ROS, vers quoi dois je me tourner ? Dois je apprendre TF, Gazeboo, Rviz , URDF...etc ? et dans quel ordre ?

 

Bon Week end !



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 785 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é 31 juillet 2020 - 08:49

Oula, 

Je ne suis malheureusement pas un pro de ROS. 
Je connais les bases / le concept général. Mais j'ai toujours trouvé ça super usine à Gaz et je ne me suis jamais réellement lancé sur le sujet... 
Mais bon peut être que je vais me lancer avec toi cette fois ci ;) Surtout que je souhaite permettre de coupler " ROS " avec mon projet Vigibot.com, donc faudrait bien que je me mette sérieusement à ROS à un moment donné ;) 

En tout cas je peux quand même répondre à ta question de manière générale avec mon avis personnel : 

Selon moi on apprend jamais aussi vite et bien qu'en pratiquant sur un cas concret qui nous intéresse ! =) 

Au delà d'apprendre pour apprendre, quel est ton projet? 

 

En définissant ce que tu souhaite faire en cherchant à le faire, tu vas tomber sur ce qu'il faut que tu apprennes en premier pour réussir à réaliser ton objectif :) 
Je peux me tromper mais personnellement je ne suis pas sûr qu'il y ait un seul ordre précis pour apprendre les choses. Je pense que le meilleur ordre c'est celui qui te convient ;) Et de toute façon à l'usage tu verras bien vite ce que tu as besoin d'apprendre ! =) 


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  

 

 

 


#5 Fsociety

Fsociety

    Nouveau membre

  • Membres
  • 35 messages
  • Gender:Male

Posté 01 août 2020 - 05:45

Tu as raison !

 

Merci pour tes conseils :D



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 785 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é 01 août 2020 - 06:33

Du coup quel est ton premier "petit " projet  que tu souhaite mettre en oeuvre ? =) 

Un robot roulant ? quel sera son objectif ? Faire de l'évitement d'obstacle ? 
Du coup quitte à passer par ROS s'intéresser à la création de carte à la localisation et au path planning ? 

Le faire pour de vrai ? Ou d'abord en simulation ? 


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  

 

 

 


#7 Fsociety

Fsociety

    Nouveau membre

  • Membres
  • 35 messages
  • Gender:Male

Posté 02 août 2020 - 11:52

Disons que c'est un projet composé de plusieurs projets en quelque sortes.

 

Je vais essayer de réaliser un robot avec des bras et une tète fixé a une base mobile.

 

Le robot n'a pas vraiment d'objectif précis, du moins pour l'instant mais en quelques sortes je vais essayer de faire/voir plusieurs thématiques.( Robotique mobile,Modèle géométrique directe et inverse,PID,évitement d'obstacles,reconnaissance d'objet/visage , reconnaissance sonore..etc).

 

Donc autant dire que ça risque de me prendre beaucoup de temps et ça dépendera de mes moyens financiers :lol:

 

Du coup j'essaye d'abord d'avoir une vision globale de ce qu'il faut que j’apprenne et les choses que je doit prendre en compte, puis je commencerai par étape c'est a dire commencer d'abord par réaliser la base mobile puis les bras puis la tête et implémenter les algorithmes l'un a près l'autre.

 

Je ne connais pas encore les notions de path planning ou la création de carte de localisation je vais y jetter un coup d’œil !

 

Si j'ai le temps je vais essayer de faire pour de vrai et pourquoi pas en simulation aussi !



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 785 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 2020 - 08:47

Du coup hésite pas à partager tes avancées au fur et à mesure. 
Genre tu peux créer un " Blog " https://www.robot-ma...om/forum/blogs/ si tu veux =). 
Ou garder l'idée d'un sujet dédié comme celui ci =).

Ce genre de chose est autant utile pour les autres que pour toi :) En expliquant ce que tu as appris et compris ça te permet de mieux comprendre et de plus facilement intégrer ce que tu apprends. Et si tu as des questions des personnes comme moi au d'autres membres pourront te faire des remarques ou te donner des conseils pour avancer ;)


Bref bonne continuation pour la suite j'ai hâte de voir ce que ça va donner ;) 

Pour ce qui est de la cartographie, et de la localisation il y a cet exemple ( mais sans ROS ) qui illustre un peu la chose :) 


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  

 

 

 


#9 Fsociety

Fsociety

    Nouveau membre

  • Membres
  • 35 messages
  • Gender:Male

Posté 04 août 2020 - 06:02

Du coup hésite pas à partager tes avancées au fur et à mesure. 
Genre tu peux créer un " Blog " https://www.robot-ma...om/forum/blogs/ si tu veux =). 
Ou garder l'idée d'un sujet dédié comme celui ci =).

Ce genre de chose est autant utile pour les autres que pour toi :) En expliquant ce que tu as appris et compris ça te permet de mieux comprendre et de plus facilement intégrer ce que tu apprends. Et si tu as des questions des personnes comme moi au d'autres membres pourront te faire des remarques ou te donner des conseils pour avancer ;)


Bref bonne continuation pour la suite j'ai hâte de voir ce que ça va donner ;) 

Pour ce qui est de la cartographie, et de la localisation il y a cet exemple ( mais sans ROS ) qui illustre un peu la chose :) 

 

D'accord pas de soucis ! merci pour la vidéo :D






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

0 members, 0 guests, 0 anonymous users