OpenUSD: intent-subtype live bindings + server-delivered asset content - #17
Merged
Merged
Conversation
…aming) Serve the artist-authored USD asset closure (root layer + component references) through the OPC UA address space so a generic connector can enumerate, stream, verify, cache, and compose a self-contained local stage with no external asset setup, then live-update as before. Servers that do not expose Assets remain conformant (external resolution). - OpenUsdShared/UsdAssetDelivery.cs: read-only Part 5 FileState serving helper (Open/Read/Close/GetPosition/SetPosition over byte[], bounded handles); AttachStageAssets materializes the stage Assets folder with one OpenUsdAssetType (+ SHA-256 Digest) per served layer. - Pump + Robotics servers: embed their USD assets and serve the stage closure (Plant/pump/remote-pump; Cell/robot/tool). - Connector: OpenUsdConnector.Assets.cs enumerates stage.Assets, streams each layer via Part 5, verifies Digest (fail-closed), and caches with path sanitization; --fetch-assets writes a self-contained stage.usda. - Regenerated OpenUsdBinding NodeSet in both servers' Model/. - e2e: ServedAssetsAreFetchedVerifiedAndCached (pump + robotics).
…et FileType (PR #14 review) Sync the C# reference impl to the updated companion NodeSet: Live-binding split (spec 5.4): - Servers create the concrete binding subtype per intent (retype the <Binding> placeholder child to OpenUsd{Telemetry,Alarm,History,Command} BindingType) and set intent-specific members via the subtype factories; the removed IntentProfile enum is no longer written. - Connector matches the four binding subtype NodeIds and derives the intent from the instance TypeDefinition (was: reading the IntentProfile property); the internal OpenUsdIntentProfile discriminator + downstream logic are kept. Asset content delivery (spec 5.15): OpenUsdAssetType now subtypes Part 5 FileType, so the asset node itself is the file — UsdAssetDelivery wires the read-only Open/Read/Close handlers onto the asset node, and the connector streams each asset directly (no File child). - Regenerated OpenUsdBinding NodeSet copied into both servers' Model/. - Verified: OpenUsd e2e 27/27 (net10.0); bridge + both servers build clean on net10.0 and net48.
…s (PR #14 review) Sync impl to the renamed OpenUsdValueChangeBindingType (was Telemetry) and the now-Mandatory command members: OpenUsdModel + connector use ValueChangeBindingTypeId; both servers default CreateBinding to ObjectTypes.OpenUsdValueChangeBindingType. Copied regenerated NodeSet into both servers' Model/. Verified: OpenUSD e2e 27/27 (net10.0); bridge + both servers build clean on net10.0 + net48.
Code-review audit fixes: - Connector Convert now applies the spec 5.8 conversion offset (target = Scale * converted + Offset); BindingInfo gains Offset, read from the binding node (default 0.0). No behavior change on the examples (offset=0). - Fix stale comments referencing the removed OpenUsdTelemetryBindingType name (-> OpenUsdValueChangeBindingType). - Re-copied the regenerated OpenUsdBinding NodeSet (Model Version 0.2.0) into both servers' Model/. Verified: OpenUSD e2e 27/27 (net10.0); bridge + both servers clean on net10.0 + net48.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Reference impl (both example servers + the connector bridge) for the OpenUSD Bindings companion model, kept in sync with
opcua-draftsPR #14: the intent-subtype live-binding model (§5.4) and the optional server-delivered USD asset content (§5.15). A server that does not exposeAssetsremains conformant.Live-binding split (§5.4)
<Binding>placeholder child is retyped toOpenUsd{Telemetry,Alarm,History,Command}BindingType— and set intent-specific members (AlarmAspect,Command*) via the subtype factories; the removedIntentProfileenum is no longer written.TypeDefinition(was: reading theIntentProfileproperty). The internalOpenUsdIntentProfilediscriminator + downstream subscribe/command/history logic are unchanged.Asset content delivery (§5.15)
Applications/OpenUsdShared/UsdAssetDelivery.cs(linked into both servers) — read-only Part 5FileStateserving helper.OpenUsdAssetTypesubtypesFileType, so the asset node itself is the file: the handlers wire onto the asset node and the connector streams each asset directly via its ownOpen/Read/Close(noFilechild).OpenUsdConnector.Assets.cs— enumeratestage.Assets, stream each layer, verifyDigest(fail-closed), cache with path sanitization;--fetch-assetswrites a self-containedstage.usda.Opc.Ua.OpenUsdBindingNodeSet copied into both servers'Model/.Validation
net10.0.Stacked on
openusd-robotics-e2e. Companion spec:opcua-draftsPR #14.