我们希望使用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中的信标?
您认为使用Eigen + JNI + NDK是一个很好的解决方案吗?如是, 你有没有用Levenberg Marquardt实现它 组合
有没有比Levenberg Marquardt算法更好的选项来计算Android应用程序中的三边测量?
答案 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,您可以注意到精度用作评估参数而不是距离。