Franka Task Card#

单臂和双臂共用生成、回放实现,复用现有 --planner task_cardRobotSpec.replay_card。真机使用带版本的独立 JSON 卡片,包含动作列表及 每步视觉 anchor。LIBERO 的 XY 回放、抓取修正与真机坐标约定不同,因此不复用 其执行算法,也不直接加载仿真卡片。

生成#

用普通 Franka planner 记录一次成功尝试,保留完整 states.json、RGB-D、 相机元数据,以及录制时使用的机器人 YAML 和标定文件。按源 step 为每个 move_deltarotate_delta 编写 annotations JSON;录制 Agent 可以 根据可见推理、工具调用和图片编写,由操作员核对。以下 step 编号仅为示例:

{
  "3": {"intent": "接近杯子", "phrase": "the red cup", "camera": "base"},
  "5": {"intent": "调整腕部视角", "rotation_mode": "relative"}
}

双臂支持 based455 定位相机;单臂支持 wristthird_person。 生成时 Molmo 在动作前的源图片定位,深度和标定转换得到三维点,再计算动作后 TCP 相对此点的偏移。回放时在当前图像重新定位并重算 move_delta;两臂使用 最新版统一的 right_base 运动坐标。左臂 workspace 检查再转换到 left_base。 缺少明确坐标标签的旧版双臂记录会被拒绝,需要重新录制。

旋转 relative 保留原 delta,但要求起始姿态与录制时相差不超过 0.15 rad; fixed 保存目标四元数,根据当前姿态通过旋转组合计算 delta。依赖物体方向 的旋转不能标成固定姿态;目前需要合适的 VLA primitive,尚未实现方向估计。 生成器不会根据位移数值猜测动作目的,缺少标注时拒绝生成。

python -m robots.franka.task_card.generate \
  --robot dual_franka --task dual_franka_t1 \
  --run-dir logs/SOURCE_RUN --annotations annotations.json \
  --robot-config /path/to/robot.yaml \
  --calibration-path /path/to/hand_eye_calibration.json \
  --molmo-endpoint http://MOLMO_HOST:PORT \
  --destination memory/dual_franka/task_card/cup.json

生成过程只连接 Molmo,不连接机器人。终端要求人类确认源尝试成功。 Agent 明确报告 failure/stuck、回放结果失败、动作返回失败、不支持的动作或 step 编号断裂都会拒绝生成。连续 step 无法证明未发生漏记的硬件动作,仍需 核对 transcript。源目录保持不变;目标文件已存在时拒绝覆盖。

回放#

rpent --robot dual_franka --task-id 1 --planner task_card \
  --task-card memory/dual_franka/task_card/cup.json \
  --robot-config /path/to/robot.yaml \
  --calibration-path /path/to/hand_eye_calibration.json \
  --molmo-endpoint http://MOLMO_HOST:PORT \
  --vla-endpoint http://VLA_HOST:PORT

单臂生成使用 --robot franka --task franka_t1,回放使用 --robot franka --task-id 1。单臂 VLA 仍需外部 endpoint;双臂可使用原有 本地 VLA 配置。机器人、Ray 和控制器部署要求沿用各自文档。

回放有三处终端交互:初始化环境前确认人工复位并允许运动(EnvClient 构造会 reset);初始化后再次确认开始;完成后人类判定 success/failure。只有人类 success 才令 solved() 为真。动作或定位失败则直接失败,停止后续步骤。 左右臂依照源 step 顺序调用;双臂 VLA 保持一次整体调用并重新推理,不新增 并行调度器。等待人工确认期间,回放器不下发动作。

输出保留 states.json、图片和 transcript,并增加:

  • task_card_outcome.json:人类判定、错误、源 step 到回放 step 的映射。

  • task_card_recipe.jsonl:本次实际尝试的 primitive 参数。

失败也保存上述证据;失败 JSONL 不能作为成功 recipe。机器人配置和标定的 hash 必须与生成时一致。解析式位移需在各臂 workspace 内且单步不超过 0.20 m, 旋转不超过 0.35 rad。这些检查不提供碰撞检测或硬件急停。

本次使用终端交互,暂不支持 --dashboard--interactive。上游新增的 双臂 --explore 可单独使用,本回放流程不自动发布 memory。双臂 VLA 支持 vla_right_graspvla_handoffvla_left_place,单臂仍用 vla_grasp。 自动化测试使用离线 mock;实际机械臂、 Molmo 和标定组合仍需现场验证。