# zerodds-spatial-ros2
Semantic conversions between [SpatialDDS types](../spatial-dds/README.md)
and generated ROS 2 common-interface types from [ros_msgs.idl](idl/ros_msgs.idl).
This crate itself is a type/conversion layer, not an RMW implementation or a
running bridge; [`rmw-zerodds-shim`](../rmw-zerodds-shim/README.md)'s opt-in
`ros2.spatial_bridge` (C2(6)) is the consumer that runs it as a bridge.
The [conversion module](src/convert.rs) covers poses, transforms, geographic
poses, 3D detections and IMU samples. The [naming module](src/naming.rs)
provides ROS-compatible DDS topic and type names.
Conversions are not lossless: for example, `PoseStamped` has no destination
for SpatialDDS pose covariance, and several identifiers/metadata fields have
no ROS counterpart. Each conversion's field-fidelity contract is documented
in `convert.rs`; reverse conversion defaults fields absent from ROS.
Both message families are generated by this tree's build-time code generation.
See [the build script](build.rs) and [tests](tests). Successful conversion
tests alone do not establish live communication with a native ROS 2 node —
`rmw-zerodds-shim`'s `tests/spatial_bridge_e2e.rs` demonstrates the bridge
in-process (a SpatialDDS writer through the bridge to a plain DCPS reader of
the ROS type, and back); a real `ros2 topic echo` against a native ROS 2 node
is a separate, manual measurement (commands in that crate's README).