如何在移动应用中实现用于 INS GPS 传感器融合的 EKF(扩展卡尔曼滤波器)?

问题描述 投票:0回答:2

我找到了很多描述(扩展)卡尔曼滤波器的理论和通用算法的资源,但我发现很难将其转化为移动应用程序中 GPS 平滑的用例,而这正是我想要做的。我什至发现了 this 库,它看起来很有前途,但我不知道如何将我的变量插入其中。

我有 GPS 的经度、纬度、海拔(不确定我是否需要)和速度。还有 INS 输入(加速度计、陀螺仪、磁力计)可供使用。

如何在库中使用所有输入?

我在世博会上有这些输入:

import {
  Accelerometer,
  Gyroscope,
  Magnetometer,
} from 'expo-sensors';

例如,我可以每 200 毫秒获取一次 x、y、z 值。我还有博览会位置,它每 1 秒提供一次纬度、经度、速度和时间戳。

所以我拥有所有这些变量,并且我想使用所有这些变量来提高 GPS 在记录外出行走的行人的路径时的性能。目的是尽可能准确地将路径绘制到地图上。

扩展卡尔曼滤波器的结果应该是改进的 GPS 纬度和经度。

我知道我可以使用这样的库启动卡尔曼滤波器,使其充当扩展卡尔曼滤波器:

  const kFilter = new KalmanFilter({
    observation: {
      dimension: x,
      stateProjection: (opts) => {
        return [];
      },
      covariance: (opts) => {
        return [];
      },
    },
    dynamic: {
      dimension: y,
      transition: (opts) => {
        return [];
      },
      covariance: (opts) => {
        return [];
      },
    },
  });

每次返回应该返回一个矩阵。我认为我应该在矩阵中使用所有给定的变量,该矩阵应该类似于

[ accelerometer x, accelerometer y, accelerometer z, gyro x, gyro y, gyro z, magnetometer x, magnetometer y, magnetometer z, latitude, longitude, speed ]

类似这样的东西是我的状态投影对吧?不确定其他人的情况。将我的输入与该库的属性连接起来时,我缺少什么?

react-native gps accelerometer kalman-filter
2个回答
0
投票

(这不适合作为评论,所以发布为答案)

仅供参考:你想做的事情真的很难。我经常看到有关它的研究论文,大公司付给工程师很多钱来让这样的系统正常工作。由于这些类型的传感器固有的偏差,INS 输入具有挑战性。除了卡尔曼滤波器中的状态用于校正 GPS 位置之外,您还需要加速度计偏置、陀螺仪偏置和磁力计偏置的状态(如果传感器沿多个轴测量,通常每个状态有 3 个以上状态)。通常,当 INS 可用时,卡尔曼滤波器的典型动态更新步骤被 INS 的输出取代,并且卡尔曼滤波器的位置状态是 INS 估计中的误差。您也许可以使用您引用的库来实现这一点,但这将具有挑战性。

如果您确实想使用该库,那么看起来您的大部分自定义都将在

kf-options.js
中。如果您按照我在上一段中讨论的那样进行模型替换,您的测量结果将只是 GPS 测量结果。您必须考虑您正在使用哪个坐标系。听起来您想使用局部笛卡尔坐标系;您需要该坐标系的纬度/经度/高度的原点,以便将 GPS 测量值转换到该坐标系中。

我可以继续下去,但我的观点是这是一个具有挑战性的问题。我认为没有人能够以这种格式给你答案,因为答案可能是数百行代码,其中包含许多关于你想要如何做事情的输入。


0
投票

我的粒子过滤器未提供模型的近似参数

@道森·比蒂 请帮忙解决这个问题。

我无法优化代码。提供了错误的参数估计。 可以做什么来优化代码。这样我就能估计出接近真实参数的参数。

© www.soinside.com 2019 - 2024. All rights reserved.