拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

机器人视觉避障方案选型:单目、双目、ToF、光流与SLAM

机器人视觉避障方案选型:单目、双目、ToF、光流与SLAM 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、跳过无效帧这些优化手段往往比换硬件更立竿见影。最后说个细节视觉避障的日志一定要记得全。相机帧、时间戳、深度图、决策输出能存就存。出问题的时候这些日志是你唯一能还原现场的东西。我在一次室外测试中就是靠回放日志才发现是阳光直射导致某帧深度全黑进而让避障误判为“前方空旷”。没有日志这个问题可能查一周都查不出来。视觉避障这条路说到底是硬件、算法、场景三者的平衡艺术。没有最好的方案只有最合适的组合。把每种方式的边界摸清楚把标定、时延、降级这几个地基打牢剩下的就是按场景做取舍了。
返回列表