2014-11-10 27 views
7

Chcemy zaimplementować rodzaj określania położenia w pomieszczeniach za pomocą iBeaconów. This article seems really interesting, w którym autor zaimplementował triangulację nieliniowych kwadratów najmniejszych kwadratów, korzystając z biblioteki Eigen C++ i algorytmu Lequell Marquardt. Ponieważ Eigen jest napisany w C++, starałem się używać JNI i Android NDK, aby móc z niego korzystać, ale wyrzucił lot of errors that I have no idea how to solve i nie mogłem znaleźć niczego online. Próbowałem również użyć Jeigena, ale nie ma on wszystkich funkcji, których potrzebujemy.Trilateracja w systemie Android przy użyciu iBeaconów

Więc moje pytania to:

  1. Czy ktoś kiedykolwiek wprowadzone jakieś Trilateration korzystając sygnalizatory w Androidzie?

  2. Czy uważasz, że używanie Eigen + JNI + NDK jest dobrym rozwiązaniem? Jeśli tak, czy kiedykolwiek zaimplementowałeś Levenberg Marquardt używając tej kombinacji ?

  3. Czy istnieją lepsze opcje niż algorytm Levenberga Marquardta do obliczania trilateracji w aplikacji dla systemu Android?

+0

Czy próbowałeś http://altbeacon.github.io/android-beacon-library/download.html? –

+0

Podałem przykład, jak zaimplementować niektóre funkcje Eigen z Java [tutaj] (https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005). –

Odpowiedz

2

Spójrz na tej biblioteki: https://github.com/lemmingapex/Trilateration

wykorzystuje algorytm Levenberg-Marquardt z Apache Commons Math.

Na przykład .. Into the TrilaterationTest.java

widać:

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

ale jeśli widzisz ObjectiveC przykład https://github.com/RGADigital/indoor_navigation_iBeacons/blob/show-work/ios/Group5iBeacons/Debug/Managers/Location/NonLinear/NonLinear.mm można zauważyć, że dokładność jest stosowana jako parametr oceny, a nie dystans.

+0

Po prostu nie daje właściwego rezultatu ... – Jaythaking

+0

Działa świetnie! Korzystając z algorytmu trilateracji, przekonwertuj (lat, long, alt) na współrzędne kartezjańskie (x, y, z) zgodnie z wymaganiami biblioteki. –