mar*_*ram 6 python numpy curve-fitting scipy
我有一条电缆正在从车辆上移到地面上。通过使用摄像头系统,我可以实时估计绳索接触地面的位置。车辆的运动和位置估计中的不准确性导致着陆位置的点云。从这一点开始,我想得出电缆在地面上最可能的路径。我想实时实现这一目标,并且希望根据新数据来更新拟合度。被添加的新点的频率约为20 Hz,而车辆的运动速度约为1 m / s。因此,点云相当密集。电缆在地面上遵循的路径是平滑的(因为电缆是硬的),并且在3D模式下(x,y,z:地面不平坦!)。
我一直在寻找3D线/样条线/曲线拟合/插值。我发现了一些有前途的方法(B样条拟合,LOWESS- >似乎可行,可用于2D,但不适用于3D)。但是,对于哪种方法适合我的情况,我找不到任何明确的解释。您会针对这种情况建议哪种拟合方法?
我正在处理的当前数据集由以下生成:
import numpy as np
tMax = 10 # s
f = 20 # hz
v = 2 # m/s
samples = tMax*f
t = np.linspace(0,tMax, samples)
div = 00.[![2][2]][2]
x=1*np.sin(t)+t+np.random.uniform(-div,div,samples)
y=1*np.cos(t)+t+np.random.uniform(-div,div,samples)
z=1*np.sin(t)*np.cos(t)+t+np.random.uniform(-div,div,samples)
Run Code Online (Sandbox Code Playgroud)
我设法在2D中使用LOWESS获得合理的结果,如下图所示,但不是3D。
我可能要补充的另一件事是数据带有时间戳。我可以想象,这可能对调整生产线是有益的。
小智 0
您可以使用 scipy UnivariateSpline。
from scipy.interpolate import UnivariateSpline
# new axis
u = np.arange(len(x))
# UnivariateSpline
s = 0.7 * len(u) # smoothing factor
spx = UnivariateSpline(u, x, s=s)
spy = UnivariateSpline(u, y, s=s)
spz = UnivariateSpline(u, z, s=s)
#
xnew = spx(u)
ynew = spy(u)
znew = spz(u)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |