Wiki » Historique » Révision 35
« Précédent |
Révision 35/43
(diff)
| Suivant »
Jacques LAFFONT, 07/03/2012 17:03
1. But du jeu¶
Faire faire un tour de circuit à la voiture en un minimum de temps.
La voiture roule sur un circuit virtuel, simulé sur PC (et affiché sur le deuxième écran ou dans une fenêtre à part).
Elle est contrôlée par un programme écrit en langage C.
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.
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 pourquoi pas sa vitesse en conséquence.
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').
La direction est ajustée en modifiant l'angle des roues avant (périphérique 'D'). La vitesse en modifiant celle de la voiture (périphérique 'V').
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..).
Trois circuits, de difficulté croissante sont proposés. Pour passer d'un circuit à l'autre appuyer sur la touche P.
3. Mode d'emploi¶
Le simulateur est déjà lancé (sur le deuxième écran - 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 principal.
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, re-compilez le
.
- relancez le programme de contrôle
(bouton "Run").
4. Fonctions utilisables dans le programme de contrôle¶
La voiture est contrôlée (respectivement observée) en écrivant (respectivement lisant) des données sur un certain nombre de "périphériques".
Chaque périphérique est identifié par une lettre.
La liste des périphé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 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.
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()
).
* Annexe 1 - code et signification des périphériques¶
- 'V' : Vitesse du moteur (0-100)
- 'D' : Angle de braquage des roues avant en 1/10° de degré (10 -> 1∞)
- 'T' : Azimut de la tourelle du télémètre en 1/10°
- 'R' : Lecture de l'Azimuth de la tourelle en 1/10°
- 'U' : Distance mesure par le télémètre en 1/100 de mètre (en cm)
- 'X' : Position absolue X en cm
- 'Y' : Position absolue Y en cm
- 'Z' : Position absolue Z en cm
- 'N' : Numéro de la voiture (en fonction de l'ordre de connection)
- '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' : Téléportation 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 !
* Annexe 2 - code et signification des événements¶
Chaque événement est codé sur un bit d'un registre en contenant 16.
- Bit 0 : Point de passage Vert, Remsie à zero lecture 'C'
- 1 : Point de passage Jaune, Remsie à zero lecture 'C'
- 2 : Point de passage Rouge, Remsie à zero lecture 'C'
- 3-6 : non utilisés
- 7 : Point de passage course (vert), Remsie à zero lecture 'C'
- 8 : La piste à changé , Remsie à zero lecture 'M'
- 9 : Le mode de course à changé ,Remsie à zero 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 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.
Mis à jour par Jacques LAFFONT il y a environ 13 ans · 35 révisions