利用Android中的融合器实现GPS定位的卡尔曼滤波

利用Android中的融合器实现GPS定位的卡尔曼滤波,android,filter,gps,position,kalman-filter,Android,Filter,Gps,Position,Kalman Filter,我必须实施卡尔曼滤波,以提高GPS定位的精度。。。我使用随机解()。在ValidPosition中,我有一些支票,如: 公共布尔校验位置(位置){ if((位置!=null)&& (距离!=0)&& (距离>最小距离)&//10米 (location.hasSpeed())和 (location.getSpeed()>0)和 (平均时间

我必须实施卡尔曼滤波,以提高GPS定位的精度。。。我使用随机解()。在ValidPosition中,我有一些支票,如:

公共布尔校验位置(位置){
if((位置!=null)&&
(距离!=0)&&
(距离>最小距离)&//10米
(location.hasSpeed())和
(location.getSpeed()>0)和
(平均时间<人的速度)&&
(location.hasAccurance())&&
(location.getAccurance()<最小精度)&&
(isBetterLocation(location,lastLocation))//来自中的Google示例http://developer.android.com/guide/topics/location/strategies.html#BestPerformance
返回true;
}
返回false;
}
现在,在我与Location Fusion Provider的主要课程中,我有:

公共静态最终整数精度衰减时间=3;//米/秒
私有Kalmannlatlong Kalmannlatlong=新Kalmannlatlong(精度衰减时间);
private ValidPosition ValidPosition=新的ValidPosition();
@凌驾
已更改位置上的公共无效(位置){
if(有效位置。检查位置(位置)){
卡尔曼拉特隆工艺(
location.getLatitude(),
location.getLongitude(),
location.getAccurance(),
location.getTime());
mCallback.handleNewLocation(位置);
}
}`
现在呢?我如何使用卡尔曼预测?我在随机代码中写了什么

//TODO:在此处使用速度信息可以更好地估计当前位置

谢谢

您忘了从
kalmanatlong
对象返回处理结果。 您需要这样做:

if(validPosition.checkPosition(location)) {
    kalmanLatLong.process(
            location.getLatitude(),
            location.getLongitude(),
            location.getAccuracy(),
            location.getTime());

    location.setLatitude(kalmanLatLong.get_lat());
    location.setLongitude(kalmanLatLong.get_lng());
    location.setAccuracy(kalmanLatLong.get_accuracy());

    mCallback.handleNewLocation(location);
}

至于你的第二个问题,我不认为它很琐碎,应该更多地基于实验数据。线性衰减的简单假设在大多数情况下都能很好地工作。

嗨,谢谢你的回答……卡尔曼滤波是一种预测,对吧?如果我像你的代码中那样设置数据,它是预测吗?我必须用在这种情况下,我设置了一个预测,而不是实际位置(或否?:P)还有,我在TODO中对速度做了什么
if(predictedLocation.distanceTo(location)<10m)//Hadle新位置
噢,你想预测吗?对不起,我原来不明白你的问题。卡尔曼滤波器最初是一种噪声滤波器(在原始问题中称为跳跃)。它可以消除传感器噪声并平滑传感器输出。要进行预测,您需要将预测位置(如预测是一个单独的过滤器)以任意较低的精度提供给卡尔曼滤波器。您不会增加预测的准确性,但可以缩短位置更新之间的时间。您想这样做吗?或者您也可以尝试使用其他传感器数据(如加速计和指南针数据)预测位置,然后将此预测输入卡尔曼滤波器。如果操作正确,这将提高定位精度。你如何预测新位置取决于你的实际用途(汽车、机器人、人类、自行车)。例如,人类会经常旋转设备,所以罗盘数据不是很有用。我知道如果我有一个位置,卡尔曼滤波器会告诉我预测位置。。。使用Kalman filter with
if(predictedLocation.distanceTo(location)<10m)//Hadle new location
的predictedLocation,我得到了不错的结果,很幸运?GPS芯片输出的GPS位置已经经过了严重的Kalman滤波,比离开芯片后有更多的滤波输入信息。我怀疑经过任何后处理的卡尔曼滤波后,数据会变得更好。只要确保在位置或车辆静止时过滤位置。嗨,以什么方式?当getSpeed为零时,我拒绝这些位置?例如,在没有过滤器的情况下,我得到了第一个LatLng坐标,但第二个LatLng位于距离第一个坐标100米的位置,因此我猜用户不太可能在几秒钟内移动100米。。。