mardi 17 mai 2011

/Flash: Explications sur le code

Voici, dans les grandes lignes, l'approche que j'ai retenu pour réaliser mon avertisseur sonore ...

L'exploitation des radar en base de données se fait de la façon suivante:
1- On extrait un nombre de radar max (défini à 10 pour l'Arduino 2009, car l'Arduino plante au dessus. On doit s'approcher du max de consommation de RAM) les plus proches de la position actuelle GPS.

L'extract est limitée à une zone autour de la position actuelle, définie à 0.18° (soit environ 15km²)
et réduite à 0.08° (soit environ 7km²) sur l'Ile de France car il y a beaucoup de radar, ce qui provoque des temps de traitement trop long pour que l'avertisseur soit réactif.
Si la zone d'extract n'entraine pas un extract de 10 radar, on n'aggrandit pas la zone de recherche
(inutile de prévenir le conducteur s'il y a des radar à 50km).
Ce point est traité dans la fonction 'extract_liste_rdr

2- Lorsque la zone est extraite, l'avertisseur calcule en permanence la distance véhicule-radar la plus faible et prévient le conducteur si certaines conditions sont remplies:
- le véhicule se rapproche du radar
- le véhicule se dirige vers le radar, avec un cone d'approximation
- le véhicule est à une distance raisonnable du radar, distance dépendant du type de radar
- le véhicule n'est pas arrêté (histoire de ne pas être inondé de bip lorsque le feu est rouge ou dans les bouchons)
Ce point est traité dans la fonction 'calc_distance_rdr'


3- Lorsque le véhicule se rapproche du bord de la zone d'extraction, une nouvelle extraction est lancée.
Deux critères définissent le déclenchement de ce nouvel extract:
- la distance par rapport au bord de la zone, définie à 2,5km sur l'IDF
- l'écart mini entre la pos actuelle du véhicule et le radar, défini à 1,5km sur l'IDF

Si on passe sous la distance mini ET que l'écart avec le radar le plus proche est supérieur à l'écart min, on lance un nouveau calcul.
Le calcul est effectué dans la fonction 'calc_distance_bord_zone' et la décision est prise dans la fonction 'calc_distance_rdr'

La fonction 'recup_trame_gps' lit le port série pour récupérer la position GPS.
En cas de perte de trame ou de récupération erronée, la fonction attend 10 secondes avant de faire savoir qu'il y a un problème (en arrêtant de prévenir le conducteur de la proximité d'un éventuel radar).
A l'avenir, dans ce cas de figure, la position du véhicule sera rafraîchie par projection. Cela permettra de prévenir d'une éventuelle présence de radar dans un tunnel par exemple.

La fonction 'buzzer' permet de prévenir le conducteur en fonction du type et de la distance du radar

Enfin, les fonctions 'writeString' et 'writeNumber' permettent de logguer des infos sur la carte SD: axe des radar, et, pour contrôle, la liste des radar extraits dans la fonction 'extract_liste_rdrainsi que la position du véhicule lors de l'extraction.

2 commentaires:

Anonyme a dit…

Bonjour, Comment associez-vous 0.08° à 7km2, de meme pour les 0.18 et 15km2
Merci

Jamais sans mon scoot' a dit…

Bonjour,
ces chiffres ne sont pas d'une précision extrème.
Allez sur http://www.lexilogos.com/calcul_distances.htm, puis saisissez 48.8 dans la 1ere latitude, 48.98 dans la 2eme, 2.3 dans les longitudes (ce qui doit correspondre à la région parisienne).
Ca donne 20km
Saisissez maintenant 48.8 en latitude, et 2.3 en longitude 1, 2.48 en longitude 2.
Ca donne 13km

Donc à la louche, 15km de côté, sachant que les calculs seront différents dans le nord et le sud.

Voilà !

Enregistrer un commentaire

Laissez vos commentaires ...