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

时间:2014-11-10 17:42:00

标签: android ibeacon eigen altbeacon levenberg-marquardt

我们希望使用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,但它没有我们需要的所有功能。

所以,我的问题是:

  1. 有人曾经使用过实施某种Trilateration Android中的信标?

  2. 您认为使用Eigen + JNI + NDK是一个很好的解决方案吗?如是,     你有没有用Levenberg Marquardt实现它     组合

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

1 个答案:

答案 0 :(得分:2)

看看这个图书馆: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);

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