RPent + DeepSeek:让机械臂在仿真中学会抓取、堆叠与复用经验

给模型一句“把橙色方块放到黄色方块上”,它能否自己观察场景、规划动作、控制机械臂,并把执行经验留给下一次任务?

这次实践使用 RPent 组织 Agent 的执行流程,接入 DeepSeek 作为 planner,在 MotrixSim 的 Colorstack 场景中控制 UR5e + 2F-85,并通过 RPent memory 保存前期探索得到的操作经验。固定 memory 后,系统在 10 个随机位置布局中连续完成任务;10 次运行均通过环境判定、正常结束,并保存了完整轨迹。

成功结果之外,这组实验也暴露出三个问题:模型仍会重复推导 memory 已经给出的几何关系;成功轨迹可能产生错误的经验解释;任务完成后的总结存在明显冗余。它们说明,能完成任务只是第一步,如何让经验可靠地进入下一次决策同样关键。

从一句指令到一次完整堆叠

任务目标包括四个连续条件:抓起橙色方块,将其放到黄色方块上,完全打开夹爪,并让机械臂撤离。下面两张图来自同一次运行,使用的随机种子为 511616025。

任务开始:桌面上的橙块、黄块与蓝块

初始布局。系统需要从图像中定位橙块和黄块,再计算抓取与放置位置。

任务结束:橙块堆叠在黄块上,夹爪已撤离

任务结束。橙块已堆叠在黄块上,夹爪打开并撤离。

完整动作由六次机械臂移动构成:接近橙块、下降抓取、抬升、移动到黄块上方、下降放置、撤离。夹爪在抓取时闭合一次,在放置时打开一次。执行过程中,Agent 还需要判断方块是否随夹爪移动,并在抬升后重新估计持物相对工具中心点(TCP)的偏移。

Colorstack 使用独立的环境判定检查任务结果:

  • 两个方块的水平中心距离不超过 10 mm;
  • 两个方块的中心高度差为 50 ± 5 mm;
  • 夹爪完全打开;
  • TCP 距离橙色方块中心至少 100 mm;
  • 方块连续稳定至少 0.5 秒。

最终结果以这组环境信号为准;模型在完成操作后调用 finish 结束会话并提交执行摘要。

RPent 如何把模型、感知和机械臂连起来

DeepSeek 使用的模型标识为 openai-chat:deepseek-flash,通过 RPent 的 API planner 运行。模型接收任务、提示词、memory 和工具返回值,再选择下一步工具调用。RPent 负责执行调用、返回新的观测,并记录模型请求与动作结果;MotrixSim 负责物理仿真和机械臂运动;SAM3 根据文本提示分割图像中的目标。

主要工具构成了一条“观察—计算—动作—验证”的闭环:

工具 作用
view_env_state 获取相机图像、TCP 位姿和夹爪状态
segment 分割目标,返回可见表面在 base 坐标系中的统计信息
view_gripper_geometry 计算指定姿态下 finger pad 的位置和范围
move_to 将 TCP 移动到给定的绝对位置和姿态
set_gripper / release 闭合或打开夹爪
finish 提交执行结果并保存诊断记录

六条移动指令背后需要完成一系列坐标转换。图像中的目标中心、分割结果的可见表面中点、方块的几何中心和机器人 TCP 分别代表不同的量。Agent 先用视觉结果定位方块,再结合夹爪几何计算 TCP 目标。方块被夹起后,它在夹爪中的实际位置还可能变化,因此放置高度需要根据本次抓取重新估计。

Prompt 设计:把操作任务拆成不同功能

机械臂任务的 Prompt 同时描述目标,并约束坐标、感知、动作、memory 和结束条件。Colorstack 将这些规则拆成多个具名区块,再根据评测或探索模式组合对应的 memory 规则。每条指令都有清晰的功能归属,运行时信息也能与长期稳定的操作契约分开。

最终交给模型的结构可以概括为:

SYSTEM
  ROLE
  COORDINATES
  TOOLS
  OBSERVATION REUSE
  WORKFLOW
  COMPLETION
  EVALUATION MEMORY
    或 EXPLORATION MEMORY + EXPLORATION RETRY

USER
  TASK
  TASK CONSTRAINTS
  BEGIN

HANDOFF
  仅用于探索模式的后续 session

各部分承担不同职责:

功能类别 Prompt 区块 设计目的
角色与权限 ROLE 限定当前任务、可用数据和操作范围
坐标契约 COORDINATES 统一 base 坐标、TCP、四元数顺序及相机外参的含义
工具语义 TOOLS 说明分割、反投影、运动和夹爪返回值分别能证明什么
观测复用 OBSERVATION REUSE 要求复用仍然有效的定位和几何结果,并限制重复测量
执行流程 WORKFLOW 将任务组织为定位、接近、抓取、抬升、放置和验证
结束判定 COMPLETION 区分模型判断与环境成功信号,规定何时调用 finish
经验读取 EVALUATION MEMORY 读取索引和至多三份相关经验,坐标仍由当前观测确定
经验生成 EXPLORATION MEMORY 允许向当前 inbox 写草稿,要求记录证据、解释和适用限制
失败重试 EXPLORATION RETRY / HANDOFF 保存失败证据,在 reset 或新 session 后只改变一个策略
当前任务 TASK / TASK CONSTRAINTS / BEGIN 注入本次指令、成功条件、动作限制和初始观察要求

这种分类包含三个层次。第一层是稳定契约:坐标、工具含义和成功信号不随 seed 改变,由 System Prompt 统一维护。第二层是运行变量:User Prompt 在启动时填入任务指令、成功条件、场景和动作约束。第三层是模式权限:探索模式在共享规则之外增加草稿写入、reset 和 session 交接;评测模式沿用相同的坐标与操作流程,并以只读方式使用 memory。

Prompt 让模型在每一步回答三个问题:已经有哪些有效证据,哪个未决条件会改变下一动作,下一步应该调用什么工具。比如在抓取下降前,模型要检查 finger pad 是否与方块侧面重叠并避开桌面;方块抬升后,根据当前观测重新估计持物偏移;环境报告成功且图像没有冲突时,立即结束会话。

Memory 保存方法:规则来自经验,坐标来自实时观测

RPent 将经验生成和经验使用放在两个不同阶段。探索模式允许模型向当前运行的 inbox 写入经验草稿;草稿经过合并后成为已发布 memory。评测模式只能读取已发布内容,因此同一批测试中的经验库保持固定。

前期探索积累了四类直接影响 Colorstack 操作的知识:

  • 在当前机械臂姿态下,finger pad 大部分位于 TCP 上方,抓取高度应根据工具几何计算;
  • 方块可能在闭合和抬升过程中相对夹爪滑动,因此放置前要测量本次持物偏移;
  • 场景同时包含彩色方块和彩色地垫,仅用颜色提示可能让 SAM3 分割到地垫,需要结合 overlay、形状和表面高度判断;
  • 腕部相机中的视觉错位可能来自透视关系,修正动作前应核对可比较的 base 坐标。

每次评测开始后,模型先读取 MEMORY.md 索引,再选择三份相关经验。memory_reads.jsonl 记录了每次读取,因此 memory 的使用可以直接核验。在 10 次运行中,流程经验被读取 10 次,夹爪几何经验被读取 9 次,透视问题经验被读取 6 次,彩色地垫经验被读取 3 次。

工具日志还能看到经验如何进入决策。在 seed 511616025 中,腕部相机的颜色提示分割到了 z 约为 0 的大面积地垫,模型据此放弃该结果,改用方块上的点提示;转移到目标上方后,它也引用透视经验,没有把腕部图像里的表观错位直接换算成平移修正。在 seed 2390402793 中,模型用已记录的 pad 几何确定下降高度和闭合方向,同时重新测量当前持物相对 TCP 的偏移,而没有照搬旧运行的偏移数值。

memory 因此提供“如何定位、如何计算、何时复核”的规则;新布局中的方块位置和本次持物偏移来自实时观测。模型复用的是决策方法,而不是历史运行中的像素、XYZ 坐标或抓取偏移。

10 个随机布局的批量评测

批量评测使用 batch seed 2026 生成 10 个互不相同的布局 seed。每次运行启动独立进程,随机改变方块位置,初始 yaw 保持为零。所有运行读取同一份 memory 快照,并通过 LeRobot 保存两个 RGB 相机、机器人状态和控制参考。

配置项 设置
Planner RPent API planner
模型 openai-chat:deepseek-flash
任务数量 10
Batch seed 2026
单次请求上限 50 轮
渲染模式 GUI
Memory 批次开始时固定,同批次保持只读
轨迹保存 每次运行保存一个 LeRobot episode

批量器在启动时固定 memory 内容并记录哈希,随后逐个运行 seed。10 次任务的汇总结果如下:

指标 结果
环境判定成功 10 / 10
正常调用 finish 且进程退出码为 0 10 / 10
平均单次进程耗时 199 秒
单次进程耗时范围 163.5–270.0 秒
整批累计进程耗时 约 33.2 分钟
轨迹数据 10 个 episode,共 5,327 帧

10 次运行都采用相同的六次 move_to 动作骨架,并且都只闭合一次夹爪、释放一次。保存后的 Parquet 行数与各数据集元信息中的帧数一致。结果表明,在位置发生变化、朝向保持不变的 10 个布局中,RPent、DeepSeek、SAM3 与 MotrixSim 构成的闭环能够稳定完成这项堆叠任务。

成功运行暴露出的三个问题

1. Memory 被读取后,模型仍会重复推导

动作骨架在 10 次运行中完全一致,决策过程的长度却差异明显。最慢一次耗时 270.0 秒,输出 25,244 个 token;最快一次耗时 163.5 秒,输出 9,422 个 token。全批次模型请求累计耗时占 RPent 内部耗时的 43.0%。

日志中的冗余主要出现在动作之间:重复展开夹爪坐标变换,反复解释两个相机中的位置差异,或者增加不会改变下一动作的分割和反投影。memory 已经提供了相关规则,但提示词还没有稳定地把“读取经验”转化为“直接引用已经成立的结论”。

OBSERVATION REUSE 要求每轮只保留“有效证据、会改变动作的未决条件、下一动作”,每个阶段最多使用两个测量批次;新的测量结果不会改变动作时,模型应直接执行。日志显示,复杂感知和多视角判断会削弱这些规则的约束力,模型重新展开已经成立的结论。优化重点因此落在规则的优先级和执行稳定性上:让当前观测与 memory 一致时直接推进,只在证据冲突时启动一次针对性核验。

2. 成功轨迹也可能产生错误经验

前期探索曾产生一条看似合理的经验:模型发现 TCP 尚有约 2 mm 的跟踪残差,于是把残差再次加到下一次绝对运动目标上。任务最终仍落在成功容差内,模型却将这次动作总结为“有效修正策略”。

动作记录显示,move_to.xyz 本身就是绝对目标;再次叠加残差会引入偏移。该经验随后被修订为“绝对目标不能重复补偿上一动作的跟踪残差”,并用于后续评测。

另一次探索把较窄的可见表面范围解释为“被手指遮挡”,并提出用另一视角的跨度补齐中心。现有观测无法支持这条因果解释,因此该经验被删除。

这两个案例揭示了任务成功与经验正确之间的差异:环境判定验证堆叠结果,经验审核验证模型对过程的解释。可复用经验需要明确区分工具观测、原因解释、操作建议和适用条件;结构校验保证笔记格式,语义审核确认结论与证据之间的对应关系。

3. 冗长的 finish 总结触发了额外重试

7 次运行的 finish 总结超过 1,200 字符限制,共触发 9 次参数拒绝。模型在总结中重新罗列抓取坐标、夹爪几何、持物偏移和释放过程,而这些细节已经保存在工具记录和自动诊断文件中。

每次参数拒绝都会把错误返回给模型,再由模型生成更短的总结并重新调用 finish。这 9 次重试发生在物理任务已经完成之后,额外占用了模型请求和会话结束时间。

finish 的输入应收敛为三项:执行结果、环境证据和关键问题。抓取坐标、夹爪几何与动作序列继续由结构化记录保存。明确这项分工,可以让环境成功直接进入会话结束阶段,消除重复转述带来的收尾开销。




Enjoy Reading This Article?

Here are some more articles you might like to read next: