python - 从无组织的典型扫描模式激光雷达的点云数据生成图像

标签 python opencv ros point-cloud-library lidar

希望你们一切顺利 我有一个 LiDAR,它是 Livox Mid 70。它有这样的扫描模式。 scan_pattern ,这取决于时间并创建整个场景。

我使用 ros 从特定主题获取数据并创建 numpy 数组。

def callback(data):

    pc = rNp.numpify(data)
    points = np.zeros((pc.shape[0], 4))
    points[:,0]=pc['x']
    points[:,1]=pc['y']
    points[:,2]=pc['z']
    points[:,3]=pc['intensity']
    po = np.array(points, dtype=np.float32)

然后我创建一个 (x, y) 数组,其中包含该点云数据的 X 和 Y 坐标,并尝试像这样缩放它:

p = (arr/np.max(arr)*255).astype(np.uint8) #arr = (x, y) numpy array

但不幸的是它没有给我任何可以理解的图片

然后我尝试了ros命令:

rosrun pcl_ros convert_pointcloud_to_image input:=/livox/lidar output:=/img

但是错误消息是:

[ERROR] [1651119689.192807544]: Input point cloud is not organized, ignoring!

我在 matlab 上看到了一些技术,即 pcorganize,但是要使用它,我需要给它一些参数,例如

params = lidarParameters(sensorName,horizontalResolution) params = lidarParameters(verticalResolution,verticalFoV,horizontalResolution) params = lidarParameters(verticalBeamAngles,horizontalResolution) params = lidarParameters(___,HorizontalFoV=horizontalFoV)

但是这个激光雷达没有任何水平或垂直分辨率、光束角度 所以可能我无法使用此函数来组织此 pcl 数据。

我的问题:

  1. 如何组织这些无组织的 pcl 数据并从中创建图像?
  2. 是否可以通过 cv2.imshow() 查看此图像?

最佳答案

答案:

  1. 如果需要,将来自 LiDAR 的 PointCloud2 消息缓冲在写入节点中(最好是 Python)(仅当扫描模式需要时间来运行整个扫描时,例如整个扫描需要 2 秒)。看看 Velodyne LiDAR,他们不需要它,因为有平面扫描 LiDAR,即从运行的第一秒开始就获得完整的详细图像。正如我提到的,只有当您的 LiDAR 具有 Lissajous 扫描模式 ( https://www.nature.com/articles/s41598-017-13634-3 ) 或其他模式(需要时间来进行完整的场景扫描)时,才有必要这样做。

    情况 1: 扫描模式需要时间:自定义缓冲时间(1 秒、2 秒或 4 秒...)- 与您附加的扫描模式相比)。然后你就得到了一个完整的扫描。

    情况2:扫描模式不需要任何缓冲时间:从一开始就进行丰富详细的扫描,通常不需要缓冲

    在下一步中,您应该使用此节点: https://github.com/mjshiggins/ros-examples/blob/master/src/lidar/src/lidar_node.cpp

    该节点获取您的 pointcloud2 消息并生成鸟瞰图像。我在论文中使用了这个节点,并更改了一些内容,以便更容易理解和更好的解决方案。我可以与您共享此文件,或者如果您想自己探索此节点并且不时需要帮助,例如更改 LiDAR 位置、更改单元分辨率(将顶部 View 缩放到图像)、图像颜色等。此外,我还使用 LiDAR 的给定数据添加图像颜色 channel 的编码:强度、密度、高度(原始代码中仅高度编码)。

  2. 使用 OpenCV,您可以将此图像视为打开的窗口,或将其可视化为 RViz 中已发布的主题。

关于python - 从无组织的典型扫描模式激光雷达的点云数据生成图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72038696/

相关文章:

Python函数缓存?

python - 我应该使用 scipy.pi、numpy.pi 还是 math.pi?

qt - 为什么在处理 jpeg 图像时不能链接到 opencv 和 qt?

python - 如何从图像中提取签名(Python脚本)?

c++ - 前向声明未按预期工作

python - 如何在python中绘制密度图?

python - 使用python opencv进行图像边界检测

linux - 如何正确链接opencl和ros?

executable - devel 中未生成 ROS catkin_make 可执行文件

python - 在 Markdown 中嵌入 Bokeh 图