Skip to main content
object_pose is an edge perception node that takes a bounding-box detection from any upstream detector — call_model, barcode_reader, or any node that emits a detections array — plus a color-registered depth map, and returns a metric 3D position in the camera’s optical frame. A companion ROS 2 node (cyberwave_object_pose_transform) can tf2-lift that pose into base_link or any other frame configured in your robot’s URDF; the workflow node itself stays out of TF resolution so it runs unchanged across robots. Alternatively, set target_frame on the node itself (see Inputs below) to re-express position directly in the output, with no ROS 2 hop — this requires the twin’s driver to publish a live transform snapshot the node can read. Typical chain for a “detect and locate” perception workflow:

Inputs

Outputs

Camera calibration

Intrinsics (fx, fy) are derived at workflow compile time from the sensor’s declared field of view. The principal point (cx, cy) defaults to the image centre when no calibration data is present. For cameras with a factory-calibrated principal point — such as the Intel RealSense D455, whose cx/cy can be ~10 px off-centre at 640×480 — add the calibrated values to the sensor’s parameters in the asset schema. Without them, lateral pose error can reach several centimetres.
cx and cy are optional. Omitting them falls back to image centre, which is fine for cameras with low distortion or when sub-centimetre accuracy is not required.

Companion nodes

  • data_source (with data_type = twin_depth) — supplies the registered depth map.
  • call_model — upstream YOLO / VLM detector that produces the detections array.
  • barcode_reader — alternative upstream detector for code-scan use cases.
  • spatial_filter — filter the resulting pose by a 3D region of interest.
  • send_controller_command — send a robot command based on the located object.