4. 数据采集规范
做激光雷达标定这么多年,我踩过最大的坑,往往不是算法本身,而是数据采集环节。说白了,你算法再牛,喂进去的数据是垃圾,出来的结果也是垃圾。这一章,我就把数据采集的那些门道,掰开了揉碎了讲给你听。
4.1 采集场景要求
先说说场景。不是随便找个空地就能标定的。我见过有人在地下停车场采集数据,结果点云全是墙壁和柱子,标定出来一塌糊涂。
场景选择的核心原则:
- 开阔空间:至少10m×10m的空旷区域,四周不要有太多遮挡物
- 光照稳定:避免强光直射或阴影剧烈变化,阴天其实是最理想的
- 地面平整:地面起伏不要超过5cm,否则会影响地面提取
- 无动态干扰:行人、车辆等移动物体越少越好
我的小习惯:每次采集前,我会先在场地走一圈,用手机拍几张全景照片。这样后期如果标定结果异常,还能回头排查是不是场景出了问题。
你可能会问:为什么光照会影响激光雷达?嗯,虽然激光雷达不依赖可见光,但标定板上的反光材料在不同光照下反射特性会有变化。我遇到过夏天正午采集的数据,标定板边缘点云明显稀疏,就是因为太阳光太强,干扰了激光接收器。
4.2 标定板摆放策略
标定板怎么摆,这里面学问大了。我刚开始做标定时,随便摆几个位置就开始采,结果算法怎么都收敛不了。后来才明白,标定板的位姿分布,直接决定了标定参数的可观性。
标定板摆放的黄金法则:
- 覆盖整个视场:标定板要出现在激光雷达视场的各个角落——左上、右上、左下、右下、正前方
- 距离多样化:从2米到15米,每隔2-3米采集一组数据
- 角度变化:标定板平面与激光束的夹角从30°到90°都要覆盖
- 高度分层:标定板中心高度从0.5m到2.0m,每0.3m一个层级
一个典型的采集方案(我常用的):
- 距离:2m, 4m, 6m, 8m, 10m, 12m, 15m
- 水平角度:-45°, -30°, -15°, 0°, 15°, 30°, 45°
- 俯仰角度:-20°, -10°, 0°, 10°, 20°
- 每个位姿采集3帧,取平均
这样算下来,一共7×7×5×3 = 735帧数据。听起来多,但实际采集也就半小时。
我曾经在一个项目中偷懒,只摆了5个位置就收工了。结果标定出来的外参,在远距离目标上误差达到了20cm。后来老老实实补采了一轮,误差降到了3cm以内。所以,别嫌麻烦。
4.3 数据质量检查
数据采完了,别急着跑算法。先做一轮质量检查,能帮你省下大量调试时间。
检查清单:
| 检查项 | 合格标准 | 常见问题 |
|---|---|---|
| 标定板点云完整性 | 标定板表面点云覆盖率 > 80% | 标定板反光太强或太弱 |
| 点云密度均匀性 | 相邻扫描线间距偏差 < 20% | 激光雷达安装角度不当 |
| 地面点云平整度 | 地面拟合残差 < 2cm | 地面有坡度或杂物 |
| 帧间一致性 | 同一位置连续3帧偏差 < 1cm | 传感器抖动或环境变化 |
我写了一个简单的检查脚本,每次采集完都会跑一遍:
import numpy as np
import open3d as o3d
def check_point_cloud_quality(pcd, board_bbox):
"""
检查标定板点云质量
pcd: open3d点云对象
board_bbox: 标定板边界框 [xmin, ymin, zmin, xmax, ymax, zmax]
"""
# 提取标定板区域点云
points = np.asarray(pcd.points)
mask = ((points[:, 0] > board_bbox[0]) &
(points[:, 0] < board_bbox[3]) &
(points[:, 1] > board_bbox[1]) &
(points[:, 1] < board_bbox[4]) &
(points[:, 2] > board_bbox[2]) &
(points[:, 2] < board_bbox[5]))
board_points = points[mask]
# 计算覆盖率
board_area = (board_bbox[3]-board_bbox[0]) * (board_bbox[4]-board_bbox[1])
point_density = len(board_points) / board_area
print(f"标定板点云数量: {len(board_points)}")
print(f"点云密度: {point_density:.2f} 点/m²")
# 检查点云是否均匀分布
if point_density < 100:
print("⚠️ 警告:点云密度偏低,建议重新采集")
else:
print("✅ 点云密度合格")
return board_points
避坑指南:我曾经遇到过标定板点云看起来没问题,但算法就是收敛不了。排查了半天,发现是标定板边缘有反光条,导致边缘点云出现系统性偏移。从那以后,我每次都会用可视化工具把标定板区域的点云放大看一遍,确认没有异常点。
4.4 数据采集流程总结
好了,我把整个流程串起来,给你一个可以直接用的操作手册:
- 场地准备(10分钟):选好场地,清理杂物,拍照记录
- 设备检查(5分钟):确认激光雷达清洁、标定板完好、供电稳定
- 预采集(5分钟):随便摆几个位置,跑一遍检查脚本,确认系统正常
- 正式采集(30分钟):按照前面说的位姿方案,逐点采集
- 质量检查(10分钟):跑完整检查流程,不合格的位姿重新采集
- 数据归档(5分钟):按日期+场景命名文件夹,保存原始数据和检查日志
整个流程下来,大概1小时。别觉得慢,我见过太多人为了省这1小时,后面花了一整天去排查标定误差。
我的经验:数据采集就像做饭前的备菜。菜切得不好,再好的厨艺也白搭。所以,每次采集我都亲自盯着,不放心交给实习生。这不是不信任,而是吃过太多亏了。
最后说一句:数据采集规范这件事,看起来简单,但真正能做到位的人不多。你想想看,标定算法就那么几个参数,能出问题的环节其实很少。大部分标定失败,追根溯源,都是数据采集环节埋下的坑。
可可精品资料库