用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 )
针对形成问题的不同原因网上基本上有两种解决办法:
-
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错误:
底下的点云数据全是乱码:
用vim可以直接打开,点云依然乱码。
尝试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。