Pixel 360

PIXEL360, ou comment restez à l'affût du détail !
Automatiser la prise de photo, pour la création de panorama.


Table des matières :

Introduction

Pendant mes vacances j’ai réalisé de nombreux panoramas de sites montagneux dans les Pyrénées et dans les Alpes. C’est ainsi que j’ai eu l’idée de créer un dispositif automatique pour prendre ce type de photos afin d’améliorer le rendu esthétique du panorama en réduisant les mauvais raccords causés par les mouvements du décor lors de l’assemblage.
J’avais donc besoin d’un système qui me permettrait d’augmenter la rapidité et la précision des prises de vues.
Dans un premier temps je recherche une solution existante mais au vu des limitations rencontrées, j’entreprends dans un deuxième temps la création de mon propre modèle de tète panoramique.

1 La maquette

La maquette est largement inspirée du projet GigaPi1.

1.1 La conception

Pour faire les plans 2D de la maquette, j’ai utilisé le logiciel libre FreeCAD.
La maquette est composée de deux plans: le châssis et le berceau.
L’idée est d’imprimer les plans à l’échelle 1:1 sur une feuille A3 afin de les décalquer sur une planche de MDF épaisseur 19 mm.

Nomenclature de la maquette :

  • Le châssis, cadre rigide pouvant tourner sur un axe et destiné à supporter le berceau: chassis.pdf
  • Le berceau, cadre rigide destiné à supporter un appareil photo dans une position bien définie. : berceau.pdf

1.2 Les achats

La liste des fournitures :

  • Deux planches de MDF, 272 × 385 mm épaisseur: 19 mm.
  • Deux vis sans fin et roues dentées type Lego.
  • Deux moteurs pas à pas 5v, réducteur intégrer 164, référence “28BYJ-48”
  • Un contrôleur de moteur pas à pas ULN2803A.
  • Un Raspberry Pi.
  • Un trépied de géomètre.
  • Une platine de réglage pour niveau laser (photo).

1.3 La fabrication

La méthode pour découper le châssis et le berceau :

  • Imprimer les plans sur une feuille A3.
  • Fixer le papier A3 sur une planche de médium épaisseur 19 mm.
  • Piquer le dessin avec un clou pour reporter les contours du plan sur la planche de médium.
  • Découper la planche de médium avec une scie à ruban ou scie sauteuse en suivant les traces des pointes du clou.

maquette-tete-panoramique
La première maquette

platine-de-reglage-pour-niveau-laser
Le dispositif de rotation

1.4 Le pilotage des moteurs

Brancher les moteurs sur les broches du contrôleur pas à pas. Le contrôleur est branché sur les GPIO du Raspberry. Le Raspberry alimente en 5v les moteurs et il commande les moteurs.

J’ai réalisé un programme en Python pour piloter les moteurs et avec une courbe d’accélération, pour éviter que les moteurs patinent au démarrage.

maquette-unite-de-control-moteur-circuit-imprime
Les moteurs et sa carte

  • programme sur github ?
    Voir : PROJET/TETE_PANO/Projet-tete-pano/moteur_pas_a_pas/pano.py

1.5 Mon retour d’expérience

J’ai rencontré quelques problèmes lors de l’utilisation de la maquette. Il y a des pas qui “sautent” lors de la rotation des moteurs et la tête ne se positionne pas correctement.

Plusieurs raisons en sont la cause :

  • Les moteurs ne sont pas assez puissant pour faire bouger la tête panoramique malgré le réducteur 164.
  • Les frottements des engrenages sont importants ce qui ajoute de la résistance à la rotation.
  • La structure est souple et la structure se déforme, cela freine les mouvements de rotation.

Les solutions que j’ai retenues sont :

  • Réaliser un châssis et un berceau rigide et indéformable en métal léger.
  • Remplacer les moteurs par des plus puissants, le choix sera basé sur des calculs issues d’une simulation.
  • Réduire les frottements par un montage par roulements a billes et ainsi augmenter la précision des mouvements.

[dessin-technique]()

2 Le prototype

A partir de l’expérience acquise, je laisse cette maquette de côté et je repars sur un nouveau concept …
Le principe retenu est de modéliser la totalité de la nouvelle maquette avant de se lancer dans la fabrication. Cela me permet de faire des essais/erreurs pour garantir un résultat optimum.

Ainsi je me lance dans la réalisation du modèle numérique du prototype.

2.1 Le modèle numérique

Le modèle numérique va me permettre notamment :

  • de dimensionner les moteurs
  • d’optimiser l’encombrement
  • d’amélioration l’esthétique
  • de réaliser une image de synthèse pour présenter la tête panoramique sur un kakémono

2.1.1 Les contraintes imposées

J’impose les contraintes suivantes pour concevoir la nouvelle tête panoramique :

  1. un cadre rigide, léger et compact.
    Rigide pour la précision des déplacements de la tête, léger pour optimiser la dimension des moteurs et compact pour facilité le transport.
  2. Le point modale de l’appareil photo doit se trouver au centre de rotation de la panoramique. C’est un pré-requis pour l’assemblage des photos du panorama, sans quoi il y a des défauts dans le rendu final.
  3. La tête panoramique est équipée d’un appareil photo Pentax K5. Les caractéristiques dimensionnelles et de masse du K5 doivent être prisent en compte pour concevoir la tête panoramique.

2.1.2 Mes choix techniques

En résumé, je fais les choix suivants :

  • Construire un prototype numérique pour valider la conception (modèle statique): l’esthétique, les dimensions, le positionnement du K5, les couples moteurs.
  • Réaliser des simulations de rotation (modèle dynamique) pour valider la cinématique: déterminer les couples moteurs.
  • Utiliser des moteurs pas à pas (vs servo moteur), pour simplifier la programmation des commandes moteurs (pas de boucle d’asservissement à concevoir)
  • Utiliser des rails standard en aluminium : simplifier la fabrication et réduire les coûts, tout en étant rigide et léger.

2.1.3 La modélisation du K5

Les mesures du boîtier et de l’objectif :
Environ 131 mm (L) × 97 mm (H) × 73 mm (P) pour le boîtier (excepté les protubérances)

Ii faut déterminer :

  • le centre de gravité avec un montage, poids du K5 environ 740 g (avec une batterie dédiée) pour calculer les couples des moteurs
  • la position du point modale, afin de placer correctement le K5 sur l’axe de rotation de la tête panoramique. (Voir le chapitre : La recherche du point modale)

2.1.3.1 La recherche du centre de gravité

Pour déterminer le centre de gravité il faut attacher le K5 par un fil qui représente un axe, et déterminer sur cet axe sa position en équilibre avec le niveau à bulle. On reproduit cela sur différents axes et l’intersection des axes permet de trouver le centre de gravité.

centre-de-gravite
La recherche du centre de gravité

2.1.3.2 La recherche du point modale

Placer le point nodale de l’appareil photo au centre de rotation de la tête panoramique.

Pour éviter un effet de parallaxe c’est-à-dire que les photos ne se recouvrent pas correctement lors de l’assemblage panoramique, il faut calibrer le positionnement de l’appareil photographique par rapport au centre de rotation de la tête panoramique.

Une méthode usuelle pour le faire :

  1. placer l’appareil photo sur la tête panoramique
  2. placer un axe vertical à 2030 cm de l’appareil photo
  3. viser une ligne verticale très éloignée (supérieur à 500 m) de sorte que les deux axes soient confondus
  4. faire une rotation de l’appareil photo
  5. déplacer en translation dans les deux axes l’appareil pour trouver la position optimum de calibrage, c’est à dire, l’axe de rotation de la tete panoramique et le point modal sont coaxials. Positionner le rail dans le sens transversal et utiliser la vis micrométrique pour finir sur l’autre axe.
  6. le calibrage est optimum quand les axes restent toujours confondus quel que soit la position de rotation de l’appareil photo

pour plus de détails : https://www.guide-photo-panoramique.com/point-nodal.html

2.1.4 Les caractéristiques du moteur

Pour réaliser la modélisation cinématique, j’ai pris en compte les grandeurs de dimension, de positionnement, de masse, d’inertie des éléments suivants :

  • Caractéristiques des moteurs.
  • Caractéristiques des rails (châssis et berceau).
  • Caractéristiques des organes de fixation.
  • Caractéristiques des organes de transmission (poulie, courroie).
  • Caractéristiques du K5.

Pour calculer le couple moteur nécessaire, j’ai utilisé le logiciel “meca” de solidworks. Les variables sur lesquelles j’ai agi lors de la simulation dynamique afin de m’assurer que le couple soit compatible avec le moteur :

  • Placer la position des centres de gravité des éléments lourds (moteur, K5) au plus proche des axes de rotation.
  • Faire varier l’accélération des moteurs.
  • Dimensionner les poulies.
  • Choisir un couple admissible des moteurs suivant les descriptions fournisseurs.

En conclusion, j’ai choisi un moteur pas à pas avec un réducteur épicycloïdal car cela permet :

  • de créer une courbe d’accélération très progressive. En effet avec un réducteur il faut plus de pas à impulser pour faire une rotation d’un tour.
  • d’accéder à des couples plus importants grâce au réducteur.
  • d’avoir un effet “anti-retour”. Le moteur n’a pas bas besoin d’être alimenté pour verrouiller l’axe dans sa position.

A partir de la simulation en rotation de la tête panoramique, j’obtiens une courbe représentant le couple moteur en fonction du temps.
On peut en extraire le résultat suivant: avec un réducteur de 50.9:1 on obtient le couple maximum du moteur à 40 N.cm

motor-torque-curve
Simulation du couple moteur

Le moteur sélectionné est le suivant :

  • Type : Nema 17 (entraxe des vis de fixation de 42mm)
  • Couple : 44Ncm
  • Courant : 1.68A
  • Reduction : 50.9:1 (pas de 0.035°)

stepper-motor
Moteur pas à pas

2.1.5 Les caractéristiques des organes de transmission

La modélisation cinématique, m’a permis de dimensionner les deux poulies:

La poulie du châssis :

  • réduction: 1
  • profil des dents: GT3
  • nombre des dents: 42

La poulie du berceau :

  • réduction: 1.62
  • profil des dents: GT3
  • nombre des dents: 24 (moteur) et 38 (axe)

Pour concevoir le modèle numerique de la poulie, j’ai utilisé le plan ci dessous qui donne le détaille des cotes:

g2-and-g3-belt
La courroie

Pour obtenir un ajustement précis de la poulie et de la courroie, il faut prendre en compte les conditions de fabrication. Pour cela, j’ai imprimé plusieurs poulies en 3D en ajustant au fur et à mesure les cotes du modèle numérique, jusqu’à obtenir une accroche parfaite entre la courroie et la poulie.

roue-dentee
La poulie du berceau

2.1.6 Les caractéristiques du châssis et du berceau

A ce stade de l’étude, le modèle numérique de la tête panoramique me permet de vérifier :

  • la dimension des rails en alu du châssis et du berceau.
  • qu’il n’existe pas de collision entre les pièces en faisant une simulation des mouvements de rotation
  • l’aspect esthétiques de l’ensemble

2.1.7 La fixation des rails

Les rails sont fixés entre eux avec des plaques et des équerres en plexiglas matériaux rigide (mais cassant) d’épaisseur 3mm. Les écrous et les vis CHC de diamètre 5mm sont bien adaptés car les écrous glissent à l’intérieur de la rainure du rail.

2.1.8 La conception des pièces imprimables

Lors de conception des pièces, c’est à dire la définition des formes et des dimensions, il faut tenir compte de la façon dont elles seront imprimées.

Il s’agit là d’informations acquissent par retours d’expériences :

  • les dimensions des pièces sont limitées par la taille de la machine. Dans le cas de notre projet, une imprimante de dimension 21cm X 29 cm convient.
  • prendre en compte le diamètre de la buse qui a une influence sur la cote de l’objet imprimé
  • faire des gabarits, des pièces d’essais pour tester les côtes tolérancées (par exemple tester les portées de roulement, noyage d’écrou… )
  • tenir compte des angles extérieurs (ou intérieur). Au-delà d’une forme ayant un angle de 45° avec l’axe Z (dans le sens de la hauteur d’impression), il est nécessaire d’utiliser des supports de maintien
  • les supports de maintien sont générés automatiquement par le logiciel de tranchage ou bien il faut les concevoir pendant le modèle numérique.
  • les surfaces planes peuvent se gondoler, il faut mieux prévoir que cette surface soit en contact optimal avec le plateau.
  • la surface en contact avec le plateau est lisse, il y a peu de traces apparentes, c’est peut être un avantage pour l’esthétique de la pièce.

2.1.9 Les roulements à billes

Les roulements ont été serrés axialement par des écrous ou par des chapeaux avec des vis.

2.1.11 La validation du modèle

L’étape de la conception est terminée quand tous les points sont au vert :

  • validation couple-moteur-poulie
  • validation encombrement et positionnement du K5
  • validation esthétique

Ci-dessous le rendu 3D validé :

prototype-tete-panoramique-rendu-3d
Le rendu 3D

2.2 La fabrication des pièces

Les pièces ont été fabriquées avec les outils, les machines et les conseils du fablab Coh@bit.

La tête panoramique est composée :

  • de rails pour la structure, à couper à bonne longueur.
  • de pièces en plastique PMMA (polymétachrylate de méthyle) ou également appelé verre acrylique pour réaliser principalement les équerres et les supports moteur. A découper au laser.
  • de pièces à imprimer : poulies, support roulement (matière PLA), elles sont en rouge sur l’image de synthèse de la tête panoramique.

2.2.1 La découpe des rails

J’ai utilisé la scie à ruban vertical.

2.2.2 La découpe laser des pièces en PMMA

Les fichiers sont issus de Solidworks et ils sont exportés au format SVG afin de pouvoir les importer dans le logiciel de la decoupeuse/graveuse. Les paramètres de coupe sont préconfigurés dans la machine. La découpe est très rapide, l’ordre de grandeur est de quelques minutes.

2.2.3 L’impression 3D

Les étapes de la chaîne numérique :

  1. exporter le fichier de la pièce à imprimer au format STL depuis Solidworks.
  2. utiliser le logiciel Slic3r, un trancheur et exporter le résultat au format g-code pour l’imprimante.
  3. utiliser le logiciel Octoprint pour lire le g-code et piloter l’imprimante. Octoprint a une interface web. On peut donc piloter l’imprimante à distance et surveiller l’impression (plusieurs heures)via un retour vidéo.
  4. Octoprint communique avec un microcontrôleur Arduino. Celui-ci embarque le logiciel Marlin (firmware) qui interprète le g-code et il retourne des informations sur l’état des capteurs de température et des positions des moteurs.

Les recommandations:

  • comme le temps d’impression est long (échelle en heures), il faut prévoir le temps d’occupation de la machine, sa disponibilité au fablab.
  • prévoir la quantité de fil nécessaire, pour ne pas changer la bobine en cours d’impression.
  • utiliser du ruban de masquage (le mien est de couleur bleu) pour bien faire adhérer les pièces sur le plateaux.

Les réglages d’impression :

  • température
  • dimension de imprimante
  • vitesse
  • épaisseur des strates
  • etc …

prototype-poulie-dentee-pla
La fabrication d’une poulie

2.3 La carte électronique de pilotage des moteurs

Pour concevoir la carte électronique qui va piloter les deux moteurs de la tête panoramique, j’ai utilisé le logiciel Kicad.

Cette carte est réalisé selon un procédé de gravure chimique. Voir ce lien qui explique toutes les étapes reso-nance.org

Remarque: Pour éviter l’utilisation de produits chimiques, il est possible de graver les pistes avec une fraiseuse numérique (CNC). Cela convient très bien pour des cartes double faces sans composant de surface (CMS).

2.3.1 La carte électronique version 1

Lors des tests de fonctionnement, le Raspberry Pi (RPi) a grillé ! Cela vient probablement du fait que la carte de pilotage était alimentée par le Raspberry.

De cet échec, je conçois une version améliorée.

Inconvénients de cette carte :

  • Une erreur dans mon schéma, j’ai un condensateur2 inutile en trop.
  • l’alimentation de la carte par le Raspberry
  • Le contrôleur du moteur pas-à-pas A4988 a un courant max de 1A et jusqu’ à 2A avec un dissipateur.

Avantages :

  • l’utilisation du protocole i2c
  • une conception simple face

carte-version-1-circuit-imprime
La carte électronique version 1

2.3.2 La carte électronique version 2

Je remplace le contrôleur A4988 par le DRV8825, il supporte un courant plus élevé, soit un max de 1.5A sans dissipateur et 2.2A avec un dissipateur thermique adéquat. Pour cette carte, j’utilise un dissipateur et un ventilateur. Le moteur choisi a besoin de 1.68A pour une utilisation optimum.

Afin d’isoler le Raspberry Pi de la carte de pilotage je n’utilise pas les GPIO du Raspberry. Pour cela, je monte sur la carte deux puces MCP23008, des extensions de GPIO, qui communique avec le RPi en utilisant le protocole I²C. Le contrôleur DRV8825 est connecté au MCP23008.

L’alimentation du Rpi est séparée de la carte :
une alimentation pour les deux contrôleurs en 12v
une deuxième alimentation en 5v qui est régulée en 3.3v pour les leds, les MCP23008 et les ventilateurs

carte-version-2-schema
Le schéma

carte-version-2-platine-experimentation
La platine d’expérimentation

Le circuit imprimé est installé dans son boîtier. Sur cette photo, le Raspberry n’est pas visible, il est dessous la carte.
Le boitier est en MDF et le capot en acrylique, l’ensemble est découpé au laser.

carte-version-2-circuit-imprime"
La carte électronique version 2


  1. http://gigapi.blogspot.fr/2013/05/gigapi-project-by-tim-jack-stocker.html [return]
  2. Le condensateur de puissance permet d’assurer la stabilité du courant, en effet le contrôleur A4988 du moteur est sensible au pic de courant. [return]
Antoine CAVARD Écrit par :