Je souhaiterais mesurer la distance entre 2 capteurs ultrasons fixés sur 2 robots, placés face à face sans qu'il y ait d'interférences et que les mesures ne se retrouvent erronés. Je souhaiterais savoir si quelqu'un aurait une idée pour remédier à ce problème. Voici ci-dessous le programme que j'ai fait:
<
#include <NewPing.h>
/-----( Declare Constants and Pin Numbers )-----/ #define TRIGGER_PIN 11 #define ECHO_PIN 10 #define MAX_DISTANCE 500 // Maximum distance we want to ping for (in centimeters).
//Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
#define TRIGGER_PIN1 4 #define ECHO_PIN1 5 #define MAX_DISTANCE1 500 // Maximum distance we want to ping for (in centimeters).
//Maximum sensor distance is rated at 400-500cm.
NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1, MAX_DISTANCE1); // NewPing setup of pins and maximum distance.
int DistanceCm;
int DistanceCm1;
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
delay(29);// Wait 100ms between pings (about 10 pings/sec). 29ms should be the shortest delay between pings.
DistanceCm = sonar.ping_cm();
Serial.print("Ping: ");
Serial.print(DistanceCm);
Serial.println(" cm");
delay(29);// Wait 100ms between pings (about 10 pings/sec). 29ms should be the shortest delay between pings.
DistanceCm1 = sonar1.ping_cm();
Serial.print("Ping1: ");
Serial.print(DistanceCm1);
Serial.println(" cm");
Bonjour,
Tu voudrais une réponse en moins de 10 minutes. Les bénévoles du forum n'étaient pas dans la cour avec l'arme au pied à t'attendre.
Avant toute chose tu devrais lire cette page.
@+
Si les robots communiquent alors il faut qu'ils se synchronisent pour ne pas se gêner.
Si les robots ne communiquent pas alors il faut lancer des acquisition avec un délais aléatoire entre 2 acquisitions pour limiter le risque de fausses mesures et traiter ensuite les dites données pour rejeter les résultats erronés.
Merci pour ta réponse. En fait ce que je souhaite faire dans un premier temps, c'est de mettre les 2 capteurs face à face et de mesurer la distance qui les sépare sans qu'elle soit brouillée. Le but étant de pouvoir rajouter un nombre x de robots dans une arène.
Ce que tu nommes 'capteur' est sans doute l'association d'un Emetteur et d'un Récepteur(capteur proprement dit)
Face à un autre robot équipé d'E/R d'ultra sons un récepteur de base ne peut distinguer entre :
-les échos des salves émises par lui (bons échos donnant la distance)
-les salves émises par l'autre. (faux echos ou 'brouillage' )
La réponse de fdufnews correspond tout à fait à ta problématique : si les émissions de salves ne peuvent être coordonnées (chacun son tour) il faut réduire le risque de collision (des salves) et apprendre à ton robot à éliminer les 'faux échos' qui pourront néammoins survenir.
La cohabitation non gérée de plusieurs E/R d'ultra sons dans un petit espace clos n'est pas une mince affaire !!!
Merci al1fch. Justement, à ce propos est-ce possible au niveau de la programmation sur Arduino de différencier les émissions afin d'obtenir une réception sélective, c'est-à-dire que le E/R ne reçoit que ce qu'il émet ?
Arduino ou pas c'est hors de portée physiquement avec les modules E/R ultra-sons habituels : les salves d'ondes émises ne sont pas différentiables (fréquence unique, durée fixe ,pas de modulation). De plus l'Arduino ne fait que déclencher l'émission d'une salve avant d'être informé du retour d'un echo (il ne pilote pas en détail de l'E/R)
Avec les SR-04 ou équivalents toute salve U/S de 40 kHz reçue, dans la fenêtre temporelle de réception définie par le module E/R est considérée comme un echo en retour d'émission.
Tu reçois tout (bons et faux échos) et fais le tri ensuite.......
En programmation un Arduino tu peux mémoriser x valeurs de distance consécutives et par exemple ne retenir que les cas cas où 3 ou 4 valeurs de distance consécutives sont égales ou raisonnablement proches.
Le 'faux echo donnera en général une valeur de distance identifiable comme 'intrus' au vu de la valeur 'atypique' de distance qu'il implique
D'autre filtrages sont imaginables (moyenne de x échantillons.....statistique....)
On est là sur le traitement/filtrage des données mentionné par fdufnews.
Je ne te cacherais pas que ton problème me semble insoluble simplement.
Ces capteurs ne sont pas du tout prévu pour fonctionner conjointement à plusieurs.
Il y a quand même un moyen de les différentier. Le premier envoie une salve de requêtes avec une fréquence de récurrence F1 et le deuxième à une fréquence de récurrence F2. Dès lors, si une fenêtre de réception peut être en correspondance avec l'autre capteur, les suivantes ne le seront pas. Une petite analyse de la cohérence des valeurs reçues permet de lever le doute.
ChPr:
Une petite analyse de la cohérence des valeurs reçues permet de lever le doute.
Bonjour,
J'ai déjà de gros doutes qu'on puisse discriminer à coup sur les bonnes et les mauvaises valeurs avec deux capteurs, mais avec plusieurs robots comme l'envisage bendra, ça me semble complètement impossible.
Hello
ce que ChPr veut te dire
robot 1 envoie 3 salves de mesure avec un temps de 100 ms entre chacune des salves.
soit à: 0ms, 100ms, 200ms
robot 2 envoie 3 salves de mesure avec un temps de 75 ms entre chacune des salves
soit à :0ms, 75ms, 150 ms
donc si le hasard fait que le robot 1 et robot 2 envoie leur première salve en même temps,
le résultat de la 1ere mesure risque d’être erroné
mais les salves suivantes ne pourront pas se perturber l'une l'autre.
il suffit ensuite de faire une analyse de cohérence entre les 3 résultat pour éliminer la mauvaise mesure si elle a eut lieu
C'est bien ce que j'avais compris et je persiste à dire que avec deux capteurs, la discrimination n'est pas sure à 100% (les robots se déplacent), mais avec n robots, ça me semble impossible.
kamill:
... J'ai déjà de gros doutes qu'on puisse discriminer à coup sur les bonnes et les mauvaises valeurs avec deux capteurs, mais avec plusieurs robots comme l'envisage bendra, ça me semble complètement impossible. ...
Vous n'êtes pas joueur, le déterminisme, c'est du passé, vive la stochastique
Merci pour vos réponses. J'ai oublié de vous préciser que nous ne disposons d'aucun moyen de synchronisation, c'est-à-dire, qu'un robot de plus pourrait être ajouté à n'importe quel moment dfgh et kamill
Qu'un robot puisse être ajouté à n'importe quel moment n'implique pas qu'ils ne puissent se synchroniser.
La synchronisation implique juste qu'il y ait un moyen d'échange entre les équipements et un protocole de communication. Le resynchronisation peut-être dynamique.
dans ce que j'ai compris de ce que disait ChPr
il ne faut pas qu'ils soient synchronisés, chaque robot à sa propre fréquence de "train de mesure"
robot 1 :100ms entre 2 mesures et en faire 3,4,5 à suivre puis vérifier la cohérence
robot 2 :25ms entre deux mesures et en faire 3,4,5 à suivrepuis vérifier la cohérence
robot 3 :33ms entre deux mesures et en faire 3,4,5 à suivrepuis vérifier la cohérence
etc...
chaque robot est indépendant et fait seul ses "trains de mesure" et ses controles
c'est bien le diable si deux robots pouvaient se synchroniser par accident.
Le problème c'est de les discriminer.
robot1 et 2 seront synchronisés régulièrement puisque tu as choisi un multiple entier dans ton exemple. Et si tu choisis des fréquences différentes il y aura des moments où ils seront en phase et d'autres non mais il faut les distinguer.
Et en plus, on a pas encore parlé des réflexions possibles.