多模态 Radio-Vision SLAM 原型数据集复现指南、Particle-RFS 算法结构与波束管理实测环境MATLAB R2022b新增以免影响readmatrix、深度深学习 YOLO 相关工具箱按需 Python 3.xnumpy / scipy / torch / matplotlib / openpyxl / Pillow数据集Zenodo DOI 10.5281/zenodo.22896456约数百 MB仓库内不含数据论文Multi-Modal Radio-Vision SLAM for ISAC: Prototype Design, Experimental Validation and Beam-Management Applications, IEEE TWC vol. 25, pp. 22734-22748, 2026原文链接 EW Frontier摘要本文给出一套多模态 ISAC 原型的数据集复现指南与算法结构说明毫米波相控阵8×8 UPA等效 8 阵元 ULA产生 64×64 RSRP 测量与固定双目相机、UE 机载 IMU 融合在基于粒子的一随机有限集RFS后验上联合估计 UE 状态、散射体与虚拟锚点。文中给出数据集目录与字段格式、MATLAB / Python 两条读取路径、RSRP 热力图象限重排这一必须步骤以及全部实测结果表明亮条件下 UE 定位误差 0.30 m、地图 OSPA 1.61 m、波束方向角误差 0.0403 rad、遮挡检出率 84.33%并指出弱光下松耦合架构在地图构建上会倒输给模态更少的 IMU 辅助方案这一现象及其成因。一、工程结构code/ ├── slam/ │ ├── run_slam_bright.m # 明亮条件主脚本 │ ├── run_slam_dark_light.m # 弱光条件主脚本 │ ├── functions_bright/ # 93 个辅助函数含 UESLAM、initAnchors_unbiased 等 │ └── functions_dark_light/ ├── beam_management/ │ ├── main.m / main2.m / main3.m # 波束跟踪与遮挡预测 │ └── functions/ # 约 77 个辅助函数 ├── common/beam2.xlsx # 波束码本 ├── camera_python/ # 视觉处理脚本 └── data_example/read_dataset.py # Python 数据读取与预览工具 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b6c5b8fa69a54f3d91b719e34ad805e0.png) MATLAB 侧运行 matlab addpath(genpath(code/slam/functions_bright)); beammap readmatrix(fullfile(code,common,beam2.xlsx)); beammap beammap(:,2); % 主流程code/slam/run_slam_bright.mPython 侧预览pipinstallnumpy scipy torch matplotlib openpyxl Pillow python code/data_example/read_dataset.py--datasetslam_bright--frame10read_dataset.py中ROOT parents[2]假定脚本位于root/code/data_example/数据解压在root/data/。路径是相对约定移动目录会失效。二、数据集目录与字段data/ ├─ slam/ │ ├─ bright/traceS/ └─ dark/traceS/ │ ├─ rgb/ *_rgb.npy # RGB 图像 │ ├─ depth/ *_depth.npy # 深度图 │ ├─ qatm/ *_rgbQATM.txt # 多目标模板匹配检测结果 │ ├─ yolo/ *_rgb.txt # YOLO 检测class x y w h │ ├─ pose/ json *.txt │ └─ rsrp/ pss *.txt # 64×64 RSRP 热力图 ├─ beam_management/ │ └─ bright|dark / los / block|noblock / trace1-0-1 ... trace1-0-10 ├─ imu/ IMU_S_trace.mat └─ calibration/beam2.xlsx # 波束码本read_dataset.py会打印各张量形状与位姿摘要并导出 RGB / 深度 / RSRP 热力图的 PNG 预览。接触新数据集时应先跑这一步先确认维度与坐标系再写处理逻辑。三、原型系统参数部件型号说明SDRUSRP-2974数据处理与存储核心毫米波相控阵mmPSA-TR64MX8×8 面阵单射频通道64×64 二维扫描机器人底盘Yunji WATER2承载移动 UE双目相机Intel RealSense D455RGB 深度固定安装射频链路SDR 输出 2.5 GHz 中频由相控阵内置本振上变频到28 GHz。两节点同层部署水平维度之外可忽略相控阵近似为 8 阵元 ULA码本M N 64 MN64MN64。关键约束波束扫描码本的角覆盖只有2 π / 3 2\pi/32π/3rad120°因此 UE 必须在预设航点停下原地旋转才能配合 PA 完成全角域 RSRP 采集实验采用 stop-and-go 协议。虚拟锚点真值[ 12.93 , 0 ] [12.93,0][12.93,0]、[ 0 , 12.58 ] [0,12.58][0,12.58]、[ 0 , − 5.48 ] [0,-5.48][0,−5.48]m。UE 最大移动速度 0.5 m/s。三类测量与时延预算Intel Core i7-13700环节时延UE 侧联合处理SLAM 波束管理0.035 s / 周期BS 侧多目标识别0.1 s / 帧CPU完整 64×64 RSRP 采集1.28 s瓶颈在采集而非算法0.1 s 识别耗时相对 1.28 s 窗口余量充足因此未做硬件加速1.28 s 把有效波束跟踪限制在约 1 m/s。硬件原生帧结构是 20 ms换专用处理单元即可支持高移动性。四、算法结构4.1 粒子化的三类状态posteriorParticlesAgentcell(J,1);% UE 状态粒子posteriorParticlesScattererscell(J,1);% 散射体粒子posteriorParticlesAnchorscell(J,1);% 虚拟锚点VA粒子主循环三个关键调用initAnchors_unbiased(parameters{iterT,1},1,posteriorParticlesAgent{j,1},Measurement{j,1},dataVA);UESLAM(11,Measurement{1,1},parameters{iterT,1},estimatedScatterers{j,1},...posteriorParticlesScatterers{j,1},estimatedAnchors{j,1},Location(:,i));multimodal_fusion_old(i,j,eSLAM,SLAM_Trajectory,theta0,Robot,Cam_numb,RGBlabel,DepthImg,...);这就是紧耦合的实现含义视觉与惯性的量测直接进入同一个后验的更新步骤而不是先各自产生独立定位结果再加权平均。IMU 分支用协方差前向传播参与联合更新IMUindependentLocationestLocation(:,i);...IMUindependentLocation[noise;zeros;zeros]*randn(1,parameters{iterT,1}.numParticles);4.2 RSRP 热力图的象限重排必做HeatMap0HeatMap(64:-1:1,64:-1:1);forii1:64forjj1:64HeatMap0(ii,jj)HeatMap(641-ii,641-jj);endendHeatMap1(1:32,1:32)HeatMap0(33:end,33:end);HeatMap1(33:end,1:32)HeatMap0(1:32,33:end);HeatMap1(1:32,33:end)HeatMap0(33:end,1:32);HeatMap1(33:end,33:end)HeatMap0(1:32,1:32);imagesc(HeatMap2)xlabel(UpLink AoA);ylabel(UpLink AoD);两次翻转加一次四象限重排把原始M × N M\times NM×NRSRP 矩阵对齐到统一 AoA/AoD 坐标系。缺失这一步会造成系统性镜像或平移错误且算法不会报错只会安静地变差。复现时应先用已知位置的一次测量验证坐标轴方向。4.3 评价度量定位真实与估计 UE 位置的欧氏距离地图OSPA截止距离 10 m阶数 1同时刻画 VA 数量误差与位置误差波束码本索引误差折算为角度误差。五、实验结果5.1 定位轨迹 S明亮方案平均定位误差理想相机理论下界0.10 mIMU 纯积分2.5 mRadio-SLAM0.90 mIMU 辅助 SLAM0.51 m松耦合 LC-MM0.32 m紧耦合 TC-MM0.30 m相对单模态 Radio-SLAM 降低66.7%。两点注意理想相机在 t 626 s 也出现过一次目标漏检说明视觉的偶发失效是结构性的IMU 纯积分仅 2.5 m 累积误差远好于典型纯惯导原因是 stop-and-go 协议提供了周期性零速更新。实验协议会显著改变基线强弱必须在论文中交代。5.2 地图构建 OSPA方案明亮弱光Radio-SLAM3.00 m3.10 mIMU 辅助 SLAM2.60 m2.45 m松耦合 LC-MM2.43 m2.80 m紧耦合 TC-MM1.61 m2.05 m明亮时相对 Radio-SLAM 降低46.3%弱光下相对 LC-MM 降低26.8%。5.3 弱光定位与性能倒挂方案定位误差Radio-SLAM1.82 mIMU 辅助 SLAM0.91 m松耦合 LC-MM0.85 m紧耦合 TC-MM0.44 m地图构建出现倒挂LC-MM2.80 m输给模态更少的 IMU 辅助 SLAM2.45 m。成因是松耦合先让三模态各自产生独立定位结果再融合视觉频繁漏检使前级输出方差剧烈波动融合滤波器无法稳定——一个坏输入不断冲击滤波器比不给它输入更糟。紧耦合可在视觉失效时降级到 IMU 状态演化加 NLoS 无线测量。注意弱光下 RSRP 质量本身也下降Radio-SLAM 0.90 → 1.82 m差距不完全来自视觉。5.4 波束跟踪90 次试验条件UE 定位误差视觉辅助成功率波束索引误差角度误差明亮0.23 m91.27%1.230.0403 rad2.31°弱光0.35 m66.26%1.460.0477 rad2.73°单模态对照1.64 m—2.170.0710 rad4.07°LoS 与 NLoS 分开评估因为两者路径损耗差异巨大同时评估时主瓣旁瓣会严重干扰较弱的 NLoS 波束。反直觉现象UE 越靠近 PA定位越准但波束跟踪略微变差——近距离时同样位移对应更大角度变化角度敏感度超过了定位精度的收益。因此波束跟踪误差预算必须写成定位误差 × 几何敏感度。5.5 遮挡预测条件方案检出率虚警率明亮多模态84.33%5.12%弱光纯视觉55.90%—弱光纯无线—32.26%弱光多模态82.72%12.10%弱光下视觉检出率从 91.27% 崩到 55.90%YOLO 退化纯无线虚警率高达 32.26%。多模态仍保持 82.72% 检出率代价是虚警升至 12.10%——成因是定位误差传播到波束传播轨迹计算从而误触发遮挡判定。遮挡场景下系统性能增益约4 dB。六、排错 checklist症状排查方向路径找不到数据read_dataset.py假定脚本在root/code/data_example/数据在root/data/AoA/AoD 出现镜像或系统性偏移漏做 RSRP 热力图的象限重排见 4.2readmatrix读不到码本检查code/common/beam2.xlsx并确认取第 2 列视觉效果远差于论文确认走的是functions_bright而非functions_dark_light版本IMU 基线误差远大于 2.5 m实验协议改变了确认是否有周期性零速更新段NLoS 波束被主瓣旁瓣淹没LoS 与 NLoS 必须分开评估波束跟踪反而不如近距离检查是否混淆了定位误差与角度敏感度见 5.4七、已知边界暗光下 RSRP 质量本身下降Radio-SLAM 0.90 → 1.82 mstop-and-go 协议不支持连续运动场景评估8 阵元等效 ULA二维面阵降维使用仅考虑水平角1.28 s 采集窗口限制有效速度约 1 m/s硬件能力为 20 ms 帧相机固定安装依赖外部已标定相机与 UE 机载感知不同仅考虑一阶镜面反射高阶反射与漫散射并入高斯噪声。八、小结复现这套系统时最容易踩的坑不在算法而在数据坐标系pss *.txt的 RSRP 矩阵不经过象限重排就会安静地给出带镜像的角度read_dataset.py中ROOT parents[2]的路径约定也不容移动。真正值得学习的则是它的两条设计原则——紧耦合的价值体现在失效模式而非峰值精度弱光地图构建中松耦合倒输给更少模态就是明证以及下游任务的误差预算必须写成上游误差 × 几何敏感度否则会得到距离基站越近跟踪越差这种看似矛盾的结果。