如何将两个时间参数化路径插入到单个时间向量上。原始时间参数向量可能无法在类似点

时间:2016-08-04 22:49:12

标签: python vector interpolation ros

我在ROS(机器人操作系统)内的python中工作。

我在空间中有两条路径,如x和y坐标列表,每对坐标都有一个时间值。

像(x,y,t)的3元组

路径一(ground_truth)在非常密集的时间内以相当规则的间距定义。 路径二(amcl_pose)可以是稀疏的或密集的,具体取决于您在路径上的位置,但总体上定义的点数少于ground_truth。

地面实况的时间向量称为ground_truth_time amcl_pose的时间向量称为amcl_pose_time 和x向量和y向量的相似名称:

到目前为止我尝试过的是:

from scipy.interpolate import griddata;`enter code here`
import numpy as np

method = ['nearest','linear','cubic']
time = np.linspace(0,tf,1000)
gt_x = griddata(ground_truth_time,ground_truth_x,time,method=method[1])
gt_y = griddata(ground_truth_time,ground_truth_y,time,method=method[1])
amcl_x = griddata(amcl_pose_time,amcl_pose_x,time,method=method[1])
amcl_y = griddata(amcl_pose_time,amcl_pose_y,time,method=method[1])

然后我想计算每个时间点的路径之间的距离。这真的很容易,但发生了奇怪的事情。

我发现通过在彼此的顶部绘制路径的切片,曲线的起点不会彼此叠加,也不会结束,并且在整个路径中的重要特征也不应该彼此靠近

这使得我的距离函数需要一个时间值,并且发现当时路径之间的距离返回的数字远大于它应该的数量。

这是今年夏天取得有用成果的主要障碍,所以任何帮助都会受到极大的赞赏。

另外请告诉我,如果我有任何方式可以重新格式化我的问题或我应该提供的额外信息来帮助我,这是我第一次在这里提问。

编辑表示第二次尝试实施建议: *我应该指出,gt_t和amcl_t都是从时间= 0开始,几乎在同一时间结束:大约100秒。但是amcl_t可能会在整个矢量中从稀疏变为密集,而不是等间隔。

from scipy.interpolate import interp1d
import numpy as np
from matplotlib import pyplot as plt

#gt_t is an array of time corresponding to the list of points (gt_x,gt_y)
#amcl_t is an array of time corresponding to the list of points(amcl_x,amcl_y)

amcl_x_function = interp1d(amcl_t,amcl_x,kind='linear')
amcl_y_function = interp1d(amcl_t,amcl_y,kind='linear')

amcl_x_interped = amcl_x_function(gt_t)
amcl_y_interped = amcl_y_function(gt_t)

fig = plt.figure()
plt.plot(amcl_x_interped,amcl_y_interped)
plt.plot(gt_x,gt_y)
plt.show()

#this pair of coords are close together which is good 
#since the two paths are always pretty close
print(amcl_x[0],amcl_y[0])
print(gt_x[0],gt_y[0]

#this pair is already so distant from eachother
#and I don't understand why as the two curves are always very close
#before interpolation
print(amcl_x[150],amcl_y[150])
print(gt_x[150],gt_y[150]

此代码生成的图表创建了两条始终非常接近彼此的路径。但是如果你看一下特定时间点之间的距离你会找到一个很大的距离,那么时间值就远远不是你。因为其中一个点回到了路径的早期部分,而第二个点则更远。它们应该在同一点附近,但插值不正常。

0 个答案:

没有答案