news 2026/9/3 8:23:20

毫米波雷达与视觉融合实战:AWR1642+YOLOv5Lite嵌入式落地全链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毫米波雷达与视觉融合实战:AWR1642+YOLOv5Lite嵌入式落地全链路

简介:本资源是一套面向智能感知与多传感器融合方向的工程实践方案,适用于自动驾驶、机器人导航及智能交通领域的开发者与高校研究者,解决毫米波雷达与视觉数据在实时目标检测中难以精准对齐与联合测距测速测角的核心问题。压缩包共46个文件,含7个核心Python脚本(如radar2image.py实现点云投影、v5lite.py集成YOLOv5Lite轻量检测模型)、25张实测JPEG图像样本、3个PNG/SVG标定图、1个ONNX模型文件及配套配置文件(cfg)、类别名文件(coco.names)和说明文档,整体20.43MB,结构清晰,模块分工明确。已有144人学习下载。读者可直接复现AWR1642雷达点云采集→图像平面投影→YOLOv5Lite检测框匹配→距离/速度/角度联合解算的完整流程,获得含标定辅助脚本、实测数据集、端到端推理代码及可视化示例(如radar_camera.gif)在内的全套可运行资产。

1. 这不是“加个摄像头”那么简单:一个真实落地的毫米波雷达+视觉融合系统长什么样

你搜“AWR1642 摄像头融合”,出来的大多是论文框架、PPT架构图,或者只跑通了单模态检测的半成品。但真正把毫米波雷达点云采集、图像平面投影、YOLOv5Lite检测框匹配、距离/速度/角度四维参数实时输出这整条链路稳稳跑在嵌入式板子上、帧率不掉、误差可控、能扛住雨雾干扰的完整系统——市面上公开可复现的极少。我去年在车载ADAS前装项目里,带着团队啃了整整八个月,才把这套方案从实验室搬到实车测试环道。它核心不是炫技,而是解决一个根本矛盾:摄像头在弱光、逆光、雨雾下“看不清”,毫米波雷达在静态目标、低速目标、小目标上“分不准”。两者融合不是1+1=2,是用雷达的物理量纲补视觉的语义缺失,用视觉的像素级定位校准雷达的角分辨率缺陷。

标题里那个长长的下划线串,其实已经精准概括了整个技术栈的四个硬骨头:数据采集层(AWR1642点云生成)→ 空间对齐层(点云到图像平面投影)→ 语义匹配层(YOLOv5Lite框与点云簇关联)→ 参数解算层(距离/速度/角度实时输出)。很多人卡在第二步——以为做个外参标定就完事,结果发现投影后的点云在图像上“漂”得厉害,尤其在画面边缘;更多人死在第三步——用IoU硬匹配,一遇到密集目标或遮挡就崩盘。这不是算法调参问题,是整个数据流设计没想透。比如,AWR1642原始点云每帧约200-300个点,但YOLOv5Lite输出的检测框可能只有3-5个,怎么确保每个框都精准对应到它该管的那一簇点?靠阈值过滤?靠聚类?还是靠运动一致性?这些细节,决定了系统是能上路,还是只能在Demo视频里闪几帧。

这个系统真正面向的是L2级辅助驾驶的量产需求,不是学术竞赛。所以它必须满足:单帧处理延迟≤80ms(30FPS底线)、距离误差≤0.3m(10m内)、速度误差≤0.2m/s、水平角误差≤1.5°、内存占用≤350MB(ARM A72平台)、功耗≤8W。所有参数都是我们实车跑出来的硬指标,不是仿真器里的理想值。如果你正被“融合效果不稳定”、“测距跳变大”、“夜间误检多”这些问题折磨,那这篇就是为你写的——不讲虚的,只拆解我们踩过的坑、调过的参数、写死的逻辑。

2. 为什么选AWR1642而不是AR24xx或SRR?硬件选型背后的三重现实约束

很多人一上来就问:“为什么不用更新的AWR2944?”答案很实在:成本、供应链、SDK成熟度。AWR1642是TI毫米波雷达芯片里,唯一一款在2020年前就实现大规模车规量产、SDK文档齐全、社区支持活跃、且单价压到$25以下的型号。而AWR2944虽然点云密度高、角分辨率好,但截至2023年,其SDK仍处于Beta阶段,关键API如mmwavelib的点云聚类模块文档缺失,且单颗芯片BOM成本超$60。我们做过测算:一台10万台量产车,仅雷达芯片一项,AWR1642比AWR2944节省近400万美元BOM成本。这不是抠门,是量产项目的生死线。

更关键的是AWR1642的硬件级信号处理能力。它内置C674x DSP核,能直接运行TI官方提供的mmWave SDK中的Range FFTDoppler FFTCFAR等算法,原始ADC数据进芯片,出来就是已处理的点云坐标(X/Y/Z/Vel)。这意味着你不需要在主控端(比如RK3399)上再跑一遍耗时的FFT计算——那会吃掉至少30ms CPU时间。我们实测过:如果用FPGA或ARM CPU自己做FFT,单帧点云生成延迟直接飙到120ms以上,根本达不到30FPS。而AWR1642通过UART/PCIe把点云数据包吐给主控,主控只需做空间变换和匹配,这才是能落地的架构。

另一个常被忽略的点是天线阵列布局。AWR1642采用2发4收(2T4R)MIMO配置,理论角分辨率约15°,但通过虚拟阵列扩展,实际可达3.5°左右。这个数值直接决定了你后续投影到图像上的点云“锐度”。我们对比过同尺寸PCB上2T4R和3T4R的实测效果:后者在15米外对自行车骑行者的角分辨能区分左右手,前者只能判别为“一个移动点”。但3T4R意味着射频走线更复杂、EMI更难控、量产良率下降。最终我们选择2T4R,靠软件端的点云聚类+卡尔曼滤波轨迹平滑来弥补硬件角分辨率不足——这是软硬协同的取舍,不是单纯追求参数表上的数字。

最后是供电与散热。AWR1642典型功耗3.5W,峰值5W,但必须配专用LDO(TPS65910)和低噪声电源。我们早期用普通DC-DC给雷达供电,结果点云里出现周期性噪声条纹,查了三天才发现是开关电源纹波耦合进RF前端。后来改用TI推荐的电源方案,噪声完全消失。这个教训很土,但很真:毫米波雷达不是USB设备,它的供电质量直接决定点云信噪比。很多开源项目跑不通,根源就在电源没按车规要求做。

3. 点云采集与图像平面投影:标定不是贴张标定板就完事

点云到图像的投影,本质是三维空间点(雷达坐标系)→ 二维像素坐标(相机坐标系)的刚体变换。公式看着简单:u = fx * Xc / Zc + cx,v = fy * Yc / Zc + cy,但实际落地时,90%的问题出在坐标系定义混乱时间同步失配上。

先说坐标系。AWR1642默认输出的点云坐标系是右手法则、X轴向前、Y轴向左、Z轴向上(即ENU系)。而OpenCV标定得到的相机内参,其坐标系是Z轴向前、X轴向右、Y轴向下(即针孔相机模型)。这两个坐标系的Y、Z轴方向完全相反!如果你直接把雷达点云的Y、Z坐标塞进OpenCV投影公式,投影点会全部翻转到图像外。我们踩的第一个大坑就是这里——调试一周,发现所有点都投影到负坐标,还以为是标定板没放正。后来画了个坐标系草图,手动加了符号翻转:Yc = -Y_radar,Zc = Z_radar,才对上。

再谈时间同步。雷达点云和图像帧不是天然对齐的。AWR1642点云输出间隔由Chirp配置决定,我们设为33.3ms(30FPS),但摄像头曝光时间、传输延迟、ISP处理时间都不固定。实测发现:同一时刻触发的雷达点云和图像帧,时间差可能达±12ms。这意味着,一辆以36km/h(10m/s)行驶的车,在12ms内已移动12cm——点云和图像里的车位置根本对不上。解决方案是硬件触发同步:用雷达的GPIO输出一个脉冲作为摄像头的外部触发信号,让两者严格同源。我们用的是AWR1642的GPIO_0引脚,配置为每帧点云生成完毕后拉高1μs,接至OV5640摄像头的TRIG引脚。这样,时间抖动控制在±100ns内,彻底解决运动模糊错位。

标定本身也远不止拍几张棋盘格。我们用了两步标定法
第一步,单目相机标定:用MATLAB Camera Calibrator工具,采集20张不同角度的棋盘格图像,得到内参矩阵K(fx, fy, cx, cy)和畸变系数(k1,k2,p1,p2,k3)。注意:必须用鱼眼镜头模型(fisheye)而非普通针孔模型,因为车载广角镜头畸变极大,普通模型拟合误差超5像素。
第二步,雷达-相机联合标定:不是用棋盘格,而是用带LED灯的移动标定靶。靶子上有精确已知坐标的LED点(间距10cm),在环道上匀速移动。同时记录雷达点云和图像序列,用ICP算法(PCL库)自动匹配LED点在雷达坐标系和图像坐标系中的对应关系,解算出6自由度外参R/t。这种方法比静态标定精度高3倍,尤其对俯仰角(pitch)的标定更准——因为车载安装必然有俯角,静态标定无法反映真实工况。

投影后的点云,我们还做了深度图掩膜优化:把投影点按深度Z值排序,对同一像素区域内的多个点,只保留最近的那个(即“深度优先”),避免远处点云覆盖近处目标。这个操作看似简单,但在密集场景(如车队跟车)中,能减少80%的误匹配。

4. YOLOv5Lite检测框与点云簇的匹配融合:IoU只是起点,不是终点

YOLOv5Lite是YOLOv5的轻量化版本,专为ARM平台优化,模型大小仅2.3MB,INT8量化后推理速度达42FPS(RK3399)。但它输出的检测框,和雷达点云之间,存在语义鸿沟:框是“车”、“人”、“自行车”的类别标签,点云是“X=5.23,Y=-0.87,Z=1.21,Vel=-3.45”的物理坐标。如何把二者桥接?很多人直接算检测框中心到投影点云的欧氏距离,小于阈值就算匹配。这在单车场景可行,但在十字路口多车并行时,会把相邻车辆的点云全匹配到同一个框里。

我们的方案叫三级匹配机制
第一级:空间粗筛(Spatial Gating)
对每个YOLOv5Lite检测框,计算其边界框(bbox)在图像上的像素范围,然后筛选出所有投影在此范围内的雷达点云。这一步用OpenCV的cv::pointPolygonTest快速判断,剔除90%无关点云,把匹配候选集从200+点压缩到平均15-20点。

第二级:运动一致性验证(Motion Consistency)
对粗筛后的点云簇,计算其质心速度(Vx,Vy,Vz)和检测框的预测速度(YOLOv5Lite本身不输出速度,但我们用连续帧的bbox中心偏移量估算:V_bbox = (cx_t - cx_{t-1}) / dt)。要求点云簇速度与bbox速度方向夹角<30°,且速度模长比值在0.7~1.3之间。这一步干掉了大量静态干扰点(如路牌、护栏反射点),因为它们速度为0,而检测框因车辆运动有明显位移。

第三级:语义置信度加权(Semantic Confidence Weighting)
对通过前两级的点云簇,计算其点云密度熵:把簇内点按距离分桶(0-5m,5-10m,10-20m),统计每桶点数占比,计算香农熵。熵值越低(如90%点集中在5-10m桶),说明目标越“紧凑”,匹配置信度越高;熵值高(点均匀分布),可能是多目标混叠或杂波。我们将此熵值作为权重,参与最终距离/速度的加权平均计算。

举个实例:检测框A(类别“car”,置信度0.92)对应点云簇P1(12个点,熵0.3,速度-4.2m/s),点云簇P2(8个点,熵0.8,速度-0.3m/s)。P2虽在空间范围内,但熵高、速度异常,被判定为路边静止广告牌的杂波,不参与融合。最终A的目标参数,只由P1的12个点加权计算得出。这套机制让误匹配率从单IoU法的35%降到4.7%,实测数据。

提示:YOLOv5Lite的输出需做后处理。原始输出是归一化坐标(0~1),必须乘以图像宽高转为像素坐标;且其anchor box尺寸是针对COCO数据集优化的,对车载小目标(如摩托车)召回率低。我们重训了anchor,用K-means聚类实车数据中的bbox宽高比,得到新anchor:[12,18, 24,36, 48,72],小目标AP提升12.3%。

5. 距离/速度/角度四维参数解算:从点云簇到物理量的数学推导与工程修正

匹配完成后,每个检测目标对应一个点云簇(Cluster),含N个点:{Pi = (Xi, Yi, Zi, Vi) | i=1..N}。这里的Vi是AWR1642输出的径向速度(沿雷达视线方向),不是地面坐标系下的速度分量。要得到目标的真实距离、速度、水平角,需三步解算:

距离(Distance)
最直接:取簇内所有点到雷达原点的欧氏距离Di = sqrt(Xi² + Yi² + Zi²),然后加权平均。但简单平均会受噪声点影响。我们用截断均值(Trimmed Mean):先按Di排序,去掉最大最小各10%的点,再求均值。实测比算术平均距离误差降低0.12m(10m内)。

水平角(Azimuth Angle)
公式:θ = arctan2(Yi, Xi)。但AWR1642的角分辨率有限,单点θ噪声达±2°。我们对簇内所有点θi做圆周均值(Circular Mean)
sin_θ_avg = (Σ sin(θi)) / N
cos_θ_avg = (Σ cos(θi)) / N
θ_final = arctan2(sin_θ_avg, cos_θ_avg)
这个方法比线性平均更能抵抗角度跳变,尤其在目标边缘点云稀疏时。

速度(Velocity)
难点在于Vi是径向速度,需转换为地面坐标系下的X/Y分量。设目标水平角为θ,则:
Vx = Vi * cos(θ)
Vy = Vi * sin(θ)
但Vi本身有±0.15m/s噪声,且θ误差会放大Vi的误差。我们引入卡尔曼滤波对Vx/Vy做时序平滑:状态向量X = [Vx, Vy, a_x, a_y],观测值为当前帧解算的Vx/Vy,过程噪声设为0.05m/s²。滤波后速度抖动降低70%,急刹场景下速度曲线更平滑。

垂直角(Elevation Angle)
公式:φ = arctan2(Zi, sqrt(Xi² + Yi²))。但车载安装有固定俯角(我们实测为-3.2°),需补偿:φ_compensated = φ + 3.2°。这个补偿值必须通过实车标定获得,不能凭经验估计。

最后是系统级误差修正:我们发现,所有目标在15-25m区间,距离读数系统性偏大0.23m。分析发现是AWR1642的温度漂移导致——芯片工作温度每升高10°C,测距偏差+0.08m。于是我们在雷达PCB上加装DS18B20温度传感器,实时读取芯片温度T,用线性模型修正:D_corrected = D_raw - 0.008 * (T - 25)。修正后全量程距离误差≤±0.15m。

6. 实车部署与性能瓶颈突破:30FPS不是理论值,是实打实的内存与缓存博弈

在RK3399(双Cortex-A72+四Cortex-A53)上跑通算法只是第一步,让整套系统稳定30FPS才是真正的挑战。我们最初版本帧率仅18FPS,瓶颈不在CPU,而在DDR带宽和Cache争用

问题定位:用perf工具抓取热点,发现memcpy调用占CPU时间32%,主要发生在点云数据从UART buffer拷贝到处理buffer、图像数据从DMA buffer拷贝到OpenCV Mat时。UART接收中断频繁(每33ms一次),每次拷贝2KB点云数据,加上图像RGB数据(1280x720x3=2.7MB),总带宽压力巨大。

解决方案是零拷贝内存池(Zero-Copy Memory Pool)

  • 在Linux启动时,用mem=3G cma=512M预留512MB连续内存;
  • dma_alloc_coherent分配两块buffer:一块给UART DMA接收(大小=点云包长×2),一块给ISP DMA输出(大小=图像帧长×2);
  • 所有处理模块(点云投影、YOLO推理、匹配融合)直接操作这块物理内存地址,不再memcpy
  • 用自旋锁(spinlock)管理buffer读写指针,避免竞态。

此举将内存拷贝时间从12ms降至0.3ms,帧率提升至26FPS。剩余4FPS来自YOLOv5Lite的GPU推理延迟。我们发现RK3399的Mali-T860 GPU在FP16模式下,对YOLOv5Lite的Conv层调度效率低。改用INT8量化+TensorRT加速:用NVIDIA的trtexec工具将ONNX模型转为TRT引擎,启用fp16int8混合精度,推理时间从8.2ms降至3.1ms。

最后一个瓶颈是点云聚类耗时。原始PCL的EuclideanClusterExtraction在ARM上单帧耗时15ms。我们重写了轻量版聚类:

  • 先按Z值分层(0-2m为地面层,2-3m为行人层,3-5m为车辆层);
  • 每层内用KD-Tree加速邻域搜索(半径0.5m);
  • 聚类后只保留点数≥5的簇,丢弃小簇(视为噪声)。
    优化后聚类耗时降至2.4ms。

最终系统资源占用:

模块CPU占用率内存占用延迟
UART点云接收3%-<0.1ms
图像采集(ISP)8%-<1ms
点云投影+聚类12%45MB2.4ms
YOLOv5Lite推理28%82MB3.1ms
匹配融合+参数解算15%38MB4.7ms
总计≤66%≤348MB≤79ms

注意:所有延时测量均用clock_gettime(CLOCK_MONOTONIC, &ts)在代码关键节点打点,非time.time()。嵌入式环境里,系统时间可能被NTP校准跳变,必须用单调时钟。

7. 常见问题与排查技巧实录:那些不会写在论文里的实战经验

7.1 问题:点云投影后在图像边缘严重发散,形成“拖尾”

现象:车辆目标在图像中央投影正常,但靠近画面左右边缘时,点云散开成一条斜线。
根因:车载镜头畸变模型未用鱼眼模型,普通针孔模型在边缘拟合失效。
排查:用MATLAB标定工具,对比pinholefisheye模型的重投影误差图——鱼眼模型在边缘误差<0.5像素,针孔模型达3.2像素。
解决:强制使用fisheye模型标定,并在投影时调用cv::fisheye::projectPoints而非cv::projectPoints。额外增加一步:对投影点做畸变逆补偿,消除鱼眼拉伸效应。

7.2 问题:YOLOv5Lite在隧道出口强光下大量漏检

现象:车辆驶出隧道瞬间,检测框消失2-3帧。
根因:ISP自动曝光调整滞后,导致图像局部过曝,YOLO特征提取失效。
排查:抓取原始RAW图像,发现隧道出口区域像素值饱和(255)。
解决:关闭ISP自动曝光,改用分区域曝光控制:将图像分9宫格,对中央3×3区域设固定曝光值(基于隧道内亮度),边缘6格保持自动。这样中央目标区亮度稳定,边缘环境区仍能适应。

7.3 问题:多车并行时,雷达点云匹配到错误车辆,距离跳变

现象:跟车场景下,本车距离读数在前车和后车间跳变。
根因:空间粗筛未考虑深度连续性,把前车后部点云和后车前部点云混在同一bbox内。
排查:可视化点云簇,发现同一bbox内存在两个深度峰(如5.2m和8.7m)。
解决:在空间粗筛后,增加深度直方图分割:对bbox内点云Z值做直方图,找谷值点分割成多个子簇,再对每个子簇单独做运动一致性验证。这样就把前车/后车分离开了。

7.4 问题:系统运行2小时后,点云密度持续下降

现象:初始每帧200点,2小时后只剩80点,且速度噪声增大。
根因:AWR1642芯片温升导致RF前端增益漂移,CFAR检测阈值失效。
排查:用mmWave Studio监控芯片温度,发现从25°C升至68°C;同时观察ADC原始数据,底噪抬升12dB。
解决:在固件中加入温度自适应CFAR:每10秒读取芯片温度T,动态调整CFAR的guard cellnoise floor参数。公式:noise_floor = base_noise + 0.15 * (T - 25)。温度补偿后,点云密度稳定在190±5点。

7.5 问题:雨天点云中出现大量“悬浮点”,匹配失败

现象:中雨时,图像清晰,但点云里出现大量Z值异常高(>3m)的孤立点,投影到天空区域。
根因:雨滴在毫米波下产生强反射,且雨滴下落速度(~9m/s)被误判为高速目标。
解决:增加雨滴特征滤波器:对点云簇计算Z值标准差,若σ_Z > 0.8m,且点数<8,且Vel > 7m/s,则判定为雨滴,直接剔除。此规则对中雨场景点云净化率达92%。

8. 从实验室到量产:这套方案还能怎么升级?

这套系统在我们实车测试中已稳定运行12个月,累计里程超5万公里。但技术没有终点,几个明确的升级方向值得投入:

第一,引入4D毫米波雷达。AWR1642是3D雷达(X/Y/Z/Vel),而TI新出的AWR2944是4D(增加垂直速度Vz)。有了Vz,就能区分“上坡车”和“下坡车”,对弯道场景的轨迹预测更准。不过代价是数据量翻倍(单帧点云从200点到800点),需要升级主控到RK3588(8核A76)。

第二,点云语义分割替代YOLO框匹配。现在是“框→点云簇”,未来可训练PointPillars网络,直接对点云做3D检测,输出带类别和3D bbox的点云。这样就不依赖摄像头,实现纯雷达方案,彻底摆脱光照影响。我们已用KITTI数据集预训练了一个轻量PointPillars,模型大小4.1MB,RK3588上推理18FPS。

第三,构建在线标定闭环。当前标定是一次性的,但车辆长期使用后,摄像头支架会微形变,雷达安装螺丝会松动。我们正在开发基于运动一致性的在线标定模块:利用车辆匀速直线行驶时,地面点云应满足平面约束(Z=0),实时解算俯仰角偏差,自动修正外参。实测标定误差漂移超过0.1°时,系统自动触发重标定。

最后分享一个血泪教训:永远不要相信“标定完成”的那一刻。我们交付给客户的第3台样车,在客户停车场停了一周后,发现距离误差突增至±0.8m。拆开检查,发现是摄像头支架的减震橡胶垫老化变形,导致俯角变化了0.3°。从此,我们在每台车出厂前,增加一道“热机标定”:整车通电运行2小时,待温度稳定后,再做最终标定。技术落地,拼的就是这些藏在细节里的较真劲儿。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 8:22:02

某上市药企:研发+生产+流通全链路档案数字化转型

先看这个案例的特殊性&#xff0c;药企的档案合规从来都是硬约束医药企业的档案管理&#xff0c;天然比一般企业更复杂、也更严格。研发环节有研发费用、项目立项、实验记录&#xff0c;生产环节有批生产记录、检验报告、质量体系文件&#xff0c;流通环节有经销合同、发票、回…

作者头像 李华
网站建设 2026/9/3 8:20:58

STM32 FatFs SD卡移植深度解析:从协议层到CSV可靠写入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 8:20:24

C#软件授权实战:基于AES与RSA的注册码生成与验证机制详解

简介&#xff1a;这是一份面向C#中高级开发者与.NET软件安全实践者的注册机制实战源码&#xff0c;聚焦软件版权保护场景下的注册码生成、验证与防破解设计。资源完整实现基于AESRSA混合加密的注册码签发流程&#xff0c;集成序列化封装用户信息、SHA256哈希校验、本地/网络双模…

作者头像 李华
网站建设 2026/9/3 8:19:31

全栈开源外卖系统“食刻”部署与核心业务调试实战指南

简介&#xff1a;这是一套面向外卖平台创业者、中小型技术团队及全栈开发者的完整开源外卖系统解决方案&#xff0c;覆盖用户下单、商户管理、骑手配送、多端协同等核心业务闭环&#xff0c;助力快速搭建可商用的本地化外卖服务平台。资源包共2000个文件&#xff0c;含1266个PH…

作者头像 李华
网站建设 2026/9/3 8:18:47

51单片机车窗控制仿真:从Protues到AD原理图的硬核实践

简介&#xff1a;本资源是一套面向嵌入式初学者与课程设计学生的51单片机综合实践项目&#xff0c;聚焦智能车窗控制系统的完整开发实现。系统基于Proteus仿真平台构建&#xff0c;融合温湿度&#xff08;SHT11&#xff09;、烟雾浓度、光照强度及雨水检测等多传感器数据&#…

作者头像 李华