rplidar中的输入缓冲区中的测量太多

时间:2018-08-29 12:18:20

标签: raspberry-pi3

我在python中使用RPLidar A1。 它看起来非常完美,这是我的以下代码 它最初来自https://github.com/SkoltechRobotics/rplidar/blob/master/examples/animate.py#L1 GitHub。

#!/usr/bin/env python3
'''Animates distances and measurment quality'''
from rplidar import RPLidar
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

PORT_NAME = '/dev/ttyUSB0'
DMAX = 4000
IMIN = 0
IMAX = 50

def update_line(num, iterator, line):
    scan = next(iterator)
    offsets = np.array([(np.radians(meas[1]), meas[2]) for meas in scan])
    line.set_offsets(offsets)
    intens = np.array([meas[0] for meas in scan])
    line.set_array(intens)
    return line,

def run():
    lidar = RPLidar(PORT_NAME)
    fig = plt.figure()
    ax  = plt.subplot(111, projection='polar')
    line = ax.scatter([0, 0], [0, 0], s=5, c=[IMIN, IMAX],
                           cmap=plt.cm.Greys_r, lw=0)
    ax.set_rmax(DMAX)
    ax.grid(True)

    iterator = lidar.iter_scans()
    ani = animation.FuncAnimation(fig, update_line,
        fargs=(iterator, line), interval=50)
    plt.show()
    lidar.stop()
    lidar.disconnect()

if __name__ == '__main__':
    run()

但是有这样的问题。enter image description here

我认为这是因为缓冲。但是不知道该如何处理。如果您在这个问题上帮助我,我会很感激。 我不知道为什么会这样,请让我知道谢谢!

1 个答案:

答案 0 :(得分:0)

从RPLidar文档中:https://github.com/SkoltechRobotics/rplidar/blob/master/rplidar.py

iter_scans() [和iter_measurments()]函数的默认参数为max_buf_meas。默认值为500。您似乎太快地填充了此缓冲区。

我建议给iter_scans()调用一个缓冲区参数,该参数大于程序给您的数字,可能是800或1000。