我们希望使用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,但它没有我们需要的所有功能.
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应用程序中的三边测量?
解决方法
看看这个库:
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,您可以注意到精度用作评估参数而不是距离.