2.4 KiB
2.4 KiB
SDF implementation notes
These notes describe the intended runtime shape after the rewrite. Keep this file accurate when implementation changes.
Implemented behavior
The SDF skill should:
- generate explicit targets only;
- validate generated XML before writing;
- preserve existing
gen_sdf()return compatibility: XML element, XML string, or envelope dict withxml; - accept envelope
assumptions,warnings, andmetadatafields; - support
--strictwarning-as-failure behavior; - optionally run
gz sdf --checkthrough--gz-check auto|required|never; - provide optional stdlib-only authoring helpers;
- parse SDF XML from files or in-memory strings;
- resolve local mesh files relative to the generated output location;
- accept external mesh URI schemes without local filesystem resolution;
- allow pure world files when structurally valid.
Intended bundled validation scope
The bundled validator should check common structural and numeric errors:
- root element and version;
- document shape and pure world support;
- required names and duplicate names in local scopes;
- pose value counts, rotation formats, finite values, degrees usage, quaternion normalization, and local
relative_toresolution; - named frame attachment references and cycles;
- joint type set, parent/child references, axis/axis2 values, limits, and dynamics numbers;
- visual/collision owner names and geometry presence;
- primitive geometry dimensions and mesh URI/scale;
- local mesh path existence;
- inertial mass and inertia tensor plausibility;
- sensor name/type/update-rate structure;
- plugin name/filename structure.
Remaining limitations
The bundled validator is still not a full libsdformat or simulator validator. It should not claim to fully validate:
- every version-specific SDFormat schema rule;
- all nested-model frame semantics;
- transform math or resolved poses;
- mesh unit conventions;
- arbitrary mesh inertia or collision quality;
- simulator-specific physics settings;
- plugin schemas and runtime availability;
- sensor runtime behavior;
- target simulator support for every element.
Use the design ledger, structured diagnostics, gz sdf --check, simulator load tests, and explicit reporting of skipped checks.
Execution safety
The current launcher imports generator modules in-process. Generator Python files execute code and must be trusted project sources.