Browser does not support (or has disabled) JavaScript, some features of this page may not work properly

当机械臂学会“看”和“听”:基于 GLM-4V 与 SAM 的智能机械臂系统

0:00
/2:19

Demo 视频


📅 本项目完成于 2023 年,是早期探索多模态大模型与机器人控制结合的实践。

一、背景:让机械臂"听懂人话"

2023 年,GPT-4V、GLM-4V 等多模态大模型相继发布。它们不仅能读懂文字,还能"看懂"图片——这为机器人控制打开了一扇全新的大门。

传统机械臂编程需要逐帧定义关节轨迹,费时费力且毫无泛化能力。而多模态大模型天生具备语义理解 + 视觉感知的能力——如果能让大模型直接"指挥"机械臂,会怎样?

带着这个问题,我们开发了一套基于 GLM-4V 多模态大模型的智能机械臂系统:用户只需用自然语言说出任务(如"把桌面上的方块捡起来"),系统就能自主完成从感知到执行的全流程闭环。

myCobot 机械臂实验平台
六轴 myCobot 机械臂实验平台,搭载摄像头进行视觉感知

二、系统架构:四大模块协同

系统由四个核心模块构成,数据在它们之间流转形成完整的感知-决策-执行链路:

系统架构图
系统整体架构:PC 端(Whisper + SAM + Prompt 工程)→ 云端 GLM-4V → 机械臂端执行
模块技术方案部署位置职责
语音识别OpenAI WhisperPC 本地将用户口语指令转为文本
视觉感知SAM + SoM 标定PC 本地图像分割、物体定位、坐标生成
语义决策GLM-4V(API)云端任务分解、动作规划、API 选择
动作执行myCobot 280 六轴桌面端接收高级指令,执行物理抓取

一条典型指令("清理桌面")的处理流程:语音被 Whisper 转录 → 摄像头拍照并经 SAM 做视觉标定 → 标定后的图片与文本 Prompt 一起送入 GLM-4V → 大模型将任务分解为子步骤并输出机械臂 API 调用序列 → 机械臂逐条执行。


三、核心创新:SoM 视觉标定

多模态大模型虽然能"看懂"图片,但它输出的物体位置信息往往只是模糊的文字描述(如"在桌面的左上方"),无法直接转换成机械臂可用的精确坐标。这是当时大模型落地机器人控制面临的核心痛点。

我们引入了 SoM(Set-of-Mark)视觉标定方法来解决这一问题:

  1. SAM 分割:对摄像头拍摄的桌面图像,使用 Meta 的 Segment Anything Model(SAM)生成每个物体的精确掩模(mask);
  2. 坐标计算:对每个 mask 内的所有像素坐标求平均值,得到该物体的中心位置;
  3. 数字标记:在图像上为每个物体叠加数字标签(如 0、1、2);
  4. 大模型识别:将标记后的图片发送给 GLM-4V,模型可以精确地说"抓取物体1",而非模糊地描述位置。
SoM处理前
SoM 处理前:原始摄像头画面
SoM处理后
SoM 处理后:物体被编号标记,大模型可精确引用

这一方法将 GLM-4V 的语义理解能力与 SAM 的高精度分割能力深度融合——大模型不再需要输出物理坐标,只需引用被标记的物体编号,由 SAM 负责精确定位。各自做自己最擅长的事。


四、核心创新:多智能体 Prompt 工程

让大模型直接输出机械臂控制指令听起来简单,实际挑战重重:任务需要分解、执行需要监督、失败需要反思。单一 Prompt 难以胜任所有角色。

我们设计了一套三智能体 Prompt 工作流,将不同职责拆分给三个"bot":

智能体角色职责
TaskBot任务规划师接收用户指令 + 图像,将复杂任务分解为子任务序列,为每个子任务选择合适的机械臂 API
JudgeBot质量审查员判断每个子任务是否需要重新拍照确认(涉及物体移动的任务需要,纯计算任务不需要)
LastBot反思纠错者在任务执行后审查结果,检测失败并生成修正策略——例如物体被意外推动后重新定位

三者的协作形成了一套自带纠错能力的决策闭环。而且我们设计了两套工作流模式:高精度模式(三 Bot 全开,适合复杂任务)和快速模式(跳过 LastBot,适合简单指令),在准确率和响应速度之间灵活切换。


五、工程落地:踩过的坑与解法

从跑通 Demo 到稳定运行,中间隔着大量工程细节。以下是几个实际遇到的问题和解决方案:

  • 🛠️ 痛点一:大模型输出坐标不准
    GLM-4V 直接输出的物体位置是模糊的自然语言描述,机械臂无法使用。
    引入 SAM + SoM 标定,大模型只需引用标记编号,精确坐标由 SAM 计算。
  • 🛠️ 痛点二:机械臂运动不到指定位置
    由于机械误差和传感器精度限制,单次移动指令可能无法使机械臂到达目标坐标。
    实现重复移动与检查机制:每次移动后调用 _get_coords_with_retry() 验证实际坐标,误差超过 10% 则自动重试。
  • 🛠️ 痛点三:图像坐标系与机械臂坐标系不一致
    SAM 输出的是图像像素坐标,机械臂需要的是物理空间坐标。
    通过尺子标定法:在摄像头下放置尺子,标定图像上两点后计算像素与物理尺寸的比例关系,建立两套坐标系的映射。
  • 🛠️ 痛点四:Prompt 过于丰富时模型"挑着执行"
    当约束指令过多时,大模型并不一定会严格遵循每一条。
    设计监督与自我审查机制:将关键约束拆分为独立检查步骤,通过 JudgeBot 逐条验证。
  • 🛠️ 痛点五:机械臂动作延迟导致指令丢失
    代码发出运动指令后立即发送下一条,机械臂来不及响应。
    在每个动作指令后添加合适的 time.sleep() 延迟,确保机械臂有足够时间完成当前动作。

值得一提的是,项目中还封装了一套高级机械臂指令集——不再让大模型输出底层关节角度,而是封装成语义级 API(grab("方块")move_to("纸团") 等),大幅降低了模型的输出错误率。


六、成果与意义

经过以上优化,系统实现了"说一句话,机械臂自动干完"的零样本操作闭环:

  • 零样本泛化:无需针对特定物体训练,任意桌面物体均可识别与抓取
  • 多模态融合:GLM-4V(语义)+ SAM(定位)+ Whisper(语音)三大模型协同
  • 效率飞跃:单次任务时间缩短约 80%,远超传统逐帧编程方式
  • 鲁棒可靠:自研重试机制与死循环检测,确保真实环境下的系统稳定性

这个项目的核心启示——大模型不需要替代传统视觉算法,而是应该与它们各司其职——让 LLM 做它擅长的高级推理和规划,让 SAM 做它擅长的精确感知。"融合而非替代"的思路,后来也贯穿了我在具身智能方向的所有后续工作。


延伸阅读

Author: Alan
Date:2026年06月10日

Comments