激光雷达(Lidar)是自动驾驶中感知环境的核心传感器之一,它输出的是一帧帧点云数据(point cloud),表示空间中障碍物的位置和形状。


1. 什么是点云?

点云是由一系列点(x, y, z, intensity)组成的数据集,每个点表示空间中某个反射物的坐标和强度信息。


2. 点云数据结构

字段 描述
x, y, z 三维坐标
intensity 激光反射强度
ring 激光束编号(多线雷达)
timestamp 每个点的时间戳
reflectivity / ambient 可选,反映表面材质或亮度

3. 常见处理流程

3.1 点云预处理

  • 体素滤波(VoxelGrid):降低点云密度,加快处理速度
  • 裁剪(CropBox):去除远处或地面点,聚焦感兴趣区域
  • 时间同步:与IMU/GNSS同步,统一坐标系

3.2 点云配准与融合

  • ICP算法(Iterative Closest Point):配准不同帧点云,构建地图
  • NDT算法:用于鲁棒配准,适应点云局部稀疏问题
  • 多帧融合:提升障碍检测的完整性

3.3 点云感知

  • 地面分割(Ground Segmentation):识别并移除地面点
  • 聚类(Euclidean Clustering):提取独立目标(车辆、行人)
  • 目标跟踪与识别:结合深度学习模型进行物体分类

4. 使用工具与库

工具/库 说明
PCL (Point Cloud Library) 最主流的C++点云处理库
Open3D Python友好,支持可视化与处理
ROS + sensor_msgs/PointCloud2 ROS中点云标准消息格式
rviz 可视化点云、障碍物、车辆模型
Autoware/Apollo 提供全套点云感知模块

5. 示例:PCL聚类伪代码

pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;
ec.setClusterTolerance(0.5); // 50cm内为一类
ec.setMinClusterSize(30);
ec.setMaxClusterSize(2500);
ec.setSearchMethod(tree);
ec.setInputCloud(cloud_filtered);
ec.extract(cluster_indices);

推荐学习资料