插值和预测 CLLocationManager

Posted

技术标签:

【中文标题】插值和预测 CLLocationManager【英文标题】:Interpolating and predicting CLLocationManager 【发布时间】:2015-01-19 11:56:10 【问题描述】:

我需要获取至少 10 赫兹的更新用户位置,以便在驾驶时在 ios 版 MapBox 中流畅地为位置设置动画。由于核心位置每秒只提供一个点,我相信我需要做一些预测。

我尝试过ikalman,但在每秒更新一次并以 10 hz 查询时似乎没有任何区别。

请问我该如何解决?

【问题讨论】:

只是出于好奇:为什么是 10 Hz?驾驶汽车时,每三秒瞥一眼就太频繁了,无法继续在路上行驶而不撞到障碍物……实现这一目标的一个想法是使用陀螺仪和加速度计数据…… 因为如果Apple可以流畅地制作动画,我们应该也可以。一瞥可能有 1-2 秒长,在此期间它应该沿着路径很好地移动而不是跳跃。 如果您每秒更新两次并通过 CoreAnimation 为位置设置动画,则用户将获得平滑的图像...如果您每秒更新一次并以相同的方式设置动画时间为一秒,那也应该做到这一点......而且比做很多数学要简单得多。 也许吧,但我们正在使用 MapBox 来显示地图,并且不想破解他们的动画。更频繁地设置地图的中心坐标更容易。正如我在问题中所说,似乎有一个图书馆,但它似乎不起作用。也许我用错了。提供一个使用 ikalman 的例子来回答这个问题也很好。 【参考方案1】:

您正在寻找的是外推,而不是插值。

我真的、真的很惊讶互联网上关于推断的资源如此之少。如果你想了解更多,你应该阅读一些数值方法/数学书并自己实现算法。

也许简单的线性外推就足够了?

// You need two last points to extrapolate
-(double) getExtrapolatedValueAt:(double)x withPointA:(Point*)A andPointB(Point*)B

    // X is time, Y is either longtitute or latitude.
    return A.y + ( x - A.x ) / (B.x - A.x) * (B.y - A.y);

-(Point*) getExtrapolatedPointAtTime:(double)X fromLatitudeA:(Point*)latA andLatitudeB:(Point*)latB andLongtitudeA:(Point*)longA andLongtitudeB:(Coord*)longB

    double extrapolatedLatitude = [self getExtraploatedValueAt:X withPointA:latA andPointB:latB];
    double extrapolatedLongtitude = [self getExtrapolatedValueAt:X withPointA:longA andPointB:longB];
    Coord* extrapolatedPoint = [Coord new];
    extrapolatedPoint.longtitude = extrapolatedLongtitude;
    extrapolatedPoint.latitude = extrapolatedLatitude;
    return extrapolatedPoint;

不确定我的功能是否正确,但您可以在此处查看: http://en.wikipedia.org/wiki/Extrapolation

真的很简单。

您应该实现线性外推。 如果您发现线性外推还不够(例如对于曲线),您应该迭代并使用其他一些外推算法对其进行更改。

另一种方法是在动画中延迟 1 秒,并使用插值在两个已知点之间制作动画。我不知道您的用例是否可以接受。

【讨论】:

【参考方案2】:

此问题通常通过称为“航位推算”的方法来解决。而且您尝试使用卡尔曼滤波器来做到这一点是正确的。如果 iKalman 不适合您,您可以尝试采用更简单的方法。

在处理游戏和网络延迟时,有很多此类问题的解决方法,因此您可以重用为此目的开发的算法。

This seems like a pretty thorough example.

The wiki on Kalman filters may help out as well.

【讨论】:

【参考方案3】:

我最终通过使用长 UIView 动画(2-3 秒)和从当前状态开始的缓动解决了这个问题。这给人一种“免费”之后的平稳位置和航向的印象。

【讨论】:

以上是关于插值和预测 CLLocationManager的主要内容,如果未能解决你的问题,请参考以下文章

R: Kriging interpolation and cross validation 克里金插值及交叉验证浅析

三次样条插值拟合函数,预测下明后天的疫情

插值查找

Python小白的数学建模课-22.插值方法

实验9 人口预测与数据拟合(最小二乘法)

Python数模笔记-StatsModels 统计回归线性回归