zerodds-spatial-dds

DDS profiles and add-ons. SpatialDDS 1.6 profile (OpenArCloud SpatialDDS) as Rust types with XCDR2 codecs, generated from IDL at build time.

zerodds-spatial-dds provides the SpatialDDS types. They are not written by hand: the build script runs the vendored idl/spatial_core.idl through zerodds-idl-parse, zerodds-idl-lower and zerodds-lang-rules and emits the modules spatial and builtin with inherent encode/decode methods on top of zerodds-wire. The encoding is chosen per aggregate from its extensibility, little-endian: @final as plain XCDR2, @appendable as delimited XCDR2 (with DHEADER), @mutable as parameter-list XCDR2.

Generated modules:

  • spatial::common: FrameRef, MetaKV, AssetRef, TileKey, vector and matrix aliases, CovarianceType, CoordConvention.
  • spatial::core: PoseSE3, Aabb3, FramedPose, GeoPose, FrameTransform, the union CovMatrix; plus builtin::Time.
  • spatial::disco (spatial discovery): Announce, Capabilities, CoverageElement, TopicMeta, ServiceKind, Transform, Depart.
  • spatial::anchors: AnchorEntry, AnchorSet, AnchorDelta.
  • spatial::sensing::common, spatial::sensing::vision, spatial::sensing::lidar, spatial::sensing::rad: stream metadata, frames and detections for camera, LiDAR and radar.
  • spatial::semantics: Detection2D, Detection2DSet, Detection3D, Detection3DSet.
  • spatial::slam_frontend: Feature2D, KeyframeFeatures, MatchSet, Landmark, Tracklet.
  • spatial::vio: ImuInfo, ImuSample, SensorFusionSample, FusedState.
  • spatial::argeo: NodeGeo.

topic(operator, kind) builds the per-operator topic name sdds/<operator>/<kind>.

Deviations from upstream: the vendored IDL combines types.idl, core.idl and discovery.idl of SpatialDDS 1.6 and differs from the upstream text in five places. Four rename members that appear on the wire, because the upstream identifiers collide case-insensitively with a type name in the same scope: geopose → geo_pose, health → health_state, roi → requested_roi, codec → codec_kind. The fifth spells the last enumerator of RadTensorLayout as _CUSTOM, an escaped keyword without effect on the wire. Member names are part of the Complete TypeObject and determine the member IDs of @mutable types when no @id is given, so compatibility with a peer generated from the unmodified upstream IDL must not be assumed.

The crate is a type layer. It contains no transport, and according to its README it is not an independent cross-vendor interoperability certification. The ROS 2 mapping is in zerodds-spatial-ros2.

Spec anchors

  • SpatialDDS 1.6 (OpenArCloud, idl/v1.6): source of idl/spatial_core.idl.
  • OMG DDS-XTypes 1.3 §7.4.2, Table 59: encoding per extensibility (cited in build.rs).
  • OMG IDL 4.2 §7.2.3.1: case-insensitive comparison of identifiers in one scope, the reason for the renamed members (cited in the IDL header).

Consumers

Status

  • std, #![forbid(unsafe_code)]. Safety classification in the crate docs: STANDARD.
  • Library with build script, no binary, no cargo features.
  • The vendored IDL file carries SPDX-License-Identifier: MIT.
  • 12 test functions in tests/roundtrip.rs.

zerodds-spatial-dds

DDS-Profile und Erweiterungen. SpatialDDS-1.6-Profil (OpenArCloud SpatialDDS) als Rust-Typen mit XCDR2-Codecs, zur Build-Zeit aus IDL erzeugt.

zerodds-spatial-dds stellt die SpatialDDS-Typen bereit. Sie sind nicht von Hand geschrieben: Das Build-Skript führt die mitgelieferte idl/spatial_core.idl durch zerodds-idl-parse, zerodds-idl-lower und zerodds-lang-rules und erzeugt die Module spatial und builtin mit inhärenten Encode/Decode-Methoden auf Basis von zerodds-wire. Die Kodierung wird pro Aggregat aus seiner Erweiterbarkeit gewählt, Little-Endian: @final als einfaches XCDR2, @appendable als begrenztes XCDR2 (mit DHEADER), @mutable als XCDR2 mit Parameterliste.

Erzeugte Module:

  • spatial::common: FrameRef, MetaKV, AssetRef, TileKey, Aliase für Vektoren und Matrizen, CovarianceType, CoordConvention.
  • spatial::core: PoseSE3, Aabb3, FramedPose, GeoPose, FrameTransform, die Union CovMatrix; dazu builtin::Time.
  • spatial::disco (räumliche Discovery): Announce, Capabilities, CoverageElement, TopicMeta, ServiceKind, Transform, Depart.
  • spatial::anchors: AnchorEntry, AnchorSet, AnchorDelta.
  • spatial::sensing::common, spatial::sensing::vision, spatial::sensing::lidar, spatial::sensing::rad: Metadaten von Datenströmen, Frames und Detektionen für Kamera, LiDAR und Radar.
  • spatial::semantics: Detection2D, Detection2DSet, Detection3D, Detection3DSet.
  • spatial::slam_frontend: Feature2D, KeyframeFeatures, MatchSet, Landmark, Tracklet.
  • spatial::vio: ImuInfo, ImuSample, SensorFusionSample, FusedState.
  • spatial::argeo: NodeGeo.

topic(operator, kind) bildet den Topic-Namen pro Betreiber sdds/<operator>/<kind>.

Abweichungen vom Original: Die mitgelieferte IDL fasst types.idl, core.idl und discovery.idl von SpatialDDS 1.6 zusammen und weicht an fünf Stellen vom Originaltext ab. Vier Stellen benennen Member um, die auf der Leitung erscheinen, weil die Original-Bezeichner ohne Beachtung der Groß- und Kleinschreibung mit einem Typnamen im selben Gültigkeitsbereich kollidieren: geopose → geo_pose, health → health_state, roi → requested_roi, codec → codec_kind. Die fünfte schreibt den letzten Enumerator von RadTensorLayout als _CUSTOM, ein maskiertes Schlüsselwort ohne Wirkung auf der Leitung. Member-Namen sind Teil des Complete TypeObject und bestimmen die Member-IDs von @mutable-Typen, wenn kein @id angegeben ist; Kompatibilität mit einer Gegenstelle, die aus der unveränderten Original-IDL erzeugt wurde, darf daher nicht angenommen werden.

Die Crate ist eine Typschicht. Sie enthält keinen Transport und ist laut README keine unabhängige herstellerübergreifende Interoperabilitäts-Zertifizierung. Die Abbildung auf ROS 2 liegt in zerodds-spatial-ros2.

Spec-Anker

  • SpatialDDS 1.6 (OpenArCloud, idl/v1.6): Quelle von idl/spatial_core.idl.
  • OMG DDS-XTypes 1.3 §7.4.2, Tabelle 59: Kodierung je Erweiterbarkeit (zitiert in build.rs).
  • OMG IDL 4.2 §7.2.3.1: Vergleich von Bezeichnern ohne Beachtung der Groß- und Kleinschreibung innerhalb eines Gültigkeitsbereichs, der Grund für die umbenannten Member (zitiert im Kopf der IDL-Datei).

Konsumenten

Status

  • std, #![forbid(unsafe_code)]. Einstufung in der Crate-Dokumentation (safety classification): STANDARD.
  • Bibliothek mit Build-Skript, kein Binary, keine Cargo-Features.
  • Die mitgelieferte IDL-Datei trägt SPDX-License-Identifier: MIT.
  • 12 Testfunktionen in tests/roundtrip.rs.