2014-11-10 21 views
7

Wir möchten eine Art von Innenpositionsbestimmung mit iBeacons implementieren. This article seems really interesting, in dem der Autor die nichtlineare Kleinste-Quadrate-Triangulation unter Verwendung der Eigen C++ - Bibliothek und des Levenberg-Marquardt-Algorithmus implementiert hat. Da Eigen in C++ geschrieben ist, habe ich versucht, JNI und Android NDK zu benutzen, um es zu benutzen, aber es wirft eine lot of errors that I have no idea how to solve und ich konnte nichts online finden. Ich habe auch versucht, Jeigen zu benutzen, aber es hat nicht alle Funktionen, die wir brauchen.Trilateration in Android mit iBeacons

Also, meine Fragen sind:

  1. Hat jemand jemals irgendeine Art von Trilateration mit Baken in Android umgesetzt?

  2. Glauben Sie, dass die Verwendung von Eigen + JNI + NDK eine gute Lösung ist? Wenn ja, haben Sie jemals Levenberg Marquardt mit der Kombination implementiert?

  3. Gibt es bessere Möglichkeiten als der Marquardt-Algorithmus von Levenberg zur Berechnung der Trilateration in einer Android-Anwendung?

+0

Haben Sie http://altebeacon.github.io/android-beacon-library/download.html versucht? –

+0

Ich gab ein Beispiel für die Implementierung einiger Eigenfunktionen mit Java [hier] (https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005). –

Antwort

2

einen Blick auf diese Bibliothek nehmen: https://github.com/lemmingapex/Trilateration

verwendet Levenberg-Marquardt-Algorithmus von Apache Commons Math.

Zum Beispiel .. in die TrilaterationTest.java

können Sie sehen:

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); 

aber wenn man das Objective Beispiel sehen https://github.com/RGADigital/indoor_navigation_iBeacons/blob/show-work/ios/Group5iBeacons/Debug/Managers/Location/NonLinear/NonLinear.mm können Sie beachten, dass die Genauigkeit als Bewertungsparameter verwendet wird und nicht die Entfernung.

+0

Es gibt einfach nicht das richtige Ergebnis ... – Jaythaking

+0

Funktioniert gut! Stellen Sie bei der Verwendung des Trilaterationsalgorithmus sicher, dass (lat, long, alt) entsprechend der Bibliothek in kartesische Koordinaten (x, y, z) konvertiert wird. –