dimanche 30 juin 2013

Plus d'internet depuis 3 jours, donc plus de nouvelles, mais j'ai continué à avancer un peu.
Vendredi j'ai repris le support de la bobine afin de diminuer les frottements.
Avant

Après


Voici une petite vidéo du banc de test : 


jeudi 27 juin 2013

"Cent fois sur le métier, remettez votre ouvrage"

Hier, j'ai fait une bonne journée en mode geek, malgré le soleil qui brillait ici.
J'ai corrigé de nombreux bugs, commencé à travailler vraiment sur la partie matériel, enfin "branché les lois de commande" sur les sorties de la vidéo d'une part et au moteur d'autre part

J'ai donc aujourd’hui à peu près quelque chose qui pourrait tenir un cerf-volant quelques secondes en l'air ! Il y a un an et demi quand je m'étais mis ce projet en tête, j'imaginais que ce serait l'histoire de quelques jours. Et je le pense toujours... J'espère en tout cas que ce sera le cas pour quelqu'un qui voudra reprendre le projet.

C'est parfois déprimant de voir comment au fur et à mesure des modifications on arrive à des choses compliquées, et qu' on peut faire mieux en quelques lignes?
"100 fois sur le métier remettre son ouvrage" résume bien cette journée.

Je ne sais pas si j'apprends vraiment de mes erreurs, car je les refaits encore et encore, mais j'arrive maintenant à les identifier et à les corriger plus vite.

mercredi 26 juin 2013

Portage Android

Voici un lien vers un projet utilisant android et arduino.
Un bon lien à réutiliser si je décide de faire un portage du code que je développe actuellement sur android.
http://code.google.com/p/android-arduino-object-tracking-robot/


Ajout vidéos

J'ai enfin ajouté quelques vidéos sur Youtube. Les vidéos sont parfois presque comiques, c'est peut-être pour cela que je n'osais pas les poster ! Je pense que dans quelques années je pourrai en rire plus librement.

Juste pour info j'ai utilisé ffmpeg pour la compression avant l'envoi à Youtube.
J'ai utilisé les liens suivant pour m'aider au paramétrage :
https://support.google.com/youtube/answer/1722171?hl=en
http://www.jcartier.net/spip.php?article57

Voici un court extrait du dernier lien expliquant le fonctionnant de ffmpeg

"ffmpeg -i test.avi -ar 22050 -r 25 -s 320x256 -keyint_min 1 -b 500000 test.flv

- ffmpeg : c’est l’outil
- -i test.avi : c’est le fichier initial.
- -ar 22050 : c’est la fréquence d’échantillonnage audio de sortie.
- -r 25 : c’est le nombre d’images de sortie par seconde, à savoir 25.
- -s 320x256 : c’est la taille de la vidéo de sortie, soit 320 pixels par 256 pixels.
- -keyint_min 1 : c’est le nombre d’images clés : 1 image clé toutes les 1 images clés
- -b 500000 : c’est le bitrate vidéo (si l’on veut spécifier un bitrate audio, on ajoute -ab XXX avec XXX pour le bitrate en octets), soit 500 ko/s
- test.flv : C’est le nom du fichier de sortie."



Et voici la commande que j'ai utilisé
 ffmpeg -i input.MTS -r 25 -s 640x360 -b 1000000 -ab 128000 output.mp4
On peut également tourner la vidéo en utilisant  -vf "transpose=1"


 
Contrôle du moteur depuis le PC

 
Contrôle du moteur avec un potard

 
Contrôle du moteur en boucle fermée avec feedback visuel

 
Vol du cerf-volant lors de la transat (Crash test)

mardi 25 juin 2013

Pipa

Hier, j'ai réussi à bricoler un dissipateur thermique  (heatsink) pour le circuit intégré contenant le pont en H. J'ai utilisé pour cela une simple canette. Les parois sont très faciles à découper avec une simple paire de ciseaux.
J'avais peur que l'aluminium soit conducteur et qu'il y ait un risque de court-circuit, mais j'ai pu vérifier avec un ohmmètre qu'il est parfaitement isolant (peut-être à cause d'une couche superficielle? j'espère que ça tiendra dans le temps avec l'échauffement).
J'ai donc découpé un morceau de manière à entourer le circuit intégré et à faire des ailes au dessus. J'ai caler le tout avec un micro bout de scotch. Pour ceux qui voudraient tenter la même chose, penser à faire une marque pour bien savoir le sens du circuit intégré avant de l'envelopper.
Cela semble avoir bien fonctionné, et j'ai l'impression que le moteur peut maintenant donner un couple supérieur. Il faudra que je vérifie en remettant en place le banc et en mesurant le courant.

Aujourd'hui j'ai essayé de trouver des petits câbles de connexion à Angra dos Reis (Brésil pour ceux qui n'auraient pas suivi) afin de pouvoir disposer d'un deuxième pont en H, toujours afin de pouvoir augmenter la puissance. Mes recherches ont malheureusement été infructueuses.



Sur le chemin du retour, j'ai été surpris par plein de cerf-volants  (pipas) dans le ciel (alors qu'il n'y aucun vent ici). Les enfants (parfois plus tout jeunes) arrivent à faire voler de petits cerf-volants en pompant sur le fil.
J'ai acheté un de ces cerfs-volants pour 1 R$ (Reals, soit environ 35ct d'euro...). Il m'a fallu acheter également un fil, et fabriquer une queue.
Malgré l'aide des enfants, je n'ai pas réussi à faire décoller le cerf-volant comme eux. Il faut un très bon timing et un bon dosage de l'effort. J'essaierai de prendre des photos.

lundi 24 juin 2013

Thread en python

J'ai assez facilement réussi à utiliser les threads. Cela m'a permis de mettre en place le filtrage des données venues du téléphone portable.

J'ai fais un simulateur physique du kite avec un bâton et des bouts.
Cela me permet de faire des tests assez rapidement et de voir les problèmes des différentes solutions possibles avant d'aller plus loin.

Réflexions mécaniques

Caméra

Il faut que la caméra soit fixée de manière à toujours avoir le cerf-volant dans son champ de vision.
Il y a 3 solutions à ce problème :
1) plusieurs caméras
2) caméra avec lentille pour augmenter l'angle de vue
3) caméra mobile avec le cerf-volant
   a) caméra montée sur un système asservi (servo)
   b) caméra montée sur la barre. Permet d'avoir un retour de la position de la barre mais le cerf-volant sort du champ aux angles de barre important
   c) caméra fixée sur 1 fil : la caméra se retrouve sur un axe de rotation et risque de balloter.
   d) caméra montée sur un liaison pivôt sur la barre dirigée par les fils.


Système mécanique


L'architecture dépend du nombre de fils, de la possibilité ou non de rembobiner les fils
L'architecture doit compenser les efforts mécaniques
L'architecture doit permettre le largage de l'aile en toute sécurité

2 fils
1) 1 actionneur pour chaque fil
Cette solution ne permet pas d'équilibrer les efforts et demande des moteurs puissants. Elle a l'avantage de permettre de rembobiner les fils ou de gérer une commande de puissance
2) 2 fils reliés
Cette solution permet d'équilibrer les efforts. Des renvois peuvent-être utilisés pour guider le fil et pour équilibrer la direction des efforts sur l'axe moteur.
   a) tours morts autour d'une bobine
      Il faut faire plusieurs tours pour empêcher le glissement. Il y a risque de surpatter.
   b) Fils enroulés autour de deux bobines montées sur le même axe mais inversées.
3) système à barre
L'utilisation d'une barre est aujourd'hui la référence pour le kitesurf. Cela permet d'utiliser un harnais qui va permettre de supporter les efforts tout en conservant le contrôle. Le problème est donc de placer la barre
  a) 2 moteurs
     les efforts sont maintenant compensés. Il est donc envisageable d'utiliser 2 moteurs, ce qui doit permettre de faire en plus un réglage de la puissance
      I) avec 2 fils
        on perd la moitié de la puissance des moteurs
      II) avec 2 vérins
            un vérin peut tirer, l'autre pousser
   b) 1 moteur
     action directe sur la barre
     système de poulie
     avec un fil : difficulté car la longueur du fil et variable. Il va y avoir du mou qui peut donner une perte de contrôle.
     Cela peut-être compensé en enroulant le fil sur une spirale. ou en utilisant un système de ressort ou d'élastique.
  

samedi 22 juin 2013

Fusion de données accéléromètre et magnétomètre

J'ai finalement décidé de recoder le calcul de l'orientation du téléphone à partir des mesures brutes.
J'ai utilisé pour cela "Computes roll, pitch and yaw. See "Implementing a Tilt-Compensated eCompass using Accelerometer and Magnetometer Sensors" reference AN4248 de Freescale.
J'ai codé en python, en reprenant les équations mais sans l'ensemble des optimisations proposées. Pour une raison que j'ignore la fréquence de réception des trames tombent d'environ 80 (accéléromètre seul sans calcul) à 10 avec le magnétomètre (ce qui reste suffisant). J'en utilise de toute manière encore moins ensuite, mais avoir plus de trames permettrait de mettre en place un filtre pour réduire le bruit (plusieurs degrés sur le cap, peut-être lié aux perturbations électromagnétiques alentours).

Je pense que je vais donc essayer de faire un processus séparé (ou des threads) qui tournera plus vite et pourra faire le filtrage. L'information filtrée sera ensuite récupérée par l'application principale. En python différentes solutions ont l'air d'exister : subprocess, Queue.

Je réfléchis également à modifier complètement l'électronique de puissance que j'utilise. Mon problème vient de la limitation d'intensité qui demande soit de multiplier le nombre de circuit de commande ou peut-être de mieux refroidir les composants, mais je ne trouve pas trop comment faire (j'imagine qu'il faut coller des ailettes métalliques d'une manière ou d'une autre).

La solution alternative serait d'essayer de nouveau de réutiliser directement le mosfet (FQP50N06) présent sur les visseuses et d'ajouter un pont avec 2 (ou 4?) relais électromagnétiques pour inverser la tension (edit : un relais double inverseur devrait suffir) (edit : une difficulté d'utiliser le mosfet vient du fait qu'il nécessite une tension de 9V pour son contrôle et non 5 volt, un étage supplémentaire est donc souhaitable).
D'après la datasheet cela permettrait de tenir 50A par 60V soit 3000W soit environ 4 chevaux, l'équivalent d'un petit moteur d'annexe!
L'utilisation des relais me semble possible car leurs activations ne sera pas constante, mais seulement lors des changements de sens de rotation du moteur (peut-être toutes les 3 à 4 secondes, ce qui laisse de la marge d'utilisation avec 10 millions de cycles pour un démonstrateur).
Par contre la durée de vie sera rapidement réduite si j'essaie de faire du "dynamic braking" pour freiner le moteur à vitesse nulle.

MOSET FQP50N06 et son dissipateur thermique


J'ai également installé hdf5 et h5py dans le but de commencer à faire des fichiers de sauvegardes plus performants que les fichiers textes. Après des problèmes de manque d'header après la compilation des sources, j'ai finalement installé à partir de ce lien

J'ai l'impression que tout peut aller vite en python, mais j'ai tout de même pesté contre plusieurs choses aujourd'hui :
-je ne trouvais pas comment recharger un module : il faut faire reload
-j'ai des difficultés pour faire un simple produit matriciel : il faut utiliser dot (avec numpy.array).

mercredi 19 juin 2013

Aujourd'hui j'ai essayé de corriger un bug dans l'interprétation de l'orientation envoyée par le téléphone.

Voici quelques captures d'écran de l'état des programmes développés.
D'abord le programme principal permettant de connaitre la position du cerf-volant. Pour le développement j'ai réutilisé la vidéo réalisée par High Zenith Power. A terme la vidéo sera envoyée à partir de la webcam d'un téléphone portable. La détection du cerf-volant se base sur la couleur, il est donc important qu'il y ait un bon contraste avec la couleur du ciel ou du paysage si le cerf-volant descend bas. Cela me permet d'obtenir le contour du cerf-volant (en bleu) et une position relative à la caméra, ainsi que l'inclinaison du cerf-volant en faisant la recherche du rectangle le plus petit (rouge) encadrant la forme.
Le rectangle vert correspond à la zone dans laquelle est réellement faite la recherche (en se basant sur la position précédente). Cela permet d'augmenter la fluidité du traitement. Le code utilise simpleCV et n''est pour l'instant pas optimisé. Un optimisation est nécessaire si l'on veut pouvoir contrôler des petits cerf-volants car la latence est de 0.5 à 1s actuellement.
La ligne rouge correspond à l'horizontale (évidemment cela ne correspond pas sur l'image, la vidéo étant un enregistrement et non un live).
Cette ligne rouge est obtenue à partir des informations d'orientation du téléphone (également envoyées en wifi). 
Le 330 correspond ainsi au gisement du cerf-volant.
Le couplage permet d'obtenir une position absolue du cerf-volant au lieu d'une position relative à la caméra. On entre dans le domaine de la réalité augmentée. Voir le code
La photo suivante est un essai de projection de la vidéo de la caméra sur un plan plus grand. En effet, il n'est pas possible de voir toute la fenêtre de vol avec la caméra. Du coup je fais une projection de la fenêtre de vol et je colle dessus l'image correspondant à une partie de la fenêtre de vol.
 

Pour finir pour aujourd'hui, un lien vers n projet étudiant intéressant que je n'avais pas encore vu :

http://www.youtube.com/watch?NR=1&feature=endscreen&v=demmPybYf2I
Ce qui est marrant c'est que les termes de recherche entrés dans Google il y a quelques mois ne donnent pas les mêmes résultats aujourd'hui.

mardi 18 juin 2013

News!!!

Voici plus de deux mois que je n'ai pas posté d'information sur ce blog...
Pourtant le projet n'est pas mort, mais j'ai pris des vacances, entrecoupées de quelques sessions de travail (pourquoi ne pas lier l'utile à l'agréable?).
Je suis maintenant posé pour 15 jours à Bracuhy (Brésil), où je devrais disposer de temps, d'outils et d'une connexion internet pour faire avancer le projet.

Je suis donc parti le 14 avril pour une traversée de l'Atlantique en voilier.
Avant cela, il y a eu quelques préparatifs qui ont fait que la publication d'information sur ce blog n'était plus la priorité.

Voici donc un résumé des avancées liées au projet.

VISION PAR ORDINATEUR
  • prise en main de simpleCV (notamment lors des quarts nocturnes de veille)
  • développement d'un algorithme de détection du cerf-volant à partir d'un flux vidéo et calcul des position et orientation relatives associées
  • développement du traitement des informations d'attitude d'un téléphone android sur un pc distant
    L'application sensorUDP
  • fusion de ces informations pour obtenir une position "absolue" du mobile

MOTORISATION
N'ayant pas pris le moteur et la batterie que j'utilisais en France (et oui c'est lourd dans un sac à dos), j'ai de nouveau eu à choisir un moteur et l'alimentation associée.
Après quelques recherches auprès de moteurs électriques que l'on trouve sur les automobiles (lève-vitre, essuie-glace, direction assistée, etc), mon choix s'est de nouveau porté sur la récupération d'une vielle visseuse/dé-visseuse/perceuse sans fil (pour l'anecdote, j'en ai même acheté une nouvelle, mais heureusement j'en ai trouvé des vielles avant de la démonter...).
Les principales difficultés dans le choix viennent du fait que les données techniques des moteurs sont difficiles à avoir. On arrive en général seulement à avoir le voltage. Il faut souvent démonter le matériel pour obtenir la référence du moteur. Et cela n'est parfois pas suffisant.
Il a donc fallu que je mette en place un banc de test.
Pour cela, j'utilise une bonbonne d'eau de 5 litres (qui à l'avantage d'avoir une poignée) que je remplis avec la quantité d'eau correspondant à la charge demandée. J'utilise une bobine de bout dans laquelle j'ai calé un bouchon de liège dans lequel j'enfonce un outil allant sur la visseuse.
En gros, cela m'a permis de voir que je peux espérer tirer une centaine de watt d'un moteur de visseuse. Malheureusement, pour l'instant je n'atteins qu'une trentaine de watt à cause d'une limitation en intensité au niveau du circuit de puissance. Il peut s'agir du mécanisme de limitation du courant ou du mécanisme de limitation de la température

SIMULATION
J'ai développé un simulateur de cerf-volant 2D au feeling.
Il s'agit d'un modèle cinématique qui ne repose pas vraiment sur les équations de la physique.
J'ai fait une simple interface avec juste un rectangle blanc sur fond noir avec contrôle grâce à la souris

Le petit rectangle blanc représente le cerf-volant dans le simulateur 2D


PILOTAGE
Le simulateur m'a permis de développer un algorithme très simple de pilotage.
Il n'utilise que l'information d'orientation du cerf-volant.
Il s'agit donc à la base d'une sorte de garde-cap.
Si le cerf-volant est horizontal, il va aller vers le haut.
En modifiant son inclinaison il va aller sur le côté de la fenêtre, ce qui permet d'orienter la traction (relativement à la direction du vent)
Je fais ensuite varier l'inclinaison du cerf-volant de manière sinusoïdale, ce qui permet de faire des 8 autour d'une position d'équilibre et ainsi d'augmenter le vent apparent et de faire descendre le cerf-volant dans la fenêtre pour avoir plus de puissance