• No results found

Figur 5: En skiss av det tänkta ROS-baserade systemet.

Som kan ses i figurerna 4 och 5 var klienten den centrala delen i programmet. Den hanter- ade användarens indata och använde sig av de olika noderna för att utföra det användaren vill. Konceptet var att systemet skulle använda en pipe and filter-arkitektur där klienten skick- ade runt data i pipen men att användaren, genom klienten, hade möjlighet att granska resul- tatet och göra viss handpåläggning mellan de olika stegen. Detta genom att klienten alltid kunde spara resultatet från ett steg till en fil och använda andra program för handpåläggnin- gen innan den skickades vidare i systemet.

5.2

Systembeskrivning - 3DCopy

Som kan läsas tidigare i denna rapport omförhandlades projektets krav och mål med kunden under projektets gång. Detta ledde till att gruppen gjorde om systemets arkitektur. ROS- arkitekturen som presenterats i avsnitt 5.1 ersattes. Istället skapades ett objektorienterat pro- gram, skrivet i C++. Detta program utför både registrering, filtrering och meshning. När sedan meshen genererats kan programmet skriva ut objektet med hjälp av en 3D-skrivare. Till detta program finns också ett CLI och ett GUI.

5.2.1

Arkitektur

Programmet består av två större klasser, Registration och Mesh. Dessa två klasser används sedan av Cli vilket visas i figur 6. Det har lagts stor vikt vid moduläriteten i programmet då Registration och Mesh ska fungera självständigt i olika program.

5. RESULTAT

Figur 6: Översiktligt klassdiagram över arkitekturen.

5.2.2

Kommandoradsgränssnitt (CLI)

Systemet kan kontrolleras av ett CLI som kan ta in olika parametrar för att anpassa reg- istreringen. Det finns även alternativ för att bara registrera eller bara mesha objekt. Under en körning av programmet med hjälp av kommandoradsgränssnittet väljs vilka filer eller map- par med filer programmet ska läsa in och använda. Hur de används beror på alternativen. Ett exempel på ett anrop är:

3DCopy -v --max-corr-dist 15 path/to/register/ output

Det anropet kommer registrera och sedan mesha punktmolnsfilerna i mappen path/to/register/ och döpa det kompletta punktmolnet respektive färdiga meshen till output.pcd och output.stl. Under registreringen och meshningen kommer programmet att skriva ut information om processen på grund av -v flaggan som står för verbose mode. Med flaggan --max-corr-dist sätts värdet på Max correspondence distance, se avsnitt 3.2.2. Om man undrar vilka alternativ som finns kan man använda -h flaggan. Då skriver programmet ut de alternativ som finns samt hur man använder programmet med hjälp av kommandoradsgränssnittet.

5.2.3

Grafiskt användargränssnitt (GUI)

För att lättare kunna styra systemet utvecklades också ett webbaserat GUI. GUI:t har samma funktionalitet som CLI:t och använder CLI:t för att köra meshning och registrering. Huvud- vyn för det webbaserade GUI:t kan ses i figur 7.

Figur 7: Huvudvyn i 3DCopys webbaserade GUI.

5.2. Systembeskrivning - 3DCopy

De funktioner som finns i GUI:t är Add Registration Job och Add Mesh Job. Add Registra- tion Job öppnar ett formulär där parametrar på registreringen ska sättas och de filer som ska registreras ska väljas. Formuläret för registrering kan ses i figur 8.

Figur 8: Formuläret för att skapa ett registreringsjobb.

Add Mesh Job öppnar ett formulär där parametrar på meshningen ska sättas och den fil som ska meshas ska väljas. Formuläret för meshning kan ses i figur 9.

Figur 9: Formuläret för att skapa ett meshningsjobb.

Det finns även tre funktioner för varje jobb som finns i jobblistan. De funktionerna är View Job, Start Job och Delete Job. Ett jobb och dess tillhörande funktioner kan ses i figur 10.

Figur 10: Ett jobb i jobblistan.

View Job visar information om det specifika jobbet, bland annat de filer som är associerade och de parametrar som valdes för jobbet. Start Job startar jobbet på servern, jobben körs inte automatiskt efter de har skapats utan de måste manuellt startas. Slutligen kan Delete Job väljas. Delete Job tar bort jobbet, det vill säga all information om jobbet i databasen och alla filer på servern som associeras med jobbet.

5. RESULTAT

5.2.4

Registrering

Systemet registrerar punktmoln parvis genom att använda PCLs implementation av ICP. De punktmoln som läses in i antingen CLI:t eller GUI:t behandlas av registreringsklassen och ut- för registreringen. För att registreringen ska fungera för olika fall kan användaren själv sätta värden på parametrarna Max correspondence distance, Transformation epsilon och Max iterations. I figur 11 kan en bildserie ses. Denna bildserie föreställer resultatet från registrering med 1, 5, 11, 17, 23, 29 respektive 35 punktmoln. Punktmolnen som har använts vid registreringen i bilden föreställer en byst av Einstein och är tagna med tio graders skillnad. Bildserien visar hur bystens konturer växer fram allt efter som att fler punktmoln registreras. Efter den sista registreringen har ett punktmoln som föreställer bysten, utan lutning, framställts.

Figur 11: Resultatet av registrering med 1, 5, 11, 17, 23, 29 respektive 35 punktmoln.

5.2.5

Meshning

Den ytrekonstruering som systemet använder, PCLs Poisson surface reconstruction, är väldigt beroende av att det registrerade punktmolnet inte har några punkter som har hamnat fel. Om några punkter är fel eller om det är för glest mellan punkterna så kan inte algoritmen räkna ut ytnormalerna korrekt. Om ytnormalerna blir fel kommer inte meshen att stämma överens med det objekt som punktmolnet föreställer.

I figur 12 visas en mesh, som föreställer Einstein, gjord med 3DCopy. Det syns tydligt att olika problem uppstår. Dels blir ytorna på den genererade meshen gryniga och liknar därför