testing-framework / R / rotm.r @ 8526ae8c
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 |
|