Localiser un point d'accés wifi [soft] - Logiciels - Linux et OS Alternatifs
Marsh Posté le 24-06-2005 à 17:36:31
Calcul des coordonnées
Le calcul des coordonnées par triangulation peut seffectuer de plusieurs manières. Nous allons ici en décrire deux, la méthode de calcul des trois cercles et la méthode de calcul trigonométrique.Ayant choisis dimplémenter la deuxième dans notre programme, nous allons voir pourquoi.Commençons dabord par la méthode des trois cercles.
Méthode des trois cercles
Nous avons pensé tout premièrement à utiliser une technique issue de la sismologie. On peut lappeler la méthode des trois cercles. Les équations de cercle sont de la forme : x2 + ax+ y2 −by =R. Dans notre cas a et b sont les coordonnées relevées et R la puissance de réception relevée àpartir de ces coordonnées. Nous allons nous baser sur la figure ci-dessous pour nos explications.
Pour connaître lendroit où se trouve le point daccès dans un plan, symbolisé ici par le pointdintersection des trois cercles, il nous faut résoudre un système de deux équations issues de deux cercles, ici les cercles de centres P1 et P2. Une fois ce système résolu nous obtenons deux points qui sont en fait les points dintersections de nos deux cercles. Le point daccès peut se situer sur un de ces deux points.
Deux méthodes soffrent maintenant à nous pour déduire sur lequel des deux points se trouve le point daccés. Soit nous résolvons léquation du troisième cercle, ici le cercle de centre P3, soit nous calculons simplement la distance entre P3 et les deux points dintersection calculés précédemment. Le plus prés étant évidemment celui où se trouve le point daccès. Cette distance est symbolisée par la puissance du signa reçu au point P3.
Nous ne navons pas utilisé cette méthode dans notre programme. La principale raison est quil nous a été impossible de résoudre des systèmes déquations non linéaires. En effet nous avons fait le tour des librairies mathématiques disponibles sous licence GPL comme la GSL, Giac/Xcas, GiNaC,. . .mais aucune na pu nous aider pour notre problème.
A priori Wolfram Research, léditeur du logiciel Mathematica, fournit un environnement de programmation mathématique en C++ qui aurait pu nous aider mais nayant pu y accéder et surtout cet environnement nétant pas opensource nous avons abandonné cette méthode.
Méthode trigonométrique
La méthode trigonométrique est plus fastidieuse que la précédente. En effet nous nous basons principalement sur des calculs trigonométriques. Le problème par rapport à la précédente est quelle souffre dune imprécision variable selon les relevés, nous allons voir pourquoi et comment la rendre moindre. Nous ne détaillerons pas trop cette méthode, ne partant ici que pour un type de configuration de points donnée. Lintégralité du calcul est disponible dans le fichier source. Les calculs se font en trois temps, la figure ci-dessous servira de base à nos explications.
Étape 1 : trouver la distance entre P1 et P2, déduire les coordonnées du centre de cette droite
Le calcul des coordonnées du centre de la droite reliant P1 et P2 (point rose sur la figure) va nous permettre par la suite davoir un point de départ afin de déterminer les coordonnées possibles du point daccès. En effet avec cette méthode on place ce dernier dans une zone où le centre, ici h1, est placé perpendiculairement au centre de la droite reliant P1 et P2 avec ce que lon pourrait appeler la probabilité de présence. Il est possible de réduire le diamètre de cette zone, ce qui devient plus intéressant pour la localisation car plus la zone est petite plus le point daccès est prés de h1.
Soient x1, y1, x2, y2, xD, yD coordonnées respectives de P1, P2 et du centre de la droite reliant P1 et P2.
L =| x2 | − | x1 |
H =| y2 | − | y1 |
D = sqrt(L^2 + H^2)
xD = x1 + (|x1|+|x2|)/2
yD = y1 + (|y1|+|y2|)/2
Étape 2 : calculer limprécision
On connaît les distance t1 et t2 reliant P1 et P2 à h1 et h2. Ces distances sont en fait la puissance du signal relevés aux points P1 et P2. Nous pouvons ainsi en déduire limprécision que nous appellerons V
h1 = sqrt(t1^2+(D^2)/2)
h2 = sqrt(t2^2+(D^2)/2)
V = h1 − h2
Étape 3 : calculer les coordonnées de h1
Nous allons maintenant calculer les coordonnées de h1 cela va nous permettre davoir le point de référence à partir duquel lapproximation peut être vérifiée. La figure ci-dessous va nous permettre dappuyer nos calculs. Pour cela nous ramènerons les coordonnées de nos points sur laxe des abscisses comme sur la figure.
Nous connaissons h3, h2, h1 qui étaient symbolisés sur la figure précédente par D
2 , h1, et t2. l2 b2 sont quand à eux déduit par lapplication du théorème de Pythagore. Il ne nous reste plus qua calculer l1 b1 :
l1 = l2+h2/h3
b1 = b2+h2/h3
Connaissant l1 et b1 il est maintenant possible de calculer les coordonnées du point de référence r par rapport à h.
rx = hx − b1
ry = hy + l1
Marsh Posté le 24-06-2005 à 17:36:40
TODO:
- Automatiser la calibration des mesures
- Changer le mode de calcul et y intégrer des fonctions probabilistes.
Marsh Posté le 25-06-2005 à 10:58:30
j'ai pas de wifi, mais je salue la technique
Marsh Posté le 25-06-2005 à 11:03:31
C'est tres interessant, je l'installe et je teste tout de suite !
Edit: Premiere petite remarque, le README devrait se trouver dans le dossier (car la par exemple il s'est foutu dans mon /home), 1 fichier ca va, mais quand y'en a plusieurs c'est chiant
Et aussi pour fignoler l'archive s'appelle localisation et le dossier Localisation
erf jviens de me tapper une erreur de compilation (undefined reference)
Marsh Posté le 25-06-2005 à 11:16:40
Bravo.
Pas forcement utile dans la vie de tous les jours....mais c'est le type de topic qu'on garde en mémoire.....
Marsh Posté le 25-06-2005 à 11:19:14
Pour les calcul de coordonnées, regardes du côté des outils géographiques :
http://opensourcegis.org/
http://freegis.org/
Avec une interface GPS, ce sera parfait
Marsh Posté le 25-06-2005 à 14:24:51
j'ai vue ca aussi
http://rss.zdnet.fr/actualites/tel [...] htm?xtor=1
Marsh Posté le 25-06-2005 à 15:50:43
deather2 a écrit : C'est tres interessant, je l'installe et je teste tout de suite ! |
Je vais corriger le problème de l'archive ce soir
Sinon la compile plante sur quel fichier ? Tu peux me donner un peu plus de précision ?
vlack a écrit : Pour les calcul de coordonnées, regardes du côté des outils géographiques : |
isntit a écrit : j'ai vue ca aussi |
En fait la technique est justement de se passer du gps qui ne marche pas dans les batiments. Il y a encore pas mal de modifications à faire, notamment pour ce qui est de l'entrée des points pour plusieurs points d'accés à la fois et pas un comme actuellement.
Ce soft possède comme but principale de faire la cartographie des points d'accés d'un batiment, ce que l'on ne peut faire avec le gps
Marsh Posté le 25-06-2005 à 16:02:17
nodus a écrit : Je vais corriger le problème de l'archive ce soir |
Marsh Posté le 25-06-2005 à 16:13:48
nodus a écrit : On dirait que ça n'intéresse pas grand monde |
c'est génial pour faire son warlordz.
dès que j'ai mon laptop, j'utilise.
Marsh Posté le 25-06-2005 à 16:18:11
c'est quoi l'équation que tu trouves sans savoir résoudre pour la méthode des trois cercles ?
Marsh Posté le 25-06-2005 à 16:25:44
(x-a1)²+(y-b1)²=r1
(x-a2)²+(y-b2)²=r2
x²+y²-2.x.a1+2.y.b1+a1²+b1²-r1=0
x²+y²-2.x.a2+2.y.b2+a2²+b2²-r2=0
tu soustrait, t'as une droite qui passe par les deux points d'intersection des cercles
2.x.(a2-a1)+2.y.(b2-b1)+(-a2²-b2²+r2+a1²+b1²-r1)=0.
avec un autre cercle t'as ta 2e équation de droite
2.x.(a3-a1)+2.y.(b3-b1)+(-a3²-b3²+r3+a1²+b1²-r1)=0.
et zou, intersection des deux droites, point trouvé....
j'ai raté une étape ? parce que c'est pas sensé être compliqué...
je veux bien te coder ça pour contribuer
Marsh Posté le 25-06-2005 à 16:32:23
nodus a écrit : |
Le but est de se localiser soi-même alors ? Il faut les coordonnées géographiques de l'ap à ce moment non ? Où alors je ne saisi pas bien ta motivation
Moi je voyait ça comme une possibilité de cartographier les ap. Mais là, il faut pouvoir se localiser soi-même, d'où l'idée du gps.
Je n'arrive pas à comprendre comment tu peux te passer de référence à un moment ou à un autre.
Marsh Posté le 25-06-2005 à 16:55:08
Code :
|
Marsh Posté le 26-06-2005 à 00:19:17
Je teste ça demain et je dirais quoi, en tout cas merci pour l'aide
Marsh Posté le 01-09-2005 à 14:29:00
Salut, Nodus, as tu recu mon dernier message privé?
Merci.
Marsh Posté le 01-09-2005 à 14:33:02
ça a l'air mort, il n'y a plus aucun fichier en ligne...
Marsh Posté le 01-09-2005 à 20:40:17
Les images du premier post ne fonctionnent plus ?
Marsh Posté le 04-10-2005 à 13:15:35
Arf,
désolé tout le monde j'ai été occupé pendant un bout de temps (parti a l'étranger et déménagement), les fichiers sont en lignes mais ont simplement changé de dossier sur multimania. Je mettrais tout à jour ce weekend
Marsh Posté le 08-10-2005 à 17:33:38
Voila,
j'ai refais les liens. Si vous avez des remarques, des idées, des modifications à soumettre, n'hésitez pas. Je modifierais les premiers posts en conséquence
Marsh Posté le 14-10-2005 à 15:55:48
Est-il envisagable d'installer un tel soft sur des AP(wrt54g avec openwrt dans mon cas) afin de localiser les postes clients?
Marsh Posté le 15-10-2005 à 00:06:18
Avec la norme 802.11i ce sera fortement possible. On aura plus de données sur le flux et le signal ainsi que plus de sécurité
http://linuxfr.org/2004/07/13/16783.html
http://wifinetnews.com/archives/002594.html
http://grouper.ieee.org/groups/802/11/
Marsh Posté le 19-01-2006 à 17:49:09
Salut,
J'ai suivi ton topic sur l'intégration d'un module de localisation dans kismet, qui est vraiment intéressant.
Je voudrais aussi l'utiliser comme toi pour un projet de localisation par Wifi.
Mais pour cela je voudrais savoir si il faut utiliser une version spéciale pour l'utilser.
J'utilise kismet 2005-08-R1, et tu utilise la version 2005-04-R1.
Je n'ai toujours pas réussi à le faire fonctionner, j'utilise la Mandrake 10.2.
Selon le readme (pas trés précis):
- Je copie les fichier du module de localisation dans les sources de kismet
- Je conpile le tout
- j'exécute 'make dep'
- j'éxecute 'make' ... et voici l'érreur que j'obtient:
panelfront_display.cc:3263: error: no `int PanelFront::LocDiagPrinter(void*)' member function declared in class `PanelFront'
panelfront_display.cc:3364:2: warning: "/*" within comment
panelfront_display.cc:3382: error: no `int PanelFront::LocChPPrinter(void*)' member function declared in class `PanelFront'
make: *** [panelfront_display.o] Erreur 1
Arriverait-tu à m'aider ?
Marsh Posté le 21-01-2006 à 08:16:37
Pour ça il va falloir que je me replonge dans les sources, je te dis quoi dès que j'en sais un peu plus
Marsh Posté le 08-02-2006 à 10:23:46
Après avoir modifier les sources correctement, le module de localisation fonctionne sous Mandrake avec la version 2005-04-R1.
Seulement j'aimerais avoir plus de précisions sur le fonctionnement de ce module.
actuellement le module sert à localiser un ap avec 3 points: a quoi correspondent ces points?
Pourquoi certaines lignes et fonctions sont en commentaire dans tes fichiers?
Je voudrais utiliser ce module plutôt pour localiser un client en wifi à partir des coordonnées de 3 AP.
Est-ce que tu saurais quelles sont les fonctions à modifier?
Puis au final réussir à afficher ce point sur une carte, connaîtrais-tu une technique pour réaliser cela?
Si tu est intéressé par les sources modifiées...
Marsh Posté le 08-02-2006 à 10:33:06
ça m'interrese !
Marsh Posté le 20-03-2006 à 14:13:09
salut tout le monde
Moi aussi je bosse sur ce projet "Localisation par Wi-Fi",j'ai une plate forme MDK 10.1.
Sethii, est ce que ta pu localiser les clients wifi sur une carte geolocalise??
j'aurai besoin de votre code que ta modifie
merci bien
Marsh Posté le 22-03-2006 à 19:14:21
salut,
je bossais avec sethiii sur le projet de geolocalisation par wifi mais comme il a plus le net c'est moi qui va m'occupé de mettre les fichiers en ligne.
Pour ce qui est de la localisation des clients par rapport aux AP on a pas parfaitement reussi, car les valeurs renvoyées par le programme etaient trop aleatoire...
Les fichiers seront dispo tres bientot, le temps que je les retrouve...
Si vous avez des questions n'hesitez pas.
Marsh Posté le 24-03-2006 à 14:21:26
salut didav79
merci pr ta reponse,ben le programme sur lequel vous bossiez il fait quoi jusqu'a present,il localise quoi en fait?,j'aimerai bien que tu nous files les fichiers que vous avez developpé,j'en ai vraiment besoin,sinon la methode des 3 cercles marche po?!?
merci bien
Marsh Posté le 24-03-2006 à 19:54:17
trunks_tr a écrit : salut didav79 |
salut alors voila les fichiers :
http://membres.lycos.fr/didav79/lo [...] ion.tar.gz
Par contre il faut que tu utilise la meme version de kismet pour que le module de localisation fonctionne c'est a dire la version 2005-06-R1 :
http://membres.lycos.fr/didav79/lo [...] -R1.tar.gz
Les fichiers que je fournit sont en faite ceux de nodus mais y a plus d'erreur de compliation donc apres tu peux utiliser le module de localisation tel qu'il le decrit dans son premier post.
Pour la méthode des 3 cercles on a pas chercher à la mettre en place car nodus nous a expliquer que les librairies mathematiques sont pas dispo sous linux.
Marsh Posté le 18-04-2006 à 21:43:49
Sympa comme projet, je salue le travail.
N'oublie pas dans ton rapport que ton inspiration première c'était Bulma dans DBZ pour la recherche des boules de cristal
Je plaisante, joli boulot
Marsh Posté le 20-04-2006 à 21:57:39
sethiii a écrit : je suis interessé par tes codes,ben moi aussi je bosse sur un projet concernant la localisation par Wi-Fi,bon j'ai essayé d'installer les codes sources que j'ai recuperé a partir de ce forum,mais ca marche pas sur cygwin!!! |
Marsh Posté le 24-06-2005 à 17:36:15
Dans le cadre d'un projet nous avons moi et mon binôme modifié le logiciel Kismet pour intégrer une fonction de localisation de points d'accés wifi. Pour l'instant la fonction de localisation est assez sommaire, enfin surtout la partie concernant la partie calcul des coordonnées. Ne nous blâmez pas pour cela, il reste encore du travail à faire.
http://membres.lycos.fr/debianroot [...] on.tar.bz2
On passera vite fait sur comment installer puis utiliser le programme et on terminera sur les différentes méthodes de calculs possible pour localiser un point d'accés.
Installation
Pour installer la fonction de localisation il suffit de décompresser le fichier fourni ci-dessus dans le dossier des sources de kismet. Pour terminer on compile et ça rulez (make puis make install en tant que root).
Note: Les sources sont sous GPL (les fichiers sources de Kismet que nous avons modifiés et nos sources).
Utilisation de la localisation
Lancez Kismet, vous devriez normalement vous retrouver devant lécran principal.
Il est pour impossible linstant dobtenir des informations spécifiques à un réseau. Il est nécessaire pour cela de changer de critère de classement. Pour cela pressez 'S' deux fois (on classe les AP selon le SSID).
Une fois cela effectué, pour accéder a la fonction de localisation, appuyez sur 'K' , lécran principal de cette fonction devrait apparaître.
Pour saisir les coordonnées dun point appuyez sur 'E' . Puis saisissez les coordonnées du point.
En cas de besoin il est possible de consulter laide sur la fonction localisation en appuyant sur la touche H en étant sur lécran principal de celle-ci.
Remarque: Attention, avant toute utilisation de Kismet et de sa fonction de localisation il est impératif de remplir le fichier de calibration per.kis. Cela devrait ressembler à :
20/40
30/30
35/25
40/24,5
80/4
90/2
95/1.5
qui est en fait puissance/distance.
Message édité par nodus le 08-10-2005 à 17:30:00