用Meshlab处理pcd点云数据(pcd转ply;Meshlab载入.ply失败,Error details:Unespected eof)

Table of Contents

1、PCD转PLY

2、MeshLab载入.ply失败,Error details:Unespected eof 

 

Meshlab不能直接读取pcd格式,因此需要转成ply格式


PCD转PLY

pcl库自带pcd转ply程序:pcl_pcd2ply

使用格式:pcl_pcd2ply demo.pcd demo.ply

数量过多,需要进行批处理的,写一个bash即可,

参考:https://github.com/UCSD-E4E/aerial_lidar/blob/master/Shell_Scripts/pcd2ply.sh

 


MeshLab载入.ply失败,Error details:Unespected eof (环境:Ubuntu16.04 )

 

用Meshlab处理pcd点云数据(pcd转ply;Meshlab载入.ply失败,Error details:Unespected eof)_第1张图片

针对形成问题的不同原因网上基本上有两种解决办法:

  • 1、 在终端用LANG=C meshlab启动meshlab

  • 2、将float数据的 "." 用 “ ,” 代替,并将前几组的数据补全(末尾添0)

    例如: initial.ply
    修改前:
    ply
    format ascii 1.0
    element vertex 22122
    property float x
    property float y
    property float z
    property uchar red
    property uchar green
    property uchar blue
    end_header
    -0.748804 0.237742 1.708790 255 0

    ======================================================================
    修改后:
    ply
    format ascii 1.0
    element vertex 22122
    property float x
    property float y
    property float z
    property uchar red
    property uchar green
    property uchar blue
    end_header
    -0,748804 0,237742 1,708790 255 0 0

如果以上两种都行不通,请继续往下看,我碰到的情况如下:

尝试1:

正常的点云数据,例如:
ply
format ascii 1.0
element vertex 22122
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
-0.748804 0.237742 1.708790 255 0

可以正常显示,说明既不是LANG=C的问题也不是"."和","的问题。

 

尝试2:

用gedit尝试打原始的pcd和ply文件,gedit会直接卡死,即使打开,也会显示character encoding错误:

用Meshlab处理pcd点云数据(pcd转ply;Meshlab载入.ply失败,Error details:Unespected eof)_第2张图片

底下的点云数据全是乱码:

用Meshlab处理pcd点云数据(pcd转ply;Meshlab载入.ply失败,Error details:Unespected eof)_第3张图片

用vim可以直接打开,点云依然乱码。

用Meshlab处理pcd点云数据(pcd转ply;Meshlab载入.ply失败,Error details:Unespected eof)_第4张图片

 

尝试3:

怀疑是自己采集的pcd点云的原因,果然用vim和gedit打开的情况和打开ply时的差不多。

下载了一个用gedit,vim打开都正常的pcd点云,用pcl_pcd2ply转成ply,果然完美导入meshlab。

 

FINAL:

我的pcd是从保存的bag,用bag_to_pcd生成的。考虑换一种生成方式,pcl_ros下除了bag_to_pcd还有另一种生成pcd的方法pointcloud_to_pcd,使用方式:

rosbag play final.bag /cloud:=/input
rosrun pcl_ros pointcloud_to_pcd

生成的pcd一切正常,转成ply之后可以导入meshlab。

你可能感兴趣的:(问题结局,问题记录,问题解决)