Site ELEC344/ELEC381

Partie interactive du site pédagogique ELEC344/ELEC381 de Télécom ParisTech (occurrence 2010).

Catégories

La joie des grands espaces

Après la soutenance de vendredi, voyant que la démo s’était bien passée, nous avons décidé de profiter du grand espace intérieur du complexe pour (enfin !) s’amuser avec notre Heliokter.

Et voici un vol assez long et stable, avec Etienne au pilotage (le son a été supprimé) :

Soutenances finales

Les soutenances finales des projets auront lieu aujourd’hui à 13h30 au Complexe 13’53 (53 rue Vergniaud, 75013 Paris). On peut y accéder depuis le couloir E100 de Télécom ParisTech. Les soutenances sont publiques, vous y êtes les bienvenus.

Heliokter Fin

  • Un lien intéressant, mais peut-être basique pour nous. Il décrit les erreurs plus fréquent de l’embarqué.
  • J’ai cherché un peu comment régler les coefficients du PID, mais je n’ai pas trouvés rien de magique. Un lien avec le basique de la programmation du PID.
  • J’ai adapté un driver de joystick pour linux, de tel façon qu’il marche avec un gamepad d’ordinateur. Ce gamepad a deux sticks analogique qui donnent de valeurs signés en 16 bits. Dans ce même jour Sam nous a donné la télécommande qui est beaucoup plus propre. Elle utilise 10 bits, mais la sensibilité de la manette est presque linéaire (le gamepad avait de deadzone). Un autre problème serait envoyer les commandes par bluetooth, qui n’est pas fiable ni dispose d’une bonne distance de communication (10~100m). Avec le ZigBee, je pense que ça pourrait marcher bien, par contre il coûte cher. Donc la télécommande est parfaite, de plus son interface UART la rendre simple à utiliser. Maintenant, on utilise les informations de thrust, roll, pitch et yaw.
  • Le FQA utilise des quaternions qui n’ont pas de singularité, mais pour les trouvé il faut travailler avec les angles d’Euler et ces ont de singularité. Dans cet algorithme, il faut traiter le cas où l’angle de pitch vaut  +/- ~90, on le traite en faisant une rotation de les vecteurs d’entrée d’un certain offset de façon à jamais arriver à cette situation. J’ai mis ce changement dans le code du FQA.
  • Le watchdog: je pense que pour le heliokter un tel système peut être important. L’inconvénient est traiter le reset, mais c’est le même problème de quand on perd le signal de la télécommande. On doit mêtre les consigne de angle à 0 et une vitesse suffisamment élevé pour le faire tomber doucement. Du point de vue pratique, on peut utiliser une tâche ou une interruption pour remettre la valeur du conteur, c’est facile à programme. J’ai fait le code, mais pour l’instant on ne l’utilise pas (on a besoin de tester bien avant).
  • Après savoir qu’on n’aurait pas de ZigBee j’ai arrêté le développement de l’interface graphique(en C++), parce qu’elle était liée à la communication, mais après avoir acheté un module bluetooth j’ai recommencé. J’avais pensé que c’était facile à faire, mais ce n’est pas le cas. Utiliser le Model Control View (MVC) que respecte les liaison est, en fait, dificile. Malgré le petite nombre de fonctionnalités, il y a déjà pas mal de couche logiciel et le système est multi-thread. Heureusement, wxWidgets dispose de beaucoup widgets de haut niveau. Pour l’instant on a trois fenêtre: 3D, Terminal et Setting. Par contre seulement la Terminal a toutes ces fonctionnalités. Les autres sont presque là, il faut retrouver la DCM pour faire la bonne rotation dans la fenêtre 3D et dans l’autre envoyer les valeurs des sliders. De toute façon, il faudra les tester bien et à cause de cela on ne la montrera pas demain.
  • Voici les trois fenêtres (j’ai changé aussi le code OpenGL de le heliokter):

PuLSE : dernières avancées…

Depuis deux jours, le problème concernant la fenêtre tcp est réglé. De plus, le serveur http fonctionne maintenant correctement ce qui nous permet d’envoyer des fichiers à notre carte afin de les sauvegarder sur la carte SD. Reste maintenant à gerer les accès concurents à la carte SD et à parser correctement les requetes PUT

Twitter

Je viens de finir le programme en python qui sera chargé de récupérer les nouveaux tweets, de créer le fichier ilda correspondant et de passer au suivant si on valide, juste de passer au suivant sinon.

Je n’ai plus de problème de caractères, ils sont bien encodés en utf-8. Avec ce que j’ai fini ce matin, on aura pas de problème non plus pour les afficher avec le laser.

Il reste juste à faire le lien de ce programme avec ethernet. On voit ca demain.

Télécommande

Le weekend dernier j’ai révisé sur comment faire un système de asservissement plus fiable que le PID qui, jusqu’à ce moment, fait bien sont travail. Mais, le problème est que même si on trouve des valeurs pour Kp, Kd et Ki, qui font que le Heliokter soit stable, pour réaliser des mouvements un peut plus complexes comme la translation je ne suis pas sûre que ces mêmes valeurs joueront bien aussi.

Étant donné que on déjà le Kalman que marche bien donc on peut profiter de ses variables d’état pour implémenter un  contrôle optimale ou prédictive pour le système d’asservissement. Avant de mettre dans le vrai Heliokter je  pense que il est nécessaire de bien tester sur le simulateur. Pour faire ça j’ai commencé à créer des fonctions qui servent à faire la description physique de l’Heliokopter dans la simulation.

Lundi J’ai travaille avec Fernando pour trouver les trames de transmission de la télécommande.  J’ai ajouté le timer pour savoir si la donné que on a corresponde bien à une trame reçue, comment Samuel a dit j’ai mis 50ms.

Mardi après le examen : (   on a testé mais il ne marchait pas car on s’est trompé dans la configuration du port Usart, il n’est pas le même que on a sur la carte du TP. Après correction la télécommande a commencé à fonctionner et on a pu faire bouger l’Heliokter, et c’est dans un de ces tests qui on a eu un petit souci comme F-X à dit dans son mail.

J-3 May the Fourth : take the kopter in the air

Dimanche

après avoir eu un vol pseudo stationnaire mais peu asservis en lacet, nous  avons compris que les moteurs étaient tous différents les uns des autres, nosu avons commencé à placer des offsets pour les compenser, mais c’est difficile étant donné que cela influe sur les autres paramètres du PID. La gestion des intégrales a été bien améliorée en remettant à zéro les intégrales du PID lorsque l’erreur est proche de zéro (sachant que nos offset doivent annuler les erreurs statiques).

Lundi

Miguel et Fernando ont développé le code pour pouvoir utiliser la télécommande et j’ai mis en place le télémètre et l’asservissement en altitude, le résultat s’améliore doucement. Le lacet est toujours problématique, à cause des importantes disparités des moteurs.

Mardi

Aujourd’hui nous avons commencé à tester avec la télécommande qui permet de régler la poussée des moteurs et donc de stabiliser facilement le copter en altitude ( plus précisément qu’avec le télémètre), nous avons pu faire quelques décollages et vol stationnaires pendant 3-4 secondes en intérieur mais nous avons besoin maintenant d’aller tester en extérieur avec plus d’espace car  en intérieur, une petite déviation d’1 mètre et c’est la catastrophe ( heurt de poteau, alimentation , écran etc … ) , nous avons d’ailleurs cassé notre (enfin!) première hélice …

Demain notre copter verra la lumière du jour !

Contrôle 2010 ELEC344 : partie pratique

La partie pratique du contrôle 2010 d’ELEC344 est destinée à vérifier vos capacités à corriger des petits problèmes lors du développement d’une application embarquée et à suivre de saines pratiques d’ingénierie, le tout de manière autonome. Lisez bien l’ensemble des instructions avant de commencer.

Contexte

Un de vos collègues a tenté de faire le communication challenge, mais malheureusement il n’y est pas parvenu : il reste encore quelques bugs dans sa solution. Votre mission est de corriger ces problèmes afin que votre solution modifiée puisse aller jusqu’à l’étape 7 (comprise). Votre collègue vous assure qu’il n’est pas très loin du résultat correct et que les problèmes qui restent sont mineurs. Mais pouvez-vous le croire ?

La durée de l’épreuve n’est pas connue à l’avance : les enseignants vous diront lorsque celle-ci est terminée et vous indiqueront comment procéder au rendu. Votre dépôt doit donc être dans un état partageable à n’importe quel moment, avec un maximum de corrections appliquées à l’intérieur et au format attendu.

Déroulement du contrôle

  • Récupérez le code de votre collègue avec Mercurial depuis le dépôt « https://login@hg.comelec.enst.fr/elec344/CC_2010″ (où « login » doit être remplacé par votre nom d’utilisateur sous Unix).
  • Dans votre version du dépôt, créez une branche nommée à partir de votre nom de famille, avec, par exemple, la commande « hg branch dupont ». Tous vos commits devront se placer dans cette branche.
  • Corrigez les bugs dans le code afin d’aller jusqu’à l’étape 7 du communication challenge. Chaque bug devra donner lieu à un commit indépendant, qui contient uniquement le changement nécessaire à la correction du bug et un message approprié.
  • Rajoutez un watchdog de façon à ce que la carte reboote toute seule si le programme principal plante. Précisez, en commentaire dans votre code et en anglais, un moyen de tester le fonctionnement correct du watchdog.
  • À la fin du contrôle, nous vous indiquerons comment procéder au rendu du dépôt par la mise à disposition de votre branche.

Pénalités

Étant donné qu’un des buts de cet examen est de vérifier que vous pouvez suivre des instructions simples et claires, certaines erreurs donneront lieu à des pénalités, voire à une disqualification (0 sur la partie pratique) :

  • communication avec un autre étudiant (orale, écrite, électronique, ou toute autre forme) ou commentaire public sur l’épreuve avant qu’elle soit terminée : disqualification
  • commit dans une autre branche que celle nommée par votre nom de famille : disqualification
  • commit avec un nom ou adresse électronique incorrect (format obligatoire : « Prénom Nom <adresse.électronique> », avec une majuscule au prénom et au nom) : disqualification
  • commit contenant autre chose que la correction d’un unique problème : pénalité (vous n’aurez pas les points correspondant aux différents problèmes)
  • commit contenant des fichiers inutiles (fichier objet par exemple) : disqualification
  • commit ne corrigeant pas un problème : pénalité
  • push avant la fin officielle de l’épreuve : disqualification

Vous aurez donc peut-être besoin d’utiliser les commandes « hg status » (pour vérifier l’état de ce que vous êtes sur le point de committer), « hg rollback » (pour défaire le dernier commit si vous vous apercevez après l’avoir examiné avec « hg log -p -b nomdebranche -l 1″ qu’il est incorrect), « hg help » et « hg help command » pour l’aide.

SVG to ILDA

L’idée était d’avoir un alphabet complet et non pas seulement les 26 lettres de l’alphabet en majuscule! J’ai donc modifié le nom des fichiers, ils s’appellent maintenant avec le code hexa de la lettre qu’ils contiennent.

De plus il a fallu améliorer le parseur svg to ilda pour qu’ils puissent reconnaitre maintenant un « è » par exemple ce qui n’était pas le cas avant.
Ca m’a pris pas mal de temps parce qu’il a fallu que je reprenne presque intégralement mon code (premier script en python de ma vie…) puis que je l’améliore.

Mais maintenant tout marche bien, il me resterai éventuellement quelques caractères à ajouter mais ca serait vraiment pour faire beau parce que là on tout ce qu’il faut pour écrire en français!

PuLSE, j-5

Aujourd’hui nous avons trouvé le problème qui survenait lorsque nos deux grandes tâches (le serveur http et la tâche de gestion des fichiers) étaient connectées. Nous avons donc pu lire des playlist codées en dur dans la page web.
Ce soir je me suis mis à la page web définitive. Après quelques heures de débugage voici le résultat (presque terminé) :

On pourra y mettre des répertoires complets, ou bien des fichiers. La liste des fichiers sera générée dynamiquement, et a priori ca sera la seule partie générée automatiquement. Du coté du serveur, Etienne et Thibaut ont fait pas mal de débugage (y compris sur la carte SD et sur l’utilisation des outils python pour génerer les requetes) et ont implémenté le PUT.

Demain, j’essaierai d’apporter de quoi faire une vidéo (Samuel en avait pris une avant les vacances mais je ne l’ai jamais revue d’ailleurs)