使用iBeacons在Android中进行三角测量

Luc*_*lho 7 android eigen levenberg-marquardt ibeacon altbeacon

我们希望使用iBeacons实现某种室内位置确定. 本文看起来非常有趣,其中作者使用Eigen C++库和Levenberg Marquardt算法实现了非线性最小二乘三角剖分.由于Eigen是用C++编写的,我试图使用JNI和Android NDK来使用它,但它会引发很多错误,我不知道如何解决,我也无法在网上找到任何东西.我也尝试使用Jeigen,但它没有我们需要的所有功能.

所以,我的问题是:

  1. 有人曾在Android中使用信标实现某种Trilateration吗?

  2. 您认为使用Eigen + JNI + NDK是一个很好的解决方案吗?如果是,您是否曾使用该组合实施Levenberg Marquardt?

  3. 有没有比Levenberg Marquardt算法更好的选项来计算Android应用程序中的三边测量?

Mas*_*ico 4

看看这个库: https: //github.com/lemmingapex/Trilateration

使用 Apache Commons Math 中的 Levenberg-Marquardt 算法。

例如..进入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);
Run Code Online (Sandbox Code Playgroud)

但如果您看到 Objectivec 示例https://github.com/RGADigital/indoor_navigation_iBeacons/blob/show-work/ios/Group5iBeacons/Debug/Managers/Location/NonLinear/NonLinear.mm您可以注意到,精度被用作评估参数而不是距离。