首页 > 数字化转型 > 其他 > 激光雷达(LiDAR)数据采集与处理
激光雷达基于 飞行时间法(ToF) 测量距离,核心公式:
d=2c⋅Δt
其中 c 为光速, Δt 为激光发射与接收的时间差。工业界主流分为两类:
脉冲式 LiDAR:发射纳秒级激光脉冲,测量 往返时间,适用于远距离(100m-10km)测量,是 数字孪生地形与城市采集的主流
相位式 LiDAR:发射调制正弦波激光,通过相位差计算距离,精度更高(毫米级),但测量距离短(<100m),适用于室内与工业场景
点云原始 数据结构(单帧):
plaintext
struct LidarPoint {
float x, y, z; // 传感器坐标系下的三维坐标
uint16_t intensity; // 激光反射强度(0-65535)
uint8_t ring; // 激光通道号
double timestamp; // 采集时间戳(微秒级)};提供 厘米级绝对地理精度的地形与地物几何数据,是数字孪生空间基准的核心来源
生成高精度数字高程模型(DEM/DTM/DSM),作为 3D 瓦片地形层的基础数据
弥补倾斜摄影在植被覆盖区、玻璃幕墙区的几何重建缺陷
支持毫米级地表形变监测,用于桥梁、大坝等基础设施数字孪生的健康监测
外业数据采集
机载 LiDAR:飞行高度 500-1000m,点密度 10-50 点 /㎡,平面精度 ±5cm,高程精度 ±3cm
车载 LiDAR:行驶速度 30-60km/h,点密度 100-500 点 /㎡,平面精度 ±2cm,高程精度 ±1cm
必须同步采集 POS(定位定姿系统)数据,采样频率≥100Hz,RTK 定位精度 ±1cm
数据预处理(PCL 库实现核心步骤)
cpp
运行
// 1. 点云去噪:统计滤波去除离群点 pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; sor.setInputCloud(cloud); sor.setMeanK(50); // 每个点计算50个最近邻 sor.setStddevMulThresh(1.0); // 标准差倍数阈值 sor.filter(*cloud_filtered); // 2. 点云配准:NDT算法拼接多帧点云 pcl::NormalDistributionsTransform<pcl::PointXYZ, pcl::PointXYZ> ndt; ndt.setInputSource(cloud_source); ndt.setInputTarget(cloud_target); ndt.setResolution(1.0); // 体素分辨率1m ndt.align(*cloud_aligned);
地理配准与坐标转换
使用至少 3 个均匀分布的地面控制点(GCP)进行七参数转换
转换公式:
XYZ=λRxyz+ΔXΔYΔZ
其中 λ 为尺度因子, R 为旋转矩阵, ΔX/Y/Z 为平移向量
|
问题 |
原因 |
解决方案 |
|---|---|---|
|
点云分层 / 错位 |
POS 数据漂移 |
使用 RTK 固定解数据,增加地面控制点密度 |
|
植被区地形精度低 |
激光穿透植被冠层 |
使用渐进式形态学滤波(PMF)分离地面点与非地面点 |
|
动态物体干扰 |
车辆、行人等移动物体 |
使用基于时间戳的运动目标检测算法去除 |
开源库:PCL(点云处理)、PDAL(点云 数据转换与处理)
商业软件:TerraSolid、Lidar360
系统集成:输出 LAS/LAZ 格式点云,可直接导入 Cesium、Unreal Engine 生成 3D 瓦片
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049756/viewspace-3172381/ ,如需转载,请注明出处,否则将追究法律责任。