PIXEL 360, ou comment restez à l'affût du détail ! Automatiser la prise de photos, pour la création d'un 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’accélérer le processus prise de photos et d’améliorer le rendu esthétique du panorama. Le rendu esthétique du panorama est amélioré en réduisant les mauvais raccords grâce à un taux de recouvrement constant.
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é à positionner un appareil photo en fonction du point nodal : 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 1/64, 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 (voir 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

Les moteurs sont connecter aux broches du contrôleur pas à pas. Le contrôleur est branché aux GPIO du Raspberry. Le Raspberry alimente en 5v les moteurs et commande les moteurs via le contrôleur.

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 : pano.py

maquette-unite-de-control-moteur-circuit-imprime Les moteurs et le contrôleur

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 1/64.
  • 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 à billes et ainsi augmenter la précision des mouvements.

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é du future prototype avant de se lancer dans la fabrication. Cela me permet de faire des essais/erreurs pour garantir un résultat optimum.

Je passe par l’étape du dessin pour valider les concepts clés. Ensuite je me lance dans la réalisation du modèle numérique du prototype.

croquis-dessin-technique Dessin technique

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 faciliter le transport.
  2. Le point nodale 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)

Je cherche à déterminer :

  1. Le centre de gravité avec un bricolage maison pour l’exploiter dans le modèle numérique.
  2. La position du point nodale, afin de placer correctement le K5 sur l’axe de rotation de la tête panoramique.(voir le chapitre : La recherche du point nodale).

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. Reproduire cela sur les différents axes. 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 nodale

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 une ligne vertical à 20/30 cm de l’appareil photo, par exemple un pic apéritif.
  3. Viser une ligne verticale très éloignée, supérieur à 500 m (par exemple un émetteur de télévision) de sorte que les deux ligne soient confondus.
  4. Pivoter de l’appareil photo.
  5. Ajuster la postion de l’apareil photo de sorte que les axes restent toujours confondus quel que soit la position de l’appareil photo.
  6. Le calibrage est optimum quand les axes de rotation de la tete panoramique et le point nodal sont coaxials.

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 et 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 révolution complète.
  • 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.
Le résultat de la simulation montre que avec un réducteur de 50.9:1 le couple maximum du moteur est de 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 quatre poulies:

Les deux poulies identiques du châssis :

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

Les deux poulies du berceau :

  • réduction: 1.62
  • profil des dents: GT3
  • nombre des dents: 24 (moteur) et l’autre 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’y a pas de collision entre les pièces en simulant les mouvements de la tête panoramique
  • l’aspect esthétique 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, un 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 du projet, mon 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é
  • Ne pas imprimer la pièce entière, imprimer des échantillons, pour tester les tolérances 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.
  • Les supports sont générés automatiquement par le logiciel de tranchage ou bien il faut les ajouter lors de la conception de la pièce.
  • 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
  • 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.
  • de pièces en plastique PMMA ou également appelé verre acrylique pour réaliser principalement les équerres et les supports moteur.
  • de pièces en plastique PLA pour les pièces imprimées : poulies, support roulement. Elles sont représentées 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 horizontal.

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

Les fichiers sont issus de Solidworks. Ils sont exportés au format SVG afin de pouvoir les importer dans le logiciel de la decoupeuse/graveuse laser. 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.

Mes recommandations:

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

La fabrication de la poulie 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 http://reso-nance.org/wiki/materiel/pcb-diy/chimie/accueil

Remarque: Pour éviter d’utiliser des 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 I²C
  • 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 diodes, 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 ↩︎

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