不调用模型检查改动
对 skill、运行时或 worker 的改动,可以在模拟器中端到端检查而不进行模型调用:用回放的模型回复代替调用模型。
--script FILE 接受一个回复的 JSON 列表,或者同时带有 verifier 答复的 {"replies": [...], "verifier": [...]}(没有这些答复时,verifier 回答 YES):
[ "<python>\nif 'start' in globals():\n start('B', 'scripted check')\nprint(list_policies())\nname = list_policies()[0]['name']\non('TIMEOUT', lambda trace: True)\nimport time\nbegan = time.time()\nt = run_policy(name, 'Stack the three bowls together.', max_seconds=6)\nprint(t, 'wall', round(time.time() - began, 1))\nprint([round(v, 3) for v in get_state()['joint_position']])\nshow(get_observation(['cam_head']), 'after policy')\n</python>", "<finish>run_policy check</finish>"]harness run configs/experiments/dev.toml --script configs/scripts/pipeline_check.json --output runs/checkharness program configs/experiments/dev.toml --task stack_bowls --script my_replies.json| 脚本 | 检查内容 |
|---|---|
configs/scripts/pipeline_check.json |
状态、相机、一次运动、一个 guard 中止一次运动、夹爪、一个控制器、一次错误报告、verifier、finish |
configs/scripts/run_policy_check.json |
第一个配置的学习型策略运行 6 s |
configs/scripts/run_policy_rules_check.json |
同一个策略:在偏离起始位姿时新的运行被拒绝,在 home() 之后运行,持续到机械臂停止 |
configs/scripts/policy_alone.json |
单独运行配置的学习型策略:从起始位姿到 episode 结束完成整个任务(configs/experiments/policy-alone-dev.toml 在每个任务上测量它;scripts/policy_card.py 为其描述整理分数) |
configs/scripts/eef_check.json |
在 stack_bowls 上按物体 id 使用的工具:locate、pick、release、push,然后 home() |
configs/scripts/xpolicylab_check.json |
在调试环境下运行一个导出的 XPolicyLab 策略 |
回复用完时,episode 结束(<finish>scripted replies exhausted</finish>)。
回放已记录的 episode
Section titled “回放已记录的 episode”python scripts/replay_script.py runs/dev/general_pickup/seed-0 > replay.jsonharness run configs/experiments/dev.toml --tasks general_pickup --seeds 0 --script replay.json \ --output runs/replay-checkreplay_script.py 把一个 episode 的模型回复和 verifier 答复转成脚本,并在 stderr 上打印记录的状态、reward 和步数。在相同任务和开发 seed 上回放它们,会用改动后的代码运行相同的程序。预计会有小的差异:即使代码不变,接触丰富的运动在不同运行之间也不是确定性的。
在运行中的 worker 上试验代码
Section titled “在运行中的 worker 上试验代码”python scripts/dev_console.py --reset stack_bowls 0python scripts/dev_console.py --code "print(move_eef('left_arm', get_state()['left_ee_pose'], max_seconds=2))"python scripts/dev_console.py --exec my_program.py --images /tmp/shotsdev_console.py 针对 --endpoint(默认 http://127.0.0.1:8771)构建一个包含所有层的会话,运行代码,打印各次执行,并把 show() 的图像保存到 --images。episode 在多次调用之间保持;Python 变量不保持。--vlm、--segmenter、--policy 和 --world-model 接受各服务的 URL。
跟踪一个 episode
Section titled “跟踪一个 episode”python scripts/episode_status.py runs/dev # the newest episode, one line per turn