今年在几个机器人的行业展会和闭门技术交流会上,我注意到一个很有意思的现象:国内头部人形机器人公司的原型机,无论行走导航、抓取操作还是数据采集,视觉感知模块里高频出现同款产品——友思特引入和集成的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项目里都坚持先做的一步。