3D-udskrivning Topografiske kort fra rumfærdsdata - 💡 Fix My Ideas

3D-udskrivning Topografiske kort fra rumfærdsdata

3D-udskrivning Topografiske kort fra rumfærdsdata


Forfatter: Ethan Holmes, 2019

I februar 2000 indledte rumfærgen Endeavour en 11-dages mission kendt som Shuttle Radar Tomography Mission (SRTM). Dens formål var at indsamle RADAR interferometriske data for at generere en højtopløselig digital topografisk database af Jorden. De resulterende data er en samling af filer kaldet Digital Elevation Models (DEMs). Disse filer indeholder forhøjelser i meter over gennemsnittet havniveau under 60 grader af breddegrad. Dataopløsningen er 1 bue sekund over Nordamerika og 3 bue sekunder over Nordamerika og (størstedelen af) resten af ​​Jordens landmasser.

BEMÆRK: Fra efteråret 2014 er agenturet med ansvar for SRTM-data begyndt at frigive SRTM-data for resten af ​​verden med 1 bue sekund opløsning. Det første kontinent frigivet var Afrika med de øvrige regioner i verden, der blev frigivet i månederne efter.

Målet med dette projekt er at konvertere SRTM elevation 3 bue andre data til en 3D overflade, der kan bruges som grundlag for at oprette Raised Relief Maps ved hjælp af en 3D Printer. Den software, der oprettes til dette formål, hedder SRTM2STL. Softwaren læser en 3-arks anden binær SRTM-fil, der indeholder elevationsdata og konverterer den til trekant og skriver en outputfil i Standard Tessellation Language (STL), et fælles 3D-filformat, i enten binære eller tekstformat. Når en STL-fil er genereret, kan den nemt importeres til 3D-printerleverandør-leveret skivesoftwaren. Skivesoftwaren konverterer dataene til G-Code, et filformat, der bruges af 3D-printere til at styre udskrivning.

SRTM Data

SRTM 3-bue-andre data er kodet som signeret 16 bit 2's komplementære binære data. Ved 3 bue sekunder er en grad på 1 graders kvadrat af jorden brudt i 1200 med 1200 datapunkter. SRTM-data gemmes som 1201 med 1201 point. Hvert datapunkt gemmes som et par byte. Disse bytepar danner en 2.884.802 byte fil (1201 X 1201 * 2 bytes pr. Punkt). Hver øverste og højre kant af dataene indeholder de samme data som bund- og venstrekantene af den tilstødende firkant (1200 + 1). Dette kan bruges som registreringsoplysninger, når filer er sammenkædede.

Software

Softwaren til at oprette STL-filer, SRTM2STL, er skrevet i almindelig (meget almindelig) vanille C. Softwaren kan kompileres til et eksekverbart program på stort set enhver platform, dvs. enhver platform med en C-compiler, for eksempel gcc.

Algoritme

Processen med at konvertere SRTM-data til en STL-fil begynder ved at konvertere hver gruppe af 4 point til to trekanter. Hver trekant kræver 3 triple point x, y og z for at definere triangles placering i rummet. Derudover har hver trekant en normal vektor x, y og z for at definere sin orientering i rummet. Den normale vektor skal pege på objektet, der defineres i henhold til højre håndreglen (beskrevet senere). De resulterende data danner overfladen af ​​reliefkortet.

Udover reliefkortoverfladen skal programmet også skabe de fire sider og en bund, der gør 3D-modellen lukket eller "vandtæt." Dette fuldender 3D-modellen, som derefter kan importeres til en STL-filfremviser til inspektion eller til skæreprogrammer for at skabe De data, der er nødvendige for at 3D udskriver modellen.

For SRTM-data, der indeholder 1201 X 1201 datapunkter, vil overfladen af ​​det område, der oprettes (sammen med siderne og bunden) indeholde 5759996 trekanter (eller facetter / polygoner).

Fyldningshuller

Af en række årsager mangler nogle af dataene i de oprindelige SRTM-filer. Manglende punkter markeres ved at gøre punktet lig med den største negative værdi, der er mulig for en 16 bit eller -32768. De markerede datapunkter kan let placeres i dataene, og hvis indstillingen er valgt, kan hullerne udfyldes af softwaren. Softwaren implementerer en simpel lineær algoritme til dette formål.

Den lineære fyldningsalgoritme virker ved at finde et hul i dataene på en række i arrayet indeholdende dataene. Algoritmen ser derefter efter det næste datapunkt på rækken, der ikke er et hul. Hældningen beregnes derefter mellem de to endepunkter. Højden beregnes for hvert hul baseret på hældningen, og hullerne udfyldes med den beregnede værdi.

Den lineære fyldningsalgoritme har begrænsninger. For eksempel, når der mangler mange data, skaber programmet lange lineære linjer (det kan se dårligt ud). Normalt mangler data på grund af spredningen af ​​RADAR-signalet langs grove uregelmæssige overfladearealer. Lange lineære fyldte linjer matcher normalt ikke overfladen meget godt i disse tilfælde og ser derfor ofte ud til at være dårlige. En bedre algoritme til at håndtere huller er et sted, hvor der kan forbedres til denne software.

Der er et andet problem, som du kan støde på med den lineære udfyldningsalgoritme (som implementeret i den oprindelige udgivelse af softwaren). Dette er når hullet starter i begyndelsen eller enden af ​​en række (en kant). For at rette op på de problemer, der opstår i denne situation, skal brugeren udvinde dataene væk fra huller, der vises langs kanten. Dette er endnu et sted, hvor der er plads til forbedring i den oprindelige algoritme.

En anden måde at undgå problemet med huller er at downloade korrigerede filer. Meget arbejde har været udført af SRTM holdet for at udfylde huller ved hjælp af en række forskellige teknikker. Et link til de korrigerede filer findes i referencerne.

Kommandolinjeindstillinger

Programmet bruger kommandolinjevalg til at styre dets adfærd. Syntaksen af ​​kommandolinjen er som følger:

srtm2stl input output [Valg]

Valg / A - Forstærkning - Faktor til at multiplicere højderne ved. Dette anvendes før bias er tilføjet / subtraheret. / B - Bias - Skal være et helt tal. Negativt for at sænke kortet (tyndt). / C - Koordinere delmængde - Breddegrad, Længdegrad, Breddegrad, Længdegrad (decimal minutter). / F - Fix huller (Lineær Fyld). / N - Skift det faste navn i STL ASCII-filerne. / H + betyder udskrive arrayets koordinater for hullet (manglende data). S | s - Subset - Start_Row, Start_Column, Stop_Row, Stop_Column / T + betyder output ASCII format / T betyder output binært format. V - Tænd for verbose output

Oprettelse af polygoner

Hver polygon, der danner facetterne af 3D-overfladen, der er skabt af SRTM2STL, består af 3 tredimensionelle koordinater, X, Y og Z. X- og Y-koordinaterne repræsenterer længdegrad og breddegrad, mens Z-koordinatet repræsenterer højden af ​​punktet over geoid eller groft, middelhavet. For at skabe den øverste overflade på kortet brugte vi 4 tilstødende punkter. Hvis vi for eksempel starter i kortets øverste venstre koordinater, bruger vi de to første punkter på første række og de to første punkter på den anden række. Den første polygon er skabt fra det første punkt på række 1 og de to punkter på række to. Den anden polygon er skabt fra det andet punkt på den første række og de to punkter på den anden række. Dette indebærer, at de to polygoner deler en fælles kant, og de gør det.

Her er nogle prøvedata produceret af programmet, der udgør to polygoner. Dataene repræsenterer en enkelt polygon består af tre sæt punkter. Hvert punkt består af tre koordinater X, Y og Z. Den første polygon i dette eksempel består af disse tre punkter:

Punkt 1: 0.000000, 0.000000, 223.000000 Punkt 2: 0.000000, 92.408531, 219.000000 Punkt 3: 68.984360, 0.000000, 182.000000

Den anden polygon består af følgende tre punkter (X, Y og Z):

Punkt 1: 68,984360, 92,408531, 180,000000 Punkt 2: 0,000000, 92,408531, 219,000000 Punkt 3: 68,984360, 0,000000, 182,000000

Så er den øverste overflade oprettet fra alle de polygoner, der genereres af programmet, baseret på de valgte muligheder. Elevationsdataene ekstraheres fra SRTM-dataene og opbevares i et 2D-array i programmets hukommelse. Afstande og derfor koordinaterne for latitud- og længdegradsdata skabes ved at multiplicere integerindekserne for arrayrækker og kolonner med afstanden per punkt i hver retning.Afstanden for længdegrad (nord og syd) er forskellig fra breddegrad (øst og vest), fordi afstanden for afstanden bliver mindre, når du går fra ækvator til polerne. Afstanden til bredden (øst og vest) beregnes for bunden af ​​1 grad med 1 graders kvadrat. Det ville være mere præcist at genberegne denne værdi, når du krydser arrayet, så den "koniske", der eksisterer naturligt, er repræsenteret nøjagtigt. Praktisk set er denne afstandsforskel for det meste ubrugelig. Det kunne tilføjes i fremtiden som en programmulighed.

Efter at den øverste overflade er oprettet lukker programmet siderne og bunden ved at oprette trepunktspolygonpar, som det ses i nedenstående figur.

Beregninger

En af de ting, der kræves i output-STL-filen, er en normal til overfladen af ​​hver polygon. Denne vektor peger ud af objektet, der oprettes, dvs. vektoren angiver retningen af ​​objektets yderside.

Normalen beregnes ved hjælp af højre reglen. Grafisk ser det sådan ud:

Så da du skaber polygonerne, du ved, hvor udenfor og indeni er, skal du vælge et kryds af polygonen. Ifølge ovenstående billede vil vektorerne a og b svare til henholdsvis indeks og langfinger, og vertexet er det punkt, hvor de begynder. Så vil krydsproduktet beregne den normale vektor, som er repræsenteret af tommelfingeren i billedet ovenfor. Tommelfingeren, efter denne beregning, vil pege ud af objektet.

Beregningen af ​​krydsproduktet forudsætter at vertekoordinaterne er (0,0,0). For at beregne fra tre sæt koordinater beregnes vektorerne a og b ved at subtrahere komponentkoordinaterne af vertexet fra komponentkoordinaterne af endepunkterne, dvs. koordinaterne af fingerspidserne i ovenstående billede. Vi vil bruge disse normaliserede koordinater til beregning af cross product.

I betragtning af tre sæt koordinater, der definerer en polygon som r, s og t hvor r er vertexet, og i betragtning af at højre reglen følges i, repræsenterer r-> s vektor a og r-> t repræsenterer vektoren b, så er beregningen af ​​vektorerne a og b som følger:

ax = sx - rx ay = sy - ry az = sz - rz

bx = tx - rx ved = ty - ry bz = tz - rz

Korsproduktet, c, beregnes ud fra a og b som:

cx = (ay * bz) - (az * ved) cy = (ax * bz) - (az * bx) cz = (ax * ved) - (ay * bx)

Korsproduktet er skrevet til output-STL-filen sammen med koordinaterne for polygonens ender.

Filformat

Der er to output filformater til STL filer: tekst og binær. Tekstfilformatet repræsenterer dataene som en ASCII-fil med tekst. Her er et eksempel på, hvad et STL datapunkt ser ud som tekst:

fast noget navn

facet normal 61.678 -65.695 -675.324

ydre løkke

vertex 65708.836 30.839 999.000 vertex 65708.836 61.678 1002.000 vertex 65730.734 30.839 1001.000

EndLoop

endfacet

endsolid

I eksemplet ovenfor ville der selvfølgelig være mere end en facet (polygon). De tre tal efter facet normal er koordinaterne for det normale til facet x, y og z. Hvert hjørne er en koordinat på et af tre punkter, der repræsenterer et hjørne af faceten og derfor har hver en x, y og en z-komponent.

Binært STL-filformat er meget mere kompakt end tekstformat. Det er også sværere at forstå, om du ikke 'gør' binære tal. I binært format gemmes hvert af numrene som et enkelt præcision 32 bit floating point nummer. Filen begynder med en fast 80 byte overskrift, som kan indeholde alt, men indeholder normalt en kort beskrivelse af filen. Næste er et enkelt 32 bit heltal, der indeholder værdien af ​​antallet af trekanter indeholdt i filen. Herefter følger fire sæt med tre flytende punktnumre. Det første sæt flyder er det normale på overfladen x, y og z. Derefter kommer de tre punkter, der beskriver hjørnerne af trekanten, og hvert punkt har tre 32 bit flydende punktnumre x, y og z.

Konklusion

Kildekode for SRTM2STL er tilgængelig på GitHub. Det er blevet frigivet under GNU-licensen. Mit håb er, at andre vil ændre og udvide softwaren. Jeg håber også, at de hævede reliefkort, der oprettes med det, vil blive brugt til at uddanne og fascinere.

Nedenfor er nogle skærmbilleder fra 3D-visningsprogrammet sammen med de 3D-udskrevne stykker. Jo bedre opløsningen af ​​printeren er, desto bedre svarer outputen til modellen.

Perito Moreno Glacier - Argentina

Mount Saint Helens - Oregon

Crater Lake Oregon



Du Kan Være Interesseret

VoIPing iPod Touch

VoIPing iPod Touch


Breezing gennem Oshkosh

Breezing gennem Oshkosh


Juke Box Zero

Juke Box Zero


Heirloom Technology - Handy Tricks fra Guatemala

Heirloom Technology - Handy Tricks fra Guatemala