Innholdsfortegnelse:
- Trinn 1: Vivado maskinvareoppsett
- Trinn 2: Konfigurere blokkdesign
- Trinn 3: Lag tilpasset PWM IP -blokk
- Trinn 4: Legg PWM IP -blokk til Design
- Trinn 5: Konfigurer HDL Wrapper og sett opp begrensningsfil
- Trinn 6: Generering av Bitstream
- Trinn 7: Konfigurere prosjekt i SDK
- Trinn 8: FreeRTOS -kodeendringer
- Trinn 9: 3D -utskrift for stabilisator
- Trinn 10: Montering av delene
- Trinn 11: Koble Zybo til stabilisator
- Trinn 12: True North Correction
- Trinn 13: Kjøre programmet
Video: Håndholdt kamerastabilisator: 13 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Introduksjon
Dette er en veiledning for å lage en 3-akset håndholdt kamerastabiliseringsrigg for en GoPro ved bruk av et Digilent Zybo Zynq-7000 Development Board. Dette prosjektet ble utviklet for CPE Real-Time Operating Systems klasse (CPE 439). Stabilisatoren bruker tre servoer og en IMU for å korrigere brukerens bevegelse for å holde kameraet i vater.
Deler påkrevd for prosjektet
- Digilent Zybo Zynq-7000 Development Board
- Sparkfun IMU Breakout - MPU 9250
- 2 HiTec HS-5485HB servoer (kjøp 180 graders bevegelse eller program fra 90 til 180 grader)
- 1 HiTec HS-5685MH Servo (kjøp 180 graders bevegelse eller program fra 90 til 180 grader)
- 2 standard servobeslag
- 1 brødbrett
- 15 stikkontakter fra mann til mann
- 4 genser for mann til kvinne
- Hot Lim
- Grep eller håndtak
- 5 mm diameter trepinne
- GoPro eller annet kamera og monteringsutstyr
- Strømforsyning som kan levere 5V.
- Tilgang til 3D -skriver
Trinn 1: Vivado maskinvareoppsett
La oss komme i gang med å lage den underliggende blokkdesignen for prosjektet.
- Åpne Vivado 2016.2, klikk på "Opprett nytt prosjekt" -ikonet, og klikk "Neste>".
- Gi prosjektet ditt et navn, og klikk "Neste>".
- Velg RTL -prosjektet og klikk "Neste>".
- Skriv inn søkefeltet xc7z010clg400-1, velg deretter delen og klikk "Neste>" og "Fullfør".
Trinn 2: Konfigurere blokkdesign
Nå skal vi begynne å generere blokkdesignet ved å legge til og sette opp Zynq IP Block.
- I venstre panel, under IP Integrator, klikker du på "Create Block Design" og deretter "OK".
- Høyreklikk i kategorien "Diagram" og velg "Legg til IP …".
- Skriv "ZYNQ7 Processing System" og klikk på valget.
- Dobbeltklikk på Zynq -blokken som vises.
- Klikk på "Importer XPS -innstillinger" og importer den medfølgende "ZYBO_zynq_def.xml" -filen.
- Gå til "MIO Configuration" og velg "Application Processor Unit" og aktiver Timer 0 og Watchdog timers.
- I den samme kategorien, under "I/O Peripherals", velg ENET 0 (og endre rullegardinmenyen til "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
- Under "GPIO", sjekk GPIO MIO, ENET Reset, USB Reset og I2C Reset.
- Naviger nå til "Clock Configuration". Velg FCLK_CLK0 under PL Fabric Clocks. Klikk deretter "OK".
Trinn 3: Lag tilpasset PWM IP -blokk
Denne IP -blokken lar styret sende et PWM -signal ut for å kontrollere bevegelsene til servoene. Arbeidet var sterkt basert på opplæringen av Digitronix Nepal, funnet her. Logikk ble lagt til for å senke klokken, så pulsen sendte ut med riktig hastighet. Blokken tar et tall fra 0 til 180 og konverterer det til en puls fra 750-2150 usec.
- Nå, under kategorien Verktøy øverst til venstre, klikker du på "Opprett og pakke IP …" og trykker på Neste.
- Velg deretter "Opprett en ny AXI4 perifer" og trykk på Neste.
- Gi PWM -IP -blokken din et navn (vi kalte den pwm_core) og klikk på Neste, og klikk deretter på Neste på neste side også.
- Klikk nå "Rediger IP" og klikk på Fullfør. Dette åpner et nytt vindu for å redigere pwm -blokken.
- I kategorien "Kilder" og under "Designkilder", utvider du 'pwm_core_v1_0' (erstatt pwm_core med navnet ditt) og åpner filen som blir synlig.
- Kopier og lim inn koden under 'pwm_core_v1_0_S00_AXI.v' i zip -filen nederst i prosjektet. Ctrl + Shift + R og erstatt 'pwm_core' med navnet ditt for ip -blokken.
- Åpne deretter 'navn _v1_0' og kopier inn den oppgitte koden i filen 'pwm_core_v1_0.v'. Ctrl + Shift + R og erstatt 'pwm_core' med navn.
- Naviger nå til kategorien "Pakke IP - navn" og velg "Tilpassingsparametere".
- I denne kategorien vil det være en gul stolpe øverst som har koblet tekst. Velg dette, og "Skjulte parametere" vil dukke opp i boksen.
- Gå nå til "Customization GUI" og høyreklikk på Pwm Counter Max velg "Edit Parameter …".
- Merk av i boksen "Synlig i tilpasnings -GUI" og "Spesifiser område".
- Endre rullegardinmenyen "Type:" til Hele tall og sett minimum til 0 og maksimum til 65535, og merk av for "Vis område" -boksen. Klikk nå OK.
- Dra Pwm Counter Max under treet "Side 0". Gå nå til "Review and Package" og klikk på "Re-Package IP" -knappen.
Trinn 4: Legg PWM IP -blokk til Design
Vi vil legge til IP -blokken i blokkdesignen for å gi brukeren tilgang til PWM IP -blokken gjennom prosessoren.
- Høyreklikk i diagramfanen og klikk "IP -innstillinger …". Naviger til "Repository Manager" -fanen.
- Klikk på den grønne pluss -knappen og velg den. Finn nå ip_repo i Filbehandling og legg det til i prosjektet. Trykk deretter på Apply og deretter OK.
- Høyreklikk i diagramfanen og klikk "Legg til IP …". Skriv inn PWM IP -blokknavnet ditt og velg det.
- Det bør være en grønn linje øverst på skjermen, velg først "Kjør tilkoblingsautomatisering" og klikk OK. Klikk deretter "Kjør blokkautomasjon" og klikk OK.
- Dobbeltklikk på PWM -blokken og endre Pwm Counter Max til 1024 fra 128.
- Hold musepekeren over PWM0 på PWM -blokken. Det skal være en liten blyant som dukker opp når du gjør det. Høyreklikk og velg "Opprett port …" og klikk OK når et vindu åpnes. Dette skaper en ekstern port for signalet som skal sendes til.
- Gjenta trinn 6 for PWM1 og PWM2 også.
- Finn det lille sirkulære doble pilikonet på sidefeltet og klikk på det. Det vil regenerere layout og blokkdesignen din skal se ut som bildet ovenfor.
Trinn 5: Konfigurer HDL Wrapper og sett opp begrensningsfil
Vi skal nå generere High Level Design for vårt Block Design og deretter kartlegge PWM0, PWM1 og PWM2 til Pmod pins på Zybo -kortet.
- Gå til kategorien "Kilder". Høyreklikk på blokkdesignfilen din under "Designkilder" og klikk på "Create HDL Wrapper …". Velg "Kopier generert innpakning for å tillate brukerredigeringer" og klikk OK. Dette genererer High Level Design for Block Design vi opprettet.
- Pmod vi vil sende ut til er JE.
- Velg "Legg til kilder …" under Fil, velg "Legg til eller opprett begrensninger" og klikk på Neste.
- Klikk på legg til filer, og velg den medfølgende filen "ZYBO_Master.xdc". Hvis du ser i denne filen, vil du legge merke til at alt er ukommentert bortsett fra seks "set_property" -linjer under "## Pmod Header JE". Du vil legge merke til at PWM0, PWM1 og PWM2 er argumentene for disse linjene. De kartlegger til Pin 1, Pin 2 og Pin 3 til JE Pmod.
Trinn 6: Generering av Bitstream
Vi må generere bitstrømmen for at maskinvaredesignet skal eksportere til SDK før vi går videre.
- Velg "Generer Bitstream" under "Program og feilsøk" i sidefeltet. Dette vil kjøre syntese, deretter implementering og deretter generere bitstrømmen for designet.
- Rett opp eventuelle feil som dukker opp, men advarsler kan generelt ignoreres.
- Gå til Fil-> Start SDK og klikk OK. Dette vil åpne Xilinx SDK.
Trinn 7: Konfigurere prosjekt i SDK
Denne delen kan være litt frustrerende. Hvis du er i tvil, lager du en ny BSP og bytter ut den gamle. Dette sparte oss en haug med feilsøkingstid.
- Start med å laste ned den nyeste versjonen av FreeRTOS her.
- Trekk ut alt fra nedlastingen og importer FreeRTOS til SDK ved å klikke Fil-> Importer, og klikk på "Eksisterende prosjekter i arbeidsområdet" under "Generelt", og klikk deretter på Neste.
- Gå til "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" i FreeRTOS -mappen. Bare importer "RTOSDemo" fra dette stedet.
- Generer nå en Board Support Package (BSP) ved å klikke på File-> New Board Support Package.
- Velg "ps7_cortexa9_0" og sjekk "lwip141" og klikk OK.
- Høyreklikk på den blå mappen RTOSDemo og velg "Prosjektreferanser".
- Fjern merket for "RTOSDemo_bsp" og sjekk den nye BSP som vi nettopp har opprettet.
Trinn 8: FreeRTOS -kodeendringer
Koden vi gir kan deles inn i 7 forskjellige filer. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h og iic_imu.h. Koden i iic_main_thread.c er tilpasset fra Kris Winer's bibliotek, som du finner her. Vi transformerte hovedsakelig koden hans til å inkorporere oppgaver og få den til å fungere med Zybo -brettet. Vi har også lagt til funksjoner for å beregne korreksjon av kameraets orientering. Vi har etterlatt i flere utskriftserklæringer som er nyttige for feilsøking. De fleste av dem kommenteres, men hvis du føler behov for det, kan du kommentere dem.
- Den enkleste måten å endre main.c -filen på er å erstatte koden med kopiert kode fra vår inkluderte main.c -fil.
- For å opprette en ny fil, høyreklikk på src -mappen under RTOSDemo og velg C kildefil. Gi denne filen navnet "iic_main_thread.c".
- Kopier koden fra den inkluderte "iic_main_thread.c" og lim den inn i den nyopprettede filen.
- Gjenta trinn 2 og 3 med de resterende filene.
- krever en koblingsinstruksjon i gcc. For å legge dette til byggebanen høyreklikker du på RTOSDemo og velger "C/C ++ Build Settings".
- Et nytt vindu åpnes. Naviger til ARM v7 gcc linker-> Libraries. Velg den lille add -filen øverst til høyre og skriv inn "m". Dette vil inkludere det matematiske biblioteket i prosjektet.
- Bygg prosjekt med Ctrl + B for å bekrefte at alt fungerer. Sjekk advarslene som genereres, men du kan kanskje ignorere dem.
- Det er et par steder som må endres, hovedsakelig den magnetiske deklinasjonen til din nåværende posisjon. Vi vil forklare hvordan du endrer dette i kalibreringsdelen av opplæringen.
Trinn 9: 3D -utskrift for stabilisator
Du må 3D -skrive ut et par deler for dette prosjektet. Man kan sannsynligvis kjøpe deler som har lignende dimensjoner/størrelser som våre trykte deler.
- Bruk filene som følger med til å skrive ut armen og holdebraketten til GoPro.
- Du må legge stillaser til.stl -filen.
- Trim/rengjør deler av overflødig stillas når det er skrevet ut.
- Du kan bytte ut trepinnen med en 3D -trykt del hvis du ønsker det.
Trinn 10: Montering av delene
Det er flere deler for å montere stabilisatoren. De kjøpte brakettene leveres med 4 selvskruende skruer og 4 bolter med muttere. Siden det er 3 servoer, må et av servohornene tappes på forhånd for at to av boltene skal passe gjennom.
- Lodd 8 pinner på IMU -utbruddet, 4 på hver side.
- IMU er festet til den 3D -trykte holdebraketten for GoPro i midten av braketten.
- Orienter braketten slik at servomonteringshullene er på venstre side. Plasser IMU på den nærmeste kanten til deg, med pinnene hengende utenfor kanten. Plasser deretter GoPro -festet på toppen av IMU, og fest IMU og holderen på plass på braketten.
- Fest en HS-5485HB til servobeslaget som er integrert i den 3D-trykte armen.
- Skru GoPro -braketten inn i den armfestede servoen, og sørg for at servoen er satt slik at den er midt i bevegelsesområdet.
- Fest deretter HS-5685MH-servoen til en servobeslag. Bank deretter på servohornet med en av skruene. Fest nå servoen til bunnen av den siste servobeslaget.
- Fest nå den siste servoen til braketten som HS-5685MH-servoen er skrudd inn i. Skru deretter armen inn i denne servoen, og pass på at armen er skrudd på slik at den kan bevege seg 90 grader hver vei.
- For å fullføre konstruksjonen av gimbalen, legg til en liten bit av trepluggen for å koble mellom GoPro -braketten og den 3D -trykte armen. Du har nå satt sammen stabilisatoren.
- Til slutt kan du legge til et håndtak som er koblet til den nedre servobeslaget.
Trinn 11: Koble Zybo til stabilisator
Det er et par ting du må være forsiktig med når du gjør dette. Du vil være sikker på at 5V fra strømforsyningen aldri går inn i Zybo -kortet, da dette ville føre til problemer med kortet. Sørg for å dobbeltsjekke hopperne dine for å bekrefte at ingen ledninger byttes.
- For å feste Zybo til stabilisatoren trenger du 15 mannlige til hannhoppere og 4 mannlige til kvinnelige hoppere.
- Koble først to hoppere til din 5V strømforsyning langs + og - skinnene på brødbrettet. Disse vil levere strøm til servoene.
- Deretter kobler du 3 par hoppere til + og - skinnene på brødbrettet. Disse vil være kraften for hver av servoene.
- Plugg den andre enden av + og - hopperne inn i hver av servoene.
- Koble en jumper mellom - skinnen på brødbrettet og en av GND -pinnene på Zybo JE Pmod (se trinn 5 bilde). Dette vil skape et felles grunnlag mellom Zybo -kortet og strømforsyningen.
- Koble deretter en signalkabel til pin 1, pin 2 og pin 3 på JE Pmod. Pin 1 kart til den nederste servoen, pin 2 kart til servoen på enden av armen, og pin 3 kart til den midterste servoen.
- Koble de fire hunnledningene til GND-, VDD-, SDA- og SCL -pinnene på IMU -utbruddet. GND og VDD kobles til GND og 3V3 på JF -pinnene. Plugg inn SDA -pinnen i pinne 8 og SCL i pinne 7 på JF (se trinn 5 -bilde).
- Til slutt kobler du datamaskinen til kortet ved hjelp av en mikro -usb -kabel. Dette tillater uart kommunikasjon og lar deg programmere Zybo -kortet.
Trinn 12: True North Correction
Kalibreringen av magnetometeret i IMU er viktig for riktig bruk av enheten. Den magnetiske deklinasjonen, som korrigerer magnetisk nord til ekte nord.
- For å korrigere forskjellen fra magnetisk og ekte nord, må du bruke en kombinasjon av to tjenester, Google Maps og NOAAs magnetfeltkalkulator.
- Bruk Google Maps for å finne breddegrad og lengdegrad for din nåværende posisjon.
- Ta din nåværende lengdegrad og breddegrad og koble den til magnetfeltkalkulatoren.
- Det som returneres er den magnetiske deklinasjonen. Plugg inn denne beregningen i koden på linje 378 i "iic_main_thread.c". Hvis deklinasjonen er øst, trekker du deretter fra gjengivelsesverdien, hvis vest legger du til yaw -verdien.
*bildet er tatt fra Sparkfun's MPU 9250 oppkoblingsguide, funnet her.
Trinn 13: Kjøre programmet
Øyeblikket du har ventet på! Den beste delen av prosjektet er å se det fungere. Et problem vi har lagt merke til er at det er drift fra verdiene som er rapportert fra IMU. Et lavpassfilter kan bidra til å korrigere denne driften, og fikling med magnetometeret, akselerasjon og gyrokalibreringer vil også bidra til å korrigere denne driften.
- Bygg først alt i SDK, dette kan gjøres ved å trykke Ctrl + B.
- Sørg for at strømforsyningen er på og satt til 5V. Dobbeltsjekk at alle ledninger går til de riktige stedene.
- Trykk deretter på den grønne trekanten øverst i midten av oppgavelinjen for å kjøre programmet.
- Når programmet kjøres, vil servoene alle tilbakestille til sine 0 posisjoner, så vær klar til at riggen kan bevege seg. Når programmet initialiseres, vil servoene deretter snappe tilbake til sine 90 graders posisjoner.
- En magnetometer kalibreringsfunksjon vil kjøre og retninger skrives ut til UART -terminalen, som du kan koble til via en seriell skjerm, for eksempel 'kitt' eller seriell skjerm som følger med SDK.
- Kalibreringen får deg til å flytte enheten i figur 8 i omtrent 10 sekunder. Du kan fjerne dette trinnet ved å kommentere linje 273 i "iic_main_thread.c". Hvis du kommenterer det, må du kommentere linje 323 - 325 "iic_main_thread.c". Disse verdiene ble opprinnelig samlet fra magnetometerkalibreringen ovenfor og deretter plugget inn som verdier.
- Etter kalibreringen vil stabiliseringskoden initialiseres og enheten vil holde kameraet stabilt.
Anbefalt:
Håndholdt BASIC datamaskin: 6 trinn (med bilder)
Håndholdt BASIC datamaskin: Denne instruksjonsboken beskriver prosessen min med å bygge en liten håndholdt datamaskin som kjører BASIC. Datamaskinen er bygget rundt ATmega 1284P AVR -brikken, som også inspirerte det dumme navnet på datamaskinen (HAL 1284). Denne konstruksjonen er STORT inspirert av
MutantC V3 - modulær og kraftig håndholdt PC: 9 trinn (med bilder)
MutantC V3 - modulær og kraftig håndholdt PC: En bringebær -pi håndholdt plattform med et fysisk tastatur, display- og ekspansjonsoverskrift for tilpassede brett (som Arduino Shield) .mutantC_V3 er etterfølgeren til mutantC_V1 og V2. Sjekk ut mutantC_V1 og mutantC_V2.https: //mutantc.gitlab.io/https: // gitla
Håndholdt nattlys: 7 trinn (med bilder)
Håndholdt nattlys: Min 5-åring fortsatte å vekke oss om natten, og vi fortsatte å holde foredrag for ham å la mor og pappa sove, til jeg innså at han faktisk ikke klarte å bestemme selv om det var søvntid eller lek. I tillegg vil han be oss slå på lyset
MutantC_v2 - En lett å bygge Raspberry Pi Håndholdt/UMPC: 8 trinn (med bilder)
MutantC_v2 - En lett å bygge Raspberry Pi Håndholdt/UMPC: En Raspberry -pi håndholdt plattform med et fysisk tastatur, Display og Expansion -topptekst for tilpassede brett (som Arduino Shield) .mutantC_V2 er etterfølgeren til mutantC_V1. Sjekk ut mutantC_V1 herfra. Https: //mutantc.gitlab.io/https: //gitlab.com/mutant
Håndholdt konsoll med trådløse kontrollere og sensorer (Arduino MEGA & UNO): 10 trinn (med bilder)
Håndholdt konsoll med trådløse kontrollere og sensorer (Arduino MEGA & UNO): Det jeg brukte:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 berøringsskjerm HXD8357D- Buzzer- 4Ohm 3W høyttaler- 5mm LED-lys- Ultimaker 2+ skriver m/ svart PLA-filament- Laserkutter m/ MDF tre- Svart spraymaling (for treverket)- 3x nRF24