首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pykalman预测动态对象上的进一步步骤

使用pykalman预测动态对象上的进一步步骤
EN

Stack Overflow用户
提问于 2020-12-24 08:15:01
回答 1查看 132关注 0票数 0

我正在尝试使用卡尔曼滤波器来预测下一个物体的位置。我的数据是由纬度和经度组成的,每1秒,所以我也可以得到速度。

下面的代码显示了pykalman包的一次尝试,以预测进一步的位置。我刚刚通过添加前三个经度/纬度值修改了测量值。transition_matrices和observation_matrices是否正确?我不知道该如何设置它们。

代码语言:javascript
运行
复制
#!pip install pykalman
from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[41.4043467,  2.1765616], [41.4043839,  2.1766097], [41.4044208,  2.1766576]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

结果如下所示,远离正确的输出。

代码语言:javascript
运行
复制
smoothed_state_means
array([[-1.65091776, 23.94730577],
       [23.15197525, 21.2257123 ],
       [43.96359962, 21.9785667 ]])

我该如何解决这个问题呢?我错过了什么?

使用经度/经度时,路径具有此形状

已更新

我尝试过以下转换方法:

1.

代码语言:javascript
运行
复制
R = 6378388.0 # m
rlat1_225 = math.radians(lat_225['message_basicContainer_reference_position_latitude'].values[i-1]/10000000)
rlon1_225 = math.radians(lon_225['message_basicContainer_reference_position_longitude'].values[i-1]/10000000)
       
dx = R * math.cos(rlat1_225) * math.cos(rlon1_225)
dy = R * math.cos(rlat1_225) * math.sin(rlon1_225)
pos_x = abs(dx*1000)
pos_y= abs(dy*1000)

2.

代码语言:javascript
运行
复制
altitude=0
arc= 2.0*np.pi*(R+altitude)/360.0 #
latitude=lat_225['message_basicContainer_reference_position_latitude']/10000000
longitude=lon_225['message_basicContainer_reference_position_longitude']/10000000
dx = arc * np.cos(latitude*np.pi/180.0) * np.hstack((0.0, np.diff(longitude))) # in m
dy = arc * np.hstack((0.0, np.diff(latitude))) # in m

然而,在应用EKF之后,第一种方法似乎是正确的形状(我遵循了Michel Van Biezen的解释,我可以让跟踪飞机在python中工作)。

因此,我遵循使用EKF的第一种方法预测:

然而,当我重叠预测路径和原始路径时,我得到了这个图

然后,使用第二种方法进行预测,结果是

第一种方法似乎是正确的,或者还有其他方法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-02 05:25:49

您需要在本地笛卡尔坐标系统中转换经纬度位置。您可以在第一个接收到的位置内设置原点。关于这个系统,你可以估计相对位置和速度。

转换矩阵取决于您选择的状态,例如,对于两个状态,在该轴上的x位置和v速度: x_k+1 = x_k + v_k * dT和v_k+1 = v_k。即:

代码语言:javascript
运行
复制
transition_matrices = [[1, dT], [0, 1]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65432475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档