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.
- Source: crates/spatial-dds
- API docs: docs.rs/zerodds-spatial-dds
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 unionCovMatrix; plusbuiltin::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 ofidl/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
zerodds-spatial-ros2.rmw-zerodds-shim, for its opt-inros2.spatial_bridgemode.
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.
- Quelle: crates/spatial-dds
- API-Docs: docs.rs/zerodds-spatial-dds
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 UnionCovMatrix; dazubuiltin::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 vonidl/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
zerodds-spatial-ros2.rmw-zerodds-shim, für den optional einschaltbaren Modusros2.spatial_bridge.
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.