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 ...