opencv 从无序典型扫描模式激光雷达的点云数据生成图像

kgqe7b3p  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(284)

我希望你们做得很好,我有一个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,但要使用它,我需要给它一些参数,如
参数=激光雷达参数(传感器名称,水平分辨率)参数=激光雷达参数(垂直分辨率,垂直FoV,水平分辨率)参数=激光雷达参数(垂直光束Angular ,水平分辨率)参数=激光雷达参数(___,水平FoV =水平FoV)
但是这个激光雷达没有任何**水平或垂直分辨率,光束Angular **,所以我可能无法使用这个功能来组织这个pcl数据。

    • 我的问题:**

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

vulvrdjw

vulvrdjw1#

答案:
1.在写入节点中缓冲来自LiDAR的pointcloud2消息(最佳python),如果需要(只有当扫描模式需要时间来运行一个完整的扫描例如2s为一个完整的扫描).看看velodyne激光雷达,他们不需要它,因为有平面扫描激光雷达,即完整的详细图像从第一秒的运行.正如我提到的,它只需要,当您的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位置、更改cell_resolution(放大俯视图到你的图像),图像颜色等。我还添加了图像颜色通道的编码与给定的数据从LiDAR:强度、密度、高度(原始代码中仅高度编码)。
1.使用OpenCV,您可以将此图像视为屏幕上打开的窗口或RViz发布的主题。

相关问题