Localisation par les antennes (comme les insectes)
Par Romain Sahut, jeudi 5 juillet 2007 à 06:20 :: Developpement :: #26 :: rss
Enfin pas vraiment comme les insectes... Il faut un PocketPC ou un Smartphone. Quelques explications ici sur le début et le pourquoi. Donc on parlera ici CellID, LAC, MCC, RIL et autres
Petit recap:
1. Ca existe déjà
- Solutions opérateurs sur abonnement
- Solutions opérateurs pour la facturation (appel en coût local en zone "maison")
- Solutions pour Téléphone sous Symbian
- Quelques solutions pour Windows Mobile (CellTrack qui a visiblement dérivé en projet commercial, NiceTrack qui evenementialise les zones (vibreur au boulot, sonnerie à la maison...), et un concours lancé sur Modaco pour en faire une soit universelle)
2. C'est pas précis
- Déjà il faut avoir les positions CORRECTES des antennes... pour ca on a cartoradio, mais l'identifiant ne coincide pas avec l'identifiant LAC/CellID sur le terrain (enfin les infos de latitude,longitude et hauteur sont toujours bonnes à prendre)
- Ensuite il faut savoir que les données sur lesquelles on se base sont limitées. Parfois on a qu'une information, parfois 8, ca dépend des devices et des versions (les opérateurs bloquent ces fonctionnalités pour forcer l'utilisateur à passer par leur service payant... Il faut mettre une version de la ril.dll qui vienne d'un device neutre (QTEK ou HTC pour les SPV)). Donc la localisation sera plus ou moins précise en fonction de ce paramétre.
- Enfin, les données, quand on les a, ne sont pas trés précises (63 niveaux de puissance par antenne... c'est suffisant pour permettre au GSM de moduler sa puissance, pas pour obtenir un positionnement précis)
Mon but est ici d'avoir une solution flexible (pas besoin de faire une modification par mobile), facile à installer, autoconfigurable si possible qui me permette de simuler un GPS à partir de données GSM. Ceci pour pouvoir utiliser n'importe quelle application GPS avec ces signaux en réseaux urbains (faible réception GPS et réseaux GSM denses avec présence de micro-cellules pour être plus précis : en étant optimiste, 150 métres d'écart maximum).
But à moyen terme: se servir de cette brique pour faire un outil d'aide à la visite de villes (points de vues...) sur PDA géolocalisé par GSM.
Première étape : Créer une librairie qui permette de lire le CellID/LAC utilisant une palette de méthodes configurables
Pour cela, j'ai commencé par accumuler des données sur les méthodes utilisées actuellement dans les divers programmes. Il existe 3 grandes méthodes
- Commandes AT sur le port modem du GSM (AT+CREG et AT+CSQ) -> NiceTrack
- Lecture directe de la plage mémoire -> CellTrack
- RIL (une couche intermédiaire entre le hardware et les couches logicielles supérieures)
Pour RIL, il existe actuellement 4 méthodes
- La méthode d'enregistrement des notifications de changement de cellule (trouvée par itsme)
- La méthode RIL_GetCellTowerInfo
- La méthode utilisée par HTC pour les Wizard, Prophet et Artemis -> Compatible GSMTestMode
- La méthode utilisée par HTC pour les Hermes -> Compatible fieldTest
Toutes ces méthodes visent à obtenir 3 informations primordiales: la LAC (zone du réseau urbaine), la CellID (identifiant de l'antenne dans sa zone) et la puissance du signal.
J'utilise donc le polymorphisme pour factoriser les comportements des méthodes en général, et celle de RIL, ce qui permet d'alléger le code, et de pouvoir rajouter une classe RIL spécifique à une classe de devices en 5 minutes.
Avec quelques fonctions callback, je suis notifié des événements asynchrones et je peux me passer de timers ou sleep.
(Je dis tout ca parce que j'ai fait proprement la chose, et que je suis bien content que tout marche bien)
Bref... Aprés pas mal de debuggage ARM (j'ai du m'y mettre, mais maintenant j'ai aucun soucis pour desassembler, étudier et reproduire), j'ai eu les arguments que je souhaitais pour obtenir les mêmes informations (et même plus) que l'application GSMTestMode. J'ai fait de même avec fieldTest mais je n'ai pas pu tester la sortie, donc c'est en suspens.
Voila, CellGuardian était prét.
Seconde étape : Identifier les positions des antennes
La première chose à faire est un module de communication avec un GPS. Les trames NMEA sont assez simples à comprendre, et je ne veux que l'informations $GPRMC. Donc c'est rapidement fait, même si un premier GPS un peu dur de la feuille (il capte un peu quand il veut) m'a fait perdre du temps. Donc aprés, avec une petite application qui logue les positions et les antennes simultanément et réguliérement, il suffit de se balader en vélo pour obtenir une première ébauche, qui sera améliorée par les parcours suivant.
La partie mobile ne s'occupe que des relevés, l'accumulation des données se fait par des bases SQL, via un script d'importation dans une première base de données, puis elles sont synthétisées dans une autre base par une moulinette PHP qui calcule la moyenne pour des petites zones.
On obtient d'abord ceci, puis pour remplir les blancs, améliorer la lecture et la rapidité d'affichage, on obtient ça
Ensuite, comme on ne peut pas situer précisement l'antenne dans ce flot de données, on se base sur les données de cartoradio pour localiser les antennes GSM existantes. On fera le lien entre la position théorique et les relevés via une carte Google Maps.
Pour faciliter cette tâche, j'ai codé une petite moulinette pour récupérer des données issues du site cartoradio (plus pratique que gérer deux écrans, et ca rend pas mal d'étapes de conversion LambertII/normeGPS automatiques et transparentes). Aprés avoir demandé à cartoradio, je mets la moulinette en ligne qui ne doit pas être utilisée pour faire du copier/coller. les données que j'ai récupéré ne servent qu'au positionnement des antennes dans ma base, et dans le cadre de ce projet, je n'en fais pas un service qui concurrencerait cartoradio. Donc c'est ici.
Troisième étape: Calculer la position relativement aux antennes, et obtenir la position
... En cours ....
Pour tester la béta, qui permet d'évaluer la compatibilité, les manques, et ajouter de nouvelles configurations au fichier xml. Elle est stable mais incompléte (elle le sera quand le Cell2GPS dira autre chose que 0.00000000).
Le code source suivra bientôt (manque de commentaires d'entéte de fonction, la licence GPL n'est pas encore mise en place...)
Pour les outils PHP, ca suivra aussi.
PocketPC 2003 - PocketPC WM5/WM6 - Smartphone 2003 - Smartphone WM5/WM6
Et la page du projet (chez moi parce qu'ici j'ai qu'une seule base de données à disposition) Bientôt sur sourceforge.net
Dans la meme categorie:
> Billet precedent: Mise à jour du plugin de gestion de CV pour DotClear 1.2 -> ...
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.