【RPLIDAR A1使用教程:从开箱到实时点云可视化】
【RPLIDAR A1使用教程:从开箱到实时点云可视化】
📖 写在前面
RPLIDAR A1 是思岚科技推出的低成本360度激光扫描测距雷达,广泛应用于机器人SLAM建图、避障导航、教学实验等领域。它通过UART串口与外部系统通信,配合USB适配器可以方便地连接PC进行数据采集与可视化。
参考博客:
【RPLIDAR A1使用教程:从开箱到实时点云可视化】
【基于单线激光雷达 RPLidar 的 DWA 避碰实践(Python 全流程 + 公式推导)】
硬件购买:
思岚激光雷达RPLIDAR A1 C1 SLAMTEC正品DTOF测距导航赠送ROS资料

【下单链接】https://s.click.taobao.com/A3MInMj
本文将从硬件连接开始,一步步带你完成RPLIDAR A1的驱动安装、环境配置、数据读取和实时极坐标绘图,最终实现如下的扫描效果:

本文适合人群:机器人爱好者、ROS初学者、嵌入式开发者、需要快速验证雷达功能的工程师。
开发环境:Windows 10/11 + Python 3.8+ + RPLIDAR A1
一、硬件准备
1.1 开箱清单
购买RPLIDAR A1开发套件时,包装内通常包含以下组件:
| 组件 | 说明 |
|---|---|
| RPLIDAR A1M8 雷达本体 | 核心测距模块,内含激光发射/接收单元和旋转电机 |
| 7-pin 连接线 | 用于连接雷达本体与USB适配器 |
| USB适配器 | 将雷达的UART串口转换为USB接口,同时为电机供电 |
| Micro USB线 | 连接适配器与PC |
1.2 接口定义
RPLIDAR A1M8 本体提供 7-pin 1.25mm 间距 接口:
| 引脚 | 信号名 | 类型 | 描述 |
|---|---|---|---|
| PIN 1 | GND | 供电 | 核心地线 |
| PIN 2 | RX | 输入 | 测距核心串口输入(5V TTL) |
| PIN 3 | TX | 输出 | 测距核心串口输出(5V TTL) |
| PIN 4 | VCC_5 | 供电 | 测距核心供电(5V) |
| PIN 5 | GND | 供电 | 电机地线 |
| PIN 6 | MOTOCTL | 输入 | 电机使能/PWM控制信号(高电平有效) |
| PIN 7 | VMOTO | 供电 | 扫描电机供电(5V~9V) |
注意:A1M8的RX输入信号为电流控制型,实际控制节点电压不能低于1.6V。
1.3 硬件连接步骤
方式一:使用官方USB适配器(推荐)
- 将7-pin连接线一端插入雷达本体,另一端插入USB适配器
- 用Micro USB线将适配器连接到PC
- 连接成功后,适配器上的LED指示灯会亮起
方式二:自制TTL转接板
如果你手头没有官方适配器,也可以使用CP2102或CH340模块自行搭建:
- 将雷达的TX接转接板RX,RX接转接板TX
- GND对GND,VCC_5和VMOTO都接5V
- MOTOCTL接5V(使能电机)或接MCU的PWM引脚(调速)
提示:USB适配器的MOTOCTL信号固定为高电平,因此A1使用官方适配器时电机始终以最高转速运转。

二、驱动安装(Windows)
2.1 确认设备是否被识别
连接雷达后,打开 设备管理器 → 端口 (COM 和 LPT) ,查看是否出现新的COM端口。正常情况下应看到类似 Silicon Labs CP210x USB to UART Bridge (COMx) 的设备。
如果出现黄色感叹号,说明驱动未正确安装。
2.2 安装CP210x驱动
http://www.silabs.com/products/interface/usb-bridges/Pages/usb-bridges.aspx
在RPLIDAR SDK的 tools\cp2102_driver 目录下可以找到驱动压缩文件,解压后根据操作系统选择安装程序:
- 64位系统:运行
CP210xVCPInstaller_x64.exe - 32位系统:运行
CP210xVCPInstaller_x86.exe
2.3 确认端口号
驱动安装成功后,设备管理器中会显示一个COM端口号(如COM3、COM23等)。记下这个端口号,后续代码中会用到。

采用官方的配置软件读取数据
下载地址:https://github.com/Slamtec/rplidar_sdk/releases

打开串口显示当前围栏障碍数据

三、Python环境配置
3.1 安装必要库
推荐使用 adafruit-circuitpython-rplidar 库,它在Windows上无需额外处理DTR引脚,可以开箱即用。
pip install adafruit-circuitpython-rplidar -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyserial numpy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
说明:
adafruit-circuitpython-rplidar支持在标准Python(CPython)环境中运行,不限于CircuitPython硬件。
3.2 快速验证:读取设备信息
在正式绘图之前,先用以下代码快速验证雷达是否正常工作:
from adafruit_rplidar import RPLidar
PORT_NAME = 'COM23' # 请改为你的端口号
lidar = RPLidar(None, PORT_NAME, baudrate=115200, timeout=3)
# 读取一圈扫描数据
for scan in lidar.iter_scans():
print(f"本圈共 {len(scan)} 个点")
for quality, angle, distance in scan[:5]: # 只打印前5个点
print(f" 角度: {angle:.2f}°, 距离: {distance:.0f}mm, 质量: {quality}")
break
lidar.stop()
lidar.disconnect()
预期输出:
本圈共 168 个点
角度: 63.41°, 距离: 766mm, 质量: 15
角度: 64.75°, 距离: 796mm, 质量: 15
角度: 66.12°, 距离: 832mm, 质量: 15
角度: 67.31°, 距离: 868mm, 质量: 15
角度: 68.64°, 距离: 912mm, 质量: 15
如果能看到类似输出,说明雷达通信正常,可以进入可视化阶段。
3.3 iter_scans() 参数说明
iter_scans() 返回一个生成器,每次产生一圈完整的扫描数据。每个数据点是一个三元组 (quality, angle, distance):
- quality:信号质量(0~255)
- angle:角度(单位:度,0~360°)
- distance:距离(单位:毫米)
常用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
max_buf_meas | 500 | 缓冲区最大测量点数,超过时会丢弃数据 |
min_len | 5 | 一圈最少包含的点数,低于此值不输出 |
提示:如果运行时报
too many measurements in the input buffer错误,说明缓冲区溢出,可以尝试设置max_buf_meas=200或减小min_len。
四、实时极坐标可视化
以下代码使用 matplotlib 的极坐标投影,实时绘制RPLIDAR A1的扫描点云:
# -*- coding: utf-8 -*-
import time
import threading
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from adafruit_rplidar import RPLidar
# ========== 配置参数 ==========
PORT_NAME = 'COM23' # 请改为你的端口号
BAUDRATE = 115200
MAX_RANGE_MM = 12000 # A1最大量程约12米
# =============================
# 全局数据锁和存储
scan_data = [(0, 0)] # (角度, 距离mm)
data_lock = threading.Lock()
# 初始化雷达
lidar = RPLidar(None, PORT_NAME, baudrate=BAUDRATE, timeout=3)
print("[INFO] 雷达已连接")
print("[INFO] 设备信息:", lidar.get_info())
print("[INFO] 健康状态:", lidar.get_health())
# 后台线程:持续读取扫描数据
def read_lidar():
global scan_data
try:
for scan in lidar.iter_scans(max_buf_meas=200):
with data_lock:
scan_data = [(angle, dist) for _, angle, dist in scan if dist > 0]
except Exception as e:
print(f"[ERROR] 读取线程异常: {e}")
thread = threading.Thread(target=read_lidar, daemon=True)
thread.start()
# 前台:Matplotlib 极坐标实时绘图
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='polar')
ax.set_theta_zero_location('N') # 0度朝上
ax.set_theta_direction(-1) # 顺时针方向
ax.set_rmax(MAX_RANGE_MM)
ax.grid(True, alpha=0.4)
ax.set_title("RPLIDAR A1 扫描 - 等待数据 ...")
scatter = ax.scatter([], [], s=5, c='r', alpha=0.7)
def update(_frame):
with data_lock:
current_data = list(scan_data)
if not current_data:
return scatter,
# 角度转弧度:matplotlib极坐标使用弧度
angles_rad = np.radians([pt[0] for pt in current_data])
dists_mm = [pt[1] for pt in current_data]
scatter.set_offsets(np.column_stack([angles_rad, dists_mm]))
ax.set_title(f"RPLIDAR A1 - {len(current_data)} 个点")
return scatter,
ani = FuncAnimation(fig, update, interval=100, blit=False, cache_frame_data=False)
try:
plt.show()
finally:
print("[INFO] 正在停止...")
lidar.stop()
lidar.disconnect()
print("[INFO] 已断开连接")
运行效果
运行后应看到:
- 雷达电机持续旋转
- 极坐标图上实时刷新红色扫描点
- 标题显示当前圈的点数(A1典型值200~400点)

五、进阶优化
5.1 使用Express模式提升采样率
标准SCAN模式下,A1的采样率约为2000点/秒。如果使用Express压缩模式,采样率可以提升到4000点/秒:
for scan in lidar.iter_scans(scan_type='express', min_len=100, max_buf_meas=False):
# 处理扫描数据...
5.2 提高电机转速
A1的扫描频率与电机转速直接相关,可以通过设置电机PWM来提升转速:
import rplidar
lidar.motor_speed = rplidar.MAX_MOTOR_PWM
注意:此方式仅适用于未使用官方USB适配器的场景(适配器将MOTOCTL固定为高电平)。
5.3 数据持久化
如果需要保存扫描数据用于离线分析,可以将点云导出为CSV:
import csv
with open('scan_data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['angle_deg', 'distance_mm'])
with data_lock:
for angle, dist in scan_data:
writer.writerow([f'{angle:.2f}', dist])
六、常见问题与解决方案
Q1:设备管理器中看不到COM端口
原因:驱动未正确安装。
解决:参考第二章重新安装CP210x驱动,或使用Zadig工具替换驱动。
Q2:能打开串口但读不到数据
排查步骤:
- 检查波特率是否为115200(A1M8的标准波特率)
- 确认没有其他程序(串口助手、ROS节点等)占用同一COM口
- 检查7-pin连接线是否接触良好,可以拔插一次
- 检查供电是否充足,A1需要5V/1.5A以上的供电
Q3:报错 too many measurements in the input buffer
原因:数据读取速度跟不上雷达输出速度,缓冲区溢出。
解决:减小 max_buf_meas 参数,或在 iter_scans() 中设置 max_buf_meas=200。
Q4:点云图只显示一小部分点或呈圆形
原因:可能混淆了角度单位和弧度单位。
解决:matplotlib的极坐标投影使用弧度,而RPLIDAR返回的角度是度,必须用 np.radians() 转换。
Q5:串口被占用
原因:Windows下同一串口不能被两个程序同时打开。
解决:关闭所有可能占用COM口的程序(串口助手、其他Python脚本、ROS节点等),然后重新运行。
Q6:A1每次上电后点云质量不稳定
排查方向:
- 检查供电电压是否稳定(5.2V~9V之间)
- 避免数据线过长导致信号衰减
- 在
iter_scans()中增加min_len参数过滤不完整扫描
七、总结
本文从硬件连接、驱动安装、环境配置到实时可视化,完整覆盖了RPLIDAR A1的上手流程。核心要点:
- 驱动是第一步:CP210x驱动安装失败是Windows用户最常见的卡点,推荐使用Zadig工具
- Adafruit库开箱即用:无需手动处理DTR引脚,
iter_scans()一行代码获取扫描数据 - 极坐标可视化:matplotlib的polar投影是展示激光雷达数据的最佳方式
- 角度单位要注意:RPLIDAR返回度,matplotlib需要弧度
如果本文对你有帮助,欢迎点赞收藏。下一篇文章将介绍如何将RPLIDAR A1数据接入ROS进行SLAM建图,敬请期待。
参考链接:
- RPLIDAR A1官方SDK:https://github.com/Slamtec/rplidar_sdk
- Adafruit RPLIDAR库文档:https://docs.circuitpython.org/projects/rplidar/en/stable/
- 思岚官方Wiki:https://wiki.slamtec.com
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)