testing-framework / R / rotm.r @ 1fdee286
History | View | Annotate | Download (4.89 KB)
1 |
#!/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 |
|
126 |
|