i4h-workflow-scene-edit

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Edit an i4h Workflow Scene

编辑i4h工作流场景

Purpose

目的

Iterate on an existing Scene in one live simulator session, and persist the confirmed state only when explicitly asked to bake, save, or persist.
在一个实时模拟器会话中迭代现有场景,仅在明确要求bake、保存或持久化时,才保留确认后的状态。

Instructions

操作说明

  1. Run the checkout resolver and inspect target ownership.
  2. Start or reuse one bridge-backed live-authoring session by default and capture a visible baseline.
  3. Read the minimal upstream guidance and apply each requested edit as its own observable live-stage transaction without changing source.
  4. On an explicit bake/save/persist instruction, export the accumulated live state, inspect its resolved authoring facts, and have the coding agent edit the smallest owning sources.
  5. Keep the session running for further prompts until the user explicitly says stop or exit.
  6. Run static, persisted-visible, and affected dynamic validation when baking.
  1. 运行检出解析器并检查目标所有权。
  2. 默认启动或复用一个桥接支持的实时创作会话,并捕获可见基线。
  3. 读取最少的上游指导,将每个请求的编辑作为独立的可观测实时阶段事务应用,且不修改源文件。
  4. 当收到明确的bake/保存/持久化指令时,导出累积的实时状态,检查其解析后的创作事实,并让编码代理编辑最小的所属源文件。
  5. 保持会话运行以等待后续提示,直到用户明确说出“停止”或“退出”。
  6. 执行bake时,运行静态验证、持久化可见性验证和受影响的动态验证。

Resolve and inspect

解析与检查

bash
export I4H_WORKFLOWS_REPO_URL="${I4H_WORKFLOWS_REPO_URL:-https://github.com/isaac-for-healthcare/i4h-workflows}"
I4H_REPO_DIR_NAME="${I4H_WORKFLOWS_REPO_URL%/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*:}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME%.git}"
[ -n "$I4H_REPO_DIR_NAME" ] || { echo "Cannot derive a checkout name from I4H_WORKFLOWS_REPO_URL" >&2; exit 2; }
ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/i4h_workflows" ]; then
  ROOT="${I4H_WORKFLOWS:-$HOME/$I4H_REPO_DIR_NAME}"
  [ -d "$ROOT/workflows/i4h_workflows" ] || git clone "$I4H_WORKFLOWS_REPO_URL" "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"
cd "$ROOT"
./run.sh list
./run.sh show <workflow>
Treat the resolver above as part of the skill contract: a hosted copy may run outside the base repository, so never assume the current checkout contains
workflows/i4h_workflows
.
I4H_WORKFLOWS_REPO_URL
selects the clone source. When
I4H_WORKFLOWS
is unset, derive the fallback directory from that URL; set
I4H_WORKFLOWS
only to reuse or choose a specific destination. Never replace an existing checkout.
Read
DESIGN.md
, the target workflow, Scene Python, scene manifest, embodiment manifest, and relevant task manifests. Use
$ROOT/skills/i4h-workflow/references/repo-map.md
to resolve ownership.
For a G1 face, walk, reach, or collision-sensitive success contract, read
references/g1-reach-and-contact.md
. Reuse its Tasks and Scene-owned footprint interface; do not generate workflow-specific locomotion helpers or hardcode object extents in the Workflow.
An open/run request without an edit means
./run.sh <workflow> --idle
; do not invent source changes. An edit-scene request always means start or reuse
./run.sh <workflow> --live
unless the user explicitly requests offline/no-live operation. Live authoring is the default and does not require confirmation. “Save,” “persist,” or “bake” means serialize the accumulated live-stage edits into their owning sources; without one of those words, leave source untouched. “Stop” or “exit” closes the session; if persistence was not requested, discard the live-only edits. Do not stop merely because one edit prompt completed.
Before adding or resizing an asset that already appears in a maintained scene, read
references/existing-scene-assets.md
. Reuse its known USD identity, authored scale, support height, physics role, and embodiment convention instead of rediscovering them from the raw USD. Treat owning Python as source of truth and use visual-language inspection only for bounded scene-specific refinement after the known baseline is visible.
bash
export I4H_WORKFLOWS_REPO_URL="${I4H_WORKFLOWS_REPO_URL:-https://github.com/isaac-for-healthcare/i4h-workflows}"
I4H_REPO_DIR_NAME="${I4H_WORKFLOWS_REPO_URL%/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*:}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME%.git}"
[ -n "$I4H_REPO_DIR_NAME" ] || { echo "Cannot derive a checkout name from I4H_WORKFLOWS_REPO_URL" >&2; exit 2; }
ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/i4h_workflows" ]; then
  ROOT="${I4H_WORKFLOWS:-$HOME/$I4H_REPO_DIR_NAME}"
  [ -d "$ROOT/workflows/i4h_workflows" ] || git clone "$I4H_WORKFLOWS_REPO_URL" "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"
cd "$ROOT"
./run.sh list
./run.sh show <workflow>
将上述解析器视为技能契约的一部分:托管副本可能在基础仓库外运行,因此永远不要假设当前检出的内容包含
workflows/i4h_workflows
I4H_WORKFLOWS_REPO_URL
用于选择克隆源。当
I4H_WORKFLOWS
未设置时,从该URL推导回退目录;仅在复用或选择特定目标时设置
I4H_WORKFLOWS
。切勿替换现有检出内容。
阅读
DESIGN.md
、目标工作流、场景Python文件、场景清单、embodiment清单和相关任务清单。使用
$ROOT/skills/i4h-workflow/references/repo-map.md
解析所有权。
对于G1面部、行走、抓取或碰撞敏感的成功契约,请阅读
references/g1-reach-and-contact.md
。复用其Tasks和场景所属的足迹接口;不要生成特定于工作流的移动助手,也不要在工作流中硬编码对象范围。
不带编辑操作的“打开/运行”请求意味着执行
./run.sh <workflow> --idle
;请勿自行修改源文件。编辑场景的请求始终意味着启动或复用
./run.sh <workflow> --live
,除非用户明确要求离线/非实时操作。实时创作是默认模式,无需确认。“Save(保存)”、“persist(持久化)”或“bake”表示将累积的实时阶段编辑序列化到其所属源文件中;如果没有这些指令,请保持源文件不变。“Stop(停止)”或“exit(退出)”表示关闭会话;如果未请求持久化,则丢弃仅实时存在的编辑。不要仅因一个编辑提示完成就停止会话。
在添加或调整已出现在维护场景中的资产之前,请阅读
references/existing-scene-assets.md
。复用其已知的USD标识、创作比例、支撑高度、物理角色和embodiment约定,而不是从原始USD中重新发现这些信息。将所属Python文件视为事实来源,仅在已知基线可见后,才使用视觉语言检查进行有限的场景特定优化。

Establish a visible baseline

建立可见基线

Open the existing Scene as one persistent live-authoring session. Use the bridge only when
I4H_LOCAL_AGENT=1
: Local Agent commands share one serialized shell, so a foreground
--live
command would block every later edit transaction.
bash
I4H_RUN_DIR="$(pwd)/runs/<workflow>/$(date +%Y%m%d_%H%M%S)"
if [ "${I4H_LOCAL_AGENT:-0}" = 1 ] && [ -x ./local-agent/bridge.sh ]; then
  ./local-agent/bridge.sh start <workflow> "$I4H_RUN_DIR"
else
  ./run.sh <workflow> --live --run-dir "$I4H_RUN_DIR"
fi
The fallback
./run.sh <workflow> --live
must run through the host agent's persistent/yieldable foreground-session mechanism. Never launch that fallback as an ordinary blocking shell call and wait for it to exit before editing.
--live
resolves the workflow's declared
idle
mode, enables
isaacsim.code_editor.python_server
on port 8226, and keeps the simulator open until explicitly stopped. Wait for port 8226, then use the pinned upstream
isaac-sim-remote
client to inspect and modify the running stage. Keep every ordinary edit only in that live stage; do not change owning source yet. Accumulate later edit prompts in the same session. Only “bake,” “save,” or “persist” authorizes writing the confirmed live values into source. After baking, restart through
run.sh
, verify the persisted result matches the live stage, and stop when requested. An offline source edit followed by a reopen is not live authoring.
打开现有场景作为一个持久的实时创作会话。仅当
I4H_LOCAL_AGENT=1
时才使用桥接:本地代理命令共享一个序列化shell,因此前台的
--live
命令会阻止后续所有编辑事务。
bash
I4H_RUN_DIR="$(pwd)/runs/<workflow>/$(date +%Y%m%d_%H%M%S)"
if [ "${I4H_LOCAL_AGENT:-0}" = 1 ] && [ -x ./local-agent/bridge.sh ]; then
  ./local-agent/bridge.sh start <workflow> "$I4H_RUN_DIR"
else
  ./run.sh <workflow> --live --run-dir "$I4H_RUN_DIR"
fi
回退命令
./run.sh <workflow> --live
必须通过宿主代理的持久/可让步前台会话机制运行。切勿将该回退命令作为普通阻塞shell调用启动,并等待其退出后再进行编辑。
--live
会解析工作流声明的
idle
模式,在8226端口启用
isaacsim.code_editor.python_server
,并保持模拟器打开直到明确停止。等待8226端口就绪,然后使用固定的上游
isaac-sim-remote
客户端检查和修改运行中的stage。将所有常规编辑仅保存在该实时stage中;暂不修改所属源文件。在同一会话中累积后续编辑提示。只有“bake”、“保存”或“持久化”授权将确认后的实时值写入源文件。bake后,通过
run.sh
重新启动,验证持久化结果与实时stage匹配,并在收到请求时停止。先进行离线源编辑再重新打开不属于实时创作。

Preserve the live interpreter experience

保留实时解释器体验

Treat a compound prompt as an ordered stream of edits, not as one batch script. Run one bridge transaction for one user-visible operation, wait for its viewport update, inspect its result, and only then apply the next operation. For example, adding a table, two tools, two trays, and a robot is six live transactions. Never hide all requested edits inside one remote Python file or patch owning source while the user is waiting for the stage to change.
Use the one-operation helper from the workflow root for common edits:
bash
arena/.venv/bin/python scripts/live_scene_edit.py add-known-asset \
  --asset surgical_table \
  --prim-path /World/envs/env_0/Table \
  --position 0,0,0

arena/.venv/bin/python scripts/live_scene_edit.py add-cube \
  --prim-path /World/envs/env_0/RedCube \
  --position 0,0,0.3 \
  --size 0.1 \
  --color 1,0,0

arena/.venv/bin/python scripts/live_scene_edit.py scale-by \
  --prim-path /World/envs/env_0/RedCube \
  --factor 2

arena/.venv/bin/python scripts/live_scene_edit.py set-transform \
  --prim-path /World/envs/env_0/Robot \
  --position=-4.64,0,0.8 \
  --rotation 0,0,0

arena/.venv/bin/python scripts/live_scene_edit.py set-view \
  --eye 2.6,-7,3.4 \
  --target=-1.8,0,0.75

arena/.venv/bin/python scripts/live_scene_edit.py camera-from-view \
  --prim-path /World/envs/env_0/RoomCamera

arena/.venv/bin/python scripts/live_scene_edit.py capture-camera \
  --prim-path /World/envs/env_0/RoomCamera \
  --output-path "$I4H_RUN_DIR/room-camera.png"
When a comma-separated vector begins with a negative number, bind it with
=
(for example,
--position=-0.5,0.5,0.1
) so the argument parser does not treat the value as another option.
<!-- markdownlint-disable-next-line MD013 -->
The helper intentionally accepts one operation per invocation, selects the affected prim, advances visible render updates, and prints the resulting world bounds. Prefer
add-known-asset
for catalogued Healthcare assets: it reuses canonical USD, scale, orientation, physics metadata, attached-camera metadata, embodiment metadata, and expected metric bounds, then rejects a result whose size differs by more than 20%. The
g1
preset must create the standard
head
camera below the live robot preview; treat a missing camera prim as a failed robot edit, activate it, and verify its view before continuing. If no executable preset exists, warm-start from
references/existing-scene-assets.md
and its owning source before using generic
add-usd
. Both asset-add commands place the reference below a transform wrapper so a referenced asset's authored root transform cannot discard the requested live position, rotation, or scale.
add-known-asset
,
add-usd
,
add-cube
, and
camera-from-view
tag their prims for deterministic export; pass
--name
or
--alias
when the source/manifest name cannot be derived generically from the prim path. Inspect bounds before continuing. Use
capture-camera
for fast visible camera checks: it activates the requested camera, schedules a synchronous
FileCapture
, advances the renderer, and rejects an absent, empty, or stale output. Do not use the upstream asynchronous viewport screenshot helper in the persistent bridge session. Use
activate-camera
when capture is unnecessary and
inspect
for one-prim verification. Use raw
isaacsim_send.py
only for an operation the helper does not support, and still send one observable edit per call; record any untagged prim explicitly when baking.
Infer ordinary support relationships from the requested workspace and measured bounds. A robot or object intended for a table, cart, tray, pad, or floor must have its lower support bound aligned with that surface and its footprint plausibly contained by it; do not accept a floor-mounted, floating, or visibly interpenetrating placement merely because every named asset is present. Include those support relationships in the bounded visual rubric before baking.
Send a short progress update while the scene visibly changes. Do not spend extended time designing the eventual source representation before the first requested live edit. Inspect ownership and prepare baking after the live result exists.
将复合提示视为有序的编辑流,而非单个批处理脚本。针对一个用户可见操作运行一次桥接事务,等待视口更新,检查结果,然后再应用下一个操作。例如,添加一张桌子、两个工具、两个托盘和一个机器人是六个实时事务。切勿将所有请求的编辑隐藏在一个远程Python文件中,或在用户等待stage变化时修改所属源文件。
使用工作流根目录中的单操作助手进行常见编辑:
bash
arena/.venv/bin/python scripts/live_scene_edit.py add-known-asset \
  --asset surgical_table \
  --prim-path /World/envs/env_0/Table \
  --position 0,0,0

arena/.venv/bin/python scripts/live_scene_edit.py add-cube \
  --prim-path /World/envs/env_0/RedCube \
  --position 0,0,0.3 \
  --size 0.1 \
  --color 1,0,0

arena/.venv/bin/python scripts/live_scene_edit.py scale-by \
  --prim-path /World/envs/env_0/RedCube \
  --factor 2

arena/.venv/bin/python scripts/live_scene_edit.py set-transform \
  --prim-path /World/envs/env_0/Robot \
  --position=-4.64,0,0.8 \
  --rotation 0,0,0

arena/.venv/bin/python scripts/live_scene_edit.py set-view \
  --eye 2.6,-7,3.4 \
  --target=-1.8,0,0.75

arena/.venv/bin/python scripts/live_scene_edit.py camera-from-view \
  --prim-path /World/envs/env_0/RoomCamera

arena/.venv/bin/python scripts/live_scene_edit.py capture-camera \
  --prim-path /World/envs/env_0/RoomCamera \
  --output-path "$I4H_RUN_DIR/room-camera.png"
当逗号分隔的向量以负数开头时,使用
=
绑定(例如
--position=-0.5,0.5,0.1
),这样参数解析器不会将该值视为另一个选项。
<!-- markdownlint-disable-next-line MD013 -->
该助手故意每次调用仅接受一个操作,选择受影响的prim,推进可见渲染更新,并打印生成的世界边界。对于已分类的医疗资产,优先使用
add-known-asset
:它复用标准USD、比例、方向、物理元数据、附加相机元数据、embodiment元数据和预期度量边界,然后拒绝大小差异超过20%的结果。
g1
预设必须在实时机器人预览下方创建标准的
head
相机;将缺失的相机prim视为机器人编辑失败,激活它并在继续之前验证其视图。如果没有可执行的预设,请从
references/existing-scene-assets.md
及其所属源文件进行热启动,然后再使用通用的
add-usd
。这两个资产添加命令都会将引用放置在变换包装器下,这样引用资产的创作根变换就不会丢弃请求的实时位置、旋转或缩放。
add-known-asset
add-usd
add-cube
camera-from-view
会为其prim添加标签以便确定性导出;当源/清单名称无法从prim路径通用推导时,传递
--name
--alias
。在继续之前检查边界。使用
capture-camera
进行快速可见相机检查:它激活请求的相机,调度同步
FileCapture
,推进渲染器,并拒绝不存在、为空或过期的输出。不要在持久桥接会话中使用上游异步视口截图助手。当不需要捕获时使用
activate-camera
,使用
inspect
进行单prim验证。仅当助手不支持某个操作时才使用原始的
isaacsim_send.py
,并且仍然每次调用发送一个可观测编辑;bake时显式记录任何未标记的prim。
从请求的工作区和测量的边界推断常规支撑关系。放置在桌子、推车、托盘、垫子或地板上的机器人或对象,其下部支撑边界必须与该表面对齐,并且其占地面积要合理地包含在该表面内;不要仅仅因为所有命名资产都存在就接受地面安装、悬浮或明显互穿的放置。在bake之前将这些支撑关系纳入有限的视觉规则中。
当场景可见变化时发送简短的进度更新。在第一次请求的实时编辑之前,不要花费大量时间设计最终的源表示。在实时结果存在后,检查所有权并准备bake。

Session lifecycle

会话生命周期

  • On the first “edit scene” prompt, use
    local-agent/bridge.sh
    only when
    I4H_LOCAL_AGENT=1
    ; otherwise launch
    ./run.sh <workflow> --live
    through a persistent/yieldable host session. Wait for port 8226.
  • On every later scene prompt, detect and reuse the open bridge session; do not reset or relaunch the Scene unless the requested change requires it.
  • Apply each add/move/rotate/scale/material/camera operation separately to the same live stage, select the affected prim, advance the viewport, and verify it before continuing.
  • After adding a robot, verify every camera declared by its authoring preset. For G1, require the live
    Robot/Asset/head_link/RobotHeadCam
    preview and bake with a registered G1 embodiment whose
    robot_head_cam
    sensor is exposed through the
    head
    alias.
  • Return control to the user after each prompt while leaving the simulator and bridge running.
  • Bake only on explicit authorization. Baking does not imply stop unless the user also says stop/exit.
  • On stop/exit without bake, close the session and leave source unchanged. A Local Agent session closes with
    ./local-agent/bridge.sh stop <workflow>
    .
  • Use offline/source-first editing only when the user explicitly disables live mode or the bridge cannot operate. Report a bridge blocker before using that fallback; never silently substitute it.
  • 首次收到“编辑场景”提示时,仅当
    I4H_LOCAL_AGENT=1
    时使用
    local-agent/bridge.sh
    ;否则通过持久/可让步的宿主会话启动
    ./run.sh <workflow> --live
    。等待8226端口就绪。
  • 后续每次收到场景提示时,检测并复用已打开的桥接会话;除非请求的更改需要,否则不要重置或重新启动场景。
  • 对同一个实时stage分别应用每个添加/移动/旋转/缩放/材质/相机操作,选择受影响的prim,推进视口,并在继续之前验证操作结果。
  • 添加机器人后,验证其创作预设声明的每个相机。对于G1,需要实时的
    Robot/Asset/head_link/RobotHeadCam
    预览,并使用已注册的G1 embodiment进行bake,其
    robot_head_cam
    传感器通过
    head
    别名暴露。
  • 每个提示完成后将控制权交还给用户,同时保持模拟器和桥接运行。
  • 仅在明确授权时执行bake。bake并不意味着停止,除非用户同时说“停止/退出”。
  • 未执行bake就停止/退出时,关闭会话并保持源文件不变。本地代理会话使用
    ./local-agent/bridge.sh stop <workflow>
    关闭。
  • 仅当用户明确禁用实时模式或桥接无法运行时,才使用离线/源优先编辑。使用该回退之前报告桥接阻塞问题;切勿静默替换。

Use upstream Isaac Sim skills

使用上游Isaac Sim技能

Read
references/isaacsim-skill-routing.md
, then load only the upstream skills required by the request. State the selection before editing. Use current upstream semantics for generic physics, cameras, sensors, USD, rendering, and spatial reasoning; integrate them through the closest current i4h Scene pattern.
阅读
references/isaacsim-skill-routing.md
,然后仅加载请求所需的上游技能。编辑前说明所选技能。将当前上游语义用于通用物理、相机、传感器、USD、渲染和空间推理;通过最接近的现有i4h场景模式集成它们。

Iterate live, then let the coding agent bake

实时迭代,然后由编码代理执行bake

Apply requested asset, layout, physics, camera, and transform changes through port 8226 first. For a compound prompt, preserve its order and inspect the live stage after each individual operation. Do not preemptively patch files merely because their eventual owner is known.
When explicitly asked to bake/save/persist, export the confirmed live values and resolve the reusable catalog facts without launching another simulator:
bash
I4H_RUN_DIR="runs/<workflow>/<YYYYMMDD_HHMMSS>"
mkdir -p "$I4H_RUN_DIR"

arena/.venv/bin/python scripts/live_scene_edit.py export-scene \
  --workflow <workflow> \
  --root-path /World/envs/env_0 \
  --output-path "$I4H_RUN_DIR/live_scene.json"

arena/.venv/bin/python scripts/authoring_info.py snapshot \
  <workflow> "$I4H_RUN_DIR/live_scene.json"
export-scene
records every helper-managed asset, primitive, robot, and camera with its confirmed transform and camera optics. Keep that snapshot in the run directory as authoring evidence. Pass a previous run snapshot through
--baseline
only when a later live export needs to merge it: existing prims are re-read from the current stage, newly tagged prims are added, and removed prims are omitted.
authoring_info.py
is read-only; it validates the snapshot and returns code-ready catalog metadata and derived manifest capabilities immediately. It never generates or edits workflow code.
The coding agent then patches the existing asset, Scene, and manifest templates using the closest maintained source pattern. Commit only those owning sources; do not commit the exported authoring snapshot or treat it as a second Scene contract. Never copy a reusable USD path, canonical scale, mass, embodiment registry name, action contract, attached camera, or camera alias from memory: query
authoring_info.py asset <preset>
or the complete snapshot report, then use the catalog from owning source. Scene-specific names, placement, camera optics, and explicit overrides come from the snapshot.
Write only to the owning layer:
  • Bake assets, layout, physics, cameras, randomization, view aliases, actuation mapping, or reset hooks into Scene/asset/envcfg source.
  • Bake cross-boundary camera/object names, control rate, cap, or mode overrides into the scene manifest.
  • Bake mode composition and goal semantics into the workflow.
  • Bake reusable behavior into a Task.
  • Bake cross-process robot labels, calibration, or teleop devices into the embodiment manifest.
  • Bake a policy prompt, camera, observation, model, or training contract into the remote-task manifest.
Preserve the quaternion convention at each concrete API boundary. Do not add compatibility conversions or duplicate catalog facts across Python and YAML.
For a camera based on the current perspective, treat the viewport pose as an initial estimate. Compute and validate a stable live look-at from task-relevant bounds. On bake, add the confirmed env-local camera through the closest Scene pattern, declare it in the manifest, and verify every recording/policy consumer that should receive it.
首先通过8226端口应用请求的资产、布局、物理、相机和变换更改。对于复合提示,保留其顺序,并在每个单独操作后检查实时stage。不要仅仅因为已知最终所有者就预先修补文件。
当明确要求bake/保存/持久化时,导出确认后的实时值并解析可复用的目录事实,无需启动另一个模拟器:
bash
I4H_RUN_DIR="runs/<workflow>/<YYYYMMDD_HHMMSS>"
mkdir -p "$I4H_RUN_DIR"

arena/.venv/bin/python scripts/live_scene_edit.py export-scene \
  --workflow <workflow> \
  --root-path /World/envs/env_0 \
  --output-path "$I4H_RUN_DIR/live_scene.json"

arena/.venv/bin/python scripts/authoring_info.py snapshot \
  <workflow> "$I4H_RUN_DIR/live_scene.json"
export-scene
记录每个助手管理的资产、prim、机器人和相机及其确认的变换和相机光学参数。将该快照保存在运行目录中作为创作证据。仅当后续实时导出需要合并时,才通过
--baseline
传递之前的运行快照:现有prim从当前stage重新读取,新标记的prim被添加,移除的prim被省略。
authoring_info.py
是只读的;它验证快照并立即返回可用于代码的目录元数据和派生的清单功能。它从不生成或编辑工作流代码。
然后编码代理使用最接近的维护源模式修补现有资产、场景和清单模板。仅提交那些所属源文件;不要提交导出的创作快照或将其视为第二个场景契约。切勿从内存中复制可复用的USD路径、标准比例、质量、embodiment注册表名称、动作契约、附加相机或相机别名:查询
authoring_info.py asset <preset>
或完整的快照报告,然后使用所属源文件中的目录。特定于场景的名称、放置、相机光学参数和显式覆盖来自快照。
仅写入所属层:
  • 将资产、布局、物理、相机、随机化、视图别名、驱动映射或重置钩子bake到Scene/asset/envcfg源文件中。
  • 将跨边界的相机/对象名称、控制速率、上限或模式覆盖bake到场景清单中。
  • 将模式组合和目标语义bake到工作流中。
  • 将可复用行为bake到Task中。
  • 将跨进程机器人标签、校准或遥操作设备bake到embodiment清单中。
  • 将策略提示、相机、观测、模型或训练契约bake到远程任务清单中。
在每个具体API边界保留四元数约定。不要在Python和YAML之间添加兼容性转换或重复目录事实。
对于基于当前视角的相机,将视口姿态视为初始估计。计算并验证与任务相关边界的稳定实时朝向。bake时,通过最接近的场景模式添加确认的环境本地相机,在清单中声明它,并验证所有应接收它的记录/策略消费者。

Validate

验证

bash
./run.sh show <workflow> --mode <affected-mode>
./run.sh lint <workflow> --mode <affected-mode>
./run.sh lint --all
uvx ruff check --config pyproject.toml <changed-python-files...>
Run focused tests through each affected component's uv project. After the coding agent's static validation, reopen once with
./run.sh <workflow> --live
, compare every requested visual change and declared camera against the exported snapshot, then stop when requested. Do not add extra restarts between export, source editing, and this persisted-visible check. Run affected dynamic modes when physics, reset, actuation, policy observations, task behavior, or success changed. Idle is insufficient for those changes.
When success excludes collision, dynamic validation must include a forced-contact negative case and a fresh-reset recovery case from
references/g1-reach-and-contact.md
. Do not call the success rule validated if its configured contact signal has only ever returned false.
Stop leftovers with
./stop.sh all
.
bash
./run.sh show <workflow> --mode <affected-mode>
./run.sh lint <workflow> --mode <affected-mode>
./run.sh lint --all
uvx ruff check --config pyproject.toml <changed-python-files...>
通过每个受影响组件的uv项目运行聚焦测试。编码代理完成静态验证后,使用
./run.sh <workflow> --live
重新打开一次,将每个请求的视觉变化和声明的相机与导出的快照进行比较,然后在收到请求时停止。不要在导出、源编辑和此持久化可见性检查之间添加额外的重启。当物理、重置、驱动、策略观测、任务行为或成功规则发生变化时,运行受影响的动态模式。Idle模式不足以验证这些变化。
当成功规则排除碰撞时,动态验证必须包括来自
references/g1-reach-and-contact.md
的强制接触负面案例和重置恢复案例。如果配置的接触信号仅返回过false,则不要认为成功规则已验证。
使用
./stop.sh all
停止残留进程。

Troubleshooting

故障排除

Fix manifest/workflow lint before launch. If the rendered result differs, compare the baseline, authored prims, bounds, cameras, and owning source before retrying.
启动前修复清单/工作流的lint问题。如果渲染结果不同,在重试之前比较基线、创作的prims、边界、相机和所属源文件。

Prerequisites

先决条件

Require a supported existing workflow, complete simulator setup, and the relevant upstream Isaac Sim skills for generic scene semantics.
需要受支持的现有工作流、完整的模拟器设置以及用于通用场景语义的相关上游Isaac Sim技能。

Limitations

限制

Use
i4h-workflow-create
for a new workflow. Live idle validates stationary layout but not physics, actuation, policy observations, or success. A live session is process-local; export before stopping because unexported edits are lost if it dies. The live helper covers common assets, raw USDs, cubes, transforms, cameras, inspection, capture, and export; the coding agent handles source authoring and any semantics outside those utilities.
使用
i4h-workflow-create
创建新工作流。实时Idle模式仅验证静态布局,不验证物理、驱动、策略观测或成功规则。实时会话是进程本地的;停止前导出,因为如果会话终止,未导出的编辑会丢失。实时助手涵盖常见资产、原始USD、立方体、变换、相机、检查、捕获和导出;编码代理处理源创作和这些工具之外的任何语义。

Examples

示例

  • Add a red cube, move G1, add a room camera, bake all changes, and stop.
    → keep one bridge-backed simulator session open, apply the three edits live in order, export and inspect one snapshot at “bake,” patch and statically validate the owning source, reopen once for persisted-visible validation, and stop.
  • Add a red cube, move G1, add a room camera, bake all changes, and stop.
    → 保持一个桥接支持的模拟器会话打开,按顺序实时应用三个编辑,在“bake”时导出并检查一个快照,修补并静态验证所属源文件,重新打开一次进行持久化可见性验证,然后停止。

Completion gate

完成标准

Report upstream skills used, live session/bridge status, edits applied live, whether persistence was authorized, owning sources changed only during bake, static tests, live and persisted visible observations, camera checks, dynamic rollout results including collision-negative evidence when applicable, clean stop status, and any unresolved mismatch.
报告使用的上游技能、实时会话/桥接状态、实时应用的编辑、是否授权持久化、仅在bake期间更改的所属源文件、静态测试、实时和持久化可见观测结果、相机检查、动态部署结果(包括适用的碰撞负面证据)、干净的停止状态以及任何未解决的不匹配。