Statistics
| Branch: | Revision:

testing-framework / R / main2.r @ 8526ae8c

History | View | Annotate | Download (5.924 KB)

1
#!/usr/bin/env Rscript
2

    
3
#Laden
4
source("./fit.r")
5

    
6
#Argumente einlesen
7
args <- commandArgs(TRUE)
8
if(length(args) == 3){
9
cat("dateiname=\"",args[1],"\"\n",sep="")
10
cat("vergleichsdatei=\"",args[2],"\"\n",sep="")
11
cat("basisname=\"",args[3],"\"\n",sep="")
12
dateiname <- args[1]
13
vergleichsdatei <- args[2]
14
basisname <- args[3]
15
}else
16
{
17
cat("Fehler: Bitte zwei Eingabedateinamen und einen Basisnamen für die Ausgabedateien angeben!","\n")
18
quit()
19
}
20

    
21
#Hilfsfunktionen
22
minusEins <- function(x){return (x-1)}
23

    
24
#Vergleicht zwei Winkel auf dem (mathematischen) Ring der Winkel zwischen 0 und pi
25
#Das Vorzeichen ist positiv, falls alpha in Drehrichtung der Winkel der Koordinatenachse näher an beta liegt, als gegen die Drehrichtung
26
verglWinkel <- function(alpha,beta){
27
    alpha <- abs(alpha)
28
    beta  <- abs(beta)
29
    while(alpha < 0){
30
        alpha <- alpha + (2*pi)
31
    }
32
    while(beta < 0){
33
        beta <- beta + (2*pi)
34
    }
35
    alpha <- alpha%%(2*pi)
36
    beta <- beta%%(2*pi)
37
    ret <- alpha-beta
38
    if(abs(ret) > (pi)){
39
        if(alpha < beta){
40
            alpha <- alpha+(2*pi)
41
        }
42
        else {
43
            beta <- beta+(2*pi)
44
        }
45
        ret <- alpha-beta
46
    }
47
    return(ret)
48
}
49

    
50
#Vergleicht eine Liste von Winkeln
51
verglListen <- function(x,y){
52
  return(mapply(verglWinkel,x,y,USE.NAMES = FALSE))
53
}
54

    
55
#Einlesen der Datensätze
56
source("./share/hauptdatensaetze_laden.r")
57

    
58
#Winkel für Blender analytisch berechnen (Matritzen sollten ideale Rotationsmatritzen sein)
59
print("Bestimme Winkel für Blendereingabe")
60
winkelBlender <- sapply(split(blender[,1:11],c(row(blender[,1:11]))),Rot2XYZeulerBLENDER)
61
blenderFrame <- data.frame(t(winkelBlender))
62
names(blenderFrame)[1]<- "X1"
63
names(blenderFrame)[2]<- "X2"
64
names(blenderFrame)[3]<- "BW1"
65
names(blenderFrame)[4]<- "BW2"
66
names(blenderFrame)[5]<- "BW3"
67

    
68

    
69
#Zusammenführen von Zeilen, die sich auf die gleichen Bildnummern und Marker beziehen
70
print("Führe Blender und Bart zusammen")
71
bartFrame <- data.frame(bart)
72
names(bartFrame)[1]<- "X1"
73
names(bartFrame)[2]<- "X2"
74
alvarFrame <- data.frame(alvar)
75
names(alvarFrame)[1]<- "X1"
76
names(alvarFrame)[2]<- "X2"
77
arucoFrame <- data.frame(aruco)
78
names(arucoFrame)[1]<- "X1"
79
names(arucoFrame)[2]<- "X2"
80

    
81
#Markerids und Bildnummern ggf. korrigieren
82
print("Korrigiere Daten")
83
#bartFrame <- within(bartFrame,X2 <- lapply(X2,minusEins))
84

    
85
for(i in 1:9){
86
    names(bartFrame)[(i+2)]<- paste("R",i,sep="")
87
}
88

    
89
#Zusammenführung von Frames
90
tempBart <- merge(bartFrame,blenderFrame,by = c("X1","X2"))
91
tempAlvar <- merge(alvarFrame,blenderFrame,by = c("X1","X2"))
92
tempAruco <- merge(arucoFrame,blenderFrame,by = c("X1","X2"))
93

    
94
#Doppelte Zeilen mit identischen Daten entfernen
95
tempBart <- unique(tempBart)
96
tempAlvar <- unique(tempAlvar)
97
tempAruco <- unique(tempAruco)
98

    
99
#Berechunung der Winkel der Bibliotheken
100
t1 <- split(tempBart[,1:11],c(row(tempBart[,1:11])))
101
t2 <- split(tempBart[,grep("BW",names(tempBart))],row(tempBart[,grep("BW",names(tempBart))]))
102
winkelBart <- mapply(Rot2XYZeulerBART,t1,t2)
103
t1 <- split(tempAlvar[,1:11],c(row(tempAlvar[,1:11])))
104
t2 <- split(tempAlvar[,grep("BW",names(tempAlvar))],row(tempAlvar[,grep("BW",names(tempAlvar))]))
105
winkelAlvar <- mapply(Rot2XYZeulerALVAR,t1,t2)
106
t1 <- split(tempAruco[,1:11],c(row(tempAruco[,1:11])))
107
t2 <- split(tempAruco[,grep("BW",names(tempAruco))],row(tempAruco[,grep("BW",names(tempAruco))]))
108
winkelAruco <- mapply(Rot2XYZeulerARUCO,t1,t2)
109

    
110
#Zusammenführung von Frames (Die try-Blöcke sind notwendig, da die Frames leer sein könnten (s.o) )
111
print(winkelBart)
112
bartFrame <- data.frame(t(winkelBart))
113
try(bartFrame <- within(bartFrame,X2 <- unlist(X2)))
114
try(tempBart <- merge(bartFrame,blenderFrame))
115

    
116
alvarFrame <- data.frame(t(winkelAlvar))
117
try(alvarFrame <- within(alvarFrame,X2 <- unlist(X2)))
118
tempAlvar <- merge(alvarFrame,blenderFrame)
119
arucoFrame <- data.frame(t(winkelAruco))
120
try(arucoFrame <- within(arucoFrame,X2 <- unlist(X2)))
121
tempAruco <- merge(arucoFrame,blenderFrame)
122

    
123

    
124
#winkelBart <- sapply(split(bart[,1:11],c(row(bart[,1:11]))),Rot2XYZeulerREF)
125
#winkelBlender <- sapply(split(blender[,1:11],c(row(blender[,1:11]))),Rot2XYZeulerREF)
126
#winkelAlvar <- sapply(split(alvar[,1:11],c(row(alvar[,1:11]))),Rot2XYZeulerREF)
127
#winkelAlvar <- sapply(split(alvar[,1:11],c(row(alvar[,1:11]))),Rot2XYZeulerALVAR)
128
#winkelAruco <- sapply(split(aruco[,1:11],c(row(aruco[,1:11]))),Rot2XYZeulerARUCO)
129

    
130

    
131
#Differenzen bestimmen (falls die Listen die angegebenen Attribute enthalten)
132
try(tempBart <- within(tempBart, DELTA1 <- verglListen(X3,BW1)))
133
try(tempBart <- within(tempBart, DELTA2 <- verglListen(X4,BW2)))
134
try(tempBart <- within(tempBart, DELTA3 <- verglListen(X5,BW3)))
135
try(tempAlvar <- within(tempAlvar, DELTA1 <- verglListen(X3,BW1)))
136
try(tempAlvar <- within(tempAlvar, DELTA2 <- verglListen(X4,BW2)))
137
try(tempAlvar <- within(tempAlvar, DELTA3 <- verglListen(X5,BW3)))
138
try(tempAruco <- within(tempAruco, DELTA1 <- verglListen(X3,BW1)))
139
try(tempAruco <- within(tempAruco, DELTA2 <- verglListen(X4,BW2)))
140
try(tempAruco <- within(tempAruco, DELTA3 <- verglListen(X5,BW3)))
141

    
142
print("BART")
143
tempBart <- within(tempBart,X1 <- unlist(X1))
144
tempBart <- tempBart[order(tempBart$X1),]
145
try(print(tempBart[c(1,2,9,10,11)]))
146
try(write.csv(tempBart[c(1,2,9,10,11)],file=paste("/home/jonas/Bachelorarbeit/bart2/rot/",basisname,".csv",sep="")))
147
print("ALVAR")
148
tempAlvar <- within(tempAlvar,X1 <- unlist(X1))
149
tempAlvar <- tempAlvar[order(tempAlvar$X1),]
150
try(print(tempAlvar[c(1,2,9,10,11)]))
151
try(write.csv(tempAlvar[c(1,2,9,10,11)],file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/alvar/2.0.0/alvar-2.0.0-sdk-linux64-gcc44/build/build_gcc44_release/sample/rot/",basisname,".csv",sep="")))
152
print("ARUCO")
153
tempAruco <- within(tempAruco,X1 <- unlist(X1))
154
tempAruco <- tempAruco[order(tempAruco$X1),]
155
try(print(tempAruco[c(1,2,9,10,11)]))
156
try(write.csv(tempAruco[c(1,2,9,10,11)],file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/aruco/aruco-1.2.5/rot/",basisname,".csv",sep="")))
157

    
158
print("Bitte Ergebnisse auf Plausibilität prüfen!")
159
print("Eine numerische Stabilität der verwendeten Verfahren ist nicht garantiert.")