Fotogrammetriapöydän rakentelua osa 3 FINAL

On kulunut muutama viikko... Hettkiinen! On kulunut tasan kolme kuukautta siitä, kun viimeksi kirjoitin tästä aiheesta sivustolleni. Olen edennyt siihen pisteeseen, että ensimmäiset 3D-kuvaukset on suoritettu. Aiemman osan voit lukea tarvittaessa tästä: https://www.hutasu.net/fotogrammetriapoydan-rakentelua-osa-2/

Ennen kuin mennään pilveen, siis 3D-pistepilveen, käydään läpi kuinka asiat ovat tähän mennessä onnistuneet.

Edelliseen postaukseen verrattuna olen kytkentöjä varsinkin kameran laukaisijan suhteen muuttanut niin, että nyt nappifunktio on tehty oikean 5 voltin releen avulla. Rele yksinkertaisesti maadoittaa mikin input-johtimen Arduino Nanon ohjaamana.

Tätä testaillessani huomasin, että jos signaalin pituus on 100 ms, niin puhelin (Huawei P20 Lite) ottaa sarjakuvia 20 kpl vaikka signaalitaso olisi muuten oikein. Kun ajan nostaa 250 millisekuntiin, niin puhelin räpsäisee vain yhden kuvan. Koitin hieman etsiä Androidin manuaaleista tähän ajan pituuteen speksiä, mutta en löytänyt joten tämä oli tämmöinen empiirinen toteamus aiheesta. Tarkemmin Androidin 3,5mm audio-liitynnästä voi lukea näiltä sivuilta:

https://source.android.com/devices/accessories/headset/jack-headset-spec
https://source.android.com/devices/accessories/headset/plug-headset-spec

Releen käyttö ei olisi välttämättömyys ollut, jos olisin malttanut tutkia lisää toimimatonta laukausijaa. Toimimattomuuden taustalta paljastui likainen kontakti puhelimen 3,5mm pistokkeessa (näin ollen aiemmin esitetty transistorikytkentä toimii eikä relettä ole pakko käyttää).

Ohjelman toiminnan määritys, ohjelmointi ja testaus

Halusin laitteeseeni kaksi toimintamoodia: jatkuva pyöritys tai "3D-skannaus". Nimesin nämä toimintatilat englanniksi "Rotate" ja "3D-Scan". Ohjelmassa tuli olla myös valikko, mistä nämä moodit voidaan valita. Valikossa voidaan valita, kuinka monta kuvaa otetaan tai jatkuvasti pyörivässä moodissa: mihin suuntaan alustaa pyöritetään ja kuinka nopeasti. Tämä voi olla hyödyllinen esimerkiksi jatkoprojekteissa, kuvien ja videoiden ottamisessa sekä mm. maalauksissa (etenkin spray).

Aloitin ohjelman tekemisen 3D-skannaukseen liittyvästä pyöritysfunktion tekemisestä. Sinänsä matematiikka on yksinkertaista, koska tarvitsee vain jakaa täyden ympyrän asteluku eli 360 otettavien kuvien määrällä. Jatkuva pyöritys tarvitsee vain jatkuvaa askellusta halutulla nopeudella.

Arduino Stepper ja Accelstepper -kirjastot

Askelmoottorin pyöritystä olin aluksi testannut Arduinon Stepper-kirjaston avulla, mutta päädyin lopulta käyttämään hieman edistyneempää Accelstepper-kirjastoa. Tässä Accelstepper-kirjastossa moottoria kiihdytetään ja hidastetaan automaattisesti, mikä on mukava ominaisuus jolloin moottorin käyttö ei ole niin töksähtelevää (kappale ei kaadu alustalla niin helposti).

Funktio rotateDegreeRelative() pyörittää moottoria annetun asteluvun verran. Funktion sisällä lasketaan tarvittavien askelien määrä mikä annetaan Accelstepper-kirjaston funktioille.

void rotateDegreeRelative(float degree)
{
  int mySteps = (int) calculateStepsForDegree(degree);
  enableMotor();
  myStep.setSpeed(600);
  myStep.move(mySteps);
  while(myStep.run());
  myStep.disableOutputs();
}
float calculateStepsForDegree(float degree)
{
  return stpd * (float)degree;
  if(degree == 0)
  {
    return 0;
  }
  else
  {
    if(degree > 0)
    {
      return (stpd * ((float)degree - MECH_BACKLASH));
    }
    else
    {
      return (stpd * ((float)degree + MECH_BACKLASH));
    }
  }
}

Testauksen apuvälineenä käytin aluksi astemittaa ja kynää, mutta siirryin sitten käyttämään toisenlaista astemittaa ja hyödynsin magneettijalan magneettia ja teippiä pitämään metallinen mitta paikallaan.

Hupsista, kursori pääsi linssiluteeksi kuvakaappaukseen 🙂
Astemittausta

Parin illan värkkäilyn jälkeen sain funktiot toimimaan halutulla tavalla ja pöydän pyörimään n. 1 asteen tarkkuudella. Loput koodista olikin sitten sellaista "glue-logic"ia, eli käyttöliittymän tekoa ja toimintojen niputtamista yhteen. Jos kiinnostaa tutkia koodin tai valikon toimintaa enemmän, tai haluat koodin vain itsellesi, niin lataa Arduino koodit alta.

Koodi voi vaikuttaa sekavalta ja kommentteihin on lyöty paljon vanhoja harjoituksia, mutta jos tekee kytkennät kuten edellisessä osassa on neuvottu, niin tämän pitäisi toimia ns. sukkana.

Pyörityspöydän pinnoitus ja skannausvalmistelut

Olen lukenut internetistä eri lähteistä, että 3D-skannauskuvia ottaessa on hyvä jos skannausalusta ei ole uniformaali tai yhdenmukainen. Siksipä ostinkin lidlistä eräs kerta kun sattui ohimennen pistämään silmään, tuollaista päällystys/sisustus tarraa. Ajattelin että tämän avulla saan tehtyä alustaan hyvän pinnan skannauksia varten. Rulla tämän näköistä tarraa maksoi n. 2 euroa ja siitä riittää käyttää vaikka vähän muuallekin (en ala kyllä sisustamaan mitään tällä...).

Päällystepaperin mitoitus
Päällystepaperin mitoitus takaa

Sattumanvaraisesti leikattu palanen vaikuttaisi takaavan sen, että lautanen ei ole symmetrinen mistään suunnasta katsottuna.

Leikattu ja liimattu päällystepaperi

Skannaussetuppi on kuvassa alla, vaikka myöhemmin siirsin ohjausyksikön pois laatikon sisältä (ei kiinnitetty mihinkään, joten helposti siirreltävissä).

3D-skannaussetti

Kuvien ottaminen ja 3D-objektin luonti

Aiemmin tekemäni valolaatikko tulee nyt apuun, sillä sen pitäisi(?) auttaa 3D-skannauksessa paremman ja tasaisemman valon ansiosta.

Lyhyesti prosessi on seuraavanlainen

  1. Otetaan tarvittava määrä kuvia kappaleen joka puolelta (tarkkaa määrää on mahdotonta sanoa, koska kappaletta voi joutua kuvaamaan useampaan eri otteeseen ja eri valaistuksissa)
  2. Importoidaan valokuvat Meshroom-ohjelmaan ja käsitellään ne siellä. Tämä prosessointi voi kestää todella pitkään, joten ei kannata hötkyillä vaan antaa tietokoneen raksuttaa rauhassa. Lisätietoa Meshroom-softan käytöstä löytyy osoitteesta https://alicevision.org/ ja vaikka tästä videosta: https://www.youtube.com/watch?v=R0PDCp0QF1o
  3. Viedään skannattu malli haluttuun 3D-ohjelmaan ja aletaan siistimään ja muokkaamaan mallia halutun laiseksi.

Tein prosessista lyhkäisen videon, missä skannausta ja kuvankäsittelyä hieman esitellään. Tämä on vasta ensimmäinen skannaus jonka olen saanut tehtyä, mutta muita skannauksia on tarkoitus tehdä ja kokeilla erilaisia asioita mitä skannatuille objekteille voi tehdä (esim harmaa matta maali tms). Samoin kokoluokka lienee jollain tapaa rajoitettu, ainakin valoboksin sisällä. Toisaalta Meshroom-softassa kokorajoituksia ei vaikuta kuitenkaan olevan, koska on mahdollista skannata esimerkiksi dronen-kuvista ympäristöä.

Skannatusta esineestä muutama kuva alla Meshroomista kaapattuna:

Kuva Meshroomin ikkunasta ns. rautalankamalli.
3D fotogrammetria pintamallikuva
Pintamallikuva

Täytyy siis vielä jatkaa näitä kokeiluita ja kokeilla skannailla lisää erilaisia objekteja. Tähän päättyykin tämä epistola ja siirrytään nyt muihin aiheisiin. 3D-skannaukset tulenevat jatkossa sivustolla vastaan erilaisten töiden tai muiden rakenteluiden muodossa melko varmasti.

Jätä kommentti

Sähköpostiosoitettasi ei julkaista.

This site uses Akismet to reduce spam. Learn how your comment data is processed.