面向读者

验证等级

仅配置编译通过。 本案例会解析 Scenario、继续解析其中的方块叶子组件,并检查 行为和评价数据被完整保留;不会启动仿真器,也不宣称任何原生后端通过。

文件说明

  • run.yaml 选择一个 Scenario 组件,而不是在 Run 中展开整个场景。
  • main.py 检查 Scenario 来源、内部方块、行为和评价。
  • ../catalog/scenario_tabletop.yaml 保存可复用的编排。
  • ../catalog/object_cube.yaml 是编排引用的叶子组件。

为什么 Scenario 是特例

普通组件的 defaults 只配置一个叶子实例,不允许形成隐藏的组件引用图。 kind: scenario 是唯一明确的例外:它的 defaults.scene 可以包含叶子组件的 use 引用,因为场景编排正是它的职责。Scenario 不能递归引用另一个 Scenario。

FastSim Core 把 behaviorevaluation 当作不透明数据。Core 只验证它们是 Mapping、 原样保留并交给有权限的插件;它不解释“移动”、成功条件、抓取语义或任务策略。

理解 Manifest 与 Run

Manifest 保存可复用内容:

yaml
defaults:
  scene:
    objects:
      cube:
        use: object://fastsim/component-demo-cube
        pose: {xyz_m: [0.45, 0.0, 0.5], quat_xyzw: [0.0, 0.0, 0.0, 1.0]}
  behavior:
    description: Move the cube to a requested target.
  evaluation:
    target_xyz_m: [0.65, 0.0, 0.5]

Run 只负责选择:

yaml
scenario:
  use: scenario://fastsim/component-demo-tabletop

省略 @1.0.0 时会选择 Registry 明确声明的稳定版本。编译会锁定 Scenario 和内部方块 的准确版本。

运行

bash
fastsim config validate run.yaml --json
mkdir -p output
fastsim config materialize run.yaml --output output/tabletop-expanded.yaml
python main.py

预期输出会标识 scenario://fastsim/component-demo-tabletop@1.0.0objects.cube、行为描述与 Scenario 摘要。materialize 会输出可移植的展开配置, 便于初学者检查解析结果。

常见错误

  • scenario.use 旁边再写内联 scene:引用和内联只能二选一。
  • 在 Scenario 的 defaults.scene 中引用另一个 scenario://:递归编排会被拒绝。
  • 认为 Core 会执行 behavior:其解释逻辑属于插件。
  • 把物理布局藏进语义文字:实体仍然需要明确位姿。

上一节:07 — 柔性体与流体 · 下一节:09 — 默认值与参数