Projet

Général

Profil

Wiki » Historique » Version 43

Jacques LAFFONT, 11/06/2015 15:58

1 8 Anonyme
h1. 1. But du jeu 
2 1 Jacques LAFFONT
3 21 Jacques LAFFONT
Faire faire un tour de circuit à la voiture en un minimum de temps. !>out.png!
4 20 Jacques LAFFONT
5 41 Jacques LAFFONT
La voiture roule sur un circuit virtuel, simulée sur PC (et affichée 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 17 Jacques LAFFONT
12 42 Jacques LAFFONT
Ce programme exécute en boucle infinie avec une régulation élémentaire consistant à mesurer la position de la voiture et à ajuster sa direction et pourquoi pas sa vitesse en conséquence.
13 1 Jacques LAFFONT
14 11 Jacques LAFFONT
La position est obtenue en mesurant (_périphérique 'U'_), 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é (_périphérique 'T'_).
15 1 Jacques LAFFONT
16 36 Jacques LAFFONT
La direction est ajustée en modifiant l'angle des roues avant (_périphérique 'D'_). La vitesse peut être ajustée en modifiant celle de la voiture (_périphérique 'V'_).
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 11 Jacques LAFFONT
Trois circuits, de difficulté croissante sont proposés. Pour passer d'un circuit à l'autre appuyer sur la touche P.
21 8 Anonyme
22
h1. 3. Mode d'emploi 
23 22 Jacques LAFFONT
24
Le simulateur est déjà lancé (sur le deuxième écran - si ce n'est pas le cas, appeler un enseignant). !>cb.png!
25 8 Anonyme
26 11 Jacques LAFFONT
Le programme de contrôle est écrit, compilé et lancé sous l'environnement CodeBlocks,  sur l'écran principal. 
27 8 Anonyme
28 1 Jacques LAFFONT
Dans un premier temps compilez et lancez le programme fourni par défaut :
29 36 Jacques LAFFONT
* cliquez sur le petit engrenage !build.jpg! ("Build"), à droite de la 4eme rangée de la fenêtre CodeBlocks. Vérifiez (dans la fenêtre du bas) qu'il n'y a pas d'erreur de compilation
30 13 Jacques LAFFONT
* cliquez sur le petit triangle vert à coté !run.jpg! ("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 11 Jacques LAFFONT
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 13 Jacques LAFFONT
* modifiez éventuellement le programme de contrôle, re-compilez le !build.jpg!.
37
* relancez le programme de contrôle !run.jpg! (bouton "Run").
38 8 Anonyme
39
h1. 4. Fonctions utilisables dans le programme de contrôle
40 1 Jacques LAFFONT
41 11 Jacques LAFFONT
La voiture est contrôlée (respectivement observée) en écrivant (respectivement lisant) des données sur un certain nombre de "périphériques".
42 9 Anonyme
Chaque périphérique est identifié par une lettre.
43 11 Jacques LAFFONT
La liste des périphé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 37 Jacques LAFFONT
<pre><code class="c">
48
vit = remote_read('V');
49 38 Jacques LAFFONT
</code></pre>
50 1 Jacques LAFFONT
51
Pour forcer une valeur d'angle de roues :
52 38 Jacques LAFFONT
53 1 Jacques LAFFONT
<pre><code class="c">
54 37 Jacques LAFFONT
remote_write('D', angle);
55 38 Jacques LAFFONT
</code></pre>
56 8 Anonyme
57
La fonction @remote_nom()@ permet de donner un nom à la voiture.
58 1 Jacques LAFFONT
59
La fonction @Sleep(n)@ permet de faire une pause de n millisecondes.
60
61 43 Jacques LAFFONT
Pour appeler une fonction "f" à chaque fois qu'un événement (généré par les capteurs de la voiture) se produit, il suffit d'écrire
62 1 Jacques LAFFONT
63 37 Jacques LAFFONT
<pre><code class="c">
64 39 Jacques LAFFONT
void f(int ev){
65
...
66
}
67
68
int main(...){
69
...
70 37 Jacques LAFFONT
event_callback = f;
71 39 Jacques LAFFONT
...
72
}
73 38 Jacques LAFFONT
</code></pre>
74 8 Anonyme
75 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.
76 8 Anonyme
77 9 Anonyme
La fonction @printf()@ permet d'afficher un message dans la console.
78 8 Anonyme
79 9 Anonyme
La fonction @touche_Q()@ renvoie 1 si la touche "q" ou "Q" a été pressée.
80 8 Anonyme
81 9 Anonyme
Les appels aux fonctions @remote_init()@ et @remote_close()@ n'ont normalement pas à être changés dans le programme de base.
82 8 Anonyme
83
h1. 5. Gestion des scores
84
85 36 Jacques LAFFONT
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-ci avec la fonction @remote_nom()@). 
86 8 Anonyme
87
88 40 Jacques LAFFONT
h1. * Annexe 1 - code et signification des périphériques *
89 8 Anonyme
90 34 Jacques LAFFONT
!>voiture2.jpg!
91 33 Jacques LAFFONT
92 35 Jacques LAFFONT
* 'V' : Vitesse du moteur (0-100)
93 31 Jacques LAFFONT
* 'D' : Angle de braquage des roues avant en 1/10° de degré (10 -> 1∞)
94
* 'T' : Azimut de la tourelle du télémètre en 1/10°
95
* 'R' : Lecture de l'Azimuth de la tourelle en 1/10°
96
* 'U' : Distance mesure par le télémètre en 1/100 de mètre (en cm)
97
* 'X' : Position absolue X en cm
98
* 'Y' : Position absolue Y en cm
99
* 'Z' : Position absolue Z en cm
100
* 'N' : Numéro de la voiture (en fonction de l'ordre de connection)
101
* 'E' : Lecture des evènements (cf Annexe 2)
102
* 'H' : Donne le temps de course actuel
103
* 'S' : Temps du tour précédent
104
* 'I' : Defini le nom du vehicule lettre par lettre
105
* 'M' : Mode de course :
106 24 Jacques LAFFONT
**    8 bits de poids fort: 1 Attente, 2 course, 3 essais libres)
107
**    8 bits de poids faible : numero de piste
108 31 Jacques LAFFONT
* 'C' : Informations sur le dernier capteur touché :
109 24 Jacques LAFFONT
**    8 bits de poids faible : numéro du capteur
110
**    8 bits de poids fort : couleur ('R','J' ou 'V')
111 31 Jacques LAFFONT
* 'K' : Téléportation de la voiture sur le troncon de piste N
112 24 Jacques LAFFONT
**    (correspondant au capteur vert numero N).
113 36 Jacques LAFFONT
**    Attention : à n'utiliser que pour des tests car les scores sont invalidés !
114 8 Anonyme
115 40 Jacques LAFFONT
h1. * Annexe 2 - code et signification des évènements *
116 8 Anonyme
117
Chaque événement est codé sur un bit d'un registre en contenant 16.
118
119 36 Jacques LAFFONT
* Bit  0 : Point de passage Vert, remis à zéro lors de la lecture du périphérique 'C'
120 40 Jacques LAFFONT
* 1 : Point de passage Jaune, remis à zéro lors de la lecture du périphérique 'C'
121
* 2 : Point de passage Rouge, remis à zéro lors de la lecture du périphérique 'C'
122
* 3-6 : non utilisés
123
* 7 : Point de passage course (vert), remis à zéro lors de la lecture du périphérique 'C'
124
* 8 : La piste à changé , remis à zéro lors de la lecture du périphérique 'M'
125
* 9 : Le mode de course a changé , remis à zéro lors de la lecture du périphérique 'M'
126
* 10 : Début de la course , remis à zéro au changement du mode de course.
127
* 11 : Le dernier point de passage est atteint la course est finie ,  remis à zéro au changement du mode de course.
128
* 12 : La voiture est sortie de la piste.
129
* 13 : Utilisation de la fonction de téléportation. Classement Invalidé. Remis à zero au changement de piste ou du mode de course.
130
* 14 : Faux départ -> destruction de la voiture ,  remise à zéro au changement du mode de course.
131
* 15 : Collision avec le sol,  Remise à zéro au changement de piste.