2、结构光系统组成:投影单元、相机单元、同步控制单元
好,咱们接着聊。上一章我把结构光的基本原理讲清楚了,说白了就是「主动投射+三角测量」那套逻辑。这一章咱们来拆解一下,一套完整的结构光系统,到底由哪几块拼起来的。
我个人习惯把结构光系统分成三大块:投影单元、相机单元、同步控制单元。缺一不可,哪块瘸了都出不了好活。
核心观点:投影单元负责「编码光场」,相机单元负责「捕获变形」,同步控制单元负责「让它们俩步调一致」。这三者的配合,决定了整个系统的精度和速度。
2.1 投影单元:DLP、LCD 还是激光?
投影单元是结构光的「嘴」,负责把编码好的图案投射到被测物体上。选什么投影方案,直接决定了你的系统能跑多快、精度多高、成本多少。
我这些年折腾下来,主流的就三种路子:DLP、LCD、激光。各有各的脾气。
| 类型 | 核心原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| DLP | 数字微镜阵列(DMD)反射调制 | 刷新率极高(>1kHz)、灰度精细、对比度好 | 价格贵、需要专用驱动 | 高速三维扫描、高精度测量 |
| LCD | 液晶面板透射调制 | 成本低、容易获取、分辨率高 | 刷新率低(60Hz)、响应慢、对比度一般 | 静态物体扫描、教学演示 |
| 激光 | 激光器+振镜/DOE衍射 | 亮度极高、抗环境光强、可做点阵/线阵 | 散斑噪声、图案单一、安全等级需注意 | 远距离测量、户外场景 |
我的经验:如果你只是做实验或者验证算法,买个二手DLP开发板(比如TI的LightCrafter系列)是最省心的。我当年为了省钱用LCD投影,结果拍运动物体全是拖影,后来老老实实换了DLP——有些坑,踩过一次就记住了。
2.2 相机单元:工业相机 vs 普通摄像头
相机是结构光的「眼睛」。它负责拍下被物体表面调制过的变形图案。选相机时,我主要看三个指标:帧率、分辨率、同步能力。
你想想看,投影仪在高速切换图案,相机如果跟不上,那拍出来的东西就是乱的。所以工业相机和普通摄像头的区别,就在这里体现出来了。
- 工业相机:支持硬件触发(GPIO)、全局快门、高帧率(几百到几千fps)。适合做精密测量和动态扫描。缺点是贵,而且需要自己写驱动。
- 普通摄像头:比如USB摄像头、手机摄像头。成本低、即插即用,但大多是卷帘快门,拍运动物体会变形。而且同步只能靠软件,延迟不稳定。
注意:千万别用卷帘快门的摄像头拍高速移动的物体!我有个朋友用普通摄像头拍旋转的齿轮,结果拍出来的条纹全是歪的,解出来的三维点云像麻花一样。嗯,后来他换了全局快门的工业相机,问题就解决了。
我个人建议,如果预算允许,至少选一个带硬件触发输入的工业相机。品牌方面,Basler、海康、大恒都行,关键是看传感器尺寸和像元大小。
2.3 同步控制单元:让投影和相机「对齐」
同步控制,说白了就是让投影仪和相机「步调一致」。投影仪每切换一张图案,相机就要在正确的时间点拍一张。如果不同步,你拍到的可能是两张图案的混合体——那数据就没法用了。
同步方式主要有两种:
- 硬件同步:用单片机或FPGA产生触发信号,同时给投影仪和相机。延迟可以控制在微秒级。这是工业级系统的标配。
- 软件同步:通过代码控制投影和相机交替工作。简单,但延迟大(几十毫秒),只适合静态场景。
避坑指南:我曾经用Arduino做硬件同步,结果发现投影仪的「图案切换完成」信号和相机的「曝光开始」信号之间有个固定的延迟。后来我在代码里加了一个可调的延时参数,才把时序调准。所以,做同步时一定要留出调试接口。
下面是一个简单的硬件同步时序示例(伪代码):
// 伪代码:硬件同步控制
void setup() {
pinMode(TRIGGER_OUT, OUTPUT); // 触发投影切换
pinMode(CAMERA_TRIG, OUTPUT); // 触发相机拍照
pinMode(PROJECTOR_READY, INPUT); // 检测投影就绪
}
void loop() {
for (int i = 0; i < NUM_PATTERNS; i++) {
// 1. 触发投影切换到第i张图案
digitalWrite(TRIGGER_OUT, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_OUT, LOW);
// 2. 等待投影就绪信号
while (digitalRead(PROJECTOR_READY) == LOW);
// 3. 触发相机拍照
digitalWrite(CAMERA_TRIG, HIGH);
delayMicroseconds(50); // 曝光时间可调
digitalWrite(CAMERA_TRIG, LOW);
// 4. 等待相机完成
delay(10);
}
}
这段代码的逻辑很简单:先让投影切图,等它准备好了,再让相机拍。实际项目中,你还需要考虑曝光时间、图案切换时间、数据传输时间等因素。
2.4 三个单元的协同工作
好,现在我们把三个单元串起来,看看它们是怎么配合的:
- 投影单元按顺序投射一系列编码图案(比如格雷码、相移条纹)。
- 相机单元在同步信号的控制下,逐帧捕获被物体调制后的图案。
- 同步控制单元确保每一帧的投射和拍摄严格对齐。
- 最后,计算机把拍到的图像序列拿去解算,得到三维点云。
整个过程就像一场精心编排的舞蹈——投影是领舞,相机是跟舞,同步控制就是那个打拍子的指挥。哪个环节慢了半拍,整个舞就乱了。
小技巧:调试阶段,我习惯先用一个静态的白色平板做标定物。如果拍出来的条纹图案清晰、没有重影,说明同步没问题。如果条纹有断裂或者模糊,先检查同步时序,再检查对焦和曝光。
好了,这一章就聊到这里。下一章咱们会深入讲讲投影图案的设计——格雷码、相移、二值条纹,这些东西到底怎么选、怎么用。到时候见。
公众号:蓝海资料掘金营,微信deep3321