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
× 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.