2014-11-10 15 views
7

Vogliamo implementare una sorta di determinazione della posizione interna utilizzando iBeacons. This article seems really interesting, in cui l'autore ha implementato la triangolazione dei minimi quadrati non lineari, utilizzando la libreria Eigen C++ e l'algoritmo Levenberg Marquardt. Dato che Eigen è scritto in C++, ho provato ad usare JNI e NDK Android per usarlo ma getta un lot of errors that I have no idea how to solve e non ho trovato nulla online. Ho anche provato a usare Jeigen, ma non ha tutte le funzioni di cui abbiamo bisogno.Trilaterazione in Android usando iBeacons

Quindi, le mie domande sono:

  1. ha qualcuno mai attuato una sorta di Trilaterazione utilizzando fari in Android?

  2. Pensi che utilizzare Eigen + JNI + NDK sia una buona soluzione? Se sì, hai mai implementato Levenberg Marquardt utilizzando la combinazione ?

  3. Esistono opzioni migliori rispetto all'algoritmo Marvelardt di Levenberg per il calcolo della trilaterazione in un'applicazione Android?

+0

Hai provato http://altbeacon.github.io/android-beacon-library/download.html? –

+0

Ho fornito un esempio di come implementare alcune funzioni di Eigen con Java [qui] (https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005). –

risposta

2

Date un'occhiata a questa libreria: https://github.com/lemmingapex/Trilateration

utilizza Levenberg-Marquardt da Apache Commons Math.

Per esempio .. nella TrilaterationTest.java

è possibile vedere:

double[][] positions = new double[][] { { 1.0, 1.0 }, { 2.0, 1.0 } }; 
double[] distances = new double[] { 0.0, 1.0 }; 

TrilaterationFunction trilaterationFunction = new TrilaterationFunction(positions, distances); 
NonLinearLeastSquaresSolver solver = new NonLinearLeastSquaresSolver(trilaterationFunction, new LevenbergMarquardtOptimizer()); 

double[] expectedPosition = new double[] { 1.0, 1.0 }; 
Optimum optimum = solver.solve(); 
testResults(expectedPosition, 0.0001, optimum); 

ma se si vede l'esempio ObjectiveC https://github.com/RGADigital/indoor_navigation_iBeacons/blob/show-work/ios/Group5iBeacons/Debug/Managers/Location/NonLinear/NonLinear.mm si può notare che la precisione viene utilizzato come parametro di valutazione e non la distanza.

+0

Non dà il risultato giusto ... – Jaythaking

+0

Funziona alla grande! Quando si utilizza l'algoritmo di trilaterazione, assicurarsi di convertire (lat, long, alt) in coordinate cartesiane (x, y, z) come richiesto dalla libreria. –

Problemi correlati