如果你在2015年前后接触过机器人感知技术,对那个阶段的印象大概逃不开两件事:桌上堆满固定传感器用的直角支架和双面胶,脚下放着一台开机就像小型发电机的工控机。十年过去,我自己从写特征匹配、调滤波参数的算法岗,一路做到负责整套感知系统的集成落地,最大的感受是:机器人感知技术已经从“实验室里的魔术”,变成“产线上可复现的模块”。这篇复盘,我想以从业者的视角,尽量把十年里传感器选型、算法范式、计算平台和系统工程层面的关键变化讲清楚,也顺便聊聊那些只有做过真机项目才会踩到的坑。
1. 十年前的起点:被算力卡住的技术骨架
1.1 当时的主流感知方案,和现在差多少
2015年左右的机器人感知,格局其实比现在简单得多。轮式移动机器人普遍靠2D激光雷达做即时定位与建图,搭配轮式里程计和超声或红外传感器做避障;无人机视觉导航主要用单目或者双目视觉里程计;无人车项目则几乎清一色是“多线机械激光雷达+高精度组合导航”的组合,偶尔加摄像头做目标检测,但检测手段还是经典的手工特征路线,比如梯度直方图配合支持向量机,或者级联分类器。
以视觉SLAM为例,当年的主流方案是特征点法。算法对图像提取角点和描述子,通过特征匹配估计相机运动,再维护一个稀疏的地图点集合。如果环境里的特征足够多,效果可以做得相当稳定,但代价是计算量大、内存占用高。为了让系统在当时的处理器上跑得动,工程师通常要把图像分辨率降低、特征点数量限制在几百个以内,并且不敢做稠密重建。现在大家习以为常的“实时稠密三维重建”,在那个年代只存在于顶会论文里,离工程化还有很远的距离。
和今天相比,最本质的差距不是某一项算法不够好,而是整个技术栈都建立在手工作业的特征工程上。语义感知基本没有进入主流流程,机器人的“感知”更接近“测量”:知道自己在哪、障碍物在哪里,但并不知道自己看到的是什么。这种思路决定了后来的很多设计取舍——感知模块尽量保守,输出几何量而不是语义量,因为几何量可以直接进控制逻辑,语义量却容易出错。
1.2 算力天花板如何反向决定算法走向
十年前做感知系统,最难的不是读论文,而是把论文里的方法跑在真实的硬件上。当时主流的嵌入式单板电脑性能很弱,能带的传感器有限;通用GPU成本高、功耗大,工业场景里很难把它放进一个小体积的移动平台。我印象很深的一件事是:在工控机上跑一套带闭环的视觉SLAM,能轻松到30赫兹,但一移植到低功耗平台上,帧率直接掉到5赫兹,最后只能关掉闭环、降低前端频率,勉强维持基本定位。
这件事给了我一个非常重要的教训:算法选型从来不是由公开数据集上的指标单独决定的,它必须同时满足功耗包络、热设计余量、延迟预算和长期运行的稳定性。换句话说,算力天花板会反向塑造算法形态。特征点法之所以在那些年占据统治地位,除了鲁棒性好,还有一个原因是它“省”:角点提取和描述子匹配可以做到比较轻量,而且天然适合分模块异步处理。相比之下,一些理论上很漂亮的稠密直接法,因为需要逐像素计算,实时实现难度大,只能在特定场合使用。
现在回顾这段历史,我觉得理解当时的约束条件,才能真正理解后来为什么会出现那么多混合方案。并不是说新方法凭空淘汰了旧方法,而是硬件平台能承受的复杂度不断提升,让更多元的算法范式有机会进入工程现场。
2. 传感器的十年变局:输入质量比算法迭代更根本
2.1 视觉传感器:从怕光的结构光到抗干扰的主动立体和ToF
传感器端的变化,有时候比算法迭代更能拉开系统差距。2015年前后,消费级深度相机刚火起来,基本原理以结构光为主。结构光的问题是环境光一大,编码图案被淹没,深度图就变成一片噪声。我记得在室外走廊测试时,太阳一照进窗户,深度图边缘立刻出现大量孔洞,避障算法不停报警。后来换成主动立体视觉和飞行时间(ToF)方案的传感器,抗环境光能力明显改善,分辨率也从早期的视频图形阵列级别提升到了百万级像素级别。
对做机器人感知的人来说,选视觉传感器的关键参数不是像素越高越好,而是这些工程细节:传感器是全局快门还是卷帘快门,有没有硬件同步输入引脚,动态范围支不支持高动态范围(HDR),内参随温度变化漂移得厉害不厉害,以及曝光时间能不能被外部程序精准控制。卷帘快门在快速旋转场景下会产生“果冻效应”,拍到的灯箱横杆都是斜的,算法很容易丢失特征点;如果机器人底盘振动大,还得确认传感器是否内置惯性测量单元,并且能不能拿到对齐后的数据流。
现在做视觉感知,我的建议是先写一份“传感器需求清单”,把最恶劣的光照条件、最大运动速度、最小检测距离列出来,再对着规格书选型。很多项目一开始只对比分辨率,结果到现场发现抗眩光不行、同步信号不支持,返工成本极高。传感器是感知系统的最底层输入,这一步省不了。
2.2 激光雷达:从机械旋转到芯片化固态方案
激光雷达是过去十年价格和形态变化最大的传感器。早期机器人项目用的多线机械雷达,个头大、重量足,在顶部高速旋转,标定还要精确测量每个线束的俯仰角,稍微磕碰一下,点云可能就出现错层。再加上成本动辄几十万,很多团队只能租借或者用仿真数据代替。这些年,半固态和固态方案逐渐成熟,比如微振镜、光学相控阵、Flash面阵等路线都走向产品化,成本下降了至少一个数量级,体积和重量也大幅缩减。
选激光雷达,以前大家最关心线数,现在则更关心这样几个维度:垂直视场角是否覆盖近区盲区,点云在近处和远处的均匀程度,黑色低反射物体能不能被稳定检出,以及雷达自身的标定参数在温度变化后是否保持一致。FMCW调频连续波方案也在兴起,它能直接测速度,而且抗干扰性更好,在机器人交互场景里有明显的长期价值。
但这里我想提醒一句:传感器升级不是简单的“换更贵更好的雷达”。激光雷达点云的反射率一致性、多雷达之间的串扰抑制、机械振动下的畸变,这些都是真实项目中经常出现的难题。如果你做的平台本身振动很大,一个安装刚性不足的支架,就足以让点云产生可见的运动畸变,再好的算法也救不回来。
2.3 多传感器融合成为默认架构的底层逻辑
这十年最显著的趋势之一,是多传感器融合从“可选优化”变成了“默认架构”。背后的原因很简单:没有任何一种传感器在所有场景里都可靠。视觉传感器在低纹理墙面、强逆光、快速运动时会失效;激光雷达在雨雪雾天气、透明玻璃、高反光材料面前会退化成稀疏杂点;惯性测量单元短期精度好,但十几秒就开始漂移;轮式里程计在打滑时直接给错误的速度。
融合的价值不在于让系统“性能更好”,而在于让系统的“失效模式更互补”。我做过一个项目,机器人在阳光照射的长走廊里走,相机画面过曝,视觉里程计几乎完全失效,但同一时间,激光雷达和IMU还能支撑定位;等到进入一个玻璃幕墙大厅,激光雷达点云在镜面上大量丢失,反而相机又能看到丰富的纹理。最后系统能继续走,靠的就是松耦合架构下的传感器冗余。
实际操作上,融合不是把数据丢进一个滤波器就行。第一步要做传感器标定,确定坐标系和外参;第二步要解决时间同步,否则传感器之间各说各话;第三步才是选择松耦合还是紧耦合算法。我的个人经验是,不要一上来就做紧耦合——先把每一路传感器的数据质量验证到底,再谈融合对精度提升的贡献。
3. 算法范式迁移:特征工程收缩,数据驱动扩张
3.1 里程计与SLAM:从手工特征到学习特征,再到隐式表示
过去十年,SLAM的演进脉络非常清晰。早期以ORB这类特征点法为主,快速、稳定、便于回环检测,但对白墙这类低纹理环境几乎无能为力。紧接着直接法和半直接法出现,利用像素灰度估计运动,纹理弱的环境也能工作,可代价是对光照变化敏感,曝光稍微闪动就会出问题。再往后,我们看到了学习型特征,用神经网络提取关键点和描述子,替代手工设计的特征,同时保留后端的几何优化。这种混合架构在公开数据集上有不错的效果,在真实场景里也比纯学习方案更容易调试。
后端优化的变化同样剧烈。早年常用扩展卡尔曼滤波或粒子滤波,后来图优化和因子图成为主流,滑动窗口加边缘化的策略让计算量和精度可以取得平衡。回环检测也从先前的词袋模型,慢慢过渡到基于深度特征的方法。你会发现,这十年视觉SLAM的进展,很大程度上是“前端感知能力不断学习化,后端几何依然保持经典”的混合演进。
至于稠密重建和三维感知,相似的故事也在发生。经典多视角立体视觉虽然在纹理丰富区域已经能建出不错的网格,但在反光、玻璃、弱纹理区域始终有天花板。后来神经辐射场(NeRF)一度让人眼前一亮,接着实时渲染更强的三维高斯泼溅又带来了新思路。必须说实话:在工程机器人的产品里,神经隐式表示目前更多用于离线重建、数据增强和场景补全,真机实时定位主流仍然是轻量几何方案。如果你要落地产线项目,我的建议是别被概念带着走,把经典方法与新方法按场景组合使用。
3.2 检测、分割与语义感知的落地路径
目标检测这十年的变化,是特征工程大幅退缩、数据驱动全面扩张的过程。大概2016年前后,基于深度卷积网络的检测器开始展现明显优势,从那以后,两阶段检测、单阶段检测、无锚框检测、基于Transformer的检测一步步发展,工程部署也从浮点模型逐步走向量化压缩,在嵌入式设备上跑实时检测变成了常规操作。
但真正改变机器人体验的,是语义感知开始和几何感知结合。我早期做视觉导航,程序只知道“前方有一个障碍物”,不知道那是什么;后来有了检测框,机器人能识别“这是椅子”,再配合深度图推断位置;再后来,实例分割和全景分割让边界更精确,机器抓取不用再依赖一个粗糙的检测框;现在,开放词汇检测和视觉语言模型让机器人能理解“把桌上那个红色马克杯拿给我”这样的指令,这在我刚入行时几乎不敢想。
这里我想强调一个工程习惯:评估语义感知模型时,不能只看平均精度。在机器人系统里,漏检和误检的代价完全不同。比如避障系统里误检一个并不存在的障碍物,可能只是让机器人绕一下;漏检一个真实障碍物,则可能带来碰撞风险。感知输出要接控制逻辑时,必须设计好置信度阈值和降级策略,让系统知道“这个感知不可信”时该怎么做。
3.3 从单点感知走向场景理解
再往后看,感知开始不满足于单独给出“障碍物位置”或者“机器人位姿”,而是试图理解整个场景。占用网络模型把空间划分为可达、不可达、未知区域,天然适合机器人导航;目标跟踪加上运动预测,让机器人在人群里能提前绕行;视觉语言模型让机器人可以把语言指令和视觉特征对齐。这种从“感知”到“场景理解”的演进,本质上是想让机器人具备对环境的预测能力,而不只是被动观测。
不过我也要说个现实问题:大模型的输出具有概率性,直接接到底层控制里存在不确定性风险。做量产级系统,我更倾向于把大模型当作决策辅助和任务分解模块,几何感知和安全逻辑仍然用可验证的确定算法兜底。这个分寸,可能需要未来很长时间反复打磨。
4. 系统工程:感知落地的隐形主战场
4.1 实时性、功耗与精度之间的权衡表
感知系统能不能落地,很多时候不是算法先进不先进,而是实时性和功耗包络撑不撑得住。我用过不止一套看起来精度很高的方案,放到真机上延迟超标,最后只能砍功能。做系统设计时,我会先把“延迟预算”列出来,再逐一分配:
| 环节 | 参考频率 | 典型延迟预算 | 说明 |
|---|---|---|---|
| 传感器数据采集 | 20~30Hz | 与硬件同步 | 相机、雷达、IMU需统一时钟 |
| 数据预处理 | 与主频一致 | 3~8毫秒 | 去畸变、降噪、时间戳校正 |
| 里程计与定位 | 20~30Hz | 20~35毫秒 | 前端匹配加轻量后端 |
| 目标检测/分割 | 10~30Hz | 20~50毫秒 | 取决于模型大小和NPU负载 |
| 多源融合 | 20~30Hz | 5~15毫秒 | 松耦合时开销较低 |
| 结果上报给规划 | 20~50Hz | 小于10毫秒 | 延迟抖动比平均延迟更致命 |
这张表不是死标准,而是说每个模块的延迟都要有预算、有监控,不能等到整机跑起来才发现总延迟超过100毫秒。工程上常用的手段是:前后端分频,激光扫描匹配和视觉前端可以异步运行;模型推理放到独立的加速单元;宁可让感知输出频率稳定在20Hz,也不要忽快忽慢的30Hz,因为规划模块对时间戳一致性极其敏感。
我记得有一次排查机器人转弯抖动问题,最初怀疑是控制参数不对,后来发现是感知模块的帧率在转弯时有几帧明显变慢,融合输出的时间戳又是离散跳变的,规划模块以为机器人突然位移了一段距离。把感知处理线程绑到大核、限制降频策略后,问题立刻消失。这类问题,不到真机长时间跑,很难暴露。
4.2 标定和时间同步:上线前最难绕过的门槛
如果把感知系统比作一个团队,传感器标定就是搞清楚“谁站在哪个位置、朝哪个方向”,时间同步则是让大家都按同一块表作息。任何一步没做好,后面的算法再强也只是在错误数据上做精巧的推理。
标定通常分两个层面:一是内参,包括相机焦距、主点、畸变系数,IMU的加速度计和陀螺仪零偏、比例因子;二是外参,也就是传感器之间的相对位姿。相机和IMU的标定常用目标板加多组动态激励,让估计器能同时观测角速度和加速度;激光雷达和相机的标定则可以用带反光标记的板子,通过点云和图像特征的对应关系求解。标定过程最怕“隐性错误”:看起来重投影误差很小,但因为标定板不平、拍摄角度太单一,外参在真实场景里就是不准。我的办法是每次都做两组独立采集,标定结果如果不一致,就重新来。
时间同步的问题更隐蔽。多数传感器都有自己的内部时钟,如果不做统一,视觉图像和雷达点云之间可能差几十毫秒。对快速运动的机器人来说,这个时间差会被放大成几厘米甚至更大的位姿误差。硬件级同步一般通过秒脉冲信号配合硬件触发线实现,让相机曝光、雷达旋转相位、IMU采样时刻对齐;软件方案则至少要记录每个数据帧的采集时间戳,在融合前做时间插值。
我现在养成一个习惯:每次更换传感器支架、拆装相机或者更新主机,都先跑一遍标定流程,再录一段包含旋转和直线运动的数据做闭环验证。真人机项目踩过太多次“拆了再装之后忘记标定”的坑,再小的安装位置变化,都可能在长距离运行时产生肉眼可见的漂移。
4.3 仿真环境和真机之间的鸿沟
仿真这些年进步非常快,从简单的物理引擎到高保真传感器仿真,再到域随机化训练策略,几乎每个团队都会用仿真跑回归。但仿真和真机之间依然存在鸿沟,最重要的差距是传感器噪声模型。仿真里的深度值往往太干净,点云也不会有复杂的遮挡和反射,光照和材质参数也很难完全模拟真实环境。
我的工作流程是:仿真优先用来验证逻辑正确性,比如模块之间的数据流、故障处理、超时机制;真机则用来暴露长尾场景,比如阳光直射镜头的瞬间、雨后地面的反光、透明玻璃门旁的雷达点云杂散。域随机化对训练感知模型确实有效,但在安全相关功能上,我坚持要有真机测试环节。纯靠仿真“感觉没问题”的方案,拿到现场往往在第一小时就会出状况。
5. 十年实践留下的排错清单与避坑心得
5.1 典型故障现象和排查思路速查表
排查问题是最考验经验的部分。下面这些现象,是我在不同项目里反复遇到过的,整理成一张速查表供参考:
| 现象 | 可能的根因 | 优先排查方向 |
|---|---|---|
| 定位结果周期性抖动 | 时间戳不同步、传感器触发抖动 | 检查时间同步日志、各帧时间戳差 |
| 视觉里程计突然丢失 | 光照突变、过曝、低纹理区域 | 看曝光时间和图像直方图,评估改HDR |
| 点云在转弯时明显畸变 | 雷达去畸变参数错误或平台振动 | 检查运动补偿算法、支架刚性 |
| 深度图大面积空洞 | 透明材料、黑色吸光表面 | 调整深度相机曝光或融合其他传感器 |
| 回环检测频繁误报 | 环境重复结构、建模歧义 | 查看回环候选的几何校验结果 |
| IMU数据随时间严重漂移 | 温度变化、未做零偏在线估计 | 检查IMU温度序列和零偏曲线 |
| 模型在特定角度漏检 | 训练数据分布偏差、遮挡 | 补数据、做测试时增强,分析特征失效区域 |
| 多机协作时感知互相干扰 | 同频信号串扰、点云遮挡 | 检查雷达工作模式和多机时间分片 |
这些现象背后的共性是:感知系统的很多“脏问题”都发生在边界条件上,而不是在理想测试场景里。所以排查时我会先看原始数据,而不是直接看算法输出。录一段包含故障时刻的原始包,回放时叠加传感器状态信息,往往比反复改参数有效得多。
5.2 几个我反复踩过且值得记住的问题
第一个问题是时间同步错位。我在低功耗平台上一开始只做了系统级同步,常见处理器的定时器精度不稳定,导致IMU和视觉数据之间一直有微小误差。表面看单帧匹配很好,但跑十分钟后路径明显歪斜。后来加上硬件同步信号并严格记录时间戳,系统才算稳定下来。这个坑提醒我:融合算法好不好,先看两个时钟对不对。
第二个是曝光引起的视觉跳变。户外机器人从阴影驶入阳光下,相机的自动曝光会快速变化,图像整体亮度跳变导致灰度特征的匹配失效,视觉里程计就会产生一个虚假的“跳跃位姿”。解决办法是使用HDR模式、限制最大曝光变化幅度,同时在算法里抑制亮度突变帧的权重。
第三个是激光雷达运动畸变。机器人高速旋转时,雷达一个扫描周期内平台本身已经转动了一个角度,如果直接用起始时刻的数据去建图,边界会出现扇形模糊。解决思路是对点云按时间戳做运动补偿,这要求雷达和里程计的时间同步精度足够高。很多团队第一次遇到这个问题,会误以为是雷达硬件坏了。
6. 下一个十年:感知会向哪里走
6.1 大模型正在改变感知的边界
现在讨论机器人感知,已经绕不开大模型。视觉语言模型把语言、图像、语义连接起来,让机器人可以由自然语言指令驱动,完成开放词汇的识别和任务规划;世界模型则试图从历史观测中预测未来的场景演变。这些新形态一定会进入机器人感知栈,但我判断路径会是逐步渗透:先用大模型做高层任务理解,把结果传递给底层几何避障,等可靠性和实时性验证充分后,再往控制链路更深处延伸。
6.2 传感器继续小型化、芯片化和低成本化
固态激光雷达、更小尺寸的深度相机、高集成度的微机电惯性传感器,会让机器人的传感器布局越来越像“消费电子产品”,而不是科研仪器。传感器成本的下降会扩大机器人的应用场景,很多过去因为传感器昂贵而无法落地的项目,未来几年可能迎来爆发。事件相机这类传感器也会在特定领域找到位置,但要进入主流,还需要把生态工具链补足。
6.3 本质未变:可靠性比花哨更重要
不管算法怎么演进、传感器怎么升级,机器人感知系统最终要回答的问题始终是同一个:我此刻在哪里?我看到什么?我在往哪里去?下一个十年,一定会有更多炫酷方法出现,但工程落地领域,可靠性、可调试性和算力效率依然会排在所有指标的最前面。谁能在复杂真实环境中稳定输出可信状态,谁才算真正完成了感知技术的使命。
这十年里,我最深的体会是:感知系统的上限,往往不是由单个算法决定的,而是由系统工程能力决定的。就算你手里有最先进的深度学习模型,只要时间同步差几毫秒、标定偏差半度,系统一样会在真机上百态挫败。回头来看,那些真正让机器人从实验室走出来进入实际场景的进步,不止是某个性能数字的提升,更是“感知作为一个整体系统”在稳定性、鲁棒性和可维护性上跨过的一道道门槛。每次踩坑之后想明白一个环节,比追十个新算法都更有价值。