ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

视觉语言模型+点云配准:眼在手上机械臂抓取系统实战解析

2026/9/15 4:25:55 拓冰建站 浏览量
视觉语言模型+点云配准:眼在手上机械臂抓取系统实战解析 大概两年前我们实验室换了一批新机械臂从老式的固定相机工位改成眼在手上eye-in-hand构型时组里不少人第一反应是这不就是把相机挪到机械臂末端吗有什么难的结果真正跑起来才发现视觉感知从“上帝视角”变成“第一视角”之后以前那套固定工作台的识别加抓取逻辑全都得推翻重来。尤其是想把视觉语言模型VLM和点云配准这条技术路线塞进同一个系统时问题更是成倍增加VLM擅长说“这个杯子在哪个区域”但不擅长告诉你“杯子把手朝哪个方向、距离多远”点云配准擅长算“当前点云和目标模型之间差多少度多少毫米”但又需要一个靠谱的初始位姿猜测才能保证收敛。这两个东西单独看都很强一旦组合起来中间那层“语义引导几何”的衔接逻辑才是整个系统真正难做的地方。这篇文章就围绕我实际搭建的一套融合视觉语言模型与点云配准的眼在手上抓取系统展开从头梳理架构设计、模块分工、标定细节、配准调参、仿真迁移真机一路踩过的坑。不管你是做机械臂抓取、移动操作还是想把手上的VLM能力往三维空间扩展这篇都值得花几分钟看一看。1. 为什么非要把VLM和点云配准塞进同一个系统先明确一个事实单靠VLM做机器人抓取能抓但抓不稳单靠点云配准做抓取抓得稳但前提是场景高度可控。把两者融合起来本质上是用VLM解决“开放世界里的语义泛化”用点云配准解决“已知模型下的精密位姿估计”然后让前者为后者提供初始值让后者为前者补上几何精度。1.1 VLM在三维抓取中的能力边界视觉语言模型这几年进步很快像Grounding DINO、SAM系列、以及各种多模态大模型已经能做到用一句话锁住图像里的目标物体。这个能力在二维层面非常好用但机械臂抓取不是在图像里画个框就能完事的。你告诉模型“帮我抓红色的马克杯”它能在RGB图像里给出一个边界框或者分割掩码可这个掩码不能直接转换成机械臂末端需要到达的六自由度位姿——它缺深度、缺尺度、缺物体坐标系下的朝向。有人会说图像里有深度图啊把掩码对应的深度值提升成点云再用PCA或者最小包围盒之类的方法估算姿态。这种思路在物体形状简单、摆放理想的时候确实能跑通但稍微遇到一点遮挡、堆叠、或者物体本身存在对称性PCA估算出来的姿态经常差出十几度抓取时要么撞到旁边的东西要么夹爪碰到物体边缘直接打滑。VLM擅长回答“这是什么、在哪片区域”但不擅长回答“这个物体相对相机到底偏了多少度”。后者必须交给点云配准这类几何算法来解决。1.2 点云配准单独用时的短板点云配准是机器人和三维视觉里的老牌技术从经典ICP到现在的各种深度配准方法理论已经很成熟。它要解决的问题是给一个当前观测到的点云片段和一个预先建好的CAD模型点云或者模板点云求出两者之间的刚体变换关系。有了这个变换你就知道了目标物体当前在相机坐标系下的精确位姿。但配准算法有个通病极度依赖初始值。ICP本质上是局部优化如果你的初始位姿猜测离真实位姿超过一定范围它很容易收敛到局部极值。FPFH加RANSAC这类粗配准方法能在一定程度上缓解这个问题但它在对称物体、重复纹理、稀疏点云上照样会给出错误的匹配对。在实验台上摆一个干净的杯子RANSAC可能很稳一旦换成厨房场景里的海绵、抹布、杂乱的工具堆粗配准结果基本靠运气。这个时候VLM提供的语义定位信息就变成了天然的先验约束。先用语言锁定目标所在的三维区域把配准搜索空间从全桌范围缩小到一个局部邻域初始位姿的可靠性会大幅提升。1.3 眼在手上构型给这套方案带来的额外挑战眼在手上不同于固定相机相机跟着机械臂末端一起运动。它的好处是观察角度灵活靠近抓取目标时能看到固定相机被遮挡的区域而且不存在“手伸长之后目标在图像里只占几个像素”的问题。但坏处也很明显每一次机械臂运动相机坐标系相对机器人基座的关系都会改变。如果没有高精度的实时手眼标定视觉检测出来的目标位置在机器人坐标系里就会存在明显偏移。加上运动过程中相机会抖动图像模糊、点云畸变都会比固定相机更严重。这意味着融合VLM和点云配准时不只是算法层面的融合还包括标定、滤波、坐标变换这一整套工程链路。很多论文里把眼在手上等同于“把相机装在机械臂上”就完事了实际落地时你会发现手眼标定矩阵差1毫米在远端抓取时末端误差就可能放大到5毫米以上。这也是我这篇文章特别想把工程细节摊开讲的原因。2. 系统架构设计语义先定区域几何再定姿态整体系统我按“两阶段感知、一条执行链路”来设计。感知阶段分成VLM语义定位和点云配准精估计两条流水线执行阶段由运动规划和抓取控制接管。整个系统的输入是自然语言指令加RGB-D图像流输出是机械臂末端的六自由度抓取位姿。2.1 两阶段感知的具体流程第一阶段是语义定位。RGB图像进入VLM通过类似于“请找到场景中的蓝色马克杯”这样的指令输出目标物体的二维掩码或者边界框。接着我用深度图把这个掩码区域反投影成三维点云获得一个语义点云簇。这一步非常关键它把VLM的二维语义结论翻译成三维空间里的一个局部点云集为后续配准圈定了搜索范围。第二阶段是几何配准。把语义点云簇和加载好的目标物体CAD模型点云进行配准。这里的配准并不是直接一上来就跑ICP而是先用一个初始对齐做粗配准然后再用ICP做精配准。粗配准用的是VLM给出的中心位置和朝向先验加上FPFH特征匹配精配准用的是点到面ICP并且根据物体尺寸设置收敛阈值。配准得到的变换矩阵就是目标物体在相机坐标系下的精确位姿。2.2 坐标变换链路是架构里最容易被忽略的骨架这里我想特别强调一下坐标变换。整个抓取过程至少涉及四个坐标系相机坐标系、机械臂末端坐标系、机械臂基座坐标系、目标物体模型坐标系。眼在手上结构里目标物体在相机坐标系下的位姿先通过手眼标定矩阵转换到末端坐标系再通过机械臂正向运动学转换到基座坐标系最终在基座坐标系下做运动规划。我见过不少同学在初期实现时直接把感知模块输出的位姿当成基座坐标系下的位姿用结果抓取位置总是偏移一个固定角度。这就是没走完坐标变换链路。手眼标定矩阵不是标一次就一劳永逸的相机在末端法兰上的安装如果有松动标定结果就要重做。建议每次开机后先用标定板做一次快速手眼标定尤其是拧过螺丝、拆装过相机之后别偷懒。2.3 仿真导航抓取实物链路的思路因为实验室还有一台移动机器人平台我们顺带把仿真环境里验证过的“导航到目标附近再机械臂抓取”流程也串了进来。具体做法是先在仿真环境里用Gazebo搭建场景让移动底盘通过地形点云配准完成导航定位到达预抓取点后再由眼在手上的机械臂执行VLM加配准的抓取流程。仿真到实物之间最尴尬的差异就是点云质量。仿真环境生成的点云干净得像CAD渲染图而真实深度相机出来的点云带着各种噪点和飞点。后来我们直接对真实相机采集的点云做了体素滤波加统计离群点移除再把仿真环境的传感器噪声参数调大情况才好转。这个后面会单独展开。3. 点云配准模块的工程实现从粗配准到精配准配准模块是整个系统几何精度的核心。这一节我会把我实际使用的算法流程和参数选择逻辑完完整整列出来大家可以直接参考。3.1 预处理别小看滤波和下采样真实场景下原始点云不能直接拿去配准。常见的预处理包括直通滤波裁出感兴趣区域、体素滤波降采样控制点云密度、统计滤波去掉离群噪点、以及通过法线估计为后续配准准备几何特征。需要注意的是VLM给出来的语义点云簇往往包含一部分背景点比如桌面、旁边的物体这时候要用欧式聚类或者基于距离的滤波把目标点云单独分割出来。我的参数经验是体素滤波的叶子大小设在2到5毫米之间。叶子太小点云数量太大配准实时性差叶子太大几何细节丢失配准精度打折。桌面级机械臂抓取场景下3毫米是一个不错的起点。法线估计的邻域半径通常设置成体素尺寸的3到5倍这样法线方向能保持稳定不会因为局部点云稀疏而乱跳。3.2 粗配准语义初始值加FPFH特征匹配粗配准的目标是把当前语义点云和目标模型点云大致摆到一起。这一步我采用了“语义引导的粗配准”策略根据VLM检测框中心对应的三维坐标把模型点云平移到该中心位置。利用历史抓取经验或者VLM对物体朝向的粗略估计给定一个初始旋转角范围比如“杯子通常竖直放置绕Z轴角度未知”。在初始位置上对两个点云分别计算FPFH特征并使用RANSAC进行特征匹配估算刚体变换。FPFH特征的描述子维度是33维能比较好地刻画局部几何结构。RANSAC的迭代次数我一般设到50万次以上匹配对距离阈值设为1.5倍体素尺寸。这里有个非常实用的技巧如果目标物体有很强的几何对称性比如圆柱杯、方形盒FPFH特征匹配会给出一堆几何上等价的位姿。此时不要试图靠配准算法自己选出正确朝向而是回到VLM的语义信息比如“杯子把手朝左”这种描述用语义来消解对称性歧义。几何和语义在粗配准阶段的这种互动是整个融合方案最有价值的地方。3.3 精配准点到面ICP和它的收敛判据粗配准之后精配准使用点到面ICPPoint-to-Plane ICP把位姿精度推高。点到面ICP的目标函数是让源点云中的点到目标点云对应切平面的距离之和最小收敛速度和精度都优于点到点ICP特别适用于像机械臂抓取这种需要毫米级位姿精度的场景。ICP的关键参数有最大对应距离、迭代次数、变换增量收敛阈值。我的常用配置是最大对应距离从粗配准误差决定一般为5到10毫米迭代次数上限50次当两次迭代之间的变换矩阵平移增量小于1毫米、旋转增量小于0.5度时就认为收敛。实测下来这种配置对常见桌面物体能达到2毫米以内的位姿误差。还有一个容易踩的坑ICP目标函数里的点云不能太稀疏。如果你VLM分割出来的目标只有几百个点ICP很容易被噪声带偏。建议在预处理阶段检查语义点云簇的点数如果少于2000个点可以适当扩大VLM掩码的区域把物体周围一点背景也包含进来参与配准ICP自己会在迭代中忽略非目标区域的对应点。3.4 配准失败时的表现和常用对策配准失败有几种典型表现一是输出位姿在视觉上明显偏离目标比如杯子姿态被翻转了180度二是ICP迭代次数到达上限却没有收敛给出一个停在半路的位姿三是配准结果在连续帧之间跳变同一物体每隔几帧位姿就漂移几厘米。针对这三种情况我在系统里加了两个兜底逻辑。第一个是配准置信度评分把配准后的源点云变换到目标点云坐标系下计算两者之间的重叠率重叠率低于0.6就认为配准失败重新进行粗配准。第二个是时域滤波用卡尔曼滤波对连续帧的目标位姿做平滑处理单帧配准跳变会被显著抑制。抓取前最后一帧再用一次ICP精配准保证执行位姿是最新的。4. 视觉语言模型的接入方式与语义几何融合决策VLM在整个系统里不是用来替代传统视觉而是提供现成的“语言条件目标定位”能力和一部分常识推理能力。怎么把它和点云配准融合我分三个层面讲。4.1 VLM选型与输出解析目前可用的VLM选择很多从端侧可跑的轻量模型到需要GPU集群的大模型都有。我的选择标准有三个支持中文或英文自然语言指令、推理延迟不超过1秒、能够输出相对准确的边界框或分割掩码。在实验室场景里我倾向于使用Grounding DINO类模型做边界框定位外加SAM或者FastSAM做实例分割。如果你需要输出更细粒度的描述比如“杯子把手在左侧”那么大语言模型的视觉问答能力就派上用场了。把RGB图像和语言问题一起发给多模态大模型让它输出描述或者关键点坐标。需要特别注意大模型输出的坐标有时候会超出图像边界解析时要做截断处理。4.2 从二维掩码到三维语义点云的完整链路VLM输出的掩码还是在二维图像坐标系下想要变成三维空间信息我按以下步骤处理做深度图和RGB图像的像素对齐确保掩码像素位置和深度值一一对应。遍历掩码内的所有像素结合相机内参反投影成三维坐标。对生成的三维点进行直通滤波去掉深度为零或者超过工作距离的无效点。对有效点构建KD树做欧式聚类取点数最多的簇作为目标物体语义点云。反投影公式都是常规的针孔相机模型但有一个细节容易被忽略眼在手上结构里机械臂运动时相机的外参会实时变化如果你的深度图和RGB图不是同一时刻采集的会由于运动导致色彩和深度错位。处理方法是开启相机的硬件同步模式或者至少把两路数据的时间戳对齐到同一个时钟源。4.3 抓取位姿最终如何由语义和几何共同决定抓取位姿包含位置和姿态两部分。位置基本上由配准结果直接给出即物体模型坐标系原点在机器人基座坐标系下的位置。姿态则要进一步判断配准结果可能有多个候选例如物体绕竖直轴旋转180度并不改变点云几何但会影响夹爪从哪个方向靠近。我的做法是维护一个“抓取先验库”把常见物体及其推荐抓取方向预先定义好。比如圆柱杯推荐从侧面水平抓取还是从上方竖直抓取由VLM根据语言指令和场景内容给出一个语义偏好。如果用户说“把杯子倒过来放到架子上”那抓取方向就要区别于“把杯子拿起来递给我”。VLM输出的偏好方向在配准给出的候选姿态中做加权选择权重由几何碰撞可能性副带评估。这样设计的好处是语义和几何不再是两个独立的模块而是形成了闭环语义负责缩窄几何搜索空间几何负责验证语义选择的物理可行性。5. 眼在手上的手眼标定细节决定抓取成败眼在手上系统的精度上限很大程度上由手眼标定矩阵的精度决定而不是由感知算法决定。这个结论是我们折腾了很久才彻底想明白的。5.1 AXXB问题的工程化理解手眼标定在数学上要求解AXXB方程。A是机械臂末端的运动变换B是相机在两个位置之间看到的标定板变换X就是待求解的手眼矩阵。这个方程本身解法很成熟但工程实现里到处都是坑。首先是标定板的采集数量。至少需要十几组有效的机械臂位姿和对应的标定板观测而且机械臂姿态要差异足够大。只平移不旋转或者只有小幅旋转方程会退化标定结果不稳定。我一般会规划机械臂走几个不同高度、不同俯仰角的路径在每个位置停留后采集标定板图像保证旋转轴覆盖充分。其次是标定板的平面度。打印的标定板贴在铝板上如果板子有轻微翘曲标定精度直接受损。建议用玻璃夹持或者陶瓷标定板。我亲眼见过因为标定板翘了0.5毫米最后抓取精度差了接近2毫米的情况。5.2 眼在手上标定和眼在手外标定的区别眼在手外标定时相机固定不动标定板可以贴在机械臂末端移动机械臂来观测。而眼在手上时恰好相反标定板固定在世界坐标系中机械臂运动带动相机从不同角度观测它。这里的难点在于世界坐标系里的固定标定板在机械臂移动的过程中要保持相对基座静止所以需要把标定板牢牢固定在桌子上或者地上不能用手扶着。标定完成后建议做一个简单的精度验证。让机械臂末端带着相机运动到某个位置用标定结果把一个特征点的相机坐标投影到机器人基座坐标下再让机械臂的探针实际去触碰这个点比较误差。如果误差大于3毫米就回到标定流程排查问题而不是急着往下推进。5.3 现在很多人在用Butterfly标定板/激光追踪仪我们的方案更折中工业级方案会用激光追踪仪做标定精度能到0.1毫米级别但价格高。科研和中小项目用棋盘格加OpenCV的solvePnP就够用。这颗相机和机械臂的组合我实测标定后的平均重投影误差在0.5像素以内对应到抓取位置误差大约2到3毫米足够应付大部分桌面抓取场景。标定还有一个容易忽略的坑机械臂的DH参数不准会直接影响标定结果。如果机械臂本身的绝对定位精度就不行标定出完美的矩阵也没有意义。所以做手眼标定之前先让机械臂做一次准确度测试把已知位置的探针点触进去看偏差有多大。常见的国产六轴臂一般能到1到2毫米的重复定位精度绝对精度可能差一些。这种情况可以用一个简单的方式补偿就是在执行抓取前加一个“视觉伺服预对准”步骤先用粗配准结果让机械臂运动到目标附近然后利用眼在手上的相机对准目标中心做再次配准把误差彻底消掉。6. 从仿真抓取到实物抓取迁移过程中的教训这一节可以算是全文最有实用价值的经验集合。我们实验室从仿真环境到实物抓取前前后后跑了快四个月踩了数不清的坑下面这些教训直接决定了系统能不能从论文走向实体。6.1 仿真环境点云和真实点云之间的“代差”仿真里用Gazebo配合深度相机插件生成的点云干净到像从CAD里直接导出来的一样。而真实场景里用奥比中光或者Intel RealSense点云上全是噪点、飞点、边缘毛刺透明度高的物体表面会出现大块空洞。这些问题在仿真里完全不存在。我的解决方案是“给仿真点云加噪”。在仿真环境里给深度相机插件设置高斯噪声和丢点概率把点云质量调到和真机接近的程度再在融合算法里同时加上统计滤波和半径滤波。跑通之后再拿真实点云进行验证至少能过滤掉一半的迁移问题。6.2 机械臂控制接口差异导致的执行偏差仿真环境里的运动规划发送目标位姿后机械臂通常能精确到位。真机上由于电机控制误差和负载变化末端实际到位和指令之间会有偏差。尤其在抓取瞬间机械臂的减速和停顿会给相机带来额外振动点云也会跟着模糊。针对这个问题我在抓取执行流程里增加了一个“抓取前静止等待”逻辑。机械臂运动到预抓取点后先停顿0.3到0.5秒等相机画面稳定了再做最终配准然后用当前帧的配准结果直接下发抓取指令。这一步看起来增加了执行时间但实际成功率提升非常明显。6.3 场景光照和材质对RGB-D的影响真实场景里的光照变化对VLM影响相对小但深度相机是主动光设备环境光过强或者物体表面反光严重时深度数据会出现系统性偏差。黑色物体吸光深度探测距离变短镜面物体反光深度边缘出现巨大跳变。这两种情况都会让点云配准变形。建议在部署时尽量控制环境光照或者选择在有遮光帘的实验室场景里测试。如果必须处理反光物体可以考虑给物体涂哑光漆或者使用结构光深度相机而不是双目散斑相机后者的抗反光能力会好很多。6.4 抓取目标的模型库维护配准需要目标物体的CAD模型或预先扫描的模板点云。模型来源可以是CAD文件直接采样也可以拿真机深度相机扫描后重建。CAD模型干净但可能和实物存在尺寸误差比如注塑件的脱模斜度和倒角会在模型里被简化掉。真机扫描模型贴合实物但扫描过程本身需要构建一个转台系统。我的建议是模型库以CAD为主对每个目标物体生成多分辨率点云记录物体的实际尺寸测量值和材料特性。配准之前先根据VLM识别出的物体类别加载对应的模型和抓取先验形成一个完整的“物体档案”。7. 实测效果与性能数据这部分把我们在标准桌面抓取场景下的实测数据列一下给准备复现的同学一个参照。测试场景机械臂为六轴协作臂末端安装一台深度相机工作台上放置10类不同物体包括杯子、瓶子、工具、水果模型、文具等语言指令指定目标类别和抓取意图每类测试50次共计500次抓取。指标数值VLM目标定位平均耗时约450毫秒点云预处理加粗配准耗时约300毫秒精配准耗时约120毫秒抓取位姿计算全流程约870毫秒单次抓取平均耗时约4.2秒未遮挡物体抓取成功率93%轻度堆叠场景抓取成功率81%重度堆叠场景抓取成功率62%从结果看融合方案的重度堆叠场景成功率还有较大提升空间主要瓶颈在于VLM在密集堆叠中输出的掩码经常把多个物体粘在一起导致语义点云不纯配准过程被背景点干扰。我们正在尝试用实例分割网络先做精细分割再和VLM的定位结果融合应该能进一步改善。8. 我个人觉得这套方案还能怎么改进文章最后聊点个人想法。代码仓库和时间预算允许的话下一步我最想做的改进是把配准的残差计算结果反馈回VLM的提示词。比如配准失败时把场景图像和“我找不到蓝色杯子的精确朝向它是否被其他物体挡住了”一起发回多模态大模型让模型重新给出一个语义引导或者建议调整观察视角。这等于让系统具备“看不懂就换个角度再看”的能力跟人类找东西时的行为模式更像。另一个改进方向是引入增量式模型更新。实物和CAD模型之间有差异但这部分差异可以在一次次成功抓取中逐步累积更新模板点云的局部特征让配准越来越贴合当前环境的实际物体状态。长期运行下来系统会慢慢适应每件物体的个体差异而不是永远只认最初的CAD模型。当然以上这些都属于“锦上添花”。对于当下要落地抓取系统的团队最核心的建议只有一条先把手眼标定和坐标变换吃透再谈算法融合。很多看似神奇的失败案例追查到底基本都是坐标系里差了某一个变换矩阵。把基础打牢VLM加配准的组合才会真正变成可靠的生产力工具。