
今年在几个机器人的行业展会和闭门技术交流会上我注意到一个很有意思的现象国内头部人形机器人公司的原型机无论行走导航、抓取操作还是数据采集视觉感知模块里高频出现同款产品——友思特引入和集成的ZED立体视觉系统。这不是说别家方案没人用但在“第一梯队”的原型机上它的出现频次高得离谱。这篇文章就围绕这套系统把我这些年实际接触到的选型逻辑、原理拆解、落地场景和部署经验一次讲透。如果你正在做人形机器人、双足机器人或机械臂视觉方案这篇内容基本可以当一套选型参考笔记来用。我会尽量少讲厂商话术多讲实际能落地的细节。1. 人形机器人视觉选型三个容易被忽视的硬约束1.1 视觉不是“配件”而是运控闭环的感官层很多人形机器人团队早期容易把视觉系统当成“一个能出深度图的传感器”觉得只要点云质量好、帧率够高就行。真正做进去才发现视觉和人形运动控制之间的关系比想象中紧密得多。人形机器人是典型的高自由度系统双足支撑、全身协调、机械臂操作都在同一个控制回路里跑。平衡控制器的工作频率通常在500Hz到1kHz而视觉传感器的输出一般在15fps到30fps。也就是说视觉不可能直接参与每个控制周期它是在更高层级给出“环境状态估计”然后由运动规划模块把视觉信息转换为实际动作。这中间任何一个环节的延迟抖动都会直接反映到机器人走路的稳定性上。所以我选型时第一个看的技术指标不是分辨率而是数据时间戳是否统一、输出延迟是否可预测。ZED的SDK在这块有个比较大的优势左右目图像、深度图、IMU数据都来自同一时钟域时间戳对齐做得比较干净而且深度计算放在GPU上完成延迟波动小。对于做运控的团队来说这能少填很多坑。1.2 技术路线对比为什么是双目而不是结构光、ToF先看一张我当时做选型对比时的梳理表基本覆盖了当前主流深度视觉方案的优缺点。方案深度获取方式典型优势典型问题常见应用单目靠算法估计尺度硬件简单便宜尺度不确定恢复真实尺寸难轻量感知结构光投射红外光斑分析形变近距离精度高、暗光可用强光下失效功耗高室外差人脸识别、手机ToF发射光并测量飞行时间直接测距响应快分辨率偏低多机易互相干扰工业测距、AR双目立体视觉左右图像视差三角测距被动感知、功耗低、室内外均可低纹理和暗光环境需要辅助机器人、自动驾驶双目主动光IMU立体匹配加主动纹理投射和惯性融合全天候适应性更好精度和鲁棒性均衡结构比纯双目复杂人形机器人、复杂移动机器人从这张表能看出来单目最大的问题是尺度不确定。对于人形机器人这种需要精确抓取、避障、建图的场景不能判断一个物体离自己到底是1米还是2米很多决策就无从谈起。结构光在手机人脸解锁上表现很好但一到户外强光下基本就废了而且主动投射的功耗对电池供电的移动机器人不友好。ToF响应快、直接测距但分辨率上不去两个机器人同时在场还可能互相干扰。ZED走的路线是典型的双目立体视觉增强版核心是两个彩色相机做视差计算同时在部分型号上加入了IMU惯性单元和可选主动光投射器。这个组合让人形机器人在室内外、强光弱光、纹理丰富和低纹理场景中都能保持一定的深度输出能力这是它能被头部企业反复采用的根本原因。1.3 头部企业看中ZED的三个硬指标第一点是精度和距离范围的平衡。人形机器人既需要在几米范围内导航避障也需要在几十厘米范围内精确识别桌面物体。ZED系列在0.3米到5米这个区间内的深度精度表现比较稳定恰好覆盖了人形机器人绝大多数操作场景。精度和距离范围能不能同时满足决定了视觉系统是做“眼睛”还是只能做“装饰”。第二点是数据类型的丰富度。如果只是输出深度图那很多算法还是要自己写。ZED的SDK里直接带了深度图、彩色点云、位置追踪、目标检测、人体骨架识别等模块而且这些数据是同步输出的。这意味着开发团队不需要把精力花在“怎么把传感器数据变成可用的感知结果”上而是可以直接进入“感知结果怎么接入运控决策”的阶段对整个项目周期的影响是数量级的。第三点是软硬件生态的成熟度。机器人团队普遍在Linux环境下用ROS或ROS2做开发ZED官方提供了比较完善的ROS包、Python和C接口友思特在国内又做了二次封装和本地化支持。这一点对工程化落地极其重要毕竟人形机器人公司要的是尽快做出稳定的原型而不是从零调试一个没人维护的开源驱动。2. ZED深度感知的原理视差如何变成机器人能用的数据2.1 从视差到深度三角测量的直觉理解我先用大白话解释一下双目测距。人的两只眼睛之间有距离所以看同一个物体时两只眼睛看到的画面视角略有差异这就是“视差”。物体离得越近左右眼看到的偏移越大离得越远偏移越小。人脑就是靠这个差异判断距离的。ZED相机本质上就是把这个过程数字化。它的两个镜头之间的水平距离是固定的叫作基线。两个镜头同时拍下左右两张图像然后通过立体匹配算法找到两张图里的对应像素点计算它们在水平方向上的坐标差这个坐标差就是视差值。有了视差值再结合标定过的相机内参和基线长度就可以用三角测距公式算出每个像素对应的实际深度。这里面最关键的是立体匹配算法。ZED内部用的是半全局匹配这一类方法简单说就是对图像上每个像素不只单独找一个匹配点还会考虑周围邻域的纹理信息通过一个平滑项来抑制误匹配。这样做的好处是深度图的边界更清晰、空洞更少坏处是计算量上去了所以ZED会把这部分计算放在GPU上做。在机器人上这套流程的好处是传感器端只输出图像剩下的计算全在本地算力上完成数据链路短便于做系统集成。2.2 双目的软肋在哪里低纹理、暗光与快速旋转双目视觉不是万能的它的两个天然软肋是低纹理和快速运动。低纹理指的是画面里的物体表面太单调比如一面白墙、一块纯色地面、一个没有图案的纸箱。立体匹配算法找不到足够的特征点来对应左右图深度图就会有大片空洞。很多团队第一次拿到ZED在实验室里对着白墙测发现深度图一片黑就开始怀疑相机坏了。其实不是这就是双目方案的物理边界。针对这个问题ZED部分型号加入了主动光投射器会在画面里投射肉眼不易察觉的红外纹理斑块。表面太单调的白墙有了这些人工纹理立体匹配就有了依据深度图就能补上空洞。这个功能和结构光不同它不主动测量光的飞行时间只是“帮助双目看见纹理”所以功耗比结构光低得多。快速旋转的场合也有问题。相机快速转头时前后两帧图像的重叠区域很小视觉位置追踪容易丢失。ZED把IMU数据融合进来后旋转过程中的角速度和加速度变化可以被连续跟踪即使视觉暂时丢失也能用IMU数据把状态估计撑住短时间内重新找回视觉。对人形机器人来说转头观察环境、弯腰、快速转身都是常见动作这个融合能力直接影响视觉系统的可用性。2.3 SDK输出的“开箱即用”感知层ZED的SDK在机器人开发者里口碑不错很大程度上是因为它把很多感知算法直接封装好了。拿到相机、装好SDK几行代码就能拿到对齐的深度图和彩色点云这让很多团队前期做原型验证时省掉了大量重复造轮子的工作。除了深度图和点云SDK还内置了几个对机器人非常关键的模块位置追踪输出相机在空间中的六自由度位姿也就是位置加旋转可以直接当视觉里程计用。区域感知做物体检测和位置识别适合固定物体的语义定位。人体骨架追踪检测人的关键点输出多人的人体姿态数据适合交互类和数据采集场景。空间映射实时建立环境的三维网格地图适合导航和避障。这几个模块在后续落地章节里都会讲到。关键点在于这些数据是同一套SDK统一输出时间戳对齐这就避免了一个常见的工程悲剧——深度图、点云、位姿各自为政融合的时候对不上时间。3. 四个典型落地场景ZED在机器人上到底做什么3.1 双足/四足导航避障点云密度带来的感知优势人形机器人在室内环境里移动遇到的不只是桌子椅子这种大体量障碍。地面上的线缆、突出桌沿的键盘、半开的抽屉、墙壁上凸出的开关面板这些都是在人员生活环境中真正会绊倒机器人的东西。传统移动机器人常用的单线激光雷达只能感知一个平面高度的障碍遇到线缆和悬空物体基本没辙。ZED这种双目视觉的优势在于能输出稠密的三维点云相当于对前方整个空间做了立体扫描。机器人拿到点云后可以投影成栅格代价地图也能直接跑三维避障算法。实际项目中我们一般会对点云做个距离裁剪只保留0.2米到4米范围内的点太近的是盲区太远的有噪声裁剪之后对运行效率也有帮助。部署时还有一个细节帧率不一定非要拉满。导航避障场景对单帧深度的绝对准确性要求不是最高但对连续性要求很高。我们一般建议跑15fps左右配合一个中值滤波深度图会更稳。如果帧率拉得太高算力占用上去了深度图反而会因为卡顿出现一帧一帧的跳变导航表现并不好。3.2 机械臂抓取从“看见目标”到“算准抓点”机械臂抓取是人形机器人看得见、摸得着的核心技能。这里视觉系统要回答两个问题目标物体在空间中的三维坐标是多少机械臂用什么姿态去抓最合适先说三维坐标。ZED输出的是相对于相机坐标系的深度值要变成机械臂能用的坐标必须先做手眼标定。简单说手眼标定就是求出相机坐标系和机械臂基座坐标系之间的变换关系。标定方法不复杂让机械臂带着标定板走几个位姿采集多组数据解一个变换矩阵就行。友思特在实际项目中会直接帮客户跑标定流程因为这一步做不好后续抓取精度就全是空中楼阁。再具体一点目标放在桌面上距离相机大约半米到一米ZED计算出的物体中心点三维坐标配合机械臂的运动规划能稳定抓起杯子、工具箱、水壶这类常见物体。需要提醒的是双目深度在几十厘米的近距段精度不错但不可能达到工业激光位移传感器的微米级水平。所以机械臂抓取通常要做成闭环先用ZED做粗略定位机械臂靠近后用末端触觉或者再次视觉伺服来微调这也是人形机器人领域的主流方案。3.3 视觉惯性SLAM无GPS环境的建图与定位人形机器人要在室内环境里长时间工作就必须解决“我在哪”的问题。ZED的位置追踪模块输出的是相机自身的六自由度位姿这套输出就是视觉里程计。把它和IMU数据做融合就变成了视觉惯性里程计能在GPS无效的室内环境中持续估算机器人的位置和姿态。实际使用中双足机器人的步态对视觉SLAM提出了一个独特挑战每一步落地都会带来垂直方向的颠簸和前后方向的晃动。纯视觉SLAM在这种运动模式下容易累积漂移也就是走了几圈之后地图和实际位置对不上。有了IMU融合高频的加速度和角速度变化能被及时感知配合视觉特征的长时跟踪漂移会明显变小。如果机器人要走大范围环境建议把ZED的位置追踪数据和轮式里程计如果有的话再做一次融合或者用图优化方式做全局回环修正。回环检测的意义在于当机器人绕了一圈重新回到起点时能识别出“我看到了之前来过的场景”然后把累积的轨迹误差一次性修正掉。3.4 人体姿态追踪与数据采集训练数据从哪来人形机器人做得越深入越避不开一个话题运动数据从哪里来。传统做法是让真人穿动捕服在特定的动捕棚里进行动作采集效率低、场地贵。越来越多的团队开始尝试用视觉方法直接提取人体关键点ZED的Body Tracking模块可以输出人体主要关节的三维坐标和角度不需要穿戴设备在普通的办公室环境里就能采集数据。这个模块的实际玩法很多一是做跟随让机器人通过视觉锁定一个人保持安全距离跟随移动二是做主从遥操作操作员在旁边做动作ZED识别出人体骨架机器人映射执行三是做数据记录把操作员的一系列动作当作示范数据存下来后续用于模仿学习训练。我自己印象很深的一次测试是在一个不够明亮的车间里做人体追踪因为光线偏暗一开始漏检很明显。后来把相机曝光模式调成固定曝光而不是自动曝光再把主动光打开骨架稳定度立刻上来了。这个细节后面会细讲。另外提醒一点人体骨架数据涉及个人隐私在办公环境或公共区域使用时要评估合规要求最好在采集前做好必要的流程管理。4. 部署实战装了ZED之后必须处理的四个问题4.1 强光、玻璃和低纹理深度图花掉怎么办把ZED装到机器人上之后第一个“见面礼”往往就是深度图各种花。最常见的是从室内走到窗边阳光直射进来深度图上出现大片闪烁或空洞。很多团队第一反应是“这个相机不行”其实这更多是参数没调对。应对强光我一般建议首先把相机的曝光模式从自动改为固定曝光或者限制曝光范围。自动曝光会随着环境亮度快速变化导致连续几帧的画面亮度跳变立体匹配算法在这种输入下很容易产生不稳定的深度值。固定曝光之后画面的明暗变化变缓深度输出反而稳定很多。玻璃、镜面、透明水瓶这种半透光材质对任何视觉方案都是难题ZED也不例外。这些表面会让双目看到的内容不一致深度值算不准或者干脆输出空洞。我的做法是在算法层面先识别这类区域把不可用的深度点标记为未知而不是硬塞一个错误值给下游。下游的避障和抓取算法对“这里不可知”的容忍度远高于“这里有个错误的障碍物”。低纹理的解决方式前面提过用主动光辅助。一个容易忽略的地方是主动光的实际投射范围有限近处效果好远了效果递减。所以如果你的机器人需要感知两三米外的白墙或纯色地面别指望主动光能完全解决还是要靠算法层面对低纹理区域的滤波和预测。4.2 安装位置与震动头部还是胸前ZED装在人形机器人的哪个位置是个容易被低估的问题。装头部视场跟随着头部转动感知灵活但头部质量增加会影响颈部关节的负载和控制装胸前视野固定朝前比较稳定但转身时视觉感知会有延迟。从我们接触过的项目看人形机器人头部安装的前期少后期越来越多。头部安装的最大好处是视觉可以跟着头部转动做主动感知这与人的行为模式一致。但要注意ZED的双目基线在不同型号上是固定的安装位置只能开孔和固定支架调整选型时就要想好视野朝向和遮挡问题。震动是另一个大坑。双足机器人正常行走时机身始终处于微震动状态频率还不低。如果相机固定得太“硬”震动会直接传到IMU上导致姿态估计出现毛刺。我们在实际项目中给相机加了减震垫再从安装设计上避开与机身的共振频率位置追踪的输出明显平滑了很多。另外机器人在实验室放了一夜之后IMU的零偏会变化建议每次开机做一次静态初始化校准让IMU水平放置几秒钟再开始工作。4.3 算力分配在有限算力上跑出稳定帧率人形机器人机载算力通常不会太宽裕。深度计算和感知推理要跑运动控制也要跑还得分资源给导航和决策模块。如何让ZED在挤出来的算力里跑得又稳又好是每个项目都要面对的现实问题。我的建议是先降分辨率再降帧率最后降深度范围。ZED在低分辨率模式下依然能提供可用深度图而分辨率降低之后立体匹配的计算量呈二次方下降GPU占用会明显减少。然后根据场景需求限制帧率导航避障15fps通常够用抓取场景可以放到30fps没必要全程跑最高帧率。深度范围裁剪也很重要如果你只关心眼前五米内的物体就把最大深度限制在五米不处理远处的点既能降低计算量也能减少远处噪声对深度图的干扰。还有一个工程层面的建议视觉处理要在独立线程里跑用队列缓冲最新一帧不要让下游算法因为处理不过来而阻塞相机采集。人形机器人控制端的实时性要求高视觉线程和控制线程分离是基本操作。另外长时间运行后注意GPU温度。机器人外壳密闭性好的话温度会慢慢升高过了某个阈值之后有些型号会主动降频表现为深度图帧率突然掉一半。这个要在项目早期就做好散热预留。4.4 长期运行稳定性连续开机与热漂移机器人不是实验室里拍几张图就关机的设备而是要连续运行几小时甚至更久的工程系统。连续开机之后相机本身和机载算力都会发热温度变化会导致镜头结构产生微小的热变形进而影响标定参数。这个变化平时感觉不到但对于抓取精度要求高的场景误差会逐渐累积。我们现在的做法是项目交付时在自动启动脚本里加一个深度质量自检模块每隔一段时间记录一次深度图的空洞率、平均噪声水平并和初始基线对比。一旦发现质量指标持续下降就提示人工介入重新标定。这套机制不能完全替代标定但至少能把“相机悄悄变差”这件事暴露出来而不是让机器人在错误感知下继续工作。5. 友思特做的那层“最后一公里”集成5.1 为什么直接买裸相机容易卡在“最后一公里”ZED相机本身是一个成熟的硬件产品但从“相机”变成“装进人形机器人里稳定运行的视觉系统”中间还有不小的距离。裸相机拿回来会发现供电接口要自己做安装支架要自己设计线缆长度要自己规划防护外壳要根据机器人外观定制更别提标定流程和驱动适配这些看不见的活儿。友思特在这套生态里扮演的角色可以理解为一个视觉系统的“正向集成商”。它不只是卖相机而是围绕ZED做了一整套面向机器人行业的交付能力会根据机器人的安装空间、供电环境、运行工况来选型会针对具体项目做结构件的定制设计会把采样代码封装成更贴近机器人业务的接口会在客户现场做完整的标定和调试。很多团队最开始也想自己全部搞定最后基本都会回归到“专业的事交给专业的人”。尤其是当下人形机器人项目节奏非常紧与其花一个工程师一个月去研究相机适配不如把这部分时间省下来投入到算法和运控上。5.2 一套完整视觉系统的交付清单根据我们和友思特合作的十几个项目经验一套完整的人形机器人视觉系统交付通常至少包含这些内容相机硬件及配套的固定支架、减震件、连接线缆完成内外参标定的相机附上标定报告和测试数据适配目标机载平台Jetson或工控机的驱动和SDK环境针对机器人场景封装的示例工程包括深度图获取、点云显示、位置追踪、手眼标定工具现场部署调试包括安装位置验证、震动测试、光照适应调参对算法和运控团队的培训确保他们能自主二次开发。这个清单做得好不好直接决定了交付之后团队能不能顺畅迭代。很多项目视觉方案前期“能用”后期迭代慢问题往往不是相机本身而是缺少一个清晰的交付边界和配套支持。5.3 按机器人类型选型不同代号型号怎么搭ZED家族不同型号在体积、功耗、防护等级、接口上差异不小选型不能只看参数要结合机器人的形态和用途。型号定位特点适合场景ZED系列基础款双目光学核心深度范围较宽早期的研究验证、算法原型开发ZED 2/2i内置IMU、主动光工业版带防护外壳需要视觉惯性融合的完整人形机器人原型ZED Mini体积紧凑、质量轻对头部重量敏感的机器人装在头部或手臂端ZED X更紧凑的模块化工装设计量产倾向的原型、嵌入式集成要求高的场景对人形机器人整机来说一般建议主力原型机选ZED 2i这类集成度高的型号IMU和主动光都有能应对更多真实环境。如果只是放在桌面上做近距离机械臂操作测试ZED Mini这种小体积的反而更匹配装在机械臂末端更容易做近距离视觉伺服。如果到了小批量生产阶段倾向于模块化、接口灵活的型号方便嵌入机器人本体结构。选型的时候还要想好算力平台。ZED的深度计算在GPU上做NVIDIA Jetson系列是市面上最主流的选择友思特在交付时会直接适配好Jetson平台的驱动环境和性能参数不用自己再折腾。最后分享一个我自己的实际经验。ZED有一个SVO录制功能可以把相机采集的图像和IMU数据全程录下来然后在电脑上离线回放。强烈建议一切项目在装车之前先拿相机到机器人实际运行的现场用SVO录制几段不同角度、不同光线的素材回去慢慢调算法。这个文件不大但包含的信息量非常全。很多时候不是相机不行而是现场光线、遮挡、纹理状况没有在部署前被充分发现。先录后装省下来的调试时间远远超过录制那点时间。这套工作流是我在所有ZED项目里都坚持先做的一步。