资讯动态

M-detector 动态物体聚类与跟踪:体素聚类、地面估计与 OOBB 包围盒原理一篇讲透

发布时间:2026/8/27 15:48:56 来源:尧图企业网站定制
M-detector 动态物体聚类与跟踪体素聚类、地面估计与 OOBB 包围盒原理一篇讲透【免费下载链接】M-detector项目地址: https://gitcode.com/gh_mirrors/md/M-detectorM-detector 是一款基于 LiDAR 点云流的动态物体检测算法它能逐个点对判断运动状态延迟仅几微秒。本文带你从原理层面看懂它的三大核心模块体素聚类、地面估计与OOBB 有向包围盒如何实现动态物体的聚类与跟踪。一、M-detector 是做什么的 M-detector 由香港大学 MARS 实验室开发核心思路基于遮挡原理当激光雷达观测到某处的深度在短时间窗口内发生变化说明有物体正在遮挡或被遮挡从而判定该点属于运动物体如车辆、行人。它的典型工作流是动态点筛选基于多帧深度图DepthMap对每个点做运动判定源码见 DynObjFilter.h体素聚类把动态点合并成一个个物体级簇地面估计与去除剔除被误判为动态的地面点OOBB 包围盒估计为每个物体给出带朝向的最小包围盒支撑跟踪与预测。后三步集中在 DynObjCluster.cpp 的DynObjCluster类中实现下面逐一拆解。二、体素聚类把散点变成物体 1. 为什么用体素而不是 KD-Tree DBSCAN传统做法是 KD-Tree DBSCAN代码中保留了GetClusterResult分支DynObjCluster.cpp但逐点建索引开销大。M-detector 改用体素网格聚类将空间划分为Voxel_revolusion默认 0.3 m的立方体格子动态点直接落格再按 26 邻域连通生长出簇复杂度接近线性适合嵌入式实时部署。核心入口是GetClusterResult_voxelDynObjCluster.cpp内部调用VOXEL_CLUSTERvoxel_cluster.h构建全局体素地图umap并提取voxel_clusters。2. 点分配与簇过滤PubClusterResult_voxelDynObjCluster.cpp完成了两件事包围盒初值统计每个簇占据的最小/最大体素坐标生成初始 AABB轴对齐包围盒仅保留在至少两个维度上尺寸超过体素大小的簇过滤噪声碎片原始点回填遍历本帧原始点按体素归属分配到簇内点、簇外地面扩展点、框内填充点三类体素地图umap/umap_ground/umap_insidebox并更新每个点的动态标签dyn_tag。此外还有两道质量关isolate_removeDynObjCluster.cpp对簇内部再做一次小范围体素聚类只保留最大子簇剔除离群孤立点可信度检查若簇的原始点占比低于thrustable_thresold默认 0.3说明大部分是填充点而非真实动态点整个簇会被丢弃。三、地面估计把误报的地面点踢出去 ️运动车辆底部会压到雷达的地面回波若不去除聚类结果会拖出一条长长的尾巴。M-detector 在簇外扩展的体素umap_ground中做地面平面拟合分块拟合ground_estimateDynObjCluster.cpp把候选地面点分成若干小块对每块用esti_plane基于列主元 QR 分解的最小二乘平面拟合DynObjCluster.cpp求平面要求平面法向与车体系 Z 轴夹角小于 30°保证是接近水平的平面择优投票统计每块平面在全点集中的贴合点数取覆盖最多的平面要求支持点数超过 20% 或 500 点才认定地面成立区域生长event_extendDynObjCluster.cpp从地面体素出发做 6 邻域生长把邻近且法向不平行于地面的体素并入物体——这正好能找回被车身遮挡、投影到地面的车底点地面去除ground_removeDynObjCluster.cpp把到平面距离小于 0.1 m 的点标记为静态剔除出簇。四、OOBB 包围盒给物体一个带朝向的盒子 轴对齐框AABB无法表达车辆朝向。M-detector 的oobb_estimateDynObjCluster.cpp用法向直方图投票求主方向法向采样对簇内每个点数足够≥5的体素拟合平面法向等距面积圆盘分箱EA_diskEA_disk.h把法向从球面坐标投影到圆盘并分环分扇区避免球面采样密度不均加权投票每个扇区的得分为sqrt(点数) / |法向 z 分量|累加sqrt抑制大簇体素的过度影响1/z放大接近水平面的体素权重更贴合长条状车辆侧面假设取得分最高的两个扇区作为主方向与辅助方向构建旋转矩阵 R若地面估计成功则第一列直接取地面法向保证盒子站在地面上否则用主方向并对齐世界 Z 轴投影求极值把簇内所有点变换到 R 坐标系下取 min/max得到带朝向的 OOBB 最小/最大点写入bbox_t结构体DynObjCluster.h。输出的bbox_t同时携带中心位姿、点索引、地面点与 OOBB 参数可直接用于 RViz 可视化、轨迹预测和下游 IoU 评估见 cal_recall_multi.cpp。五、如何配置与上手运行 参数配置不同数据集的雷达参数深度图分辨率、遮挡阈值、cluster_Voxel_revolusion、cluster_thrustable_thresold等位于 config/kitti/kitti0.yaml、config/nuscenes/nuscenes0.yaml、config/waymo/waymo0.yaml、config/avia/avia0.yaml启动文件launch/detector_kitti.launch等数据集专属 launch配合里程计节点回放 bag 即可运行依赖Ubuntu ≥ 18.04、ROS ≥ Melodic、PCL ≥ 1.8、Eigen ≥ 3.3.4 与 TBBCMakeLists.txt 中需修改 TBB 路径。六、总结M-detector 的动态物体聚类与跟踪链路可以概括为一句话体素聚类负责聚地面估计负责净OOBB 负责框。三者均以体素网格为公共数据结构充分利用 GPU/CPU 并行std::execution::par在嵌入式平台上实现了毫秒级的物体级检测与跟踪——这正是它能做到逐点、微秒级延迟动态检测的关键工程基础。【免费下载链接】M-detector项目地址: https://gitcode.com/gh_mirrors/md/M-detector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价