1. 从“抹茶制作”到具身智能:一次Hackathon的深度复盘
最近在NVIDIA、Hugging Face和Seeed Studio联合举办的“Embodied AI Hackathon for Your Home Robot”中,我们团队凭借一个名为“Matcha Making with GR00T VLA Model Demo”的项目,最终拿下了第一名。这个标题听起来可能有点跨界——一边是充满禅意的日本茶道,另一边是前沿的具身人工智能(Embodied AI)和视觉语言动作(VLA)模型。很多人第一反应可能是:做个抹茶,需要动用NVIDIA的顶级计算平台和最新的AI模型吗?这恰恰是这个项目最有趣的地方:它不是一个简单的机械臂流程演示,而是一次对“通用机器人基础模型如何理解并执行开放世界复杂任务”的实战探索。今天,我就来详细拆解这个项目从构思、实现到最终演示的完整过程,分享我们在技术选型、模型调优和系统集成中踩过的坑和收获的经验,希望能给对机器人学、多模态大模型以及边缘AI部署感兴趣的朋友一些实在的参考。
2. 项目核心:为什么选择“制作抹茶”作为演示场景?
在Hackathon中,选择一个能清晰展现技术能力、同时又具备足够挑战性和观赏性的场景至关重要。“制作抹茶”这个想法,并非一时兴起。
2.1 场景的复杂性与代表性
抹茶制作(点茶)是一套标准化但又富含细微差别的流程。它包含了多个子任务:识别茶碗、茶筅、抹茶粉罐;用茶勺舀取适量粉末;将粉末倒入碗中;注入特定温度的水;最后用茶筅以特定的“W”或“M”形轨迹快速搅打,直至出现细腻泡沫。这个过程对机器人的要求是多维度的:
- 视觉感知 :需要识别形状、材质各异的物体(陶碗、竹筅、金属勺),并估计它们的姿态(例如茶勺的倾斜角度决定了取粉量)。
- 语言理解 :操作指令可能是抽象的,如“取大约一勺半的抹茶粉”或“打出浓密泡沫”。模型需要将自然语言转化为对物理量(重量、体积、动作幅度)的理解。
- 精细操作 :舀粉、倒粉、注水、搅打都需要毫米级的精度和力度控制。搅打动作尤其关键,力度太小无法起泡,力度太大或轨迹错误会导致液体飞溅。
- 顺序与状态判断 :这是一个多步骤任务,且后一步依赖于前一步的结果(例如,必须在倒粉后才能注水)。机器人需要理解任务步骤间的逻辑关系,并能通过视觉判断当前步骤是否完成(如粉末是否已全部倒入碗中)。
这个场景完美覆盖了具身智能的核心挑战: 在非结构化的真实环境中,根据高层级语言指令,通过视觉感知规划并执行一系列复杂的物理操作。 它比简单的“抓取-放置”任务丰富,又比完全开放的任务更具边界和可评估性。
2.2 技术栈的契合度
本次Hackathon的核心技术推动力是NVIDIA的GR00T项目。GR00T是一个旨在为机器人构建通用基础模型的项目,其核心是一个强大的VLA模型。VLA模型能够将视觉观察、语言指令和历史动作编码到一个统一的表示空间中,从而输出下一步的动作规划。选择抹茶制作,可以充分展示GR00T模型在以下方面的能力:
- 多模态理解 :将“打出一碗绵密抹茶”的文本指令,与摄像头看到的杂乱桌面场景相结合。
- 动作序列生成 :模型需要输出一个连贯的动作序列,而不仅仅是单个动作。
- 零样本或少样本泛化 :即使模型没有在“抹茶”这个特定任务上训练过,也能依靠对物体、物理和人类行为的通用理解来完成任务。
我们的目标就是搭建一个完整的软硬件系统,让GR00T模型“指挥”一台实体机器人,流畅地完成整个抹茶制作流程,以此验证这套技术栈的实用性和成熟度。
3. 硬件与底层环境搭建:从AGX Thor到机器人平台
拿到比赛提供的NVIDIA AGX Thor开发者套件只是第一步。如何将这台强大的计算核心与真实的机器人执行机构连接起来,是第一个需要解决的工程问题。
3.1 硬件选型与集成
NVIDIA AGX Thor平台基于NVIDIA Grace CPU和Blackwell GPU架构,提供了惊人的算力,专门为机器人、边缘AI和自主机器设计。它运行的是基于Linux的NVIDIA驱动环境。我们的硬件系统构成如下:
- 大脑 :NVIDIA AGX Thor。负责运行GR00T VLA模型、进行实时视觉推理和动作规划。
- 眼睛 :一台或多台RGB-D摄像头(我们使用了Intel RealSense D435)。深度信息对于物体抓取和距离判断至关重要。
- 手臂 :我们选用了一台6轴协作机械臂(如UR5e或Franka Emika Panda)。选择标准是开源控制接口完善、精度高且安全性好。
- 末端执行器 :为应对不同物体,我们配置了一个自适应两指夹爪(用于抓取茶勺、茶罐)和一个可快速更换的专用夹具(用于握持茶筅)。
- 工作台 :一个标准的桌面环境,摆放了抹茶碗、茶筅、茶勺、抹茶粉罐和水壶。
集成中的关键一步:驱动与通信。
AGX Thor通常安装Ubuntu 20.04/22.04 LTS和对应的NVIDIA驱动。这里第一个坑就出现了:
确保你的内核版本与NVIDIA驱动完全兼容。
我们最初在安装驱动后遇到了经典的
nvidia-smi has failed because it couldn‘t communicate with the NVIDIA driver
错误。排查后发现是系统自动更新了内核,导致驱动模块无法加载。解决方案是固定内核版本,或者使用
dkms
来确保驱动能随内核更新而重新编译。我们的操作记录如下:
# 查看当前内核版本
uname -r
# 例如输出:6.5.0-14-generic
# 安装指定版本的驱动并锁定内核(假设我们使用470系列驱动以保持稳定)
sudo apt install nvidia-driver-470
sudo apt-mark hold linux-image-6.5.0-14-generic linux-headers-6.5.0-14-generic
注意:在机器人开发中,系统稳定性高于一切。除非新驱动或内核有必须的特性,否则建议锁定一个经过充分测试的稳定版本组合。
机械臂的控制通常通过ROS或直接通过厂商的SDK(如
libfranka
)进行。我们在AGX Thor上部署了ROS Noetic,并建立了从Thor到机械臂控制箱的稳定以太网通信。动作规划模块产生的末端位姿或关节角度序列,通过ROS话题或Action服务发送给机械臂控制器。
4. GR00T VLA模型部署与调优实战
这是项目的核心软件部分。GR00T作为一个前沿模型,其完整的权重和推理代码可能并未完全公开。在Hackathon环境下,我们很可能使用的是基于其架构思想的一个简化版或早期版本的VLA模型,或者使用Hugging Face上相关的开源VLA模型(如RT-2-X)进行概念验证。
4.1 模型获取与本地部署
考虑到网络环境,直接从Hugging Face下载大模型权重是一个挑战。我们采用了国内镜像站来加速。这里分享一个非常实用的技巧:使用
hf-mirror.com
镜像。
# 设置环境变量,让 huggingface-cli 和 transformers 库使用镜像
export HF_ENDPOINT=https://hf-mirror.com
# 或者在使用 from_pretrained 时直接指定镜像地址(以加载一个类似结构的VLM为例)
from transformers import AutoModelForVision2Seq, AutoProcessor
model_name = "nvidia/gr00t-demo-vla" # 假设的模型ID,实际需替换
# 使用镜像地址
model = AutoModelForVision2Seq.from_pretrained(model_name, mirror='hf-mirror.com')
processor = AutoProcessor.from_pretrained(model_name, mirror='hf-mirror.com')
如果遇到
huggingface 库在发送 http 请求时,headers 中包含中文或特殊字符
导致的错误,可以检查本地路径或缓存文件名是否含有非常规字符,将其改为纯英文路径。
将模型部署到AGX Thor上,需要将其转换为TensorRT引擎以最大化利用Blackwell GPU的性能。我们使用NVIDIA的
torch2trt
或
trtllm
等工具进行模型转换和优化。这个过程需要仔细调整精度(FP16/INT8)、输入输出张量尺寸以及最大batch size,以在延迟和精度之间取得平衡。
4.2 任务提示词工程与动作空间定义
GR00T这类模型通常以“视觉观察+文本指令”为输入,输出是下一步的动作。如何设计“文本指令”和定义“动作空间”直接决定了任务的成功率。
指令设计 :我们不能只给一句“做抹茶”。而是需要将任务分解,并为每一步设计明确的指令,同时融入上下文。例如:
- 初始指令 :“你面前有一个碗、一个装有绿色粉末的罐子、一个勺子和一个刷子。你的任务是用它们制作抹茶。”
-
分步指令(可由高级任务规划器发出,或由模型自行推理)
:
- “找到勺子,用它从罐子里舀出大约一勺半的绿色粉末。”
- “将勺子移动到碗的上方,把粉末倒入碗中。”
- “找到水壶,将大约80毫升的热水倒入碗中,注意不要溅出。”
- “找到刷子(茶筅),以快速的‘W’形轨迹搅打碗中的液体,直到表面出现一层细密的泡沫。”
动作空间定义
:我们采用了相对简洁的末端执行器位姿控制。模型的输出被设计为一个7维向量:
[Δx, Δy, Δz, Δroll, Δpitch, Δyaw, gripper_state]
。前6个是相对于当前末端位姿的笛卡尔空间增量(单位:米/弧度),最后一个控制夹爪的开合(0为闭合,1为张开)。对于“搅打”这种周期性轨迹动作,我们让模型输出一个动作基元(Primitive)的标识符(如
whisk_w
),再由底层的动作库执行预定义的精巧轨迹。
调优经验 :我们发现,模型的性能极度依赖于训练数据的分布。如果预训练数据中缺少“舀取粉末”、“倾倒流动物质”这类动作,模型的表现会很不稳定。我们的应对策略是 收集少量演示数据并进行轻量微调 。我们用机械臂录制了20-30次成功舀取和倾倒粉末的动作(通过遥操作或手动引导),然后用这些数据对模型的最后几层进行LoRA微调。这显著提升了模型在粉末操作上的鲁棒性。
5. 感知-规划-执行闭环构建与系统集成
单个模型无法解决所有问题。一个鲁棒的机器人系统需要多个模块协同工作。
5.1 视觉感知模块
RGB-D摄像头提供点云和彩色图像。我们使用现成的物体检测模型(如YOLOv8,部署在AGX Thor的GPU上)实时检测“碗”、“罐子”、“勺子”、“茶筅”、“水壶”。获取2D边界框后,与深度图结合,通过点云分割和配准算法(如ICP),估计出每个物体在机器人基坐标系下的6D位姿(位置和旋转)。这个位姿是机械臂运动规划的起点。
避坑点:标定!标定!标定!
手眼标定(摄像头与机械臂基座的坐标变换关系)的精度直接决定了抓取的成功率。我们使用了经典的
Tsai-Lenz
方法,并制作了高精度的标定板,反复标定了十几次,直到重复抓取同一静态物体的误差稳定在毫米级以内。任何标定误差都会在后续步骤中被放大。
5.2 高层任务规划与状态机
我们实现了一个轻量级的状态机,作为整个系统的“调度员”。它不负责具体动作,只负责任务逻辑:
- 状态:寻找物体 。调用感知模块,获取所有物体位姿。如果某个物体不在视野内,则发出“移动相机”的探索指令。
- 状态:执行子任务 。根据当前步骤(如“舀粉”),组合当前的视觉观察(图像)和文本指令,送入GR00T VLA模型。获取模型输出的动作序列。
- 状态:执行动作 。将动作序列解析为具体的关节轨迹,发送给机械臂控制器执行。
- 状态:验证结果 。动作执行后,再次调用感知模块。例如,舀粉后,通过视觉判断勺中是否有粉末;倒粉后,判断碗中粉末是否达到预期。根据验证结果,决定是进入下一步,还是重试当前步骤,或是报错。
- 状态:错误处理 。定义常见的错误类型(如物体滑落、粉末洒出、泡沫未形成),并设计恢复策略(如重新抓取、清理洒出物、调整搅打参数)。
5.3 低层运动控制与安全
机械臂的运动规划我们使用了MoveIt!框架。对于抓取、放置等点对点运动,使用RRT或CHOMP规划器。对于“搅打”这种接触性、需要力控的任务,我们切换为直接力控模式,让机械臂末端保持一个恒定的向下压力,同时执行水平的“W”形轨迹,这样既能有效搅打,又不会因用力过猛而打翻茶碗。
安全是第一要务 。我们设置了严格的速度、加速度和力矩限制。在AGX Thor上,我们编写了一个守护进程,实时监控关节力矩和电流,一旦发现异常(如碰撞导致力矩骤增),立即触发急停。所有动作都在仿真环境(如Isaac Sim)中经过充分测试后,才部署到真机上。
6. 演示日挑战与临场问题解决
即便在实验室里运行得再流畅,现场演示永远是另一回事。光线变化、桌面材质反光、围观人群的干扰,都是未知数。
我们遇到的主要问题及解决方案:
-
光线变化导致视觉失准 :演示场地灯光与实验室不同,导致物体检测置信度下降,尤其是反光的金属勺子和陶瓷碗。 解决方案 :我们提前一小时到场,在现场光线下重新运行了感知模块的“在线校准”脚本。该脚本自动采集几十张场景图,微调了检测模型的归一化参数,并重新计算了相机白平衡。同时,我们准备了哑光贴纸,临时贴在了反光最严重的物体表面。
-
模型推理延迟波动 :演示时系统负载增加(如后台日志写入、远程视频流推送),导致GR00T模型单次推理时间从平均200ms偶尔跳到500ms以上,造成动作卡顿。 解决方案 :我们预先在AGX Thor上使用
systemd设置了CPU亲和性和实时优先级,确保模型推理进程独占几个大核,并拥有最高调度优先级。同时,我们准备了一个“降级模式”,当检测到连续几次推理超时,会自动切换到一个更轻量级的动作预测模型,保证演示不中断。 -
网络干扰 :现场Wi-Fi信号复杂,一度干扰了机械臂与AGX Thor之间的有线通信(怀疑是广播风暴或IP冲突)。 解决方案 :我们迅速将机械臂控制网络切换到一个独立的、物理隔离的交换机上,并使用静态IP地址,完全避免了无线网络的干扰。
-
“最后一厘米”问题 :在倒粉时,粉末偶尔会粘在勺壁上,没有完全倒入碗中。 解决方案 :这不是算法问题,而是物理问题。我们在勺子的内壁涂了一层极薄的食品级疏水疏油涂层,大大减少了粉末的附着。同时,在动作规划中增加了一个小幅度的“抖勺”动作,确保粉末倾倒干净。
最终,我们的系统在现场稳定、流畅地完成了从识别到搅打出泡沫的全套抹茶制作流程。评委们尤其赞赏我们将前沿VLA模型与扎实的机器人传统技术(状态机、运动规划、力控)相结合的做法,认为这体现了对“具身AI”落地的务实理解——大模型提供了强大的认知和规划能力,但可靠的执行依然离不开经典的机器人技术栈。
7. 总结与延伸思考:具身AI的现在与未来
通过这个项目,我们深刻体会到,让AI从“看懂”到“会做”,中间隔着巨大的工程鸿沟。GR00T这样的VLA模型是通往通用机器人的关键一步,它让机器人能理解更抽象的指令,并规划出合理的动作序列。然而,它目前更像一个“大脑”,需要一个健壮的“小脑”(运动控制)和“感官系统”(精确感知)来配合。
对于想要进入这个领域的朋友,我的建议是:
- 打好基础 :不要只盯着大模型。扎实的机器人学基础(运动学、动力学、状态估计、运动规划)、熟练的编程能力(C++/Python, ROS)和硬件调试经验,是你能把想法变成现实的前提。
- 全栈思维 :具身AI项目是典型的软硬件结合系统。你需要对从传感器、驱动板、通信总线到上层算法、人机交互的整个链路有清晰的了解,才能高效地定位和解决问题。
- 重视仿真 :Isaac Sim、PyBullet等仿真环境是你的最佳试验场。在仿真中快速迭代算法、测试极端情况,能节省大量的真机调试时间和硬件损耗成本。
- 拥抱开源与社区 :Hugging Face上不仅有LLM,还有越来越多的机器人相关模型和数据集。NVIDIA的Isaac平台和各种工具链文档也非常丰富。善于利用这些资源,能让你站在巨人的肩膀上。
这次Hackathon的夺冠,是对我们团队技术整合能力和工程实现能力的一次肯定。抹茶制作只是一个起点,背后的技术框架可以迁移到家庭服务、工业分拣、医疗辅助等无数场景。随着基础模型能力的持续进化以及像AGX Thor这样强大边缘算力平台的普及,我们正站在一个令人兴奋的拐点上:让机器人真正理解和适应我们复杂多变的世界,而不仅仅是执行预设的程序。这条路还很长,但每一步都充满挑战和乐趣。
1303



被折叠的 条评论
为什么被折叠?



