一、激光三角测距原理:从几何到实战
激光三角测距,说白了就是利用几何关系算距离。
我刚开始接触这个原理时,觉得它太简单了——不就是相似三角形吗?但真正做项目时才发现,越简单的原理,坑越多。
1.1 基本原理
想象一下:你有一束激光,打在被测物体上。物体表面会形成一个光斑。这个光斑被相机拍到,在图像上有一个像素位置。
物体离得近,光斑在图像上的位置偏左;离得远,偏右。就这么简单。
数学上,我们用这个公式:
Z = (f * b) / (d + f * tan(θ))
其中:
- Z:物体到激光器的距离(我们要算的值)
- f:相机焦距
- b:激光器与相机之间的基线长度
- d:光斑在图像上的偏移量(像素)
- θ:激光器与相机光轴之间的夹角
核心要点:基线b越长,测量精度越高,但盲区也越大。这是个trade-off。
1.2 我在项目中踩过的坑
有一次做高精度扫描,我选了很长的基线,觉得精度肯定没问题。结果被测物体表面有镜面反射,光斑直接飞了,根本拍不到。
后来我学乖了:
- 对于高反光物体,适当缩短基线,让入射角更垂直
- 或者加偏振片,滤掉镜面反射
小技巧:实际调试时,先用一张白纸放在目标位置,看看光斑是否清晰。如果光斑散得厉害,先调激光聚焦,再动相机光圈。
二、线激光 vs 点激光:选对工具干对活
点激光和线激光,名字听着像,但用法完全不同。
2.1 点激光
点激光只打一个点。你想想看,一次只能测一个点的距离。
优点:
- 精度高,通常能到微米级
- 对表面要求低,粗糙、反光都能对付
- 数据处理简单,就一个点
缺点:
- 慢!要扫描一个面,得一点一点挪
- 需要配合运动机构,成本高
我个人习惯用点激光做高精度检测,比如测量某个关键尺寸。但做三维重建?太慢了,不推荐。
2.2 线激光
线激光打出一条线。相机一拍,整条线上的深度信息全有了。
优点:
- 快!一次采集一条线,效率高
- 适合扫描大范围物体
- 配合运动平台,可以快速生成点云
缺点:
- 精度不如点激光,因为线激光的光斑更粗
- 对表面纹理敏感,纯黑或透明物体容易丢线
注意:线激光扫描时,如果物体表面有深色区域,激光线可能会断掉。我曾经扫描一个黑色塑料件,结果中间一段完全没数据。后来喷了显影剂才搞定。
2.3 怎么选?
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 精密尺寸测量 | 点激光 | 精度优先 |
| 三维重建(小物体) | 线激光 | 效率高 |
| 三维重建(大场景) | 线激光 + 多线 | 覆盖范围大 |
| 高反光表面 | 点激光 + 偏振 | 抗干扰强 |
三、相机与激光的标定基础
标定,说白了就是让相机和激光「对齐」。不标定,你测出来的数据全是歪的。
3.1 为什么要标定?
你想想看,相机和激光器是分开装的。它们之间的位置关系,安装时不可能完全精确。哪怕差0.1毫米,测出来的距离可能差好几毫米。
标定的目的就是算出这个位置关系——我们叫它「外参」。
3.2 标定流程
我一般分三步走:
- 相机内参标定:用棋盘格,拍十几张照片,算出相机的焦距、畸变参数
- 激光平面标定:让激光打在棋盘格上,拍下不同位置的照片,算出激光平面在相机坐标系下的方程
- 联合标定:把前两步的结果合起来,算出最终的转换关系
关键点:第二步最容易出错。激光线在棋盘格上的位置,必须精确提取到亚像素级别。我习惯用高斯拟合来找激光线的中心,比直接取最大值稳定得多。
3.3 代码示例:激光线中心提取
// 伪代码:提取激光线中心
function extractLaserCenter(image, row) {
// 1. 取该行的像素灰度值
int[] intensities = image.getRow(row);
// 2. 找到最大值位置
int maxIdx = argmax(intensities);
// 3. 在最大值附近做高斯拟合
// 取 maxIdx-2 到 maxIdx+2 共5个点
double center = gaussianFit(intensities, maxIdx);
return center; // 亚像素精度
}
这段代码看着简单,但实际调试时,我遇到过激光线太粗、太细、断线等各种情况。嗯,这里要注意:如果激光线宽度超过10个像素,先调激光焦距,别急着改代码。
3.4 标定验证
标定完怎么知道对不对?
我的做法是:找一个已知高度的标准块(比如10mm高的量块),放在扫描区域内。用标定好的系统测一下,看误差在不在允许范围内。
如果误差超过0.1mm,我会重新检查标定数据。最常见的问题是:
- 棋盘格照片拍得太少(至少15张)
- 激光线提取不准(试试调小相机光圈)
- 棋盘格不平整(换玻璃基板的棋盘格)
避坑指南:我曾经用打印在纸上的棋盘格做标定,结果纸有褶皱,标定出来的参数全是错的。后来换了陶瓷棋盘格,一次搞定。
四、本章知识体系
下面这张图,是我自己总结的本章知识结构。你可以把它当成一个「地图」,学完本章后对照着检查自己掌握了多少。
这张图把本章的三个核心内容串起来了。你从左上角开始看:先理解三角测距的几何原理,然后根据应用场景选点激光还是线激光,最后通过标定把系统校准到最佳状态。
嗯,这三步缺一不可。我见过有人跳过标定直接扫描,结果点云全是扭曲的,白费功夫。