Avertissements dans les réseaux véhiculaires
Travail à rendre
- Par courriel (les deux enseignants en copie) avant la prochaine séance
- Votre code source
- Une description du travail effectué (points traités et/ou non-traités) dans le corps du message, ainsi qu'une description des choix effectués pour les parties libres. Ajoutez-y toute information jugée utile et mettant en valeur le travail effectué.
Principe général
Nous considérons un scénario de réseaux véhiculaires (d'abord sur autoroute, puis en environnement urbain), où certains vehicules peuvent tomber en panne et s'immobiliser. Il s'agit alors d'informer au plus vite les autres véhicules pour éviter d'éventuels carambolages.
Le projet se décompose en deux objectifs distincts : 1) Développer les éléments du scénario normal (modèle de mobilité), puis 2) Développer le système d'avertissement à base de messages.
Le projet sera à réaliser en monôme, binôme, ou trinôme. La correction sera plus exigeante avec les groupes plus nombreux. Indépendamment, les objectifs sont marqués avec un niveau 1, 2 ou 3 indiquant leur priorité: ne perdez pas de temps sur les objectifs de niveau 3 (voire 2) avant de vous assurer une base solide d'objectifs de niveau 1 (voire 2). Tentez d'aller aussi loin que possible, les extensions au projet sont de plus en plus libres à mesure que l'énoncé progresse.
Scénario 1 : Autoroute
Fonctionnement normal
- A (Niveau 1): Créer un modèle de noeud pour représenter les véhicules. Vous pourrez réutiliser l'icône de voiture issue des exemples. Votre classe doit prendre en paramètre une position de départ et une direction parmi EAST et WEST. Les noeuds de cette classe doivent choisir à l'initialisation une vitesse aléatoire dans un interval [x, 2x] pour la valeur de x de votre choix (plausible à l'oeil nu). À chaque top d'horloge, le noeud se déplace selon sa vitesse et sa direction (modulo la largeur de l'espace). On dotera aussi chaque noeud d'un sensing range (à ne pas confondre avec le communication range), très légèrement supérieur à la taille de l'icône.
- B (Niveau 1): Déployer le scénario en créant plusieurs véhicules (par programme) allant vers l'est et plusieurs allant vers l'ouest. Prenez soin de les disposer sur deux ordonnées différentes, afin de visualiser un autoroute bidirectionnel. À ce stade, il n'est pas grave que des véhicules de vitesse différente se passent à travers.
- C (Niveau 2): En vous inspirant de l'exemple Painting and drawing the GUI background, dessinez les bords de
la route et les pointillés centraux.
- D (Niveau 3): Si un véhicule v1 détecte un véhicule v2 de même direction dans son sensing range (c.f. le TP sur les canadairs), il enregistre la valeur de la vitesse de v2 (qu'on se permettra de lire directement sur l'autre noeud). Il adoptera lui-même cette vitesse lors du prochain top d'horloge (pas immédiatement, donc). Cela devrait donner un effet visuel intéressant.
Occurrence des pannes
- E (Niveau 1): Avec une probabilité faible à chaque ronde, chaque véhicule est susceptible de tomber en panne. Il s'immobilise alors en prenant une couleur noire. (Alternativement, vous pouvez créer une commande dans le menu contextuel pour faire tomber en panne un véhicule.)
- F (Niveau 1): Si un véhicule v1 détecte dans son sensing range un véhicule v2 immobilisé (vitesse nulle) et de même direction, il tombe en panne à son tour. (Si vous aviez réalisé l'objectif D, faites en sorte que l'échange des deux vitesses soit ignoré si l'un des deux véhicules est en panne.)
- G (Niveau 1): Les véhicules en panne ne peuvent pas diffuser de messages. On utilisera donc les véhicules de direction opposée. Pour l'instant, assurez-vous juste que lorsque deux véhicules se croisent dans des directions différentes, leurs sensing range leur permet de se détecter mutuellement.
Messages d'avertissement
- H (Niveau 1): Si un véhicule v1 détecte un véhicule v2 immobilisé et ayant une direction opposée, il passe en mode alerte (couleur rouge). Les véhicules en mode alerte ont deux caractéristiques : 1) leur vitesse est divisée par deux, et 2) ils transmettent à chaque ronde un message d'alerte. Lorsqu'un véhicule reçoit un message d'alerte, il doit passer à son tour en mode alerte.
- I (Niveau 2): On doit maintenant distinguer deux types de véhicules en mode alerte : ceux qui ont la même direction que le véhicule immobilisé (type 1) et ceux qui ont une direction opposée (type 2). Désormais, seuls les véhicules de type 1 doivent diviser leur vitesse. Par ailleurs, les alertes ne doivent se propager que dans un sens, correspondant à la direction inverse du véhicule immobilisé (mais les deux types de noeuds continuent à être impliqués). Pour être réalistes, on devrait supposer que les messages envoyés par un véhicule sont reçus par tous ses voisins, c'est donc du côté récepteur que le filtre doit être effectué pour contrôler le sens de propagation.
- J (Niveau 2): Faites expirer les messages d'alerte s'ils arrivent à une certaine distance de la panne; on s'autorisera à inclure les coordonnées du véhicule en panne dans les messages d'alerte.
- K (Niveau 3): Faites contourner les véhicules immobilisés sans collision visible à l'oeil.
Scénario 2 : Ville de type Manhattan
Dans cette partie, l'environnement urbain est modélisé par une grille virtuelle représentant les rues et les intersections, d'où le nom du modèle de mobilité "de type Manhattan". Typiquement, lorsqu'un véhicule arrive à une intersection, il choisit de continuer tout droit avec probabilité 0.5 et de tourner à gauche ou à droite avec probabilité 0.25 (chacun).
- L (Niveau 2): Réalisez le fonctionnement normal de ce scénario (sans panne). Il est recommandé d'hériter de la classe WaypointNode pour simplifier les déplacements d'intersection en intersection. Vous avez une grande liberté dans vos choix, p.ex. rendu graphique, présence ou non de feux rouge,... tout élément jugé utile.
- M (Niveau 2): Réalisez le fonctionnement avec gestion des pannes et avertissements, en adaptant certaines des solutions vues précédemment. Un objectif naturel et imposé sera que lorsqu'un véhicule s'apprête à entrer dans un segment de rue où se trouve une voiture en panne (dans la même direction), il doit choisir un itinéraire bis (contourner le pâté de maison) pour retomber sur l'intersection de l'autre côté.
- N (Niveau 3): Enrichir le scénario de manière libre. Soyez inventifs.