根据激光雷达点云中点的坐标计算ring的值

目前velodyne系列的激光雷达已经会提供ring的值,

所谓ring的值,就是每个点是几束光发出来的。

参考这个图

根据激光雷达点云中点的坐标计算ring的值_第1张图片

那如果没有提供的话,就需要自己来算 ring的值了.

下面是一段参考代码.


        # read binary data
        scan = (np.fromfile(velo_filename, dtype=np.float32)).reshape(-1, 4)

        # get ring channel
        depth = np.linalg.norm(scan, 2, axis=1)
        pitch = np.arcsin(scan[:, 2] / depth) # arcsin(z, depth)
        fov_down = -24.8 / 180.0 * np.pi
        fov = (abs(-24.8) + abs(2.0)) / 180.0 * np.pi
        proj_y = (pitch + abs(fov_down)) / fov  # in [0.0, 1.0]
        proj_y *= 64  # in [0.0, H]
        proj_y = np.floor(proj_y)
        proj_y = np.minimum(64 - 1, proj_y)
        proj_y = np.maximum(0, proj_y).astype(np.int32)  # in [0,H-1]
        proj_y = proj_y.reshape(-1, 1)

这里面有两个超参24.8, 2.0 分别代表着光束的最下边那束光与水平线的夹角,与最上面那束光与水平线的夹角,一般都是下面的大,上面的小,因为光打到空中也没啥用。
这两个参数是kitti中的,这也是为什么kitti的激光雷达基本上都是下面的点偏多.

上面的计算也非常的容易懂,
就是先算出pitch, 然后看pitch占整个 光束张角的比例,注意这时候算的时候,pitch要加上下张角,估计是因为最下面那束光的标号是0(对于kitti而言.)

然后根据比例以及总线数,算出来大致是在哪一个光束.

你可能感兴趣的:(自动驾驶,自动驾驶)