2014-11-10 5 views
7

Мы хотим реализовать какое-то определение внутреннего положения с помощью iBeacons. This article seems really interesting, в котором автор реализовал нелинейную Триангуляцию с наименьшими квадратами, используя библиотеку Eigen C++ и алгоритм Levenberg Marquardt. Поскольку Eigen написан на C++, я пытался использовать JNI и Android NDK, чтобы использовать его, но он выбрасывает lot of errors that I have no idea how to solve, и я ничего не могу найти в Интернете. Я также пытался использовать Jeigen, но у него нет всех функций, которые нам нужны.Trilateration в Android с помощью iBeacons

Итак, мои вопросы:

  1. ли кто-то когда-либо реализован какой-то трилатерация с помощью маяки в Android?

  2. Считаете ли вы, что использование Eigen + JNI + NDK является хорошим решением? Если да, то вы когда-либо реализовывали Levenberg Marquardt, используя комбинацию ?

  3. Есть ли лучшие варианты, чем алгоритм Levenberg Marquardt для расчета трилатерации в приложении для Android?

+0

Вы попробовали http://altbeacon.github.io/android-beacon-library/download.html? –

+0

Я привел пример того, как реализовать некоторые собственные функции с помощью Java [здесь] (https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005). –

ответ

2

Взгляните на эту библиотеку: https://github.com/lemmingapex/Trilateration

использует алгоритм Левенберга-Marquardt от Apache Commons Math.

Например .. в TrilaterationTest.java

вы можете увидеть:

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

, но если вы видите ObjectiveC пример https://github.com/RGADigital/indoor_navigation_iBeacons/blob/show-work/ios/Group5iBeacons/Debug/Managers/Location/NonLinear/NonLinear.mm можно отметить, что точность используется в качестве параметра оценки и не расстояние.

+0

Это просто не дает правильного результата ... – Jaythaking

+0

Отлично работает! При использовании алгоритма трилатерации обязательно преобразуйте (lat, long, alt) в декартовы координаты (x, y, z), как того требует библиотека. –