首页 > 其他分享 >ROS_open3d—点云叠帧可视化

ROS_open3d—点云叠帧可视化

时间:2022-09-23 17:22:52浏览次数:45  
标签:20 point 点云叠 vis open3d cloud ROS o3d pcd

点云可视化

 pip3 install open3d-python

定位和pose

 连续多帧显示点云,需要 点云文件 和 定位信息(IMU惯导信息)
   时间对齐
   空间对齐
    时间对齐:就是说我们哪一个时间下录制的pcd要和对应时间下旋转矩阵相乘(用的只是他们的差值小于0.01,就认为是匹配的)
    空间对齐:1.看看静态物体(比如杆子)有没有对齐   
              2.看看地面有没有变厚
  细节:
     pcd
	 pose: 自车转世界坐标系 的4×4的矩阵

参考的转换方式

验证转换的情况的方式
  01.根据提供的自车坐标系的pcd和pose 转到世界坐标系pcd
  02.根据世界坐标系的pcd可视化
  
验证转换的情况的方式
  01.根据提供的自车坐标系的pcd和pose 转到世界坐标系pcd
  02.世界坐标系的pcd根据某一帧的pose进行转换
  03.可视化转换后的pcd

可视化代码

#!/usr/bin/python3
# -*- coding: utf-8 -*- 

import os
import open3d as o3d
import numpy as np
 
def vis_pcds(pcd_files):
    pcds = []
    pcds_p = []
    files = os.listdir(pcd_files)
    for f in files:
        pcd_path = os.path.join(pcd_files,f)
        pcds_p.append(pcd_path)
        pcd = o3d.io.read_point_cloud(pcd_path)
        # 降采样
        pcd_dow = pcd.voxel_down_sample(voxel_size=0.2)
        pcds.append(pcd_dow)
 
    for i,pcd_element  in enumerate(pcds_p):
        if i == 0:
            pcd_base = o3d.io.read_point_cloud(pcd_element)
            o3d.io.write_point_cloud("pcd_20_20.pcd",pcd_base)
        else:
            pcd_base = o3d.io.read_point_cloud("pcd_20_20.pcd")
            pcd_mid = pcd_base + o3d.io.read_point_cloud(pcd_element)
            o3d.io.write_point_cloud("pcd_20_20.pcd",pcd_mid)
    pcd_last = o3d.io.read_point_cloud("pcd_20_20.pcd")
	o3d.visualization.draw_geometries([pcd_last], window_name="拼接20个点云",
                                              width=1024, height=768,
                                              left=50, top=50,
                                              mesh_show_back_face=False)

 
if __name__ == '__main__':
    exp_pcd_file=r""
    vis_pcds(exp_pcd_file)

代码说明

 # 以下代码实现了与以下相同的效果:
 # o3d.visualization.draw_geometries([pcd])    geometry_list (List[open3d.geometry.Geometry]) – 待显示的pcd点云格式列表
 
 def custom_draw_geometry(pcd):
     vis = o3d.visualization.Visualizer()
     vis.create_window()
     vis.add_geometry(pcd)
     vis.run()
     vis.destroy_window()
	 
# 创建一个PointCloud对象 pcd = o3d.geometry.PointCloud()	 

参考

 Python: 用open3D库,连续多帧显示点云  https://blog.csdn.net/melally/article/details/126116894
 http://www.open3d.org/docs/release/

标签:20,point,点云叠,vis,open3d,cloud,ROS,o3d,pcd
From: https://www.cnblogs.com/ytwang/p/16723459.html

相关文章