24年6月(CoRL’24录用)来自华盛顿大学、AI2和Nvidia的论文“Manipulate-Anything: Automating Real-World Robots using Vision-Language Models”。
RT-1[1] 等大规模努力和 Open-X-Embodiment [2] 等广泛的社区努力促进了机器人演示数据规模的扩大。然而,仍有机会提高机器人演示数据的质量、数量和多样性。尽管视觉-语言模型已被证明可以自动生成演示数据,但它们的实用性仅限于具有特殊状态信息的环境,它们需要手工设计的技能,并且仅限于与少数目标实例的交互。MANIPULATE-ANYTHING,是一种可扩展的自动生成方法,用于现实世界的机器人操作。与之前的工作不同,该方法可以在现实世界环境中运行,无需任何特权状态信息和手工设计的技能,并且可以操纵任何静态目标。用两种设置评估该方法。首先,MANIPULATE-ANYTHING 成功地为所有 7 个现实世界任务和 14 个模拟任务生成轨迹,明显优于 VoxPoser 等最先进的方法。其次,MANIPULATE-ANYTHING 的演示可以训练出比用人类演示数据或 VoxPoser [3]、Scaling-up [4] 和 Code-As-Policies [5] 生成数据训练更强大的行为克隆策略。MANIPULATE-ANYTHING 可以成为一种可扩展的方法,既可以为机器人生成数据,也可以在零样本设置中解决新任务。
如图所示:MANIPULATE-ANYTHING 是一种在现实世界环境中进行机器人操控的自动化方法。与之前的方法不同,它不需要特殊化的状态信息、手工设计的技能,也不必局限于操控固定数量的目标实例。它可以引导机器人完成一系列不同的未见过任务,操控不同的目标。此外,生成的数据使训练行为克隆策略的表现优于使用人类演示的训练。
回顾一下近期在 1)扩展操作数据和 2)VLMS 在机器人中的应用方面的努力。
扩展操作数据。在为现实世界应用部署基于视觉和语言的控制策略时,一个重大挑战是获取数据。传统上,收集此类轨迹的一种方便途径是通过人类对动作的注释(即通过遥控操作)和语言标记 [34,35,36],然而,这种方法的规模有限。为了解决这一限制并实现自主可扩展性,先前的研究采用视觉语言模型或在模拟环境中程序化生成语言注释 [4,37,38]。对于动作标签,策略范围从随机探索到学习策略 [39]。虽然以人类自我为中心的视频很重要,但它们缺乏动作标签并且需要跨实体传输 [40]。另一种策略涉及基于模型的策略,例如任务和运动规划 (TAMP) [41]。我们的方法通过结合 LLM 和 VLM 的常识知识来扩展这些方法,提供了一个结合 VLM、对象姿势预测和动态重试的优势的框架,以在模拟和真实环境中合成演示。
机器人语言模型。在机器人领域,大型语言模型已找到多种应用,包括策略学习 [42、43、44]、任务和运动规划 [45、46]、日志摘要 [47]、策略程序合成 [5] 和优化程序生成 [28]。先前的研究还探索了这些模型的物理落地能力 [3、32、48、49],而正在进行的工作 [4] 则研究它们与任务和运动规划器的集成以创建专家演示。[36] 尝试收集大量现实世界的交互数据,并采用短期轨迹。 [50] 提出一种基于关键点的视觉提示方法,通过预测affordance和相应的动作来实现现实世界的操作。
MANIPULATE-ANYTHING 框架如图所示:该过程首先将场景表示和自然语言任务指令输入 VLM,VLM 识别目标并确定子任务。对于每个子任务,向动作生成模块提供多视图图像、验证条件和任务目标,生成特定于任务的抓握姿势或动作代码。这会产生一个临时目标状态,由子任务验证模块评估以进行错误恢复。完成所有子任务后,会筛选轨迹以获得成功的演示,以供下游策略训练使用。
MANIPULATE-ANYTHING 利用 VLMs 将任务分解为子任务,为新技能或特定于任务的抓握姿势生成代码,并验证每个子任务的成功。注:由于框架的模块化特点,MANIPULATE-ANYTHING 将随着底层 VLM 的不断改进而变迁。如图所示:MANIPULATE-ANYTHING 是一个开放词汇机器人演示生成系统。在模拟中展示了 14 个任务的零样本演示,在现实世界中展示了 7 个任务的零样本演示。
MANIPULATE-ANYTHING 将任何由自由格式语言指令 T(例如“打开顶部抽屉”)描述的任务作为输入。创建遵循 T 的机器人轨迹具有挑战性,因为它具有潜在的复杂性和模糊性,需要对当前环境状态有细致的理解。给定 T 和场景图像,用 VLM 首先识别场景中与任务相关的目标,并将它们附加到列表中。随后,用 LLM 以及这些信息将主任务 T 分解为一系列离散的、较小的子任务,表示为 Ti,以及相应的验证条件 vi,其中 i 的范围从 1 到 n。例如,上述任务可以分解为子任务,包括“抓住抽屉把手”或“拉开抽屉”,验证条件是“机器人抓住了把手吗?”或“抽屉打开了吗?”。这会将指令 T 转换为一系列特定子任务 {(T1, v1), (T2, v2), . . . , (Tn, vn)}。对于每个子任务,MANIPULATE-ANYTHING 都会生成所需的操作并根据相应条件对其进行验证,以确保成功完成该子任务。此验证步骤还允许 MANIPULATE-ANYTHING 从错误中恢复并在失败的情况下再次尝试。
之前许多研究 VLM 推理能力的工作发现,如果只给出单一视点,效果不佳 [51,52,53]。在机器人操作中,用来自多个摄像机或重渲染的多个视点来最小化目标遮挡 [54,55]。利用这些见解,提出通过 VLM 进行多视点选择阶段,然后将选定的视点用于 MANIPULATE-ANYTHING 的动作生成或子任务验证。将当前观察中的所有可用视点(来自多个摄像机或来自单个 RGB-D 的重渲染视点)连接成一帧。每个连接帧的左上角都标注数字,对应特定的视点。然后,用连接的多视点查询 VLMS 选择基于子任务的理想视点。因此,对于以智体为中心和以目标为中心的动作生成,渲染场景的多个视点并查询 VLMS 以选择一个理想的视点,用于根据子任务生成动作或验证子任务验证条件是否已满足。
给定一个子任务,动作生成模块的期望输出是一系列低级动作,以 6 DoF 末端执行器姿势表示。动作可以分为两类:以智体为中心或以目标为中心。根据生成的子任务,LLM 规划器将其分类为以目标为中心或以目标为中心的动作。对于以智体为中心的动作,它将修改智体的状态;例如,它可以将机器人的末端执行器从当前状态移动(例如,“旋转 90◦”)。首先使用多视点选择来抽取最优视点,提供给 VLM,同时使用上下文学习技术来生成用于合成所需运动的代码。与以前仅使用语言模型进行代码生成的方法 [5] 不同,用 VLMS 来推理目标位置和场景,将当前状态的生成落地。
对于以物体为中心的动作,它通常用于生成特定于任务的抓握姿势以抓取某个物体(例如,“抓起一把刀进行切割”),或通过允许 VLM 为特定于任务的抓握姿势分配平移偏差来合成非抓握任务的预动作姿势。为了获得给定子任务以物体为中心的动作,首先使用与物体无关的抓握预测模型 [56] 来生成场景中所有可能的 6 自由度抓握姿势。这些姿势不受任务规范的制约,可能包括给定任务的无效抓握姿势。接下来,用 VLM 从所有可用或重渲染的视点获得受任务规范制约的目标物体部分边框(例如,如果任务是“抓起一把刀”,VLM 将检测刀的刀柄并为刀柄生成边框)。然后,VLM 执行多视点选择,以确定不受遮挡的最佳视点。最后,利用 VLM 选择的最佳视点对物体任务特定部分的边框检测,筛选出一系列建议的候选抓握姿势,并选择置信度最高的抓握姿势。这种方法能够获得最佳的任务特定抓握姿势、放置姿势和非抓握任务的预操作姿势,所有这些都充分利用了 VLM 的功能。生成动作后,可以使用一个运动规划器将机器人移动到所需姿势。
为了确保每个子任务都能正确执行,引入一个基于 VLM 的验证器。在执行完每个子任务的每个操作后,用 VLM 检查最终状态是否与验证器条件匹配。与操作生成模块类似,用多视点 VLM 选择来找到最佳视图,避免由于单一视点的遮挡或模糊性而导致的错误。如果验证器识别出失败,将从当前状态重新尝试执行上一个子任务的操作生成步骤。否则,将尝试下一个子任务。
用 GPT-4V 和 Qwen-VL [57] 作为 VLM。用 GPT-4V 进行任务分解、动作生成和验证。用 Qwen-VL 来检测和提取目标信息。为了确保在合理的预算内实现零样本执行,将每条轨迹中的动作步骤数限制为 50,验证模块最多允许 30 次尝试完成子目标。对于任务规划生成,遵循改编自 ProgPrompt [28] 的提示结构。输入 VLM 的所有提示都附有少量演示 [58]。此外,提供三个手动策划的原始动作代码片段作为示例,提示 VLM 生成新的动作代码。
在模拟实验中使用四个视点 M4 =[front, wrist, left_shoulder, right_shoulder],并为现实世界实验重渲染三个视点 [54]。为了让 VLM 更好地推理,用 256×256 的分辨率。
采用配备平行夹持器的 Franka Panda 机械手。用前置 Kinect 2 RGB-D 摄像头。为 MANIPULATE-ANYTHING 框架生成多视图输入,从生成的点云重渲染虚拟视点,类似于之前的工作 [54]。选择 7 个具有代表性的现实世界任务,包括可抓握和不可抓握的任务:open_jar、sort_objects、correct_dices、open_drawer、on_lamp、press_switch 和 close_laptop,所有任务均以语言指令为条件。每个任务在 3 次试验中通过 10 个episodes 评估,其中物体姿势各不相同。
用 MANIPULATE-ANYTHING 为每个任务生成 6 个演示,并在发生故障时手动执行场景重置。训练类似的多任务 PerAct 进行 120k 次迭代,并以类似于零样本实验的方式评估训练后的策略。
补充框架细节如下。
动作生成模块。用以智体为中心或以目标为中心的方法生成每个动作。对于以目标为中心的动作生成,利用 NVIDIA 的基础抓取预测模型 M2T2 [56] 进行拾取和放置动作。对于 6-DoF 抓取,从单个 RGB-D 相机(在现实世界中)或多个相机(在模拟中)输入单个 3D 点云。该模型输出一组关于任何可抓取物体的抓取建议,提供 6-DoF 抓取候选(3-DoF 旋转和 3-DoF 平移)和默认夹持器关闭状态。对于放置动作,M2T2 输出一组 6-DoF 放置姿势,指示在根据 VLM 规划执行放下原始动作之前末端执行器应该在哪里。网络确保物体稳定定位而不会发生碰撞。还设置 mask_threshold 和 object_threshold 的默认值来控制建议的抓取候选数量。在提出模板抓握姿势列表后,用 QWen-VL [57] 来检测目标物体,方法是在当前图像帧中提示目标物体的名称,并使用机器翻译模型 [61] 将其翻译成中文。此检测适用于所有重渲染的视点或来自不同相机的视点。然后,将这些帧连接成一张图像,并在每个子图像的右上角用数字标注。接下来,用少量样本演示和任务目标调用 GPT-4V API,以提示 GPT-4V 输出选定数量的视点,这些视点提供最无遮挡的视图,用于采样抓握姿势以实现子目标。使用选定的视点,通过运动规划器将末端执行器移动到采样的抓握姿势来执行抓握。
对于以智体为中心的动作生成,首先执行相同的视点选择步骤。使用选定的视点、一些演示示例和子目标,提示 GPT-4V 生成一个动作函数,其中包含代码片段,其中包含对当前机器人姿势执行增量动作所需的代码。然后,通过根据这些增量变化移动末端执行器来执行此操作。这个过程会不断迭代,直到获得给定子目标最理想的代码片段函数,然后将其附加到技能库中以供将来使用。
子目标验证模块。子目标验证模块通过确保已尝试了解决当前步骤操作的所有潜在尝试来帮助错误恢复。利用动作生成模块获得的临时目标状态,用多视点在任务规划生成阶段采样最佳视点,以回答为给定子目标生成的验证条件。使用与动作生成模块中相同的视点选择方法,获得最佳视图,然后执行两步序列帧推出:一个来自此视点的当前帧,另一个来自上一个动作步骤。将这两帧连接起来,用数字注释它们以表明它们的时间关系,并使用此图像提示 GPT-4V 检查验证条件是否满足,如图所示。如果答案是肯定的,将继续下一个子目标。如果答案是否定的,将重新采样新视点,生成新动作,并使用不同的种子重新尝试整个子目标。
除了用于系统评估 MANIPULATE-ANYTHING 的五个真实世界实验之外,还通过 MANIPULATE-ANYTHING 以零样本方式生成了额外的真实世界演示。这些演示涵盖了一系列任务,从推理任务到更精确的日常任务。所有任务都可以在下图看到。