sdf

sdf

热门

SDFormat/SDF模型与世界生成、验证及模拟器交接。用于`.sdf`文件、SDFormat XML、Python `gen_sdf()`源码、模型、世界、链接、关节、位姿、框架、惯性、视觉/碰撞几何体、网格URI、传感器、灯光、物理、插件、包含、Gazebo、静态SDF审查或模拟器特定元数据。不用于符号距离场几何体。

8286Star
946Fork
更新于 2026/7/11
SKILL.md
readonly只读
name
sdf
description

SDFormat/SDF模型与世界生成、验证及模拟器交接。用于`.sdf`文件、SDFormat XML、Python `gen_sdf()`源码、模型、世界、链接、关节、位姿、框架、惯性、视觉/碰撞几何体、网格URI、传感器、灯光、物理、插件、包含、Gazebo、静态SDF审查或模拟器特定元数据。不用于符号距离场几何体。

SDF

来源:维护于earthtojake/text-to-cad
使用本地安装的技能文件作为运行时的事实来源;仓库链接仅用于来源追溯和发布审查。

当交付物为SDFormat文档或Python gen_sdf()源码时使用此技能。SDFormat描述模拟器和世界行为:模型、世界、框架、位姿、链接、关节、惯性、视觉、碰撞、传感器、灯光、物理、插件、包含和模拟器元数据。

此技能用于SDFormat,而非符号距离场几何体。

核心规则

  1. 将定义gen_sdf()的Python文件视为事实来源。将配置的.sdf文件视为生成的工件,除非用户明确要求直接编辑XML。
  2. 在编辑前确定目标消费者:Gazebo/libsdformat版本、其他模拟器、仅可视化工具、模型包或世界交接。
  3. 确定文档类型:模型级SDF、世界级SDF或模型在世界中。对于可复用的机器人/对象导出,优先使用模型级SDF。
  4. 除非目标明确要求其他单位,否则使用SI单位:米、千克、秒、弧度。
  5. 除非目标消费者限制版本,否则新输出优先使用version="1.12"
  6. 在编写位姿、框架、关节轴、网格缩放、惯性、传感器或插件之前,建立设计日志。使用references/design-ledger.mdreferences/llm-guardrails.md
  7. 不要仅凭视觉印象推断空间变换。从上游源数据、图纸、模拟器文档、测量值或明确假设中推导位姿、轴、缩放、质量、惯性和框架名称。
  8. 优先使用辅助函数和命名常量,而非大型XML字符串字面量。隐藏数字是常见的SDF失败模式。
  9. 仅使用scripts/sdf或仓库现有的SDF启动器生成明确目标。不要运行目录范围的生成。
  10. 在重新生成引用上游几何体、网格、机器人描述、渲染、拓扑或包资产的SDF之前,先使用其所属工作流重新生成这些资产。
  11. 生成后,运行可用的检查:捆绑验证、可选的gz sdf --check、模拟器加载、关节运动以及插件/传感器启动。
  12. 报告假设、跳过的检查、未解决的资源路径以及目标特定的兼容性风险。

范围

使用此技能处理SDFormat输出和生成器。不要用于符号距离场建模、原始几何体生成、规划语义,或掩盖不正确的上游机器人/源数据,除非任务明确仅限模拟器。

CAD查看器交接

完成创建或修改.sdf的SDF工作后,如果安装了$cad-viewer技能,必须始终将明确的文件路径交给$cad-viewer$cad-viewer必须启动CAD查看器(如果尚未运行),并返回相关创建或更新文件的链接;如果$cad-viewer不可用或启动失败,则报告该情况,而不是静默省略交接。

工作流

  1. 定位gen_sdf()源码和预期的.sdf输出。
  2. 读取或创建设计日志。
  3. 在编辑任何<pose><frame>、关节轴、relative_toexpressed_in、嵌套作用域、传感器框架或插件框架之前,阅读references/frame-semantics.md
  4. 编辑生成器源码,而非生成的XML。
  5. 当可选的构建辅助函数能使生成的结构更清晰时使用它们;仍然允许使用原始ElementTree。
  6. 重新生成明确目标。
  7. 将捆绑验证视为护栏,而非模拟器证明。
  8. 当可用时,运行目标消费者的冒烟测试。
  9. 报告已运行的检查、跳过的检查和假设。静态渲染不执行SDF插件或读取文件编写的运动元数据。

命令

使用项目或工作区的Python环境运行。将示例中的python视为解释器占位符;如果裸python不可用,则替换为python3、项目虚拟环境解释器或配置的解释器路径。

python scripts/sdf path/to/source.py
python scripts/sdf path/to/source.py -o path/to/output.sdf
python scripts/sdf path/to/a.py=out/a.sdf path/to/b.py=out/b.sdf

纯Python目标会在其源文件旁边生成同名的.sdf文件。-o / --output仅对单个纯目标有效。SOURCE.py=OUTPUT.sdf支持自定义多目标输出路径。

如果运行时支持可选的外部检查:

python scripts/sdf path/to/source.py --gz-check auto
python scripts/sdf path/to/source.py --gz-check required
python scripts/sdf path/to/source.py --gz-check never

gz sdf --check是可选的消费者验证。当不可用时应报告为已跳过,除非明确要求。

必需的报告格式

完成SDF任务时,包含一个简洁的报告:

生成:path/to/model.sdf 来自 path/to/model.py
已运行的检查:
- 捆绑SDF验证:通过
- gz sdf --check:跳过,未安装gz
- 模拟器加载:跳过,目标模拟器不可用
- 查看器交接:`$cad-viewer`链接已返回
假设:
- 假设网格单位为米。
- 假设激光雷达框架与lidar_link重合。
风险:
- 相机插件文件名未在目标模拟器环境中验证。

参考资料

  • 生成命令:references/gen-sdf.md
  • 生成器契约:references/generator-contract.md
  • SDF工作流:references/sdf-workflow.md
  • 构建辅助函数:references/builder-helpers.md
  • LLM护栏:references/llm-guardrails.md
  • 设计日志:references/design-ledger.md
  • 框架语义:references/frame-semantics.md
  • 验证范围:references/validation.md
  • 冒烟测试:references/smoke-tests.md
  • 互操作性说明:references/interoperability.md
  • 示例:references/examples.md
  • 运行时说明和当前限制:references/implementation-notes.md