Synchronisation d'instructions entre 2 machines

Fermé
tiblop - Modifié par tiblop le 20/01/2016 à 12:55
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 - 25 janv. 2016 à 19:05
bonjour , je voudrais synchroniser 2 instructions sur 2 machines differentes ( beaglebone, debian linux )


En gros :
J'ai 2 ultra sonic range finder . 1 envois le burst et l'autre le recoit. Chaque sonar et sur une machine differente.
Le problème est que je dois dire a la machine 2 que le sonar a été envoyé par la machine 1 au moment EXACT a la milliseconde prés pour qu'il puisse calculer la distance en fonction du temps.

Pour permettre la sychcronisation j'ai un module bluetooth sur chaque machine et un module wifi sur chaque machine.

J'ai essayé des MILLIARD de solutions, parmis tant d'autres :
- décider d'un temps d'envoi et envoyer ce temps via bluetooth à la machine 2 et lancer les deux commandes à la meme heure ( milliseconde prés) mais j'ai trop d'incertitude sur l'heure, sur le checkage de l'heure etc...

- utiliser ros et son partage de topic mais pas assez précis

- calibrer via une distance connue avant et ensuite envoyer les instructions toutes les 70ms des deux cotés mais le temps de sleep sur linux est trop incertain...

J'avoue que je suis bloquée la, mais plus gros problemes sont :
- time.sleep trop incertain
- temps d'envoi du message bluetooth incertain
- synchronisation du temps incertain...

any help???

Merci :D
A voir également:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
25 janv. 2016 à 13:01
Je ne sais pas si ça entre dans la case "incertaine" mais pourquoi ne pas synchroniser les deux horloges de tes systèmes via ntp, afin d'avoir la même heure sur les deux. Ensuite si ton paquet transporte un timestamp, il suffit de faire la différence entre la date de réception et ce timestamp.

Toutefois il faut garder à l'esprit que si tu veux un truc ultra précis, beaucoup d'incertitudes inhérentes au système seront difficile à résorber (temps de construction du paquet, temps d'émission du paquet, temps de réception et de traitement du paquets, etc...) bref tu n'auras pas aisément le délai de propagation pur.

Parenthèse :

En fait ton problème me fait penser à un truc qui a priori n'a rien à voir, un travail de recherche fait sur l'internet anycast. Je ne sais pas si ça va t'intéresser ou t'inspirer, mais j'essaye de t'expliquer brièvement. L'idée consiste à faire, à partir d'un point du réseau, des mesures de délai vers une adresse cible (avec un ping). De ce délai, on déduit une borne supérieure sur une distance (car l'information se propage à une vitesse inférieure à celle de la lumière). Du coup, dans cet échantillon, la mesure la plus pertinente est le délai minimal, car les deux machines sont supposées fixes et la vitesse de propagation du paquet identique dans toutes les mesures. En effet, cette mesure correspond au cas où les délais parasites ont été les moins présents. Une telle approche permet donc de déduire une borne supérieure de l'écart entre les deux machines.
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
25 janv. 2016 à 19:05
Une solution : la machine 1 envoie un ping, la machine 2 répond par un pong la machine 1 reçoit le pong et calcul le temps qu'il a mis à arriver (puis transmet le résultat à la machine 2 si nécessaire).
On calibre la machine pour une distance (ainsi qu'une température et une humidité) connue et on a plus qu'a faire la différence pour les mesures suivantes.
Il faut pas se limiter à un ping mais faire le plus de mesures possibles et faire un traitement statistique.

A moins humble avis c'est fortement douteux d'utiliser des PC pour ça, un montage électronique dédié serait bien plus efficace (temps de réponse connu alors que le pc peut faire autre chose en même temps et avoir des temps de réponse extrêmement variables).

Sinon regarde si tu peux utiliser un noyau temps réel qui théoriquement peut assurer une latence connue.
0