首页 > 解决方案 > 使用 Python 绘制实时激光雷达数据导致圆形图

问题描述

我正在使用 RPLidar A1:https ://www.adafruit.com/product/4010

我的目标是收集数据集并绘制它们,以获得数据的实时可视化表示。

我目前的代码是:

import numpy as np
import matplotlib.pyplot as plt
from rplidar import RPLidar

def get_data():
    lidar = RPLidar('COM6', baudrate=115200)
    for scan in lidar.iter_scans(max_buf_meas=500):
        break
    lidar.stop()
    return scan

for i in range(1000000):
    if(i%7==0):
        x = []
        y = []
    print(i)
    current_data=get_data()
    for point in current_data:
        if point[0]==15:
            x.append(point[2]*np.sin(point[1]))
            y.append(point[2]*np.cos(point[1]))
    plt.clf()
    plt.scatter(x, y)
    plt.pause(.1)
plt.show()

上面的代码生成了一个带有变化数据的刷新图,如下所示:

RPLidar A1:实时数据图

问题是这不是一个准确的表示。SLAMTEC 有一个名为 frame_grabber 的本机应用程序,它清楚地显示了这个设备,可以准确地表示我的房间的矩形形状。相反,我不断得到一个从小到大的圆形。

来自传感器的原始数据以数组的形式出现,其中包含大约 100 组以下数据:(quality, theta, r)。我的代码检查质量是否良好(最多 15 个),然后继续绘制数据集并每七个实例清除一次数据数组以删除旧数据。

我检查了 excel 中的原始极坐标数据,数据似乎也创建了一个圆形。

标签: pythonmatplotlibreal-timesensorslidar

解决方案


经过几天尝试各种库进行绘图和尝试其他一些事情后,我注意到了这个错误。

希望这可以防止有人在将来犯同样的错误。

激光雷达通常以“theta”和“r”的形式提供数据。另一方面,numpy 以及 Python 中内置的数学库接受以弧度表示的参数来执行 cos 和 sin 运算。

我已经将单位从度转换为弧度,现在一切正常。


推荐阅读