【问题标题】:Is there a way to extrapolate a distance reading from a PointCloud data stream?有没有办法从 PointCloud 数据流推断距离读数?
【发布时间】:2021-10-13 19:48:02
【问题描述】:

我目前正在使用 Livox Avia LiDAR,并且正在使用 ROS 访问其 PointCloud2 格式的数据流。 激光雷达主要用于测量视轴中的物体到激光雷达的距离。

有人知道如何读取 PointCloud2 的距离吗?

提前致谢

【问题讨论】:

    标签: ros point-cloud-library point-clouds lidar


    【解决方案1】:

    您需要更具体地说明“读取距离”的含义,因为在谈论 PC2 数据时可能会用到多个距离。我假设您正在谈论从传感器到单个测量点的距离。如果是这种情况,您可以使用以下方法从点云数据中提取更多可用信息 生成器函数read_points() 得到(x, y, z) 然后直接计算距离。您可以像这样抓取 x、y、z 格式的所有点:

    from sensor_msgs import point_cloud2
    def pc2_callback(msg):
        generator = point_cloud2.read_points(msg, skip_nans=True, field_names=("x", "y", "z"))
    

    【讨论】:

    • 感谢@BTables 的帮助。这有点奇怪,但如果我的 LiDAR 瞄准线中有一个物体,那么选择有用点的最佳方法是什么。平均而言,在去除空值(不是 NaN,而是 0)之后,我从原来的 24,000 分中得到了大约 11,000 分。
    • 这真的取决于你在这种情况下有用的意思。如果您正在寻找与一个或多个特定对象相关的点,那么真的没有理由从点云中去除 0 值;但是,您应该进行地平面剥离。您可以通过 k-means 聚类等方法通过对点进行分组来查找对象。将对象作为 3D 边界框几乎总是比作为 PC2 数据更好。
    • 再次感谢。我想我已经成功了。
    • 对于那些感兴趣的人,如果您只对一个对象的点云数据感兴趣,您可以忽略某些点来创建本质上是一个搜索隧道。根据经验,我可以说这是一种享受,尽管为我的 if 语句找到正确的值需要反复试验。
    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2017-11-13
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多