使用MATLAB进行雷达数据采集可视化
本文使用轮趣科技N10雷达,需要源码可在后台私信或者资源自取
1. 项目概述
本项目旨在通过 MATLAB 读取 N10 激光雷达 的数据,并进行 实时 3D 点云可视化。数据通过 串口 传输,并经过解析后转换为 三维坐标点,最终使用 pcplayer
进行动态渲染。该系统可用于 环境感知、机器人导航、避障系统 等场景。
2. 代码结构
本程序主要由以下几个部分组成:
- 串口初始化:设定串口参数并建立通信连接;
- 数据读取:实时读取雷达数据并进行数据解析;
- 极坐标转换:将雷达极坐标数据转换为笛卡尔坐标;
- 数据存储与更新:管理点云数据,防止无限增长;
- 可视化:使用
pcplayer
进行 3D 点云实时绘制; - 异常处理:在数据异常或串口失效时,进行错误恢复和重新连接。
3. 代码详细说明
3.1 串口初始化
port = "COM21"; % 设定串口号
baudrate = 230400; % 波特率
timeout = 5; % 超时设定
serialObj = serialport(port, baudrate, "Timeout", timeout);
configureTerminator(serialObj, "LF");
port
: 设定实际连接的串口号,需要根据设备调整;baudrate
: N10 激光雷达推荐使用 230400 bps 以保证数据稳定传输;timeout
: 设置串口通信超时时间,避免长时间阻塞。
3.2 点云可视化
xlimits = [-0.5, 0.5];
ylimits = [-0.5, 0.5];
zlimits = [0, 1];
lidarViewer = pcplayer(xlimits, ylimits, zlimits);
xlabel(lidarViewer.Axes, 'X (m)');
ylabel(lidarViewer.Axes, 'Y (m)');
zlabel(lidarViewer.Axes, 'Z (m)');
pcplayer
用于创建 3D 点云可视化窗口,并设定坐标轴范围。colormap
设定点云颜色,区分 未标记点、地面、主车、障碍物。
3.3 数据读取与解析
根据自己选购的雷达进行修改即刻
3.4 极坐标转换
angles = linspace(start_angle, end_angle, length(distances));
distances = double(distances) / 1000; % mm 转换为 m
X = distances .* cosd(angles);
Y = distances .* sind(angles);
Z = zeros(size(X)); % N10 雷达无高度信息,Z 设为0
雷达数据为 极坐标(角度+距离),需转换为 笛卡尔坐标系:
X = 距离 * cos(角度)
Y = 距离 * sin(角度)
Z = 0
(N10 雷达仅提供 2D 数据)
3.5 数据存储与更新
validIdx = distances >= 0.1 & distances <= 10;
X = X(validIdx);
Y = Y(validIdx);
Z = Z(validIdx);
X_all = [X_all; X(:)];
Y_all = [Y_all; Y(:)];
Z_all = [Z_all; Z(:)];
if length(X_all) > maxPoints
X_all = X_all(end-maxPoints+1:end);
Y_all = Y_all(end-maxPoints+1:end);
Z_all = Z_all(end-maxPoints+1:end);
end
- 有效点筛选:过滤 小于 0.1m 或 大于 10m 的点,避免无效数据影响可视化。
- 数据存储:
- 使用
X_all
,Y_all
,Z_all
记录所有点。 - 设定
maxPoints = 5000
,防止数据量无限增长导致 内存占用过大。
- 使用
3.6 3D 可视化更新
if ~isempty(X_all)
ptCloud = pointCloud([X_all, Y_all, Z_all]);
view(lidarViewer, ptCloud);
end
将最新点云数据 实时更新到可视化窗口。
3.7 串口异常处理
catch ME
warning("读取数据时出现错误: %s", ME.message);
pause(1);
if isvalid(serialObj)
flush(serialObj);
else
warning("串口已断开,尝试重新连接...");
serialObj = serialport(port, baudrate, "Timeout", timeout);
end
end
错误恢复策略:
- 数据读取失败 →
pause(1)
重新尝试; - 串口数据缓存溢出 →
flush(serialObj)
清空缓冲区; - 串口断开 → 重新建立连接。
4. 总结
本程序实现了: ✅ N10 激光雷达数据实时读取
✅ 数据解析与极坐标转换
✅ 3D 点云动态可视化
✅ 串口异常恢复
该代码可用于 机器人导航、自动驾驶、环境建图 等场景。若有需要,可进一步优化数据存储结构、加入滤波算法提升可视化质量。🚀