Projet

Général

Profil

Wiki » Historique » Version 10

Jacques LAFFONT, 06/03/2012 16:17

1 8 Anonyme
h1. 1. But du jeu 
2 1 Jacques LAFFONT
3 8 Anonyme
Faire faire un tour de circuit à la voiture en un minimum de temps.
4 1 Jacques LAFFONT
5 10 Jacques LAFFONT
La voiture roule sur un circuit virtuel, simulé sur PC (et affiché sur le deuxième écran ou dans une fenêtre à part).
6 9 Anonyme
Elle est contrôlée par un programme écrit en langage C.
7 1 Jacques LAFFONT
8 9 Anonyme
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.
9 1 Jacques LAFFONT
10
h1. 2. Principe du programme de contrôle de la voiture
11 8 Anonyme
12 9 Anonyme
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.
13 1 Jacques LAFFONT
14 9 Anonyme
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 des murs bordant la  route (par défaut le mur droit, mais cela peut-Ítre changé).
15 1 Jacques LAFFONT
16 9 Anonyme
La direction est ajustée en modifiant l'angle des roues. La vitesse en +???+.
17 8 Anonyme
 
18 9 Anonyme
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 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..).
19 8 Anonyme
20 9 Anonyme
Trois circuits, de difficulté croissante sont proposés. +++Comment les choisit on ??+
21 8 Anonyme
22
h1. 3. Mode d'emploi 
23
24 9 Anonyme
Le simulateur est déjà lancé (sur l'écran de droite - si ce n'est pas le cas, appeler un enseignant). 
25 8 Anonyme
26 9 Anonyme
Le programme de contrôle est écrit, compilé et lancé sous l'environnement CodeBlocks,  sur l'écran de gauche. 
27 8 Anonyme
28 1 Jacques LAFFONT
Dans un premier temps compilez et lancez le programme fourni par défaut :
29 9 Anonyme
* 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
30
* 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.
31 8 Anonyme
32 9 Anonyme
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.
33 8 Anonyme
34 1 Jacques LAFFONT
Pour démarrer un nouveau tour :
35 8 Anonyme
* tapez "q" dans la console pour la fermer
36 1 Jacques LAFFONT
* modifiez éventuellement le programme de contrôle, recompilez le.
37 8 Anonyme
* relancez le programme de contrôle (bouton "Run").
38
39
h1. 4. Fonctions utilisables dans le programme de contrôle
40 1 Jacques LAFFONT
41 9 Anonyme
La voiture est contrôlée (resp. observée) en écrivant (resp. lisant) des données sur un certain nombre de "périphériques".
42
Chaque périphérique est identifié par une lettre.
43 8 Anonyme
La liste des periphériques, avec les données associées, est donnée en annexe 1.
44 9 Anonyme
La lecture d'un périphérique est assurée par la fonction @remote_read()@, l''écriture par la fonction @remote_write()@.
45 8 Anonyme
46
Par exemple, pour la lire la vitesse de la voiture, on écrira :
47
48
@vit = remote_read('V');@
49
50
Pour forcer une valeur d'angle de roues :
51
52
@remote_write('D', angle);@
53
54
La fonction @remote_nom()@ permet de donner un nom à la voiture.
55
56
La fonction @Sleep(n)@ permet de faire une pause de 2*n millisecondes *** ??
57
58 9 Anonyme
Pour appeler une fonction "f" à chaque fois qu'un événement (généré par le circuit) se produit, il suffit d'écrire
59 8 Anonyme
60
@event_callback = f@;
61
62 9 Anonyme
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.
63 8 Anonyme
64 9 Anonyme
La fonction @printf()@ permet d'afficher un message dans la console.
65 8 Anonyme
66 9 Anonyme
La fonction @touche_Q()@ renvoie 1 si la touche "q" ou "Q" a été pressée.
67 8 Anonyme
68 9 Anonyme
Les appels aux fonctions @remote_init()@ et @remote_close()@ n'ont normalement pas à être changés dans le programme de base.
69 8 Anonyme
70
h1. 5. Gestion des scores
71
72 9 Anonyme
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()@). 
73 8 Anonyme
74
75
h1. * Annexe 1 - code et signification des périphériques
76
77
'V' Vitesse du moteur (0-50)
78
'D' Angle de braquage des roues avant en 1/10 de degré (10 -> 1∞)
79
'T' Azimuth de la tourelle du télémètre en 1/10∞
80
'R' Lecture de l'Azimuth de la tourelle en 1/10∞
81
'U' Distance mesure par le télémètre en 1/100 de mètre (en cm)
82
'X' Position absolue X en cm
83
'Y' Position absolue Y en cm
84
'Z' Position absolue Z en cm
85
'N' Numero de la voiture (en fonction de l'ordre de connection)
86
'E' Lecture des evènements (cf Annexe 2)
87
'H' Donne le temps de course actuel
88
'S' Temps du tour précédent
89
'I' Defini le nom du vehicule lettre par lettre
90
'M' Mode de course :
91
    - 8 bits de poids fort: 1 Attente, 2 course, 3 essais libres)
92
    - 8 bits de poids faible : numero de piste
93
'C' Informations sur le dernier capteur touché :
94
    - 8 bits de poids faible : numéro du capteur
95
    - 8 bits de poids fort : couleur ('R','J' ou 'V')
96
'K' Teleportation de la voiture sur le troncon de piste N
97
    (correspondant au capteur vert numero N).
98
    Attention à n'utiliser que pour des tests, les scores sont invalidés !
99
100
h1. * Annexe 2 - code et signification des événements 
101
102
Chaque événement est codé sur un bit d'un registre en contenant 16.
103
104
Bit  0 : Point de passage Vert, Remsie à zero lecture 'C'
105
     1 : Point de passage Jaune, Remsie à zero lecture 'C'
106
     2 : Point de passage Rouge, Remsie à zero lecture 'C'
107
   3-6 : non utilisé
108
     7 : Point de passage course (vert), Remsie à zero lecture 'C'
109
     8 : La piste à changé , Remsie à zero lecture 'M'
110
     9 : Le mode de course à changé ,Remsie à zero lecture 'M'
111
    10 : Début de la course , Remise a zéro au changement du mode de course.
112
    11 : Le dernier point de passage est atteint la course est finie ,  Remise à zéro au changement du mode de course.
113
    12 : La voiture est sortie de la piste.
114
    13 : Utilisation de la fonction de téléportation. Classement Invalidé. Remis à zero au changement de piste ou du mode de course.
115
    14 : Faux départ -> destruction de la voiture ,  Remise a zéro au changement du mode de course.
116
    15 : Collision avec le sol,  Remise a zéro au changement de piste.