如何通过三维点云拟合直线?

2024-04-25 14:20:58 发布

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

我把车开到地上时掉了一根电缆。我用一个摄像系统实时估计绳子接触地面的位置。车辆的移动和位置估计的不准确导致着陆位置的点云。从这一点云,我想知道最有可能的路径电缆躺在地上。我想实时实现这一点,我希望fit能根据新的数据进行更新。添加新点的频率约为20hz,而车辆的移动速度约为1m/s,因此点云相当密集。电缆在地面上的路径是平滑的(因为电缆是硬的),并且是三维的(x,y,z:地面不是平坦的!)。在

我一直在寻找三维直线/样条曲线/曲线拟合/插值。我发现了一些有前途的方法(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)

enter image description here

我设法用LOWESS在2D中获得合理的结果,如下图所示,但不是3D

enter image description here

另一件事我可能要补充的是,数据是有时间戳的。我可以想象这可能是有益的拟合线。在


Tags: 数据方法路径divnprandomuniform样条