Inhoudsopgave:

Handheld camerastabilisator - Ajarnpa
Handheld camerastabilisator - Ajarnpa

Video: Handheld camerastabilisator - Ajarnpa

Video: Handheld camerastabilisator - Ajarnpa
Video: FLYCAM 5000 Video Camera Stabilizer | Body mount Handheld Stabilizer + Comfort Arm & Vest | Assembly 2024, Juli-
Anonim
Handheld camerastabilisator
Handheld camerastabilisator

Invoering

Dit is een handleiding voor het maken van een 3-assige handheld camerastabilisatie-rig voor een GoPro met behulp van een Digilent Zybo Zynq-7000 Development Board. Dit project is ontwikkeld voor de klasse CPE Real-Time Operating Systems (CPE 439). De stabilisator gebruikt drie servo's en een IMU om de beweging van de gebruiker te corrigeren om de camera waterpas te houden.

Onderdelen die nodig zijn voor het project

  • Digilent Zybo Zynq-7000 Ontwikkelingsbord
  • Sparkfun IMU Breakout - MPU 9250
  • 2 HiTec HS-5485HB servo's (koop 180 graden beweging of programmeer van 90 tot 180 graden)
  • 1 HiTec HS-5685MH Servo (koop 180 graden beweging of programmeer van 90 tot 180 graden)
  • 2 standaard servobeugels
  • 1 Breadboard
  • 15 man-naar-mannelijke jumperdraden
  • 4 man-naar-vrouw jumperdraden
  • Hete lijm
  • Greep of handvat
  • Houten deuvel met een diameter van 5 mm
  • GoPro of ander camera- en bevestigingsmateriaal
  • Voeding die 5V kan leveren.
  • Toegang tot 3D-printer

Stap 1: Vivado Hardware-installatie

Vivado-hardware instellen
Vivado-hardware instellen

Laten we beginnen met het maken van het onderliggende blokontwerp voor het project.

  1. Open Vivado 2016.2, klik op het pictogram "Nieuw project maken" en klik op "Volgende>".
  2. Geef uw project een naam en klik op "Volgende >".
  3. Kies het RTL-project en klik op "Volgende >".
  4. Typ in de zoekbalk xc7z010clg400-1 en selecteer vervolgens het onderdeel en klik op "Volgende >" en "Voltooien".

Stap 2: Blokontwerp instellen

Nu zullen we beginnen met het genereren van het blokontwerp door het Zynq IP-blok toe te voegen en in te stellen.

  1. Klik in het linkerdeelvenster onder IP Integrator op "Blokontwerp maken" en klik vervolgens op "OK".
  2. Klik met de rechtermuisknop op het tabblad "Diagram" en kies "IP toevoegen…".
  3. Typ "ZYNQ7 Processing System" en klik op de selectie.
  4. Dubbelklik op het Zynq-blok dat verschijnt.
  5. Klik op "XPS-instellingen importeren" en importeer het meegeleverde bestand "ZYBO_zynq_def.xml".
  6. Ga naar "MIO Configuration" en selecteer "Application Processor Unit" en schakel Timer 0 en Watchdog-timers in.
  7. Selecteer in hetzelfde tabblad onder "I/O-randapparatuur" ENET 0 (en verander het vervolgkeuzemenu in "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
  8. Vink onder "GPIO" GPIO MIO, ENET Reset, USB Reset en I2C Reset aan.
  9. Navigeer nu naar "Klokconfiguratie". Selecteer FCLK_CLK0 onder PL Fabric Clocks. Klik vervolgens op "OK".

Stap 3: Maak een aangepast PWM IP-blok aan

Met dit IP-blok kan het bord een PWM-signaal verzenden om de beweging van de servo's te regelen. Het werk was sterk gebaseerd op de tutorial van Digitronix Nepal, die hier te vinden is. Logica werd toegevoegd om de klok te vertragen, zodat de puls met de juiste snelheid werd uitgevoerd. Het blok neemt een getal van 0 tot 180 en zet dit om in een puls van 750-2150 usec.

  1. Klik nu onder het tabblad Tools in de linkerbovenhoek op "Create and Package IP…" en klik op Next.
  2. Selecteer vervolgens "Maak een nieuw AXI4-randapparaat aan" en klik op Volgende.
  3. Geef uw PWM IP-blok een naam (we noemden het pwm_core) en klik op Volgende en klik vervolgens ook op Volgende op de volgende pagina.
  4. Klik nu op "IP bewerken" en klik op Voltooien. Dit opent een nieuw venster om het pwm-blok te bewerken.
  5. Vouw op het tabblad "Bronnen" en onder "Ontwerpbronnen" 'pwm_core_v1_0' uit (vervang pwm_core door uw naam) en open het bestand dat zichtbaar wordt.
  6. Kopieer en plak de code onder 'pwm_core_v1_0_S00_AXI.v' in het zipbestand onderaan het project. Ctrl + Shift + R en vervang 'pwm_core' door uw naam voor het ip-blok.
  7. Open vervolgens ' name _v1_0' en kopieer de meegeleverde code in het bestand 'pwm_core_v1_0.v'. Ctrl + Shift + R en vervang 'pwm_core' door naam.
  8. Navigeer nu naar het tabblad 'Pakket IP - naam' en selecteer 'Aanpassingsparameters'.
  9. Op dit tabblad staat bovenaan een gele balk met gekoppelde tekst. Selecteer dit en "Verborgen parameters" verschijnt in het vak.
  10. Ga nu naar "Customization GUI" en klik met de rechtermuisknop op Pwm Counter Max en selecteer "Edit Parameter…".
  11. Vink de vakjes "Zichtbaar in Customization GUI" en "Specify Range" aan.
  12. Wijzig het vervolgkeuzemenu "Type:" in Bereik van gehele getallen en stel minimum in op 0 en maximum op 65535 en vink het vakje "Toon bereik" aan. Klik nu op OK.
  13. Sleep Pwm Counter Max onder de boom 'Pagina 0'. Ga nu naar "Review and Package" en klik op de knop "Re-Package IP".

Stap 4: PWM IP-blok toevoegen aan ontwerp

PWM IP-blok toevoegen aan ontwerp
PWM IP-blok toevoegen aan ontwerp

We zullen het IP-blok toevoegen aan het blokontwerp om de gebruiker toegang te geven tot het PWM IP-blok via de processor.

  1. Klik met de rechtermuisknop op het diagramtabblad en klik op "IP-instellingen…". Navigeer naar het tabblad "Repository Manager".
  2. Klik op de groene plusknop en selecteer deze. Zoek nu ip_repo in Bestandsbeheer en voeg dat toe aan het project. Druk vervolgens op Toepassen en vervolgens op OK.
  3. Klik met de rechtermuisknop op het diagramtabblad en klik op "IP toevoegen…". Typ uw PWM IP-bloknaam in en selecteer deze.
  4. Er moet een groene balk bovenaan het scherm zijn, selecteer eerst "Verbindingsautomatisering uitvoeren" en klik op OK. Klik vervolgens op "Blokautomatisering uitvoeren" en klik op OK.
  5. Dubbelklik op het PWM-blok en verander Pwm Counter Max in 1024 van 128.
  6. Beweeg uw muisaanwijzer over PWM0 op het PWM-blok. Er zou een klein potlood moeten zijn dat verschijnt als je dat doet. Klik met de rechtermuisknop en selecteer "Poort maken…" en klik op OK wanneer een venster wordt geopend. Dit creëert een externe poort waarnaar het signaal moet worden doorgegeven.
  7. Herhaal stap 6 ook voor PWM1 en PWM2.
  8. Zoek het kleine ronde dubbele pijlpictogram in de zijbalk en klik erop. Het zal de lay-out regenereren en uw blokontwerp zou eruit moeten zien als de afbeelding hierboven.

Stap 5: HDL-wrapper configureren en bestand met beperkingen instellen

HDL-wrapper configureren en bestand met beperkingen instellen
HDL-wrapper configureren en bestand met beperkingen instellen

We gaan nu het ontwerp op hoog niveau voor ons blokontwerp genereren en vervolgens PWM0, PWM1 en PWM2 toewijzen aan Pmod-pinnen op het Zybo-bord.

  1. Ga naar het tabblad "Bronnen". Klik met de rechtermuisknop op uw blokontwerpbestand onder "Ontwerpbronnen" en klik op "HDL-wrapper maken…". Selecteer "Gegenereerde wrapper kopiëren om gebruikersbewerkingen toe te staan" en klik op OK. Dit genereert het High Level Design voor het Block Design dat we hebben gemaakt.
  2. De Pmod waarnaar we zullen uitvoeren is JE.
  3. Selecteer onder Bestand "Bronnen toevoegen…" en selecteer "Beperkingen toevoegen of maken" en klik op Volgende.
  4. Klik op bestanden toevoegen en selecteer het meegeleverde bestand "ZYBO_Master.xdc". Als je in dit bestand kijkt, zul je merken dat alles zonder commentaar is, behalve zes "set_property" regels onder "##Pmod Header JE". U zult merken dat PWM0, PWM1 en PWM2 de argumenten voor deze regels zijn. Ze zijn toegewezen aan Pin 1, Pin 2 en Pin 3 van de JE Pmod.

Stap 6: Bitstream genereren

We moeten de bitstream genereren voor het hardwareontwerp om naar de SDK te exporteren voordat we verder gaan.

  1. Selecteer onder "Programma en foutopsporing" in de zijbalk "Bitstream genereren". Hiermee wordt de synthese uitgevoerd, vervolgens de implementatie en wordt vervolgens de bitstream voor het ontwerp gegenereerd.
  2. Corrigeer eventuele fouten die verschijnen, maar waarschuwingen kunnen over het algemeen worden genegeerd.
  3. Ga naar Bestand-> SDK starten en klik op OK. Hiermee wordt de Xilinx SDK geopend.

Stap 7: Project opzetten in SDK

Dit deel kan een beetje frustrerend zijn. Maak bij twijfel een nieuwe BSP en vervang de oude. Dit heeft ons een hoop debugging tijd bespaard.

  1. Begin met het downloaden van de nieuwste versie van FreeRTOS hier.
  2. Pak alles uit de download en importeer FreeRTOS in de SDK door op Bestand->Importeren te klikken en onder "Algemeen" op "Bestaande projecten in werkruimte" te klikken en vervolgens op Volgende.
  3. Ga naar "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" in de FreeRTOS-map. Importeer "RTOSDemo" alleen vanaf deze locatie.
  4. Genereer nu een Board Support Package (BSP) door op Bestand->New Board Support Package te klikken.
  5. Selecteer "ps7_cortexa9_0" en vink "lwip141" aan en klik op OK.
  6. Klik met de rechtermuisknop op de blauwe map van RTOSDemo en selecteer "Projectreferenties".
  7. Schakel "RTOSDemo_bsp" uit en vink de nieuwe BSP aan die we zojuist hebben gemaakt.

Stap 8: FreeRTOS-codewijzigingen

De code die we leveren kan worden opgedeeld in 7 verschillende bestanden. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h en iic_imu.h. De code in iic_main_thread.c is aangepast uit de bibliotheek van Kris Winer, die hier te vinden is. We hebben zijn code voornamelijk getransformeerd om taken op te nemen en te laten werken met het Zybo-bord. We hebben ook functies toegevoegd voor het berekenen van de correctie van de oriëntatie van de camera. We hebben verschillende printinstructies achtergelaten die nuttig zijn voor debuggen. De meeste van hen zijn becommentarieerd, maar als u de behoefte voelt, kunt u ze verwijderen.

  1. De eenvoudigste manier om het main.c-bestand te wijzigen, is door de code te vervangen door gekopieerde code uit ons meegeleverde main.c-bestand.
  2. Om een nieuw bestand aan te maken, klikt u met de rechtermuisknop op de src-map onder RTOSDemo en selecteert u C-bronbestand. Noem dit bestand "iic_main_thread.c".
  3. Kopieer de code van de meegeleverde "iic_main_thread.c" en plak deze in uw nieuw gemaakte bestand.
  4. Herhaal stap 2 en 3 met de overige bestanden.
  5. vereist een koppelingsinstructie in gcc. Om dit aan het buildpad toe te voegen, klikt u met de rechtermuisknop op RTOSDemo en selecteert u "C/C++ Build Settings".
  6. Er wordt een nieuw venster geopend. Navigeer naar ARM v7 gcc linker->Bibliotheken. Selecteer het kleine add-bestand in de rechterbovenhoek en typ "m". Dit zal de wiskundebibliotheek in het project opnemen.
  7. Bouw een project met Ctrl + B om te bevestigen dat alles werkt. Controleer de waarschuwingen die worden gegenereerd, maar u kunt ze mogelijk negeren.
  8. Er zijn een paar plaatsen die moeten worden aangepast, voornamelijk de magnetische declinatie van uw huidige locatie. We zullen uitleggen hoe u dit kunt wijzigen in het kalibratiegedeelte van de tutorial.

Stap 9: 3D-printen voor stabilisator

3D-printen voor stabilisator
3D-printen voor stabilisator

Voor dit project moet je een aantal onderdelen in 3D printen. Men kan waarschijnlijk onderdelen kopen die dezelfde afmetingen/afmetingen hebben als onze gedrukte onderdelen.

  1. Gebruik de meegeleverde bestanden om de arm en houder voor de GoPro af te drukken.
  2. U moet steigers toevoegen aan het.stl-bestand.
  3. Trim / reinig delen van overtollige steigers zodra ze zijn afgedrukt.
  4. Indien gewenst kunt u de houten deuvel vervangen door een 3D geprint onderdeel.

Stap 10: De onderdelen monteren

De onderdelen monteren
De onderdelen monteren

Het zijn verschillende onderdelen om de stabilisator te monteren. De gekochte beugels worden geleverd met 4 zelftappende schroeven en 4 bouten met moeren. Aangezien er 3 servo's zijn, moet een van de servohoorns vooraf worden getikt om 2 van de bouten door te laten passen.

  1. Soldeer 8 pinnen op de IMU breakout, 4 aan elke kant.
  2. De IMU is bevestigd aan de 3D-geprinte houder voor de GoPro in het midden van de beugel.
  3. Richt de beugel zodat de servo-montagegaten zich aan uw linkerkant bevinden. Plaats de IMU op de dichtstbijzijnde rand naar u toe, met de pinnen aan de rand. Plaats vervolgens de GoPro-houder op de IMU en plak de IMU en de houder op de beugel.
  4. Bevestig een HS-5485HB aan de servobeugel die in de 3D-geprinte arm is geïntegreerd.
  5. Schroef de GoPro-beugel in de aan de arm bevestigde servo en zorg ervoor dat de servo zo is ingesteld dat deze zich in het midden van zijn bewegingsbereik bevindt.
  6. Bevestig vervolgens de HS-5685MH-servo aan een servobeugel. Tik vervolgens met een van de schroeven op de servohoorn. Bevestig nu de servo aan de onderkant van de laatste servobeugel.
  7. Bevestig nu de laatste servo aan de beugel waar de HS-5685MH servo in is geschroefd. Schroef vervolgens de arm in deze servo en zorg ervoor dat de arm is vastgeschroefd zodat deze 90 graden in elke richting kan bewegen.
  8. Om de constructie van de cardanische ophanging te voltooien, voegt u een klein stukje van de houten plug toe om de GoPro-beugel en de 3D-geprinte arm te verbinden. Je hebt nu de stabilisator gemonteerd.
  9. Ten slotte kunt u een handgreep toevoegen die is aangesloten op de onderste servobeugel.

Stap 11: Zybo verbinden met stabilisator

Zybo verbinden met stabilisator
Zybo verbinden met stabilisator

Er zijn een paar dingen waar u op moet letten wanneer u dit doet. Je wilt er zeker van zijn dat de 5V van de voeding nooit in het Zybo-bord gaat, omdat dit tot problemen met het bord zou leiden. Zorg ervoor dat u uw jumpers dubbel controleert om te bevestigen dat er geen draden worden verwisseld.

  1. Om de Zybo aan de stabilisator te bevestigen heb je 15 man-man jumpers en 4 man-vrouw jumpers nodig.
  2. Sluit eerst twee jumpers aan op je 5V-voeding langs de + en - rails van het breadboard. Deze leveren de stroom aan de servo's.
  3. Verbind vervolgens 3 paar jumpers met de + en - rails van het breadboard. Dit is het vermogen voor elk van de servo's.
  4. Steek het andere uiteinde van de + en - jumpers in elk van de servo's.
  5. Sluit een jumper aan tussen de - rail van het breadboard en een van de GND-pinnen op de Zybo JE Pmod (zie afbeelding van stap 5). Dit zorgt voor een gemeenschappelijke basis tussen het Zybo-bord en de voeding.
  6. Sluit vervolgens een signaaldraad aan op pin 1, pin 2 en pin 3 van de JE Pmod. Pin 1 verwijst naar de onderste servo, pin 2 verwijst naar de servo aan het uiteinde van de arm en pin 3 verwijst naar de middelste servo.
  7. Steek de 4 vrouwelijke draden in de GND-, VDD-, SDA- en SCL-pinnen van de IMU-breakout. GND en VDD worden aangesloten op de GND en 3V3 op de JF-pinnen. Steek de SDA-pin in pin 8 en SCL in pin 7 op de JF (zie stap 5 afbeelding).
  8. Sluit ten slotte de computer aan op het bord met behulp van een micro-usb-kabel. Dit maakt uart-communicatie mogelijk en stelt u in staat om het Zybo-bord te programmeren.

Stap 12: True North Correction

Ware Noord-correctie
Ware Noord-correctie

De kalibratie van de magnetometer in de IMU is belangrijk voor de juiste werking van het apparaat. De magnetische declinatie, die het magnetische noorden corrigeert naar het ware noorden.

  1. Om het verschil met het magnetische en het ware noorden te corrigeren, moet u een combinatie van twee services gebruiken, Google Maps en de magnetische veldcalculator van NOAA.
  2. Gebruik Google Maps om de lengte- en breedtegraad van uw huidige locatie te vinden.
  3. Neem uw huidige lengte- en breedtegraad en sluit deze aan op de magnetische veldcalculator.
  4. Wat wordt geretourneerd is de magnetische declinatie. Sluit deze berekening aan op de code op regel 378 van "iic_main_thread.c". Als je declinatie oost is, trek dan af van de yaw-waarde, als west dan optelt bij de yaw-waarde.

* foto is genomen uit Sparkfun's MPU 9250-aansluitgids, hier te vinden.

Stap 13: Het programma uitvoeren

Het programma uitvoeren
Het programma uitvoeren

Het moment waar je op hebt gewacht! Het beste deel van het project is om het te zien werken. Een probleem dat we hebben opgemerkt, is dat er een afwijking is van de waarden die door de IMU worden gerapporteerd. Een laagdoorlaatfilter kan deze drift helpen corrigeren, en spelen met de magnetometer, acceleratie- en gyro-kalibraties zal ook helpen deze drift te corrigeren.

  1. Bouw eerst alles in de SDK, dit kan door op Ctrl + B te drukken.
  2. Zorg ervoor dat de voeding is ingeschakeld en op 5V is ingesteld. Controleer nogmaals of alle draden naar hun juiste plaatsen gaan.
  3. Om het programma vervolgens uit te voeren, drukt u op de groene driehoek in het midden bovenaan de taakbalk.
  4. Wanneer het programma loopt, worden de servo's allemaal gereset naar hun 0-posities, dus wees klaar om de rig te verplaatsen. Zodra het programma is geïnitialiseerd, zullen de servo's terugspringen naar hun 90 graden posities.
  5. Er wordt een magnetometer-kalibratiefunctie uitgevoerd en aanwijzingen worden afgedrukt naar de UART-terminal, waarop u verbinding kunt maken via een seriële monitor zoals 'putty' of de seriële monitor die in de SDK wordt geleverd.
  6. De kalibratie zorgt ervoor dat u het apparaat ongeveer 10 seconden in een figuur 8 beweegt. U kunt deze stap verwijderen door commentaar te geven op regel 273 van "iic_main_thread.c". Als je commentaar geeft, moet je de regels 323 - 325 "iic_main_thread.c" verwijderen. Deze waarden werden aanvankelijk verzameld uit de bovenstaande magnetometerkalibratie en vervolgens als waarden aangesloten.
  7. Na de kalibratie wordt de stabilisatiecode geïnitialiseerd en houdt het apparaat de camera stabiel.

Aanbevolen: