Alexbeast-CN / 3d-surface-planner

0 stars 0 forks source link

点云转表面网格 #4

Closed Alexbeast-CN closed 6 months ago

Alexbeast-CN commented 6 months ago

实现从PCL 点云数据结构转换为三维表面网格

Alexbeast-CN commented 6 months ago

[测试]

尝试了使用 open3d 中的 PoissonRecon 算法将点云转为 .obj 格式的网格,代码如下

import open3d as o3d

# Load the .pcd file
pcd = o3d.io.read_point_cloud("chuancang_model.pcd")

# Create a mesh from the point cloud
mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=9)

# Save the mesh as a .obj file
o3d.io.write_triangle_mesh("chuancang_model.obj", mesh)

点云可视化如下:

image

导出的 .obj 文件可视化如下:

image

[分析]

由于建图时扫描出来的点云是非常稀疏的,所以很多地方会把误认为是洞。

Alexbeast-CN commented 6 months ago

[Research]

点云转网格是一个比较热门的研究,随便搜了一下,就找到了 Point2Mesh: A Self-Prior for Deformable Meshes

lizard2

然后通过 Connected Paper 找到了该领域的论文 关系图

image

Alexbeast-CN commented 6 months ago

[测试]

Point2Mesh: A Self-Prior for Deformable Meshes 将点云转网格。

Point2Mesh 有些年头了,所以之前作者给出的环境现在不能用了。以下是我配置环境的过程,我的 GPU 是 RTX 3070 Ti Laptop, cuda 是 12.3

  1. 创建一个 python 3.9 的环境

    conda create -n pytorch3d python=3.9
  2. 安装最新的 pytorch

    pip3 install torch torchvision torchaudio
  3. 编译 pytorch3d

    git clone https://github.com/facebookresearch/pytorch3d.git
    cd pytorch3d && pip install -e .

需要修改代码以适应最新版的 pytorch 以及 pytorch3d。

这里我是参考了这个 github issue

我的 GPU 只有 8g 显存,跑了作者给的例子 bash ./scripts/examples/giraffe.sh,大概在第 1000 次迭代的时候,我显存就满了。

Alexbeast-CN commented 6 months ago

上面的方法从原理上就不适合我们的场景,因为它默认了物体是从外表面扫描的,但我们的场景是扫描的内部表面。

Alexbeast-CN commented 6 months ago

经过一段时间的论文阅读以及代码测试后发现,点云转网格是一件非常困难的事情,现有的方法对于我们的场景式点云不合适。且从 2020 年之后,大多数研究员选择使用深度学习来实现点云到三角网格的转换。这对于目前我们的计算资源来说并不友好。

但,其实有很多研究直接在 SLAM 阶段就可以构建三角网格,且效果比建完点云地图后再转格式要好,比如:Voxblox, ImMesh

与 SLAM 组沟通后,决定将这一步骤交给 SLAM 来做。规划则默认可以直接得到三角网格。

Alexbeast-CN commented 6 months ago

[测试]

使用 ImMesh 导出的张家港船舱点云转网格效果。

image

image

[分析]

总体看起来看还不错,但丢失了一些细节,比如吊耳。也有一些噪音。边不是非常明显。

Alexbeast-CN commented 6 months ago

尝试了使用 quadwild 将上面的三角网格转四边形网格,非常的慢,目前来说 3 个小时还没转完。

主要原因是 quadwild 只用了一个线程,所以以后如果真的要使用,最好还是把它换成多线程的。

image

Alexbeast-CN commented 6 months ago

image

直出的效果不佳,最好还是对模型进行预处理。

Alexbeast-CN commented 5 months ago

Screenshot from 2024-04-01 10-29-24

生成出的三角网格与四边形网格的对比。四边形网格要更加均匀。