Docs / Domain mappings / ros

ROS 2

A ROS 2 host is Rig when it emits entities with POD components keyed by schema ids it supports (honors). rmw, DDS, launch files, and bags are fulfillment - not this catalog.

Unlike OpenBIM, there is no rig.ros2.* layer. Portable meaning is spatial / I/O / sensor / SUDE. Product protocol names stay out of schema ids (same rule as rig.music.clock). ROS-only fields travel as x.ros2.* until a second speaker needs the same meaning in the catalog.

Design, physical simulation, tests, and training are robot.md. This page stays the middleware map.

Map

ROS 2 idea Rig
TF frame Entity with rig.meta.named + rig.spatial.transform
Parent frame rig.spatial.relationship parent
URDF link Same as TF; mesh / material compose as usual. The robot root is rig.sim.articulation
URDF inertial rig.sim.rigidbody mass, centerOfMass, inertia
Joint rig.sim.joint. Mimic is mimic / mimicMultiplier / mimicOffset on that joint. position and velocity are the joint state at save
Wrench rig.sensor.wrench
Range (one beam) rig.sensor.range
NavSat rig.sensor.gnss plus rig.place.geo
Joint command rig.sim.actuator target at save. A series is rig.anim.track on target
Depth image rig.sensor.depth plus rig.spatial.camera. The buffer stays in the host
Laser scan rig.sensor.lidar. The cloud stays in the host
Imu rig.sensor.imu. Orientation is the entity transform
Recorded take rig.sim.episode names the clip, the action tracks, the observation tracks, and whether the task finished
Graph member (ROS node) Entity + rig.meta.named. Namespace, domainId, FQN stay x.ros2.*. Do not call this a "host" (Rig host = live program)
Topic / service / action Named bus, like rig.io.osc. Message type strings and QoS stay x.ros2.*
Message payload Land on existing fields in Update (transform, rig.sim.rigidbody.velocity, rig.sensor.*, rig.pixel.source) - do not catalog Twist / Image as schemas
/clock SUDE dt. Do not reuse rig.music.clock
Camera stream rig.pixel.source when it is capture; frames stay in the host
GPIO / occupancy rig.sensor.gpio / presence; device may point at the node entity

World pose / TF lookup caches stay in the host - rebuild from local transform + parent, same as any scene graph.

Do not map ROS nodes onto rig.node.*. That catalog is an artist patcher (typeId = host behaviour). Different graph - see Grouping graphs (do not merge).

TF sketch

Two frames, existing schemas only:

{
  "entities": [
    {
      "id": "base_link",
      "components": {
        "rig.meta.named": { "name": "base_link", "stableId": "base_link" },
        "rig.spatial.transform": {
          "position": [0, 0, 0],
          "rotation": [0, 0, 0, 1],
          "scale": [1, 1, 1]
        }
      }
    },
    {
      "id": "camera_link",
      "components": {
        "rig.meta.named": { "name": "camera_link", "stableId": "camera_link" },
        "rig.spatial.transform": {
          "position": [0.1, 0, 0.2],
          "rotation": [0, 0, 0, 1],
          "scale": [1, 1, 1]
        },
        "rig.spatial.relationship": { "parent": "base_link" }
      }
    }
  ]
}

(Wrap in a full document with "rig" set to the current VERSION before validating.)

Stay out

Stay out Why
DDS discovery / ros2 node list Who is alive is a host cache - same class as a LAN scan table
QoS, last message, in-flight goals Runtime state - do not serialize
Launch, bags, rmw vendor Process graph and middleware are fulfillment
Point clouds, depth buffers, IMU covariance Samples and matrices are host cache
Policy weights Fulfillment. The take is rig.sim.episode; the solver is not
rig.ros2.* Product protocol names stay out of schema ids

A scan of who is up is not Contract meaning. RigKit's x.rigkit.net_scan / x.rigkit.net_host stay host extensions.

Encodings (fulfillment)

Surface Role
TF2 / URDF Map frames and links into spatial transform + relationship; joints into rig.sim.joint; a drive into rig.sim.actuator
Topics / services / actions Pub/sub and RPC in Update; write portable fields from payloads
x.ros2.* Namespace, domain, message type, QoS - travel; do not port
Bags / launch Replay and process graph stay in the host

Honest limit

Two hosts that speak transform + relationship + the joints, drives, and sensors they share can exchange a robot pose tree and a recorded take as .rig. Round-tripping every ROS message type, QoS profile, discovery snapshot, and bag is not required. A host that needs the rest keeps it in ROS and maps what it understands.