FrostBit-ohjelmistolaboratoriossa kehitettiin ACTIVE-hankkeelle pilotti, jossa tarkoitus oli visualisoida tiepohjan pistepilvidata 3D-mallin avulla. Pilotti tehtiin yhteistyössä Roadscannersin kanssa.


Tausta ja tavoitteet

Tiepohjan hahmottamisessa ongelmana on se, että data koostuu pistepilvistä. Pistepilven presentointi pistepilvityökalulla on yleisesti kömpelöä, ja esimerkiksi eri tasojen hahmottaminen toisistaan hankalaa. Tähän lähdettiin hakemaan vaihtoehtoisesta 3D-visualisoinnista tukea.

Tiepohjan kerroksia visualisoitu Cloud Compare-sovelluksella

Tekniikka ja prosessi

Heposuon datan visualisoinnin työkaluna päätimme käyttää Unreal Engine 5 -pelimoottoria, johon FrostBit-ohjelmistolaboratoriolla oli jo ennestään paljon kokemusta. Pelimoottorista löytyi hyvät työkalut 3D-visualisointiin. Algoritmit tiepohjan löytämiselle sekä visualisoinnille suunniteltiin omasta takaa ja koodattiin C++ -ohjelmistokielellä.

Pilotin yksi ratkaisua vaativista ongelmista oli, kuinka generoida pistepilvidatasta 3D-malli ilman että tarkan mallin generointiin menee puoli työpäivää. Kokeilussa olivat CloudCompare -pistepilvityökalusta löytyvät generointifunktiot, kuten Poisson Reconstruction ja Delaunay triangulation, mutta näissä ilmeni ongelmaksi joko liiallinen manuaalinen työ tai generoinnin pitkä aika. Myöskin, niistä generoitu 3D-malli sellaisenaan itsessään ei sovellu hyvin manipuloitavaksi niiden topologian vuoksi.

Lopulta ratkaisuksi päätimme alkaa kehittämään omaa algoritmiä 3D-mallin generointiin, joka olisi täsmällinen käyttötarkoitukselle. Tiepohjasta otettu pistepilvidata koostui monesta eri tasosta, joista osa oli hyvin selvärajaisia ja lineaarisia. Näiden selkeämpien tasojen avulla olisi mahdollista löytää tiestä sen keskilinja, ja sitä mukaan generoida 3D-malli perinteisellä ja puhtaalla topologialla projisoimalla generoitu geometria pistepilvidataan.

Pistepilvi jaetaan ruudukkoon. Ruudukosta etsitään ne ruudut, joissa on sisällä pisteitä. Näistä ruuduista etsitään XY -akselilla muodostuva keskikohta. Tätä toistamalla saadaan tien suurinpiirteinen keskilinja.

Keskilinjan metsästys alkoi jakamalla pistepilvidata tiheään ruudukkoon. Sen jälkeen ruudukosta tarkasteltiin, mitkä ruudut sisälsivät pisteitä, ja mitkä eivät. Tarkastelu tehtiin käymällä läpi ruudukko vaaka ja pystysuorina viipaleina, vasemmalta oikealle ja ylhäältä alas, jolloin tiedettiin, milloin tyhjä tila muuttui havaituksi tieksi, ja taas takaisin tyhjäksi tilaksi. Näin saatiin tietoon keskiarvopiste aina tietyssä viipaleessa, ja niiden avulla saatiin aikaiseksi karkea keskiviiva. Käytännössä tämä tapa etsiä tieviiva mahdollistaa sen, että mitä tiheämmäksi tarkasteltavan ruudukon asetti, sitä paikkaansa pitävämmäksi karkean keskiviivan sai. Tähän toimintatapaan jäi vielä paljon mahdollisuuksia optimointiin, joita ei tässä pilotissa kuitenkaan tavoiteltu. Näistä mainitaan pohdinnassa. Karkean keskiviivan pyöristäminen tapahtui tekemällä pistejanasta Bezier-käyrä.

Keskilinjasta laajennettu verkko saadaan pystysuuntaisella tarkastelulla aseteltua pistepilven muotoiseksi

Generointi alkoi laajentamalla tien keskiviiva ennaltamääritellyn tien leveäksi.* Generoidut pisteet yhdistettiin toisiinsa, ja luotiin tasainen topologia, joka peittää koko alla olevan pistepilven. Sen jälkeen jokaisesta geometrian pisteestä tarkasteltiin suoraan alaspäin, millä korkeudella keskiverto pistepilven piste oli. Tämän keskiarvon pohjalta geometrian pisteen pystyi projisoimaan alaspäin keskiarvon kohdalle, ja näin generoitu geometria saatiin muovattua pistepilven päälle.

Tiepohjan visualisaattori Unreal Engine -pelimoottorissa

Generoituja teitä pystytään visualisoimaan yhtäaikaisesti pistepilvillä ja 3D-generoidulla mallilla, joista voidaan myös kerros kerrallaan tutkia tierakenteiden korkeuksia ja heittoja. Datan visualisointia varten tehtiin myös tiepinnan leikkauskamera, jolla saadaan pistepilvien tarkka data esitettyä sivuttaissuunnassa leikattuna palasena.

*Tien leveyden olisi voinut saada esimerkiksi ottamalla aikaisemmin mainitun ruudukon viipaleista mitat ylös. Näistä mitoista lyhyin olisi ollut lähimpänä tien alkuperäistä leveyttä. Pilotissa kuitenkin tien oletusleveys määriteltiin käsin.


Lopputulos ja pohdinta

Tuloksena pilotista oli algoritmi tien keskilinjan löytämistä pistepilvestä, sekä prototyyppi tiepohjien visualisointitavasta 3D-mallin avulla.

Jatkokehitysmahdollisuuksia ilmeni pilotin aikana monia. Esimerkiksi puuttuvana työkaluna yksi keskeisimmistä olisi kyky mitata eri tasojen korkeuksien eroja sekä 2D- että 3D-näkymässä.

Optimointina edellä mainittiin mahdollisuus optimoida tien keskiviivan löytämistä varten tehtyä algoritmia. Tähän nousi esiin ainakin yksi vaihtoehtoinen tapa toteuttaa etsintä: etsintäprosessi olisi voinut olla monitasoinen. Siinä ensimmäinen etsintäkierros olisi toteutettu isommalla resoluutiolla olevalla ruudukolla, jolla saataisiin tietoon suurinpiirtein, missä kohdin tie sijaitsee. Tämän jälkeen nämä löydetyt ruudut olisi voitu jakaa pienempiin osiin, jolloin tarkkuutta tien keskiviivan oikealle paikalle olisi voitu hakea tehokkaammin, kuin miten nyt toimittiin. Nykyisessä muutettiin koko laajaa etsintäruudukkoa tiheämmäksi, mikä tekee esimerkiksi pitkien tiepätkien etsimisestä paljon raskaampaa.

Ongelmana pilotissa esiintyi myös teiden tasojen mahdollinen ristiinmeno, eli esimerkiksi allaolevan tason muodot saattoivat joissakin kohtaa tietä nousta ylläolevan tason yläpuolelle, mikä aiheuttaa nykyisellään virheitä 3D-mallin reunojen generoinnissa. Näin ollen 3D-mallin generoinnille tulisi keksiä generointitapa, joka ei ole riippuvainen siitä, että tasot ovat aina tietyssä järjestyksessä, vaan dynaamisesti kykenisivät sopeutumaan eri vaihdostilanteisiin.

Harkinnanvaraiseksi jäi myös, oliko Unreal Engine-pelimoottori paras ratkaisu visualisointia varten, sillä kyseisen pelimoottorin, sekä siinä käytetyn C++ -ohjelmistokielen, epästabiilius aiheutti paljon ongelmia kehityksen aikana. Syötetyn datan vaihtelevuus oli altis luomaan paljon erilaisia virheitä, jotka pilotin mittakaavassa olisivat vaatineet enemmän aikaa, kuin mitä saatavilla oli.


Making of -kuvia


ACTIVE-hanke toteutetaan aikavälillä 1.2.2024 – 28.2.2026.

Hankkeen kokonaisbudjetti on 1 211 190 €, josta Euroopan unionin tukea on 968 946 €. Rahoituksen myöntäjänä toimii Lapin liitto.