Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ros arduino

code pour ultrason HC-SR04

Sujet résolu
    10 janvier 2018 à 11:16:07

    Bonjour,

    Dans le cadre d'un projet d'ecole , je dois dans un premier temps faire un code qui fonctionne sur Ros Arduino, mais depuis je galère. Je ne sais pas si le problème vient du code ou de implémentation dans ros arduino .

    Voici mon code:

    #include <ros.h>
    #include <ros/time.h>
    #include <sensor_msgs/Range.h>
    
    ros::NodeHandle  nh;
    
    sensor_msgs::Range range_msg;
    ros::Publisher pub_range( "sonar", &range_msg);
    //Je définis les numeros de pin
    char frameid[] = "sonar";//On définie les frameid sting
    int echoPin = 9; 
    int trigPin = 8; 
    
    //Définition des variables
    float getRange_Ultrasound(){
    
    float duration, cm; 
    //On initialise trigPin
    	digitalWrite(trigPin, LOW); 
    	delayMicroseconds(2); 
    //Règle le trigPin sur HIGH pendant 10 micro secondes
    	digitalWrite(trigPin, HIGH); 
      	delayMicroseconds(10); 
      	digitalWrite(trigPin, LOW); 
    //Lit echoPin, renvoie le temps de propagation 
    //de l'onde sonore en microsecondes
      	duration = pulseIn(echoPin, HIGH); 
    //Calcule de la distance
    	float m = (duration*0.034)/2;
      return m ;   //temps = distance/vitesse
    //vitesse du son = 340m/s ou 0.034cm/microseconde
    }
    
    void setup() { 
    //Initialisation des noeuds et message publisher
    	nh.initNode();
    	nh.advertise(pub_range);
    
    //Description du range_msg
     	range_msg.radiation_type = 	    		sensor_msgs::Range::ULTRASOUND;
    	range_msg.header.frame_id =  frameid;
      	range_msg.field_of_view = 0.1;  
      	range_msg.min_range = 0.0;//valeur min
     	 range_msg.max_range = 5.0;//valeur max
    //Réglage du mode digital I/O
    	pinMode(trigPin, OUTPUT); 
    	pinMode(echoPin, INPUT); 
    } 
    long range_time;
    void loop() { 
    //échantillon du range data à partir du sonar
    //et plublication the valeur du range
    if ( millis() >= range_time ){
         
        range_msg.range = getRange_Ultrasound();
        range_msg.header.stamp = nh.now();
        pub_range.publish(&range_msg);
        range_time =  millis() + 50;
      }
      
      nh.spinOnce();
    } 


    -
    Edité par HermannOuabo 10 janvier 2018 à 11:16:48

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      10 janvier 2018 à 19:46:21

      Quel problème ?

      • Partager sur Facebook
      • Partager sur Twitter

      Ros arduino

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown