Table des matières:

Stabilisateur de caméra portable : 13 étapes (avec photos)
Stabilisateur de caméra portable : 13 étapes (avec photos)

Vidéo: Stabilisateur de caméra portable : 13 étapes (avec photos)

Vidéo: Stabilisateur de caméra portable : 13 étapes (avec photos)
Vidéo: 10 MEILLEURS STABILISATEURS POUR CAMÉRAS DE 2021 2024, Juillet
Anonim
Stabilisateur de caméra portable
Stabilisateur de caméra portable

introduction

Ceci est un guide pour créer une plate-forme de stabilisation de caméra portable à 3 axes pour une GoPro à l'aide d'une carte de développement Digilent Zybo Zynq-7000. Ce projet a été développé pour la classe CPE Real-Time Operating Systems (CPE 439). Le stabilisateur utilise trois servos et un IMU pour corriger le mouvement de l'utilisateur afin de maintenir le niveau de la caméra.

Pièces requises pour le projet

  • Carte de développement Digilent Zybo Zynq-7000
  • Sparkfun IMU Breakout - MPU 9250
  • 2 servos HiTec HS-5485HB (acheter un mouvement à 180 degrés ou programmer de 90 à 180 degrés)
  • 1 Servo HiTec HS-5685MH (acheter un mouvement à 180 degrés ou programmer de 90 à 180 degrés)
  • 2 supports de servos standards
  • 1 planche à pain
  • 15 fils de liaison mâle-mâle
  • 4 fils de liaison mâle-femelle
  • Colle chaude
  • Poignée ou poignée
  • Cheville en bois de 5 mm de diamètre
  • GoPro ou autre caméra et matériel de montage
  • Alimentation capable de fournir 5V.
  • Accès à l'imprimante 3D

Étape 1: Configuration du matériel Vivado

Configuration matérielle Vivado
Configuration matérielle Vivado

Commençons par créer la conception de bloc sous-jacente pour le projet.

  1. Ouvrez Vivado 2016.2, cliquez sur l'icône "Créer un nouveau projet", puis cliquez sur "Suivant>".
  2. Nommez votre projet et cliquez sur "Suivant >".
  3. Choisissez le projet RTL et cliquez sur "Suivant >".
  4. Tapez dans la barre de recherche xc7z010clg400-1 puis sélectionnez la partie et appuyez sur "Suivant >" et "Terminer".

Étape 2: Configuration de la conception de bloc

Nous allons maintenant commencer à générer la conception du bloc en ajoutant et en configurant le bloc IP Zynq.

  1. Sur le panneau de gauche, sous IP Integrator, cliquez sur "Créer un design de bloc", puis sur "OK".
  2. Faites un clic droit dans l'onglet "Schéma" et choisissez "Ajouter IP…".
  3. Tapez "ZYNQ7 Processing System" et cliquez sur la sélection.
  4. Double-cliquez sur le bloc Zynq qui apparaît.
  5. Cliquez sur "Importer les paramètres XPS" et importez le fichier "ZYBO_zynq_def.xml" fourni.
  6. Allez dans "MIO Configuration" et sélectionnez "Application Processor Unit" et activez les minuteurs 0 et Watchdog.
  7. Dans le même onglet, sous « I/O Peripherals », sélectionnez ENET 0 (et changez le menu déroulant en « MIO 16.. 27 », USB 0, SD 0, UART 1, I2C 0.
  8. Sous "GPIO", cochez GPIO MIO, ENET Reset, USB Reset et I2C Reset.
  9. Naviguez maintenant jusqu'à "Configuration de l'horloge". Sélectionnez FCLK_CLK0 sous PL Fabric Clocks. Ensuite, cliquez sur "OK".

Étape 3: Créer un bloc IP PWM personnalisé

Ce bloc IP permet à la carte d'envoyer un signal PWM pour contrôler le mouvement des servos. Le travail était fortement basé sur le tutoriel de Digitronix Népal, trouvé ici. La logique a été ajoutée pour ralentir l'horloge afin que l'impulsion soit sortie à la bonne vitesse. Le bloc prend un nombre de 0 à 180 et le convertit en une impulsion de 750 à 2150 usec.

  1. Maintenant, sous l'onglet Outils près du coin supérieur gauche, cliquez sur "Créer et empaqueter l'IP…" et cliquez sur Suivant.
  2. Sélectionnez ensuite "Créer un nouveau périphérique AXI4" et cliquez sur Suivant.
  3. Nommez votre bloc IP PWM (nous l'avons nommé pwm_core) et cliquez sur Suivant, puis sur Suivant sur la page suivante également.
  4. Maintenant, cliquez sur "Modifier l'IP" et appuyez sur Terminer. Cela ouvrira une nouvelle fenêtre pour éditer le bloc pwm.
  5. Dans l'onglet "Sources" et sous "Sources de conception", développez 'pwm_core_v1_0' (remplacez pwm_core par votre nom) et ouvrez le fichier qui devient visible.
  6. Copiez et collez le code fourni sous 'pwm_core_v1_0_S00_AXI.v' dans le fichier zip en bas du projet. Ctrl + Shift + R et remplacez 'pwm_core' par votre nom pour le bloc ip.
  7. Ensuite, ouvrez 'nom _v1_0' et copiez le code fourni dans le fichier 'pwm_core_v1_0.v'. Ctrl + Shift + R et remplacez 'pwm_core' par name.
  8. Accédez maintenant à l'onglet « IP du package - nom » et sélectionnez « Paramètres de personnalisation ».
  9. Dans cet onglet, il y aura une barre jaune en haut qui contient du texte lié. Sélectionnez cette option et "Paramètres cachés" apparaîtra dans la boîte.
  10. Allez maintenant dans "Customization GUI" et faites un clic droit sur Pwm Counter Max sélectionnez "Edit Parameter…".
  11. Cochez les cases "Visible dans l'interface graphique de personnalisation" et "Spécifier la plage".
  12. Modifiez le menu déroulant « Type: » en Plage d'entiers et définissez le minimum sur 0 et le maximum sur 65535 et cochez la case « Afficher la plage ». Cliquez maintenant sur OK.
  13. Faites glisser Pwm Counter Max sous l'arborescence 'Page 0'. Allez maintenant dans « Review and Package » et cliquez sur le bouton « Re-Package IP ».

Étape 4: ajouter un bloc IP PWM à la conception

Ajouter un bloc IP PWM à la conception
Ajouter un bloc IP PWM à la conception

Nous ajouterons le bloc IP dans la conception du bloc pour permettre à l'utilisateur d'accéder au bloc IP PWM via le processeur.

  1. Faites un clic droit dans l'onglet du diagramme et cliquez sur "Paramètres IP…". Accédez à l'onglet "Gestionnaire de référentiel".
  2. Cliquez sur le bouton plus vert et sélectionnez-le. Recherchez maintenant ip_repo dans le gestionnaire de fichiers et ajoutez-le au projet. Appuyez ensuite sur Appliquer, puis sur OK.
  3. Faites un clic droit dans l'onglet du diagramme et cliquez sur "Ajouter IP…". Tapez votre nom de bloc IP PWM et sélectionnez-le.
  4. Il devrait y avoir une barre verte en haut de l'écran, sélectionnez d'abord "Exécuter l'automatisation de la connexion" et cliquez sur OK. Cliquez ensuite sur "Exécuter l'automatisation des blocs" et cliquez sur OK.
  5. Double-cliquez sur le bloc PWM et changez Pwm Counter Max de 128 à 1024.
  6. Passez le pointeur de votre souris sur PWM0 sur le bloc PWM. Il devrait y avoir un petit crayon qui apparaît lorsque vous le faites. Faites un clic droit et sélectionnez "Créer un port…" et cliquez sur OK lorsqu'une fenêtre s'ouvre. Cela crée un port externe vers lequel le signal doit être transmis.
  7. Répétez également l'étape 6 pour PWM1 et PWM2.
  8. Trouvez la petite icône circulaire à double flèche dans la barre latérale et cliquez dessus. Il régénérera la mise en page et la conception de votre bloc devrait ressembler à l'image ci-dessus.

Étape 5: Configurer HDL Wrapper et configurer le fichier de contraintes

Configurer le wrapper HDL et configurer le fichier de contraintes
Configurer le wrapper HDL et configurer le fichier de contraintes

Nous allons maintenant générer la conception de haut niveau pour notre conception de bloc, puis mapper PWM0, PWM1 et PWM2 aux broches Pmod sur la carte Zybo.

  1. Allez dans l'onglet "Sources". Faites un clic droit sur votre fichier de conception de bloc sous "Sources de conception" et cliquez sur "Créer un wrapper HDL…". Sélectionnez « Copier le wrapper généré pour autoriser les modifications par l'utilisateur » et cliquez sur OK. Cela génère la conception de haut niveau pour la conception de bloc que nous avons créée.
  2. Le Pmod vers lequel nous allons sortir est JE.
  3. Sous Fichier, sélectionnez « Ajouter des sources… » et sélectionnez « Ajouter ou créer des contraintes » et cliquez sur Suivant.
  4. Cliquez sur ajouter des fichiers et sélectionnez le fichier "ZYBO_Master.xdc" inclus. Si vous regardez dans ce fichier, vous remarquerez que tout n'est pas commenté, à l'exception de six lignes "set_property" sous "##Pmod Header JE". Vous remarquerez que PWM0, PWM1 et PWM2 sont les arguments de ces lignes. Ils correspondent à la broche 1, à la broche 2 et à la broche 3 du JE Pmod.

Étape 6: Génération de Bitstream

Nous devons générer le flux binaire pour la conception matérielle à exporter vers le SDK avant de continuer.

  1. Sous "Programmer et déboguer" dans la barre latérale, sélectionnez "Générer Bitstream". Cela exécutera la synthèse, puis l'implémentation, puis générera le flux binaire pour la conception.
  2. Corrigez toutes les erreurs qui apparaissent, mais les avertissements peuvent généralement être ignorés.
  3. Allez dans Fichier-> Lancer le SDK et cliquez sur OK. Cela ouvrira le SDK Xilinx.

Étape 7: Configuration du projet dans le SDK

Cette partie peut être un peu frustrante. En cas de doute, créez un nouveau BSP et remplacez l'ancien. Cela nous a permis d'économiser beaucoup de temps de débogage.

  1. Commencez par télécharger la dernière version de FreeRTOS ici.
  2. Extrayez tout du téléchargement et importez FreeRTOS dans le SDK en cliquant sur Fichier-> Importer, et sous "Général", cliquez sur "Projets existants dans l'espace de travail", puis cliquez sur Suivant.
  3. Accédez à "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" dans le dossier FreeRTOS. N'importez "RTOSDemo" qu'à partir de cet emplacement.
  4. Générez maintenant un Board Support Package (BSP) en cliquant sur Fichier -> Nouveau Board Support Package.
  5. Sélectionnez "ps7_cortexa9_0" et cochez "lwip141" et cliquez sur OK.
  6. Faites un clic droit sur le dossier bleu RTOSDemo et sélectionnez "Références de projet".
  7. Décochez "RTOSDemo_bsp" et cochez le nouveau BSP que nous venons de créer.

Étape 8: Modifications du code FreeRTOS

Le code que nous fournissons peut être séparé en 7 fichiers différents. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h et iic_imu.h. Le code dans iic_main_thread.c a été adapté de la bibliothèque de Kris Winer, qui peut être trouvée ici. Nous avons principalement transformé son code pour incorporer des tâches et le faire fonctionner avec la carte Zybo. Nous avons également ajouté des fonctions de calcul de la correction d'orientation de la caméra. Nous avons laissé dans plusieurs instructions print qui sont utiles pour le débogage. La plupart d'entre eux sont commentés mais si vous en ressentez le besoin, vous pouvez les décommenter.

  1. Le moyen le plus simple de modifier le fichier main.c est de remplacer le code par le code copié à partir de notre fichier main.c inclus.
  2. Pour créer un nouveau fichier, faites un clic droit sur le dossier src sous RTOSDemo et sélectionnez C Source File. Nommez ce fichier "iic_main_thread.c".
  3. Copiez le code du fichier "iic_main_thread.c" inclus et collez-le dans votre fichier nouvellement créé.
  4. Répétez les étapes 2 et 3 avec les fichiers restants.
  5. nécessite une instruction de liaison dans gcc. Pour l'ajouter au chemin de construction, cliquez avec le bouton droit sur RTOSDémo et sélectionnez "Paramètres de construction C/C++".
  6. Une nouvelle fenêtre s'ouvrira. Accédez à l'éditeur de liens gcc ARM v7 -> Bibliothèques. Sélectionnez le petit fichier d'ajout dans le coin supérieur droit et tapez "m". Cela inclura la bibliothèque mathématique dans le projet.
  7. Construisez le projet avec Ctrl + B pour confirmer que tout fonctionne. Vérifiez les avertissements générés, mais vous pourrez peut-être les ignorer.
  8. Il y a quelques endroits qui devront être modifiés, principalement la déclinaison magnétique de votre emplacement actuel. Nous expliquerons comment changer cela dans la partie calibration du tutoriel.

Étape 9: Impression 3D pour le stabilisateur

Impression 3D pour stabilisateur
Impression 3D pour stabilisateur

Vous devez imprimer en 3D quelques pièces pour ce projet. On peut probablement acheter des pièces de dimensions/tailles similaires à nos pièces imprimées.

  1. Utilisez les fichiers fournis pour imprimer le bras et le support de maintien pour la GoPro.
  2. Vous devez ajouter un échafaudage au fichier.stl.
  3. Coupez/nettoyez les parties de l'échafaudage en excès une fois imprimées.
  4. Vous pouvez remplacer la cheville en bois par une pièce imprimée en 3D si vous le souhaitez.

Étape 10: Assemblage des pièces

Assemblage des pièces
Assemblage des pièces

Il y a plusieurs pièces pour assembler le stabilisateur. Les supports achetés sont livrés avec 4 vis autotaraudeuses et 4 boulons avec écrous. Puisqu'il y a 3 servos, l'un des palonniers de servo doit être pré-taraudé pour permettre à 2 des boulons de passer à travers.

  1. Soudez 8 broches sur le breakout IMU, 4 de chaque côté.
  2. L'IMU est fixé au support de maintien imprimé en 3D pour la GoPro au centre du support.
  3. Orientez le support de sorte que les trous de montage du servo soient sur votre gauche. Placez l'IMU sur le bord le plus proche de vous, avec les broches accrochées au bord. Ensuite, placez le support GoPro sur l'IMU, en collant l'IMU et le support en place sur le support.
  4. Fixez un HS-5485HB au support de servo qui est intégré au bras imprimé en 3D.
  5. Vissez le support GoPro dans le servo fixé au bras, en vous assurant que le servo est réglé de sorte qu'il se trouve au milieu de sa plage de mouvement.
  6. Ensuite, fixez le servo HS-5685MH à un support de servo. Tapotez ensuite le palonnier du servo avec l'une des vis. Fixez maintenant le servo au bas du dernier support de servo.
  7. Fixez maintenant le dernier servo au support dans lequel le servo HS-5685MH est vissé. Ensuite, vissez le bras dans ce servo, en vous assurant que le bras est vissé pour qu'il puisse se déplacer de 90 degrés dans chaque sens.
  8. Pour terminer la construction du cardan, ajoutez un petit morceau de cheville en bois pour connecter le support GoPro et le bras imprimé en 3D. Vous avez maintenant assemblé le stabilisateur.
  9. Enfin, vous pouvez ajouter une poignée connectée au support de servo inférieur.

Étape 11: Connecter Zybo au stabilisateur

Connecter Zybo au stabilisateur
Connecter Zybo au stabilisateur

Il y a quelques choses à faire attention lorsque vous faites cela. Vous voulez vous assurer que le 5V de l'alimentation n'entre jamais dans la carte Zybo, car cela entraînerait des problèmes avec la carte. Assurez-vous de vérifier vos cavaliers pour confirmer qu'aucun fil n'est commuté.

  1. Pour attacher le Zybo au stabilisateur, vous aurez besoin de 15 cavaliers mâles à mâles et de 4 cavaliers mâles à femelles.
  2. Tout d'abord, connectez deux cavaliers à votre alimentation 5V le long des rails + et - de la maquette. Ceux-ci fourniront l'alimentation aux servos.
  3. Ensuite, connectez 3 paires de cavaliers aux rails + et - de la maquette. Ce sera la puissance pour chacun des servos.
  4. Branchez l'autre extrémité des cavaliers + et - dans chacun des servos.
  5. Connectez un cavalier entre le rail - de la maquette et l'une des broches GND sur le Zybo JE Pmod (voir l'image de l'étape 5). Cela créera un terrain d'entente entre la carte Zybo et l'alimentation.
  6. Ensuite, connectez un fil de signal à la broche 1, à la broche 2 et à la broche 3 du JE Pmod. La broche 1 correspond au servo inférieur, la broche 2 correspond au servo à l'extrémité du bras et la broche 3 correspond au servo du milieu.
  7. Branchez les 4 fils femelles sur les broches GND, VDD, SDA et SCL de la sortie IMU. GND et VDD se branchent sur GND et 3V3 sur les broches JF. Branchez la broche SDA dans la broche 8 et SCL dans la broche 7 du JF (voir l'image de l'étape 5).
  8. Enfin, connectez l'ordinateur à la carte à l'aide d'un câble micro usb. Cela permettra la communication uart et vous permettra de programmer la carte Zybo.

Étape 12: Correction du nord géographique

Correction du nord géographique
Correction du nord géographique

L'étalonnage du magnétomètre dans l'IMU est important pour le bon fonctionnement de l'appareil. La déclinaison magnétique, qui corrige le nord magnétique au nord vrai.

  1. Pour corriger la différence entre le nord magnétique et le nord géographique, vous devez utiliser une combinaison de deux services, Google Maps et le calculateur de champ magnétique de la NOAA.
  2. Utilisez Google Maps pour trouver la latitude et la longitude de votre position actuelle.
  3. Prenez votre longitude et latitude actuelles et branchez-les dans le calculateur de champ magnétique.
  4. Ce qui est renvoyé, c'est la déclinaison magnétique. Branchez ce calcul dans le code à la ligne 378 de "iic_main_thread.c". Si votre déclinaison est est, alors soustrayez de la valeur de lacet, si ouest alors ajoutez à la valeur de lacet.

*la photo a été prise à partir du guide de connexion MPU 9250 de Sparkfun, trouvé ici.

Étape 13: Exécuter le programme

Exécution du programme
Exécution du programme

Le moment que vous attendiez ! La meilleure partie du projet est de le voir fonctionner. Un problème que nous avons remarqué est qu'il y a une dérive par rapport aux valeurs rapportées par l'IMU. Un filtre passe-bas peut aider à corriger cette dérive, et jouer avec les calibrations du magnétomètre, de l'accélération et du gyroscope aidera également à corriger cette dérive.

  1. Tout d'abord, construisez tout dans le SDK, cela peut être fait en appuyant sur Ctrl + B.
  2. Assurez-vous que l'alimentation est allumée et réglée sur 5V. Vérifiez que tous les fils vont à leur place correcte.
  3. Ensuite, pour exécuter le programme, appuyez sur le triangle vert en haut au centre de la barre des tâches.
  4. Lorsque le programme s'exécute, les servos seront tous réinitialisés à leurs positions 0, alors soyez prêt pour le déplacement de la plate-forme. Une fois le programme initialisé, les servos reviendront ensuite à leurs positions à 90 degrés.
  5. Une fonction d'étalonnage du magnétomètre s'exécutera et les instructions seront imprimées sur le terminal UART, auquel vous pouvez vous connecter via un moniteur série tel que « putty » ou le moniteur série fourni dans le SDK.
  6. L'étalonnage vous fera déplacer l'appareil en 8 pendant environ 10 secondes. Vous pouvez supprimer cette étape en commentant la ligne 273 de "iic_main_thread.c". Si vous le commentez, vous devez décommenter les lignes 323 - 325 "iic_main_thread.c". Ces valeurs ont été initialement recueillies à partir de l'étalonnage du magnétomètre ci-dessus, puis insérées en tant que valeurs.
  7. Après le calibrage, le code de stabilisation s'initialisera et l'appareil maintiendra la caméra stable.

Conseillé: