对激光雷达点云数据进行可视化的最佳方法是什么。我正在使用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)
答案 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 msg和extensive example将数据迭代并复制到mat中同样有效)