面向读者
验证等级
仅配置编译通过。 本案例会解析 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 把 behavior 和 evaluation 当作不透明数据。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.0、
objects.cube、行为描述与 Scenario 摘要。materialize 会输出可移植的展开配置,
便于初学者检查解析结果。
常见错误
- 在
scenario.use旁边再写内联scene:引用和内联只能二选一。 - 在 Scenario 的
defaults.scene中引用另一个scenario://:递归编排会被拒绝。 - 认为 Core 会执行
behavior:其解释逻辑属于插件。 - 把物理布局藏进语义文字:实体仍然需要明确位姿。