Taula de continguts:

Estabilitzador de càmera de mà: 13 passos (amb imatges)
Estabilitzador de càmera de mà: 13 passos (amb imatges)

Vídeo: Estabilitzador de càmera de mà: 13 passos (amb imatges)

Vídeo: Estabilitzador de càmera de mà: 13 passos (amb imatges)
Vídeo: Раскрываю секрет вкусного шашлыка от А до Я. Шашлык из баранины 2024, Desembre
Anonim
Estabilitzador de càmera de mà
Estabilitzador de càmera de mà

Introducció

Aquesta és una guia per crear una plataforma d’estabilització de càmera de mà de 3 eixos per a un GoPro mitjançant una placa de desenvolupament Digilent Zybo Zynq-7000. Aquest projecte es va desenvolupar per a la classe de sistemes operatius en temps real de CPE (CPE 439). L'estabilitzador utilitza tres servos i una IMU per corregir el moviment de l'usuari per mantenir la càmera al nivell.

Parts necessàries per al projecte

  • Taula de desenvolupament Digilent Zybo Zynq-7000
  • Sparkfun IMU Breakout - MPU 9250
  • 2 servidors HiTec HS-5485HB (compra moviment de 180 graus o programa de 90 a 180 graus)
  • 1 Servo HiTec HS-5685MH (compra moviment de 180 graus o programa de 90 a 180 graus)
  • 2 suports de servomotor estàndard
  • 1 tauler de pa
  • 15 cables de pont masculí a home
  • 4 cables jumper de dona a dona
  • Cola calenta
  • Grip o nansa
  • Pas de fusta de 5 mm de diàmetre
  • GoPro o una altra càmera i maquinari de muntatge
  • Font d'alimentació capaç de generar 5V.
  • Accés a la impressora 3D

Pas 1: Configuració del maquinari Vivado

Configuració de maquinari Vivado
Configuració de maquinari Vivado

Comencem a crear el disseny de blocs subjacent per al projecte.

  1. Obriu Vivado 2016.2, feu clic a la icona "Crea un projecte nou" i feu clic a "Següent>".
  2. Poseu un nom al vostre projecte i feu clic a "Següent>".
  3. Trieu el projecte RTL i premeu "Següent>".
  4. Escriviu a la barra de cerca xc7z010clg400-1 i seleccioneu la peça i premeu "Següent>" i "Finalitza".

Pas 2: Configuració del disseny de blocs

Ara començarem a generar el disseny del bloc afegint i configurant el bloc IP Zynq.

  1. Al tauler de l'esquerra, a Integrador d'IP, feu clic a "Crea disseny de blocs" i, a continuació, feu clic a "D'acord".
  2. Feu clic amb el botó dret a la pestanya "Diagrama" i trieu "Afegeix IP …".
  3. Escriviu "Sistema de processament ZYNQ7" i feu clic a la selecció.
  4. Feu doble clic al bloc Zynq que apareix.
  5. Feu clic a "Importa la configuració de XPS" i importeu el fitxer "ZYBO_zynq_def.xml" proporcionat.
  6. Aneu a "Configuració MIO" i seleccioneu "Unitat de processador d'aplicacions" i activeu el temporitzador 0 i els temporitzadors Watchdog.
  7. A la mateixa pestanya, a "Perifèrics d'E / S", seleccioneu ENET 0 (i canvieu el menú desplegable a "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
  8. A "GPIO", comproveu GPIO MIO, restabliment ENET, restabliment USB i restabliment I2C.
  9. Ara aneu a "Configuració del rellotge". Seleccioneu FCLK_CLK0 a Rellotges de tela PL. A continuació, feu clic a "D'acord".

Pas 3: creeu un bloc IP personalitzat PWM

Aquest bloc IP permet a la placa enviar un senyal PWM per controlar el moviment dels servos. El treball es va basar en gran mesura en el tutorial de Digitronix Nepal, que es troba aquí. Es va afegir una lògica per alentir el rellotge, de manera que el pols sortia al ritme correcte. El bloc pren un número de 0 a 180 i el converteix en un impuls de 750-2150 usec.

  1. Ara, a la pestanya Eines que hi ha a prop de l'extrem superior esquerre, feu clic a "Crea i empaqueta IP …" i premeu Següent.
  2. A continuació, seleccioneu "Crea un nou perifèric AXI4" i premeu Següent.
  3. Anomeneu el vostre bloc IP PWM (l’hem anomenat pwm_core) i feu clic a Següent i, a continuació, feu clic a Següent a la pàgina següent.
  4. Ara feu clic a "Edita IP" i premeu Finalitza. Això obrirà una nova finestra per editar el bloc pwm.
  5. A la pestanya "Fonts" i a "Fonts de disseny", expandiu 'pwm_core_v1_0' (substituïu pwm_core pel vostre nom) i obriu el fitxer que es faci visible.
  6. Copieu i enganxeu el codi que es proporciona a "pwm_core_v1_0_S00_AXI.v" al fitxer zip a la part inferior del projecte. Ctrl + Maj + R i substituïu "pwm_core" pel vostre nom per al bloc IP.
  7. A continuació, obriu "nom _v1_0" i copieu el codi proporcionat al fitxer "pwm_core_v1_0.v". Ctrl + Maj + R i substituïu "pwm_core" per nom.
  8. Ara aneu a la pestanya "Nom de paquet IP" i seleccioneu "Paràmetres de personalització".
  9. En aquesta pestanya hi haurà una barra groga a la part superior que conté text enllaçat. Seleccioneu aquesta opció i apareixerà "Paràmetres ocults" al quadre.
  10. Ara aneu a "GUI de personalització" i feu clic amb el botó dret a Pwm Counter Max, seleccioneu "Edita paràmetre …".
  11. Marqueu les caselles "Visible a la GUI de personalització" i "Especifica l'interval".
  12. Canvieu el menú desplegable "Tipus" a Interval d'enters i configureu el mínim a 0 i el màxim a 65535 i marqueu la casella "Mostra l'interval". Ara feu clic a D'acord.
  13. Arrossegueu Pwm Counter Max a sota de l'arbre "Pàgina 0". Ara aneu a "Revisa i empaqueta" i feu clic al botó "Torna a empaquetar l'IP".

Pas 4: afegiu el bloc IP PWM al disseny

Afegiu el bloc IP PWM al disseny
Afegiu el bloc IP PWM al disseny

Afegirem el bloc IP al disseny del bloc per permetre a l’usuari l’accés al bloc IP PWM a través del processador.

  1. Feu clic amb el botó dret a la pestanya del diagrama i feu clic a "Configuració IP …". Aneu a la pestanya "Gestor de dipòsits".
  2. Feu clic al botó verd més i seleccioneu-lo. Ara cerqueu ip_repo al Gestor de fitxers i afegiu-lo al projecte. A continuació, feu clic a Aplica i després a D'acord.
  3. Feu clic amb el botó dret a la pestanya del diagrama i feu clic a "Afegeix IP …". Escriviu el nom del bloc IP PWM i seleccioneu-lo.
  4. Hi ha d’haver una barra verda a la part superior de la pantalla, primer seleccioneu "Executa l’automatització de la connexió" i feu clic a D'acord. A continuació, feu clic a "Executa automatització de blocs" i feu clic a D'acord.
  5. Feu doble clic al bloc PWM i canvieu Pwm Counter Max a 1024 de 128.
  6. Passeu el punter del ratolí per sobre de PWM0 al bloc PWM. Hi hauria d’haver un petit llapis que aparegui quan ho feu. Feu clic amb el botó dret i seleccioneu "Crea port …" i feu clic a D'acord quan s'obri una finestra. Això crea un port extern per passar el senyal.
  7. Repetiu el pas 6 per a PWM1 i PWM2 també.
  8. Cerqueu la petita icona circular de doble fletxa a la barra lateral i feu-hi clic. Es regenerarà el disseny i el disseny del bloc hauria de ser semblant a la imatge anterior.

Pas 5: configureu l'embolcall HDL i configureu el fitxer de restriccions

Configureu l'embolcall HDL i configureu el fitxer de restriccions
Configureu l'embolcall HDL i configureu el fitxer de restriccions

Ara generarem el disseny d’alt nivell per al nostre disseny de blocs i, a continuació, assignarem PWM0, PWM1 i PWM2 als pins Pmod a la placa Zybo.

  1. Aneu a la pestanya "Fonts". Feu clic amb el botó dret al fitxer de disseny de blocs a "Fonts de disseny" i feu clic a "Crea HDL Wrapper …". Seleccioneu "Copia l'embolcall generat per permetre les modificacions de l'usuari" i feu clic a D'acord. Això genera el disseny d’alt nivell per al disseny de blocs que hem creat.
  2. El Pmod que publicarem és JE.
  3. A Fitxer, seleccioneu "Afegeix fonts …" i seleccioneu "Afegeix o crea restriccions" i feu clic a Següent.
  4. Feu clic a Afegeix fitxers i seleccioneu el fitxer "ZYBO_Master.xdc" inclòs. Si mireu en aquest fitxer, notareu que tot no està comentat, tret de sis línies "set_property" a "## Pmod Header JE". Notareu que PWM0, PWM1 i PWM2 són els arguments per a aquestes línies. Mapen al Pin 1, Pin 2 i Pin 3 del JE Pmod.

Pas 6: generació de flux de bits

Cal que generem el flux de bits perquè el disseny de maquinari s’exporti a l’SDK abans de continuar.

  1. A "Programa i depura" a la barra lateral, seleccioneu "Genera flux de bits". Això executarà la síntesi, després la implementació i, a continuació, generarà el flux de bits per al disseny.
  2. Corregiu els errors que apareguin, però generalment es poden ignorar les advertències.
  3. Aneu a Fitxer-> Inicia l'SDK i feu clic a D'acord. Això obrirà l’SDK de Xilinx.

Pas 7: Configuració del projecte a l'SDK

Aquesta part pot resultar una mica frustrant. En cas de dubte, creeu un BSP nou i substituïu l’antic. Això ens va estalviar una gran quantitat de temps de depuració.

  1. Comenceu descarregant la versió més recent de FreeRTOS aquí.
  2. Extraieu-ho tot de la descàrrega i importeu FreeRTOS a l'SDK fent clic a Fitxer-> Importa i, a "General", feu clic a "Projectes existents a l'espai de treball" i feu clic a Següent.
  3. Aneu a "FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702" a la carpeta FreeRTOS. Importeu només "RTOSDemo" des d'aquesta ubicació.
  4. Ara genereu un paquet de suport per a taulers (BSP) fent clic a Fitxer-> Nou paquet de suport per a taulers.
  5. Seleccioneu "ps7_cortexa9_0" i marqueu "lwip141" i feu clic a D'acord.
  6. Feu clic amb el botó dret a la carpeta blava RTOSDemo i seleccioneu "Referències del projecte".
  7. Desmarqueu "RTOSDemo_bsp" i comproveu el nou BSP que acabem de crear.

Pas 8: modificacions del codi FreeRTOS

El codi que proporcionem es pot separar en 7 fitxers diferents. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h i iic_imu.h. El codi a iic_main_thread.c s’ha adaptat de la biblioteca de Kris Winer, que es pot trobar aquí. Hem transformat principalment el seu codi per incorporar tasques i fer-lo funcionar amb la placa Zybo. També hem afegit funcions per calcular la correcció d’orientació de la càmera. Hem deixat en diverses declaracions impreses que són útils per a la depuració. La majoria d’ells són comentats, però si en necessiteu podeu descomentar-los.

  1. La forma més senzilla de modificar el fitxer main.c és substituir el codi per un codi copiat del nostre fitxer main.c inclòs.
  2. Per crear un fitxer nou, feu clic dret a la carpeta src de RTOSDemo i seleccioneu Fitxer font C. Anomeneu aquest fitxer "iic_main_thread.c".
  3. Copieu el codi del "iic_main_thread.c" inclòs i enganxeu-lo al fitxer recentment creat.
  4. Repetiu els passos 2 i 3 amb la resta de fitxers.
  5. requereix una instrucció d'enllaç a gcc. Per afegir-lo al camí de compilació, feu clic dret a RTOSDemo i seleccioneu "Configuració de compilació C / C ++".
  6. S'obrirà una finestra nova. Aneu a enllaçador ARM v7 gcc-> Biblioteques. Seleccioneu el petit fitxer d'afegir a l'extrem superior dret i escriviu "m". Això inclourà la biblioteca de matemàtiques al projecte.
  7. Construeix el projecte amb Ctrl + B per confirmar que tot funciona. Comproveu els advertiments que es generen, però és possible que els pugueu ignorar.
  8. Hi ha un parell de llocs que caldrà modificar, principalment la declinació magnètica de la vostra ubicació actual. Explicarem com canviar això a la part de calibratge del tutorial.

Pas 9: impressió 3D per estabilitzador

Impressió 3D per estabilitzador
Impressió 3D per estabilitzador

Necessiteu imprimir en 3D un parell de parts per a aquest projecte. Probablement es poden comprar peces de mides o dimensions similars a les nostres peces impreses.

  1. Utilitzeu els fitxers proporcionats per imprimir el braç i el suport del GoPro.
  2. Cal afegir bastides al fitxer.stl.
  3. Retalleu / netegeu les parts de l'excés de bastides un cop impresa.
  4. Podeu substituir el tac de fusta per una peça impresa en 3D si voleu.

Pas 10: Muntatge de les peces

Muntatge de les peces
Muntatge de les peces

Hi ha diverses parts del muntatge de l’estabilitzador. Els suports comprats inclouen 4 cargols autorroscants i 4 cargols amb femelles. Com que hi ha 3 servos, cal préaplicar una de les banyes de servocompressió per permetre que hi entrin 2 dels cargols.

  1. Soldeu 8 passadors al brot de l’IMU, 4 a cada costat.
  2. La IMU està connectada al suport de la impressió 3D del GoPro al centre del suport.
  3. Orienteu el suport perquè els forats de muntatge del servo quedin a la vostra esquerra. Col·loqueu l’IMU a la vora més propera, amb els passadors penjats de la vora. A continuació, col·loqueu la muntura GoPro a la part superior de l’IMU, enganxant l’IMU i la muntura al seu lloc al suport.
  4. Connecteu un HS-5485HB al suport de servo que està integrat al braç imprès en 3D.
  5. Enrosqueu el suport GoPro al servo connectat al braç, assegurant-vos que el servo estigui configurat de manera que quedi al mig del seu rang de moviment.
  6. A continuació, fixeu el servo HS-5685MH a un suport de servo. A continuació, toqueu la banya del servo amb un dels cargols. Ara connecteu el servo a la part inferior de l'últim suport del servo.
  7. Ara poseu l’últim servo al suport en què està cargolat el servo HS-5685MH. A continuació, cargoleu el braç en aquest servo i assegureu-vos que el braç estigui cargolat perquè es pugui moure 90 graus per sentit.
  8. Per acabar la construcció del cardà, afegiu un petit tros del tac de fusta per connectar entre el suport GoPro i el braç imprès en 3D. Ara heu muntat l'estabilitzador.
  9. Per últim, podeu afegir un mànec connectat al suport del servo inferior.

Pas 11: Connexió de Zybo a l'estabilitzador

Connexió de Zybo a l'estabilitzador
Connexió de Zybo a l'estabilitzador

Hi ha un parell de coses que cal tenir en compte a l’hora de fer això. Voleu assegurar-vos que els 5V de la font d'alimentació no passin mai a la placa Zybo, ja que això comportaria problemes amb la placa. Assegureu-vos de comprovar de nou els ponts per confirmar que no es canvien cables.

  1. Per fixar el Zybo a l’estabilitzador necessitareu 15 ponts masculins a masculins i 4 ponts masculins a femelles.
  2. En primer lloc, connecteu dos ponts a la vostra font d'alimentació de 5V al llarg dels rails + i - de la placa. Aquests subministraran l'energia als servos.
  3. A continuació, connecteu 3 parells de ponts als rails + i - de la taula de treball. Aquests seran el poder de cadascun dels servos.
  4. Connecteu l’altre extrem dels ponts + i - a cadascun dels servos.
  5. Connecteu un pont entre el carril - de la placa de paret i un dels passadors GND del Zybo JE Pmod (vegeu la imatge del pas 5). Això crearà un punt comú entre la placa Zybo i la font d'alimentació.
  6. A continuació, connecteu un cable de senyal al pin 1, pin 2 i pin 3 del JE Pmod. El pin 1 es correspon amb el servo inferior, el pin 2 s’assigna amb el servo a l’extrem del braç i el pin 3 s’assigna amb el servo central.
  7. Connecteu els 4 cables femella als pins GND, VDD, SDA i SCL de la sortida IMU. Els connectors GND i VDD als connectors GND i 3V3 dels pins JF. Connecteu el pin SDA al pin 8 i SCL al pin 7 del JF (vegeu la imatge del pas 5).
  8. Per últim, connecteu l’ordinador a la placa mitjançant un cable micro usb. Això permetrà la comunicació uart i us permetrà programar la placa Zybo.

Pas 12: veritable correcció del nord

Correcció del nord veritable
Correcció del nord veritable

El calibratge del magnetòmetre a l’IMU és important per al correcte funcionament del dispositiu. La declinació magnètica, que corregeix el nord magnètic al nord veritable.

  1. Per corregir la diferència del nord magnètic i el vertader, heu d’utilitzar una combinació de dos serveis, Google Maps i la calculadora de camp magnètic de NOAA.
  2. Utilitzeu Google Maps per trobar la latitud i la longitud de la vostra ubicació actual.
  3. Agafeu la longitud i la latitud actuals i connecteu-la a la calculadora del camp magnètic.
  4. El que es retorna és la declinació magnètica. Connecteu aquest càlcul al codi de la línia 378 de "iic_main_thread.c". Si la vostra declinació és cap a l'est, resteu del valor del guijar, si és a l'oest, afegiu-lo al valor de guau.

* La foto s'ha extret de la guia de connexió MPU 9250 de Sparkfun, que es troba aquí.

Pas 13: Execució del programa

Execució del programa
Execució del programa

El moment que heu estat esperant! La millor part del projecte és veure-ho funcionant. Un problema que hem notat és que hi ha derivació dels valors reportats des de l’IMU. Un filtre de pas baix pot ajudar a corregir aquesta deriva, i jugar amb el magnetòmetre, l’acceleració i les calibracions giroscòpiques també ajudaran a corregir aquesta deriva.

  1. En primer lloc, creeu-ho tot a l'SDK; això es pot fer prement Ctrl + B.
  2. Assegureu-vos que la font d’alimentació estigui engegada i configurada a 5V. Comproveu de nou que tots els cables van al lloc correcte.
  3. A continuació, per executar el programa, premeu el triangle verd al centre superior de la barra de tasques.
  4. Quan s'executa el programa, tots els servos es restabliran a les seves 0 posicions, així que estigueu preparats per al moviment de la plataforma. Un cop inicialitzat el programa, els servos tornaran a les seves posicions de 90 graus.
  5. S'executarà una funció de calibratge del magnetòmetre i s'imprimiran les indicacions al terminal UART, al qual podeu connectar-vos mitjançant un monitor sèrie com ara "massilla" o el monitor sèrie proporcionat a l'SDK.
  6. El calibratge us farà moure el dispositiu en una figura 8 durant uns 10 segons. Podeu eliminar aquest pas comentant la línia 273 de "iic_main_thread.c". Si ho comenteu, heu de descomentar les línies 323 - 325 "iic_main_thread.c". Aquests valors es van recollir inicialment a partir del calibratge del magnetòmetre anterior i després es van connectar com a valors.
  7. Després del calibratge, s'inicialitzarà el codi d'estabilització i el dispositiu mantindrà la càmera estable.

Recomanat: