☰
机器人视觉避障方案选型:单目、双目、ToF、光流与SLAM
2026/9/29 13:23:11 网站建设 项目流程

1. 视觉避障这件事,究竟在解决什么麻烦

机器人、无人机在天上飞或者在地上跑,最怕的两件事:一是撞上障碍物,二是在没有卫星定位的环境里迷路。视觉避障要解决的,就是用摄像头这一套“眼睛”,把周围环境看明白,然后判断哪些地方能走、哪些地方走不了。这件事听起来直白,做起来却是一整套从硬件到算法的链条工程。我接触过的项目里,凡是叫得上名字的移动平台,避障模块几乎都是整套系统里返工次数最多的部分——因为它牵扯到光学、标定、算力、时延、控制、决策这一整条链路,任何一个环节掉链子,最后的表现都是“撞了”或者“急停”。

这里要先说清楚一个前提:视觉避障并不是要替代其他避障手段,而是和超声波、毫米波雷达、激光雷达、红外这些传感器一起组成冗余系统。视觉的强项在于信息量大、成本可控、能识别语义(比如认得出前面是个人还是堵墙),弱项在于对光照、纹理、算力都挑剔。搞清楚每种视觉避障方式的边界,比背一堆参数有用得多。

注意:别把“视觉避障”和“视觉导航”混为一谈。前者关心的是几米内的局部避让,后者关心的是全局路径规划与定位。两者经常共用一个相机,但算法模块和实时性要求完全不同。

这篇文章适合谁看?如果你正在做ROS2机器人开发、无人机飞控选型、工业AGV/AMR设计,或者手头有个毕业设计要搭避障系统,那么下面这些内容能帮你少走弯路。我会把主流的几种视觉避障方式拆开讲清楚各自的门道、参数怎么算、坑在哪,尽量让你看完能直接动手。

2. 主流视觉避障方式逐条拆解

视觉避障的分类维度很多,按相机数量、按测距原理、按数据处理方式都能分。我习惯按“怎么获得深度信息”来分,因为深度信息才是避障的核心。下面这几种是实际项目里最常遇到的。

2.1 单目视觉避障:最便宜,也最考验算法

单目方案就是一颗普通相机,成本低到几十块钱就能起步,这对量产项目诱惑极大。它的原理是:从单张图像里通过特征提取、光流、或者深度学习模型去推断物体距离和运动趋势。经典的做法包括特征点跟踪加尺度估计、单目深度估计网络(如基于编码器-解码器结构的模型),以及利用已知地面平面的几何约束反推障碍高度。

优点很明确:结构简单、功耗低、标定相对容易、重量轻,对无人机续航天生友好。缺点同样突出:单目无法直接测得绝对尺度,一张图里“看起来近”和“实际近”是两回事,必须借助额外的运动信息或已知参照物来恢复尺度。光照突变、纹理缺失(比如对着白墙、水面、天空)时,特征点几乎抓不到,避障会直接失效。

实操中我的建议是:纯单目只适合低速、室内、纹理丰富的场景,比如扫地机器人在客厅里跑。如果要用在室外无人机上,必须配合IMU做视觉惯性里程计(VIO),靠运动过程恢复尺度,否则距离估计误差能到百分之几十,避障基本靠运气。

2.2 双目立体视觉:直接测深度,但标定是命门

双目方案用两个相机模拟人眼,通过左右图像的视差计算深度。公式很干净:深度 Z = f·B / d,其中 f 是焦距,B 是基线距,d 是视差。也就是说,基线越长、焦距越大,同样视差下的测距越准;但基线太长会导致近处视场重叠区域变小,近距盲区变大。

双目最大的优势是能直接输出稠密或半稠密的深度图,不需要靠运动恢复尺度,静态场景也能测距。缺点是计算量大(立体匹配是个费算力的活)、对两个相机的一致性要求极高。两个镜头的焦距、畸变、光心哪怕差一点点,视差就算错,深度就飘。所以双目系统的出厂标定和现场重标定几乎是必修课。

我在一个室内AGV项目里用过双目,基线定在120mm,焦距4mm,实测2米范围内深度误差能控制在2%左右,一旦超过5米误差就快速上升——这正是 Z 与 d 成反比的必然结果,视差在远处本来就只剩几个像素。所以双目适合中近距离避障,远距离交给别的传感器更靠谱。

2.3 结构光与ToF深度相机:直接拿深度图的“懒人方案”

结构光和ToF(飞行时间)都是主动式方案,相机自己发射光再去接收,不依赖环境纹理。结构光投射已知图案,靠图案形变解算深度;ToF直接测量光往返时间,每个像素都能得到一个距离值。市面上常见的深度相机(比如用于体感交互、扫描建模的那类)多属这一派。

优点是开箱即用、深度图直接拿到、暗光下也能工作、近距离精度高。缺点是受环境光干扰明显——强阳光下结构光的图案会被淹没,ToF也容易被其他红外源干扰。此外多机同时工作会互相“打架”,两台结构光相机对着同一片区域,图案互相串扰,深度就乱了。室外大面积场景下,这类相机普遍力不从心。

现场经验:这一类相机在室内机器人、机械臂引导抓取里用得最多,因为工作距离通常就在0.3到3米,正好是它的舒适区。要上室外,得选调制频率高、抗干扰强的ToF,并且做好遮光处理。

2.4 光流法:测运动不测距离,但避障够用

光流法不直接给深度,它算的是像素在图像里的运动速度。当相机自身在移动时,静止物体产生的光流和相机运动有关,而近处物体光流大、远处光流小,据此可以判断“哪里可能有障碍、离我们近不近”。很多消费级无人机用向下的光流相机做定点悬停,就是这个原理。

它的优势是计算量小、实时性好、对纹理有一定容忍度,特别适合资源紧张的嵌入式平台。缺点是对纯旋转运动和光照变化敏感,遇到大面积无纹理区域(水面、雪地)光流会算不出有效值。另外光流只给相对运动信息,要结合IMU才能还原真实速度。

2.5 视觉SLAM与语义分割:让避障“有脑子”

视觉SLAM(同步定位与建图)严格说属于导航范畴,但它和避障关系密切:SLAM建出的地图本身就是避障的全局参考,而且现在很多方案把SLAM、语义分割、避障融合在一条流水线里。语义分割能让机器人认出“这是人、这是车、这是草地”,从而做出差异化避让——人可以保持距离绕行,草地可以直接碾过去。

这类方案功能最强,但代价是算力、内存和开发复杂度都上去了,通常要跑在带GPU或NPU的板子上。算法上,ORB特征类方法(如ORB-SLAM系列)在普通CPU上还能跑,深度学习方法则基本离不开加速硬件。做无人机正射拼接时常用的ORB特征,其实和视觉SLAM里的特征提取是同源技术,可见特征工程在这条链路上有多核心。

3. 各方案优缺点横向对照与选型逻辑

上面五种方式单独看都清楚了,但真实项目里很少只用一种,关键是怎么组合。下面这张表是我根据多个项目经验整理的横向对照,参数取自常见器件的中位水平,具体选型还得看你的实际指标。

方案测距能力典型工作距离算力需求成本区间光照敏感度纹理依赖适合场景
单目间接估计0.5–20m中高低高高室内低速、消费电子
双目直接稠密0.3–10m高中中中中近距避障、AGV
结构光/ToF直接深度0.2–5m低中高(怕强光)无室内机器人、抓取引导
光流运动/相对0.5–15m低低中中高无人机悬停、定点
视觉SLAM+语义定位+识别全场景很高高中中自主导航、复杂环境

3.1 先定场景,再定方案

选型第一步永远是问清楚三件事:在哪用、跑多快、算力有多少。室内、慢速、有纹理,单目加光流就够了;室外、有强光、要测绝对距离,双目或固态ToF更稳;如果还要认人认车,那就得往SLAM加语义分割走,同时准备好算力预算。

很多人一开始就冲着“功能全”选最复杂的方案,结果开发周期拖了半年还没落地。我的建议是从最小可用集起步,先用低成本的传感器把基本避障跑通,再逐步加功能。这样每加一层你都能验证它到底解决了什么问题,而不是一次性堆一堆模块,出了问题根本不知道是哪一环。

3.2 算力与功耗的隐性成本

深度相机看着“开箱即用”,但深度图的后处理、滤波、点云下采样一样吃算力。双目立体匹配在某些平台上能占到一整个核心的算力。这些隐性成本在选型表里往往不体现,但会在实测时集中爆发。

功耗对无人机尤其关键。多一个主动光源,续航就短一截。我在做小型四轴选型时算过一笔账:加一路结构光,整机功耗增加约1.5W,理论上续航掉5%左右,看着不多,但如果你本来就贴着续航红线飞,这5%就是能不能完成任务的差别。

4. 落地实操中的关键环节

选完方案只是开始,真正的功夫在标定、数据链路和调试上。这一节我按实际搭建顺序来说,每一步都给出可复现的做法。

4.1 相机标定:精度从这里开始崩

无论哪种视觉方案,标定都是地基。单目要标内参和畸变系数,双目还要标外参(两个相机之间的旋转和平移)。标定板常用棋盘格或圆点阵列,采集20到30张不同角度、不同距离的图像,覆盖率要够,别全挤在画面中央。

标定完一定要看重投影误差,一般要压到0.5像素以内才算合格。我见过太多人标定完直接上,结果深度图上物体边缘全是“毛刺”,就是标定精度不够导致的。双目标定还要注意:标定完成后如果相机被撞过、摔过,或者环境温度变化大(比如从空调房拿到室外暴晒),外参会漂移,建议定期用标定板快速复检。

提示:双目标定的外参漂移是慢性问题,不会一下子完全失效,而是深度精度悄悄变差。养成每两周复检一次的习惯,能省下大量现场排障时间。

4.2 数据链路与时延:避障的隐形杀手

避障是个实时任务,从相机曝光到控制指令输出,整条链路的总时延必须控制住。相机出图、传输、算法处理、决策、下发指令,每一环都在加时延。以低速机器人为例,如果总时延超过200–300ms,在1m/s的速度下就意味着决策时已经往前开了二三十厘米,避障效果大打折扣。

降低时延的做法:用硬件同步触发代替软件轮询;图像传输走MIPI或GMSI这类板级总线,少走USB中转;算法上控制单帧处理时间,宁可降分辨率也别让帧率忽高忽低。帧率不稳定比帧率低更麻烦,因为控制器的行为会变得不可预测。

4.3 避障算法与控制决策的衔接

拿到深度图或者障碍信息之后,怎么用才是关键。常见做法是把相机视野划分成若干网格或扇区,每个扇区给一个“可通过性”评分,然后结合当前速度做局部路径规划。简单点的方法是势场法,把障碍当成斥力源;复杂点用采样类规划(如基于速度空间的局部规划)。

这里有个容易被忽略的问题:避障算法输出的应该是“期望速度”或“期望方向”,而不是直接的电机指令。让避障模块和底层控制解耦,好处是更换避障策略时不用动控制层,也便于加安全限幅——比如无论避障怎么算,最大速度不能超过某个阈值。

4.4 参数调优:从“能用”到“好用”

避障参数无非几类:安全距离、反应时间、最小障碍尺寸、减速曲线。调参的诀窍是先在静态环境里把安全距离定准,再到动态环境里调反应时间。安全距离要留出“刹车距离”,计算方法很简单:刹车距离 = 速度 × 反应时间 + 速度² / (2 × 减速度)。这个公式建议直接写进配置注释里,方便后人理解参数由来。

我在实际调参时常用一个小技巧:故意把障碍物放在临界距离上,观察系统是“刚好停下”还是“轻微碰撞”,然后在此基础上加20%的安全余量。数字调得太极限,实际环境里一点扰动就会突破阈值。

5. 常见问题排查与避坑实录

这一节是我踩坑最多、也最想分享的部分。下面这些问题几乎每个项目都会遇到至少一个。

5.1 常见问题速查表

现象可能原因排查方向解决思路
深度图大面积缺失纹理不足/强光干扰换场景对比补光或换传感器
距离估计偏大或偏小标定不准/尺度未恢复复检标定重标定+加IMU
避障忽灵忽不灵时延抖动打时间戳测链路硬件同步+降时延
近处看不见障碍近距盲区查基线/最近工作距加近距传感器冗余
多机互相干扰主动光源串扰单独测试每台错频或分时工作
边缘深度毛刺立体匹配在弱纹理处失败看视差图加滤波或置信度掩膜

5.2 几个用钱换来的教训

教训一:别迷信参数表上的测距范围。厂商写的“0.2–10m”通常是理想条件下的极限值,实际在室外、有阳光、目标反射率低的情况下,有效距离可能打对折。选型时按标称值的60%来规划,留足余量。

教训二:冗余传感器的融合别做太“聪明”。我一开始想做一套复杂的加权融合,把视觉、超声波、雷达的置信度都算进去,结果调试地狱。后来改成简单的“任一传感器报警即减速”,反而稳定可靠。避障系统首先是安全系统,可靠性永远优先于优雅。

教训三:一定要做失效降级测试。把相机遮住、制造强光、模拟算力过载,看系统会不会失控。合格的避障系统在视觉失效时应该自动降速或悬停,而不是继续按原速前进。这个测试在很多团队的流程里是缺失的,但它恰恰是安全底线。

教训四:现场环境和实验室差得远。实验室里白墙、地毯、均匀光照,一切完美;到了现场可能是反光地面、玻璃幕墙、忽明忽暗。玻璃对视觉避障是经典难题,因为它既透射又反射,深度信息完全是乱的。遇到玻璃多的场景,老实加一路超声波或雷达更省事。

教训五:算法别追新,稳定压倒一切。每年都有新论文、新网络结构,但工程里能长期跑的往往是那些被验证过、有充足调参经验的老方法。ORB特征从提出到现在这么多年,在无人机正射拼接、SLAM里依然是主力,原因就是它足够稳、足够省。新算法可以跟进,但别拿它当唯一方案。

5.3 给不同阶段读者的上手建议

如果你刚入门,建议从单目加光流在室内跑通避障,理解深度与运动的关系,再升级到双目。如果你在做无人机项目,优先保证IMU和视觉的时间同步,因为VIO的精度很大程度取决于这个。如果你在做工业场景,多考虑结构光/ToF,室内环境是它的主场。

关于算力平台,我的经验是:别一开始就上最贵的板子,先用中档平台跑,把算法优化到能跑起来,再决定要不要加算力。很多“算力不够”的问题,本质是算法没优化,而不是硬件不行。降分辨率、减ROI、跳过无效帧,这些优化手段往往比换硬件更立竿见影。

最后说个细节:视觉避障的日志一定要记得全。相机帧、时间戳、深度图、决策输出,能存就存。出问题的时候,这些日志是你唯一能还原现场的东西。我在一次室外测试中就是靠回放日志,才发现是阳光直射导致某帧深度全黑,进而让避障误判为“前方空旷”。没有日志,这个问题可能查一周都查不出来。

视觉避障这条路,说到底是硬件、算法、场景三者的平衡艺术。没有最好的方案,只有最合适的组合。把每种方式的边界摸清楚,把标定、时延、降级这几个地基打牢,剩下的就是按场景做取舍了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询