position - 使用卡尔曼滤波器估计位置
问题描述
我尝试使用卡尔曼滤波器来估计位置。系统中的输入是速度,这也是我测量的。速度是不稳定的,系统运动一般像余弦。所以方程是:
xnew = Ax + Bu + w
,其中:
x= [x y]' A = [1 0; 0 1] B= [dt 0; 0 dt] u=[ux uy] w noise
正如我所提到的,我测量的是速度。我的问题是矩阵 C 在方程中的样子:
y = Cx + v
我应该在估计状态(矩阵A)中涉及速度吗?或者我应该改变方程以包括加速度?我无法测量加速度。
解决方案
一种方法是将速度作为输入丢弃并将它们置于您的状态。这样,您的状态既是位置又是速度,并且您的过滤器将测量的车辆速度和对您位置的嘈杂估计用作观察。
有了这个系统,你的问题就变成了:
x = [x_e y_e vx_e vy_e]'
A = [1 0 dt 0; 0 1 0 dt; 0 0 1 0; 0 0 0 1]
w noise
x_e、y_e、vx_e 和 vy_e 是状态的估计值
B 被删除,因为 u 是 0。然后你有
y = Cx + v
with C = [1 0 0 0 ; 0 1 0 0 ; 0 0 1 0 ; 0 0 0 1]
其中和y = [x + dt*vx ; y + dt*vy ; vx ; vy]
x、y、vx 和 vy 是速度的测量值,而 x 和 y 是使用测量速度计算的位置。
它与您将在 Wikipedia 上找到的示例非常相似
推荐阅读
- python - 尝试使用 python、pypeteer 进行 websrap
- c# - 如何将 lambda 语法转换为常规语法?
- ios - PWA 未在 iOS 主屏幕上更新
- flutter - 从 firebase 获取数据以列出 Flutter 中的使用模型
- intellij-idea - 如何在 IntelliJ IDEA 中关闭 XML 代码完成?
- java - 如何在多个数组中找到最大值并返回java中第一个索引的值?
- flutter - 如何将函数中的参数用于带有 Dio 包的 http 请求正文
- julia - 如何在构建包时检查哪个依赖项出错?
- node.js - 为什么我的客户端没有从我的套接字连接接收数据?
- c# - 降级版本后,masstransit 和 masstransit.autofac 库中的异常