拓冰建站拓冰建站
首页 / 资讯中心 / 正文

3D视觉感知选型指南:结构光、双目、iToF、dToF原理与实战

3D视觉感知这两年从实验室走向产线的速度明显加快了。我最早接触这块是在做工业检测项目的时候当时用一台结构光相机做小零件的三维尺寸测量踩了不少坑也积累了一些经验。现在回过头看3D视觉感知的底层技术路线其实就那么几条——结构光、双目、iToF、dToF但每条路线背后的物理原理、工程实现和适用场景差异非常大。选错了方案轻则精度不够重则整个项目推倒重来。这篇文章主要面向刚入行或者准备做3D视觉选型的工程师也会涉及一些底层原理和实操细节。我会把结构光、双目、iToF、dToF这四条技术路线拆开讲清楚包括它们各自的核心原理、关键参数、标定方法、常见问题以及在不同产业场景下怎么选。文章里提到的参数和步骤一部分来自我自己的项目经验一部分来自和同行交流的总结具体数值需要根据你的实际场景调整。1. 四条技术路线的底层原理与核心差异1.1 结构光用已知图案编码深度信息结构光的核心思路其实很直观我主动投射一个已知图案到物体表面然后用相机拍下图案被物体表面调制后的变形情况通过三角测量原理反算出每个像素的深度。这就像你在黑暗中用手电筒照一面凹凸不平的墙光斑的变形程度反映了墙面的起伏。结构光根据投射图案的不同又分为几种常见类型。散斑结构光投射的是随机散斑图案通过块匹配算法计算视差苹果Face ID用的就是这种方案。编码结构光投射的是正弦条纹或者格雷码图案通过相位解算获取深度精度更高适合工业测量。还有条纹投影轮廓术本质上是编码结构光的一种用相移法加多频外差来解相位能实现微米级精度。结构光的关键参数包括投射图案的周期、相机的分辨率、基线距离投影器和相机之间的距离、以及标定精度。基线越长深度分辨率越高但遮挡问题也更严重。投射图案的周期越短空间分辨率越高但容易产生相位模糊需要多频解包裹。注意结构光对高反光表面和透明物体基本无能为力。我试过用结构光测抛光金属件结果深度图全是噪点后来换成喷显影剂才勉强能用但这就变成破坏性检测了。1.2 双目立体视觉模仿人眼的被动测距双目方案不主动投射任何光纯粹靠两个相机从不同角度拍摄同一场景通过匹配左右图像中的同名点来计算视差再根据三角测量原理得到深度。这和人眼判断距离的原理一样——两只眼睛看到的画面有微小差异大脑根据这个差异感知深度。双目方案的核心难点在于立体匹配。对于纹理丰富的场景比如户外建筑、自然景观匹配算法很容易找到同名点。但对于纹理稀疏或者重复纹理的场景比如白墙、金属表面、棋盘格匹配就会大量出错。这也是为什么纯双目方案在工业场景中往往需要额外投射纹理光。双目相机的关键参数包括基线距离、焦距、分辨率、以及标定精度。基线越长深度精度越高但盲区也越大。焦距越长远处精度越高但视场角越小。实际选型时需要在精度、视场角和盲区之间做权衡。双目相机标定是双目方案中最关键的环节。标定质量直接决定了后续测距精度。常用的标定方法有张正友标定法通过拍摄多组不同姿态的棋盘格图像计算相机的内参、外参和畸变系数。标定完成后还需要做立体校正让左右图像的极线水平对齐这样匹配时只需要在同一行搜索同名点大大降低计算量。1.3 iToF通过相位差测量飞行时间iToF间接飞行时间的原理是发射一个调制过的光信号比如正弦波调制然后测量接收到的光信号相对于发射信号的相位差通过相位差反推飞行时间再乘以光速得到距离。这就像你对着山谷喊一声听回声延迟来判断距离只不过iToF用的是光而不是声音。iToF的核心优势是可以在一个像素内完成深度计算不需要像结构光那样做图案解码也不需要像双目那样做立体匹配。这使得iToF的深度图分辨率可以做到很高而且帧率也可以很高。但iToF的精度受调制频率限制通常在高频调制下精度更高但测量范围更小。iToF的常见问题包括多路径干扰和运动模糊。多路径干扰是指光线在场景中经过多次反射才到达传感器导致相位差测量错误。运动模糊是指物体在曝光时间内移动导致相位差混叠。这两个问题在动态场景中尤其明显。1.4 dToF直接测量光子飞行时间dToF直接飞行时间的原理更直接发射一个短脉冲光然后用高精度计时器测量光脉冲从发射到接收的时间差直接乘以光速得到距离。这就像用秒表测量光跑一个来回的时间。dToF的核心优势是测量范围远、抗多路径干扰能力强。因为dToF测量的是单个光脉冲的到达时间多路径反射的光脉冲到达时间不同可以通过时间门控滤除。这使得dToF非常适合远距离测量比如激光雷达、无人机避障。dToF的难点在于需要高精度的时间数字转换器TDC以及高灵敏度的单光子探测器SPAD。这两个器件的制造工艺要求很高成本也相对较高。另外dToF的像素填充率通常较低因为每个像素都需要独立的TDC和SPAD导致深度图分辨率不如iToF。1.5 四条路线的核心差异对比技术路线测距原理精度测量范围分辨率抗环境光成本典型场景结构光三角测量图案解码高微米级近0.1-1m高中中工业检测、人脸识别双目三角测量立体匹配中毫米级中0.5-10m中高低自动驾驶、机器人导航iToF相位差测距中厘米级中0.5-5m高低中手机、AR/VRdToF脉冲飞行时间中厘米级远1-200m低高高激光雷达、无人机这张表是选型时的第一参考。但实际选型还要考虑具体场景的约束比如功耗、体积、帧率、接口等。下面我会针对每个技术路线展开讲实操细节。2. 结构光三维重建的完整实操流程2.1 系统搭建与硬件选型结构光系统的硬件核心是投影器和相机。投影器负责投射已知图案相机负责拍摄变形图案。投影器的选择要考虑分辨率、亮度、焦距和投射图案的可编程性。DLP投影器因为像素级可控是结构光系统中最常用的投影器。相机的选择要考虑分辨率、帧率、曝光时间和接口。基线距离是结构光系统设计中最关键的参数之一。基线越长深度分辨率越高但遮挡区域也越大。基线距离的计算公式是深度分辨率 ΔZ Z² × Δd / (f × B)其中Z是工作距离Δd是视差精度f是相机焦距B是基线距离。从这个公式可以看出深度分辨率与工作距离的平方成正比与基线距离和焦距成反比。所以如果要提高深度分辨率要么缩短工作距离要么增大基线距离或焦距。我一般会先确定工作距离和视场角然后根据精度要求反推基线距离。比如工作距离500mm要求深度分辨率0.1mm视差精度0.1像素相机焦距8mm那么基线距离大约需要B Z² × Δd / (f × ΔZ) 500² × 0.1 / (8 × 0.1) 31250mm这个数值显然不现实说明单靠增大基线距离无法达到这个精度。实际中需要结合相位解算算法来提高视差精度比如相移法可以把视差精度做到0.01像素甚至更高。2.2 标定结构光系统的精度基石结构光标定包括相机标定和投影器标定。相机标定用张正友标定法拍摄多组不同姿态的棋盘格图像计算内参和畸变系数。投影器标定稍微复杂一些因为投影器不能直接拍照需要借助相机来完成。投影器标定的常用方法是把棋盘格标定板放在工作区域内相机拍摄标定板同时投影器投射棋盘格图案到标定板上相机再拍摄一次。通过两次拍摄的对应关系可以计算出投影器的内参和外参。这个过程需要反复多次每次改变标定板的姿态。注意标定板的平整度直接影响标定精度。我试过用打印的棋盘格结果因为纸张不平整导致标定误差很大。后来换成陶瓷标定板精度明显提升。如果预算有限至少要用铝板贴打印纸并且确保贴平。标定完成后需要验证标定精度。常用的方法是测量一个已知尺寸的标准件比如标准球或者量块比较测量值和真实值的偏差。如果偏差超过预期需要重新标定或者检查标定板姿态是否覆盖了足够多的角度。2.3 图案投射与相位解算结构光的图案投射策略直接影响重建精度和速度。常用的图案包括相移条纹、格雷码、散斑等。相移法通过投射多幅相位不同的条纹图案解算出每个像素的相位值。常用的相移步数是3步、4步或5步。步数越多相位精度越高但采集时间也越长。相位解算的公式以4步相移为例I1 A B × cos(φ) I2 A B × cos(φ π/2) I3 A B × cos(φ π) I4 A B × cos(φ 3π/2) φ arctan((I4 - I2) / (I1 - I3))其中A是背景光强B是调制幅度φ是相位值。解算出的相位值在[-π, π]之间需要通过相位解包裹来恢复绝对相位。常用的解包裹方法有多频外差法、格雷码辅助法等。多频外差法的思路是投射多个不同频率的条纹图案低频条纹用于粗解包裹高频条纹用于精解包裹。通过不同频率之间的相位差可以逐步恢复绝对相位。这种方法精度高但需要投射多组图案采集时间较长。格雷码辅助法的思路是投射格雷码图案对相位周期进行编码通过解码格雷码确定每个像素属于哪个周期从而恢复绝对相位。这种方法只需要额外投射几幅格雷码图案采集时间较短但格雷码边缘容易出错需要额外的校正。2.4 点云生成与后处理相位解算完成后每个像素的绝对相位值可以转换为深度值。转换公式取决于系统标定参数Z f × B / (φ × P / 2π f × tan(θ))其中f是相机焦距B是基线距离φ是绝对相位P是条纹周期θ是投影角度。这个公式是简化版实际中还需要考虑相机和投影器的畸变、主点偏移等因素。点云生成后需要进行后处理包括滤波、去噪、平滑、配准等。常用的滤波方法有中值滤波、高斯滤波、双边滤波。中值滤波适合去除椒盐噪声高斯滤波适合平滑表面双边滤波可以在平滑的同时保留边缘。实操心得结构光点云在物体边缘处容易出现飞点这是因为边缘处相位解算容易出错。我一般会用深度图的一致性检查来去除飞点具体做法是比较相邻像素的深度值如果差异超过阈值就标记为无效点。点云配准是将多个视角的点云对齐到同一个坐标系。常用的配准算法是ICP迭代最近点通过迭代优化刚体变换矩阵最小化两个点云之间的距离。ICP对初始位姿敏感通常需要粗配准加精配准两步。3. 双目相机标定与测距的实操细节3.1 双目相机标定的完整步骤双目相机标定的目标是获取左右相机的内参、外参和畸变系数以及两个相机之间的旋转和平移关系。标定质量直接决定了后续测距精度所以这一步不能马虎。标定流程如下准备标定板。常用的是棋盘格标定板方格尺寸根据工作距离选择。工作距离越近方格尺寸越小。我一般用方格尺寸为工作距离的1/10左右。比如工作距离1m方格尺寸用100mm。固定双目相机。标定过程中相机不能移动否则标定结果无效。我一般用铝型材搭建一个稳固的支架把相机固定在上面。采集标定图像。左右相机同时拍摄标定板标定板需要覆盖整个视场并且要有不同的姿态。一般需要采集15-30组图像姿态要尽量多样化包括不同角度、不同距离、不同位置。提取角点。用OpenCV的findChessboardCorners函数提取棋盘格角点然后用cornerSubPix做亚像素优化。单目标定。分别对左右相机做单目标定计算内参和畸变系数。双目标定。用stereoCalibrate函数计算两个相机之间的旋转和平移关系。立体校正。用stereoRectify函数计算校正映射表然后用initUndistortRectifyMap和remap函数对图像做校正。验证标定精度。用stereoRectify函数返回的重投影误差评估标定质量。重投影误差小于0.5像素算合格小于0.2像素算优秀。import cv2 import numpy as np # 棋盘格参数 pattern_size (9, 6) square_size 100 # mm # 准备标定板的世界坐标 objp np.zeros((pattern_size[0] * pattern_size[1], 3), np.float32) objp[:, :2] np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2) objp * square_size # 存储角点 objpoints [] imgpoints_left [] imgpoints_right [] # 读取标定图像 for i in range(num_images): img_left cv2.imread(fleft_{i}.png) img_right cv2.imread(fright_{i}.png) gray_left cv2.cvtColor(img_left, cv2.COLOR_BGR2GRAY) gray_right cv2.cvtColor(img_right, cv2.COLOR_BGR2GRAY) ret_left, corners_left cv2.findChessboardCorners(gray_left, pattern_size, None) ret_right, corners_right cv2.findChessboardCorners(gray_right, pattern_size, None) if ret_left and ret_right: objpoints.append(objp) imgpoints_left.append(corners_left) imgpoints_right.append(corners_right) # 单目标定 ret_left, mtx_left, dist_left, _, _ cv2.calibrateCamera( objpoints, imgpoints_left, gray_left.shape[::-1], None, None) ret_right, mtx_right, dist_right, _, _ cv2.calibrateCamera( objpoints, imgpoints_right, gray_right.shape[::-1], None, None) # 双目标定 ret, mtx_left, dist_left, mtx_right, dist_right, R, T, E, F cv2.stereoCalibrate( objpoints, imgpoints_left, imgpoints_right, mtx_left, dist_left, mtx_right, dist_right, gray_left.shape[::-1], flagscv2.CALIB_FIX_INTRINSIC) # 立体校正 R1, R2, P1, P2, Q, _, _ cv2.stereoRectify( mtx_left, dist_left, mtx_right, dist_right, gray_left.shape[::-1], R, T, alpha0) # 生成校正映射表 map1_left, map2_left cv2.initUndistortRectifyMap( mtx_left, dist_left, R1, P1, gray_left.shape[::-1], cv2.CV_32FC1) map1_right, map2_right cv2.initUndistortRectifyMap( mtx_right, dist_right, R2, P2, gray_right.shape[::-1], cv2.CV_32FC1)3.2 立体匹配与视差计算立体匹配是双目测距的核心步骤。匹配质量直接决定了深度图的质量。常用的立体匹配算法分为局部算法和全局算法。局部算法计算速度快但精度较低适合实时应用。全局算法精度高但计算量大适合离线处理。OpenCV提供了多种立体匹配算法包括StereoBM、StereoSGBM、以及基于深度学习的算法。StereoBM是块匹配算法速度快但精度一般。StereoSGBM是半全局匹配算法精度较高速度也还可以是实际项目中最常用的。StereoSGBM的关键参数包括minDisparity最小视差通常设为0numDisparities视差范围必须是16的倍数。这个参数决定了可测量的深度范围视差范围越大可测量的深度范围越大但计算量也越大。blockSize匹配块大小必须是奇数。块越大匹配越稳定但边缘越模糊。一般设为5-11。P1、P2平滑惩罚系数。P1是视差变化1的惩罚P2是视差变化大于1的惩罚。P2通常设为P1的4倍左右。uniquenessRatio唯一性比率用于滤除误匹配。一般设为5-15。speckleWindowSize散斑窗口大小用于滤除小连通区域的噪声。speckleRange散斑范围用于控制散斑滤波的强度。# StereoSGBM参数 min_disp 0 num_disp 16 * 6 # 必须是16的倍数 block_size 5 stereo cv2.StereoSGBM_create( minDisparitymin_disp, numDisparitiesnum_disp, blockSizeblock_size, P18 * 3 * block_size ** 2, P232 * 3 * block_size ** 2, disp12MaxDiff1, uniquenessRatio10, speckleWindowSize100, speckleRange32, modecv2.STEREO_SGBM_MODE_SGBM_3WAY ) # 计算视差 disparity stereo.compute(gray_left_rect, gray_right_rect).astype(np.float32) / 16.0 # 视差转深度 f P1[0, 0] # 校正后的焦距 B np.linalg.norm(T) # 基线距离 depth f * B / (disparity min_disp)3.3 双目测距的精度分析与优化双目测距的精度受多个因素影响包括基线距离、焦距、视差精度、标定精度等。深度精度与视差精度的关系是ΔZ Z² × Δd / (f × B)从这个公式可以看出深度精度与工作距离的平方成正比。也就是说工作距离越远深度精度越差。这是双目方案的一个固有局限。比如基线100mm焦距8mm视差精度0.1像素在工作距离1m处的深度精度是ΔZ 1000² × 0.1 / (8 × 100) 125mm这个精度显然不够用。要提高精度要么增大基线距离要么提高视差精度。增大基线距离到500mm深度精度可以提升到25mm。提高视差精度到0.01像素深度精度可以提升到12.5mm。实操心得双目方案在实际项目中我一般会配合纹理投射来改善匹配效果。对于纹理稀疏的场景投射随机散斑图案可以显著提高匹配成功率。这本质上把双目方案变成了结构光方案但保留了双目方案的灵活性。4. iToF与dToF的工程实现与选型要点4.1 iToF的调制解调与深度计算iToF的核心是调制和解调。发射端用正弦波调制光源接收端用相同频率的信号解调。通过测量发射信号和接收信号之间的相位差计算飞行时间。iToF的深度计算公式是d c × φ / (4π × f_mod)其中c是光速φ是相位差f_mod是调制频率。从公式可以看出调制频率越高深度分辨率越高但测量范围越小。测量范围与调制频率的关系是d_max c / (2 × f_mod)比如调制频率100MHz测量范围是1.5m。调制频率50MHz测量范围是3m。实际中需要在精度和范围之间做权衡。iToF的常见问题包括多路径干扰光线在场景中多次反射导致相位差测量错误。解决方法包括使用高频调制、时间门控、或者多频率测量。运动模糊物体在曝光时间内移动导致相位差混叠。解决方法包括缩短曝光时间、使用全局快门、或者运动补偿算法。环境光干扰强环境光会降低信噪比。解决方法包括使用窄带滤光片、提高发射功率、或者差分测量。4.2 dToF的单光子探测与时间测量dToF的核心是单光子探测和时间测量。发射端发射短脉冲光接收端用SPAD探测单个光子用TDC测量光子到达时间。通过多次测量统计光子到达时间的分布可以计算出距离。dToF的深度计算公式是d c × t / 2其中c是光速t是光子飞行时间。dToF的精度取决于TDC的时间分辨率。TDC的时间分辨率越高测距精度越高。常用的TDC时间分辨率在几十皮秒到几百皮秒之间。100皮秒的时间分辨率对应15mm的测距精度。dToF的常见问题包括背景光干扰强背景光会产生大量噪声光子淹没信号光子。解决方法包括使用窄带滤光片、时间门控、或者符合测量。死区时间SPAD在探测到一个光子后需要一段时间恢复这段时间内无法探测新光子。解决方法包括使用SPAD阵列、或者降低光子通量。堆叠效应当多个光子同时到达时TDC只能记录第一个光子的到达时间导致测距偏差。解决方法包括使用多通道TDC、或者降低光子通量。4.3 四条路线的选型决策树选型时我一般会按以下顺序考虑精度要求如果要求微米级精度选结构光。如果要求毫米级精度选双目或iToF。如果要求厘米级精度选dToF。测量范围如果测量范围在1m以内选结构光。如果测量范围在1-10m选双目或iToF。如果测量范围在10m以上选dToF。环境光条件如果环境光很强选双目或dToF。如果环境光可控选结构光或iToF。动态场景如果场景是动态的选iToF或dToF。如果场景是静态的选结构光或双目。成本预算如果预算有限选双目。如果预算充足选结构光或dToF。场景推荐方案理由工业零件尺寸测量结构光精度高适合静态场景人脸识别结构光或iToF精度要求中等适合近距离自动驾驶双目dToF远距离强环境光机器人导航双目或dToF中等距离动态场景手机ARiToF低功耗小体积无人机避障dToF远距离强环境光5. 常见问题与排查技巧实录5.1 结构光常见问题速查问题可能原因排查方法解决方案深度图噪点多环境光干扰遮挡环境光对比深度图加窄带滤光片提高投射功率边缘飞点相位解算错误检查相位图边缘一致性检查中值滤波高反光表面失效镜面反射观察投射图案喷显影剂或者换双目方案标定精度差标定板不平整检查标定板换陶瓷标定板重新标定深度图有周期性条纹相位解包裹错误检查绝对相位图增加频率优化解包裹算法5.2 双目常见问题速查问题可能原因排查方法解决方案匹配错误多纹理稀疏观察左右图像投射纹理光或者换结构光深度图有空洞遮挡区域检查视差图多视角融合或者换基线测距偏差大标定不准检查重投影误差重新标定增加标定图像远处精度差基线太短计算深度精度增大基线或者换dToF实时性差算法太慢检查计算耗时用GPU加速或者换局部算法5.3 iToF与dToF常见问题速查问题可能原因排查方法解决方案深度图有波纹多路径干扰观察波纹模式多频率测量时间门控运动物体模糊运动模糊检查曝光时间缩短曝光全局快门强光下失效环境光干扰对比不同光照窄带滤光片差分测量测距范围不够调制频率太高计算测量范围降低调制频率测距精度不够调制频率太低计算深度分辨率提高调制频率实操心得结构光标定完成后我一般会用一个标准球验证精度。标准球的直径是已知的用点云拟合球面比较拟合直径和真实直径的偏差。如果偏差超过预期说明标定有问题。这个方法比单纯看重投影误差更直观。5.4 点云后处理的几个实用技巧点云后处理是3D视觉中容易被忽视但非常重要的环节。原始点云往往包含大量噪声和无效点直接使用会导致测量误差。我一般会做以下几件事第一无效点滤除。深度图中值为0或者超过测量范围的点都是无效点需要滤除。另外视差图中的遮挡区域和匹配失败区域也是无效点。第二离群点滤除。用统计滤波或者半径滤波去除离群点。统计滤波的思路是计算每个点到其最近k个点的平均距离如果平均距离超过阈值就认为是离群点。半径滤波的思路是计算每个点半径r内的邻居数如果邻居数少于阈值就认为是离群点。第三平滑滤波。用双边滤波或者引导滤波平滑点云同时保留边缘。双边滤波的权重由空间距离和深度差共同决定可以在平滑的同时保留边缘。第四点云配准。多视角点云需要配准到同一个坐标系。我一般用粗配准加精配准的策略。粗配准用特征匹配比如FPFH特征加RANSAC。精配准用ICP迭代优化刚体变换矩阵。import open3d as o3d # 读取点云 pcd o3d.io.read_point_cloud(point_cloud.ply) # 统计滤波 cl, ind pcd.remove_statistical_outlier(nb_neighbors20, std_ratio2.0) pcd_filtered pcd.select_by_index(ind) # 半径滤波 cl, ind pcd_filtered.remove_radius_outlier(nb_points16, radius0.05) pcd_filtered pcd_filtered.select_by_index(ind) # 双边滤波 pcd_filtered pcd_filtered.filter_smooth_bilateral( number_of_iterations5, sigma_s0.01, sigma_r0.01 ) # 保存 o3d.io.write_point_cloud(point_cloud_filtered.ply, pcd_filtered)6. 产业应用场景与选型建议6.1 工业检测精度优先工业检测是3D视觉最成熟的应用场景之一。常见的检测项目包括尺寸测量、表面缺陷检测、装配验证等。这些场景对精度要求很高通常要求微米级到亚毫米级精度。结构光是首选方案因为结构光的精度可以做到很高而且适合静态场景。工业检测中结构光的典型配置是DLP投影器加工业相机基线距离根据工作距离和精度要求确定。工作距离通常在200-500mm之间精度要求在0.01-0.1mm之间。标定用陶瓷标定板标定精度控制在0.1像素以内。注意工业检测中经常遇到高反光表面和透明物体。高反光表面可以用喷显影剂解决但透明物体基本无解。我试过用结构光测玻璃件结果深度图全是噪点。后来换成双目加纹理投射效果也不理想。最后是用CT扫描才解决问题。所以选型时一定要先确认物体表面特性。6.2 消费电子功耗与体积优先消费电子是3D视觉增长最快的应用场景包括手机人脸识别、AR/VR、扫地机器人等。这些场景对功耗和体积要求很高精度要求相对较低。iToF和结构光都是常见方案。手机人脸识别早期用结构光后来逐渐转向iToF。结构光的优势是精度高但功耗和体积较大。iToF的优势是功耗低、体积小但精度稍差。苹果Face ID用的是结构光但其他安卓厂商大多用iToF或者双目。AR/VR中3D视觉主要用于手势识别和空间定位。iToF因为帧率高、功耗低是首选方案。dToF因为测量范围远适合AR/VR中的远距离定位。6.3 自动驾驶远距离与强环境光优先自动驾驶是3D视觉要求最高的应用场景之一。要求测量范围远、抗环境光强、可靠性高。dToF是首选方案因为dToF的测量范围可以做到200m以上而且抗环境光能力强。激光雷达本质上就是dToF的一种实现。双目在自动驾驶中也有应用但主要用于近距离和中距离。特斯拉早期用双目方案后来转向纯视觉方案。双目方案的优势是成本低但精度和可靠性不如dToF。实操心得自动驾驶中的3D视觉对可靠性要求极高任何误判都可能导致严重事故。所以选型时一定要留足冗余比如用dToF加双目融合或者用多传感器融合。我参与过一个自动驾驶项目用dToF加双目加毫米波雷达融合虽然成本高但可靠性确实好很多。6.4 机器人导航实时性与成本优先机器人导航是3D视觉的另一个重要应用场景。要求实时性高、成本低、功耗低。双目和dToF都是常见方案。双目方案成本低但精度和可靠性一般。dToF方案精度高但成本也高。扫地机器人是机器人导航中出货量最大的品类。早期用双目方案后来逐渐转向dToF。dToF的优势是测量范围远、抗环境光强适合扫地机器人的导航需求。但dToF的成本较高所以低端扫地机器人仍然用双目方案。AGV和AMR是工业机器人导航的主要品类。这些场景对精度要求较高通常用双目加dToF融合方案。双目用于近距离避障dToF用于远距离导航。6.5 选型决策的五个关键问题在实际选型时我一般会问五个问题第一精度要求是多少微米级选结构光毫米级选双目或iToF厘米级选dToF。第二测量范围是多少1m以内选结构光1-10m选双目或iToF10m以上选dToF。第三环境光条件如何强环境光选双目或dToF可控环境光选结构光或iToF。第四场景是静态还是动态静态选结构光或双目动态选iToF或dToF。第五成本和功耗预算多少预算有限选双目预算充足选结构光或dToF。这五个问题回答清楚了选型基本就确定了。当然实际项目中还需要考虑接口、体积、帧率、可靠性等因素但核心决策逻辑就是这五个问题。我在实际项目中踩过的最大坑是选型时只看精度参数忽略了环境光条件。有一次用结构光做户外检测结果白天完全没法用深度图全是噪点。后来换成双目加纹理投射才解决问题。所以选型时一定要综合考虑所有因素不能只看单一指标。最后分享一个小技巧如果预算允许建议同时准备两套方案比如结构光加双目或者iToF加dToF。这样可以在不同场景下切换使用也可以互相验证。我现在的项目基本都会做双方案冗余虽然成本高一些但可靠性提升很明显。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门