testing-framework / R / rotm.r @ 98e1375e
History | View | Annotate | Download (4.89 KB)
1 | 8526ae8c | Jonas Diekmann | #!/usr/bin/env Rscript |
---|---|---|---|
2 | |||
3 | #Argumente einlesen |
||
4 | args <- commandArgs(TRUE) |
||
5 | if(length(args) == 3){ |
||
6 | cat("basisname=\"",args[1],"\"\n",sep="") |
||
7 | cat("diagrammtitle=\"",args[2],"\"\n",sep="") |
||
8 | cat("achsenbeschriftung=\"",args[3],"\"\n",sep="") |
||
9 | basisname <- args[1] |
||
10 | title <- args[2] |
||
11 | xlab <- args[3] |
||
12 | }else |
||
13 | { |
||
14 | cat("Fehler: Bitte Basisname für die Ausgabedateien, Diagrammtitle und Beschriftung der X-Achse angeben!","\n") |
||
15 | quit() |
||
16 | } |
||
17 | |||
18 | ## Hilfsfunktionen ## |
||
19 | |||
20 | #Entfernt Einträge aus der übergebenen Liste mit Rotationsungenauigkeiten, die durch |
||
21 | # numerische Probleme verfälscht sein dürften. |
||
22 | entferneFehlerhafteRotationsungenauigkeiten <- function(liste){ |
||
23 | laengeAlt <- nrow(liste) |
||
24 | |||
25 | #Quadrat der Vektornorm berechnen |
||
26 | liste <- within(liste,Norm <- (DELTA1*DELTA1+DELTA2*DELTA2+DELTA3*DELTA3)) |
||
27 | #Einträge entfernen, deren Quadrat der Vektornorm zu groß ist |
||
28 | liste <- liste[liste$Norm < 0.3,] |
||
29 | |||
30 | #Veränderungen protokollieren |
||
31 | laengeNeu <- nrow(liste) |
||
32 | if(laengeNeu < laengeAlt){ |
||
33 | if((laengeAlt-laengeNeu) == 1) |
||
34 | cat("Warnung: Es wurde 1 Eintrag aussortiert!","\n") |
||
35 | else |
||
36 | cat("Warnung: Es wurden",(laengeAlt-laengeNeu),"Einträge aussortiert!","\n") |
||
37 | } |
||
38 | #Temporäre Spalte abschneiden |
||
39 | return(liste[1:6]) |
||
40 | } |
||
41 | |||
42 | #Einlesen und berechnen von möglichen Datensätzen für die Beschriftung |
||
43 | beschriftungEinlesen <- function(basisname){ |
||
44 | gruppenname <- "Rotationen" |
||
45 | data <- read.csv(file=paste("~/Dokumente/Studium/Bachelorarbeit/blender-files/Positions/",gruppenname,"/",basisname,".csv",sep=""),header=FALSE) |
||
46 | |||
47 | #Geeignete Spalten: |
||
48 | #entfernungKamera: data$V16 |
||
49 | #Rotation um die X-Achse: data$V17-(pi/2) |
||
50 | data <- within(data,V17 <- V17-(pi/2)) |
||
51 | #Rotation um die Y-Achse: data$V19 |
||
52 | #Rotation um die Z-Achse: data$V18 * (-1.0) |
||
53 | data <- within(data,V18 <- V18 * (-1.0)) |
||
54 | |||
55 | #Bitte hier als dritte Zahl die gewünschte Spaltennummer eintragen |
||
56 | return(data[c(1,2,19)]) |
||
57 | } |
||
58 | |||
59 | #Extrahiert zu einer Bildnummer die Beschriftung aus dem übergebenem Datensatz |
||
60 | lookup <- function(bildnummer, beschriftungsdaten){ |
||
61 | ret <- beschriftungsdaten[(beschriftungsdaten$V1==bildnummer),3] |
||
62 | return(ret) |
||
63 | } |
||
64 | |||
65 | #Erstellt einen Plot der übergebenen Rotationsgenauigkeiten (datensatz) |
||
66 | plotte <- function(datensatz,dateiname,title,xBeschriftung,bibliotheksbez){ |
||
67 | #Ausschnitt berechnen |
||
68 | ymin = min(datensatz$DELTA1,datensatz$DELTA2,datensatz$DELTA3) |
||
69 | ymax = max(datensatz$DELTA1,datensatz$DELTA2,datensatz$DELTA3,abs(ymin)) |
||
70 | # Datei öffnen |
||
71 | svg(filename=paste("rotationsungenauigkeit_",bibliotheksbez,"_",dateiname,".svg",sep="")) |
||
72 | # Plotten |
||
73 | plot(datensatz$X1,datensatz$DELTA3,ylim=c(ymin,ymax),type="l",main=paste(bibliotheksbez,":",title,sep=""),col="green4",xlab=xBeschriftung,ylab="Abweichung (rad)") |
||
74 | lines(datensatz$X1,datensatz$DELTA2,col="blue") |
||
75 | lines(datensatz$X1,datensatz$DELTA1,col="orange") |
||
76 | legend("topleft", border=NA, c("Winkel um X","Winkel um Y","Winkel um Z"), fill=c("orange","blue","green4")) |
||
77 | # Datei schreiben |
||
78 | dev.off() |
||
79 | } |
||
80 | |||
81 | ## Hauptfunktionen ## |
||
82 | |||
83 | leseUndPlotte <- function(dateiname){ |
||
84 | |||
85 | #Einlesen |
||
86 | bart <- read.csv(file=paste("/home/jonas/Bachelorarbeit/bart2/rot/",dateiname,".csv",sep=""),header=TRUE) |
||
87 | alvar <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/alvar/2.0.0/alvar-2.0.0-sdk-linux64-gcc44/build/build_gcc44_release/sample/rot/",dateiname,".csv",sep=""),header=TRUE) |
||
88 | aruco <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/aruco/aruco-1.2.5/rot/",dateiname,".csv",sep=""),header=TRUE) |
||
89 | |||
90 | #Bereinigen |
||
91 | cat("Bereinige BART \n") |
||
92 | bart <- entferneFehlerhafteRotationsungenauigkeiten(bart) |
||
93 | cat("Bereinige ALVAR \n") |
||
94 | alvar <- entferneFehlerhafteRotationsungenauigkeiten(alvar) |
||
95 | cat("Bereinige ARUCO \n") |
||
96 | aruco <- entferneFehlerhafteRotationsungenauigkeiten(aruco) |
||
97 | |||
98 | cat("Maxima:","\nBART ",max(bart$DELTA1),max(bart$DELTA2),max(bart$DELTA3),"\nALVAR",max(alvar$DELTA1),max(alvar$DELTA2),max(alvar$DELTA3),"\nARUCO",max(aruco$DELTA1),max(aruco$DELTA2),max(aruco$DELTA3),"\n") |
||
99 | |||
100 | #Achsenbeschriftung |
||
101 | #achse <- beschriftungEinlesen(basisname) |
||
102 | #bart <- within(bart,X1 <- sapply(X1,lookup,achse)) |
||
103 | #alvar <- within(alvar,X1 <- sapply(X1,lookup,achse)) |
||
104 | #aruco <- within(aruco,X1 <- sapply(X1,lookup,achse)) |
||
105 | |||
106 | #Plotten |
||
107 | plotte(bart, dateiname, title, xlab, "BART") |
||
108 | plotte(alvar, dateiname, title, xlab, "ALVAR") |
||
109 | plotte(aruco, dateiname, title, xlab, "ARUCO") |
||
110 | |||
111 | return(0) |
||
112 | } |
||
113 | |||
114 | ## Hauptpogramm ## |
||
115 | leseUndPlotte(paste(basisname,"_1080p48",sep="")) |
||
116 | leseUndPlotte(paste(basisname,"_1080p24",sep="")) |
||
117 | leseUndPlotte(paste(basisname,"_1080p12",sep="")) |
||
118 | leseUndPlotte(paste(basisname,"_720p48",sep="")) |
||
119 | leseUndPlotte(paste(basisname,"_720p24",sep="")) |
||
120 | leseUndPlotte(paste(basisname,"_720p12",sep="")) |
||
121 | leseUndPlotte(paste(basisname,"_360p48",sep="")) |
||
122 | leseUndPlotte(paste(basisname,"_360p24",sep="")) |
||
123 | leseUndPlotte(paste(basisname,"_360p12",sep="")) |
||
124 | |||
125 |