我找到了很多描述(扩展)卡尔曼滤波器的理论和通用算法的资源,但我发现很难将其转化为移动应用程序中 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 ]
类似这样的东西是我的状态投影对吧?不确定其他人的情况。将我的输入与该库的属性连接起来时,我缺少什么?
(这不适合作为评论,所以发布为答案)
仅供参考:你想做的事情真的很难。我经常看到有关它的研究论文,大公司付给工程师很多钱来让这样的系统正常工作。由于这些类型的传感器固有的偏差,INS 输入具有挑战性。除了卡尔曼滤波器中的状态用于校正 GPS 位置之外,您还需要加速度计偏置、陀螺仪偏置和磁力计偏置的状态(如果传感器沿多个轴测量,通常每个状态有 3 个以上状态)。通常,当 INS 可用时,卡尔曼滤波器的典型动态更新步骤被 INS 的输出取代,并且卡尔曼滤波器的位置状态是 INS 估计中的误差。您也许可以使用您引用的库来实现这一点,但这将具有挑战性。
如果您确实想使用该库,那么看起来您的大部分自定义都将在
kf-options.js
中。如果您按照我在上一段中讨论的那样进行模型替换,您的测量结果将只是 GPS 测量结果。您必须考虑您正在使用哪个坐标系。听起来您想使用局部笛卡尔坐标系;您需要该坐标系的纬度/经度/高度的原点,以便将 GPS 测量值转换到该坐标系中。
我可以继续下去,但我的观点是这是一个具有挑战性的问题。我认为没有人能够以这种格式给你答案,因为答案可能是数百行代码,其中包含许多关于你想要如何做事情的输入。