Projet

Général

Profil

Wiki » Historique » Révision 8

Révision 7 (Jacques LAFFONT, 06/03/2012 12:58) → Révision 8/43 (Anonyme, 06/03/2012 16:02)

h1. 1. But du jeu  

 Faire faire un tour de circuit à la voiture en un minimum de temps. Wiki 

 La voiture roule sur un circuit virtuel, simulé sur PC (et affiché sur l'écran de  
 droite *** ?? ) 
 Elle est contrôlée par un programme écrit Mise en langage. route. 

 Un programme de contrôle "minimum" vous est fourni. Le travail consiste donc à 
 modifier et/ou enrichir ce programme afin d'améliorer ses performances. 

 h1. 2. Principe du programme de contrôle de la voiture 

 Ce programme exécute en boucle infinie un régulation élémentaire consistant à 
 mesurer la position de la voiture et à ajuster sa direction et sa vitesse en 
 conséquent. 

 La position est obtenue en mesurant, via un télémètre laser (matérialisé par un 
 trait rouge dans le simulateur), la distance de la voiture à un Liste des murs bordant la  
 route (par défaut le mur droit, mais cela peut-Ítre changé). périphériques: 

 La direction est ajustée en modifiant l'angle des roues. La vitesse en ... *** 
 
 Un certain nombre de repères sont positionnés sur le circuit. Le passage de la  
 voiture sur ces repères génère des évènements que le programme peut intercepter h3. +INFORMATIONS SUR LES PÉRIPHÉRIQUES ET COMMANDES+ 
 afin d'ajuster le comportement de la voiture en conséquence (par exemple : ralentir  
 à l'approche d'un virage, accélérer afin de passer un tremplin, etc..). 

 Trois circuits, de difficulté croissante sont proposés. *** Comment les choisit on ? *** 

 h1. 3. Mode d'emploi  

 Le simulateur est déjà lancé (sur l'écran de droite - si ce n'est pas le cas, appeler 
 un enseignant).  

 Le programme de contrôle est écrit, compilé et lancé sous l'environnement CodeBlocks,  
 sur l'écran de gauche.  

 Dans un premier temps compilez et lancez le programme fourni par défaut : 
 - cliquez sur le petit engrenage ("Build"), à droite de la 4eme rangée de la fenÍtre 
 CodeBlocks. Vérifiez (ds la fenÍtre du bas) qu'il n'y a pas d'erreur de compilation 
 - cliquez sur le petit triangle vert à coté ("Run"). Ceci doit ouvrir une console dans 
 laquelle s'affichent les informations lues et écrites par le programme de contrôle.  
 En parallèle, la voiture doit apparaÓtre sur le circuit et commencer à rouler. 

 La voiture s'arrête automatiquement après un tour. Pour l'arrÍter avant, tapez "q" dans 
 la console du programme de contrôle. 

 Pour démarrer un nouveau tour : 
 * tapez "q" dans la console pour la fermer 
 * modifiez éventuellement le programme de contrôle, recompilez le. 
 * relancez le programme de contrôle (bouton "Run"). 

 h1. 4. Fonctions utilisables dans le programme de contrôle 

 La voiture est contrôlée (resp. observée) en écrivant (resp. lisant) des données sur 
 un certain nombre de "périphériques". Chaque périphérique est identifié par une lettre. 
 La liste des periphériques, avec les données associées, est donnée en annexe 1. 
 La lecture d'un périphérique est assurée par la fonction @remote_read()@, l''écriture  
 par la fonction @remote_write()@. 

 Par exemple, pour la lire la vitesse de la voiture, on écrira : 

 @vit = remote_read('V');@ 

 Pour forcer une valeur d'angle de roues : 

 @remote_write('D', angle);@ 

 La fonction @remote_nom()@ permet de donner un nom à la voiture. 

 La fonction @Sleep(n)@ permet de faire une pause de 2*n millisecondes *** ?? 

 Pour appeler une fonction "f" à chaque fois qu'un événement (généré par le circuit) 
 se produit, il suffit d'écrire 

 @event_callback = f@; 

 La fonction recevra alors un entier indiquant le numéro de l'événement reçu. La  
 liste des codes d'événement, avec leur signification est donnée en annexe 2. 

 La fonction printf() permet d'afficher un message dans la console. 

 La fonction touche_Q() renvoie 1 si la touche "q" ou "Q" a été pressée. 

 Les appels aux fonctions remote_init() et remote_close() n'ont normalement pas à 
 Ítre changés dans le programme de base. 

 h1. 5. Gestion des scores 

 Les meilleures performances (temps au tour, pour chaque circuit) sont 
 automatiquement transmises à un serveur, avec le nom associé à la voiture 
 (n'oubliez donc pas de renseignez celui-ciavec la fonction remote_nom()).  


 h1. * Annexe 1 - code et signification des périphériques 

 'V' *'V'* Vitesse du moteur (0-50) 
 'D' *'D'* Angle de braquage des roues avant en 1/10 de degré (10 -> 1∞) 1°) 
 'T' Azimuth *'T'* Azimut de la tourelle du télémètre en 1/10∞ 1/10° 
 'R' *'R'* Lecture de l'Azimuth l’Azimut de la tourelle en 1/10∞ 1/10° 
 'U' *'U'* Distance mesure par le télémètre en 1/100 de mètre (en cm) 
 'X' *'X'* Position absolue X en cm 
 'Y' *'Y'* Position absolue Y en cm 
 'Z' *'Z'* Position absolue Z en cm 
 'N' *'N'* Numero de la voiture (en fonction de l'ordre de connection) connection). 
 'E' *'E'* Lecture des evènements (cf Annexe 2) 
 'H' Donne le temps de course actuel 
 'S' Temps du tour précédent 
 'I' Defini le nom du vehicule lettre par lettre 
 'M' Mode de course : 
     - 8 bits de poids fort: 1 Attente, 2 course, 3 essais libres) 
     - 8 bits de poids faible : numero de piste 
 'C' Informations sur le dernier capteur touché : 
     - 8 bits de poids faible : numéro du capteur 
     - 8 bits de poids fort : couleur ('R','J' ou 'V') 
 'K' Teleportation de la voiture sur le troncon de piste N 
     (correspondant au capteur vert numero N). 
     Attention à n'utiliser que pour des tests, les scores sont invalidés ! 

 h1. * Annexe 2 - code et signification des événements  

 Chaque événement est codé sur un bit d'un registre en contenant 16. 

 

      Event flag: 
      Bit    0 : Point de passage Vert, Remsie Remise à zero zéro lecture 'C' 
      
           1 : Point de passage Jaune, Remsie Remise à zero zéro lecture 'C' 
      
           2 : Point de passage Rouge, Remsie Remise à zero zéro lecture 'C' 
    3-6 : non utilisé 
      
           7 : Point de passage course (vert), Remsie Remise à zero zéro lecture 'C' 
      
           8 : La piste à changé , Remsie Remise à zero zéro lecture 'M' 
      
           9 : Le mode de course à changé ,Remsie ,Remise à zero zéro lecture 'M' 
     
          10 : Début de la course , Remise a zéro au changement du mode de course. 
     
          11 : Le dernier point de passage est atteint la course est finie ,    Remise à zéro au changement du mode de course. 
     
          12 : La voiture est sortie de la piste. 
     
          13 : Utilisation de la fonction de téléportation. Classement Invalidé. Remis à zero zéro au changement de piste ou du mode de course. 
     
          14 : Faux départ -> destruction de la voiture ,    Remise a zéro au changement du mode de course. 
     
          15 : Collision avec le sol,    Remise a zéro au changement de piste. 






 

 *'H'* Donne le temps de course actuel 
 *'S'* Temps du tour précédent 
 *'I'* Défini le nom du véhicule lettre par lettre 
 *'M'* Mode de course (8 bits de poids fort: 1 Attente, 2 course, 3 essais libres) Numéro de piste sur les 8 bits de poids faible 
 *'C'* Informations sur le dernier capteur touché,couleur ('R','J','V' sur les 8 bits de poids fort), numéro sur les 8 bits de poids faible 
 *'K'* Téléportation de la voiture sur le tronçon de piste N (correspondant au capteur vert numéro N). Attention à n'utiliser que pour des tests, les scores sont invalidés