基于3D激光点云的障碍物检测与跟踪---(2)点云聚类

一、为什么要进行聚类(Clustering)

经过滤波、地面与障碍物点云分割后,这些点云混杂在同一个坐标空间,如果不进行聚类,就无法区分每个目标的范围与形状。

因此,我们的目标是:

将点云分成若干独立的"簇(Cluster)",每个簇对应一个物体。


二、聚类算法原理 ------ 欧式聚类(Euclidean Cluster Extraction)

2.1 基本思想

欧式聚类(Euclidean Cluster Extraction)是 PCL中最常用的聚类算法,核心思想是:

若两个点之间的欧式距离小于给定阈值,则它们属于同一个簇。


2.2 算法流程

  1. 构建 KD-Tree以加速邻域查询;
  2. 从任意未访问的点开始,搜索其邻域内所有距离小于阈值的点;
  3. 将这些点加入同一个簇;
  4. 对每个新加入的点重复步骤 2;
  5. 当没有更多邻点可加入时,当前簇结束;
  6. 继续处理下一个未访问点。

KdTree 是一种加速最近邻搜索的数据结构,聚类算法在计算"点之间的距离是否小于阈值"时会频繁使用它


2.3 算法复杂度

若使用暴力搜索(O(N²))会非常慢;

KD-Tree 将邻近搜索加速为 O(N·logN),使其可以实时处理十万级点云。


三、聚类核心代码

cpp 复制代码
  // 构建 KD 树加速搜索
  tree->setInputCloud(cloud);

  ec.setClusterTolerance(cluster_tolerance);  // 聚类距离阈值
  ec.setMinClusterSize(min_size); // 聚类最小点云数量
  ec.setMaxClusterSize(max_size); // 聚类最大点云数量
  ec.setSearchMethod(tree);
  ec.setInputCloud(cloud);
  ec.extract(cluster_indices);

四、参数解析与调优建议

参数 含义 典型值(自动驾驶场景) 调整效果
cluster_tolerance 点间聚类距离阈值 0.3 ~ 0.8 m 越小越容易分裂簇
min_size 最小簇点数 10 ~ 30 去除噪声小簇
max_size 最大簇点数 10000 防止大簇占用全部点

🚀 一般根据激光雷达的点间距与障碍物密度调节 cluster_tolerance

比如:64线激光常取 0.5m 左右。


五、聚类后的障碍物特征提取

得到每个簇后,通常会进一步计算:

  • 几何中心(Centroid)
  • 体积尺寸(Bounding Box)
  • 朝向角(通过 PCA 求主方向)

核心代码(轴对齐包围盒 AABB):

cpp 复制代码
PointT min_pt, max_pt; // 点云簇在 X/Y/Z 三个方向的最小值和最大值
Eigen::Vector3f position((max_pt.x + min_pt.x) / 2,
                         (max_pt.y + min_pt.y) / 2,
                         (max_pt.z + min_pt.z) / 2);
Eigen::Vector3f dimension(max_pt.x - min_pt.x,
                          max_pt.y - min_pt.y,
                          max_pt.z - min_pt.z);

可用于绘制障碍物边界框或作为后续跟踪输入。


六、效果总结

阶段 点云数量 内容 效果
滤波后 ~35,000 含多类障碍物与噪声 无法直接区分物体
聚类后 各簇独立 每簇对应一个障碍物 可计算包围盒与分类

七、总结与展望

步骤 方法 主要目标
1️⃣ 体素下采样 VoxelGrid 降低点云数量
2️⃣ ROI 区域裁剪 CropBox 保留感兴趣区域
3️⃣ 地面分割 RANSAC 去除地面点
4️⃣ 欧式聚类 EuclideanClusterExtraction 提取单个障碍物

经过聚类处理后,我们可以:

  • 计算每个障碍物的三维包围盒;
  • 进行目标跟踪、识别或动态检测;
相关推荐
椰壳也可3 小时前
06_作业基于CubeMx实现按键控制LED灯(裸机)(立芯嵌入式笔记)
笔记·stm32·学习
EQ-雪梨蛋花汤3 小时前
【讨论】VR + 具身智能 + 人形机器人:通往现实世界的智能接口
机器人·vr·具身智能·ai agent·通用人工智能·虚实融合
Yangy_Jiaojiao4 小时前
开源视觉-语言-动作(VLA)机器人项目全景图(截至 2025 年)
人工智能·机器人
im_AMBER4 小时前
Leetcode 52
笔记·学习·算法·leetcode
菜鸟‍5 小时前
【前端学习】阿里前端面试题
前端·javascript·学习
wdfk_prog6 小时前
[Linux]学习笔记系列 -- [kernel]kallsyms
linux·笔记·学习
!chen7 小时前
CPP 学习笔记 语法总结
c++·笔记·学习
面向星辰8 小时前
k均值,密度聚类,层次聚类三种聚类底层逻辑的区别
机器学习·均值算法·聚类
d111111111d8 小时前
STM32外设学习--DMA直接存储器读取(AD扫描程序,DMA搬运)--学习笔记。
笔记·stm32·单片机·嵌入式硬件·学习
流川_疯10 小时前
CANOE概念与应用
经验分享·笔记·学习·汽车