在Android中使用iBeacons实现三点定位

9
我们希望使用iBeacons实现一种室内定位。在这篇文章中,作者实现了非线性最小二乘三角测量,使用了Eigen C++库和Levenberg Marquardt算法。由于Eigen是用C++编写的,因此我们尝试使用JNI和Android NDK来使用它,但它抛出了许多错误,我不知道如何解决,并且在网上找不到任何信息。 我们也尝试使用Jeigen,但它没有我们需要的所有功能。
因此,我的问题是:
  1. 有人在Android中使用beacons实现过某种Trilateration吗?
  2. 您认为使用Eigen+JNI+NDK是一个好的解决方案吗? 如果是,请问您是否曾经使用该组合实现过Levenberg Marquardt?
  3. 在Android应用程序中计算三边测量时,是否有比Levenberg Marquardt算法更好的选择?

你尝试过 http://altbeacon.github.io/android-beacon-library/download.html 吗? - Rikki Tikki Tavi
我在这里提供了如何使用Java实现一些Eigen函数的示例链接 - Z boson
1个回答

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

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


非常好!在使用三边定位算法时,请确保将(纬度、经度、高度)转换为库所需的笛卡尔坐标(x、y、z)。 - Scott Wiedemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接