可视化激光雷达点云数据

时间:2020-07-19 11:08:47

标签: ros point-cloud-library lidar

对激光雷达点云数据进行可视化的最佳方法是什么。我正在使用cv_bridge来获取图像数据。

def __init__(self):

    self.bridge = CvBridge()

    self.depth_sub = message_filters.Subscriber("/os1_cloud_node/points", PointCloud2)
    self.image_sub = message_filters.Subscriber("/pylon_camera_node/image_rect_color", Image)
    ts = message_filters.ApproximateTimeSynchronizer([self.image_sub, self.depth_sub], 10, 1)
    ts.registerCallback(self.callback)
    

def callback(self, color, depth):
    pass # TODO

编辑[来自下面的评论]:
抱歉,我已使用rviz可视化主题本身。 有没有一种方法可以使用opencv,pcl等提取点并进行重播。

pc = ros_numpy.numpify(depth)
height = pc.shape[0]
width = pc.shape[1] 
np_points = np.zeros((height * width, 3), dtype=np.float32)
np_points[:, 0] = np.resize(pc['x'], height * width)
np_points[:, 1] = np.resize(pc['y'], height * width)
np_points[:, 2] = np.resize(pc['z'], height * width) 

1 个答案:

答案 0 :(得分:0)

在RViz中,将可视化订阅添加到Pointcloud所在的主题,然后它将自动进行帧转换。您可以保存配置文件,也可以调用rviz from the launch file

<launch>
  <node type="rviz" name="rviz" pkg="rviz" args="-d $(find package_name)/rviz/config_file.rviz" />
</launch>

编辑:

这仍然是用ros可视化激光雷达数据的最佳方法。如果要查看数据的子集,可以在节点中对其进行过滤(pointcloud2 msg与PCL pointcloud!具有相同的类型!(请参阅文档)),然后将其发布为新主题。

如果要使用OpenCV进行可视化,则可以使用highgui模块,假设您的数据是灰度或rgb矩阵。如果要使用PCL,他们的many tutorials模块上有Visualization

从SO:此示例显示了防呆的最小示例from opencv mat to ros pointcloud(相反,使用ros_numpy to convert pointcloud msgextensive example将数据迭代并复制到mat中同样有效)