def paramSearch(d,nSensor,nAnchor,radiorange,iteN): sumLocSensor = 0 minNLocSensor = sys.maxint maxNLocSensor = 0 for i in range(iteN): [posX,locX,disX,conX,noisyDisX,trueDisX,estPosX,cLevel] = problems.createProblem_random(d,nSensor,nAnchor,sigma,radiorange,i) tri.checkLocalizability(nSensor,locX,conX) [nLocSensor,preLocSensor] = helper.analyseLocalizability(nSensor,nAnchor,locX) sumLocSensor += nLocSensor minNLocSensor = min(minNLocSensor,nLocSensor) maxNLocSensor = max(maxNLocSensor,nLocSensor) print nLocSensor aveNLocSensor = sumLocSensor / iteN perLocSensor = aveNLocSensor/nSensor perMinLocSensor = minNLocSensor / nSensor perMaxLocSensor = maxNLocSensor / nSensor return [perLocSensor,perMinLocSensor,perMaxLocSensor]
def calcPosition_Trilateration(d,nSensor,nAnchor,sigma,radiorange,iteN,type): print "Trilaterationによる位置計算を開始" locSensorNs = [] RMSDs =[] for i in range(iteN): [posX,locX,disX,conX,noisyDisX,trueDisX,estPosX,cLevel] = problems.createProblem_random(d,nSensor,nAnchor,sigma,radiorange,i+100) if type==1:tri.localizeByTrilateration(nSensor,nAnchor,locX,conX,estPosX,noisyDisX,cLevel) [nLocSensor,preLocSensor] = helper.analyseLocalizability(nSensor,nAnchor,locX) locSensorNs.append(nLocSensor) rmsd = helper.calcRMSD(nSensor,locX,posX,estPosX) RMSDs.append(rmsd) print nLocSensor print rmsd perLocSensor = sum(locSensorNs)/nSensor/iteN perMinLocSensor = min(locSensorNs)/nSensor perMaxLocSensor = max(locSensorNs)/nSensor [aveRMSD,minRMSD,maxRMSD] = helper.analyseRMSDs(RMSDs) RMSDsModified = [elem for elem in RMSDs if elem<1] [aveRMSD_modified,a,b]= helper.analyseRMSDs(RMSDsModified) return [perLocSensor,perMinLocSensor,perMaxLocSensor,aveRMSD,minRMSD,maxRMSD,aveRMSD_modified]
def Setting(ip, port): serverSock = socket(AF_INET, SOCK_STREAM) print("소켓시작") serverSock.bind((ip, port)) print("bind") serverSock.listen(1) print("listen") while (1): connectionSock, addr = serverSock.accept() print(str(addr), '에서 접속이 확인되었습니다.') data = connectionSock.recv(1024).decode() data_2 = Calculate.in_data(data) data_2 = data_2.split(",") data_3 = Trilateration.Trilateration(data_2) # 삼변측량알고리즘 적용 return data_3 #위치좌표 X,Y반
def run_calculations(): global numSteps numSteps += 1 #signal represents rssi for BLE taken from distances signal = HelperFuncs.dist_from_beacons(beacons, personLoc[0], personLoc[1]) #fingerprinting estimates locEstTimeStart = time.time() est = Fingerprinting.get_closest_fingerprint(signal, fingerprintMap) locEstTimeTot = time.time() - locEstTimeStart isFingerprintError = HelperFuncs.is_error_in_estimation(personLoc, est) if (isFingerprintError): global fingerprintData fingerprintData = error_calculations(fingerprintData, personLoc, est, signal) fError = HelperFuncs.total_error(personLoc, est) fingerprintData['allFingerprintTimes'].append(locEstTimeTot) #trilateration estiamtes locEstTimeStart = time.time() est = Trilateration.calculate_loc(beacons, signal) locEstTimeTot = time.time() - locEstTimeStart isTrilaterationError = HelperFuncs.is_error_in_estimation(personLoc, est) if (isTrilaterationError): global triangulationData triangulationData = error_calculations(triangulationData, personLoc, est, signal) tError = HelperFuncs.total_error(personLoc, est) triangulationData['allTrilaterationTimes'].append(locEstTimeTot) #compare error if (isFingerprintError and isTrilaterationError): if (tError > fError): fillColor = "orange" else: fillColor = "purple" c.create_oval(personLoc[0] - 3, personLoc[1] - 3, personLoc[0] + 3, personLoc[1] + 3, fill=fillColor)
#Reading floor plan to use as Background image img = plt.imread(Layout) Positions = pd.read_csv(Positions, sep=";") database = pd.read_csv(testset, sep=";") testset = pd.read_csv(testset, sep=";") Anchors = pd.read_csv(Anchors, sep=";") Limits = pd.read_csv(Limits, sep=";") Pathloss_model = pd.read_csv(Pathloss_model, sep=";") fig, ax = plt.subplots() ax.scatter(list(Anchors['x']), list(Anchors['y'])) if (algorithm == 'Trilateration'): ax.scatter(list(Positions['x']), list(Positions['y'])) Positions = Trilateration(Positions, Anchors, Pathloss_model) for i in range(len(list(Positions['x']))): ax.plot([Positions['x'][i], Positions['x_calc'][i]], [Positions['y'][i], Positions['y_calc'][i]], color='r') ax.scatter(list(Positions['x_calc']), list(Positions['y_calc'])) print(mean(list(Positions['error']))) elif (algorithm == 'KNN'): ax.scatter(list(testset['x']), list(testset['y'])) Positions = knn(database, testset, k) for i in range(len(list(Positions['x']))): ax.plot([Positions['x'][i], Positions['x_calc'][i]], [Positions['y'][i], Positions['y_calc'][i]], color='r') ax.scatter(list(Positions['x_calc']), list(Positions['y_calc'])) print(mean(list(Positions['error'])))