从GPS点间距计算速度的误差

2024-04-19 04:10:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一个卡尔曼滤波器来跟踪一辆车的位置,为了我的测量,我有一个GPX文件(WGS84格式),其中包含关于纬度、经度、海拔和GPS给出的每个点的时间戳的信息。利用这些数据,我计算了GPS点之间的距离(使用测地距离和Vincenty公式),并且由于时间戳信息已知,因此可以使用点之间的时间差来计算时间增量。因为我们现在有了点之间的距离和时间增量,我们可以计算速度(=点之间的距离/时间增量),然后也可以作为Kalman的测量输入。你知道吗

然而,我读到,这只是平均速度,而不是任何给定点的瞬时速度。为了获得瞬时速度,建议必须取运行平均值,有些实现直接计算速度,考虑到当前时间与第一个初始点之间的时间差。我有点搞不清楚我需要用哪种方法在python中实现它。你知道吗

  1. 首先,我的实现中使用的这个方法计算速度是否正确?(我也读到了可以使用的多普勒频移,但遗憾的是,我只通过iPhone上运行的应用程序(Strava)收集GPS数据)

  2. 如何计算每个GPS点的瞬时速度?(轴承信息也是必要的吗?)

  3. 这个计算速度的误差是多少?(由于iPhone本身的位置误差大约为10米,距离测量误差大约为1毫米,考虑到我希望重点放在尽可能高的精度上)

当前实施情况

import gpxpy
import pandas as pd
import numpy as np
from geopy.distance import vincenty, geodesic
import matplotlib.pyplot as plt

"Import GPS Data"
with open('my_run_001.gpx') as fh:
    gpx_file = gpxpy.parse(fh)
    segment = gpx_file.tracks[0].segments[0]
    coords = pd.DataFrame([
    {'lat': p.latitude,
     'lon': p.longitude,
     'ele': p.elevation,
     } for p in segment.points])

"Compute delta between timestamps"
times = pd.Series([p.time for p in segment.points], name='time')
dt = np.diff(times.values) / np.timedelta64(1, 's')

"Find distance between points using Vincenty and Geodesic methods"
vx = []
for i in range(len(coords.lat)-1):
        if(i<=2425):
            vincenty_distance = vincenty([coords.lat[i], coords.lon[i]],[coords.lat[i+1], coords.lon[i+1]]).meters
            vx.append(vincenty_distance)
print(vx)

vy = []
for i in range(len(coords.lat)-1):
        if(i<=2425):
            geodesic_distance = geodesic([coords.lat[i], coords.lon[i]],[coords.lat[i+1], coords.lon[i+1]]).meters
            vy.append(geodesic_distance)
print(vy)

"Compute and plot velocity"
velocity = vx/dt
time = [i for i in range(len(dt))]
plt.plot(velocity,time)
plt.xlabel('time')
plt.ylabel('velocity')
plt.title('Plot of Velocity vs Time')
plt.show()

GPX数据参考: https://github.com/stevenvandorpe/testdata/blob/master/gps_coordinates/gpx/my_run_001.gpx


Tags: inimport距离fortimeas时间plt
1条回答
网友
1楼 · 发布于 2024-04-19 04:10:38

有趣的话题。你知道吗

如果您计划使用独立的GPS定位输出来计算物体的速度,请准备好应对结果的某些不确定性。我相信你知道,在整个过程中有一定的传播延迟,所以有几个信息你需要注意。你知道吗

1。 基本上,计算距离和时间,然后根据这些增量计算速度是正确的方法,但正如你所说的,这是两个gps测量值之间的平均速度,因为gps在本质上有一些传播延迟。你知道吗

2。 就像我们说过的,这种计算给出了平均速度与时间和距离的函数关系,从本质上说,我们无法改变这一点。我们所能做的就是影响gps信号的采样频率,从而提高或降低系统的实时精度。你知道吗

建议:如果你想得到更准确的实时速度数据,我建议你把手机的陀螺仪传感器和处理它的输出。从GPS上收集第一个增量(平均)速度,然后检测陀螺仪的变化,这将是继续你的想法的有趣方式。你知道吗

三。 假设你正在用你的设备行走(或超高速奔跑)。有一刻,设备正在发送GPS定位请求,但由于一些问题(可能是卫星连接不好),您得到了10秒延迟的数据响应。在本例中,让我们假设您在绝对平坦的地面上行走:)在收到上一个请求1分钟后,您正在发送另一个gps定位请求,并且您收到的数据告诉您,您已从上一次测量向北行走300米,延迟2秒。如果您从发送请求到发送另一个请求进行测量,您会得到您的速度为300/70=4.28 m/s(相当惊人的速度),但实际可能的情况是: -你没有走300米,你走了270米(gps错误) -两次测量(接收)之间的时间约为62秒 -270/62=4.84 m/s时,你的速度更快

对于电话来说,这是一个棘手的问题,你无法测量何时你真的在以太中发送了请求,或何时在毫秒中你得到了响应,而这些事情在你操作硬件接近层上的传感器时是很有可能的。因此,你肯定会失去一些准确性。你知道吗

相关问题 更多 >