Sujet A - Projet 2015

Transcription

Sujet A - Projet 2015
Projet Langage C
Institut d’Optique Graduate
School
Ingénieur - 1A - 2S - Sujet A
LIFE ON MARS
Consignes de travail
Le projet, proposé dans ce document, permet de valider vos acquis en langage C à travers le développement d’une
application complète.
A l’issue de ce projet, pour le 1er ou le 2 avril 2015 (en fonction de vos groupes), vous devrez :
— remettre toutes les sources de votre programme
— présenter votre travail sous forme d’une soutenance orale (incluant une démonstration de votre application) 10 min de présentation et 10 min de questions/démonstration
Ce projet s’étend sur 3 séances complètes de 4h, durant lesquelles vous serez par groupe de 4 : 2 travailleront
sur le parcours du robot, 2 travailleront sur la génération des graphiques demandés aux étapes 1 et 2 (à partir d’un
fichier de relevé fictif). Votre travail sera évalué par l’attribution :
— d’une note de travail (au cours de séances de projet prévues)
— d’une note de soutenance / démonstration
Description du projet - Life On Mars
La NASA vous a embauché pour mettre au point une simulation de leur robot Curiosity 5, qui doit partir à bord
d’Atlas VII, en direction de la planète Mars, le 1er avril 2015. Sa mission principale sera de sonder le sol et l’air
de la planète rouge pour y détecter toute trace de vie, et donc d’eau ! Sa principale contrainte... sa source d’énergie !
Missions du robot
Ce robot aura pour mission :
1. de réaliser des relevés de température et d’humidité à intervalle de distance régulier (1 m) sur une zone de 30 m
par 30 m. Le parcours du relevé est laissé à votre soin. La seule contrainte est de faire ce relevé en un minimum
de temps.
2. de se rendre ensuite au point de plus forte humidité en optimisant votre parcours pour le réaliser en un minimum
de temps.
Un relevé topographique de la zone en question ainsi qu’un relevé d’humidité d’une précédente mission vous seront
fournis sous forme d’un fichier texte. L’échelle est de 1 pixel pour 1 m. Le fichier comporte 30 lignes. Chaque ligne
contient 30 valeurs séparées par un espace.
Objectifs du projet / Etapes
Dans cette section vous sont présentés les objectifs à atteindre pour la réalisation de cette application.
Dans tous les cas, un point crucial est la recharge de la batterie. Pour optimiser le temps de parcours, vous
pourrez jouer sur plusieurs paramètres : jouer sur la vitesse du robot, définir les niveaux de batterie optimaux pour
effectuer une recharge... A vous de trouver la meilleure stratégie pour que votre robot soit le plus rapide !
Etape 0
Une étape indispensable est l’écriture de la bibliothèque des fonctions associées au robot, en prenant en
compte les caractéristiques de celui-ci (voir sections Le Robot et Bibliothèque du robot).
Etape 1
La première étape permet de tester l’ensemble des fonctions que vous avez écrites à l’étape précédente. Pour cela,
on demande au robot :
+ d’effectuer le relevé d’une zone plane de 30 m par 30 m. On donne uniquement au robot les coordonnées
du point de largage
+ de se rendre au point d’humidité maximale en ligne droite
Données d’entrée
• point de largage (Xinit ,Yinit )
• relevé d’humidité pour les données de la simulation, au format texte (valeurs entières comprises entre 0 et
100 %)
Données de sorties
• Graphiques (sous forme d’une image, au format PGM)
+ éclairement / niveau de batterie / relevé de température en fonction du temps
+ relevé d’humidité en fonction de X et Y
• Temps total pour les parties 1 (relevé de données) et 2 (point d’humidité maximale) de la mission
Etape 2
Dans cette seconde étape, votre robot devra :
+ effectuer le relevé d’une zone de 30 m par 30 m, dont les relevés topographiques sont donnés dans un fichier
texte (altitude entière donnée en dizaine de cm entre 0 et 100)
+ se rendre au point d’humidité maximale en ligne droite
Données d’entrée
En plus des données de l’étape 1 :
• relevé topographique sous forme de fichier au format texte
Données de sorties
En plus des données de l’étape 1 :
• Graphique (sous forme d’une image, au format PGM)
+ relevé topographique en fonction de X et Y (altitude représentée en niveau de gris)
Etape 3
Enfin dans cette dernière étape, en plus des relevés de données de la zone complète, on s’intéressera à l’optimisation
en temps du trajet pour aller d’un point A à un point B de la zone considérée.
Données d’entrée
En plus des données de l’étape 2 :
• Coordonnées des points A et B
Données de sorties
En plus des données de l’étape 2 :
• Tracé du parcours optimal en fonction de X et Y, entre A et B
• Comparaison des temps de parcours sur différents trajets (en particulier la ligne droite)
Le robot
Les informations relatives au robot sont stockées dans une structure de données nommée curiosity :
— char nom[32] : le nom du robot ;
— int coordX : coordonnée GPS en X, en m ;
— int coordY : coordonnée GPS en Y, en m ;
— int temps : temps de parcours depuis le lancement, en s ;
— float distance : distance parcourue depuis le lancement, en m ;
— float batterie : état de la batterie, entre 0 et 100% ;
— char pansol : état des panneaux solaires, ’D’ pour déployés et ’R’ pour repliés.
Capteurs et batterie
Il est équipé de plusieurs capteurs (température, humidité) dont les données seront renvoyées par l’intermédiaire
d’une structure de données également, du type data :
— int eclairement : éclairement relevé en millier de lux, entre 0 et 50 ;
— float humidite : humidité relevée, entre 0 et 100% ;
— float temperature : température relevée en ˚C.
Il est enfin équipé d’une batterie qui peut être rechargée à l’aide de panneaux solaires. Ces derniers peuvent se
déployer ou se replier à la demande. La batterie ne doit jamais descendre en dessous de 2% de charge, sinon la
mission est considérée comme un échec.
Actions du robot
Le robot est monotâche ! Les actions possibles par le robot sont les suivantes :
— avancer d’un point à un autre
— relever les données scientifiques (humidité, température)
— déployer, replier ses panneaux solaires
— se recharger jusqu’à une certaine valeur de batterie
Chacune de ces actions consomme de l’énergie sur la batterie et prend un certain temps pour être exécutée par le
robot réel. Ces informations sont données dans la description des fonctions.
Données de la mission
A chaque nouvelle action du robot, ce dernier stocke dans un fichier de log (ou journal) la trace de chacune de ces
actions. Ce fichier texte doit avoir le format suivant :
temps:distance:coordX:coordY:altitude:humidite:temperature:nivBatterie
C’est à partir de ce fichier que seront construits l’ensemble des graphiques demandés dans les étapes décrites
précédemment.
Caractéristiques du robot
ATTENTION : l’ensemble des caractéristiques décrites dans cette section doivent être prises en compte pour le
calcul de l’utilisation de la batterie et du temps écoulé pour réaliser certaines tâches. Ces informations doivent pouvoir
être modifiées facilement dans votre programme. Pensez aux constantes symboliques...
Panneaux solaires : 1 200 Wh pour un éclairement maximal de 50 000 lux 1 / 24 V
Les panneaux solaires ne servent qu’à recharger la batterie. Pour cela, ils doivent être déployés. Le robot ne peut
par contre pas avancer lorsque les panneaux sont déployés. Il faut donc les replier à la fin de la recharge.
Le déploiement des panneaux prend 25 s et nécessite une puissance de 100 W sous une tension de 24 V.
Le repliement des panneaux prend 42 s et nécessite une puissance de 150 W sous une tension de 24 V.
Batteries : 3 en parallèle dont chacune a les caractéristiques suivantes : 45 Ah / 24 V
Moteurs à courant continu : 4 moteurs, fonctionnant systèmatiquement tous en même temps, dont les caractéristiques de chacun d’entre eux sont les suivantes :
Tension nominale : 24 V
Courant maximal / démarrage : 26 A
Les moteurs seront alimentés à tension constante U = 24 V . On fera alors varier I pour obtenir la vitesse
souhaitée. Le lien entre la vitesse et le courant est donné par la relation suivante :
V =
U − RT .I
k.I
où VM AX_M = 270 m/h pour un courant I = 3 A.
Le couple maximal des moteurs ne permet pas de gravir des pentes supérieures à 20 %.
Lors d’une montée, la caractéristique vitesse/courant est modifiée. La vitesse maximale que peut atteindre le robot
dépend de l’inclinaison du terrain. Elle est donnée par la relation suivante :
100 − 2.pente
100
où pente correspond à la pente à gravir exprimée directement en pourcent
VM AX = VM AX_M .
Lors d’une descente, la vitesse maximale VM AX_M ne peut être dépassée, mais le courant nécessaire pour l’atteindre
est réduit proportionnellement à la pente et atteint 0, 1 A pour une pente de 40 %.
Capteurs :
Le relevé des données scientifiques prend 64 s et nécessite une puissance de 40 W sous une tension de 24 V.
Bibliothèque du robot
Pour pouvoir simuler le comportement du robot, vous serez amené à développer la bibliothèque des fonctions
disponibles sur le robot. Chacune d’entre elles prend un certain temps et consomme une partie de l’énergie disponible
sur la batterie. Pensez alors à mettre à jour les informations relatives au robot à chaque utilisation de ces fonctions.
1. on supposera que 50 000 lux est le maximum d’éclairement disponible et que la caractéristique Puissance/Eclairement est linéaire
L’ensemble des fonctions listées ci-dessous seront déclarées dans un fichier robot.h et définies dans un fichier
robot.c :
— void initialisationRobot(...) : initialise les données du robot lors de son lancement, en particulier le temps
initial et les coordonnées coordX et coordY du point d’atterrissage ;
— int avancerXY(int dx, int dy, int vitesse) : permet de faire avancer le robot selon le vecteur de coordonnées
(dx,dy) (où dx et dy sont donnés en mètre) à une vitesse donnée en pourcentage de la vitesse maximale (cette
vitesse n’est pas forcément atteinte selon l’inclinaison du sol - voir sous-section précédente). Cette fonction
retourne 0 si le robot a pu avancer, 1 sinon.
— float testBatterie(void) : renvoie l’état de la batterie (entre 0 et 100 %).
— int rechargerBatterie(float valFinale) : recharge la batterie jusqu’à atteindre la valeur passée en paramètre
(en pourcentage) - en vérifiant seconde par seconde la valeur de l’éclairement.
— data releverDonnees(void) : renvoie le relevé d’une donnée. La température sera fortement corrélée à l’éclairement (avec deux heures de décalage - temps du réchauffement de l’atmosphère). L’humidité sera lue dans un
fichier au format pgm (dont le nom pourra changer d’une simulation à l’autre) permettant de simuler une
mission réelle.
— int releverEclairement(void) : renvoie la valeur de l’éclairement en millier de lux (entre 0 et 50). Cette fonction doit bien entendu dépendre de la vitesse de rotation de la planète concernée. Cette fonction ne consomme
pas de temps ni de puissance. Elle ne servira qu’à la simulation pour connaître la valeur de l’éclairement ambiant
nécessaire pour les calculs des autres fonctions.
ANNEXE : Fichiers PGM
Le format PGM est un format d’image reconnu par la plupart des logiciels d’imagerie (en particulier sous Linux/MAC). Il vous est conseillé de télécharger le logiciel GIMP (gratuit, libre et multiplateforme) pour pouvoir
visualiser les images PGM sur votre propre machine.
Ce format de fichier est utilisé pour des images en niveau de gris. En plus des caractéristiques de largeur et
hauteur, l’en-tête des fichiers PGM contient une valeur maximale utilisée pour coder les niveaux de gris (cette valeur
doit être inférieure à 65536). Chaque niveau de gris est alors codé par une valeur entre 0 et cette valeur maximale,
proportionnellement à son intensité. Un pixel noir est codé par la valeur 0, un pixel blanc est codé par la valeur
maximale.
L’entête a le format suivant :
P2
# Commentaire
40 100
# Nombre de lignes et de colonnes - ici 40 colonnes et 100 lignes
255
# Dynamique des valeurs - ici codage des pixels de 0 à 255
# Première ligne de l’image contenant 40 valeurs séparées par un espace
10 10 10 20 30 34 89 72 90 19 234 ...

Documents pareils