Skip to main content

Command Palette

Search for a command to run...

Localiser

Identifier la position d’un objet qui émet un signal à l’aide de trois balises connues

Published
•5 min read•View as Markdown
S

Étudiant ingénieur des télécommunications. Je partage ici mes projets, mes expérimentations et mes articles autour du signal, de la programmation et de la technologie.

INTRODUCTION

Dans de nombreux domaines de l’ingénierie — télécommunications, IoT, géolocalisation, sécurité ou robotique — ou même dans la vie courante, on est confronté au même problème fondamental : localiser un objet ou une personne, ou pour être plus technique, localiser une source inconnue à partir de capteurs placés à des positions connues.

Dans cet article, je vais montrer comment il est possible d’identifier la position d’une source de signal en 2D en utilisant trois balises fixes, dont on connaît les coordonnées, ainsi que leur distance à la source.

Nous verrons :

  • Comment modéliser le problème mathématiquement,

  • Comment l’interpréter géométriquement,

  • Comment le résoudre numériquement,

  • Une petite implémentation et visualisation avec Python.

L’objectif n’est pas seulement d’obtenir un résultat, mais de comprendre le raisonnement de bout en bout.

1. Problème posé et motivation

Imaginons la situation suivante :

Une source émet un signal (radio, sonore, ultrason, etc.) et trois balises fixes reçoivent ce signal. À partir du temps de propagation ou de l’intensité reçue, chaque balise estime sa distance à la source :

  • Les coordonnées des balises sont connues

  • La position de la source est inconnue

Question : peut-on retrouver la position exacte de la source à partir de ces informations ?

Ce type de problème apparaît par exemple dans :

La localisation GPS (principe simplifié), les réseaux de capteurs, la détection d’émetteurs radio, la géolocalisation indoor, la surveillance ou la sécurité.

2. Modélisation du problème

Données connues

On dispose de trois balises fixes :

Balise A : A(xa, ya)

Balise B : B(xb, yb)

Balise C : C(xc, yc)

Chaque balise mesure sa distance à la source :

da : distance source–A

db : distance source–B

dc : distance source–C

Inconnue

La position de la source est notée : S(xs, ys)

Notre objectif est donc de déterminer xs et ys.

3. Interprétation géométrique

C’est ici que le problème devient intuitif.

Tous les points situés à une distance da de la balise A forment un cercle centré en A

De même pour les balises B et C

Autrement dit : la source se trouve sur le cercle de centre A et de rayon da, sur le cercle de centre B et de rayon db, et sur le cercle de centre C et de rayon dc.

Intersection des cercles

1 cercle → infinité de positions possibles

2 cercles → généralement 2 solutions possibles

3 cercles → une solution unique (en théorie)

La position de la source correspond donc à l’intersection des trois cercles.

4. Mise en équations mathématiques

La distance entre deux points dans le plan est donnée par la distance euclidienne.

On peut donc écrire le système suivant :

$$\begin{cases} x_s^2-y_s^2-2x_sx_A-2y_sy_A =(t_Av)^2-x_A^2-y_A^2 \\ x_s^2-y_s^2-2x_sx_B-2y_sy_B =(t_Bv)^2-x_B^2-y_B^2 \\ x_s^2-y_s^2-2x_sx_C-2y_sy_C =(t_Cv)^2-x_C^2-y_C^2 \end{cases}$$

Il s’agit d’un système d’équations non linéaires.

En théorie, on peut le résoudre analytiquement en soustrayant les équations deux à deux, mais en pratique — surtout en présence de bruit — il est plus robuste d’utiliser une méthode numérique.

Aperçu d’un cas idéal où l’on estime qu’il n’y a pas d’erreur sur les données :

Apres quelques bidouillage mathématiques, j’ai ceci :

On obtient le système suivant :

$$\begin{cases} x_s^2-y_s^2-2x_sx_A-2y_sy_A =(t_Av)^2-x_A^2-y_A^2 \\ x_s^2-y_s^2-2x_sx_B-2y_sy_B =(t_Bv)^2-x_B^2-y_B^2 \\ x_s^2-y_s^2-2x_sx_C-2y_sy_C =(t_Cv)^2-x_C^2-y_C^2 \end{cases}$$

Sous forme linéaire :

$$\begin{cases} x_s (x_B - x_A) + y_s (y_B - y_A) = D_{AB} \\ x_s (x_C - x_A) + y_s (y_C - y_A) = D_{AC} \end{cases} $$

$$D_{AB} = \frac{(x_B^2 - x_A^2) + (y_B^2 - y_A^2) - (t_B^2 - t_A^2)v^2}{2} $$

$$D_{AC} = \frac{(x_C^2 - x_A^2) + (y_C^2 - y_A^2) - (t_C^2 - t_A^2)v^2}{2}$$

Sous forme matricielle avec le déterminant :

$$\begin{pmatrix} x_B - x_A & y_B - y_A \\ x_C - x_A & y_C - y_A \end{pmatrix} \begin{pmatrix} x_s \\ y_s \end{pmatrix} = \begin{pmatrix} D_{AB} \\ D_{AC} \end{pmatrix} $$

$$\Delta = (x_B - x_A)(y_C - y_A) - (x_C - x_A)(y_B - y_A)$$

Expressions finales de la solution :

$$x_s = \frac{D_{AB}(y_C - y_A) - D_{AC}(y_B - y_A)}{\Delta} $$

$$y_s = \frac{(x_B - xA)D{AC} - (x_C - xA)D{AB}}{\Delta}$$

Implémentation et illustration avec python :

Code et outils utilises disponible sur mon repos GitHub suivant : https://github.com/Yansahka/localize.git

On se rend compte que l’idée est là…

5. Résolution numérique (moindres carrés)

Revenons à la réalité (v-v)

L’idée est la suivante :

  • ]On suppose une position estimée (x, y)

  • On calcule les distances entre ce point et les balises

  • On compare ces distances aux distances mesurées

  • On ajuste (x, y) pour minimiser l’erreur globale

On définit donc une fonction d’erreur :

$$E(x,y)= \begin{vmatrix} \sqrt{(x-x_A)^2+(y-y_A)^2} & -d_A \\ \sqrt{(x-x_B)^2+(y-y_B)^2} & -d_B \\ \sqrt{(x-x_C)^2+(y-y_C)^2} & -d_C \end{vmatrix}$$

Le but est de trouver (x, y) qui minimise cette erreur.

6. Implémentation et visualisation en Python

Voici une implémentation simple utilisant scipy.optimize.

Pour mieux comprendre, on peut représenter :

Les balises,

Les cercles de distance,

La position estimée de la source.

Cette visualisation permet de voir clairement l’intersection des cercles et la cohérence de la solution obtenue.

7. Résultats et limites

Résultats

La méthode permet de localiser correctement la source

Elle est robuste même avec de légères erreurs de mesure

Elle est facilement généralisable à plus de trois balises

Limites

Les mesures de distance sont souvent bruitées

Les balises ne doivent pas être alignées

En présence de fortes erreurs, la solution peut être approximative

9. Ce que j’ai appris

Ce projet m’a permis de comprendre :

  • Le lien direct entre géométrie et traitement du signal,

  • L’importance de la modélisation avant le code,

  • La différence entre une solution théorique et une solution exploitable,

  • L’intérêt des méthodes numériques dans des problèmes réels.

CONCLUSION

Localiser une source de signal à partir de balises connues est un problème fondamental en ingénierie. À travers cet article, nous avons vu comment passer : d’un problème réel, à une modélisation mathématique, puis à une implémentation concrète et visualisable.

Ce travail peut être étendu à :

La localisation en 3D,

L’ajout de plus de capteurs,

L’intégration de filtres pour réduire le bruit, ou des applications temps réel.